RSSAmplifier

Blog

Jakub Chodounský's Blog

chodounsky.comRSS feed ↗10 posts

Latest posts

One server. Small business.

I host a modest Rails app for my curated newsletters 1 . It serves over 100,000 subscribers and sends hundreds of thousands of emails each month. I built it in 2014, and it’s been the backbone of my small business ever since. It’s deployed on one tiny server for under $30 per month 2 . The app supports complete subscriber life cycle, content management system, usage tracking, and whole link…

Social media preview images for static website

In this article, we’ll generate social media preview images for a static website in Ruby. In the end, we’ll be able to expose them in og:image and twitter:image meta tags. We’ll add them to a blog generated by nanoc framework. But the idea translates to other static site generators like Jekyll or even dynamic frameworks like Rails. Here’s what we’ll have to do: generate an image, add it to nanoc…

Semantic search in Rails

Semantic search allows you to find data based on meaning. This is different from a traditional lexical search where you are looking to match exact-ish keywords. Searching by meaning should improve the result’s accuracy and the experience. A user can focus on their intent and not on “hacking” the search tool to get decent results. Note: it’s easy to implement a full-text lexical search in your…

LastPass slows down your browser

My old 2013 Macbook seemed a bit slow in the last few weeks. Although it handled most of the tasks well it became sluggish when browsing the internet. Well, surfing the web is one of the more compute-intensive tasks these days so maybe it is time to buy a new machine, I thought. But then while working on Programming Digest newsletter over the weekend I noticed an issue coming from one of the…

Suggesting email address using string similarity algorithm

Recently, we noticed a large number of unconfirmed accounts. Those were not spam accounts they looked like legit users. Are we losing customers that early in the funnel? When we looked closely we noticed a similar pattern: john.doe@gnail.com jane.doe@yahoo.co.nz tim@outlook.con susan@gmail.co.nz All of those email addresses have a mistyped domain. That’s not great. I could imagine a customer…

The Great Computer Experiment: Ruby Edition

Can a second-hand desktop computer from 2013 run specs? How much does a touch bar speed up an integration suite? Do I need 6 cores to run rails new blog ? In this article I’ll put 4 machines and 5 different operating systems through a true test. What am I trying to achieve? I don’t know. But I intend to share my experience with you. Computers Recently, I’ve been playing with different computers…

Progressive web application as a share option in Android

Progressive Web Applications are becoming more and more powerful and now can be registered as a share intent on Android devices. This means that any Android application can share directly to your web app through the standard native sharing dialog. It also works the other way around. Your PWA can trigger the native share dialog and send data to other applications. This brings them one step closer…

Tips for getting a programming job abroad

A few years ago I moved from the Czech Republic to New Zealand. I didn’t have a network, a job offer, or a scheduled interview. There are lots of benefits of moving to a different country. You are opening yourself to different ideas, mindset, and experience. You can learn the language, better understand a foreign culture, and adopt new ways of doing things. It is a scary step but one worth doing.…

Garbage collection in C#

When you are programming, no matter the task on hand, you are manipulating some data. These are stored in basic types and objects and they live inside computer memory. Eventually, the memory fills up and you need to make more room for new data and discard the old one. You can do it either by hand, like C and C++ programmers (used to) do, or use a languages with a mechanism that does it for you. In…

Automate your macOS development machine setup

My laptop was running a bit slow and there was an OS upgrade that I’ve been postponing for quite some time. So, on one rainy Friday afternoon, I decided to get my hands dirty and do a clean install of macOS Sierra. And why not automate it so I don’t have to think about it next time? One of the benefits is that my team mates can use chunks of the configuration that are relevant to our work and use…