The IT Crowd Theme in C
Inspired by VIznut, in the last few days I have experimented with music creation using a C compiler. This morning, I chose to write small program playing a melody not entirely unlike the theme of The IT Crowd when piped to /dev/dsp. True to the spirit of the intro, it ends with a division by zero.
#include <stdio.h>
main() {long int t;for(t=0;;t++) {fputc((int)(
(0/(128000-t))|(((t<92000)*0xff)&
(t%2000*(" $& %' '% %$"[t%32000/2000]-32)
|t%2000*("$$ %% '' %% "[t%32000/2000]-32)/2)|
(t%2000*("'&"[t%92000/2000]-32)&(t>92000&&t<96000)*0xff)|
(t%4000*("'&(&*$,* "[t%96000/4000]-32)&(t>96000)*0xff))
), stdout);}}
Much smaller version that sounds even better:
#include <stdio.h>
main() {long int t;for(t=0;;t++) {fputc((int)((1/(128000-t))|(t>96e3)?t%4000*("'&(&*$,*"[t%96000/4000]-32):(t%2000*
("$$$&%%%''''%%%'&"[t%32000/2000]-32-(2*((t>28e3)&(t<32e3)))))/(1+(t%8000<4e3))), stdout);}}
Fixing IPython Pipe Handling
On my Laptop, I use IPython as the default shell. Lately, I noticed pipe handling to be broken in some specific cases. I could trace this back to Python ignoring the SIGPIPE signal.
SIGPIPE gets sent to a process when it tries to write to a pipe that is not read by another process. The default action for a process under these circumstances is to terminate.
Imagine a process yielding a huge amount of text, piped to head to print the first ten lines. With SIGPIPE ignored, the process will continue after head has stopped reading. Usually, this will only affect runtime – however, if the original process outputs an endless data stream, the shell will hang.
To check whether your shell ignores SIGPIPE, try the following command: yes | tee | head. It should print 10 lines with a single y each, then terminate. If the shell hangs, printing a message similar to tee: standard output: Broken pipe, SIGPIPE is ignored.
TL;DR: In IPython, proper SIGPIPE handling can be restored using the signal module: signal.signal(signal.SIGPIPE, signal.SIG_DFL)
.
Further reading
Textänderungen dekorieren mit CSS
Änderungen in HTML-Dokumenten werden durch die Tags <del>
und <ins>
ausgezeichnet. Standardmäßig werden diese vom Browser durch- bzw. unterstrichen angezeigt. Problematisch ist Letzteres, da Unterstreichungen typischerweise auf Hyperlinks hinweisen. Bei komplett unterstrichene Absätzen leidet zudem die Lesbarkeit.
Dabei geht es optisch durchaus besser: heise online etwa umklammert Textänderungen und stellt längeren Hinzufügungen die Anmerkung „Update:“ voran – bei mehreren Überarbeitungen sogar durchnummeriert. Ein Beispiel hierfür ist die Berichterstattung zum datenschutzschonendenfreundlichen Facebook-Button.
Heise online erledigt dies serverseitig und gibt entsprechend verändertes HTML zurück. Machbar ist die Dekoration jedoch auch ohne zusätzliche Programmlogik — unter Nutzung der CSS-Pseudo-Elemente ::before
und ::after
sowie des content
-Attributs. Mit diesen ist es nämlich möglich, dem Seitenlayout vollkommen neue Elemente hinzuzufügen.
Befinden sich etwa innerhalb eines <article>
-Elements mehrere Absätze (<p>
), fügt die CSS-Anweisung article > ins > p:first-child::before { content: "Nachtrag: " }
vor dem ersten Absatz jeder eingefügten Textstelle einen entsprechender Hinweis ein. Auf ähnliche Weise lassen sich Änderungen innerhalb von Absätzen und mehrere Absätze umfassende Einfügungen mit (halben) eckige Klammern umgeben.
Die noch fehlende Nummerierung der Änderungen erfolgt mit CSS-Zählern; Peter Kröner hat das schon einmal erklärt. Am Ende steht eine wesentlich hübscheres und nützlicheres Dekoration für Änderungen in HTML-Dokumenten.
Ebenfalls interessant ist diese Javascript-Technik zum dynamischen Anzeigen von Textänderungen.
Linkschleuder (20)
Musik
- Overture Theme — Hintergrundmusik des Spiels BattleCell (via)
- Aquaria: Original Soundtrack — Album zum Spiel Aquaria
Spiele
- Frozen Defence — Turmverteidigung mit drei Spielmodi (via)
- Frogatto & Friends — Retro-Hüpf-und-Spring von den Machern von The Battle for Wesnoth
- Nikki and the Robots — Rätsel-Physik-Plattformer mit Protagonistin in niedlichem Katzenkostüm (via, via)
- FIRS Industry Replacement Set — zusätzliche Güter und Industrien für OpenTTD
Comics
- Die Abenteuer des Abenteuermann
- Beleidigungsmaschine (danke, caro)
- Ein Comic von Ralf König — eine Lüge von Enjambements (danke, vrs)
- our blood stained roof (via)
- We are become pals! — Geschichte über Freundschaft von Joey Comeau, illustriert von Jess Fink (danke, matthiasr)
Geschichten
- Leben und Tod — schulisch-lyrische Herrschaftsfantasie
- Illegal Engineering — eine kurze Geschichte des Safeknackens
- The Ghost in the Machine — Infraschall als Erklärung für Geistersichtungen (via)
- How Digital Detectives Deciphered Stuxnet, the Most Menacing Malware in History
- Memoiren von Richard Feynman: Teil 1, Teil 2, Teil 3, Teil 4, Teil 5 (aus “Surely You’re Joking, Mr. Feynman!”: Adventures of a Curious Character)
Anwendungen
- the retroscope — zeitverschobene Videowiedergabe (via)
- FocusWriter — ablenkungsarmer Vollbild-Texteditor
- TaskForce — minimalistische Todo-Liste mit unerbittlichem Fortschrittsbalken (via)
- DiffPDF — zeigt Text- und Layout-Unterschiede in PDF-Dokumenten