Hier und dort gibt es die passenden Anleitungen – und ich stehe jetzt in Zugzwang mit meinem Flickrplugin. 😉 Allerdings bin ich mir noch unsicher, inwieweit die Anweisungen noch kompatibel zu iPhoto 6 sind. Jedenfalls wäre es wünschenswert, wenn Apple iPhoto 7 zum Anlass nehmen würde, endlich die API zu dokumentieren. Damit würden sich Apple vor allem selbst einen Gefallen tun: Denn letztlich wird die Anbindung an beliebige Fotodienste entscheidend für die Akzeptanz von iPhoto sein. Eine Software, die von Haus aus nur für die Dienste und in die Formate des Herstellers exportiert, sollte zumindest die Möglichkeit bieten mit geringen Aufwand eigene Exportfilter zu entwickeln.
Rummikub algorithmisch lösen
Ich habe heute gestern seit langen mal wieder ein Gesellschaftsspiel gespielt: Rummikub. Rummikub ist wie Rommé nur ohne Karten. Besonders interessiert mich an solchen Spielen immer, ihre Reglen in Algorithmen zu fassen. Obwohl das Spielprinzip von Rummikub simpel ist, fällt es schwer einen effiziente Algorithmus zu entwickeln. Bei meinem Ansatz das Spiel auf einen Graphen abzubilden, dass die Rekursion ziemlich teuer werden könnte.
Einen viel versprechenden Ansatz gibt Hendrik Lübben in seinem Artikel Playing Rummikub using a „human based“ approach. Mal sehen, ob ich es schaffe den Algorithmus in Mono zu implementieren. Ein so interessantes Projekt könnte mir den nötigen Anreiz geben endlich Mono/C# vernünftig zu lernen.
Rubybuch für lau
Ruby ist eine sehr mächtige objektorientierte Programmiersprache, die aufgrund des ihr innewohnenden Prinzips der geringsten Überraschung im direkten Vergleich mit ähnlich leistungsfähigen Sprachen leicht erlernbar ist. Wem dazu die exzellente Dokumentation nicht genügt, erhält mit Mr. Neighborly’s Humble Little Ruby Book gegen eine kostenlose Registrierung ein didaktisch gut aufgebautes Lehrbuch.
Wer lieber auf toten Bäume liest, kann das Buch übrigens auch kaufen.
Das PHP-Manual lügt
Gehen wir von folgendem Codeschnippsel aus:
$a = 'a'; $a++; echo $a; $b = 'a'; $b = $b + 1; echo $b;
Wer vermag ohne Ausprobieren zu sagen, welchen Wert $a und welchen Wert $b hat?
Wäre PHP eine konsistente Programmiersprache, sollten $a und $b den gleiche Wert haben. Gemäß der Logik von PHP ist jedoch a == 'b'
und b == 1
.
Eine Sprache, die zu solchen Überraschungen führt, wird tatsächlich als besonders einsteigerfreundlich gehandelt. Als Argument für PHP wird neben der flachen Lernkurve immer wieder auf die hervorragende Dokumentation verwiesen. Wie gut kann wohl ein Manual sein, dass zu oben genannten Phänomen folgendes verklärt?
PHP follows Perl’s convention when dealing with arithmetic operations on character variables and not C’s. For example, in Perl ‚Z’+1 turns into ‚AA‘, while in C ‚Z’+1 turns into ‚[‚ ( ord(‚Z‘) == 90, ord(‚[‚) == 91 ). Note that character variables can be incremented but not decremented and even so only plain ASCII characters (a-z and A-Z) are supported.
Dass ‚Z’+1 ‚AA‘ ergeben soll, halte ich für eine Lüge.
PHP nervt
Gibt es eigentlich irgendeinen logischen Grund, warum es keine einheitliche Namensgebung für PHP-Funktionen gibt? Jedes mal sitze ich vor der Tastatur und überlege, wie denn nun der Funktionsname geschrieben wird. Heißt es nun stripcslashes oder strip_cslashes? Und wenn es stripcslashes, warum heißt es dann strip_tags und nicht striptages? Das gleiche Problem bei strtolower und bin2hex. Klar: PHP ist eine gewachsene Sprache und wurde von Version zu Version um Funktionalität erweitert; da lassen sich Innkonsistenzen nicht immer vermeiden. Aber was hindert das Entwicklerteam daran die Namensgebung zu vereinheitlichen, indem sie Synonyme zulassen und von der Norm abweichenden Funktionsnamen als deprecated kennzeichnen?
PHP unterstützt mittlerweile eine sinnvolle Fehlerbehandlung durch Exceptions – dumm nur, dass kritische Funktionen wie file() keine Exception werfen.
PHP6 lässt zumindest hoffen, dass in kommenden Versionen die Sprache endlich von den Altlasten befreit werden kann. Denn es ist zwar schön, dass mensch seit PHP5 fortgeschrittene objektorientierte Implementierungstechniken anwenden kann, aber es macht eben wenig Spaß, diese auf Relikten der strukturierten Programmierung aufsetzen.
Spaß mit C++
Welchen Wert hat i?
int i = 44; i = i-- - i--;
Zu gewinnen gibt es nichts, außer der Bestätigung die Wirkung Postdecrementoperators verinnerlicht zu haben und zu wissen, warum gut daran getan ist ihn nicht kombiniert mit anderen Anweisungen zu verwenden, wenn gut wartbarer Code gefragt ist. Als kleinen Bonus erhält man noch Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest.
Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.
Martin Fowler