I was still tinkering with my pet project a little bit - connecting it to social media was an interesting learning experience as I had to create tiny service in Node.js due to fact Crystal lacked proper libraries (and that is ok, you don’t have to duplicate everything in every language). Below are some short notes that might help you a little bit if you’re trying to do similar thing.
It was middle of a week, around noon I think. I thought to myself “I should write a yet-another NES emulator, that would be awesome!”. Few minutes later I am reading blogposts, articles, browsing repositories. And I am like “Damn it looks complicated”.
I noticed funny thing happening in my most recent pet project. All of the sudden (auto incremented) primary key was out of range for my smallint column. But how come? I had like 15 records in that particular table. It turns out it was all by design and completely makes sense when you think about it, but I managed to miss that anyway. The problem is when you do an upsert sequence on your primary key will be incremented anyway - it had to be obtained before actual insert so when you take a step back it’s like pretty obvious ;).
So I wrote my first smallish web app in Crystal and it’s been running for over two months now without much of supervision (thanks to monit and systemd). It basically, um, collects some metadata from IMDB every week or so. Based on that data I’m trying to find underrated movies worth watching. Some general thoughts for future-me:
I looked at my free disk space and I was like What the f*ck?! Quickly I decided to Erase them all and reclaim my space. 🤟 Here is how.
If you want to install latex on your Mac you have two most common options - install Full MacTeX or smaller distro - Basic TeX. See package listing here. First option is easy, but package weights few gigabytes of data you probably won’t use anyway. The second one might be problematic for latex newbies like me, so here are some scribbles that hopefully might help someone.
Note: Checkout part one about web frameworks options in Crystal. Once your Kemal app grows a little bit it seems obnoxious to declare tons of variables that are automatically passed down to the view. Personally what I like to do when I’m feeling that the amount of variables is too damn high and the logic used inside the Kemal router is getting hard to reuse - is to introduce a presenter (simple class, no magic there) that basically wraps whole logic responsible for initializing variables I will need.
In previous post I briefly discussed web frameworks options for Crystal. Once you have your main web application up and running usually pretty soon you need some sort of background worker - to do some heavy lifting, fetch some data and whatnot. In Ruby world you would probably choose between two most popular and straightforward redis-based solutions - resque and sidekiq (obviously there is much more to choose from).
After over two years (dang that was quick 😳) I have decided to give Crystal another go. During those two years some nice libraries appeared and language seems quite promising - I hope it will gain some traction in the future. I will try to make a series of short posts regarding Crystal within this month as I think it lacks documentation/references and attention it deserves - and as I’m taking some longer time off from IT in general very next month I have to hurry :P.
Last month I decided to quit, to stop being a manager/developer. 5 years ago I was looking for a place where I can improve my rails skills and suddenly I stayed at that place for 5 full years :). Below are the scribbles, I hope to read them again in few years (dang) and see how far I /hopefully!/ grew from there.