Die beste Nachricht des Tages…

wird neben mir wohl mal wieder kein Schwein interessieren, aber für mich übertrifft es sogar Zubis Patzer:
XCode kriegt Refactoring-Möglichkeiten !!!

Endlich. Ich habe mich immer gefragt, weshalb Apple da derart hinten drein ist.

1. Zwischenbemerkung für die Nichtprogrammierer: XCode ist das Programm, in welchem OS X-Programme programmiert werden – eine sogenannte Entwicklungsumgebung oder IDE. Man kann auch ohne IDE programmieren, einfach mit einem simplen Texteditor, aber IDEs helfen einem dabei, den Überblick zu bewahren, alles ein bisschen näher zu haben und bestimmte Dinge per Knopfdruck zu automatisieren. Um die richtige IDE mit den richtigen Einstellungen gibt es zuweilen blutige Glaubenskriege – beim programmieren von OS X-Programmen ist aber XCode haushoch Marktleader, nicht nur weil es gratis ist (IDEs können brutal teuer sein), sondern weil es halt einfach die einzige IDE ist, die speziell auf die Charakteristika und Mechanismen von OS X ausgelegt ist.

2. Zwischenbemerkung für Nichtprogrammierer: Refactoring bedeutet das ändern des Codes, ohne die eigentliche Funktion zu ändern. Beispielsweise hatte ich bei meinem MacAlarm ein Objekt namens iTunesAlarm erstellt, als eine Abstraktion über das losgehen eines Radioweckers, in welchem festgelegt wird, um welche Uhrzeit welche Playlist in welcher Lautstärke abgespielt werden soll. Dann merkte ich aber, dass ich noch einen zweiten Wecker in MacAlarm integrieren will, der blöde nervige Weckertöne vor sich gibt, der aber gewisse Charakteristiken mit dem iTunesAlarm teilt, zB dass er eine Einstellung für die Zeit und eine für die Lautstärke hat. Ich will also das Objekt iTunesAlarm aufteilen: ein Teil der die generellen Charakteristika eines Weckers besitzt, und ein zweiter Teil, der nur für einen iTunesWecker gilt und auf Mechanismen des generellen Weckers zurückgreift (in der Programmierersprache: iTunesAlarm ist eine Subklasse des abstrakten Objekts Alarm und erbt dessen Merkmale (Attribute) und Fähigkeiten (Methoden). Refactoring ist nun die reine Handarbeit dieses aufteilens – beispielsweise, dass überall, wo bisher auf iTunesAlarm verwiesen wurde (und das sind viele Orte in MacAlarm) nun nicht mehr iTunesAlarm im Code steht sondern Alarm. Kleine Sachen, die aber in grosser Menge und absolut zuverlässig gemacht werden müssen, denn programmieren erlaubt keine Schreib- und Flüchtigkeitsfehler, und mit Copy und Paste verliert man auch fast immer. Die Funkionalität wird nicht geändert, aber Struktur und Darstellung des Codes.

Wo war ich? ah ja: Ich habe mich immer gefragt, weshalb Apple da derart hinten drein ist.
XCode ist meines Erachtens die stärkste aller IDEs wenn es um das erstellen eines neuen Programmes geht. Nirgendwo kriegt man in derart kurzer Zeit derart viele Funktionalitäten und erst noch eine brauchbare Oberfläche hin. Aber: Programmieren ist nicht einfach neues erschaffen. Man verbringt deutlich mehr Zeit am abändern von Code (sei es um Bugs auszumerzen oder die Möglichkeit zu haben, neue Features einzuklinken. Und am meisten Zeit braucht man, um den alten Code zu verstehen, den man letzte Woche oder gar letztes Jahr geschrieben hat, noch schlimmer, wenn es nicht mal der eigene Code ist, den man bearbeiten möchte. Peter Hallam’s Artikel ist zu diesem Thema glaube ich immer noch das beste was ja geschrieben wurde – er spricht darin von folgenden Verhältnissen:
New Code: 5%
Modifying Existing Code: 25%
Understanding Code: 70%
Wohlbemerkt: Hier geht es um Zeit-Verhältisse, aber die Hirnschmalz-Verteilung dürfte ähnlich sein.

Refactoring ist der absolut zentrale Schlüssel zu den Punkten zwei und drei: Um Code zu ändern, muss man ihn fast immer neu strukturieren. Und chaotisch durcheinander gewürfelter Code ist fast unmöglich zu verstehen. XCode aber kannte bis dato kaum oder nur winzige Refactoring-Mechanismen. Sogar wenn ich nur den Namen einer Klasse verändern wollte, musste ich a) im Editor ein Search/Replace über alle Files machen (und dann nicht etwa automatisch „Alle ersetzen“, sondern einzeln durch alle Dateien durchgehen, denn vielleicht gab es neben dem zu ändernden iTunesAlarm auch mal ein iTunesAlarmDelegate oder was auch immer, das von der Änderung nicht betroffen sein sollte. Und wenn dann alles ersetzt war, wurde es erst schmerzhaft: Die Bindings in Interface Builder (dem Tool, mit dem man die graphische Oberfläche eines Programms erstellt) reagiert nicht auf solches Search/Replace. Da musste man alle Elemente einzeln durchgehen und manuell abändern, und wehe man vergass es irgendwo – denn dann gibts beim compilieren auch keine Fehlermeldung – sondern einfach einen simplen Absturz im fertiggestellten Programm. Very very nice.

Vor XCode arbeitete ich meist mit Eclipse, einer IDE die umfangreiche Refactoring- Funktionen anbietet. Der Schock, als ich mit XCode anfing war gross: Ich konnte mir kaum vorstellen, dass man heutzutage noch so arbeiten kann und suchte tagelang nach entsprechenden Funktionen. Nix da. XCode 2.0 ist sackstark, wenn es um das erstellen geht, um den ersten Entwurf eines Programm. Die ersten 5%. Der Rest der Arbeit, das verfeinern, abändern, umdenken, die restlichen 95%, die waren bei XCode immer die Hölle.

Und nun gibts mit XCode 3 in OS X Leopard nicht nur Garbage Collection und Block Folding, jetzt hat Apple auch noch Refactoring-Tools:

To allow you to work more rapidly and effectively, Xcode 3.0 offers support for re-factoring your Cocoa applications. This means you can now make structural changes to your source code without accidentally changing its behavior. Instead of performing multiple search and replace operations, you can rename an instance variable and update all of the methods that work with that variable, including indirect access through KVC style methods. This re-factoring support extends beyond your source code and will even update bindings set in your nib files

Läck, freue ich mich auf XCode 3. Und weil mein iBook mit Leopard kaum noch klarkommen wird, freu ich mich auch schon jetzt auf die neue Hardware im 2007. Das wird ein langes warten…

Veröffentlicht unter Cocoa

US-Wahlen I – VI

US-Wahlen I:
yesyesyesyesyesyessssss

US-Wahlen II:
Was ich mich wieder mal über das Schweizer Fernsehen aufrege. Wenn Sie ihre Berichte sowieso zum voraus abfassen, weshalb haben sie sie denn nicht schon gestern gesendet? Die Exit-Polls zeigen relativ klar: Wie schon bei den letzten Präsidentenwahlen war nicht der Irak-Krieg das zentrale Thema:

(CNN) — By a wide margin, Americans who voted Tuesday in the midterm election say they disapprove of the war in Iraq.

But when asked which issue was extremely important to their vote, more voters said corruption and ethics in government than any other issue, including the war, according to national exit polls.

A large majority of voters also disapproved of how Congress and President Bush are doing their jobs. However, Bush fared slightly better on that score than members of the GOP-led Congress.

Ganzer Artikel: Corruption named as key issue by voters in exit polls
OK – da ist wohl der Rubrik-Titel nicht so glücklich, mein Gefühl sagt mir, ethics seien ausschlaggebender gewesen als corruption. CNN hat im Moment noch kein aggregierte Exit Polls aufgeschalten, aber gerade in jenen Staaten wo es nun einen Wechsel von Rot zu Blau gegeben hat, sieht man relativ schön, wie Irak nicht das einzige Thema ist, wies es von SF DRS und allen anderen Schweizer wir-haben-agentur-meldungen-abonniert-Medien seit Wochen angekündigt wurde. Und da kann man nun natürlich nicht einfach etwas anderes verzapfen, nur weil die Amis nicht wussten, was sie bei den Exit Polls wirklich hätten antworten müssen.
Ganz zu schweigen davon, was die Exit Polls nicht direkt verraten: Die Mobilisierung – in diesem Fall insbesondere die Mobilisierung der Born-Agains. Diese ist im Vergleich zu der Bush-Wiederwahl deutlich tiefer (allerdings immer noch viel zu hoch), und die Stimmen gingen auch nicht mehr zu 80% an die Republikanische Seite, sondern nur noch zu ca. zwei Dritteln.
Aber eben – SF DRS wusste es ja schon zum voraus und weiss es nun auch im nachhinein: Irak hat die Wahlen entschieden.

US-Wahlen III:
Sehr schön auch der CNN-Artikel zu den internationalen Reaktionen

US-Wahlen IV:
Wer es wissen wollte, der wusste es zum voraus: Die Resultate dieser Wahlen werden die Resultate der beiden Bush-Wahlen absolut makellos aussehen lassen. Je nach Definitionsrahmen wurden bis zu 70% der Stimmen elektronisch abgegeben. Sämtliche elektronische Wahlmaschinen auf dem US-Markt sind mit unzähligen Problemen behaftet, ganz besonders aber der Marktführer Diebold; das schönste am ganzen ist allerdings, dass insbesondere die Diebold-Maschinen Black-Boxes sind – Manipulationen und Fehlfunktionen können weder im Moment noch im Nachhinein bemerkt, nachvollzogen oder sogar korrigiert werden. Wunderbare und haarsträubende Artikel dazu: ACM beschreibt die prinzipiellen Probleme auf allen Ebenen, Jon Hannibal Strokes zeigt verschiedene Möglichkeiten, wie die verschiedenen Boxen attackiert werden können, sowohl von Insiders wie auch von aussen, Ars.Technica fasst Anfangs November zusammen, wo die grössten Probleme zu erwarten sind.
Und natürlich: Die Kisten haben nicht reibungslos funktioniert. Ganz und gar nicht. In über einem Viertel der Staaten gab es Probleme. In 8 Staaten waren die Probleme derart, dass die vorgesehenen und angekündigten Öffnungszeiten der Wahlbüros nicht eingehalten werden konnten. In zwei Staaten wurde nicht einmal bekannt, welche Probleme genau auftraten. Und in keinem einzigen der betroffenen Staaten können die Betrieber klar und nachvollziehbar nachweisen, dass die Probleme sauber behoben wurden.
Und wie gesagt: Wenn die Software einer Maschine (jedes Computers, nicht nur Wahlmaschinen) manipuliert werden kann, kann nicht nachgewiesen werden, dass keine Malware mehr drauf ist, und wo Malware entdeckt wurde, kann nicht nachgewiesen werden, dass diese auch wirklich entfernt werden konnte.

US-Wahlen V:
Gerade läuft die Pressekonferenz von Pelosi. Auch wenn ich das Wahlergebnis ausserordentlich begrüsse, auch die Demokraten sind schrecklich. ‚Did you see this wonderful children? Weren’t they soo nice?‘ uaaaahhh.

US-Wahlen VI:
Dem Governator gehört das Zitat des Tages: „I love Sequels“. Auch hier finde ich SF DRS sehr schön: Noch vor drei Jahren war die Wahl Schwarzeneggers für Leutschenbach der ultimative Beweis für den Ruin amerikanischer Demokratie, Schwarzenegger wurde zum vornherein als katastrophaler Gouverneur im Stile Reagan abgestempelt, seine Referendums-Niederlage gross gefeiert. Und nun ist er plötzlich der Strahlemann, der einzige brauchbare Republikaner umgeben nur von Loosern.
Finde ich schön, wenn Leutschenbach auf meine Linie einschwenkt…