Kathy Sierra - Didaktik fĂĽr Reiche

written by Martin Häcker on

… 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

written by Martin Häcker on

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...

written by Martin Häcker on

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.

Image

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.

Shell-Scripting aus Python

written by Martin Häcker on

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 [source:open-source/python-shell-scripting 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.

:)

  • [source:open-source/python-shell-scripting browse source]

Vergessene Objective C-Möglichkeiten

written by Martin Häcker on

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

Mehr Transparennz

written by Martin Häcker on

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.

Andere machen auch Fehler...

written by Martin Häcker on

Es ist doch immer wieder angenehm, wenn man feststellt das man nicht der einzige Mensch auf der Erde ist der Fehler macht.

Damit dieses Post besser via google zu finden ist, ab hier auf Englisch.

--- snip ---

For anyone trying to develop QT-based apps on leopard, take care. I couldn't find this bug documented anywhere, so I'm writing this up here.

The Leopard CDs Apple shipped with new computers right after leopard came out contain a very old QTKit Version in the 10.4u.sdk of Xcode 3.0.

This means (at least) that you get spurious warnings on building - and we have also found that it makes apps built on this machine (Leopard, Intel) behave very badly on PPC Tiger machines. That is, QuickTime Exports would fail silently. (This is what initally triggered us finding this)

To detect it, have a look at the file: </Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/QTKit.framework/Versions/A/Headers/QTMovie.h> and look till when the copyright goes. If it is till 2005 -> You have the old version. If it is till 2007 -> You most likely have the correct version.

I don't know if there are other problems with the CD Version of Leopard, so if you are using it, take care and consider installing something different!

Oh, and of course I filed a radar: 5699456

--- snap ---

Ah well. Mal schauen wo ich dieses Post unterbringen kann.

Jetzt oder Nie

written by Martin Häcker on

Herbert Grönemeier ausgerechnet. Wer hätte das gedacht.

Total schräg.

<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/J4YK03vPenQ&rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/J4YK03vPenQ&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>

Jetzt oder Nie

Descriptiver Code…

written by Martin Häcker on

Es geht doch nichts ĂĽber selbstbeschreibenden Code. ;)

IF_LAST_ERROR
        ERROR_HANDLING

Hat mir dann auch gar nichts genützt die nächsten Zeile zu lesen:

diglossia* oracle=NULL;
    struct NmGsmCtrlCoreMsg* Msg=NULL;

    oracle=((diglossia*)PtrParamG->oracle);

Habt Mitleid mit mir....

Bitte kein C...

written by Martin Häcker on

Also eines muss man Programmierern lassen, erfinderisch sind sie.

Heute stellt sich mein Verständnis von C wirklich auf die Probe.

Zuerst der Vorlauf, da gibt es einen parameter controller der immer als int ĂĽbergeben wird - natĂĽrlich hartkodiert und ohne jeden kommentar was wofĂĽr steht. Ok, das ist jetzt ekelhaft, aaaber.

Dieser int wird dann in einem struct element iType gespeichert. Um herauszufinden was dieser Parameter nun macht habe ich also mal durch den SourceCode gegreppt um herauszufinden was damit passiert und bin dabei auf die viel versprechende Zeile switch(self->iType) gestoĂźen. GroĂź war da meine Freude, wenn auch leider nur kurz.

switch(self->iType)
    {
            RefProg=USBprogressIndicator;
    }

Da stellt sich natĂĽrlich die Frage... was macht der Compiler daraus eigentlich? Interpretiert er es als

switch(self->iType)
    {
        case default:
            RefProg=USBprogressIndicator;
    }

oder doch als:

switch(self->iType)
    {
            RefProg=USBprogressIndicator;
        case default:
    }

i.e. heißt das eigentlich das der Code darin nicht ausgeführt wird? Und verhält sich das auf anderen Compilern / Compilerversionen genauso?

Ist doch immer wieder schön solche zoten in Sourcecode zu finden. :)

Update

Inzwischen habe ich nachgeprüft was da Sache ist. Meine Vermutung war, dass der Programmierer es ja nur im Code gelassen hätte, wenn es einen Sinn hat. Nun ja, man glaubt ja an das Gute im Menschen.

Ich musste mich dann aber doch eines besseren Belehren:

#include <stdio.h>

int main (int argc, char **argv) {
        int foo = 3;
        switch(foo) {
                printf("gotit\ne\n\n\n");
                return -1; 
        }

        printf("didn't get it\n");
        return 0;
}

Wie man am Beispiel sehen kann (mit etwas wie "gcc -o foo test.c && ./foo" ist es einfach zu zeigen das switch(foo) tatsächlich den gleichen effekt hat wie

#include <stdio.h>

int main (int argc, char **argv) {
        int foo = 3;
#if 0
                printf("gotit\ne\n\n\n");
                return -1; 
#endif

        printf("didn't get it\n");
        return 0;
}

Was ich wirklich herzlich Sinnlos finde.