Development log

Code, tricks, quick technical ideas, recipes, progress reports, bash, ffmpeg and more…

supercollider: deb package from git with checkinstall

Follow instructions how to build and install supercollider from git here:, but instead of final make install, use checkinstall (apt install checkinstall):

$ sudo checkinstall -D -t=debian --install=no --pkgname=supercollider --pkgversion=3.10.0-0your_name make install

You’ll end up with a .deb file in that current build folder. Install it with gdebi:

$ sudo gdebi supercollider_3.10.0-0lallafa-1_amd64.deb

Prevent apt from ever upgrading your package by creating a file called “preferences” in /etc/apt folder, and put in:

Package: /supercollider/
Pin: release *
Pin-Priority: -1

From AwesomeWM to i3wm

I’ve decided to reinstall the GNU/Linux system on my old X220 ThinkPad and in 2018 finally move on from UbuntuStudio 14.04 (Trusty). In the process of also trying out new Lubuntu (which I didn’t like for some quite aesthetic reason and retried with Xubuntu – much better!) I also decided to finally try i3 window manager. So I wanted to quickly layout just some of the differences, that are quite subjective.


  • windows grouped in a container with tabs
  • minimalist configuration
  • beautiful status/widgets bar
  • hiding screen-edge window borders
  • windows are actually fully using all pixels of the screen


  • I keep hitting (awesomeWM) shortcut to maximize a window. There’s no maximise window in i3.
  • when there’s a floating window in otherwise tiled workspace, I cannot ‘hide’ that floating one
  • cannot switch away from fullscreen window within a workspace (to a window otherwise behind that window
  • There’s no minimize functionality
  • snap to screen-edge or other windows in floating mode

(I might update some of the points above in the next few days, as I become aware of what the muscle memory is telling me)

So I think there are number of limitations in i3wm – at least for somebody coming from AwesomeWM, which isn’t necessarily a bad thing. So these above are a moving target. I’m sure they will change as I will get used to features and non-features.


Huge thanks to Adhi Pambudi for sharing his setup as i3-starterpack!


i3wm, configuration in Emacs, URxvt

update #1

In order to use xbacklight to change brightness of your screen, you need to add

into your xorg.conf.

Since by default there’s no xorg.conf on ubuntu, instead of creating one, I went this way: in /etc/X11/xorg.conf.d/ folder I created a file called intel_backlight.conf and into it put the following:

Now, to use the Fn keys for brightness (on Home/End keys), into ~/.config/i3/config you put

Daily Beat: a simple 808 beat with an immature bass sound

Today I started to work on a simple project that I hope becomes a routine almost every day. I delved into Patterns in SuperCollider again and hacked together a simple beat with 808 samples and with very little time left today added a very simple broken bassline/synth line.

Two important aspects of this little endeavor, for now: a) making *something* everyday, and b) making open source music – well libre open source code that generates music.

Making (composing) something everyday is an important practice for every artist. I’m not sure if this is gonna work for me, as I frequently start something and then abandon it, but nothing will change if one doesn’t try it. I want to play with something everyday, even if it’s a short melody line in Renoise or something new in SuperCollider, I just want to spend minimum half an hour on it. Not everything will probably be SuperCollider (although I have a fantasy to switch completely to SC and compose everything there, including heavy club tracks!), and there will be days when I’ll not manage.

So, today’s project is obviously a beginning. The full code is below, with a link to a zip with scd and samples, and also on Gitlab ( Personally it feels that this was an important little refreshing lesson to remember how to use Patterns, what Pbind does and how to put patterns running in parallel together with Ppar.

Continue reading

Stylish & Mastodon: fixed number of columns

How to have a fixed number of columns visible on your mastodon instance using stylish for Firefox or Chrome (or Chromium):


Install Stylish add-on/extension:



Add new style:

Find Stylish ‘manage styles/preferences/settings’ – in Ff’s Add-ons or Chrome’s Extensions. Click “Write a new style”, enter new name for your new style (name of your instance for example), then under “Mozilla format” click “Import”.

paste this into the wide white area (change into your instance domain):

Click “overwrite style”. Then click “Save” in the left column. You can then edit the number of your columns as desired in this code (see the comment in the code above). Always click save and check the site in the other tab.




ffmpeg: audio visualization tricks

Often one wants to share audio online, but it seems like video as a format has many more options: mastodon, twitter, facebook, youtube, all allow to upload video, but not only audio. Here are some ffmpeg tricks, how to add interesting video to your audio file, often autogenerated visuals. All the code is supposed to be used as one line without line-breaks.


Audio Vector Scope

The code above creates a mp4 video file with a vectorscope nicely centered inside a 854×480 (480p) video. If you need a 1:1 video, just exclude the pad part:

Documentation on ‘avectorscope’ filter is here: One can play with zoom and other options to produce desired form.


Show waves

more options:


Above code will create almost completely desaturated spectrum of the audio sliding from right to left. Again, there are various options to tweak, see here:





Static spectrogram

Sometimes you want to just create a static image.

Above one is in two steps. More info here:



Add text to any of the above with a “drawtext” filter. More options here:

MikroTik RouterOS configuration for simple switch

My home network consist of:

  • little linux box acting as Media Server (to play videos off it and projector connected to it) and main routing and firewalling machine. it gets/sets an IP with our ISP and runs a DHCP server and DNS and IP masquerading and NAT-ing for the whole home LAN. The box itself has only one network port but I extended it with another USB network adapter – so, this box is connected to ADSL modem on one interface, and to another router (acting as a switch) on the other interface:
  • two SOHO consumer-level routers configured as simple switches/wireless bridges/AP with disabled DHCP and any routing – they just forward any connecting devices to DHCP on the main linux box.

I ordered a very cheap but seemingly powerful router by MikroTik “hAP lite RB941-2ND-TC” and configured it in the same way as other two routers – one of them of not both will need to be replaced by this new one. So, the configuration is as follows in the web interface – Quick Set:

  • set wireless Network Name if you want the way you want
  • under Internet set:
    • Address Acquisition to “Static”
    • IP address to
    • Netmask (leave at) (/8)
    • Gateway to
    • untick Firewall Router
  • under Local Network:
    • IP Address:
    • Netmask: (/24)
    • untick DHCP Server
    • untick NAT
    • leave UPnP unticked
  • VPN address should stay unticked
  • setup your new admin password, if you haven’t already, and Apply Configuration/Changes.

Now connect the (real) router – linux box to this MikroTik on non-internet port, either ports 1,2,3. You should now be able to connect via MikroTik either with a utp cable (again, not via port marked as internet) or wirelessly.

To go back to configuring your MikroTik, you need to connect to it with a cable and manually set your IP to something like (disable your wifi etc..). Then you should be able to ping MikroTik or open the web interface at Otherwise the MikroTik is somewhat invisible (apart from providing the AP – wifi access point name).

Tearing of fast action on NVIDIA

So with a brand new setup that includes a GLX/Geforce 1070 graphic card (will I ever be able to abuse all that GPU power?) I was somehow dissapointed to find non-uniform flickering, in other words the fast movement of things on screen was tearing. I didn’t prioritize this problem yet, but today I took time to look into it, and the following recipe solved it:

To avoid tearing, there’s a “workaround” – there are two options that seemingly need to be enabled in Xorg/nvidia driver: TripleBuffering and ForceCompositionPipeline (or ForceFullCompositionPipeline). My /etc/X11/ now contains the following in the “Screen” section:

To find out what is your screens layout, you can do

Also, if you want to fix tearing temporarily without changing any configuration files, use this command with something like that:

Supposedly forcing composition pipeline is causing some degradation in quality/speed in games.



Learning SuperCollider patterns: legato, sustain and using pairs

Yesterday I had problems understanding why does a SynthDef and it’s Synth instance complain when it’s envelope duration is shorter than duration \dur. The following code will produce FAILURE IN SERVER /n_set Node 1067 not found complaints in the post window.

The sound will be generated fine, but the problem is that the doneAction and sustain value in Env.linen result in the Synth instance being freed before Pbind does it. So when Pbind does tries to free it, it’s already gone, it doesn’t exist anymore.

I asked nice SC people on SC FB group and the answer led me to understand that there’s a good use of\sustain parameter in Pbind, which deals with exactly that. So to properly control sustain time, an example shows how it can be done:

It seems like the most important part is that the SynthDef has a sustain argument. Pbind will calculate sustain from \dur so that it doesn’t even have to be defined in the Pbind.

There’s a nice thing used above, which I was looking for a while – how to defined note and it’s duration in pairs instead of on separate lines for each parameter: [\degree, \dur] and what follows is a list of pairs.

linux: auto-login

There’s couple of ways how to setup auto-login on linux. This one is geeky and not very user-friendly, but might come handy to somebody. This is on Ubuntu Linux 14.04.1/trusty with graphical login/desktop manager (lightdm) disabled.

install mingetty

edit /etc/init/tty1.conf so that it looks like this:

The most important part are the last three lines. Change username to what you have.

Edit your ~/.profile and add at the bottom:

Reboot and you should end up in your X session.


supercollider: easy beats with patterns

minor random bliss in two

Learning Patterns in SuperCollider, here’s a little lullaby: