Few weeks ago I was upgrading legacy infrastructure for small sized project and decided to go with systemd for service management as I had quite good experience with it while tinkering with my toy apps written in Crystal. If you want to use systemd for rails/ruby project - there is a great news everyone! capistrano-systemd-multiservice will basically do the work for you and it I must say - it works just great.
Fortunately thanks to very smart people in the community - yes there is! So worry not, warrior of legacy code, protector of good practices. Now you have tools that will help you lead the way into the clean and solid code, where tests are always green and developers are happy. Ok, maybe I got carried a way a little bit here, let’s get down to the business ;). Rspec 3.3 introduced bisect command which is truly awesome, from docs:
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).