How to fold a shirt

written by Martin Häcker on

[/blog-attachments/videos/HowToFoldAShirt.mpg Hausahltsanleitung....]

Unterdokumentierte Design Patterns

written by Martin Häcker on

Eine Frage die mich schon länger beschäftigt, ist das Finden von Design Patterns in Funktionalen Sprachen. Lange Zeit schien es mir so, als gäbe es da gar nichts, auch viele Programmierer, die in diesen Sprachen arbeiten, konnten mit dem Begriff nichts anfangen. Dabei gibt es meiner Meinung nach eine Menge, das man von funktionalen Sprachen lernen kann - und einiges, das schon gelernt wurde.

Einige Design Patterns, die ich seitdem gefunden habe, sind:

  • [wiki:BlogEntries/2006-02-23 Funktionen] als voll berechtigte Datentypen, d.h. man kann sie als Argument oder RĂĽckgabewert in der Programmiersprache verwenden
  • Die Verwendung von Lambda-AusdrĂĽcken (anonymen Funktionen)
    • FĂĽr Iteration, als Callback, fĂĽr Fehlerbehandlung, Kontrollfluss...
  • Higher Order Funktionen - Funktionen als Argument und RĂĽckgabewert von Funktionen
  • Currying zum teilweisen Anwenden von Funktionen (vor allem in Zusammenhang mit anonymen Funktionen interessant)
  • Funktionen zur Kombination von Funktionen zu größeren Einheiten (sehr schön z.B. in Parsern)
  • Monaden, zum sicheren Einbetten von Seiteneffekten in puren funktionalen Sprachen
  • Arrows, fĂĽr sichere Nebenläufigkeit in puren funktionalen Sprachen
  • Unendliche Listen als Fassung von Reihen von Zahlen / Ereignissen. (Aktionen des Benutzers, Zufallszahlen, stetig genauer werdende Berechnungen einer Zahl...)
  • Continuations: Ein Konstrukt mit dem sich z.B. Exceptions und Coroutinen implementieren lassen
  • Coroutinen: Am einfachsten als eine Art Ultraleicht-Thread zu verstehen

Einige dieser Design Patterns werden auch in anderen Sprachen intensiv genutzt. Die Lambda-Abstraktion zum Beispiel spielt eine zentrale Rolle in Java, wenn man dort GUIs baut, da sie der ideale Callback sind. Also im Beispiel:

JButton button = new JButton("Titel");
button.addActionListener(new ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
        // this is a lambda
    }
}

Gibt es noch mehr dieser Design Patterns? Funktionale Sprachen werden doch von jeder Menge Menschen benutzt...

Sind die irgendwo dokumentiert? Wenn nicht, dann muss ich mich wohl ranhalten und mein Verständnis selber aufschreiben.

Außerdem haben hochintegrierte Sprachen wie Lisp, Scheme, Smalltalk und Ruby noch ein weiteres Pattern, da sie sich besonders gut (oder überhaupt?) dazu eignen, Domänenspezifischen Subsprachen (DSL), also Sprachen die direkt in der Implementierungssprache eingebettet sind, zu formulieren. In Lisp bzw. Scheme ist das sogar die bevorzugte Vorgehensweise!

Mir ist allerdings noch nicht klar, welches Kriterium eine Sprache in die Lage versetzt, diese Integrierten DSLs besonders gut umzusetzen. Bisher dachte ich immer, dass dazu eine in ihrer Ăśbersimplifizierung geniale Sprachdefinition - wie in Lisp und Smalltalk - notwendig ist, aber gerade das Beispiel von Ruby scheint dem zu widersprechen.

Preisfrage

written by Martin Häcker on

Man hat 8 Billiard-Kugeln, von denen man weiĂź das eine schwerer ist als die Anderen. Desweiteren hat man eine Balkenwage mit der man zwei mal Wiegen, also zwei Gewichte vergleichen, darf.

Lässt sich unter diesen Vorraussetzungen herausfinden welche Kugel die schwerere ist?

Viel spaĂź beim Raten. :)

Oh, and by the way: TCPA ist immer noch doof: Erklärender Film

Ober- und Unterton- oder Kehlgesang

written by Martin Häcker on

Was es alles gibt! Ich bin fasziniert wozu die Menschliche Stimme so alles in der Lage ist. Obertongesänge kannte ich auch schon länger, aber die zweite Variante, Untertongesänge, wie sie hauptsächlich in Tuva vorkommt war mir neu.

Viel sagen will ich dazu eigentlich gar nicht, das muss man mal gehört haben:

Weitere Informationen gibt's bei der Wikipedia, Oberton.org und auch bei Khomeei.com der das ganze auch schön in Spektrogrammen zeigen kann.

Notiz an selbst: Bei gelegenheit mal den Film Ghengis Blues anschauen.

Nachnotiz an selbst: Zum Lernen hier, hier (unten) und hier lang.

Präsentieren wie die Meister

written by Martin Häcker on

Image Wieder mal ist ein Wochenende dafür drauf gegangen mich selbst über Präsentationstechniken fortzubilden.

Einen Riesigen Einfluss auf mich hat dabei Guy Reynolds mit seinem Blog Presentation Zen. Wie soll ich sagen - der Hammer! Einige der Präsentationstechniken die er vorstellt, sind einfach ein Must Read.

Das ist zumindest ein sehr inspirierender Anfang, von da aus weitersurfend findet man noch viele Beispiele.

Ich bin Beeindruckt.

Wer fĂĽr das alles keine Zeit hat, der sollte zumindest diese 10 Gebote befolgen!

GAPMINDER

written by Martin Häcker on

Die Entwicklung unserer Welt, in Zahlen, ist eine komplizierte und unverständliche Materie.

Denkste.

Gapminder nutzt moderen Visualisierungstechniken konsequent aus um klarzumachen, wie sich unsere Welt in den letzten ~40 Jahren entwickelt hat. (via tedblog)

Dazu auch: Warum wir uns jetzt nicht um die globale Erwärmung kümmern sollten.

Gute Reden

written by Martin Häcker on

Einerseits ernsthaft, lustig andererseits.

  • Als Nobelpreisträger darf man eben den Mund aufmachen und es wird einem hoffentlich zugehört. Hoffentlich. Der Nobelpreisträger der Literatur jedenfalls hat beschlossen ĂĽber Amerikanische Politik zu sprechen. Und ich finde hervorragend!

  • Auf der anderen Seite wieder etwas technisches: Daniel Wilson wird von Moira Gunn ĂĽber sein Buch How to survive a robot uprising ausgefragt - sehr unterhaltsam.

Oblique Strategies 1.2

written by Martin Häcker on

Image I just released a new version of the Oblique Strategies from Brian Eno and Peter Schmidt.

They still are the "One hundred worthwile dilemmas to think about" that I love and use occasionally.

This updated version gives you:

  • Updated Tiger Compatibility to prevent a drawing glitch with newer Webcore versions
  • A Show Next Strategy menu item

Many thanks to Shayne White of Curvedspace fame who made the first version of this app. (Please note, there is also a dashbord widget that displays the strategies from Guy D2).

Mein Vortrag "Soziale Innovation in der Informationsgesellschaft"

written by Martin Häcker on

So, nochmal die AnkĂĽndigung, diesmal mit mp3. (Und mit herzlichem Dank an Ria fĂĽr die Nachbearbeitung!)

Hier nochmal die AnkĂĽndigung

Anlässlich der Tagung Tatort Zukunft - klären, stärken, handeln in Bad Boll habe ich einen Vortrag gehalten, der die Zentrale Neuerung der Informationsgesellschaft gegenüber allem was vorher war vermitteln sollte. Da die Beteiligten alle sehr begeistert waren, hat es wohl durchaus geklappt. :) Folien - Folien mit Notitzen.pdf) - Vortrag (mp3)

Geistiges Eigentum

written by Martin Häcker on

In der Reihe "Venture Campus" gab es gestern eine Vorlesung ĂĽber Patente und insbesondere Softwarepatente.

Was soll ich sagen: KOTZ

Anders kann man das wirklich nicht bezeichnen was der Schluss aus dieser Veranstaltung war.

Also einerseits: Ja klar, Software ist nicht Patentierbar, sondern nur unter bestimmten Voraussetzungen.

Aber andererseits, ist Software natĂĽrlich Patentierbar, wenn diese Voraussetzungen eingehalten werden:

  • sie Installiert werden muss
  • sie den Computer attraktiver fĂĽr den Benutzer macht
  • sie Programme beschleunigt oder mit weniger Speicher auskommen lässt
  • sie notwendig ist fĂĽr die Ausgabe von Signalen und Daten
  • sie mit externen Geräten Interagiert (z.B. einem Bildschirm!)

Ich meine... was bitte ist denn da effektiv noch ausgeschlossen?

Dabei kommt noch dazu das Patente für die schnelllebige IT-Branche oft einfach zu langsam sind - man bräuchte für effektiven Schutz von Ideen oft etwas das nicht erst nach 18 Monaten erteilt wird, sondern gleich.

Andererseits eignen sich Patente natürlich hervorragend für "U-Boot"-Aktionen. Also das man einen kommenden Standard mit einem / einigen Patenten "vermint" und diese dann zuerst in Japan anmeldet. Dort darf man sie nämlich bis zu 2,5 Jahren geheim halten und muss selbst dann nur ein kurzes englisches Summary abgeben... Ach ja, und dann kann man noch dank dem internationalen PCT-Abkommen dieses patent auf alle ein Weltweites Patent ausweiten. Natürlich mit dem gleichen Registrierdatum wie das Japanische.

Oder aber man grĂĽndet einen Patentpool, also eine Verwertungsgesellschaft die nur Patente anderer Firmen aufkauft (aus Insolvenzen z.B. und damit dann andere Firmen um die FrĂĽchte ihrer Arbeit "erleichtert". Vorsichtig ausgedrĂĽckt.

Und das schöne dabei: diese Systemspieler sind gerade so richtig im Kommen.

Suuper. Man verliert doch wirklich die Lust in einem Gebiet wie der Informatik zu arbeiten wo wirklich alles und sei es noch so trivial Patentiert ist und man auf jeden Fall mit jedem Programm unmassen von Patenten verletzt.