Launch a CI service in 100 lines of Clojure

There are many factors that contribute to the quality of the code we produce. Undoubtfully, adopting Continuous Integration is one of the biggest leaps one can make when closing the gap between The Holy Grail Of Software Engineering. Over time there have emerged quite a few CI services that make it easy to integrate changes to our code. Unless you’ve been living in vacuum for the past few years, you must’ve heard names like Jenkins, TravisCI or CircleCI. But what if I told you, you could roll your own YetAnotherCI in just around 100 lines of Clojure? If this sounds interesting, make sure to follow along and ship YACI with us.
Read more

Using git notes to improve CD workflow

Git is certainly one of the most widely used tools in software development industry – it’s essential. However, many people forget about the many options it provides apart from serving simply as a VCS. I think git notes is one of such commands, which can immensely improve your workflow – let’s see for ourselves why you’d like to start using it.
Read more

Redirecting output to other terminal

There are many reasons one might want to see output from shell commands in another terminal emulator but it definitely has its uses. The other day it just so happended that I needed such a functionality. Without going into details I’m going to show you how to achieve such behaviour – and more – easily, by leveraging the fact that under the hood std(in|out|err) are just *nix file descriptors.
Read more

Haskell-style lambdas in Lisp

Recently I was toying around with Lisp a bit and thought I’d share some insights. As you may or may not know programming in Lisps is somewhat different from the average programming languages you’re used to. In what way, you might ask – and no, I don’t mean being swarmed up with parenthesis (besides syntax should be the least concern when picking The Right Tool). Here’s why.
Read more

Launching terminal emulator in current working directory in XMonad

Recently I got a bit fed up with my XMonad configuration and decided to add some of the missing bits. After all I made the switch with productivity in mind so it would be silly to endure even the slightest tradeoffs. If you don’t know what XMonad is – it’s an extremely customizable tiling window manager – the default configuration is, however, pretty crude, so it doesn’t really make sense to switch if you’re not going to tweak it, even if just slightly. To the point – one of the things I was missing was the ability to open a new terminal emulator window in the same working directory as the one I had focused. I felt that existing solutions such as the WorkspaceDir extension were lacking and not exactly what I was looking for. And so I had to write one myself. Since I figured I couldn’t be the only one in need I decided I’d share my snippet.
Read more

Polyglot assembly 101

As promised in my somewhat lengthy “Hello World” post, although much later than intended, I finally got down to writing a follow-up post. I remember one of the very first lectures during my uni course – when assembly language was being introduced. Nothing too deep, really. However, I recall a statement being made, that probably still lives in the minds of the many that heard it (and perhaps even more that didn’t). Namely – that assembly code is not portable. In this post we’re going to take a look at how misleading that statement is and explore writing polyglot assembly code.
Read more

Kotlin with dagger-android basic setup

Since dagger-android is fairly new, every article on the Internet shows the “old” way of incorporating Dagger 2 into your Kotlin app, which involves writing some amounts of boilerplate code (well, so does any app using dagger, but at least with the addition of dagger-android you can try to cut it down a bit). While for seasoned veterans it may be simple, I thought that, especially for less experienced developers, a fully working example could be useful. This is an example of the most basic setup using dagger-android in Kotlin. Update (2018-02-24): When this guide was first written it was using 2.11-rc2 version of dagger. Dagger extensions for Android have evolved since and now it’s even easier to set things up. Below you can find the updated guide using version 2.12.
Read more

The somewhat lengthy "Hello world" post

It is a long honored tradition for IT texts to start with these famous words. Over the years, the languages have evolved, so did the paradigms by which we write our code – yet almost every book or tutorial, on any language, still begins with this simple piece of software. Since I don’t want to stir things up and be some kind of a rebel this blog shall not be different – in this particular case.
Read more