Towards the end of the year, it’s time to relax and look back at what happened the last 12 months. I did quite a few projects that where just fun and had no real use at all. Well, maybe as easter eggs hidden in some serious applications…

Brainfuck compiler

Brainfuck is another programming language invented in Switzerland. And an esoteric one too. Its extreme minimalism makes it hard to write programmes in it, but easy to write a compiler for it. That’s what I have done.

The Brainfuck compiler generates directly executable files in Linux ELF format. Due to the tiny “standard library” of brainfuck, the executables have a nice size (usually a few 100 bytes).

With some time I could support more esoteric programming languages and create elcc: The Esoteric Languages Compiler Collection. We’ll see…

Banners

This one could even be useful. In command line applications or log files, you maybe want to show something very prominently. Using ASCII art banners are a way to achieve this. But if you’re not an artist, creating such banner texts by hand is not a feasible. Big Banners to the rescue!

Emoji Art

Emojis are still hot in 2017. I guess some people cannot communicate without them anymore. On the other hand, ASCII art, the craft of drawing images using only ASCII characters, is a little bit out of fashion. Why not combine the two I asked myself and so emoji-art was born. Technically, it works like this:

  • Scrape the emoji cheat sheet to get a list of emojis and their images.
  • Use the great caca library to generate ASCII art from images.
  • As I’m a java guy and caca is a native library, take libcaca.js, a javascript port of caca (thanks emscripten!) and run this inside JVM’s own javascript engine.

Sounds horrible, but works. And the best thing is: Because it’s javascript, this works also directly on a web page without JVM. That’s great for demos.

8888888888888888888888888888888888888888888888888 ;.888888888888888888888888888888888888888888888888
8888888888888888888888888888888888888888888888888.  X88888888888888888888888888888888888888888888888
888888888888888888888888888888888888888888888888:t888:8888888888888888888888888888888888888888888888
888888888888888888888888888888888888888888888888S8.;8;8888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888XX;8t: .8888XX;8S888888888888888888888888888888888888888888
8888888888888888888888888888888888888888888t.t:88888%8:88@888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888 88S888X88888t888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888S%S 88X888Xt888888@@888@@88@@88@@88@@88@@88@@88@@88@@888
8888888@888@@@@@@@@@@@@@@@@@@@@@@@@@@@8888888S8   8@8;8XS88888888@8888888888888888888888888888888888
88888888888888888888888888888888888888888888;X8; 8.8.%SXS8888888888888888888888888888888888888888888
888888@888888888888888888888888888888888888S;@8888888;%8S8888888888888888888888888888888888888888888
888888888888888888888888888888888888888888888X88X%8%S88X888888888888888888888888888888888888888888
888888888@88888888888888888888888888888888XX88 :tS:%X.X8S8 X8888888888888888888888888888888888888888
88888888888888888888888888888888888888888S8X  8XS8%8X:;% XX88888888888888888888888888888888888888888
8888888888888@88888888888888888888XS :8S8X:..;%88@%@;:8:.%S%%@8:888S88@88888888888888888888888888888
88888@8888888@888@@8888@@8888@@8888 X@88:;;;%S8;;X%%88.8%8S:X88@8 8888888@8@@@@@@@@@@@@@@@@@@@@@@8@8
888888888@88888888888888888888888888888@ 888tt;t:%:. 8:t88@8;X@8888888@8@888888888888888888888888888
88888888888@888888888888888888888@88888888X@%8%:.8@8;X888@@@8888888888888888888888888888888888888888
88888888888888888888888888888888888888888888@8S8X%8 8;8SS8X 888888888888888@88888888888888888888@888
8888888@88888888888888888888888888888888@@8.88t%8X@8@8S8t8@8X888888888888888888888888888888888888888
888888888888888888888888888888888888888@8888:;8t@%8@tXS:@.888 X88888888888888888888888888888888888@8
8888888888888888888888888888888888888 X8X88X8;;%%%%;@S8;8@SXS8@@X8888888@88@8888888888888888888@8888
8888888@88@@@88888888888888888888S8@;8;88 88.8:8t%8%88;8 888 8888@  @88@8888@8888@888@@8888@@8888888
88888888@8888888888888888888888X@X88@;@%X@88 88@St%@.8   8.%@.S@t8@XS8888@888@8@888888888888888888@8
888888@888888888888888888 @@8@S8 888;;t;;@88X:%%;;t8t%;. :8;8::;:@88@@888888888888888888888888888888
888888888888888888@8@88@8.@888888;:;;;.:tS;Xt%;;8Xt@..@888 .8%%;;;..8:888@88888888888888888888888888
8888888888888888888888888888888@t:Xt.. 88XX8X8tX%X88  8@8888.8%8%%ttS;:8X888888888888@8@888888888888
888888888888@88888888888888888XX@ttS8@X8S8S8tS8X8S@t%8%tt@t8:%S%t8Xt888t8888888888888888888888888888
88888888888@8888888888888888888:;88.;8%8t8t8;8X;S8S@8888:8:888@8tSS8:8888888888888@8@8@8888888888888
88888888888@88@8888@8@88888888888@S8:8X;@;:t@.;8tXtX%X X;;;;. X:8888888888888888888888888888888888@8
88888888888@888888@8@888@88@8888.88;.;@8@8@:;;;ttttt;;:;;;: S%8X8S@8.8888888888888888888888888888888
88888888888888888888888@88888888@88.XX..;:8 .:8;8t8t8;%.8%;;8 88 88;88888888888888888888888888888888
88888888888@8888888888@888888888@ 8 :;%%%t;;@8S;;8%@%..:;.:;X.888 X.8t8888888888@88888888888@8@@8888
8888888888@888888888888888888@%88;: .t.. ..;;8%..:.:8t8tX8t.:S%XS.:SS8888@88@8888888@888888888888888
88888888@88888@88@8@8@88888 :8X;;@t:   @8XS :XS.8t8%X:X8%;8X.:t..;;;X.X88X88888888888888@88888888@88
8888888@88888888888@8888 8@8@.:8tt;;.;     8t;8SS:X8t@;:8:8:8.8t8t8%;@ 8S88 8  @8888888888@888888888
888888888888888 SS88X8@8888 .8t;;;8t;tt8SX%t;tt@8;Xt@.8:8tX:8..S%%;%;:% 888S8888@8SX8.@8888@88@88888
8888888888888888@88S8@.8X.::8t:;ttt:%;;t8t8t::8S8:.8t..:@88 888 X%8t8%;:X:888X888888888888888888@888
8888888888888888.888888@.8;;;8t%%.8XtS@888;8%%S::8SS8t88t @%SXX@ 8%X;%;t8;:8.8@8888;8888888888888@88
88888888888888@8888X8t888888X.%S8S@88S8@.888888S88S%X@X:% @XSXS  X@@S8X 8S88tX8888%8888888@8888888@8
888888888888888888888888888;8888t8.SX8@.8@8;88;8888t88888@@8S88X8@@@888@88S8888888888888888888888888
88888888@88888888888888888888 8@8@8  .:8;8t8@.8 88:8 .8tt 88888  @8 888t88888888888888888888@8888888
8888888888888@8888888888888888 @ @:8;8t;;;Xt:;:;.8;:8 @.88:88;8%%8;8 8;%88888888888888888@888@8@8888
88888888888888@88@8@8888888888.8;;;;@tX;@t;X@;tt;888 8;;t@8SXX:SSt8t8:88:8888888888888888@88888888@8
888888@8888@888888888888888SS@:;8:8@;X;StXt;8t%t X@::;8;@%XtS%tS%Xt@;8:8S@ 88888888888@8888888888888
888888888888@88@888888888X88.:88@888S888:@Xt@X888%8;8;;8t@t@%XS%XXX:8888:@8@88@88888@888888888888888
8888888888@8888888@88X8%@8888:X@8SXS:8 8X;Xt@%;@;8t8t8;8t8Xt8%@X%8888.;tSt@@88@ 88888888888@8@888888
888888888888@88 8S8888888 8t:8;8     .8S@t8;8;8;8;8;8 8.8@.8t88%%t;;tt:;.888888%88X 88888888888888
8888888888 @88888888X8888:888X88:.  .8 88@.8 8 8 8@8;8X888t8@@8t8 ;;:   :.:@888 8X888@@@88 88@888888
88888@8888 %X88X8@8888@ 88@88 S8 8@888 8S88888X8@ 88X88tSX@@8:88@8:: 88@  .:X:8X88.X8888X8 888888888
88888888888;888888@:8 88@88@ 8.S8 8 @ X8.888X88S:8 @:@@88 8 @8888@X8% 8;8X:8@888X888888X888@888@88
8888888888888 S888.8:8:8:8X8888@X@8888 @8888888@88888888XX@8@88 8;888.8;888.8:S8888@88X @88888888888
888888888888888S@8X8888:@.88@888X8888@8:@8888St@S8888@S88%888X888888@8S8@88;88X8@@888%888888888888@8
888888888888888888 %;@88888@888888@S@8@@;%%8.t@88X;888;;:8;X%888888888@888888888;:.8;88888888@88@888
8888888888888888888888tt :tX8XX8X Xt;:888888 8888tS%Xt8t8888888tX%S X888SS8 @.:88888888888888888@8@8
8888888888888888888888888888:888888888888888@X8;S8.8XS%888888888888888888888888888888888888888@88888
888888@888888888888888888888888888888888888888S%@8:888X8@ 888888888888888888888888888888888888888888
888888888@8888888888888888888888888888888@X@88t8X:8%88S88X@X8888888888888888888888888888888888888888
88888888888@8@888888888888888888888888888%88.8%S;%@8;88SX8@X88 8@8888888888888888888888888888888@@88
8888888888888888888888888888@88888X8X88888:8SX8S8@888X88X8@@88888;X8 8888888888888888888@888888@8888
8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
8888888888888888888888888S8X@;888888888888888888888888888888888888888888t8@8888888888888888888888888
888888888888888888888888;:%S@SX88888888888888888888888888888888888888@t ;SX:.88888888888888888888888
8888888888888888888888888:;;;::t8888888888888888888888888888888888888...:;:%X  @88888888888888888888
888888888888888888888@t::       .8t88@8888888888888888888888888888;8       .:.:888888888888888888888
88888888888888888888888@ 8@8@8   8888888888888888888888888888888 : 8X8X8S  . 888@88888888888888888
8888888888888888888888.. 88@@@@88 X@ S888888888888888888888888888X  8@X@8XX 8t;888888@88888888888888
8888888888888888888888t.8@@888888 8t888888888888888888888888888X  8 8888@8@ 8;:.88888888888888888888
8888888@888@@@@@@@@@88.  8@88%8@8 8;t; 88888@8@@@@@@@@@@@@@@@88t; 888@8%888 @: :888888@88@@@@@@@@888
8888888888888888888888 8 88S% tt888 ;;8888888888888888888888888;8 Xtt SS8 8: t88@8888@888888888888
888888@888888888888888X 888%t   @ @  .S 8@888888888888888888@8;. 888@   ;t8 8: t8888888@888888888888
888888888888888888888@  888:;.  ;88@: t;8888888888888888888888;  88 .  .;;8X.S %888888@8888888888888
888888888@8888888888888.888; .  t8 8.8S%888888888888888888888@8.S@t  . ;8 8:XX8 8@88888888@@888888
8888888888888888888888888::.  ;88.@::% 888@888888888888888SS;  @88t. .: 88:%.%888888888@8888888888
8888888888888@88888888  888::   t888;S;;88@88888888888888888@8 8 888t    ;8:8: % 888@888888888888888
88888@8888888@888888888:@88::   S88:8 ..888888888@888@@88@@88.:8 888    ; 8S% %%8888888@888888888888
888888888@888888888888  888;; SSS88:;%.:888888888888888888888;8;88@ S tt8.8; %888888@8888888888888
88888888888@8888888888   X8tt @ 8888:%:;88888888888888888888t  8.X8. X  % 8.8; :88888888@88@8@888888
8888888888888888888888@.888S% X X88;  ;%888888@8S8X@SX  88888;t  :888@ SXS8.t.  8888888@88888888@888
8888888@88888888888888::.8:tXXS8@88;::XX:88t888 ;    .8@8888XX%;t...XS@ 8S8 8t.:88888@88@88888888888
888888888888888888888S:: 8X88@8S888S:.t 8@XX8 8X@8X88X88S%tX    .;8@888X888; ;St88888888888888888888
888888888888888888888 %;  X88@@888888888@88X8888@888888888@@88X  S888@88t. t%:88888888888888888888
8888888@88@@@88888888@8%. :.t@8.88t88%888@S%%SS%%%%%S%SXX@XX8@8888tt:888:. X8888888888888888888888
88888888@8888888888888S ;::.:88.88888888XSS%ttttttttt%%%%tS%S@888888:.. ...;%..8888888888888888@@888
888888@88888888888@888@@StS@S.8;88888@SS%%ttttt;;ttt;tttt%%%SXX@88888t8;%X888%@88888888888@888888888
8888888888888888@8@888  888t% 888888X @ Sttt;;;;;;;;t;tttt%%%SSXX88888 88t@88888888888888888@88888
888888888888888888888888XX8. 88t888X 8 @ %t;;;;;;;;;;;t;tttt%%SSSX@8888.@8S8888888888@@8@888888888
888888888888@888@88@8888.tt S%888@X X@ @ S %;t;t;%%%ttttttt%t%%S%@88888tt t  8888@8@8@88888888888888
88888888888@888888888@8@@Xt@ 8888XX8 8 X SS % %XSSXXSSttttS%%%SSSS@@8888.%: S88888888@88888@888@8888
88888888888@88@88@8@88888  8@888@ @ 8 8 8 X XS 88.:.@@ S%t%%%SSS%SXX8888 8;t;8888888888888888888@888
88888888888@888@888888.@.8 8@888XS8 8 S8 @ @ XX:.ttt:;S%SS X @ @SS@X88888 %:;8:S8@888@88888888888888
888888888888888888888  : @88888X@ 8@ 8 8 8 S@ S;;tttt;t SXXSXXX%@ 8 888888  8   88@8888@88@888888888
88888888888@88888888888 88@8@@@@ 8S@ 8 8 8@@8;;%%%;t8@X @ S@ 88888S888t88 @. S 888888888888@888888
8888888888@8888888%8@XX @@ S88X8X@S@ 88 8 8 8@t:;%%%;;%@8XX8 88 8 888888888 8.8t88 888@8888888@88888
88888888@8888888S8X 88 %@8888@X@@88 88%X@ 8S %;SSS;t.X8 8@8@@88X88 @X88888 8. .:8 S@88@8@888888888
8888888@88888@88@8:  888@88888@@     8 88X@S8@ %%SSXtt 888 X@ S   8 888@88888.@8: t88888888888888888
8888888888888888:t.8 888888888XX8SX%SXX 8 8 88 %tXXX%%.88S8@ 888%S:%8888888;88@ 8  t%888888888888888
88888888888888 %.8888888888XX 8@;:;%88%88888.%%@@@%S;@88 888XS:;%SXS 888888888:8...SX@88888@888888
888888888888888;. X@ @8 @8888888X@X::: .8S 88S.SS@@@XS;8888 8@...:@@t8t8@8888888 8   %88888888888888
888888888888%SXt  888888888888ttt.  ..XX 88888X888XX8888 8X  t ..%;@888888 888@.@;XX S8888888888
888888888888 X@; @ 8888888888 8S.88S88::@%S@8888@888X8%888  8::@8X88:SSX888888@8 8 8;:SS 88@8@888@88
88888888@888t@X;X 88 @88888888XS;88888St@; 88X888888888888 88t@88888;SXX88888888888:%.t%S88888888888
888888888888@%@.SX @8888888888:;:88888:;;t%8 8888888888  @%tX;:88888.;:@8888.888t8:8  %t8X8888@88888
88888888888S8SS88888888888888SttX@SS..X% 8  888888888  8SXX;.SS@;X @X88888888888 8  ;t@X 888888888
88888888888@8tX S:X8888.8888888X%88;88  t88 8888@@8@88888 88X  8@t88 SX888888:88:88t8:%%8S8888888888
88888888@888SXSS 8t88888.@88888XSt%%@@@t;8888@@@@@888888:8888S%tS%@88888.8888 88:  .S8SX8888888888
888888888888;SX:  8 8888 8888888888888  8888888@@X@@888888888  8888888%888888X88 88:;:@8:t8888888888
88888888@88@@X@:  S8;88 8888.8888@  8%888888888@@X@X888888:8888;8 XS8888:8.88S8;888. t@8@88888888888
888888888888888%t::t8:888   .8.8888t88;8:8;8888888@8@888:88.8 88:888t8:8   88;8:8 8%.%8@888888888888
88888@8888888.X8%%:::8   .;:.      ::;8.8t88S 88888@888X 8.8.8 .8   .       8  8t:t%SXX 8888888@8888
888888888888888@SX;888 8          .:;.:;;8.8888 :%%%t;@88.88 :8  ..:..      S8 888S@S888888888888888
888888888888888 @8.8888 S%S       .8 8 8.8:88X888888888@@88 8 .8 :..      %S S8888.XXt8888888888@888
888888888888888 8@t888888 S         ..8 8888;%8@8S88%88.8 8          SSX@88888:8%@8.8 8888888@@8@8
88888888888888S888  :.8.88888XXSS  %     . .888X88St888;8         S SXS888888 8;t% S88 8S88888888888
8888888888888888@ 8:S8. :8 888@88@@@SX%     .:88%888X8t;:   % XX X8@88888:8; :.t :%S  88888888888888
8888888888888X  888@@ %88S%;;:%.88888888@ S   @88.::88@   SX@88888:8:8;:;.t%%88%S::8888 888888888@88
888888@8888S 88@88888888X@;% tt%%;;;;: 8 8888: 88XS%88 8t8:8:;:.:;:;t@;%%88;8X88@X888888 888888888
8888888888888@888%888888888XtX8888@8X%88S%;:.:8888888X8SXX;t;@@:SS88888t:;X88888888 8888888888888888
88888888888@8X 88888888888888888S8X888@S%  %tS.::ttt;t:S8%;% t%@8888888S8X888888888888S 888888888888
88888888888888888888888888888888888888888888:;%XXSSSSSt;;8888X888888888888888888888888888888@8888888

Firetop

In a certain project, there were issues with hardware getting too hot, almost burning. So the system engineers had to have a regular look at top to see if there’s too much CPU load. During a coffee break, someone had the idea to combine burning hardware with the top command and so, firetop was born.

Swear in swiss german

In another coffee break chat, someone found this nice site where you can let yourself insult in swiss german. I wanted an offline, command line version of this and started by scraping all texts from this site. It was great fun and I kept adding things so in the end, swiss wowbagger

  • contains more than 500 urchige words with a huge number of possible combinations
  • adjusts adjectives to the gender of the subject (had to learn some swiss german grammer for that!)
  • is a kotlin - multiplatform project that compiles to JVM bytecode as well as to javascript
  • is still great fun

Läck Jänu, du aagchaflete fautsche PHP-Programmierer, hantli is Bett!

More ideas

There are more ideas, but with only sketchy implementations:

  • The Breakout game in the terminal
  • A simple C64 emulator in the terminal that could be used for scripting and other fun
  • Animations in the browser’s address bar
  • A movie quiz based on the hashtag #MovieLinesInCode

Happy and inspired new year 2018!