IOException.de

Icon

Ausgewählter Nerdkram von Informatikstudenten der Uni Ulm

Today I learned: vi-mode in der shell UND in fast allen Kommandozeilen-Tools

Ich bin ein großer Fan des Text-Editors vi. Wenn auch nicht ganz einfach zu erlernen, ermöglicht er es einem – sobald man sich ein wenig damit auskennt – sehr effizient Texte zu editieren. Die meisten Shells bieten die Möglichkeit eines vi-mode (mit dem Befehl set -o vi). In diesem Modus lässt sich die Kommandozeile mit vi-Tasten bedienen, was das arbeiten damit nochmals deutlich effizienter macht. Mein Problem bisher lag darin, dass der vi-mode nicht funktioniert hat, sobald ich ein anderes interaktives Kommandozeilen-Tool in der Shell öffnete (z.B. sftp). Neulich kam jedoch ein Freund zu mir und sagte: “Doch! Das geht!”
Hier ist die Lösung. Man legt eine Datei ~/.inputrc mit folgendem Inhalt an:
set keymap vi
set editing-mode vi

…und schon funktionieren die vi keybindings in nahezu allen Kommandozeilen-Tools :D

Today I learned: Zuschneiden von SIM-Karten

Nachdem ich vor ein paar Tagen ein neues Smartphone bekam, welches Micro-SIM Karten verwendet, stand ich vor dem Problem nur eine normale (Mini-)SIM Karte zu besitzen. Erfreulicherweise wurde ich darauf aufmerksam gemacht, dass man diese wohl problemlos auf die Größe einer Micro-SIM zuschneiden kann. Zunächst war ich noch etwas skeptisch, aber nach etwas Internet-Recherche entschied ich mich dazu es zu versuchen. Ich war zum Glück im Besitz einer ausländischen Micro-SIM Karte um mit dieser die Größen und Kontakte vergleichen zu können. Ich schnitt meine alte Mini-SIM zunächst mit der Schere in die grobe Form und machte den Feinschliff mit feinem Sandpapier. Und tatsächlich: meine neue Micro-SIM Karte funktioniert ausgezeichnet. Laut diversen Internet-Quellen kostet dies übrigens in Mobilfunkläden je nach Anbieter um die 10-20 Euro. Dieses Geld kann man sich also getrost sparen. Hinweis: manche Mini SIM-Karten kann man wohl auch auf die Größe einer Nano-SIM zuschneiden. Ich würde aber nicht darauf wetten, dass das funktioniert (insbesondere wenn schon die Kontakte größer sind als die Nano-SIM).

tmux ohne root-Rechte installieren

Ich bin seit langer Zeit begeisteter Nutzer von tmux. Tmux ist ein Terminal Multiplexer (wie auch GNU Screen). Das bedeutet, dass man mit tmux mehrere (oder auch sehr viele oder auch nur eine) Shells in einem einzigen Terminal haben kann, was in sehr sehr vielen Fällen unheimlich praktisch ist. Ich verwende tmux unter anderem für folgende Zwecke:

  • Um mehrere (Kommandozeilen-)Programme gleichzeitig sehen zu können. Früher habe ich dafür einfach das Terminal-Programm mehrfach geöffnet. Das hat auch seine Berechtigung, wenn man z.B. seine Window-Manager-Funktionen nutzen möchte, um zwischen den Terminals zu wechseln. Auf Dauer hat sich hier tmux aber als praktischer herausgestellt. Unter anderem auch wegen des folgenden Punkts:
  • Um Text in der selben Shell oder zwischen verschiedenen Shells kopieren und einfügen zu können (Copy & Paste). Tmux bietet hierfür wunderbare Unterstützung.
  • Um in einer Shell zurück-scrollen zu können. Klar, fast alle Terminal-Programme können das auch. Aber mit tmux kann ich dann auch gleich noch Text kopieren. Und es funktioniert auch in Terminals, die nicht auf einer grafischen Oberfläche laufen.
  • Um meine laufenden Prozesse nicht zu verlieren, wenn aus irgendwelchen Gründen das Terminal geschlossen wird. Wenn ich mich z.B. auf einem Server per SSH anmelde, dann starte ich zuallererst einen tmux. Wenn jetzt die Internetverbindung abbricht, dann läuft der tmux auf dem Server weiter und ich kann mich einfach neu verbinden. Das Gleiche gilt natürlich, wenn man versehentlich sein grafisches Terminal schließt, oder X11 abstürzt.

Das alles sind eher Kleinigkeiten, die sich aber in der täglichen Arbeit als ungeheuer wertvoll herausstellen. Ich wüsste gar nicht mehr, wie ich ohne meinen tmux klar kommen sollte.

Jetzt ist tmux nicht unbedingt auf allen Rechnern, mit denen man so zu tun hat, verfügbar. Die Rechner des Linux-Pools der Uni-Ulm haben zum Beispiel keinen tmux installiert. Da ich aber unbedingt einen haben wollte, habe ich mich entschieden, diesen einfach selber zu kompilieren. Das ist nicht ganz trivial, da tmux einige Abhängigkeiten hat. Während meiner Recherche bin ich dann auf ein Skript gestoßen, welches tmux lokal installiert, sodass man keine root-Rechte benötigt. Vielen Dank an den Autor für diese Hilfe! Ich habe das Skript nicht komplett ausgeführt, sondern einzelne Befehle davon verändert angewandt, da ich einige der Schritte darin schon selbst erledigt hatte. Man kann es also auch wunderbar als Nachschlagewerk verwenden.

Damit war’s das auch für heute.
Bis bald,
Matou

OpenWrt im Heimnetzwerk

 

Vergangene Nacht dachte ich mir, ich könnte mich vor dem Schlafengehen noch schnell ein bisschen über OpenWrt informieren. Mir ist bereits seit längerer Zeit die Existenz des freien Router-Betriebssystems bekannt; bisher traute ich mich aber noch nicht so wirklich, die Firmware meines Heim-Routers zu verändern. Diese Angst stellte sich jedoch als vollkommen unbegründet heraus, denn innerhalb von weniger als zwei Stunden hatte ich ein lauffähiges Netzwerk mit zwei Routern, Anschluss an meinen Internetprovider, NAT, WLAN und einigen einfachen statischen Routen konfiguriert. Und das, obwohl ich mich zuvor noch überhaupt nicht mit OpenWrt beschäftigt hatte.

Seit einigen Wochen gibt es in meiner WG mehrere TP-Link TL-WR1043ND Router, wovon bisher einer für das gesamte Netzwerk der Wohnung zuständig war und dafür die mitgelieferte proprietäre Firmware verwendete. Ich hatte auch schon früher versucht mit diesem Setup IPv6 im Heimnetzwerk zu konfigurieren. Das ist allerdings mit der Firmware von TP-Link nicht möglich. Auch weitere Features, wie z.B. ein eingebauter DNS-Server, fehlten mir im bisherigen Netzwerk.

Die Installation von OpenWrt war kinderleicht. Ich hatte allerdings auch das Glück, dass dieser Router ausgezeichnet von OpenWrt unterstützt wird. Ich musste mir lediglich die entsprechende Binary herunterladen, wie es auf der Wiki-Seite zum Router beschrieben ist und konnte diese ganz einfach über das Webinterface der bisherigen Firmware installieren. Anschließend konnte ich mich über telnet am Router anmelden und ein root-Passwort setzen. Ab dann ging die Anmeldung nur noch über eine SSH Verbindung.

Man muss den Router aber nicht unbedingt über die Kommandozeile konfigurieren; In meinem Fall war bereits eine Weboberfläche zur Administration installiert. Die Standard Einstellungen sind meiner Meinung nach recht gut gewählt. Man sollte allerdings unbedingt abschalten, dass man sich über das WAN-Interface (also das Interface, welches ins Internet geht) am Router anmelden kann. Außer natürlich, man braucht diese Funktionalität.

The Importance of Open Source

Some time ago, Phil – who was recently interviewed by Michael – and I were asked to write a short statement about Open Source Software for the Charité NeuroScience Newsletter. The newsletter of June 2012 focuses on the topic of Open Access, which is strongly related to the idea of Open Source.

Open source is not about giving away software for free, but about freedom and progress. The freedom to use software for any purpose increases productivity immensely, while severe restrictions strongly curtail any such ambitions. Limiting the use of software also limits its potential, whereas lifting the restrictions allows people to experiment and encourages creativity.

With access to the source, it is possible to study, learn from, reuse and improve upon code without spending valuable time reinventing the wheel. As a side effect, open source often leads to higher quality software through the contribution of more people with a varied skill set.

Open source is about sharing knowledge; a concept our civilization would not have reached its current level of technology without. The freedom to publish a project incorporating parts of other open source projects encourages the formation of a cycle of give and take, which constitutes a crucial contribution to progress.

As an example, the World Wide Web as we know it, consists almost entirely of servers running open source software, enabling people to communicate and share information easily, quickly, and securely over the entire globe.

Open source software plays a significant role in many fields, improves the lives of many people and is a driving force behind technological and scientific advancement.

Analoge Fotografie Teil II (Fotografieren)

Letzte Woche habe ich angefangen über die Analoge Fotografie zu schreiben. Im letzten Artikel ging es ein wenig um die Kamera (eine Nikon FE-2), die ich verwende. Heute möchte ich mich etwas genauer damit befassen, wie man diese Kamera verwendet. Da man es heutzutage fast ausschließlich mit digitalen Kameras zu tun hat, denke ich, dass es ganz interessant ist, sich mal mit einer etwas älteren Technologie zu befassen.

Die Kamera (Fortsetzung)

Auch bei den analogen Fotokameras gibt es natürlich teilweise riesige Unterschiede in den Features, die diese Kameras bieten. Bei meiner Nikon FE-2 handelt es sich um eine Spiegelreflexkamera, die man mit vielen verschiedenen Objektiven mit F-Bajonett verwenden kann. Die Nikon FE-2 war eine der ersten Kameras mit Zeitautomatik, so dass man nicht für jedes Bild komplett alles manuell einstellen muss. Die Kamera kann die Belichtungszeit selbst wählen. Beim Kauf hatte ich mir überlegt, ob ich so etwas überhaupt brauche (die komplett mechanische und manuell einstellbare FM-2 hätte nämlich keine Batterien gebraucht); Im Nachhinein bin ich aber sehr froh über diese Zeitautomatik.

Was muss ich also einstellen? Damit das Bild nicht unter- oder überbelichtet wird, müssen Blende und Belichtungszeit richtig gewählt werden und auch auf die Empfindlichkeit des Films abgestimmt werden. Diese drei Parameter sind die wichtigsten, um überhaupt ein brauchbares Foto zu bekommen. Zusätzlich kann man noch die Brennweite („Zoom“) und die Schärfe regulieren.

Empfindlichkeit

Neuere Analogkameras lesen den Barcode auf den Filmen und erkennen daran die ASA- bzw. ISO-Zahl des Films. Die FE-2 kann das noch nicht. Auf der linken Seite gibt es deshalb dafür ein Einstellrad, mit dem ich die Empfindlichkeit des Films von ISO 12 bis ISO 3200 einstellen kann. Umso höher die Zahl ist, desto empfindlicher ist der Film. Man kommt dann mit insgesamt weniger Licht aus, kann also kürzer belichten oder die Blende weiter zu machen. Die ISO/ASA Skala ist dabei linear. Ein Film mit ISO 200 braucht also für ein gleich helles Bild nur halb so viel Licht, wie ein ISO 100 Film. Ich verwende am liebsten Filme mit ISO 400. Das ist schon recht empfindlich; es ist aber selbst bei Sonne immer noch gut möglich Blende und Belichtungszeit zu variieren. Außerdem werden empfindlichere Filme praktisch nicht mehr verkauft. Das ist nicht ganz richtig, denn letzte Woche habe ich einen hochempfindlichen Film von Kodak gefunden, den ich unbedingt mal probieren möchte. Ich denke in Situationen mit wenig Licht ist dieser Film bestimmt toll zu verwenden.

Man kann übrigens Filme auch für eine höhere Empfindlichkeit belichten, als sie eigentlich haben (also z.B. für einen 400er Film ISO 800 an der Kamera einstellen). Die Bilder sind dann eigentlich unterbelichtet. Das lässt sich aber beim Entwickeln ausgleichen (vermutlich unter Qualitätsverlust; noch nie selber probiert). Das Fotolabor muss das natürlich vorher wissen.

Belichtungszeit

An der Kamera selbst muss ich, wenn ich nicht will, sonst eigentlich nichts mehr einstellen, denn die FE-2 hat, wie schon erwähnt, eine Zeitautomatik, die die Belichtungszeit stufenlos für mich wählen kann.

Wenn ich die Zeitautomatik verwenden möchte, stelle ich das Einstellrad auf der rechten Seite auf „A“. Natürlich kann man die gewünschte Belichtungszeit auch selbst wählen, indem ich sie einfach am entsprechenden Rad einstelle. Die FE-2 kann Belichtungszeiten von einer 1/4000 Sekunde bis zu 8 Sekunden. Außerdem gibt es noch einen Bulb-Modus, in dem so lange belichtet wird, wie der Auslöser gedrückt ist.

Und sollte die Batterie einmal leer sein und kein Ersatz zur Verfügung stehen, dann kann man den Verschluss auch in den rein mechanischen Betrieb versetzen, in dem immer 1/250 Sekunde lang belichtet wird.

Die Belichtungszeit bestimmt, wie lange der Verschluss für die Belichtung geöffnet wird. Damit also auch, wie viel Licht auf den Film trifft und wie hell das Bild letztendlich wird. Wenn man lange Belichtungszeiten verwendet, dann wird es natürlich auch schwieriger das Bild nicht zu verwackeln.

Blende

Die Blende wird nicht an der Kamera eingestellt, sondern am Objektiv. Daher ist es theoretisch auch denkbar, dass das Objektiv nur eine Blendenstufe hat, und man hier gar nichts einstellen kann. Allerdings kenne ich keine solchen Objektive. Mein Lieblingsobjektiv ist ein AF NIKKOR 50mm mit Blendenstufen von f1.4 bis f16. Was bedeuten diese Zahlen? Ganz grob: Umso größer die Zahl ist, desto weiter schließt sich die Blende während des Belichtens. Desto weniger Licht hat man zur Verfügung. Desto mehr Schärfentiefe erhält man (das Bild wird insgesamt schärfer).

Normalerweise ist, wenn man nicht gerade ein Foto macht, die Blende des Objektives ganz geöffnet, damit man durch den Sucher alles möglichst hell sieht. Dadurch kann man aber im Sucher nicht erkennen, wie scharf das Bild letztendlich werden wird. Dazu hat die FE-2 (wie fast alle Spiegelreflexkameras) einen Abblendknopf, der die Blende auf den eingestellten Wert schließt, so dass man sehen kann, wie sich die Blende auf das Bild auswirken wird.

Brennweite (Zoom)

Die Brennweite wird ebenfalls am Objektiv eingestellt und bestimmt, wie weit in das Bild „hineingezoomt“ wird. Das Ergebnis kann man natürlich sofort im Sucher sehen. Mein Lieblingsobjektiv hat eine Festbrennweite von 50mm, kann also in der Hinsicht nicht verstellt werden.

Schärfe

Als letzter wichtiger Parameter fehlt uns jetzt nur noch die Schärfeneinstellung. Auch die Schärfe wird nicht an der Kamera, sondern am Objektiv eingestellt. Normalerweise steht auf dem Objektiv drauf, für welchen Abstand von Kamera und Motiv die Schärfe eingestellt ist. Aber meistens stellt man die Schärfe nicht auf einen bestimmten Wert, weil dies zu ungenau wäre, sondern man verwendet verschiedene Hilfsmittel, um die Schärfe auf den gewünschten Punkt im Bild einzustellen.

Die FE-2 hat keine Autofokus-Funktion, wie die meisten heutigen Kameras. Damit man trotzdem möglichst genau scharf stellen kann, hat die Kamera eine Mattscheibe (bzw. Einstellscheibe) eingebaut. Die Einstellscheibe vom Typ K, die in meiner Kamera steckt, hat zum einen einen Schnittbildindikator und zum anderen einen Mikroprismenring zum Scharfstellen.

Belichtungsmesser

Damit man weiß, wie man die Parameter Blende und Belichtungszeit überhaupt wählen kann, muss man natürlich erst einmal wissen, wie viel Licht das Motiv überhaupt hergibt, also wie hell es ist. Dazu benötigt man einen Belichtungsmesser. Die Nikon FE-2 hat einen eingebauten Belichtungsmesser, der für die eingestellte Blende und abhängig von der Filmempfindlichkeit anzeigt, auf welche Belichtungszeit die Kamera eingestellt werden sollte (bei der Zeitautomatik wird die Zeit natürlich gleich automatisch eingestellt).

Kreatives Fotografieren

So. Bisher habe ich blos über die möglichen Einstellungen geschrieben. Was kann ich denn jetzt machen, um ein Bild zu bekommen, wie ich es haben möchte? Wichtig ist, dass Filmempfindlichkeit, Blende und Belichtungszeit aufeinander abgestimmt sind. Die Empfindlichkeit eines Films kann ich natürlich für einzelne Bilder nicht verändern. Daher bleiben mir Blende und Zeit, die ich verstellen kann. Umso weiter ich die Blende schließe, desto weniger Licht kommt durch das Objektiv und desto länger muss ich auch belichten. Was bringt mir das? Eine hohe Blendenzahl führt zu mehr Tiefenschärfe. Ich mache allerdings sehr gerne Fotos mit geringer Tiefenschärfe, also weit geöffneter Blende. Ich mag den Effekt, dass damit das Bild meist nur an wenigen Stellen wirklich scharf ist.

Alles Weitere ist der Kreativität des Fotografen überlassen. Wohin man den Fokus legt und mit welchen Tiefenschärfen, Bewegungsunschärfen und Brennweiten man arbeitet hat viel Auswirkung auf das Bild.

Stay tuned!

Die Kreativität endet bei der analogen Fotografie aber nicht mit dem Druck auf den Auslöser. So, wie man digitale Bilder mit Bildbearbeitungssoftware noch weiter bearbeiten kann, kann man auch mit analogen Fotos noch nach der Aufnahme viel mit dem Bild anstellen – und zwar im Fotolabor. Wer seine Bilder entwickeln lässt verschenkt ziemlich viel Potential. Das ist auch einer der Gründe, warum ich analog ausschließlich in schwarz-weiß fotografiere. Ich möchte selber entwickeln. Selber entwickeln geht zwar auch mit Farbfilmen, das ist aber deutlich komplizierter als bei Schwarz-Weiß-Filmen. Im kommenden dritten Teil dieser kleinen Blogartikel-Reihe möchte ich ein bisschen auf das Entwickeln von Filmen eingehen.

Bis dann,
matou

Analoge Fotografie Teil I (Kamera)

Seit 2007 fotografiere ich mit einer digitalen Spiegelreflexkamera. Die digitale Fotografie bietet einem jede Menge Möglichkeiten. Doch im letzten Jahr hatte ich immer wieder das Bedürfnis, diese Komplexität ein wenig hinter mir zu lassen und bewusster Bilder zu machen. Die analoge Fotografie unterstützt dieses bewusste Fotografieren in vielerlei Hinsicht. Eine alte, mechanische, analoge Kamera ist im vergleich zu einer modernen, digitalen Kamera deutlich simpler. Viele Parameter, welche ich bei der digitalen Fotografie wählen kann, fallen bei der analogen Fotografie weg. Das ermöglicht es mir deutlich einfacher die Kamera und ihre Möglichkeiten vollständig zu kennen, bzw. kennen zu lernen. Zudem bin ich je nach Kamera gezwungen viele Einstellungen manuell, und damit bewusst, zu wählen, da sonst unbrauchbare Bilder das Ergebnis sind. Schließlich waren Kameras nicht schon immer voll automatisch. Auf diese Weise mache ich mir mehr Gedanken darüber, was und wie ich da eigentlich fotografiere, anstatt einfach nur mit einem einfachen Tastendruck hunderte von Fotos zu schießen.

Die Kamera

Im Sommer 2011 habe ich mir dann eine Nikon FE-2 mitsamt eines 200mm Objektivs gekauft. Ein 50mm Objektiv hatte ich bereits, da auch meine digitale Kamera eine Nikon ist. Meine anderen Objektive kann ich mit der FE-2 leider nicht verwenden, weil die meisten modernen Objektive keine mechanische Verbindung mehr zur Blende haben.

Die Nikon FE-2 von matou

Die Nikon FE-2 von matou

Die FE-2 ist nicht rein mechanisch. Sie besitzt z.B. einen elektronischen Verschluss. Im Gegensatz zu Nikons ersten FM-Kameras, hat die FE-2 außerdem eine Zeitautomatik, was doch deutlich bequemer ist, als alle Parameter selbst einstellen zu müssen.

Natürlich gibt es noch unzählige andere analoge Kameras. Mit mehr oder weniger Features kann man so ziemlich alles bekommen, was man sich vorstellen kann. Michi, ebenfalls Autor hier auf IOException.de, fotografiert zum Beispiel gelegentlich mit einer YASHICA Mat-124, die anstatt eines Kleinbildfilms einen Rollfilm verwendet.

Die YASHICA Mat-124 G Kamera

YASHICA Mat-124 G

 

Fortsetzung folgt

In weiteren Artikeln werde ich bald schreiben, wie man denn mit so einer Kamera fotografiert und wie man vom belichteten Film zu einem Foto-Abzug kommt.

 

Bis bald,
matou

IOException.de bei Trackback

Verganenen Samstag wurde ich von Marcus Richter in seiner Sendung Trackback zu IOException.de interviewt.

Die Website zur Trackback-Sendung findet ihr da: http://trackback.fritz.de/2012/02/11/trb-265-acta-schwarzer-marz-urheberrecht-pinterest-ioexception/

Das Interview gibt es an der Stelle 49:42.

Whitespace

In einigen Vorlesungen der Uni Ulm ist es üblich Programmieraufgaben der Übungen online an ein Framework zu submitten, welches die Programmierlösung automatisch bewertet. Im letzten Semester war bei einer dieser Veranstaltungen die Abgabe in Whitespace erlaubt.
Whitespace ist eine esoterische Programmiersprache. Das Außergewöhnliche an ihr ist, dass ihr Quelltext ausschließlich aus Whitespace (also Leerzeichen u.ä.) besteht. Um genau zu sein aus den drei Zeichen „Leerzeichen“, „Tabulator“ und „Zeilenumbruch“. Jegliche lesbaren Zeichen werden ignoriert. Damit lassen sich interessante Dinge anstellen, wie zum Beispiel Quelltext in anderen Texten zu verstecken.

Und wenn es erlaubt ist Aufgaben in einer so interessanten Sprache abzugeben, dann kann ich es mir natürlich nicht nehmen lassen dies auch zu tun. Ich begann also Whitespace zu lernen und war erstaunt, wie schnell man sich gute Kenntnisse in dieser Programmiersprache aneignen kann. Wer schon einmal mit einer Assembler-Sprache gearbeitet hat, sollte mit Whitespace keine Probleme haben. Innerhalb weniger Stunden hatte ich bereits einen Whitespace Disassembler (whdisasm) geschrieben gehabt, der mir Whitespace Quelltext in lesbare Mnemonics übersetzt. Disassembler ist natürlich eigentlich keine korrekte Bezeichnung für ein Programm mit dieser Funktionalität. Aber der Name klingt meiner Meinung nach einfach besser als „Whitespace-zu-Mnemonics-Konverter“ oder so. Mit dem whdisasm konnte ich die im Web existierenden Beispiele leichter analysieren und damit lernen, wie man die Sprache verwendet.

Ich schrieb einige kurze Programme. Aber das Coden mit Whitespace ist doch nicht gerade einfach (obwohl für viele Editoren Syntax Highlighting möglich ist). Also machte ich mich daran noch einen Assembler, den whasm, zu entwickeln. Auch whasm war in kurzer Zeit lauffähig. In nur zwei Tagen hatte ich also eine neue Sprache gelernt, einen Disassembler und einen Assembler, sowie einige Libraryfunktionen, geschrieben und meine Programmieraufgabe in Whitespace abgegeben.

Viele esoterische Programmiersprachen sind zwar auf den ersten Blick furchtbar abschreckend aber in Wirklichkeit sehr einfache Konstrukte. Whitespace hat zudem eine ausgezeichnete Dokumentation, die meine einzige Informationsquelle für whasm und whdisasm gewesen ist.

Aber wie funktioniert denn jetzt Whitespace?

Ich verwende ab jetzt für Leerzeichen die Abkürzung [space], für Tabulatoren [tab] und für Zeilenumbrüche [lf]. Diese Darstellung wird auch im Whitespace Tutorial so verwendet.

Ich habe bereits erwähnt, dass Whitespace eine Art Assemblersprache ist. Der Whitespace Quelltext (also die Leerzeichen, Tabs und so) werden üblicherweise interpretiert. Im Netz sind dafür leicht verschiedene Interpreter zu finden. Bestimmt gibt es auch irgendwo einen Compiler (und wenn nicht, ist das hier vielleicht ein Anstoß dafür einen zu schreiben).
Whitespace kennt zwei Arten von Speicher: Stack und Heap. Für den Stack gibt es Operationen, wie „auf den Stack pushen„, „vom Stack poppen“, „duplizieren des obersten Elements“ und einige weitere. Im Heap können Daten an beliebigen Adressen gespeichert und gelesen werden. An dieser Stelle passt es vielleicht zu erwähnen, dass Whitespace keine Datentypen kennt, wie sie sonst üblich sind. Die einzige Unterscheidung ist „Zahl“ oder „(ASCII-) Zeichen“. Druckbare Zeichen haben dabei 8 Bit. Zahlen können beliebig lang(!) sein. Eine positive Zahl beginnt mit einem [space] und eine negative mit einem [tab]. Ansonsten ist ein [space] die binäre 0 und ein [tab] die binäre 1.

Hier ein Beispielprogramm, dass zwei Zahlen aus dem Heap liest, diese addiert und das Ergebnis auf dem Bildschirm anzeigt. Ich habe für bessere Lesbarkeit statt echten Leer-/Tab-/Zeilenumbruchszeichen sichtbare Abkürzungen verwendet ;)


// Achtung! Zeilenumbrüche sind nur da, wo [lf] steht. Ich habe die Zeilen im Beispiel
// lediglich für bessere Lesbarkeit umgebrochen.
// Zuerst wollen wir zwei Zahlen vom Heap auf den Stack laden.
// Um eine Zahl zu laden, pushen wir zunächst ihre Adresse auf den Stack
[space] // das erste [space] bedeutet, dass wir den Stack manipulieren wollen
[space] // das zweite [space] sagt, dass wir die Zahl nach dem Befehl auf den Stack pushen wollen
[space][tab][tab][tab][lf]
// [space][tab][tab][tab] ist die binäre 0111 (also 7)
// das [lf] markiert das Ende des Zahlenparameters

[tab][tab] // [space] sagt, dass wir aus dem Heap lesen wollen (an der Adresse im Stack)
[space] // [tab][tab] bedeutet, dass wir auf den Heap zugreifen

// Das Selbe nochmal mit der zweiten Zahl:
[space][space][space][tab][space][space][space][lf] // diesmal die Adresse 8 (01000)
[tab][tab][space]

[tab][space] // leitet eine arithmetischen Befehl ein
[space][space] // Addition der zwei obersten Werte auf dem Stack

[tab][lf] // beginnt eine I/O Operation
[space][tab] // Bildschirmausgabe der Zahl oben auf dem Stack

[lf][lf][lf] // beendet das Programm

Das selbe Programm würde in (mit whasm übersetzbaren) Mnemonics so aussehen:

push 7
retrieve

push 8
retrieve

add
printnum

end

Fazit

Esoterische Programmiersprachen machen Spaß! Das ist zumindest meine Meinung. Ich habe in der Zeit, in der ich mich damit beschäftigt habe, einiges gelernt. Nicht nur Whitespace selbst, sondern den Umgang mit stackbasierten Sprachen oder auch, wie leicht sich solche Konstrukte parsen lassen.

Der Code für whasm und whdisasm sind auf github verfügbar. Dort habe ich auch begonnen Libraryfunktionen zu implementieren, die mit whasm in Whitespace übersetzt werden können.

Warum wir eine Wave brauchen

Das Problem

E-Mail ist alt und kaputt. Es gehört durch modernere Kommunikationsarten ersetzt. Warum? Was erwarten wir von Kommunikation über das Internet?

  • Confidentiality, Integrity, Authentication
  • Perfect Forward Secrecy (PFS)
  • Plausible Deniability (PD)
  • Asynchrone und synchrone Kommunikationsmöglichkeit
  • Gruppenkommunikation
  • Kollaboration
  • Multimediale Kommunikation
  • Dezentrale Struktur

Wenn wir von Verschlüsselung sprechen, dann ist damit Ende-zu-Ende-Verschlüsselung gemeint und nicht die Verschlüsselung der Transportwege. Das Gleiche gilt für Integrity und Authentication.

Wir können E-Mails verschlüsseln und digital signieren (z. B. durch Verwendung von OpenPGP). Leider kann dann für immer und von jedem bewiesen werden, dass wir diese Nachricht geschrieben haben. Ein weiteres Problem entsteht, wenn einer der Keys in falsche Hände gerät. Dann sind sämtliche bisher für ihn verschlüsselten Daten kompromittiert.

E-Mail ist langsam und immer asynchron. E-Mail-Verkehr kostet unnötig Zeit.[0]

E-Mail ist nicht kollaborativ.

E-Mail-Anhänge ermöglichen zwar die Übertragung multimedialer Inhalte, sind aber unglaublich ineffizient und ressourcenfressend.

Was gibt es also für Alternativen? Wie kann besser kommuniziert werden?

Soziale Netzwerke sind Privacy-Desaster.

Instant Messaging erfüllt die meisten Zwecke. Bei vielen Protokollen ist sowohl asynchrone als auch synchrone Kommunikation möglich. Confidentiality, Integrity, Authentication, Perfect Forward Secrecy und Plausible Deniability wird durch Verwendung von OTR[1] erreicht (allerdings nur bei Kommunikation mit einem Partner). Einige Protokolle erlauben Gruppenkommunikation durch Chaträume oder multimediale Kommunikation, wie das Übertragen von Dateien oder Video-/Audio-Telefonie.

Warum reichen bestehende Instant-Messaging-Systeme nicht aus? Was fehlt uns?

  • Unterhaltungen in Echtzeit
  • Flexibles Hinzufügen von Teilnehmern zur Gruppenkommunikation
  • Verbessertes Sharing und Darstellung von Multimediainhalten
  • Verschlüsselte, möglicherweise asynchrone, Gruppenkommunikation
    (mit PD und PFS)

Die ersten drei Punkte kann Googles Wave[2,3]. Das Problem der verschlüsselten Gruppenkommunikation mit den beschriebenen Bedingungen ist leider darin bisher nicht gelöst worden. Zudem existieren keine zufriedenstellenden Clients für Wave.

Wir wollen, dass die Infrastruktur nicht von einem einzigen Knotenpunkt abhängig ist. Dezentrale Struktur wird von den Protokollen, die E-Mail bzw. Wave zugrunde liegen, unterstützt. Fast alle IM-Dienste erlauben diese nicht.

Die Lösung

Wir sehen mehrere Lösungsansätze.

Komplett neues Protokoll mit Implementierung und Infrastruktur

Auch bekannt als: „Das Rad neu erfinden“. Machen wir nicht. Das Rad gibt es schon. Dieser Ansatz wäre sehr aufwändig und würde sich schwer etablieren.

Verwendung bestehender Protokolle

Bedingung ist, dass das Protokoll offen und leicht erweiterbar ist. Hier halten wir nur XMPP für sinnvoll. Der Vorteil dieser Lösung ist, dass genau die gewünschten Features implementiert werden können und keine Kompromisse notwendig sind. Voraussichtlich wird bereits bestehende Infrastruktur verwendet werden können.

Erweiterung von Wave

Wave hat bereits die meisten Features, welche wir uns wünschen. Verschlüsselung fehlt aber und es existieren keine guten Clients.

Der Plan

Wir evaluieren die letzten beiden Lösungsansätze und implementieren dann die sinnvollste Lösung. Dazu müssen wir zunächst XMPP und das Google Wave Federation Protocol verstehen.

Auf jeden Fall werden wir einen Client schreiben, der im Vergleich zu bestehenden Clients besser bedienbar ist und unsere beschriebenen Anforderungen erfüllt. Für Legacy-Clients ist eine (teilweise) Umsetzung der Features, beispielsweise durch Plugins, denkbar.

Die Unzufriedenheit mit vorhandenen Kommunikationsmöglichkeiten und die Idee diese zu verbessern schlummert schon seit einiger Zeit in uns. Hiermit möchten wir die Sache ins Rollen bringen. Stay tuned!

–nico, phil, matou

[0] http://www.heise.de/newsticker/meldung/Unternehmen-will-Mitarbeitern-die-E-Mail-abgewoehnen-1184596.html
[1] http://www.cypherpunks.ca/otr/
[2] http://wave.google.com/
[3] http://www.waveprotocol.org/

ioexception.de

Benjamin Erb [] studiert seit 2006 Medieninformatik und interessiert sich insbesondere für Java, Web-Technologien, Ubiquitous Computing, Cloud Computing, verteilte Systeme und Informationsdesign.


Raimar Wagner studiert seit 2005 Informatik mit Anwendungsfach Medizin und interessiert sich für C++ stl, boost & Qt Programmierung, Scientific Visualization, Computer Vision und parallele Rechenkonzepte.


David Langer studiert seit 2006 Medieninformatik und interessiert sich für Web-Entwicklung, jQuery, Business Process Management und Java.


Sebastian Schimmel studiert seit 2006 Informatik mit Anwendungsfach Medizin und interessiert sich für hardwarenahe Aspekte, Robotik, webOs, C/C++ und UNIX/Linux.


Timo Müller studiert seit 2006 Medieninformatik. Er interessiert sich allen voran für Mobile and Ubiquitous Computing, systemnahe Enwticklung und verteilte Systeme, sowie Computer Vision.


Achim Strauß studiert seit 2006 Medieninformatik. Seine Interessen liegen in Themen der Mensch-Computer Interaktion sowie Webentwicklung und UNIX/Linux.


Tobias Schlecht studiert seit 2006 Medieninformatik und interessiert sich vor allem für Software Engineering, Model Driven Architecture, Requirements Engineering, Usability Engineering, Web-Technologien, UML2 und Java.


Fabian Groh studiert seit 2006 Medieninformatik. Seine Interessengebiete sind Computer Graphics, Computer Vision, Computational Photography sowie Ubiquitos Computing.


Matthias Matousek studiert seit 2007 Medieninformatik und interessiert sich besonders für Skriptsprachen, Echtzeitsysteme und Kommunikation.


Michael Müller [] studiert seit 2009 Medieninformatik. Er interessiert sich vor allem für Web-Technologien, Ubiquitous Computing, User-Interfaces, UNIX und Creative Coding.


Falco Nogatz [] studiert seit 2010 Informatik mit Anwendungsfach Mathematik. Er interessiert sich für Web-Technologien, Programmierparadigmen und theoretische Grundlagen.

Archiv

Februar 2015
M D M D F S S
« Mrz    
 1
2345678
9101112131415
16171819202122
232425262728