Author Archive

This blog is marked as deprecated

December 14, 2012 Leave a comment

From now on I will be posting my thoughts and deeds to This blog remains as is with all its content and can be safely linked to.

Thanks and see you again in Bytopia!

Categories: Uncategorized

Hipster music player: when MPD is just too mainstream

March 26, 2012 2 comments

One of the greatest features of GNU/Linux is that it shares the Unix amaziness of having lots of small tools which are easily combined together via stdin/stdout. Today we are going to explore the possibilities of playing MP3 files with these little tools.


The simplest command to produce sounds is aplay. Prior to ALSA there was a device called /dev/dsp to which you could redirect any file and it would “play” it. Now aplay acts similarly. Try executing this:

cat /path/to/wav/file | aplay

You can also send to aplay something that is formally not music at all. Consider an example:

cat /bin/bash | aplay    # Sounds a bit like dubstep at the beginning!

As you can see aplay will play any binary stream you pass it.


This tools is a free (and less buggy) version of mpg123 which is a dead simple MP3 player. First of all you can provide it with a list of files to play:

mpg321 one.mp3 two.mp3

You can also supply the call with a playlist (which is a simple list of files to play):

find *.mp3 > 1.pls   # Will scan the current dir for MP3 files and write their names to 1.pls
mpg321 -@ 1.pls

mpg321 also supports playing from the stdin and writing output to the stdout.

Right now you have a working MP3 player that you can pause (by pressing Ctrl-Z in the terminal. To bring it back type fg %1), play next track (by pressing Ctrl-C once. Pressing Ctrl-C twice in a rapid succession will stop the playback).

Cool stuff

We hadn’t seen anything cool so far. OK, a poor man’s “player” controllable from shell. Can you do with it anything at all? Well, perhaps there are things you can. For example, streaming the songs directly to another computer via ssh!

cat /path/to/mp3 | mpg321 -w - - | ssh user@ aplay

-w - option to mpg321 means that it would output the wav file to the stdout. The second - tells it that it should take output from stdin. The output from mpg321 is then passed via ssh to the aplay command which would play the stream on the remote machine.

Nothing stops you from translating a series of tracks. Actually MP3 files are excellently concatenable with mere cat:

cat *.mp3 | mpg321 -w - - | ssh user@ aplay

This kind of “translation” has its weakness – you can’t stop it from the target machine unless putting down sshd or sound system (Did I say weakness?:)). To achieve some better feeling of an Internet radio you can use netcat:

cat *.mp3 | mpg321 -w - - | nc -l -p 9999

From the other machine just type the following:

nc first.machine.ip.address 9999 | aplay

Voila! You have an Internet music radio going directly to your audio device. How more awesome can this be? Well, there are certain limitations of the approach: it doesn’t support multiple connections and doesn’t restart listening the port after the client disconnects. These issues are fixable but are probably close to rewriting icecast:).

Here’s the command to make our Radio “Netcat” a bit more spicy:

find -name "*.mp3" | sort -R | sed -E 's/(.+)/"\1"/' | xargs cat | mpg321 -w - - | nc -L -p 9999

If you execute it from the root of your music folder it will find all MP3 files, shuffle them, wrap names into quotes (this is done to fight a xargs issue) and stream it to our 9999 port.

The final neat feature

If you can redirect anything to aplay why can’t you send it… your own voice! It is as simple as this:

arecord | ssh user@ aplay

arecord will record the input from the microphone and send it via pipe directly to the sound output of the target computer. Execute the same command from the second computer (with first computer’s IP address respectively) and you’ll have a super-secured overly-hipster voice connection (still with a couple of seconds lag:)). Who needs that crappy Skype anyway?

I covered a little bit of examples of what you can do provided a certain knowledge of Linux tools and a certain amount of stupidity. Hope this proves useful to somebody and remember – I was using this before it was cool!

Categories: Linux Tags: ,

Writing Tetris in Clojure

September 10, 2011 6 comments

Good evening to everyone. Today I want to guide you step-by-step through the process of writing a game of Tetris in Clojure. My goal was not to write the shortest version possible but the concisest one and the one that would use idiomatic Clojure techniques (like relying on the sequence processing functions and making a clear distinction between purely functional and side-effect code). The result I got is about 300 lines of code in size but it is very comprehensible and simple. If you are interested then fire up your editor_of_choice and let’s get our hands dirty.
The whole code is available here.
Read more…

Raidcall on Wine: problem with dnsapi.dll

May 2, 2011 4 comments

Recently I stuck with a problem that had no solution around the Internet. Raidcall, a voice chat program exclusively for Windows, refused to start under Wine referring to the absent (or wrong) library dnsapi.dll. I found out that there is such library in ./wine/drive_c/windows/system32/ folder. Replacing this file with original dnsapi.dll taken from Windows distribution didn’t help. So after that I opened winecfg, switched to Libraries, found dnsapi.dll (native) in the list and just removed it (Remove button is on the right). Then, after applying the changes, Raidcall finally started.

Hope this would help somebody.

Categories: Linux, Wine Tags: , , ,

Browsers on WM8505 Linux

February 21, 2011 2 comments

Being a proud owner of WM8505 mini netbook I spent a lot of time tinkering with it. This little noname machines ship with preinstalled WinCE that is very close to useless, so as soon as I got the netbook I installed this Debian distribution on it. And since I don’t want my time to be utterly wasted I decided to start a series of post concering different aspects of using Linux on WM8505 netbooks. In this very entry I would talk about different browsers available for this installation, from the simplest to the most functional. So, let’s start.

Note: most of the information here should be also relevant for VT8500 netbooks.

Read more…

Categories: Linux, WM8505 Tags: , , ,

Orglendar – calendar with org-mode schedule list for Awesome WM

January 21, 2011 2 comments

This is still another widget to make awesome users’ life easier. This widget parses your Emacs org-mode files and shows you a pretty to-do list and a calendar. Here are listed its features:

  • shows on-demand calendar with marked schedules and deadlines
  • shows schedules and deadlines ordered by date
  • supports multiple org-files

If you are interested visit this link for further information about installation and usage.

Categories: Awesome, Linux Tags: , , , ,

Quick launch bar for Awesome WM

January 13, 2011 Leave a comment

After switching from Gnome\KDE many Awesome newcomers feel the lack of mouse-operated controls (like desktop icons or quick launch shortcuts). This widget tries to satisfy their needs providing an ability to put iconed shortcuts on the taskbar.

Widget uses *.desktop files for specifying the shortcuts, so you don’t have to edit your configuration file in order to add another shortcut. Also, you can just give the widget your Desktop folder as the folder for shortcuts, and they all will appear at the taskbar without any additional efforts.

For information about widget configuration and for the widget itself visit

Categories: Awesome, Linux Tags: , ,

Coffee Time with Java – Part 1.5 – Sockets in Clojure

January 5, 2011 Leave a comment

It is almost a year now since I wrote the first part of meant-to-be series of topics concerning Java. I understood that there is no need to write the same stuff over and over again while there is plenty of it on the Net. But this time I’ve got an idea to rewrite that primitive server-client demonstration into Clojure and see how it will look like. Read more…

Awesompd – half-widget/half-MPD-client for Awesome WM

November 5, 2010 7 comments

Awesompd is not just an ordinar MPD widget. Its aim is to provide awesome users a robust, functional and extendable MPD client in the form of widget. Here are main features of awesompd:

  • Provides an ability to control playback, switch songs, playlists, change volume and other options.
  • Displays information through a scrolling widget and naughty notifications.
  • Supports multiple servers and able to switch them on the fly.
  • Supports UTF encodings.

For information where to download and how to setup it see .

Categories: Awesome, Linux Tags: , , ,

The Modern Programming Craftsmanship

October 29, 2010 2 comments

To make a start on the topic indirectly, I will state that one can view any kind of activity from different sides as different processes. Actually, there are different sides in any activity, but usually these sides are defined by people themselves. Chess, for example, were said to be an art by Wilhelm Steinitz, Emanuel Lasker considered them to be sport, Chigorin thought about chess as about science. But chess didn’t change because of these points of view, it’s the player who chooses the point for his own game of chess.
Today we see that the software engineering transformed from being a magic thing into the kind of craftsmanship. Programming is no more considered a fun delightful action but a slow tedious process of typing in tons of code, testing, debugging and repeating the cycle again. How did it happen? The whole IT sphere was from the beginning some kind of wizardry. A small amount of people made the large lifeless machines work and perform complex operations that were impossible to do for a human. But time has passed and wizards are now replaced with lots of commoners with minimal (usually insufficient) knowledge about the profession itself. This fact is much more mysterious and astounding to be left unquestioned. Read more…


Get every new post delivered to your Inbox.