Posts for the month of February 2008

Habermas nach Aktuell?

Habermas definiert die Privatsphäre aus der Oikos, der Lebensnotwendigkeit, die man braucht um sich die Überlebensfähigkeit zu sichern.

Was ist jetzt, wenn diese Sphäre wegfällt?

Schließlich sind immer mehr der überlebensnotwendigen Dinge in unserer Überflussgesellschaft einfach Verfügbar oder werden immer öffentlicher organisiert.

  • Arbeit findet nicht mehr auf dem eigenen Acker, sondern fremdbestimmt und öffentlich statt.
  • Heilung im Krankenhaus oder anderen öffentlichen Einrichtungen, denen man mühsam ein wenig eigenbestimmung der dabei entstehenden Daten abnötigt.
  • Fortpflanzung (oder zumindest Sex) wird immer mehr öffentlich zelebriert - die Schwulen machen es mit  Community Plattformen vor.

Wenn die Ernährung, Heilung und Fortpflanzung nicht mehr Privat ist, dann bleibt für den Rest vielleicht nicht mehr ausreichend Grund übrig Privat zu sein.

Dazu kommt, das durch das Internet und  passender  Software das veröffentlichen so einfach wird, dass immer mehr öffentlich gemacht wird.

Ob sich das "Private" diesem Sog auf lange Sicht entziehen kann?

Strange thoughts that I have...

YAY - ich bin auf der Apple Homepage

 Und zwar genau hier.

Na gut... das ich nur für  Novamedia arbeite und die Software trotzdem nur von mir Privat ist haben sie noch nicht hingekriegt, aber da Arbeite ich drann.

:)

Grundrecht per Verfassungsgericht

Das allgemeine Persönlichkeitsrecht ![...] umfasst das Grundrecht auf Gewährleistung der Vertraulichkeit und Integrität informationstechnischer Systeme.

Mehr im  Urteilsspruch des Bundesverfassungsgerichts.

Wow. Mir ist noch nicht ganz klar was für Auswirkungen dieses Gesetz alles haben wird.

Insbesondere die "Vertraulichkeit und Integrität" ist mir unklar. Mein Freund  Bernd formulierte das sehr schön: "Wenn StudiVZ öffentlich sagt das sie dein Profil an Werbetreibende verkaufen, dann gehört es zur Integrität der Plattform das diese Informationen Verkauft werden."

Großartig.

Na mal genauer durchlesen was das sagt.

In der Zwischenzeit:  Die Inspiration des Bundesverfassungsgerichts?.

Perry Rhodan - oder wie man großartige Ideen in den Sand setzt

Leider.

Von Perry Rhodan gibt es nämlich seit einiger Zeit  eine Hörbuch Ausgabe. Großartig! Die größte Science-Fiction Serie der Welt - endlich einfach jede Woche auf dem iPod haben, von professionellen Sprechern gemacht.

Super.

Dachte ich und kaufte mir ein Abo. Für 149,90 Euro.

Uff. Das ist für 50 Hefte. Im Print kostet ein Heft 1,85 Euro * 50 < 150 Euro. Deutlich. (Einzelhefte kosten mit knapp 8 Euro nochmal deutlich Premium)

Und damit fing erst an, denn an jeder Stelle wirkt das Produkt als wäre es gestümpert. Mit einer Ausnahme - die Hefte sind gut gesprochen und machen Spaß zuzuhören.

Das ist das was es so unerträglich macht - ich mag das Produkt. ich mag es sogar so gerne das ich es gekauft habe. Und gleichzeitig bin ich ständig davon entnervt. Und das von Problemen die ein bei einem Download von einer Warez-Seite nicht auftreten würden.

Gnah!

Die Webseite

  • Unübersichtlich
  • langsam
  • Auf der Heftübersicht werden die noch nicht für den Download-Freigeschalteten Hefte ohne Titelbild angezeigt. Jeder neue Kunde bekommt dadurch das Gefühl auf eine Unfertige Seite zu schauen.
  • Jedes Heft hat seine eigene Unterseite auf der man drei mal klicken muss um die Download-Links zu sehen. Man muss Qualität und anzahl der Dateien auswählen.
    • Die Download-Links erscheinen nicht via AJAX, man muss tatsächlich die ganze Seite neu laden. :-(
    • Die Einstellungen werden natürlich nicht gesichert, das heißt man muss die Einstellung jedes mal neu machen
  • Wenn man ein Heft herunterlädt, dann möglichst nicht mit dem Browser, sondern mit einem Download-Manager, weil es schon mal vorkommt das der Download auf eine Weise zusammenbricht die man im Browser nicht fortsetzen kann. Noch mal eine Komplizierung.

Die MP3s

  • Kein Titelbild
  • Keine Inhaltsangabe in den ID3 tags
  • Wenn man den ganzen Roman als eine Datei heruntergeladen hat, steht in der Titelzahl irgend etwas von Titel 70 von 70 Titeln. GNAH! Es ist nur EINN Titel.
  • Das Gendre "Hörbuch & Gesprochene Inhalte" oder ein anderes Passendes fehlt
  • Der Tag "Position Speichern und nach einer Unterbrechung dort Fortfahren" fehlt.
  • Keine Kapitelmarker (Das Format ist MP3 - ausschließlich, ein Alternativangebot mit AAC fehlt)

Die Hefte an sich:

  • Keine Titelbilder
  • Keine Zusammenfassung was vorher war in Textform
  • Keine Leserbriefe
  • Keine Risszeichnungen
  • Keine Clubnachrichten
  • Keine PR-Magazine
  • Keine PR-Computer
  • Keine PR-Encyclopdien

Überhaupt, damit ich die Hefte genießen kann, muss ich sie jede Woche (nachdem ich eine e-mail bekommen habe)

  • Die Webseite ansteuern
  • Umständlich einloggen
  • Herausfinden welche Hefte ich noch nicht heruntergeladen habe
  • Von diesen Heften die Seite öffnen
  • Die Hefte von Hand herunterladen
  • Die Hefte in iTunes importieren
  • Die Lautstärkenanpassung abwarten
  • Von irgendwoher die Titelbilder besorgen und auf die Hefte anwenden
  • Die ganzen Tags von Hand fixen
  • Alles auf den iPod syncen

Und dann kann ich sie endlich hören.

Verglichen damit das ich vorher einmal die Woche sowieso am Kiosk vorbei gekommen bin habe ich also ganz schön was zu tun um weniger für mehr Geld zu kriegen.

Was ich eigentlich will, ist dagegen folgendes:

  • Einmal einen Podcast in iTunes einbinden
  • Mich einmal die Woche darüber freuen das mein iPod schon wieder ein neues Perry-Rhodan Heft enthält.
  • Mich einmal die Woche wenn ich Lust habe über das PDF im Podcast hermachen das die Extras enthält.

Das Produkt ist Toll - endlich Perry Rhodan bequem zum Hören - und gleichzeitig so fürchterlich das man es wirklich nicht weiterempfehlen kann.

GNAH!

Wieso nur können die illegalen Download-Seiten das nur so viel besser? Da geht das schon lange.

So jedenfalls kann ich niemanden an die Wand argumentieren der sich die Folgen lieber illegal saugt.

Saugen tut das Produkt ja schließlich schon selbst. :-(

Kaiserschmarrn

Der Schmarrn im Ofen Ja so ein Schmarrn sag ih!

Ich war am Wochenende im Bayern - zu einem Geburtstagsfest. Da hatte ich das Glück das ein ganz hervorragender Koch da war - der mir gezeigt hat wie man einen richtig leckeren  Kaiserschmarrn macht.

Das Geheimnis: Der Schmarrn wird im Ofen bereitet und geht dadurch besonders schön auf und macht gleichzeitig viel weniger Mühe.

Hier die Details:

Der Schmarrn wo er grad aus dem Ofen kommt

Menge

Nachtisch
ca. 2 Eier pro Person
Hauptgericht
ca. 3-4 Eier pro Person

Zutaten

  • 1l Milch
  • ca. 3/4 kg Mehl (etwas mehr)

Kräftig glatt rühren und für mind. 1 Stunde gehen lassen (Etwas Milch oben drauf, damit sich keine Haut bildet)

Ofen auf 250° Ober UND Unterhitze aufheizen

  • 15 Eier in den Teig schlagen und ihn glatt rühren

Der Schmarrn beim Zerteilen

In einem tiefen Blech

  • ca. 50-100g Butter schmelzen lassen
  • Zucker (ordentlich - der Teig ist ja völlig ungesüßt) und
  • Mandelsplitter (wenn man hat) draufstreuen

und dann im Ofen den Zucker karamelisieren lassen. Fertig ist die Vorbereitung, wenn die ersten Mandelsplitter dunkel werden.

Den Teig auf die Mischung geben (wenn die Zucker-, Butter-, Mandel-Mischung nicht drunter bleibt, war's zu viel Butter). Nicht zu viel Teig, nur so das alles gut bedeckt ist. Noch einmal Zucker (reichlich), Mandelsplitter und wenn man mag Rosinnen (gerne auch in Rum eingelegte) drauf, dann im Ofen 'anbacken', bis die ersten Stellen anfangen Braun (Mahagoni) zu werden.

Der Zerteilte gesüßte Schmarrn

Jetzt den Schmarrn wenden und fertig backen. Je nachdem wie groß die Form ist muss man ihn dazu etwas klein schneiden. Fertig ist, wenn die andere Seite auch schön Goldbraun (Mahagoni) ist.

Dann zerreißen, durchmengen, nochmal Zucker (soll ja schon süß schmecken - ausserdem schmeckt der Zucker wenn er Karamelisiert ist nicht mehr so süß) und im Ofen ein letztes mal kurz "ankaramelisieren".

Mit Puderzucker auf einer vorher warmgestellten Form anrichten und servieren. Falls es schon dunkel ist darf man auch gerne Flambieren... :)

  • Posted: 2008-02-25 20:36 (Updated: 2009-10-24 15:47)
  • Author: dwt
  • Categories: cucina
  • Comments (0)

Kirche Modern!

Jaja, das gibts!

 Ab jetzt kann man mit Gott auch Chatten!

Ha!

Und sogar in schick!

Me: Do you know Eliza?
God: Eliza -- also known as doctor, is the original psychiatrist program 
     developed by Joseph Weisenbaum at MIT in the 1960's.
Me: How fast you type!
God: I can reply to about  queries per hour.
Me: How many?
God: How many would you guess?
Me: NaN from your sentence.

:-)

Legalese und Babelfisch

Gefunden auf  Whatatop.com

At the moment when the user sends to us an image, it is granting us the right and the license for his use, free of royalties, not exclusive and transferable to third, that authorizes us to use it, distribute it, show it and spread it, and incorporate it in other works for the targets of this web page. Also, it grants identical rights to the USERS of our portal for his visualization, and uses deprived without fortitude of lucre. The granting of these licenses, they will remain revoked with the simple retreat of the image of the web, remaining current, permanent and irrevocable the granted ones before his retreat, without detriment to the rights of intellectual property that it shows on the image.

Was will uns der Autor damit wohl sagen?

Die Seite ist offenbar ein kleines Community-Projekt wo man Bilder hochladen kann ( einiges  davon  gefällt  mir  auch  ganz  gut)

Aber die Frage welche Rechte nun wer an diesen Bildern genau hat - die bleibt irgendwie offen. Persönlich habe ich ja die Vermutung, das der Text von einem Anwalt auf Spanisch geschrieben wurde um dann Maschinell oder mit wenig Verstand übersetzt zu werden.

Nun ja, bleibt er mir halt spanisch. :)

Café Wall Illusion Saver (was Skewed Lines Saver)

Here it comes, the new version!

Now with configurable animation speed and block size. (Though I still find the default most pleasing :)

Oh, and I also fixed the buildscript so it now produces good zip files. Sorry for that on the first try.

Have fun trying it till your eyes become squared (as my boss uses to say. :)

  • Posted: 2008-02-19 20:45
  • Author: dwt
  • Categories: (none)
  • Comments (0)

Trac als Homepage

(Zu  Amy Amy Amy)

Trac als Homepage hat sich für mich ja schon bewährt. Ein Wiki, eine Versionsverwaltung, Theoretisch auch noch Bug-Tracking (deaktiviert wg. Spammern) - was will man mehr.

Naja, einen Blog. Und da fängt das Problem dann auch schon an.

Traditionell sind Blogs alle in HTML oder mit merkwürdigen Wysiwyg-Editoren die nicht richtig funktionieren oder so beschränkt sind, das man darin gar nicht alles machen kann was man will (z.B. Source-Code highlighten. Noch dazu Objective-C!)

Ausserdem will ich das mein Blog sauber mit meinem Wiki Verlinkt ist und ich die normale Wiki-Syntax zum Bloggen verwenden kann.

Das mache ich bisher mit dem  TracBlogPlugin, nachdem ich früher mal mit dem  SimpleBlogPlugin eher... unzufrieden war.

Leider aber ist auch das TracBlogPlugin nicht perfekt. Zwar setzt es auf das  TracTags Plugin auf, das ganz excelent ist - aber leider bleiben einige schwächen.

  • History + Archiv ist mehr oder weniger nicht vorhanden
  • Kommentare gehen nicht.
    • Moderation derselben schon gleich gar nicht.
  • RSS-Feeds sind eher... nun ja, mit einigem Experimentieren kriegt man einiges hin, aber schön ist es nicht.
  • WeblogPings und Backlinks werden nicht unterstützt.
  • Blogrolls etc... alles von hand.
  • XMLRPC... Ah well.

Weiterentwickelt wurde das Plugin seit fast einem Jahr nicht mehr (ok, in  den letzten Tagen passiert wieder etwas, mal schauen wie das weiter geht)

Jetzt hatte ich mir schon überlegt [vielleicht selber Hand anzulegen], da stellt sich heraus, das schon jemand anderes deutlich entnervt war und das Plugin  FullBlog entwickelt hat.

Pro:

  • Feeds++
  • Kategorien (mit TracTags Unterstützung?)
  • Kommentare + Spamfilterung!
  • XMLRPC support

Cons:

  • Seiten sind nicht im normalen Wiki-Namespace (Aber man kann wohl hin und her linken)
  • Ich kann also nicht alle bestehenden Postings direkt übernehmen
  • Der Code malt (da er keine normalen Wiki-Seiten verwendet) direkt in der Datenbank herum. Gnah.

Mehr hab ich mir noch nicht angesehen. Aber eine vernünftige Blog-Integration für Trac wäre Gold wert. Will schließlich heute jeder haben, einen Blog. Ah well.

Eye in the Sky Projektideen:

  • Endlich mehr Blogging Features hier im Trac
  • Mehr Release Management Unterstützung
    • Upload von neuen Releases
    • App-Cast auto-generieren - mit Wiki-Seite für die Change-Notes
  • Buildserver wäre ein Traum - geht aber nicht solange ich auf Linux hoste und für den Mac Entwickle.

Diesen Freitag 17:00 Uhr treff ich mich mit  Felix und  Felix in der  Freitagsrunde und wir werden mal weiter beraten was wir mit Trac weiter machen. Wer Trac Hacken mag oder schon tut und dazukommen mag ist natürlich herzlich eingeladen. :)

Bei Mac Donalds

Nicht nur das es jede menge kranke  Mc  Donalds  Werbung gibt.

Noch viel kranker sind nur  die Leute die bei McDonalds einkaufen...

LOGen von beliebig vielen Argumenten

Fehlt noch ein letzter Schritt - der erstaunlicherweise ganz einfach war und ausserdem noch ein ganz anderes Problem löste...

Zuerst die Implementierung:

#define LOG(what, variableArguments...) \
    [[Log sharedLog] logObjcType:@encode(typeof(what)) \
        arguments:(void *)what , ##variableArguments]

- logObjcType:(char *)typeString arguments:(void *) what, ...; {
    id formatString =  [self stringFromType:typeString inValue:what];
    
    va_list variadicArguments;
    va_start(variadicArguments, what);
    
    id logString = [[[NSString alloc] initWithFormat:formatString 
                    arguments:variadicArguments] autorelease];
    
    va_end(variadicArguments);
    
    return [self log:logString];
}

Eigentlich hatte ich hier mehr Probleme erwartet.

Ganz nebenbei löst das auch noch ein Problem von ganz zu Anfang:

LOG(@"%@", [NSString stringWithFormat:@"%s,%s", "fnord", "fnord"]);

Das macht jetzt keine Probleme mehr, da die zusätzlichen Komas vom Präprozessor (fälschlicherweise) als zusätzliche Argumente zur dem variadischen Makro aufgefasst werden. Hehe...

Jetzt fehlt nur noch ein Backend für den Logger und ich bin glücklich. Andererseits... da gibt es natürlich auch  Log4Cocoa das ich einfach erweitern könnte.

Hm. Mal schauen.

C-Typen in die Laufzeitumgebung heben

Wendet man @encode() jetzt auf ein paar Deklarationen an, erhält man folgende Ergebnisse:

#define LOG(what) [[Log sharedLog] logObjcType:@encode(typeof(what)) arguments:(void *)what]

LOG(@"fnord"); // @
LOG("foo"); // [3c]
char *string = "fnord";
LOG(string); // *

Ich parse das so:

#define RAISE_UNSUPPORTED_TYPE(encodedType) \
    [NSException raise:NSInvalidArgumentException \
        format:@" you are trying to log something that is not a string: %s", encodedType]

- stringFromType:(char *)encodedType inArray:(void *)what; {
    if ('[' != *encodedType) RAISE_UNSUPPORTED_TYPE(encodedType);
    
    encodedType++;
    unsigned length = strtol(encodedType, &encodedType, 10);
    if ('c' != *encodedType) RAISE_UNSUPPORTED_TYPE(encodedType);
    
    return [NSString stringWithCString:what length:length-1]; // \0 ignored
}

- stringFromType:(char *)encodedType inValue:(void *)what; {
    if ('@' == *encodedType) return [(id)what description];
    if ('*' == *encodedType) return [NSString stringWithCString:(char *)what];
    if ('[' == *encodedType) return [self stringFromType:encodedType inArray:what];
    RAISE_UNSUPPORTED_TYPE(encodedType);
    return nil; /* never reached */
}

(Vorschläge wie man das besser machen kann, bitte gerne an mich! ( z.B. via spamfaenger ät gmx de))

Fehlt nur noch die Erweiterung auf beliebig viele Argumente. Dazu aber morgen mehr. :)

  • Posted: 2008-02-15 22:18 (Updated: 2008-02-16 09:17)
  • Author: dwt
  • Categories: code
  • Comments (0)

Mit C Makros etwas tun, was mit ihnen nicht möglich ist

Das Problem ist also ein Makro zu schreiben, das typsicher und nach Typen überladen ist, eine variable Anzahl von Argumenten erhält und zudem einfach und verständlich ist.

Zugegeben, mir ist noch nicht klar wie ich das umsetzen kann.

Aber, wenn man das Problem nur ein klein wenig vereinfacht, und nur versucht eines oder mehrere Argumente zu unterstützen...

Also zum Beispiel ein LOG() Macro, dass als erstes Argument irgend etwas erhalten kann (für den Anfang, irgend etwas das sich in einen String umwandeln lässt) dann erhält man etwas das sich so verwenden lässt:

LOG(@"fnord");
LOG("fnord");
char *string = "fnord";
LOG(string);
LOG(@"%@", @"fnord");
LOG(@"%s", "fnord");
LOG(@"%d", 10);
LOG("%s", "fnord");
LOG(@"%@", [NSString stringWithFormat:@"%s,%s", "fnord", "fnord"]);

Die Implementierung ist allerdings etwas tricky.

Typinvariante Makros wie MAX(x, y) schreibt man üblicherweise so:

#define MAX(x, y) ({ \
    typeof(x) __x = (x); \
    typeof(y) __Y = (y); \
    (__x < __y) ? __x : __y; \
})

Das bedeutet durch die speziellen klammern ({ ... }) wird das Makro wie eine Funktion behandelt (eine GCC-Extension) und die übergebenen Ausdrücke nur einmal auswertet und in einer Variablen vom korrekten Typ speichert. int m = MAX(i++, ++j); ist damit also kein Problem. Schließlich ist der Wert der letzten Zeile der "Rückgabewert" der Makro-Funktion

Loggen ist aber schon noch ein Problem, da mit diesem Trick, der Typ noch nicht herauszufinden ist. Mein erster Ansatz mit  __builtin_types_compatible_p(typeof(aValue), char *) etc. brachten mich da nicht weiter. Es braucht noch die  @encode() Anweisung von Obj-C. Direkt im Makro mit if (@encode(char *) == @encode(typeof(aValue))) war es dann allerdings auch noch nicht obwohl ich gerne mit  __builtin_choose_expr( aConstant, expressionOne, expressionTwo ) zur Compilezeit alles erledigt hätte.

Nun ja, dann eben zur Laufzeit mit @encode().

#define LOG(aValue) [[Log sharedLog] logObjcType:@encode(typeof(aValue)) value:aValue]

Die erzeugt aus einem Typ nämlich einen C-String - der zur Laufzeit geparst werden kann um daraus herauszulesen wie der void-Pointer auf aValue interpretiert werden muss.

Wie ich das gemacht hab - morgen. :)

  • Posted: 2008-02-15 09:02 (Updated: 2008-02-15 21:19)
  • Author: dwt
  • Categories: code
  • Comments (0)

Macros in C

(Zu "Feuer Frei" von Rammstein)

Makros in C sind ja so eine Sache.

Zum einen kommt man in C an vielen Stellen gar nicht ohne aus, da sie die einzige Möglichkeit sind Ausdrücke OHNE sie zu evaluieren an mehreren stellen zu verwenden. Zum anderen Sind sie rein Textuell, "unhygienisch" und haben keine Ahnung was in ihnen eigentlich passiert.

Das macht vor allem in Objective-C mächtig Schwierigkeiten. Das hier zum Beispiel geht nicht.

#define DO(argument) argument

DO([NSString stringWithFormat:@"%s", "asdf"]);

Der Compiler meckert hier über zu viele Kommas und denkt das ich das Makro mit zwei Argumenten aufrufen will. Gnah.

Warum beschäftigt mich das eigentlich?

Ich möchte gerne Macro's haben, die je nach Typ des Arguments etwas anderes machen. Für Unit-Tests z.B. möchte ich sagen:

- (void) testOverloadedAssert
{
    ASSERT_EQUALS(3, 3);
    ASSERT_EQUALS(@"barf", @"barf");
    ASSERT_EQUALS("bar", "bar");

    // These should fail in a sensible manner
    ASSERT_EQUALS("bar", @"bar");
    ASSERT_EQUALS(3, 3.3);
}

Das ist aber schon ein großes Problem. In C++ könnte man den ersten teil ja noch über überladene Funktionen lösen - das geht in reinem Objective-C aber schon mal nicht. Dazu kommt ja noch der zweite Teil - da kriegt man vielleicht noch Compiler-Fehlermeldungen, wenn der Compiler nicht auto-conversion von Parametern anwirft. :-/

Dazu kommt, das ich C++ nicht mag und schon gar nicht in alle meine Tests eine zwingende Abhängigkeit auf C++ einfügen will.

Will man dann aber noch weiter gehen, wird es endgültig schwierig. Hier ein paar Beispiele:

- (void) testAdvancedAssert
{
    ASSERT_EQUALS(3.3, 3.3, 0.1 /* accuracy */);
    ASSERT_EQUALS(3.3, 3.3, @"important meta information");
    ASSERT_EQUALS(3, 3, @"info contains: %@ in %s:%d",
         @"other info", __PRETTY_FUNCTION__, __LINE__);
}

In reinem C hätte man hier gar keine Möglichkeiten mehr etwas zu machen.

Wie weit ich mit einer Lösung dennoch gekommen bin - morgen. :)

  • Posted: 2008-02-13 21:34 (Updated: 2008-02-14 07:47)
  • Author: dwt
  • Categories: code
  • Comments (0)

Geek-Humor

Schnell noch aus der Kategorie "Geek-Humor".

Für alle die die  Prometheus Seite noch nicht besucht haben.

Großartig.

Fone2Phone

Fone2Phone in Action My first complete piece of work for  Nova Media. I did this after working there for about a month.

 Fone2Phone allows you to have a one stop solution to transferring everything from your cell phone to your macintosh. From there on you can either put it on your iPhone or iPod (Touch), just use it on your System or sync it to a different cell phone.

As far as the technology is concerned Fone2Phone is a subset of our more capable application  FoneLink which allows you to do all this and more. Check it out!

Skewed Lines Screen-saver

Screenshot of the SkewedLines Screensaver Just two days ago I watched the episode  Wie man sich täuschen kann of  Quarks und Co. (Which has a very nice  Video Podcast - by the way)

They had this beautiful illusion - but in an animated form, which I have never seen before.

Well, after two hours, I had a screen-saver running and really like the results.

So, here you go too. :)

God wrote in Lisp-Code!

Supreme Geek-Unterhaltung aus dem Vortrag 50 of 50?.

 download - mp3 (von  Prometheus Music)

Beautiful Code

"Lest mehr Code!" werde ich mir immer als Schlusswort des  Literarischen Code-Quartetts merken.

Und weil man ja auch verdauen muss was man liest, empfiehlt sich natürlich guter Code - an dem man auch noch mehr lernen kann.

Daher war ich begeistert, dass O'Reilly das Buch  Beautiful Code ( blog) herausbrachte. Das geniale daran: Es werden nicht nur gute Programme abgedruckt, sondern Erklärungen, was hervorragende Programmierer daran schön finden und warum!

Und was für Perlen da drin sind.

Besonders haben mir gefallen (ich bin noch nicht durch)

  • Kapitel 1: Regex matcher in C - Brian Kernighan hat Stil! (und pointer :)
  • Kapitel 14: Wie sich LAPACK über die Zeit und die verwendete Hardware veränderte
  • Kapitel 17: Ein Rundgang durch die Layer des Virtuellen Dateisystems von BSD
  • Kapitel 18: Wie Pythons Dictionaries implementiert sind
  • Kapitel 22: Deadlock-Detection und subtile Bugs im Solaris Kernel (faszinierend)

Und so geht es grade weiter.

Gibts auf  Amazon oder einem Tracker in deiner Nähe.

  • Posted: 2008-02-08 05:05 (Updated: 2008-02-08 21:07)
  • Author: dwt
  • Categories: review
  • Comments (0)

Kathy Sierra - Didaktik für Reiche

… und wem es reicht, von Lehrenden ständig für dumm verkauft zu werden.

Endlich mal jemand, der das, was wir aus Computerspielen und Psychologie gelernt haben, zu einem schlüssigen Didaktik-Konzept zusammenbringt und auf ernsthafte Themen anwendet!

Und das beste - sie bringt ihre Theorien und deren Anwendungen in diesem wundervollen Podcast (von der OOPSLA) auch noch auf den Punkt!

Yeah.

 download - mp3

p.s.:  Kathy Sierra hat nicht nur die  Head First-Serie bei O'Reilly mitgestaltet, sondern auch einen  Blog den sie leider aufgegeben hat, nachdem ein paar Idioten sie auf ihrem Blog aufs Korn genommen haben - bis hin zu äusserst graphischen Drohungen. :-(

Hoffentlich fängt wieder zu Bloggen an - und ich bin sicher, dass jede e-mail hilft!

50 of 50

 Guy Steele kennt man ja.  Richard Gabriel schon weniger.

Wenn die beiden aber  zusammen einen Vortrag auf der OOPSLA halten - dann sollte man zuhören.

Richtiges, echtes, Geek-Kabarett.

Wie man eine schöne Animation macht...

Das ist nämlich gar nicht so einfach.

Ich arbeite ja nun seit ein paar Monaten bei  Novamedia - und mein erstes Projekt war, (mit einem 'sportlichen' Zeitplan von etwa 6 Wochen) bis zur  Macworld im Januar 08 das Produkt Fone2Phone fertigzustellen.

Ziel der Aktion war es, ein Produkt zu haben, was bei der Migration von einem Telefon weg hilft. Dazu sollte Fone2Phone alles, was das Telefon an Daten enthält, aus diesem herausholen und in die jeweils zuständigen Apple-Applikationen befördern.

Das ist für sich genommen natürlich recht wenig (wenn auch technisch anspruchsvoll), darum haben wir uns von vornherein das Ziel gesetzt, mit dem Produkt auf der Macworld möglichst viele Preise abzusahnen. (Was auch  geklappt  hat. :)

Aber das ist alles nur Vorrede (und Stolz, schließlich hab ich damit gezeigt, was ich kann). Also auf zum eigentlichen Zweck dieses Posts.

Animation des Übergangs

Die Animation. Damit Fone2Phone wirklich geil aussieht, haben wir tief in die Trickkiste gegriffen ('Wir' ist in diesem Zusammenhang mein Kollege  Andreas).

Denn damit die Animation richtig gut aussieht, überlagern wir drei Elemente.

  1. Eine Animation, die die beiden Views austauscht
  2. Eine variable Geschwindigkeit, das heißt die Animation beginnt langsam, beschleunigt sich dann und wird am Schluss wieder langsam.

Bis hierher wäre ich auch darauf gekommen - aber der eigentliche Geniestreich liegt in dem letzten Element, das da noch oben drauf kommt:

  1. Die Views werden mit dem Hereinschieben eingeblendet / mit dem Herausschieben ausgeblendet.

Dieses letzte Element macht die Animation soo viel besser - obwohl es in der Komposition zuerst bewust überhaupt nicht wahrgenommen wird.

Und das ist die Lektion, die ich heute mitgenommen habe.

  • Posted: 2008-02-04 21:56 (Updated: 2009-10-24 16:26)
  • Author: dwt
  • Categories: software
  • Comments (0)

Vergessene Objective C-Möglichkeiten

Da gibt es doch tatsächlich in Objective C die Möglichkeit, jederzeit eine Klasse unter einem anderen Namen zu importieren.

Nice.

@compatibility_alias MyShortClassName MyVeryLongClassNameThatIDontWantToTypeEveryTime;

Von  Write a Screen Saver Part II

  • Posted: 2008-02-03 21:53 (Updated: 2008-02-03 22:10)
  • Author: dwt
  • Categories: code links
  • Comments (0)

Shell-Scripting aus Python

Ich wollte ja schon länger meine Shell-Scripte eigentlich gerne in Python schreiben - einfach weil mich bash so fürchterlich nervt.

Allerdings ist der call-out zu shell-scripten ziemlich ekelhaft. All die schönen / ekelhaften Dinge die man in der Shell so einfach machen kann, gehen nicht.

Naja, dachte ich. :)

Mit ein bisschen Googeln hab ich nämlich das hier gefunden.

Wunderschön einfach und simpel:

import shell

print shell.prefix
shell.prefix="/usr/bin"
print shell.prefix
shell.wait=False
print "calling true:", shell.true().returncode
shell.wait=True
print "calling true:", shell.true().returncode

shell.prefix="/bin"
print shell.ls("~/").stdout

Nice! Nie wieder Bash bashen.

:)

  • Posted: 2008-02-03 20:43 (Updated: 2008-02-03 20:47)
  • Author: dwt
  • Categories: code
  • Comments (0)

Mehr Transparennz

Mehr Demokratie? = Dieser Gedanke trägt sich schon längere Zeit mit mir herum.

Unter Transparenz ist natürlich viel subsummiert. Dazu gehört natürlich die  Wikipedia. Ich finde aber Transparent-Macher wie  Udo Vetter mit dem "Law Blog" oder  Thomas Knüwer mit "Indiskretion Ehrensache" oder  Garr Reynolds mit "Presentation Zen" im Moment viel spannender.

Diese Leute sind für mich Kondensationskeime für die Transparenz die das Netz rein aufgrund der Tatsache schafft, das es so einfach ist und sich dann auch Leute finden die diese Möglichkeiten nutzen.

Für mich bedeutet das, das ich einen ganz anderen Einblick in den Berufsstand und die Denkweise dieser Menschen erhalten kann. Mir eröffnet sich die Möglichkeit zu verstehen was sie tun und wie sie denken.

Hoch spannend. Und meiner Meinung nach auch hoch politisch.