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.

Future of Media

written by Martin Häcker on

Anscheinend gibt es immer mehr Leute die die Zukunft unserer Medien relativ objektiv beurteilen können.

Besonders schön fand ich daher den sehr umfassenden Blick den Gerd Leonhard auf die Zukunft der Medien wirft.

Hörenswert!

Ăśberwachung

written by Martin Häcker on

„... Wer meint nichts zu verbergen zu haben, der übersieht, dass er sich täglich die Freiheit nimmt, im Stillen Entscheidungen zu treffen. Wenn selbst die Entscheidung, bei welchem Bäcker man wie oft seine Brötchen holt plötzlich für den Staat von Interesse sein wird, wird auch dem letzten klar werden, dass er etwas zu verbergen hat...“

Via Rollmops.