Stand with Ukraine 🇺🇦 We need YOUR help to defend against Russia's unlawful aggression.

Інженерна підноготна Сінтри
Як ми удвох розробляємо найкращий сервіс для ведення денного бюджету.
June 4, 2022

M1 MacBook Air: a laptop that does not suck
Top performance and no fan. For me, it's the best laptop.
January 16, 2022

Почему я 11 лет работаю в Railsware
Railsware - компания хороших людей и открытой критики
December 26, 2021

Always cancel promises started in React.useEffect
If you start a promise inside useEffect, make sure to cancel it in the cleanup handler.
December 11, 2021

How to build Go projects with multiple private dependencies in GitHub Actions
A path without giving up private repos or giving out access tokens with broad permissions.
November 30, 2021

How we made our Rails feature test suite twice as fast
Cut down on repetitive parts, precompile assets, avoid making external requests, and make the app faster.
October 8, 2021

How to fix "No bundle URL present" and change the packager port in React Native
TLDR: set port in Metro options, and set RCT_METRO_PORT in React-Core preprocessor definitions. But wait! There's more.
August 9, 2021

The web architecture ladder
There are many approaches to creating a web site or application. When starting a project, it's important to focus your efforts on the ground-breaking, value-creating bits, and save on everything else.
June 24, 2021

Reselect memoization explained
Reselect does a good job of optimizing with referential transparency, but does nothing for referential stability.
June 13, 2021

Apple Silicon — M1 for Ruby developers
Is M1 ready to accept Ruby developers? Definitely.
May 15, 2021

How to set up a quasi-kanban for Jira in VS Code
To paraphrase Alf, if you don't like Jira, you just don't know how to cook it
April 29, 2021

Migrating a 20K SLOC production project to TypeScript
I've migrated Sintra from JavaScript to TypeScript. It took me a couple of weekends to finish. I'm incredibly happy with the result.
March 28, 2021

A review of the Awair Element indoor air quality monitor
A five-dimensional air quality monitor with data logging, a pleasant design, and convenient integrations.
March 8, 2021

Keychron K3 wireless mechanical keyboard review
Unbeatable feature set for a reasonable price.
March 2, 2021

How to shim legacy dependencies in Webpack (like jQuery)
You don't need to make it complicated.
February 16, 2021

Rails is still the king
That is if you are making a web app with lots of complicated serverside business logic, but it doesn't have to crunch large amounts of data.
January 31, 2021

Lunar lander software development
A successful software product is a compromise between three ideals: architecture, usability, and vision. If you want to succeed, make sure they are are balanced.
December 17, 2020

Things I've learned from writing React apps
Some accumulated practical wisdom.
February 26, 2019

I made a React hook to get the current date
A real life example of using hooks to solve a problem.
February 24, 2019

LG Ultrafine 4K 21" review
Best Mac monitor (asterisk) (asterisk) (asterisk)
July 27, 2018

Best code in available time
Your job is to find the optimal approximation, somewhere between spaghetti code and perfection.
June 4, 2018

A polyglot's view of Ruby&Rails
Слайды моего доклада на Ruby Meditation
May 19, 2018

The JavaScript that I like
I'm not going to criticize or evangelize JavaScript here. Let's unwrap "my" JavaScript assumptions one at a time.
April 18, 2018

React / Redux - инженерный подход к фронтенду
Я расскажу о нескольких прикладных штуках, которые я обожаю в работе с React, но о которых сложно догадаться по рекламным материалам.
October 18, 2017

Turning an iPod Touch into a high-tech weather display
With the power of WUnderground, Clojurescript, and some double-sided tape.
August 23, 2016

How to test your gem against multiple Ruby versions on CircleCI
It's much easier on Travis. But sometimes, you don't have a choice.
August 15, 2016

SB - a command-line helper for Sublime Text projects
My favorite way to create and open projects in Sublime Text
August 13, 2016

How to geotag photos with
If you are already running, why not utilize it for something useful?
August 5, 2016

Messagepack-RPC - a fast, simple protocol for microservices
If you care about your RPC performance at all, you should be using a protocol with a persistent connection - and MessagePack-RPC is a great choice for Ruby projects.
August 3, 2016

How to serialize moment.js values with Transit
Make sure to pass the right constructor into the writer handler.
January 6, 2016, revised July 3, 2016

How to log errors coming from React components
And make use of propType validation.
December 24, 2015

Zen estimation - bare minimum iteration planning
Bring focus from fiddling with abstract numbers of "points" to planning out work into actionable steps.
December 14, 2015

How I used Let's Encrypt to enable HTTPS on this blog
TL:DR - it was free and took an hour to figure everything out.
December 8, 2015

How to make a Java daemon with start-stop-daemon
November 21, 2015

Demystifying direct uploads from the browser to Amazon S3 - with a full example in 167 lines of code
November 11, 2015

How to build MAPS.ME for Mac OS X - an offline OpenStreetMaps browser
October 21, 2015, revised April 24, 2017

Handle large JSONs effortlessly with jq
September 15, 2015

The genius of React
React makes it possible to code modern web application with the same simple approach as traditional, non-interactive websites.
August 30, 2015

Companies that are using Clojure
August 20, 2015

How to index mixed-language content with Lunr.js
August 9, 2015, revised April 11, 2017

OAuth2 is easy - illustrated in 50 lines of Clojure
July 30, 2015

Some custom git commands that I use
July 30, 2015, revised December 4, 2015

What separates software consultancy from engineering? Breadth of vision
July 13, 2015

A formal prover for certain programs in the Javascript programming language
This thesis is concerned with developing an automatic system for sound formal proofs of programs written in a certain imperative subset of Javascript with logical annotations.
July 6, 2015

Blog article versioning in Ruby on Rails - a post mortem
March 28, 2015

Blog comments in Ruby on Rails - a post mortem
March 27, 2015

Best practice: use your global .gitignore
I was setting up a new project yesterday, and it was missing a .powenv file I needed for Pow to work.
April 15, 2014

Fix for Raspberry Pi / ODROID silently failing to boot
If you have USB drives in your /etc/fstab and your Linux system fails to boot after registering in the network, try this:
April 14, 2014

No SSL, no problems
Two days ago it turned out that never getting around to setting up HTTPS access to my websites actually made them more secure.
April 9, 2014

На Маке нет встроенного графического редактора а-ля Microsoft Paint, зато есть встроенная программа для построения графиков – Grapher.
March 30, 2014

Сравнение ODROID-U3 и Raspberry Pi
Если хочешь поиграться, рекомендую Raspberry Pi. Если хочешь собрать домашний сервер, который умещается в мыльнице, не шумит и сказывается на счете за электричество, выбирай ODROID U3.
March 14, 2014

Чтобы выделить на что-то время, нужно у чего-то его забрать
Чему меня научил недельный эксперимент по учету потраченного времени.
March 14, 2014

Отзыв о доставке кофе с Square Mile Coffee Roasters
Уже два месяца мне присылают кофе из Square Mile Coffee Roasters, что в Лондоне.
March 9, 2014

Советы по выбору фильтровой кофеварки
March 9, 2014

Кофейная зависимость
Люди обычно бросаются словами «кофейная зависимость», как будто они ничего не значат.
March 5, 2014

Be so kind and warn users before navigating from an unsaved form
I lost the text of the article I was just writing because I accidentally hit the Chrome shortcut for “Back” – Cmd+[ – it’s the same key that un-indents text in Sublime Text. So now I’m writing this new article after fixing my form.
March 2, 2014

How to use PaperTrail for soft-deletion
PaperTrail is the leading Ruby gem for ActiveRecord versioning. A less known fact is that once you use PaperTrail, you also get undeletion for free.
February 28, 2014

Memcached expiration time: a horrible API fail
The description of the memcached protocol says that the expiration time:
February 26, 2014

Some of my chef definitions that help deploy Rails apps
I DRYed up my Chef deploy scripts and extracted some definitions in to a cookbook: chef-rails-helpers.
February 26, 2014

How to find files with filenames that are too long
Here’s a neat regular expression trick that you can use to find pathnames longer than a certain length, say, 20 characters:
February 19, 2014

Two reasons not to use exFAT on your NAS
I’ve been using the exFAT file system on my Raspberry PI-powered NAS for awhile. I’ve chosen it because exFAT is the only “modern” filesystem that has read-write support in Windows, Linux and OS X. I use all three, so it was beneficial that the drive could be connected to any OS directly over a super-speed USB connection.
February 19, 2014, revised February 25, 2014

Windows context menu command to watermark images
Imagine someone asked you to provide an effective way to put watermarks on some images before posting them online.
February 13, 2014

How to configure Dual WAN on AsusWRT routers
The AsusWRT firmware supports something called "Dual WAN" - an option to have two Internet channels connected.
January 30, 2014

SSH key forwarding with Chef deploy from git
Overcoming hurdles in passing ssh-agent through user sessions
January 30, 2014

Рекомендую: читалку Marvin для iPhone
Посвящается памяти прекрасной читалки Stanza, которую съел Amazon.
January 30, 2014

Впечатления от ручной кофеварки Chemex
January 29, 2014

Рекомендую: сделать из Caps Lock "гиперклавишу"
Для начала, что такое «гиперклавиша»? Это дополнительная клавиша-модификатор. Такая, как Shift, Control, Alt (Option), Command, Windows. Вот так все просто.
December 12, 2013

Рекомендую: Humble New Tab Page для Chrome
Humble New Tab Page уже года два служит моей бессменной домашней страницей.
December 10, 2013

Рекомендую: наушники AKG Q460
От наушников я хотел:
December 5, 2013

Рекомендую: Scanner Pro - сканируй айфоном
Почему бы не отметить уходящий год серией от чистого сердца рекомендаций?
December 3, 2013

Отчет о хакатоне TCDisrupt Berlin 2013
TCDisrupt – такая конференция для стартаперов и стартапщиц, организуемая американской медийной компанией TechCrunch. В этом году TCDisrupt случился в Берлине, и мы в Railsware собрали команду для участия в традиционном для этих конференций хакатоне.
November 5, 2013

Improve your code with unit tests
As a way of ensuring buglessness, tests fail miserably.
October 16, 2013

Unobtrusive flash messages for Rails
I’d like to announce a gem that I wrote three years ago, then it got off my radar, albeit having some traction on RubyGems. I finally updated it to be compatible with recent technologies and also easier to use.
October 10, 2013

Water, laptops, and how to assemble and install Macbook Air keys
My Air had met its mortal enemy a couple of days ago: dihydrogen monoxide. Contact with this dangerous chemical had left a couple keys («A» and «S», no less) out of order.
September 16, 2013

Учеба в автошколе
What do I know about cars? I’m a software developer. I was a happy software developer until nine months ago, and then – what do I know about cars? They don’t come from Antwerp.
August 28, 2013, revised January 29, 2014

RSS blues
I’ve found out recently that my posts are duplicated in Feedly – sorry for that. Is this post also duplicated? Please comment if you’re using Feedly.
August 27, 2013

Don't measure current without a load
PROTIP of the Day: if you want to measure how much current can your USB charger provide, you have to connect it to an output first. Because current means electrons running around, and if electrons are running around freely, they are going to run too fast and blow the charger.
August 20, 2013

Отчет о хакатоне 24hack
Я люблю хакатоны. Хакатон – это собрание людей, готовых фигачить, жертвуя отдыхом, сном, и личной гигиеной. Это настоящие программисты, в лучшем смысле этого слова. Это безумные идеи, безумный темп и совершенно разумный вариант досуга выходного дня.
August 19, 2013, revised February 2, 2014

A practical guide to Hackintosh
Here’s how you install OS X on your PC:
August 14, 2013

Railsware нужны программисты на Ruby
Уютная компания Railsware ищет классных девелоперов на Ruby.
August 11, 2013

Тот самый крик
Могу поспорить, что тебе знаком этот крик:
August 6, 2013

Making RVM play nicely with system scripts
Situation: you have a Rails app, which uses RVM and specifies its Ruby version with a .ruby-version file. You want to use that app in a system script, such as, a Cron job, or start from an init.d script, or any other place that’s not a user shell. And it doesn’t work, failing with strange error messages.
August 5, 2013

Как проезжать лужи "бродом"
Вчера в Днепре был сильный ливень, после которого мы ездили за город через Приднепровск и я оценил, что такое глубокие лужи. На последнем озерце на углу Винокурова и Осенней почти заглох. Теперь пишу результаты собственного ликбеза.
August 5, 2013, revised August 28, 2013

Горячие клавиши в Microsoft Word for Mac 2011 в русской раскладке
Обнаружил, что в Microsoft Word for Mac 2011 при наборе в русской раскладке никакие сочетания клавиш не работают, включая такие незаменимые, как ⌘-С, ⌘-V и даже ⌘-S. Погуглив немного, выяснил, что проблема есть не только у меня, а решения никто не нашел.
July 25, 2013, revised February 2, 2014

Хабрахабру не нужны пермалинки
Ты все еще хочешь писать для Хабрахабра?
July 22, 2013

Make URLs clickable in Sublime Text
I’ve just updated my Clickable URLs plugin for Sublime Text to be compatible with Sublime Text 3, so now’s a good time to talk about it on this blog.
July 16, 2013

Технический спирт, он же денатурат
Оказывается, технический спирт – не недоочищенный и не худшего качества, чем пищевой. Наоборот, денатурация – это намеренная порча чистого спирта с той целью, чтоб его не пили.
July 16, 2013

Initscript hack that allows an application to control itself
I was faced with a curious challenge while making initscripts for a webapp (for Unicorn, delayed job, and the like).
July 15, 2013, revised February 2, 2014

Кеды, кроссовки и сникерс
Несколько случайных этимологических фактов.
July 14, 2013

Почему за Wordpress тоже нужно ухаживать
Мне на днях взломали сервер, подложили бекдор, который рассылал спам. Я думаю, что бот, охотящийся на уязвимости Wordpress.
July 10, 2013

Отчет и мысли о конференции Euruko 2013
Сегодня я вернулся с Европейской конференции рубистов EuRuKo 2013. Это была первая международная конференция в моей жизни, и мне очень понравилось.
July 3, 2013, revised July 4, 2013

Всем привет
Я, наконец, снова собрался вести блог.
June 27, 2013, revised June 29, 2013

Should you get a MacBook Air?
I’m quite often asked for advice regarding the purchase of an MacBook Air over a Pro. Is it powerful enough, they usually ask.
November 14, 2012

Сколько денег нужно откладывать ежемесячно, чтобы получать хорошую пенсию?
Модель заключается в следующем: ты берешься ежемесячно откладывать определенную сумму на счет в банке, с некоторым процентом годовых. После ухода на пенсию ты собираешься жить на проценты с накопленной на счете суммы, и, конечно, процентов должно хватать на жизнь. И нужно учесть неизбежную инфляцию. Вопрос – сколько же денег нужно откладывать?
November 1, 2012

Clean your development log files every day
Rails applications tend to create a lot of log files in development mode, especially if you’re practicing TDD. If you work with many applications, the logs can take up to several gigabytes of disk space.
October 28, 2012

How to make PostgreSQL use a UTF-8 template for CREATE DATABASE
Save this script as psql_utf8_by_default.sql, and run psql < psql_utf8_by_default.sql, or rails dbconsole < psql_utf8_by_default.sql
October 11, 2012

Why I use a proportional font in my text editor and you should too
Here’s a list of things I don’t do that often:
October 11, 2012

RailsGirls 2012 Днепропетровск - post mortem
6 октября 2012 года я участвовал в организации RailsGirls в Днепропетровске в роли тренера. В целом событие прошло невероятно успешно; каждая из пришедших 30-40 девушек написала и опубликовала свой собственный сайт на Heroku, приблизительно такой.
October 10, 2012

How to fix PayPal error 589023
If you’re getting error 589023 If the fractional amount is rounded for currency conversion, funds could be lost when creating a PayPal Adaptive Payment, this means that the amount you requested is not rounded to the nearest cent.
September 28, 2012

How to record HD video from a Logitech webcam on OS X
I have a Logitech HD C270 webcam, capable of 720p HD video capture, which I’ve used for some time on Windows without any issues, but today I’ve decided to connect it to my Macbook Air to record some HD video on the go. Turns out, this is not as easy as I thought.
September 8, 2012

Need random sample images? Why not imgur?
The other day I had to pre-populate an application with some illustrations.
July 4, 2012

Мой опыт использования Windows Phone 7
В феврале этого года я купил себе Samsung Omnia W, чтоб на себе прочувствовать, что же это такое — Windows Phone 7. Я долго собирался написать эту статью.
June 30, 2012, revised July 1, 2012

Статья об удаленной работе в журнале "Корреспондент"
В украинском журнале «Корреспондент» от 15 июня 2012 года вышла статья «Соблюдай дистанцию», в которой освещается ситуация с удаленной работой в Украине; я давал интервью про удаленную работу программистом.
June 20, 2012

A human-driven sort algorithm (MonkeySort)
Every once in a while you have to arrange certain items into a prioritised list: maybe choose projects you’re going to focus on, or movies to watch, or places to visit, et cetera. Maybe you don’t need the sorted list itself but the top (three, five) items from the list; this is essentially the same thing.
June 19, 2012

How to automatically sync photos from your Windows Phone 7 to Mac OS X
It is notoriosly hard to download photos and videos shot with a Windows Phone: it’s not mountable as a USB drive, and the only way to access the phone is through the Windows Phone 7 Connector; and even the connector only allows you to sync the photos into iPhoto or Aperture. If you’re not using Apple image management tools, you’re out of luck.
June 18, 2012

How to create ICNS icons for OS X
Use Icon Composer from XCode, not imagemagick.
June 18, 2012, revised March 17, 2014

Как я уезжал в Киев
В этот вечер мне определенно не суждено было попасть на киевский поезд.
June 18, 2012

An easy way to use Tor on OS X
The Tor Project is a nice distributed anonymizing network. The recommended way of running it (I guess) is downloading the Tor browser bundle, which contains Tor itself and a built-in copy of Firefox, but that is overcomplicated and doesn’t let you use your own browser. Of course, you can still use your browser with the Bundle if you set up the proxy server correctly, but it doesn’t make the process more transparent.
June 5, 2012

Легко и просто
Программисты склонны путать представления о внутренней и внешней сложности своих программ.
June 5, 2012

Настройки шрифта для Google Reader (расширение для Google Chrome)
Сегодня я портировал своё старый и кривоватый юзерскрипт по улучшению типографики гугл-ридера в полноценное расширение Font Settings for Google Reader для Chrome.
May 19, 2012

Что ты должен знать про географические координаты
Короткая шпаргалка для программистов.
May 17, 2012, revised January 30, 2013

Why Vim tabs are different from any other editor
As you likely know, recent versions of Vim have tabs. If you’re coming to Vim from a different tabbed editor (and of course you are), you might decide to use this feature as you’re accustomed to. Well, guess what — you’re doing it wrong.
April 24, 2012

Migrating from StaticMatic to Middleman
One of my sites (, which is in Russian – sorry) is (was) built around Staticmatic, which is (again, was) a convenient tool to make static sites with modern-day conveniences such as partials, helpers, and using a templating language such as Haml.
April 22, 2012, revised May 10, 2012

Net::HTTPResponse в Ruby 1.9.3 -- как *не* надо депрекейтить методы
Вот эта ошибка заняла два часа моего времени.
April 22, 2012

Запустил архив форума
По адресу работает архив Универклаба. (И «Студлайфа»). Если ты не знаешь, что это такое, можешь проходить мимо.
April 22, 2012

Подтасовка шаблонов: новый способ расширения веб-приложений
На днях мне захотелось всунуть в задачи Pivotal Tracker'а кнопочку, которая перекидывала бы задачи в OmniFocus. Кнопочку я таки всунул, а теперь расскажу, как.
April 22, 2012

Выбор кодировки при записи в файл в Ruby 1.9
Угадай, что будет в foo.xml? Строка «тест» в кодировке UTF-8!
April 16, 2012, revised April 17, 2012

Macbook Air 2011 13" и внешний монитор
Подключил, наконец, макбук к внешнему монитору.
April 14, 2012

Где лучше покупать эппловские аксессуары?
DealExtreme vs Comfy
April 12, 2012

Send to OmniFocus from Pivotal Tracker
April 11, 2012

Настройка 3G-модема Huawei под OS X Mavericks
Выжимаем максимум из модемов Huawei под OS X
April 4, 2012, revised January 25, 2014

Какие браузеры используются в Рунете?
Однажды я наверстал и запустил один студенческий форум и остался весьма доволен его внешним видом. То есть, конечно, тем, как он выглядел в Firefox. То есть, оставался довольным, пока одна девочка не сообщила (вежливо), что между постами слишком много свободного пространства.
March 30, 2012

Директива try_files в Nginx как замена mod_rewrite
Подход к настройкам у Apache и у nginx настолько разный, что, настраивая последний по привычке, обычно делаешь все слишком сложно.
March 29, 2012

Наполовину полный стакан, каким его видят работники Веба
Заказчик: «Нет, ты не понял, это совершенно новое видение! Это не стакан! Такого ни у кого нет! Что? Нет, "Стакан Поменьше"ТМ совершенно не решает нашу задачу.»
March 29, 2012

PROTIP: fully qualify Ruby version in .rvmrc
In case you didn’t know (I didn’t), when you write
March 14, 2012

I'm doing the Udacity AI course, and you should too
The Udacity project aims to make university-level education available online. Right now they have only two courses available, Programming 101 and AI 373. Both seem equally interesting, with 101 having you code a search engine and 373 focusing on programming robotic cars. I chose the latter.
February 29, 2012

Я прохожу курс ИИ на Udacity, чего и вам советую
Проект Udacity направлен на то, чтобы сделать университетское образование доступное через интернет. Пока что Udacity предоставляют два курса – программирование для начинающих и искусственный интеллект. У обоих курсов многообещающая программа, первый предлагает написать поисковый движок, а второй рассматривает программирование автомобилей-роботов. Я выбрал последний.
February 29, 2012

Проведение платежей через LiqPAY посредством Ruby
(The English version of this tutorial is at liqpay’s GitHub page).
January 27, 2012, revised April 17, 2012

How to install nginx over Pow in OS X
Pow is a nice starter level server which is useful as long as all you want is develop Rack apps. But what if you need to run a PHP app on the same development machine? Or a Node.js app? Then you’re out of luck (or, directed to some arcane techniques to run them inside Rack, which is just backwards in my opinion).
January 20, 2012

Создание демонов для Mac OS X средствами launchd
Демон — приложение, которое запускается самостоятельно и работает в фоне, а также автоматически перезапускается после падения и обладает другими приятными плюшками.
January 20, 2012

Мой опыт удаленной работы в Railsware
Рассказ о горячей ныне теме удаленной работы
January 5, 2012

Итоги 2011
Чем еще заняться в последние уходящие часы года?
December 31, 2011

О состоянии проекта pivotal_shell
В двух словах – пивотал шеллом я больше заниматься не буду.
December 24, 2011

Установка Ruby 1.9 на Lion через RVM
Проблема: в OSX Lion стандартным компилятором C++ стал Clang, заменив собой GCC. Clang по сравнению с GCC довольно сырой, кроме того, им не компилируется добрая половина расширений Ruby.
November 8, 2011

Устранение конфликта версий Rack на Passenger + Bundler +RVM
Последний раз для себя пишу:
October 23, 2011

Обзор MacBook Air 13" 2011
Я покупал Air, чтобы таскать его в поездки, валяться с ним на диване и сидеть в туалете. И я им доволен.
October 7, 2011

Самое простое введение в юнит-тесты
Про <span class="nobr">юнит-тесты</span> сказано, написано и надумано столько, что очень легко ошибиться и воспринимать их как нечто сложное и неестественное.
October 6, 2011

Что делает deliver! в Rails 3
Потратил некоторое время на поиск неполадки в premailer-rails3 – гем, который «разворачивает» определения стилей в письмах. Наконец, нашел причину.
September 28, 2011

How to insert the encoding: UTF-8 directive automatically in Ruby 1.9 files
I had to upgrade a project to Ruby 1.9.3, and, as usual, the encoding problem came up – if your source file is in UTF-8 (or any other non-ASCII encoding), you have to explicitly declare that.
September 23, 2011, revised March 4, 2013

Расстановка директивы encoding: UTF-8 для Ruby 1.9
В процессе переноса проекта на Ruby 1.9.3, как всегда, возникла проблема кодировки файлов, а именно того, что кодировку <span class="nobr">UTF-8</span> (как и любую другую, отличную от ASCII), нужно указывать явно.
September 23, 2011, revised April 9, 2012

Иерархия ошибок в Ruby, а также какие исключения нужно бросать, а какие - ловить
Исключения — единственный механизм обработки ошибок в Ruby. Это одновременно и очень мощный, и опасный инструмент. Поэтому важно правильно пользоваться исключениями, и в первую очередь — понимать, какие классы исключений нужно бросать, и какие — ловить.
August 27, 2011, revised August 30, 2011

Hoptoad Notifier теперь Airbrake, а также обработка ошибок в задачах Rake
<span class="nobr">Во-первых</span>, Hoptoad окончательно переименовался, и даже вместо гема hoptoad_notifier нужо использовать гем airbrake. <span class="nobr">Во-вторых</span>, я заметил, что аж два месяца назад в основную ветку hoptoad_notifier добавили мое дополнение, перехватывающее исключения в <span class="nobr">Rake-задачах</span>.
August 26, 2011

Обзор Kindle 3G
В двух словах: Kindle — замечательная читалка художественной литературы, которую больше всех оценят любители поваляться на иностранных пляжах, не идеальная, но вполне стоящая своих денег.
August 23, 2011, revised October 7, 2011

Readable Google Reader
Readable Google Reader is a Greasemonkey userscript that lets you change Google Reader article width and font.
August 17, 2011

Удобочитаемый Google Reader
Юзерскрипт Readable Google Reader, который делает приблизительно то же самое, что и Readability, но для статей в Google Reader.
August 17, 2011, revised May 19, 2012

А у вас настроен logrotate?
Сегодня шесть часов пролежал продакшн <span class="nobr">из-за</span> того, что логи съели все свободное место на системном диске (который, собственно, был размером всего в 8G).
August 7, 2011, revised April 12, 2017

Экскурсия по моей кофейной полке
Никакой другой напиток не сравнится для меня с чашкой свежесваренного эспрессо, такого крепкого, что от него губы пытаются одновременно скривиться от горечи и расплыться в улыбке наслаждения. Однако, не всегда же ходить за эспрессо в кофейню! Делюсь опытом приготовления кофе дома.
July 20, 2011

ImageMagick и миниатюры
Оказывается, стандартные настройки ImageMagick далеки от идеальных, если говорить о генерации уменьшенных версий изображений.
July 5, 2011, revised October 1, 2012

Установка пакета из более новой версии Ubuntu
Бывает такое, что версия определенной библиотеки, включенной в состав репозитариев Ubuntu, обладает определенным багом. А исправленная версия этой библиотеки уже не попадает в данную версию системы, и, следовательно, ее невозможно обновить традиционным способом. Этот способ заключается во временной подмене репозитариев.
June 18, 2011

Деструкторы в Ruby
Почему в Ruby нет деструкторов и чем их заменить.
May 20, 2011

Как сделать обалденный почтовый шаблон
Недавно я был озабочен версткой (и подключением к Rails) целого комплекта шаблонов рассылок и почтовых уведомлений и решил извлечь из этого процесса наибольшую пользу.
April 14, 2011

Строгий режим MySQL и почему он должен быть включен
В MySQL есть такой специальный режим, предназначенный для введения в базу неправильных данных. Например, чтобы вместо 20000000000 вставлять в INT-поле 2147483647. Или наполнять базу несуществующими датами. Или обрезанными строками. Ну или мало ли для чего этот режим может тебе пригодится.
April 6, 2011, revised June 30, 2012

Обновление сайта до Ruby on Rails 3 - отчет
Отчет об обновлении CarGid с Ruby on Rails 2.3 на Ruby on Rails 3. Все больше библиотек перестают поддерживать Rails 2.3, и скоро тебе придется обновляться.
April 5, 2011

Мой доклад про acceptance-тесты с kiev.rb #1
7 марта в Киеве произошла — довольно спонтанно — конференция kiev.rb, устроенная рубистами из Питера, на которой я — довольно спонтанно — читал доклад про <span class="nobr">acceptance-тесты</span> с использованием RSpec и Capybara.
March 9, 2011

Лучший текстовый редактор для Windows - это Vim
Vim – это новенькая трехкомнатная квартира в модном комплексе, которую ты только что выиграл в лотерею
February 14, 2011, revised January 31, 2014

Настройка общего для Windows и Linux репозитория конфигурационных файлов
Если кто не знал, то я получаю извращенное удовольствие от работы и с Linux, и с Windows одновременно. Но, как говорится, песня не о том.
February 14, 2011

Программистский подход
Задача (основана на реальных событиях): отметить на карте и выбрать по нескольку достопримечательностей 20 крупнейших городов США.
February 13, 2011

Как перехватывать клик по Flash-баннеру
Разместить флешку на сайте – дело несложное. Однако, в 95% случаев ожидается, что флешка будет ссылкой. Думаешь, объект Flash можно просто положить в "a"? Нельзя. Приходится ограничиваться внутренними средствами.
February 9, 2011, revised February 10, 2011

Rubyhub — агрегатор всего, происходящего с Ruby на Украине.
January 26, 2011

Эпическое обновление моего сайта на Ruby on Rails
Идея переписать сайт на Ruby витет надо мной уже, наверно, год. Основной мотивацией было то, что используемый мной ранее WordPress феерически плохо написан и его так же феерически сложно дополнять. Это я вам говорю как человек, который писал к Wordpress темы, плагины, и совсем недавно переносил базу на собственную структуру данных.
January 2, 2011, revised January 21, 2011

Улучшения для rake db:dump
Поскольку заниматься <span class="nobr">чем-то</span> полезным в поезде довольно сложно, я решил ограничиться тем, что добавил в `rails_db_dump` возможность сдампить одну таблицу вместо всей базы.
December 9, 2010, revised January 1, 2011

Progress bar для скриптов на Ruby
Знакома такая ситуация – пишешь Rake-задачу, понимаешь, что выполняться она будет долго, а сделать какую-нибудь индикацию процесса облом?
December 8, 2010, revised January 1, 2011

Сколько памяти действительно занимает виртуальная машина?
Сегодня Миша Грищенко задал мне вопрос, на который я, как мне казалось, ответил еще в августе, расхваливая VirtualBox: а сколько он, собственно, жрет памяти?
December 7, 2010, revised January 7, 2011

Pivotal start и pivotal finish
В pivotal_shell добавилось две команды – start и finish, позволяющие прямо из командной строки начать и закрыть задачу.
December 6, 2010, revised January 1, 2011

git-timesheet - генерация отчета о работе из журнала git
Автоматическая генерация отчетов о работе из git log.
December 5, 2010, revised July 12, 2012

Улучшение поддержки Sass в rails.vim
Я добавил в rails.vim автоопределение каталога с файлами .sass, а заодно к .less и .<span class="nobr">coffee-файлам</span>.
December 4, 2010, revised January 1, 2011

rake db:dump - сливаем базу приложения на Ruby on Rails
Простой способ дампа базы приложения на Ruby on Rails.
December 2, 2010, revised January 1, 2011

Консольный клиент для Pivotal Tracker
Мы в RailsWare пользуемся для управления проектами Pivotal <span class="nobr">Tracker-ом</span>. Штука это шикарная, под нее написана куча расширений – в частности, хук для Github, позволяющий привязывать коммиты к задачам Pivotal Tracker, а также их закрывать непосредственно из коммитов, например, так:
December 2, 2010, revised January 2, 2011

Генератор недельного отчета из git log
Генератор недельного отчета из git log, написанный на shell script.
November 30, 2010, revised January 2, 2011

Личный опыт интернет-покупок из Украины
Большинство ужастиков про пропадающие посылки, заоблачные ввозные пошлины и прочие сложности <span class="nobr">онлайн-шоппинга</span> возникают <span class="nobr">из-за</span> непонимания покупателем ситуации, его любви к халяве или идейных заблуждений. Постараюсь немного прояснить ситуацию.
September 30, 2010, revised January 7, 2011

Еще о схеме БД, миграциях и нестандартных полях в Rails
Совершенно случайно наткнулся на интересный комментарий в db/schema.rb.
August 31, 2010, revised January 7, 2011

coLinux и VirtualBox - что удобнее?
Излагаю соображения, по которым я использую VirtualBox, а не coLinux.
August 4, 2010, revised January 7, 2011

Как завести Rails 3 вместе с Passenger
Поставить Rails 3 на Passenger – дело нетривиальное, ибо:
August 3, 2010

Настройка Linux в окружении VirtualBox
…Заканчиваю эпос в трех частях об настройке виртуального Linux-сервера под Windows.
August 3, 2010

Удобный виртуальный Linux под Windows
Windows – десктопная ОС «по умолчанию». Linux – сервернкая ОС «по умолчанию». Согласны? Тогда поехали.
August 2, 2010, revised October 30, 2012

Установка удобного Linux под Windows
Что нам понадобится? (Более-менее) современный процессор, Windows, VirtualBox, и немного волшебного соуса.
August 2, 2010, revised August 3, 2010

Плагин для подсчета посещаемости страниц в Ruby on Rails
Я написал плагин для подсчета посещаемости избранных страниц Rails-приложения. Взять его можно на
July 7, 2010

Кеширование страниц с динамическими элементами средствами Ruby on Rails
Последний раз я занимался кешированием сайта без аутентификации. Что более важно – сайт этот для всех выглядит одинаково, поэтому проблему отдачи
July 3, 2010

Переехали со Slicehost на Linode
Что ж, смену хостинга можно считать законченной, данные пересены, сервер настроен, домены уперты.
June 8, 2010 против в Rails
Функции и в Ruby on Rails практически идентичны. Возвращают одни и те же значения, ведут себя одинаково. Из-за этого легко перепутать и использовать более короткую формулировку
June 4, 2010

Перенос настроек из SSH в PuTTY
С тех пор, как я вернулся с линукса на винду (а я вернулся), в SSH лазил исключительно через виртуалку. Лень было конфиг переносить в PuTTY, что довольно досадно, поскольку выходить в SSH прямо через PuTTY по ряду причин удобнее – например, можно настроить внешний вид и поведения терминала для каждого хоста, или быстро запускать сессии с помощью PuTTY-плагина к Launchy.
June 3, 2010

Отладка скриптов в Internet Explorer
Создаем и настраиваем виртуальную машину для отладки HTML и JavaScript в Internet Explorer
May 27, 2010, revised January 10, 2011

Как загрузить карты украинских городов в Ovi Maps 3
Nokia Map Loader, недоступный на официальном сайте Нокии, внезапно нашелся на cnet.
May 24, 2010, revised February 10, 2011

Список украинских городов для сайта
Мне для одного проекта понадобился список украинских городов. Да так, чтобы по областям разбит и с географическими координатами.
April 23, 2010, revised December 1, 2012

Как Hoptoad помогает на тестовом сервере
Итак, Hoptoad – это такая продвинутая штука для записывания исключений в Rails-приложениях. Его использование выливается в то, что каждое новое исключение логируется, а также при желании отправляется тебе на почту. Удобно.
March 26, 2010, revised June 5, 2010

Делаем комментарии Хабрахабра похожими на Reddit
Я последнее время практически не бываю на Хабре, зато часто захожу на Reddit. По-моему на последнем гораздо удобнее читать комментарии, в первую очередь потому, что их можно отсортировать по рейтингу и читать только наиболее «ценные».
March 5, 2010

Кеширование страниц средствами Ruby on Rails
Бывают случаи, когда страницы сайта можно целиком и полностью закешировать и подложить серверу в виде статических HTML-файлов. Чтобы запросы за ними вообще не лезли в Rails, и выполнялись поэтому офигенно быстро.
February 25, 2010, revised March 6, 2011

Предотвращение повторного запуска Rake-скрипта
if File.exists?(RAILS_ROOT+’tmp/’) && system(«kill -0 #{’tmp/’).to_i}») fail «Grabber already running» else’tmp/’,'w’) {|f| f.write( } end
February 25, 2010, revised February 26, 2010

Почему в Rails нет метода для создания HABTM-таблицы?
В очередной раз набирая те шесть строчек, которыми – по соглашению – нужно описать таблицу для HABTM-связи, я подумал: а почему в Rails нет готового метода для этого? Почему каждый раз надо переписывать один и тот же код, попутно вспоминая, как сделать таблицу без ID – ведь используются они только для HABTM?
January 15, 2010

Как добавить в конкретный Ruby-объект какое-нибудь свойство
Задача такая:
January 11, 2010

Штука для проверки прокси-серверов на доступность и анонимность
Вот, давно хотел выложить, но она раньше выглядела еще ужаснее, чем сейчас.
December 27, 2009

Обновление файлов на сайте с помощью rsync
Продолжаю цикл статей о взаимодествии с архаичными сайтами и их же поддержке. Таких, где о VCS не слышали, но доступ по ssh есть. У меня тут один такой на CakePHP.
December 24, 2009

Область видимости переменной в Javascript (variable scope) - ликбез
В Javascript области видимости усложнены тем, что функции могут определяться внутри других функций, а вызываться где угодно. оп
December 22, 2009, revised March 21, 2011

Как открыть терминал из Gvim
Во-первых, я добрался до сессий в виме – теперь не приходится переходить в каталог проекта вручную. Пригодился плагин SessionMan.
December 10, 2009

Мой единственный совет начинающим программистам
Вообще я написал длиннющую статью на эту тему, но потом подумал, что она бесполезна. Нельзя статьей передать опыт.
November 20, 2009, revised June 29, 2010

Избавление gitа от ненужных файлов в глобальном масштабе
До недавних времен сразу после создания git-репозитария я добавлял в .gitignore список имен всяческих резервных и временных файлов, которые создаются редакторами, IDE, и т.п.
November 16, 2009

Пишем программу на Python под Symbian в Ubuntu
Разработка на PyS60 в Ubuntu
November 6, 2009, revised November 9, 2009

Этакий DSL для прикрывания неиспользуемых блоков во view
Или же, на менее человечных языках
October 29, 2009

Как отличать локальный сайт от production?
Бывает такая проблема, что путаешь свою версию сайта с production? Она решается ровно одной строчкой в конфиге Apache:
October 16, 2009

Ищем верстальщика
Антикризисное предложение! :)
October 2, 2009, revised October 15, 2009

Доставка файлов из VCS на shared-хостинг с помощью sshfs
В общем
October 1, 2009, revised October 27, 2009

Друзья друзей Вконтакте на Ruby
Если несколько твоих знакомых знакомы с Васей Пупкиным, то с большой вероятностью ты тоже с ним знаком. Логично?
September 23, 2009

Грамотное разворачивание сайта без VCS
Ситуация: есть сервер с доступом по SSH и без каких-либо дополнительных программных средств. Есть код в git-репозитарии (даже не важно, что в git, главное, что под системой контроля версий). Задача: поместить код на сервер и периодически его обновлять, да так, чтоб не руками, чтоб не стыдно было, чтоб не гонять полную копию каждый раз.Ну да, не совсем без системы контроля версий, а при наличии отсутствия ее на сервере. «Папа, а правда, есть люди, которые не пользуются VCS? Нет, сынок, это фантастика.
September 3, 2009, revised October 1, 2009

Как произносится слово ruby
September 3, 2009

Хостинг Ruby on Rails от - первые впечатления
Коротко, списком, основные моменты: cPanel. Как-то врет она про наличествующие в системе гемы, по крайней мере их список никак не совпадаеет с ls /usr/local/ Mongrel.
September 3, 2009, revised September 8, 2009

"View Source" из Firefox в GVIM
Озаботился вопросом удобного просмотра исходников страниц в Firefox. То есть, конечно, есть Inspect в Firebug, но это не совсем то.
September 1, 2009

Украинский хостинг с mod_rails
Существует ли в Украине хостинг для Ruby on Rails на основе mod_rails/Passenger? Мне казалось, что так на shared-хостинге использовать Passenger удобнее, чем mongrel, но тем не менее все пересмотренные хостинги (,, используют последний.
August 26, 2009

Что можно делать с миграциями в Rails
Миграции призваны заменить всякие SQL-менеджеры. Нет, серьезно: при работе с рельсами не нужны SQL-менеджеры, я гарантирую это. Зато нужно освоиться с механизмом миграций. И еще с script/console.
August 7, 2009

Конспект интервью с DHH
25 июля провели интервью с DHH.
July 28, 2009

Использование after_filter в Ruby on Rails
Есть такая штука в Rails – after_filter. Судя по гуглу, его используют раз в пять реже, чем before_filter. Тем не менее, с after_filter можно делать всякие интересные штуки с результатом работы приложения. Например:
July 27, 2009

Оглавления папок из-под Rails
Passenger почему-то не хочет отдавать оглавление папок (или index.html) из папки public, если на конце URL нет слеша. Это довольно просто решается соответствующим
July 23, 2009

Перенос SVN-репозитария в git
Как начать использовать современную систему контроля версий вместо Subversion.
July 22, 2009, revised February 14, 2016

Почему git?
Мне тут по работе пришлось осваивать git. Полезно, когда тебя иногда подталкивают: раньше я к гиту относился прохладно, как к очередной распиаренной, но не приносящей ничего нового модной штуке. Однако, поработав на ней (нем?) полторы недели, я таки вошел во вкус и даже перевел на git все свои
July 21, 2009, revised July 23, 2009

Почему я перешел с PHP на Ruby on Rails?
Короткий ответ такой: я перешел с PHP на Ruby on Rails, потому что Rails позволяет мне делать все, что я делал на PHP, и получать от этого больше удовольствия. А я не представляю себе программирования без удовольствия.
July 17, 2009

Да, за последние девять месяцев много чего изменилось. :)
July 14, 2009

Ruby in Steel - Ruby-разработка в Visual Studio
…Перепробовал NetBeans и Aptana+RadRails, в итоге остановился на Ruby in Steel – плагине для рельсоукладки прямо в MS Visual Studio 2005/2008. Люблю я её и все. Хотя VS.Php так и не прижился в свое время.
October 18, 2008, revised July 23, 2009

Рельсоукладка №1
Со вчерашнего дня я перестал смотреть – иногда c завистью, иногда с недоумением – на RoRистов и сел писать свой первый проект на рельсах.
October 13, 2008

Rails. Первые впечатления.
Перейти c PHP+MySQL+jQuery+XHTML+CSS на RoR+Rjs+Haml+Sass – это как с гекзаметра на хайку.
October 12, 2008

Многопроцессовые демоны на PHP
Рано или поздно приходится на сайте выполнять задачи, которые прямо на страничке делать ну никак не получается. Обрабатывать большие объемы данных. Запрашивать медленные внешние сервисы. Делать сложные расчеты. <span class="nobr">Тут-то</span> и приходится вспоминать, что PHP — не только препроцессор домашних страниц, а и полноценный скриптовый язык. Давайте на этом языке сделаем демона для выполнения фоновых задач.
September 20, 2008, revised March 25, 2013

Read-From, Write-Through: улучшаем кеш страниц
Есть кеш страниц, организованный по принципу 404-й. То есть – если страница лежит в кеше, она отдается сервером без участия PHP; если ее там нет – по обработчику 404-й ошибки вызывается MainController сайта, который генерирует страницу, кладет ее в кеш и отдает клиенту.
September 19, 2008

Jenkins - Анализатор лога ошибок Apache
Реальность сурова — каким бы тщательным не было тестирование, на продакшне всегда будут ошибки. Одно из положительных изменений, связанных с переездом на VPS — я получил полноценный лог.
August 25, 2008

Сайты работают в штатном режиме. Привет, SliceHost!
August 20, 2008

До 20 числа мои сайты переезжают на новенький vps от slicehost. В связи с этим возможны неполадки/даунтайм, кроме того, могут пропадать письма на – пишите на
August 17, 2008

Задерка между итерациями
Не знаю, насколько это очевидно, но sleep можно поместить в условие окончания цикла.
July 30, 2008

Как я Zend-сертификацию проходил
Довольно странно зарабатывать на жизнь программированием на PHP и не иметь желания (или возможности) получить аттестат профпригодности – в университете таких не дают, да и уровень не тот. Быть сертифицированным специалистом и себе приятно, и, разумеется, выделяет из серой массы пыхыпышников, которых в отрасли как собак нерезаных.
July 26, 2008

Генерация XML в PHP
Рассматривая примеры генерации XML-выгрузок от различных украинских маркетов (не буду никого смущать прямыми ссылками), удивлен тем, что многие используют обыкновенную шаблонную методику, вроде:
July 14, 2008

Отладка PHP средствами Firebug
Отладка PHP-скриптов определенно недостаточно освещена в интернете. Потому многие, очень многие довольствуются print_r-ками. Очевидный недостаток такого способа – нельзя отладить AJAX, SOAP-сервисы, генераторы картинок и вообще скрипты, не отдающие непосредственно HTML-документов.
July 4, 2008

Настольный календарь на GCalendar + Rainlendar
Статья написана для ХабраХабра, захабрена на главную 21 июня 2008. По канонам GTD, календарь предназначен для хранения rough terrain – событий, запланированных на четкое время, либо тех, о которых известно заранее (например, праздников). Ими и займемся – todo-менеджеров в последнее время и так развелось немеряное количество.
June 21, 2008

PHP5 как скриптовый язык для Windows
Я расскажу, как можно довести PHP-скриптинг под Windows до такого же удобства, что и BAT.
March 22, 2008

Сборщик мусора в PHP 5
Сегодня на работе разбирался с PHPшным сборщиком мусора. Обнаружилась одна жутко неприятная вещь, которая называется recursive reference memory leak – объекты с перекрестными ссылками не удаляются из памяти.
March 18, 2008, revised August 9, 2012

Zend PHP Certification
Есть такой хороший экзамен Zend Certified PHP Engineer. Для навеки погребенных в танке, Zend – разработчик PHP, соответственно, их сертификация равноценна, например, MCSE.
March 17, 2008

Дополнение готовых сайтов заказчика
Главное правило – самая трудоемкая часть работы – запуск проекта у заказчика. Она тем сложнее, чем больше клиентского кода написано не тобой.
February 26, 2008

9 причин заниматься фрилансом, работая фуллтайм
Начну с того, что это, конечно, маньячество – работать фуллтайм и фриланс параллельно.
February 21, 2008

Javascript: Подсказки внутри INPUT
Постановка задачи: нужно, чтобы в пустом input выводился приглушенным цветом <span class="nobr">какой-то</span> текст, например, подсказка.
February 16, 2008, revised June 17, 2011

Растягивание TEXTAREA по вертикали
Решил опубликовать пару скриптов, написанных для
February 15, 2008, revised March 2, 2014

Флэшбек: GLamour
Вот такими вещами я занимался полтора года назад.
February 15, 2008

Как скачать Java-приложение на телефон с компьютера?
Нашел простой способ качать Java-приложения на телефон с компьютера. Ибо на телефоне life:], и скачать по GPRS, скажем, 200-килобайтный Google Maps Mobile – полнейший no fate.
February 11, 2008

Скачать потоковое видео - проще простого!
Существует целая куча программ для сохранения потокового видео с youtube и сайтов ему подобных. У всех них есть один недостаток: они работают с ограниченным количеством сервисов. А что, если нужно скачать клип с сайта исполнителя, а что за плеер у них – и не разберешь? (наглядный пример –
February 4, 2008, revised February 4, 2014

Интервью с Линусом Торвальдсом
Сегодня Lifehacker AU опубликовали интервью с Линусом Торвальдсом, создателем операционной системы Linux и лидером разработок по сей день.
January 31, 2008

Как поставить украинский апостроф в Microsoft Word
Чи не часто тобі зустрічаються подвійні лапки – ” – замість апострофу?
January 26, 2008, revised January 31, 2014

Твой собственный OpenID
January 25, 2008, revised May 5, 2010