RSSAmplifier

Blog

Alexei Boronine's Blog

boronine.comRSS feed ↗17 posts

Latest posts

h2tunnel - TCP over HTTP/2

The "tunneling" workflow ( ngrok , ssh -R , etc.) is essential for exposing a local server to the internet. Dozens if not hundreds of tools exist to perform this networking setup , which of course inspired me to make my own. In this post I will share the trick that that makes my …

Migrating to GitHub "Issue Types"

In January GitHub announced a new way to classify issues by "issue types". Unlike labels, issue types are managed on an organization level and each issue can only have one type. By default, GitHub creates 3 issue types: "Feature", "Bug" and "Task". If you used labels for this purpose before …

Instant Workspace Switching on macOS

No macOS window management problem is as infuriating as the inability to instantly switch workspaces. Using native functionality, you have the option of a seizure-inducing sliding animation or an equally time-wasting fade (using the oft-recommended Reduce motion setting). Here is the solution: Install AeroSpace . ( brew install --cask nikitabobko/tap/aerospace …

On the Joys of Coworking

You exit the visa office eager to start you first day of work. You take the phone out of your pocket, open the browser and search for a coworking space. You scroll past "Coworking: the future of work" and "Reimagining work for the 21st century" until you come upon a …

Nix, the Purely Functional Build System

This blog post is about Nix , "The Purely Functional Package Manager", a software project as mind-blowingly useful as it is difficult to succinctly define. What makes Nix so peculiar is that it doesn't seem to aim at implementing specific functionality, instead implementing primitives that make this functionality trivial. This cuts …

Installing Docker on Debian Jessie

While visiting family for the holidays, I've been lovingly crafting a new Debian-based work environment. After spending days tweaking my Xmonad configuration, I finally decided to install Docker, which I've been happily using at work and in my side projects. Currently, Docker does not support Debian, so it took some …

Why JavaScript Still Sucks

I was among many developers that recently rediscovered JavaScript. Indeed as a very capable language. But after using the new JavaScript for a solid year, I came to the conclusion that JavaScript still sucks. And no, I'm not talking about its wacky comparison operators. There is a deeper problem, and …

Tox-Driven Python Development

Going through Julian Berman's jsonschema repo (some of the cleanest Python code I've read, by the way), I stumbled upon a recommendation that greatly improved my Python workflow. I'm talking about Tox , the Python testing automaton. Tox allows you to test your code against multiple versions of Python (yes, PyPy …

Make Tastypie Respect blank=False

More Tastypie pain, documented in several issues . Tastypie's blank attribute simply doesn't work. Add this to your Resource as a workaround: class MyResource ( ModelResource ): # Workaround for this issue: # https://github.com/toastdriven/django-tastypie/issues/518 def hydrate ( self , bundle ): for field_name , field_obj in self . fields . items (): if field_name == 'resource_uri' : continue …

Non-PK Identifiers for Tastypie URLs

I've been using Tastypie at work for a few weeks now, and while it's been generally great, I've had my share of frustrations with it. The most recent one involved a cookbook recipe that didn't quite work. Following the recipe, I got Tastypie to resolve my URLs, but I couldn't …

My Progress on HSLuv

About a year ago, while working on a super-secret project (that has since been stashed), I ran into a small UI problem: I needed to generate a set of 12 colors with a constant lightness and saturation, but with differing hues. HSL seemed like an obvious choice, but I quicly …

HTML5: Less Committees, More Competition!

As the HTML5 fever begins to wear off, I'm starting to see some bad tendencies in the development of the web as a platform. While I am excited for the low-level APIs that are making their way into our browsers (from playing audio to 3D to real-time communication), I hate …

Cult of Logic-Less Templates

Logic-less templates like Mustache , Handlebars , Hogan etc. have taken the JavaScript community by storm. I believe they promote bad practices and are perpetuated by dogmatic claims that don't correspond to reality. Separation of Concerns My Ass Undoubtedly, business and presentational logic should be kept separate. The claim that logic-less templates …

Strong Password Hashing with Node.js Standard Library

Cracking your users' hashed and salted password is pretty damn easy these days. To make it a bit harder for the bad guys, you should use something like PBDFK2 , which hashes the password thousands of times before giving you back the result. This is called key-stretching and it helps simply …

Asynchronous Form Field Validation with Ember

I've been playing around with Ember.js recently. Here is my approach at implementing synchronous (username length) and asynchronous (username availability) validation, encapsulated in an Ember.js View. The code is a bit long, but it is more declarative and thus predictable than its jQuery spaghetti counterpart. Here's the gist …

CoffeeScript Indentation for Sublime Text 2

If you haven't already, first install the Sublime Package Control . Next — if you haven't already — install the CoffeeScript plugin. After restarting Sublime, press Ctrl-Shift-P to open up the Command Palette, select the newly added command "Install Package" and use it to install the package "CoffeeScript". To permanently save your indentation …

Color Spaces for Human Beings

A color space is a mathematical model for describing color as a tuple of values. Some color spaces, like RGB and CMYK, are based on display technology. Some are based on human physiology, some are derived for certain useful characteristics. In this post I will briefly explain how humans see …