mkdir spin
for angle in `seq 360 30 690`; do gm convert original.jpg -background "#FFFFFF" -rotate $angle -crop 512x512+0+0 spin/$angle.png; done
cd spin
gm convert *.png -loop 0 -delay 20 spinningfoobar.gif
#!/usr/bin/perl -w
# Rename video files with a ISO date prefix, e.g.
# rename from P12345.MOV to 2018-01-30.P12345.MOV
# Tested with MTS, 3GP and MOV files.
# (c) 2018 Yrjö Kari-Koskinen <>
# Licensed with the MIT License
use Image::ExifTool qw(:Public);
View excercise.js
// What does each logging statement print, why?
var x = 1;
if(1) {
var x = 2;

Denglisch words I hear while living and working in Germany

  • gefixed
  • gemerged
  • gerebased
  • gedownloaded
  • terminieren: either to terminate (to kill) or to agree on an appointment (Termin)
  • gerebranded
  • reviewen, "Ich hab' einige gereviewed"
  • beim merge
  • gecherry-picked

Living in Germany

Here's some remarks I've made while living in Munich, Germany (vs. in Finland). I made a similar list in 2004 in Austria.

Here we go.


  • It's very customary to not be able to pay with a credit card. One needs to carry always cash. Sometimes just the local debit cards are valid, like in Ikea o_O



Howto start using Letsencrypt with simp_le

What I had:

What I wanted:

  • A Letsencrypt certificate for Apache, Postfix and Dovecot
  • Simple tool for managing certificates that does need root privileges
  • Automatic renewal
View map.clj
user=> (def mymap {:foo 1 :bar {:subfirst 1.2 :subsecond "foo"}})
user=> (:foo mymap)
user=> (mymap :bar)
{:subfirst 1.2, :subsecond "foo"}
user=> (-> mymap :bar :subsecond)
View gist:0d5cfa0d0ee467808810;; dig +short -t NS $DOMAIN @$MASTER |sort >/tmp/$MASTER; for h in `cat /tmp/$MASTER`; do echo - Querying $h:; dig +short -t NS $DOMAIN @$h |sort |diff /tmp/$MASTER -; done

Keybase proof

I hereby claim:

  • I am ykarikos on github.
  • I am ykk ( on keybase.
  • I have a public key whose fingerprint is 2E71 56C3 7760 E735 B175 E053 0E4E A201 3B3A BE42

To claim this, I am signing this object:

View gist:f1e6e208789e300f7adc
(use '[ :only [sh]])
(defn say [& args] (apply sh "say" args))
(defn say-and-print [n]
(let [n-str (str n)]
(println n-str)
(Thread/sleep 2000)
(say n-str)))