iPhone und Apple

In meinem "offiziellen" Job bin ich nun seit 8 Wochen (mit einigen Unterbrechungen) mit Softwareentwicklung für das iPhone beschäftigt. An dieser Stelle möchte ich kurz meine bisherigen Erfahrungen resümieren. Vorausschickend noch anzumerken ist, daß sich vieles wie Meckerei anhört. Das sollte nicht so sein. Ich bin dem Apple-Virus nicht anheim gefallen, verwende die Geräte privat nicht und habe daher einen neutralen Standpunkt. Es geht nicht darum, ob iPhones cool oder praktisch sind. Eher, was passiert wenn man dafür Software entwickelt.

iPhone Entwicklung - lohnt sich das denn?
Die Frage aller Fragen. Angesichts der unüberschaubaren Flut an Apps im Apple Store kann das Gefühl entstehen, daß dieser Markt komplett gesättigt ist. Das stimmt allerdings nicht, denn es werden immer noch Neugeräte (und damit Apps) verkauft. Allerdings - um "entdeckt" zu werden muß man entweder kostenlos (Blödsinn, wir wollen Geld verdienen) oder sehr gut sein. Wer früh kommt, verdient allerdings auch mit simpelsten Anwendungen Geld. Inzwischen geht das aus meiner Sicht für den Apple-Store / Consumermarkt nur dann, wenn es nur wenig Konkurrenz für die "Idee" gibt. Man muss berücksichtigen: Wenn man, sagen wir, in 2 Wochen eine sehr einfache App entwickelt (ganz optimistisch gerechnet) bei einem hiesigen, sehr konservativen Tagessatz von 500€ und noch die Hardwareeinstiegskosten (iMac Mini + iPod = 1.000€) + 100€ Entwicklerlizenz dazunimmt, liegt man bei einer initialen Investition von 6.100 €. Setzt man 1€ an muss die App 8.714-mal heruntergeladen werden (Apple Steuer: 30%), bevor man den break even erreicht. Ab diesem Zeitpunkt verdient man Geld. Aber nicht vergessen: Das ist der Consumer-Markt. Man ist zum Support verpflichtet. Bekommt man von nur einem Promille aller Anwender eine E-Mail (ganz dolle optimistisch), muß man bis zu diesem Punkt schon 8 Supportanfragen bearbeiten. Oh, lala. "Läuft" es einmal, wird die Anwendung in der Regel sehr schnell gecrackt und Plagiate tauchen auf, wie Kollegen von mir schon erfahren haben. Die Verkaufskurve zeigt dann unwillkührlich wieder nach unten. Ein großer Vorteil soll natürlich nicht verschwiegen werden. Als Entwickler im stillen Kämmerlein hat man mit dem AppStore eine fantastische Vertriebskette zur Verfügung. Die Kunden müssen nicht mehr gefunden oder geworben werden. Falls, tja, falls sie einen innerhalb der derzeit rund 200.000 angebotenen Apps selbst finden. :-)
Jetzt entwickeln wir nicht für den Consumer-Markt. Wir haben Geschäftskunden, die Masse ist nicht entscheidend. Allerdings bleibt die Gerätevielfalt dieselbe. Zur Anwendungsentwicklung auf einem Endgerät existiert eine preiswerte Alternative, und zwar die Implementierung einer für mobile Geräte optimierten Webseite. In vielen Fällen müssen ohnehin online auf Geschäftsdaten zugegriffen werden, eine Internetverbindung ist also erforderlich. Und ob HTC/Android, Berry oder iPhone, es läuft überall (mehr oder weniger ansehnlich) gleich. Im Funkloch tut sich dann nichts mehr, aber das ist dann vom Anwendungsfall abhängig. Man prüfe also, ob man sich das antun will ;)

Restriktionen
In der Apple-Welt lebt man auf einer Insel. Das ganze System ist darauf ausgelegt, dass der Anwender und der Entwickler ausschließlich Apple-Komponenten verwenden. Das fängt schon bei Kleinigkeiten an, wie dem Anschluß einer herkömmlichen PC Tastatur an einem Mac mini. Oder die Darstellung der Apple-Dokumentation in anderen Browsern außer Safari. Oder der Verbindung zu Windows Shares im Finder. Lauter kleine Ärgernisse, die man zwar irgendwann durch Googelei lösbar sind, aber trotzdem nerven, weil es sich um bewußt ausgelegte Stolpersteine handelt. Wer will sich schon gern die Arbeitsweise vorschreiben lassen. Ganz extrem ist natürlich dann die Entwicklungsumgebung fürs iPhone, ausschließlich mit XCode auf einem Mac Betriebssystem. Das hat keine technischen Gründe. Besonders zynisch dabei ist aus meiner Sicht, daß die darunterliegenden Komponenten aus der Unix-Welt stammen und wie der GCC beispielsweise der GPL unterliegen. Alles sicherlich rechtens, komisch riechen tut es trotzdem.

Entwicklung
Wie entwickelt man denn nun? XCode entpuppt sich als vollwertige und moderne Entwicklungsumgebung. In der Produktivität bleibt das Programm trotzdem meilenweit hinter Visual Studio zurück, was an dem umständlichen Debugger und am Fehlen von Funktionen wie "Edit & Continue" und der etwas zähen Intellisense Unterstützung liegt. Objective-C hätte ich mir schlimmer vorgestellt, ich habe mich trotz meines etwas vorgerückten Alters relativ schnell damit zurechtgefunden. Aber die Bibliotheksfunktionen! Immer wieder herrlich, wenn man selbst primitive Dinge wie das Zusammenfügen von Strings in der Doku nachschlagen darf, nur weil man den Funktionsnamen wieder vergessen hat. Man merkt auch, daß die Programmiersprache nur auf C übergestülpt ist. Probleme wie die Korruption des Speichers oder Stacks, Zugriff auf de-allokierte Objekte und ähnliche Schweinereien die ich schon ziemlich verdrängt hatte sind wieder an der Tagesordnung. Mit den damit verbundenen Programmabstürzen. Es ist problemlos möglich, eine Maske im Interface Builder so zu konfigurieren, daß das Programm an einer vollständig irreführenden Stelle einfriert. Nicht falsch verstehen. Das ist alles lösbar, nur würde man seine Zeit gern für andere Dinge verwenden. Im Grunde wird man ständig daran erinnert, daß man nicht wiederverwendbare Fähigkeiten für eine Insellösung aufbaut. So könnte man natürlich auch bei .NET, Java und ähnlichem argumentieren, nur sind die Inseln dort eher.. Kontinente.

Lernen
Wie ein guter Student habe ich mir zunächst ein Buch bestellt. "iPhone SDK Application Development" von Jonathan Zdziarski. Ein ehemaliger iPhone Hacker, ich dachte, das ist ganz sinnvoll. Leider erfüllte es nicht ganz meine Erwartungen. Die API hat sich inzwischen etwas verändert, so daß viele Beispiele etwas veraltet sind. An vielen Stellen hätte ich mir auch etwas mehr Tiefe gewünscht, dafür dann evtl. andere Bereiche wie Audio weggelassen. Auch der Index hilft nur begrenzt bei Problemen. Ein Buch im Sinne eines "Cookbook", wie es für viele anderen Sprachen gibt ist sicherlich sinnvoller für den Einsteiger. Für Detailfragen muß man ohnehin auf Google zurückgreifen. Ich frage mich inzwischen ernsthaft, ob Bücher in dieser Form überhaupt noch einen praktischen Nutzen haben, außer auf der Biographie des Autors einen äußerst positiven Eindruck zu hinterlassen. (https://www.puls200.de/wp-content/plugins/Sterne/img/icon-rating-star_f_blue.gifhttps://www.puls200.de/wp-content/plugins/Sterne/img/icon-rating-star_f_blue.gifhttps://www.puls200.de/wp-content/plugins/Sterne/img/icon-rating-star_f_blue.gifhttps://www.puls200.de/wp-content/plugins/Sterne/img/icon-rating-star_n_blue.gifhttps://www.puls200.de/wp-content/plugins/Sterne/img/icon-rating-star_n_blue.gif).

StarCraft 2 killt meine Grafikkarte :)

Ob das wirklich wahr ist, weiß ich natürlich nicht. Fakt ist jedenfalls, daß sie ihren letzten Atemzug tat, als ich gerade das Spiel anwerfen wollte. War irgendwie auch klar. Auf einer schönen Geburtstagsfeier am Wochenende gab ich noch zum besten, wie zuverlässig das alles zuhause bei mir läuft. Nie Probleme. Tja, bis gestern. Stimmt nicht, vor ein paar Tagen kündigte es sich bereits an. Absturz, Neustart und ganz kuriose blaue Streifen im Windows Startbildschirm. Ich machte dann den Rechner aus, saugte die ganzen Wollmäuse raus und startete neu - er lief wieder. Nur diesmal half das nichts mehr. Nach den blauen Streifen schwarzer Bildschirm, kein Wechsel mehr in die hohe Auflösung. Im "Safe Mode" funktionierte der Rechner allerdings noch, von daher konnte ich ein Mainboard-Versagen einigermaßen ausschließen. Die gestorbene Karte war eine Gigabyte mit Geforce 7600 GT Chip, passiv gekühlt mit Heatpipes auf beiden Seiten. Sie hielt ziemlich genau 3,5 Jahre. Mein Verdacht ist, daß die passive Kühlung einfach die Lebenserwartung reduziert, weil der Chip immer etwas jenseits der zulässigen Temperaturgrenzen läuft. Das ist ja ohnehin die Täuschung mit den passiv gekühlten Komponenten - damit die Lebenserwartung stimmt muß dann eigentlich ein Gehäuselüfter rein. Also doch wieder eine Geräuschquelle.


Jemals schon so eine schöne Leiche gesehen?

Achja, StarCraft2. Wie früher! Mir gefällt es immer noch nicht (so besonders). Die 3 taktischen notwendigen Finessen sind Masse, Masse und Masse. Im Gegensatz zu beispielsweise C&C Tiberium Wars, wo besonders schwere Einheiten gehegt und gepflegt werden können (und müssen) wird hier geschreddert was das Zeug hält. Der Vorteil, die Partien sind relativ kurz. Auf der anderen Seite auch noch viel Fleißarbeit ("Micro") bei der Klickerei. Also, ich werd da nicht so richtig warm mit. https://www.puls200.de/wp-content/plugins/Sterne/img/icon-rating-star_f_blue.gifhttps://www.puls200.de/wp-content/plugins/Sterne/img/icon-rating-star_f_blue.gifhttps://www.puls200.de/wp-content/plugins/Sterne/img/icon-rating-star_f_blue.gifhttps://www.puls200.de/wp-content/plugins/Sterne/img/icon-rating-star_h_blue.gifhttps://www.puls200.de/wp-content/plugins/Sterne/img/icon-rating-star_n_blue.gif Und überhaupt ist es mir zu teuer mit den kaputten Grafikkarten die ganze Zeit ;-)

Hack!! Arrrgh

Womit man so seinen Nachmittag verbringen kann. Alles fing damit an, daß der GeoURL Button unten rechts nicht mehr funktionierte. Die Tags waren drin, also an was konnte es liegen? Der GeoURL Support schlug vor, doch mal den W3 Validator auszuprobieren. Hä? Ich verwende doch Software von der Stange, aber warum nicht.. und siehe da, der Validator sagt, er könne mit Content-Type null nichts anfangen. Ich schaue in den Header des Themes, der Content-Type wird explizit gesetzt, genauso wie im Quellcode der Seite. Doch irgendwas ist komisch mit dem header.php..
Dann sehe ich es: In der ersten Zeile steht was völlig merkwürdiges:

<?php /**/eval(base64_decode('aWYoZnVuY3Rpb25 ...

Etwas primitive Tarnung, das Skript (ziemlich obfuscated) in einem Base64 String. Das wiederum rief ein in einem entlegen Winkel meiner Webseite plaziertes Skript auf, das wiederum eine 100kb Datei dekodierte und dann evaluierte. Was das genau tut habe ich noch nicht herausgefunden. Eins jedenfalls hat die Infektion geschafft: Alle meine PHP Seiten waren damit infiziert (.php5 Seiten aber nicht!) Das hatte anscheinend nichts mit WordPress zu tun. Dem Änderungsdatum zufolge war das bereits vor einem halben Jahr geschehen. Ich hatte nichts bemerkt!
Wie das ganze hereingekommen ist weiß ich leider noch nicht. Ich vermute, daß es an der sehr alten WordPress-Version vom Blauen Heft liegt, speziell den dort verwendeten Javascript Editor (in dessen Unterverzeichnis das "Mutter-Skript" untergebracht war).
Ich mußte das natürlich zum Anlaß nehmen beide Blogs auf WordPress 3.0 anzuheben, alle anderen PHP Skripte manuell zu bearbeiten und mal wieder kräftig aufzuräumen. Aufräumen ist ja immer eine super Sache. Man muß es nur ab und zu tun. Danach funktionierte auch der GeoURL Knopf wieder.

Zusammenfassung:

  • Ab und zu in den PHP Quellcode schauen
  • Regelmäßige Backups der Files und Datenbank
  • Nie alte Versionen herumliegen lassen

Links dazu aus dem Web, hier und hier. Peinlich wenn man sich anschaut wie alt das schon ist..

Die große Sause

Sinnvolle Kommentare zum Spiel kann man anderweitig nachlesen. Aus meiner Sicht war es einfach herrlich zuzuschauen, wie die Mannschaft überzeugend aufgespielt und 90 Minuten lang unterhaltsamen Fußball geboten hat. Wobei ich sagen muß, daß mir das Spiel zwischen der 30. und 60. Minute fast schon zu aufregend war.. der Ausgleich lag in der Luft. Aber es kam ja alles anders und am Ende wurde hier am Bahnhof richtig gefeiert - sowas habe ich noch nicht erlebt.

Sehr schön übrigens auch die Einblendung von Frau Merkel während des Spiels: Wenn sie so regieren würde wie die Jungs auf dem Platz kicken - wir müßten uns nicht viele Gedanken machen.

Frühling

Den hätten sich manche anders vorgestellt. Ein paar Minuten lang war heute nachmittag sogar alles weiß. Aber es wird, es wird!

Und mit diesem Zitat, welches ich heute erhielt wünsche ich euch allen frohe Ostern! :)

Die Gelehrten und die Pfaffen
streiten sich mit viel Geschrei,
was hat Gott zuerst erschaffen -
wohl die Henne, wohl das Ei!
Wäre das so schwer zu lösen -
erstlich ward ein Ei erdacht,
doch weil noch kein Huhn gewesen -
darum hat's der Has gebracht.

(E. Mörike)

Denglish for Programmers

In vielen Software-Firmen gibt es die Anweisung, daß Variablennamen, Kommentare und ähnliche Dinge in der Software auf Englisch verfaßt sein müssen. Bei uns beispielsweise auch. Warum eigentlich? Um den Chinesen die Einarbeitungszeit nach der Raubkopie zu verkürzen? Ich persönlich bin der Ansicht, daß diese Regel eher kontraproduktiv ist. Vor allem deshalb, weil die wenigsten Entwickler in meinem Kollegenkreis über die notwendige Fähigkeit verfügen, verständliche Kommentare zu setzen. Oft gleichen die Einträge dann Wort-für-Wort Übersetzungen aus Leo. Das hat schließlich einige dazu getrieben, einen Art Sprach-Kompromiß einzugehen. Hier eine Perle, die ich heute entdeckt habe:

private const string pleaseChoiseALiefernachweisText = "textSelectLiefernachweis";

Yeah! Ich soll bitte einen Liefernachweis wählen, äh, ich meine natürlich choisen. Muahaha. Also, das ganze ist wirklich völliger Quark. Setzt die Kommentare doch so, daß diejenigen sie verstehen, für die sie gedacht sind. Genau, die Kollegen. Die meisten von denen verstehen zwar auch denglisch, nur besteht immer das Risiko eines Mißverständnisses. Ich für meinen Teil habe von jeher diese Arbeitsanweisung ignoriert.

Daily WTF

Die Überschrift habe ich hier geklaut. Inzwischen ist es so daß das Monster, welches ich schon seit Jahren betreue, der meisten Schauerlichkeiten beraubt wurde. Aber hin und wieder tauchen einzelne Perlen auf, so wie das hier:

public bool Enthalten
{
     get { return !this.entity.Enthalten.Value; }
     set
          {
            if (!this.entity.Context.IsChangeTrackingEnabled)
                   this.entity.Context.EnableChangeTracking(true);
            this.entity.Enthalten.Value = !value;
          }
}

Die entsprechende Datenspalte trug übrigens den bedeutungsschwangeren Namen "Nicht". Nicht was? Nicht geglückt? Nicht rechtzeitig ins Bett gekommen? Wir werden es nie erfahren.

Frische Luft

Daß weniger vielleicht manchmal viel besser ist fiel mit heute wieder bei einem Spaziergang auf. In einem Wohngebiet, das in den zwanziger und dreißiger Jahren des vergangenen Jahrhunderts erschlossen wurde stehen viele Häuser auf nach heutigen Maßstäben großzügigen Grundstücken. Manchen Anwohnern fehlt Geld, deshalb verkaufen sie einfach den Garten als Baugrundstück. Andere Gebäude wechseln den Besitzer und werden statt einer Renovierung abgerissen und neu errichtet. Anstelle von Einfamilienhäusern entstehen aber nun in der Regel Gebäude für mindestens zwei, eher noch 4-6 Parteien. Das verkauft sich anscheinend gut, es ist ja auch eine "schöne" Wohngegend. Oder gewissermaßen, es war eine schöne Wohngegend bis diese Klötze (hart an die Grundstücksgrenzen gebaut) auftauchten. Eklatant wird es auf den Straßen davor. Irgendwo müssen die ganzen Menschen die hier leben auch parken. Zwar müssen Neubauten oft Parkflächen in Tiefgaragen vorweisen, aber das hindert die Bewohner nun nicht ihr Auto trotzdem vor die Tür zu stellen anstatt sich in die winzigen Lücken zu quetschen. So sinkt die Qualität des Wohngebiets zum Nutzen des Bauherrn und zu Lasten aller anderen ab. Ich frage mich warum für solche Sachen laufend Baugenehmigungen erteilt werden.

Chili 2009

Auch in diesem Jahr haben wir wieder Chilis angesetzt. Diesmal war ich allerdings nicht direkt an der Samenauswahl und Aufzucht, sondern nur noch am Gießen auf der Terasse beteiligt. Die Sorten im einzelnen:

Glockenchili

Die Glockenchilis, bekannt auch als Capsicum baccatum. Ob der Name wirklich stimmt weiß nur Google, und die sind sich auch nicht so einig. Wie dem auch sei, aus den Samen erwachsen wirklich schöne hohe Pflanzen, die allerdings einen großen Topf brauchen und einen phänomenalen Wasserverbrauch haben. Die glockenförmigen Früchte reifen erst spät und wechseln dann von grün über gelb in eine tiefrote Farbe. Der reinen Optik wegen sind sie ganz nett, die Schärfe ist allerdings lächerlich im Vergleich zur Criolla oder gar der Habanero.

Criolla Sella

Die Criolla Sella ist unser Dauerbrenner (im wahrsten Sinne des Wortes). Keimt sehr zuverlässig und ist ziemlich unkompliziert in der Aufzucht und Pflege. Die Pflanzen tragen früh und sehr reichlich. Dieses Jahr haben sie bereits angefangen an der Pflanze zu trocknen, wahrscheinlich waren die Töpfe zu klein oder ich habe doch zu wenig gegossen. Diese Sorte deckt unseren "Scharf-"bedarf locker ab. So reichlich, daß wir die Ernte des letzten Jahres bis heute noch nicht vollständig verbraucht haben. Kann ich nur weiterempfehlen.

Salatpaprika

Und jetzt kommen wir zum Lacher des Sommers, die "neue Sorte", die so sehr empfohlen wurde. Mitgebrachte Samen wurden ausgesät und anfangs sah es so aus, als klappte alles ganz wunderbar.. bis...tja bis sich herausstellte, daß wir hier ganz herkömmliche Salatpaprika in unseren Töpfen hatten. Aber erstaunlich: Trotz relativ kleiner Töpfe trugen die Pflanzen sehr große und überaus gut schmeckende Früchte! Es ist natürlich Blödsinn aus Sicht des Anbaus, auf dem Balkon aber trotzdem ganz dekorativ.

Siehe auch meine Seite zum Chili-Anbau.