Alexey Shmalko’s blog

2019: Year in Review

December 31, 2019

The year 2019 turned out to be extremely fruitful—especially on changes. If someone told me a year ago that I would be a vegetarian, sleeping good 8 hours, and trying to live a slower life, I would not believe him.

bkernel: a Rust Operating System

November 30, 2015

TL;DR I’m writing an operating system in Rust and here is my status and impressions after a month of development.

I’ve been developing embedded operating systems for living for a couple of years now. And… I got tired of work, all the bureaucracy, hard to debug issues, a zillion of low-level details; I wasn’t even sure I want to continue work in the field, so I started a side project. It may come as a surprise I started yet another operating system when the same thing led me to this. Well, it’s not same; I’m building a new operating system to experiment, and this refuels me with the passion to the field.

Here are my progress and some impressions of Rust after a month of development (check the code at my GitHub repository).

Haskell String Types

September 05, 2015

The goal of this blog post is to ease the confusion of Haskell string types. I assume you already know what String is, so I’ll only cover the difference between string types and help to build intuition on what type you should choose for the task in hand.

Git: Working in Detached HEAD

March 26, 2015

At work, we use a rebase-based git workflow to keep master history plain along with gerrit to track multiple versions of the same commit and code review. This implies doing a lot of commit juggling including fetching individual commits from gerrit, checking out back and forth, rebasing and cherry-picking. I found myself in the detached HEAD state pretty often. I used to create a new branch or force update old one and checkout on it. Then I gradually started to do a part of work in detached HEAD and then realized these branches only hinder me in most cases; so now before beginning work on a new feature I’m not creating a new branch but rather checking out straight into detached HEAD.

I know this may be a unidiomatic git, but that’s how things work for me. Even though I work with detached HEAD, most commands here are equally useful with branches. You can also adopt working in detached HEAD with you current workflow (e.g. work in detached HEAD only for small tasks).

Haskell: Defaulting Rules

December 31, 2014

I’ve signed for the Haskell-cafe mailing list to learn something new a day ago. The first letter I received was asking which defaulting proposals are actively pursued. I’d knew nothing about defaulting and why it should be improved, so that’s what I learned today.

ProGuard: Real World Example

October 28, 2014

ProGuard is a free tool for shrinking, optimizing and obfuscating jar files. I’ve used it at work to protect a commercial application from decompilation, especially critical algorithms. (Unlike machine code, Java bytecode is easy to decompile.)

Here I’ll try to describe how I did that.

7 Things You Should Know About Make

October 26, 2014

Make is a simple and powerful tool for automatically building any files out of others. However, some programmers experience issues writing makefiles and reinvent things without knowing some basic Make things.

Random Advice Popup

May 06, 2014

A long time ago, I had read a book The Pragmatic Programmer: From Journeyman to Master (if someone didn’t read it yet, I highly recommend it). This book is a collection of extremely useful tips for programmers. But this post is not about the book.

Recently I decided to revisit these tips again; and found that I don’t remember some of them. So that, I decided to create something that will regularly remind me of them. The best choice was on-screen popups showing one tip at a time.

Proactor Pattern: Release the Power of Asynchronous Operations

April 22, 2014

During the study of the Boost library, I’ve stumbled on Proactor pattern. This is a design pattern intended to handle I/O operations asynchronously, but let’s describe other alternatives first.

Massive web servers should serve a lot of active connections in a short period of time; so, it’s important to do this most effectively with a less overhead.

Several well-known methods exist:

  • Synchronous
  • Synchronous Multi-threading
  • Asynchronous

Let’s describe them in order.

Fix Skype under Awesome WM

April 21, 2014

By default, Skype behaves strangely under awesome wm. For example, view profile window is so small that even name isn’t displayed.

Using Vim as C/C++ IDE

April 02, 2014

I’m an embedded operating system developer and I do all my development tasks solely in the terminal.

The primary tool, which helps me to accomplish this, is Vim. Today, I will describe how to turn Vim into a powerful IDE for C/C++ projects. I will not recommend you any plugin for project management since vanilla Vim already has all the power to cope with this task.

Despite the fact that I use Vim as a C IDE, the part of following recommendations are pretty general and may be applied to any kind of project.