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);}}

14. Oktober 2011 von erlehmann
Kategorien: Bastelei, Netzkultur, Software | Schlagwörter: , , | Schreibe einen Kommentar

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

10. Oktober 2011 von erlehmann
Kategorien: Software | Schlagwörter: , , , , | Schreibe einen Kommentar

Vortragsfolien: „Quo vadis, Web?“

Wie angekündigt fand auf der diesjährigen re:publica eine Podiumsdiskussion zu Webstandards statt (Foto). Als Einleitung hielt ich einen Kurzvortrag zur Geschichte der im Web verwendeten Technologien; hier sind die Folien, hier meine Notizen.

Peter Zschunke hat den Verlauf der Veranstaltung zusammengefasst; mein Fazit steht bei Peter Kröner in den Kommentaren:

Aufnahmen gibt es wohl keine, aber die zu meiner Überraschung dann doch ganz gut angekommenen Folien poste ich alsbald bei mir im Blog, sobald ich den Fehler im Folienskript gefunden, gefixt und ein PDF generiert habe.

Kritik war unisono, dass eine Stunde zu wenig war für dieses relativ große Fass – ähnliche Erfahrungen machte ich bereits beim Troll-Vortrag auf der letzten re:publica, nächstes Mal bestelle ich dann einen größeren Slot oder übe vorher mit Lichtdoubles. Titel und Lineup hatten bei manchen außerdem eine eher technische Diskussion erwarten lassen.

Highlights: Peter betonte, dass es zwischen dem ursprünglichen Modell von Webseiten und heutigen Webapps Unterschiede gibt – so darf etwa eine WebGL-Anwendung durchaus Hardwareanforderungen stellen. Max stellte neben Nutzer und Webentwickler noch den Medien-Produzenten als weitere Fraktion mit teilweise konträren Motivationen vor (Videos doppelt und dreifach kodieren ist Arbeit) und Regine erklärte mit einem Rückgriff auf DIN-Standards, warum Normierung traditionellerweise eher in Industriekonsortien als im akademischen Kontext geschieht.

Von mir wahrgenommenes Fazit: Sich selber als Entwickler in Standardisierungsprozesse einzubringen ist einerseits schwierig und demotivierend, andererseits kommt man bisweilen selber schon gar nicht mehr hinterher mit den Neuerungen. Den Browserherstellern gegenüber sind wir alle Bit-Steller (höhöhö).

Die Folien erstellte ich mit Inkscape und Inkscape Slide. Die beiden Grafiken zu Teichenbeschleunigung und frühen Webbrowsern stammen von hier und hier.

16. September 2011 von erlehmann
Kategorien: In eigener Sache, Software | Schlagwörter: , , , , , | 1 Kommentar

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.

Hier ist die Demo.

Ebenfalls interessant ist diese Javascript-Technik zum dynamischen Anzeigen von Textänderungen.

12. September 2011 von erlehmann
Kategorien: Software | Schlagwörter: , , , | Schreibe einen Kommentar

Linkschleuder (20)

Musik

Spiele

Comics

Geschichten

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

09. September 2011 von erlehmann
Kategorien: Linkschleuder | 1 Kommentar

← Ältere Artikel

Neuere Artikel →