Posts
Sidekiq and transactions
Sidekiq uses Redis as the underlaying datastore for jobs. At the same time jobs often manipulate data in a database. This leads to issues when jobs access records that were not committed yet.
Modern setup for GitHub Pages
In this blog post I’d like to share how I upgraded my Jekyll setup to Jekyll 4 and a dockerized development environment.
Black week for Berlin Tech Workers
It’s this time of the year again. After people bought a lot of cyber shit, companies start with firing. Great gift for Christmas, really. November 2020 Liefery, November 2023 Marley Spoon.
Docker for skeptics
“I first tried Docker in early 2014. I was working for a software agency. We were looking for ways to move away from manually configuring virtual servers for Ruby on Rails application deployments that involved copy-pasting a bunch of commands from a runbook. […]”
The joy of slow programming
I had a difficult relationship with side projects in the past. Basically I could never get anywhere with them. Thanks to a set of techniques that I called “slow programming” I started to develop side projects in a way that brings me joy. And this is the story that I’d like to share with you.
Remote-first in the Time of Corona
My personal perspective on how our team with remote-first processes was affected by the Corona crisis and what I learned from it.
Driving change - procedure and example
One of my favourite topics during job interviews is driving change. “Do you remember a situation when you wanted to change some process in your team? How did you approach this situation? How did you convince your colleagues?”
Boring Ruby Code
In 2017 I delievered a talk with the title “Boring Ruby Code” at two conferences - Brighton Ruby Conf and Southeast Ruby. After that I always wanted to write a blog post that summaries the approach, but I have never gotten around to do that. Today is the day so here we go.
How we do (did) code reviews at Liefery
When I started working for GitLab I experienced for the first time an engineering culture where code review was really important. After I switched to Liefery I had a lot of thoughts on the topic of modelling a code review process that is tailored to the organisation’s needs. You can read about it here.
Mock current time in Elixir
Coming from the Ruby/Rails world I was searching for a way to mock the current time in my Elixir test suite, something like Timecop for Elixir. I didn’t find anything that suited my needs so I decided to give it a go by myself.
Elixir "with" syntax and guard clauses
In this blog post we will take a look at a simple example of refactoring Elixir code using
with
syntax (called a “special form” in the documentation), and guard clauses.Case insensitive column in Phoenix
I wanted to have a case insensitive database column to store email address in the open source application I’m working on. I’m using PostgreSQL and there’s a nice extension that does exactly that - citext - so I gave it a try. I spent some time figuring things out so now I’m sharing the knowledge in this blog post.
Upgrading ActiveModelSerializers from 0.8 to 0.10
ActiveModelSerializers is a popular solution in the Ruby / Rails community and I even wrote an article about it a few years ago. Recently I had a chance to cover upgrading ActiveModelSerializers from 0.8 to 0.10 on my company’s blog. You should take a look!
Make your meetings more async
Working at GitLab - fully remote, asynchronous and distributed company - was a valuable experience. One of the most important things that I learned was the approach to meetings. In fact, remote meetings at GitLab were far more effective than most of on-site meetings that I participated in. Now I’m back in an office, but I think that many principles and rules can be applied in an on-site company as well.
ETag tracking and Elixir
I am really fascinated by the idea of abusing ETag (caching mechanism built into HTTP protocol) for tracking users. It is not that I want to do in a real production application; I just appreciate how simple and clever the “trick” is. Also, not so many people seem to be aware of it.
Rails + Postgres Array + ANY LIKE
Ruby on Rails has a good support for Postgres Array type. I really like using this feature when creating a separate database table sounds like over-engineering. In this short post I want to share my solution for the following problem: “find a record for which any of its tags contains a given string”.
Marketing for programmers
I’m bad at marketing products that I created. Just today I had to shut down Codebase Health Check, because I couldn’t get enough customers in the last six months. Apparently it’s not so easy to build a profitable business as a side project. Fortunately, you have a chance to be much better at marketing than me.
How to remove Action Cable from a Rails app
This is your complete guide to removing Action Cable from a Rails 5 app.
Don't automate it (yet) - a story
Programmers love to approach new business problems thinking about frameworks, libraries, tools or methods which can be used. However, my experience shows that quite the opposite way is most successful - postpone writing the code as long as it’s possible.
Integrating Tiddle with Ember Simple Auth
Tiddle is my gem which provides Devise strategy for token authentication in API-only Ruby on Rails applications. Its selling point is that it supports multiple tokens per user.
Different approach to Ecommerce on Rails
I always wanted to build my own ecommerce platform from scratch. That’s not because I don’t like to reuse existing code - I really love to. That’s because I believe that we can do better. Now I have a chance to do it.
Emails with "View in Browser" link in Node.js
“View in Browser” link is a common feature of email campaign systems like MailChimp. It’s a really nice idea - when you code your shiny CSS-heavy emails you want to have a fallback for malfunctioning email clients.
Two sad things about software eating the world
My mobile network operator keeps calling me. They called at 12:13, at 15:46, at 18:36 and at 20:54. I’m using a pre-paid, so the only thing they can offer me is a subscription. Obviously, I’ve told them many times that I just don’t want it.
Contextual validations with form objects
When you deal with complex forms The Rails Way is not enough. You have to introduce another abstraction for handling more sophisticated validations.
Read before you commit
This is going to be a short piece on one particular habit which I practise when writing code. It’s extremely simple and obvious, but I’m surprised how many programmers skip it.
Heroku - process exited with status 0
Setting up Sidekiq on Heroku should be easy. Everything is so well-described that I didn’t expect any problems.
CSS Refactoring: From append-only to modular CSS
Definition: Append-only CSS: CSS you are so afraid of changing that you exclusively append new rules to one never-ending file, leading inexorably to bewilderingly complex selectors with CSS specificity scores so high they’ll break your calculator. Sounds scary? Sounds familiar? Read on.
Routable modal dialog in Ember.js
I hate using modal dialog when the new content could be easily nested in the same page. I just don’t like the user experience of a popup. Why limit yourself to a small box when you can show it in the full-blown layout?
Beautiful Ruby, convenient Rails
In this blog post I want to reflect on things which make Ruby a beautiful language to read and write, and on things which make Ruby on Rails a convenient tool to quickly prototype.
Token authentication with Tiddle
This post describes how to use Tiddle - gem for token authentication which I created. Tiddle is a Devise authentication strategy which supports multiple tokens per user.
Using message queue in Rails
This post describes the application architecture pattern which is (in general) nothing new, but (from my experience) rarely applied in the Rails world. I’m talking about the nice and simple abstraction - message queue. But let me start by describing the goals I want to achieve and some alternative solutions.
10 easy-to-fix Ruby / Ruby on Rails mistakes
Programmers make mistakes. Some of them are just annoying (for others to read) and some are really dangerous. Here is my selection of 10 mistakes done by Ruby / Ruby on Rails developers. These tips are easy to follow and can save you much time of later debugging.
My take on services in Rails
It’s been a while since my last post. I was writing my engineer’s thesis which caused general disgust towards writing at all. Anyway, these sad times are over and here comes the shiny new blogpost about introducing service layer in Rails applications. It does not contain any breakthrough thoughts, but is rather a mixture of ideas I learned from great Ruby developers.
Using Lineman.js with AngularJS
I’ve recently started playing with AngularJS. Coming from the Rails world I expected a structure enforced by the framework, good default configuration and separation into development, test and production environments.
Black-box testing
This time I want to share my thoughts concerning two approaches to testing - black-box testing and white-box testing. I gave a talk about it at Łódź Ruby User Group. You can find the slides here.
wroclove.rb 2014
Here you can find a couple of my personal opinions about talks at wroclove.rb 2014 which took place in March 14th - 16th in Wrocław. I tried to keep my feedback 100% positive in order not to upset anybody, but if you are - write a comment and we’ll discuss.
Learn Chef - it's hard but worth it
Recently I’ve been forced by the circumstances to learn Chef. It’s simply not possible to manage about 15 servers without any automation tool. I’m not a master of shell scripting (neither I like it), so using Ruby in this field sounds great to me.
JSON API with rails-api and active_model_serializers
This post is based on my presentation given at Łódź Ruby Users Group.
Fighting Paperclip Errno::ENOMEM error
We are using Paperclip to handle image uploads in one of our applications and after migrating from 4 GB instances to a number of really small 512 MB instances we started to experience an error which looked similar to this:
subscribe via RSS