Creation date: 2020-06-05
This was my next up from last time and it feels like I should actually follow my plans one day...
How about those unit tests?
Being able to hot start
So provide a partial solution to find a feasible solution faster
If the partial solution is wrong or optimality should be reached then backtrack all the way back
Oh yeah I need to decide on the logo. Please help! Logo issue
At least I did some of it.
I have to say that in this times I really don't have a timetable and just do what I want which sometimes is not that much :D
Sorry for not posting consistently. In this post I try to bring you to the current stage of what I'm doing.
I finally decided on a logo for the constraint solver which took a very long time but I'm finally happy with a design that is mostly inspired from @owiecc and @pdimens on this issue.
Thanks everyone who supported me on that decision and gave me tips over Twitter and GitHub as well as friends over WhatsApp.
I'm happy to present my solver with that logo next year at the JuMP-dev 2021 conference :)
You see that this is one of those posts that have too many topics in it as I wasn't able to write down smaller ones in between. Hope it is still a useful one and doesn't read like a boring diary :D
Two awesome guys in the julia community, namely Jacob Zelko and Miguel Raz Guzmán, pointed out exercism which is an awesome website to learn a bunch of programming languages including julia. I feel like my code is not too bad but one can always improve, right? Especially in those areas I normally don't really use like strings, chars and similar concepts which don't occur often in mathematical programming. I mean I study computer science and I have the general knowledge, hopefully, but every language is different so it's always good to learn. Anyway I decided to solve some problems on that website which works normally in the following way.
download a problem
solve it locally
check the test cases
submit your code
get feedback from a mentor
I normally know websites which use the first 4 steps but normally I don't get real feedback about code style or performance. The "problem" is that you have to wait for mentoring as it's not done by computers (yet). Because I'm in central Europe I had to wait quite some time before I got feedback to a solution I submitted when the folks from America are normally sleeping, I actually signed up for being a mentor myself.
I got sucked in immediately after an awesome mentor worked through my submissions quite fast and I mentored students in solutions I got mentored it already. Mentored quite a lot of people and got some positive feedback but most importantly for my egoistic self I learned a lot by mentoring others and reading their code. Often I have an immediate idea how to tackle a problem and get fascinated by other peoples solutions which are sometimes faster or better readable or maybe just different.
This will probably increase my ability to read code from others and get some new ideas myself.
You might have seen this already but some of you maybe haven't: I do a weekly live stream on Twitch now. Check it out Twitch: opensourcesblog.
They are especially for beginners in Julia as some people mention in the comments from time to time that my blog is too advanced for them when I wrote a simplex solver or probably this series as well sometimes. I don't personally think that it is that advanced but I understand when you don't want to read 22 blog posts about a constraint solver. Not everyone has that much time. My audience here is probably quite small. That is one of the reasons why I try to do some simpler stuffs from time to time on YouTube and now on Twitch.
While I stream I solve the project euler problems from 1-100 which are solved quite often and are free to share. For the harder problems the solutions should normally go public. I solved the first 6 problems live now. Before I tell you how it went personally let me mention the general outline of my solutions:
Write a naive solution first
Test as many different approaches as I can come up with in the stream
Benchmark as well
Talk through the general progress of course
I also benchmarked against codes from viewers and show some general things I do when I'm stuck like getting help from the REPL and the usage of the basic tools like Revise.jl.
Some things I've learned:
Extra stress of performing live
Feeling stupid a lot of the times
Live texing is even worse (Stream where I solved problem 6)
Basically I try to get out of my comfort zone and try something new. The problems itself are not that hard but for some of them there are some non obvious ways to get better performance.
If you want to join next time: Follow me on Twitch or just on Twitter where I post when I stream. In general I stick to the schedule:
5pm UTC on Wednesday
There are some other streamers you want to check out like the two awesome guys mentioned above. To see all of them and get when someone is streaming you probably want to join the #streaming channel in the Julia Slack.
I know I'm very good at selling my stream when mentioning that I feel stupid but yeah maybe you want to see someone fail :D as in those YouTube spirals...
As mentioned before I try to make the blog the way I want it to be by having full control and using Franklin.jl which is a static site generator. All of this stuff is in my free-time but I appreciate support if you find anything of the stuff I write helpful. Therefore if you have some money to spare please consider subscribing on Patreon. Oh man that sounds so much like begging for your money...
It's really just if you want to support this blog, YouTube channel and my live streaming AND when this blog helped you at least once for something big or several times on smaller things.
Anyway supports get early access to blog posts and videos (not livestreams of course) and get the new layout already which is still experimental but I think already better than the old one. All for just 1$ per month. I can't even compare that to a cup of coffee as some other people do all the time :D (BTW I don't drink coffee...)
On the left you get a nice navbar now with navigation to categories and a search tool. I think that are two really weak points of the current blog. It will also be much faster to load as it is a static website. I've set myself the goal of 50$ per month to finish the new blog but I do understand that reaching that is probably not easy in the forseeable future.
I'm already working hard on it and basically just need to port all old posts to the new system to use it as the new layout + fixing some small things and maybe adding some useful features. Nevertheless that is something you would invest in with your money ;)
Features for later with more support and time:
better readability of code changes like divs
navigation to old posts when I change that code
In general I try to make it a unique experience to get a better feeling of the code and make it easier to navigate the experience.
There will be a new post in a few days about a new constraint type which feels a bit odd to just add it here in the housekeeping post. Yeah I intended to do that as you can see in the screenshot :D
Will be back soon ;)
Thanks for reading and special thanks to my six patrons!
List of patrons paying more than 4$ per month:
Currently I get 19$ 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
I'll keep you updated on Twitter OpenSourcES as well as my more personal one: Twitter Wikunia_de