Creation date: 2020-02-28
Yeah some of you might wait for another post about the ConstraintSolver project but I needed a little bit of break this month. There are some things I want to shortly mention in this post. It's probably one for those of you who are interested in all kind of stuff that I'm working on and not a special topic.
I'll talk about YouTube videos which includes the Mandelbrot set and two Enigma Videos and future projects. Afterwards I'm talking about the future of the blog and will have an extra section about a very fresh idea in my mind which I just want to put out there for now :D
Let's start with YouTube videos. For those of you who don't follow me on Twitter or Patreon or the Enigma post at a later stage probably haven't seen my YouTube videos. I've created a YouTube channel a year ago and just posted some visualizations there for my Kaggle and sudoku posts. I thought that for some projects it might be nice to invest a bit more time in visualizing them and talking about it. I myself watch more YouTube videos than reading blog posts and ~~probably~~ more than I should.
I'm still going to blog more than I make YouTube videos for several reasons:
You can copy and paste my code directly
You can read it as fast or slow as you like
You don't have to deal with my accent (just with my writing style)
I can edit stuff easily
I can update my posts
I can more easily link to other sources (yeah I can use the YT description)
It feels like less work :D
In general I think for coding projects blogging is the way to go. Nevertheless visualizing stuff is easier in videos.
For now I created three real videos:
Both Enigma videos are linked to my blog post about it. Where the first one is a simple explanation of how the machine works and the second one is about how to break the cipher if we just have a small clue about what the message might be about.
The video in between about the Mandelbrot set was just a simple idea I had one day where I wanted to do some "live" coding and thought the Mandelbrot set is a nice subject to visualize and do in such a session as it is easy to implement and I can use my GPU... finally :D
In the video you see a clip zooming into the Mandelbrot set and then coding a still image of a Mandelbrot set using the CPU first and the speeding it up with the GPU. I might write a blog post about that project as well including the zooming part which is not that fancy implemented I think.
I'm thinking about doing some basic coding videos maybe also comparing Julia to Python a bit. Maybe doing some performance profiling, GPU utilization or parallel programming, funny ones with Emoji support? Just some random ideas in my head.
You're generosity hits me by surprise. I've created a Patreon page last April and my only goal was to don't loose money with this blog. I have to pay for the server and the url about 5$ per month. Nothing happened for a couple of month but probably because I didn't promote it or put more time into reaching the goal. In October I reached my goal and currently I'm at 17$ per month and that is just awesome.
Now what does this mean for the future of the blog? I have the goal to change the platform and go all Julia with it. For this I decided to use Franklin.jl. There I have more freedom and the loading time will be faster. Currently for some of you it might be a pain to load the website. It will still be only served from my server in Germany so the latency will not improve but the general loading time as Franklin is a static site generator.
What other benefits? I'll have a table of contents which kinda is possible now but not in a way I would like it to have. All my posts are just ordered by date on the front page now and that is extremely annoying. You should have an easier time to find what you're looking for. If you're only interested in ConstraintSolver.jl then you should be able to easily find out if there is a new post on it without scrolling or changing the page. Especially if you just start with the series you would have a hard time to find using the front page.
The new blog will have a sidebar with series like Kaggle, Constraint Solver, Simplex, ...
Let's move to the real features ;)
I would like to create diffs like this if I change something in a function and wrote a function which creates these.
If you're reading this on your desktop machine you will see code on the right hand side of the main blog to not scroll back and forth all the time. That space can be also used for visualizations or simple notes.
I would like to improve my coding development environment. There are some pitfalls I run into from time to time as well as some tasks that just take time and can be automated.
This probably sounds crazy but anyway I want to push it out here:
I want to create a tool that
helps finding code you've written already
give hints on whether something should be refactored
checks for performance issues
Being able to quickly search over all my Julia projects to find out how I did something in the past.
I want that the tool automatically improves my code. Yeah I know I'm crazy so you ask how?
Sometimes I copy code from one project over to another one but only small snippets which don't have to be useful for others so making a Julia package out of it is not worth it. Anyway I copy code
x from project
X to project
Y. Then some days later I change the code in
Y and make it faster but forgot that I copied it from
X. Yeah I could make a comment every time but do I do that? Now the tool can check whether I improved the performance and if it does the same as before based on the test cases which use the function anyway. Then the tool can notify me that I might want to change it in
X as well.
I tend to write long functions sometimes and everything I mention here can probably be solved with changing myself but you know that is hard so why not automate it in a project that is even harder? :D
The tool could find snippets in long functions which only depend on few arguments and could give me the hint that I might want to make a function out of it.
Sometimes I write the same code again in different functions but in the same project. Why not make it a function?
Julia has tools to check whether a function is type stable but do I check that for every function? No! Maybe if I myself find out that is slower than I expected but maybe it could be faster than I expected! The tool can just check for every new function whether it is type stable.
If I change code in the constraint solver and hope to make it faster and it seems like yeah that is faster for killer sudokus for example. I run the tests and everything works but maybe it is much slower for another project. Therefore people do regression testing. Why not do regression tests automatically even unit regression tests that I don't have to write myself. The tool knows what input each function normally gets and can run the tests over them measure the timing and tell me that this function is slower for these inputs and faster for these. Maybe I can make it fast for both?
Is this something you invest money on if you support me on Patreon? :D Well it's basically just an idea that I somehow find fascinating and imagine that it would be nice to have it works flawlessly but I know from my projects that it will probably not and it will take a lot of time. I'm not fully convinced of this tool but wanted to bring it out to a wider audience and maybe get some feedback.
In general I normally code stuff to learn more about how to code stuff or learn about other topics and not necessarily to create something useful out of it. I mean: Do I need a simplex solver or the Enigma machine?
If you kind of like the tool and have some ideas: Please reach out!
That's it for this post. If you enjoy the work I do please consider to sponsor me for a dollar a month to have early access to my posts and videos.
Thanks for reading and special thanks to my five patrons!
List of patrons paying more than 4$ per month:
Currently I get 17$ per Month using Patreon and PayPal.
For a donation of a single dollar per month you get early access to the posts. Try it out at the start of a month and if you don't enjoy it just cancel your subscription before pay day (end of month).
Any questions, comments or improvements? Please comment here and/or write me an e-mail firstname.lastname@example.org and for code feel free to open a PR/issue on GitHub ConstraintSolver.jl