17.04.2011

What Is This Devops Thing, Anyway?

Eine hervorragende Zusammenfassung der "DevOps-Bewegung" von Stephen Nelson-Smith:
What Is This Devops Thing, Anyway?

Hervorragend der Absatz unter "Wie kann man mitmachen:"

"Aus meiner Sicht benötigt Devop eine besondere Einstellung: Ich will es anders machen, ich werde kooperieren und kommunizieren, und ich werde verstehen, dass nur alle gemeinsam in der Lage sind, großartige Software zu liefern. Wenn Sie ein Systemadministrator sind, verbringen Sie Zeit mit den Entwicklern. Lernen Sie die Code-Basis kennen. Beteiligen Sie sich. Wenn Sie noch nicht programmieren, beginnen Sie - es gibt gute Tutorials für Python und Ruby, beides ausgezeichnete, leistungsstarke Mehrzweck-Sprachen. Betrachten Sie System-Management als Programmier-Aufgabe - setzen Sie Puppet oder Chef ein, um Ihre Maschinen zu verwalten und fangen Sie an, darüber nachzudenken, wie Sie Ihre Infrastruktur testen können.

Wenn Sie Entwickler sind, freunden Sie sich mit Ihren Systemadministratoren an! Betrachten sie nicht als niedrigeren Lebensformen, oder als Menschen, die Ihre Probleme lösen. Arbeiten Sie mit Ihnen zusammen. Wenn sie mit Puppet oder Chef nutzen, machen Sie mit - tragen Sie zu ihrer Codebasis bei. Wenn Sie ein erfahrener Programmierer sind, vor allem, wenn Sie sich mit Test Driven Development auskennen, helfen Sie Ihrem Betrieb - begeistern Sie sie für Programmierung und ermutigen Sie sie, Verantwortung für die Code-Basis zu übernehmen. Versuchen Sie zu verstehen, welche Fähigkeiten das QA-Team mitbringt, und wie sie funktionieren - versuchen Sie eine Möglichkeit zu finden, Ihnen zu helfen. Bringen Sie sie zusammen - Systemadministratoren, Datenbankadministratoren, Netzwerk-Techniker, Business-Analysten - Sie sitzen alle im selben Boot.

Wenn Sie ein Manager sind, bewerben Sie Positionen als "Devop", nicht nur "Entwickler" oder "SysAdmin". Machen Sie deutlich, daß Sie an Menschen mit übergreifenden Fähigkeiten interessiert sind und dass Sie bei ihrem Ausbbau helfen. Beginn Sie, Konfigurations-Management-Systeme zu nutzen, lassen Sie Ihre Sysadmins mit der Versionskontrolle arbeiten, engagieren Sie den Betrieb bei Continuous Integration und Entwicklung. Wenn nötig, greifen Sie auf die Hilfe von Berater zurück."

09.04.2011

XCode und git

XCode 4 liefert native Unterstützung für git. Cool!

IOS und Mac Projekte können also mit der neuesten Generation von Source Code Management verwaltet werden. Nun gibts zu git schon jede Menge nette Einführungen, z.B.:


Zusammenfassend kann man aber einfach behalten: git ist anders als z.B. svn ein dezentrales SCM. Jeder Entwickler hat sein eigenes Repository auf der Platte mit i.w. zwei Konsequenzen:

  • Die üblichen Operationen gehen rasant schnell, weil nicht übers Netzwerk. Deshalb gewöhnt man sich daran, noch viel häufiger z.B. zu committen und erhält eine bessere Code-Stabilität.
  • Zusammenarbeit mit anderen muss neu organisiert werden. I.a. geht man doch auf ein weiteres zentrales Repository zurück. Dort hinein muss mit neuen Werkzeugen geschrieben werden: push=commit und pull=update (die details sind natürlich etwas kompilizierter).

Das nun git auch noch in XCode eingebaut wurde, macht die Verwaltung noch simpler. Ich arbeite nach dem Grundsatz: Keine selektiven Commits. Also eine Aufgabe abschliessen, Alt-Meta-C drücken und folgenden Dialog geniessen:



Commit-Kommentar eingeben, Commit drücken und gut ist.

Ach ja, und für den Überblick schadet es nicht, per Shell ins Workspace-Verzeichnis zu gehen und gitk aufzurufen:

07.04.2011

Erste Schritte in XCode 4

Die neue Version von XCode ist schon länger erhältlich. Trotzdem findet sich noch keine wirklich einfache Beschreibung darüber, wie damit eine App zusammenzubauen ist.

Also hier eine kurze Zusammenfassung, denn schwierig ists ja wirklich nicht.

Nachdem XCode heruntergeladen, installiert und gestartet ist (ich gehe hier aus von Version 4.0.1), erscheint der Projekt-Dialog:



Natürlich wählen wir "Create a new XCode Project". Im darauffolgenden Dialog hat man zunächst (links) die Wahl, für iOS oder Mac OS X eine Anwendung oder ein Framework, eine Library, Plug-in oder anderes zu bauen. Wir wählen iOS Application.



Hier werden eine Reihe von Vorlagen für Apps angezeigt, es steht also die erste Entscheidung an: Wie soll die App im Prinzip aussehen? - Wir entscheiden uns für den Standard, die "Navigation-based Application". Das sind die Apps, die am oberen Rand einen Navigations-Pfad haben, wie z.B. die Mail App. Wählen wir also diese Vorlage und drücken auf "Next". Nun sind der Name der App gefragt, sowie ein "Company Identifier" (de.<Nach- oder Firmenname> ist ein guter guess). Ausserdem soll man angeben ob man Daten persistieren (Core Data) und Unit Tests bauen möchte. Im letzten Schritt wird noch nach der Lage des neuen Projektes im Dateisystem gefragt - und dann betritt man das schöne neue Reich von XCode 4:



Ich finde es praktisch, durch Drücken der beiden markierten Knöpfe eine vierteilige Anzeige einzuschalten. Links findet sich der Projekt-Explorer, dann der Haupteditor, dann der Assistant-Editor. Wenn man von Java kommt, ist mans ja nicht mehr gewohnt: Es gibt .h- und .m-Dateien. Und mit den zwei Editoren hat man immer beide im Blick. Oder später den Quellcode und den UI-Builder. Praktisch.
Links finden sich schliesslich die Utilities, im wesentlichen mit den verschiedenen Inspektoren des UI-Builders und ganz unten dem Blick in die Object Library mit Labeln, Knöpfen, Views und allem, was die iPhone Oberfläche so hergibt.
Im Explorer findet man also die Dateien aus der Vorlage, ausgewählt im Bild oben der Haupt-Controller, sichtbar ist also der Objective-C-Quellcode. Die andere Seite der iPhone-Coding-Medaille ist der UI-Builder. Früher ein separates Tool, ist er nun in XCode integriert, wie man nach einem Klick auf die Oberflächen-Definition in RootViewController.xib sofort feststellt:



Die entsprechende Benutzeroberfläche wird nun visuell dargestellt, die zugehörende Controller-Schnittstelle im Assistant-Editor.
Warum das toll ist? - Weil das zentrale Konzept der Oberflächenentwicklung iOS damit prima unterstützt wird: Outlets und Actions.
Das wird dann deutlich, wenn wir einfach einmal einen neuen Dialog programmieren:
Kontext-Menü von "Tutorial" (dem Ordner, in dem neue Dateien angelegt werden sollen), "New file...", "iOS Cocoa Touch" auswählen, damit zeigen wir, dass wir eine neue Klasse erzeugen wollen. Netterweise gibt's da den Eintrag "UIViewController subclass", mit dem ein neuer Dialog (View) angelegt wird. Auf der nächsten Seite angeben, dass eine XIB (UI-Definition) mit angelegt werden soll, den Namen wählen, et voìla: Controller .h, .m und .xib-Dateien wurden erzeugt. (Und übrigens korrekt verknüpft: Die Class des File's Owner im XIB zeigt bereits auf den neu erzeugten Controller. Wie oft habe ich vergessen, dass umzustellen und mich dann über Folgeprobleme gewundert).
Jetzt können wir das XIB öffnen und den leeren View ein wenig bevölkern, sagen wir, mit einem Label, einem TextField und einem Button. Das geht ganz einfach, indem man sie rechts unten aus der Object Library auf den View zieht. Und jetzt kommt der Clou: Wir wollen z.B. auf einen Klick-Event beim Button reagieren? Dann rufen wir auf dem Button das KontextMenü auf. Darin sehen wir die Events. Wir suchen uns den Touch-Up-Inside-Event aus. Jetzt nehmen wir einfach den leeren Kreis dahinter und ziehen ihn auf die Schnittstelle im Assistant-Editor! Sehr schön wird angezeigt, wo ich die Action (denn eine solche muss nun erzeugt werden), fallen lassen kann.



Dann springt ein Dialog auf, der i.w. nach dem Namen der Action fragt und schon wird der entsprechende Code erzeugt:
- (IBAction)onButtonClick:(id)sender;
In der Implementation steht bereits die leere Implementation, und wir können sofort anfangen, die Methode für den Button-Klick zu schreiben. Das Gleiche funktioniert bei anderen Komponenten wie Label und TextField, wenn man "New Referencing Outlet" auf den Quellcode zieht. Man erzeugt dann zügig die zugehörenden Outlets:

IBOutlet UILabel *label;
   IBOutlet UITextField *textField;
Will man daraus allerdings Properties machen, so sind die obligatorischen @property- und @synthesize-Konstruktionen per Hand einzufügen. Deallokationen werden aber immerhin automatisch hinzugefügt.