Results for category "Arbeit"

75 Articles

DevOps: Stop coding and get your stuff documented

You know it: an old project gets reactivated because your customer needs a new feature or has found bug. Meanwhile, the responsible developers have been reassigned to new projects and have no time to finish the task. You are currently not at a 100 percent workload so you get the task assigned. Because of the missing documentation you are busy with the setup of your development environment in the first few hours. After that you spend the next hours (days) with trying to understand the architecture of the application.

This is an experience every developer or system administrator has made for sure: There is no documentation available or the existing documentation is insufficient or outdated. Thereby an appropriate documentation would result in having more time which could be spent for development and testing.

Types of documentation

Besides the inline documentation of the source code and the end user manual other types of documentation exist. Unit and integration tests for example are a good basis for new developers to understand the internal API. Acceptance tests show how the application will be used by the customer and which typical workflows exist.

It does not matter if frameworks like FitNesse or Cucumber are used or everything is tested with “plain” JUnit/TestNG. The essential fact is that the tests document how the application or architecture can be used.

Furthermore, a developer documentation should exist so that new developers can easily incorporate into new projects. A developer documentation describes the basic topics which must be considered during the development process, for example:

  • Where is the source code located? Which branching model is used?
  • With which credentials can I access the development servers?
  • How is th build process organized? How is Continuous Integration/Delivery realized?
  • How to deal with schema migrations?
  • Where are coding styles located?
  • How did I properly set up my development environment?

As the developer documentation has only the developers as target audience and is only used for internal purposes, the architecture documentation could be although read from external persons. For example one of our customer claims a documentation about security-relevant processes and a documentation about the system and application architecture. The documentation about security relevant processes is required during a security certification, the system documentation is a requirement for the deployment in the datacenter.
In the best case the architecture documentation contains all desired information and can be simply forwarded to the customer.

The Ops needs a operational documentation which can be derived from the architecture documentation. The operational documentation contains topics like “Where can the logging be customized?” or “Where can I customize the database connection string?”.

Organisational and project relevant topics with non-technical background are discussed in the project handbook. The project handbook contains topics like repsonsibilities, contact cards, the processes for bugtracking and meeting notes and so on. Target audience for this documentation is the project management.

Include documenting in your company culture

The writing of documentation should be firmly established as central position in your company culture. New employees should seee on their first day at work that the corporate wiki contains all required information. The involvement in discussions and the improvement of existing documents is explicitly requested. This concept can only succeed if every coworker has already realized how important a good documentation is and leads by example.

In my opinion it is the duty of every good developer or administrator to document his work and his decisions. A good documentation makes the difference between a project and a professional project.

Therefore in our company the following dictum exists: “If it is not documented in the wiki or bugtracker it has not been done.”

Use the right tools

One of the biggest faults is the usage of the wrong tools. Making a good documentation means not using Word and Excel in first line. Instead push every information into your corporate wiki so that every project-related person has instantly access to it. I really like Confluence and can only suggest you give it a try.

Templates like arc42 are a really good start for the documentation. Try to make your own templates which are adjusted to your needs.

The right person for the right job

The development and architecture documentation should be written from the responsible architect during the the development of the concept. He knows the big picture and makes the technical decisions. Always document, what leads to your decisions!

The operating documentation can be written by the developers who implemented the application. The architecture documentation can be used as a basis. The internal system administrators should although read the documentation. They know at best which information is expected in such a document.

Writing the end user manual can be a chance for transfering the domain knowledge of the project to new employees who are not directly connected to it. This can only work if every team member is a aware of the fact that the documentation is an important component of a successful project. It is not a job which can be done by anyone. The requirements for writing a good end user documentation are high:

  • Often, the manual ist the first contact between the customer and your application. The manual must be attractive edited und concentrated on the essential tasks of the application.
  • Your customer does not care about any technical explainations in the end user manual. He reads the document because he has to fulfil his tasks. You are probably also not interested in how the wood was cut while you are building up your IKEA shelf.
  • Your documentation is the reference book and will be the first shelter if any questions occur. Describe the functional processes.

A professional end user manual will demonstrate the customer that the application is elaborated and developed by professionals. A good end user manual is making a major contribution in the successful acceptance of your application.

Every document should be read early and regularly by other persons to reveal problems in the comprehension of the documentation.

Lessons Learned

  • Introduce the documentation process as a central building block of your company culture.
  • Use tools like Confluence or arc42 and build your own set of templates.
  • Writing a good documentation is an art like programming is an art.
  • Treat your authors with respect.
  • Writing a documentation is like programming – only on a higher level.
  • Don’t write a developer or architectural documentation after the project is done. Write it at the beginning of the project.
  • Keep your documentation up to date.
  • Documentation is an important component of your application.
  • Documenting is a continuous process which has to be reviewed at the latest after the project has finished.

Footnote: If you liked the blog post, you would probably like Jens’ blog post about software documentation.

Alles neu: Arbeitgeber, Domain, Design, Hobby

In den letzten paar Monaten ist viel passiert – wie man auch an der sinkenden Anzahl meiner Blogposts und Tweets sehen kann.

Zu Beginn des Jahres habe ich endlich mal den Hintern hoch bekommen und bin das erste Mal Bouldern gewesen. Nachdem ich eine knappe  Woche  Mukselkater und Blasen an den Händen hatte, machte ich mich wieder auf in die Halle. Seitdem versuche ich einmal pro Woche zum Bouldern zu gehen. Zum Schwimmen ist das ein super Ausgleich und fördert enorm die Konzentration und Körperbeherrschung. Kann ich nur empfehlen.

Am Valentinstag – das ist der 14. Februar 2012 gewesen – eröffnete die Gesellschafterin meines Arbeitgebers meinen Kollegen und mir, dass das Unternehmen verkauft werden sollte.
Aus diversen Gründen standen die meisten aus der Belegschaft, mich eingeschlossen, dieser Idee nicht ganz so euphorisch gegenüber, wie sie uns anfänglich präsentiert worden war. In den folgenden Wochen häuften sich die Sorgen und der Plan der Gründung eines neuen Unternehmens konkretisierte sich langsam.
Ich reichte meine Kündigung ein, unterschrieb den Vertrag beim neu gegründeten Unternehmen. Viele meiner Kollegen taten es mir gleich und somit fangen wir mit mehr oder weniger dem selben Team gemeinsam komplett neu an. Was die Solidarität unter den Kollegen angeht, könnte sich jede Partei oder Gewerkschaft eine Scheibe von uns abschneiden.
Da ich noch einige Wochen Resturlaub und Überstunden hatte, nahm ich diese und bin deshalb noch bis zum 31.5. offiziell im Urlaub. Danach fange ich dann direkt im neuen Unternehmen an.

Dieses ganze Vorgehen klingt unspektakulär, aber was hinter den Kulissen passierte und teilweise immer noch passiert, ist … dezent ausgedrückt: interessant. Die komplette Geschichte würde einen ganzen Abend ausfüllen. Kopfschütteln und wiederkehrende Facepalmierung inklusive.

Neben den Sorgen auf der Arbeit musste ich mich auch noch um das Studium kümmern. Ende März schrieb ich die letzte Klausur und begann direkt zum 1. April mit meiner Projektarbeit. Über dieses awesome Projekt werde ich zu gegebener Zeit ausführlich berichten. Spätestens aber zum 1. Juli, denn dann ist Abgabetermin. Die Bachelorarbeit werde ich im Laufe des Jahres beginnen. Wenn alles klappt, wird es irgendwas mit Xtext, MDA und Prototyping werden.

Da der alte Blog innerhalb der DMZ des alten Unternehmens gehostet worden ist (und dies auch noch bis zum 31.5. der Fall ist), musste ich mich um einen neuen Webspace kümmern.
Unser Haus-und-Hof-Anbieter Artfiles bietet zwar sehr guten Service und Produkte, allerdings sind die recht teuer und bieten nicht alles, was ich brauchte. Letztendlich habe ich mich dann für ein Zuhause bei den Übernauten entschieden.
Einhergehend damit buchte ich endlich mal die Domain schakko.de – was ich schon vor Jahren vor hatte. Das langweilige alte Design des Blogs wurde durch ein schlichtes, pragmatisches, weißes Design abgelöst. Mich spricht das total an. Da hat der Ersteller des Themes, Jim Barraud, saubere Arbeit geleistet.

Funkauswerter monitord um ActiveMQ-Support erweitern

Unsere bisherigen Pläne für ZABOS sehen vor, dass wir die Funktionalität der Alarmierung per SMS über Fünfton-Folgeruf (ZVEI) erweitern – nämlich um die digitalen Protokolle POCSAG und FMS. Unserer bisheriger Fünfton-Folgerufempfänger ist ein selbstenwickeltes Board mit Mikrocontroller, der die Fünfton-Folgen aufnimmt und dann über die serielle Schnittstelle an ZABOS weiterreicht.

Bereits vor einiger Zeit hatten wir begonnen, uns nach Alternativen umzuschauen, denn die Eigenentwicklung der Auswertungssoftware für die digitalen Protokolle würde zu viel Zeit in Anspruch nehmen. Außerdem war für jedes neue ZABOS-System ein neues Mikrocontroller-Board nötig. Da wir keine Hardwareschmiede sind, wollten wir darauf verzichten.
Als Alternativen liefen uns schließlich FMS Crusader über den Weg und außerdem auch das Open Source-Tool monitord, das recht gut in unsere zukünftige Produktstrategie passte.

monitord ist in C++ geschrieben und läuft sowohl unter Linux als auch unter Windows. Mit einer Lua-Scripting-API kann die Funktionalität des Systems erweitert werden. Allerdings wollte ich aus architekturbedingten Gründen keinen REST-Service auf ZABOS-Seite zum Übermitteln der Alarmierungen schreiben.
Stattdessen sollten die eingehenden Alarmierungen für zukünftige ZABOS-Versionen in einer Message-Queue in Form von ActiveMQ auflaufen.
ZABOS kann dann innerhalb von ActiveMQ z.B. drei verschiedene Topics (zabos.pocsag, zabos.zvei und zabos.fms) abonnieren und die jeweiligen Schleifen im System alarmieren, sobald eine Nachricht in dem jeweiligen Topic veröffentlicht wird. monitord hingegen nimmt die Funksignale über zwei Soundkarten auf (damit werden wir das Board mit dem Mikrocontroller und die nötige serielle Schnittstelle los), verarbeitet sie und und publiziert sie im passenden Topic der Queue.

Neben der Lua-API existiert in monitord auch eine eigene Plugin-Schnittstelle die z.B. für das MySQL-Plugin genutzt wird. Diese Plugins können dann direkt in C++ geschrieben werden.

Nachdem ich mich mit dem gesamten Konzept sehr schnell angefreundet hatte, schaute ich erst einmal nach, ob ActiveMQ denn irgenwelche Bindings für C++ besaß. Glücklicherweise haben die Jungs von Apache (wie so oft) gute Arbeit geleistet und somit konnte ich mir ActiveMQ-CPP herunterladen und kompilieren. Vorher musste ich noch libaprutil1-dev nachinstallieren.
Das der ActiveMQ-CPP-Distribution beiliegende Beispiel unter src/examples/producers/SimpleProducer.cpp war für mein Vorhaben genau der richtige Einstieg – mehr sollte mein Plugin ja auch eigentlich nicht können.

ActiveMQ-CPP hatte ich also soweit installiert – nun ging es daran, monitord mit ActiveMQ bekannt zu machen. Zuerst ließ ich den monitord-Quellcode kompilieren und testete, ob dieser soweit überhaupt in Ordnung war.
Das Kompilieren funktionierte zwar, allerdings konnte der Daemon meine Soundkarte nicht erkennen. Erstaunlicherweise stand im Log, dass er über OSS auf die Soundkarte zugreifen wollte, obwohl ich explizit in der monitord.xml als Soundkarte “plughw” verwendet und auch beim Kompilieren –with-alsa mitgegeben hatte. Ich schaute mir die configure-Ausgabe noch einmal an und stellte fest, dass das Paket libasound2-dev für ALSA benötigt wurde – ist irgendwie auch klar -, ich es aber nicht installiert hatte. Das configure-Script brach aber bei fehlenden Headern nicht ab, sondern kompilierte stattdessen mit OSS-Support.
Ich also libasound2-dev nachinstalliert und meine Soundkarte wurde schließlich erkannt.

Die rudimentäre Logik zum Laden der ActiveMQ-Konfiguration innerhalb der monitord.xml, dem Initalisieren der Verbindung u.s.w. tipperte ich in knapp drei Stunden runter, nachdem ich immer wieder mal in die C++-Dokumentation schauen musste. Glücklicherweise konnte ich viel von dem ActiveMQ-Beispiel als auch von dem monitord-MySQL-Plugin übernehmen.

Anschließend erweiterte ich die configure.ac und Makefile.ac um die nötigen ActiveMQ-Abhängigkeiten und konnte mit –with-activemq auch mein Plugin kompilieren.

Das ActiveMQ-Plugin ist noch nicht vollständig, sowohl Testen als auch das Veröffentlichen der Nachrichten in der Queue ist noch nicht implementiert. Ist aber auch nicht wild, da es mir erst einmal um die Evaluierung des Konzepts ging. Und das ging alles recht schnell, obwohl ich von C++ und den GNU-Buildtools null Ahnung habe 😉
Die geänderten Sourcen habe ich auf Github veröffentlicht – enthält natürlich noch massig Bugs und ist ungetestet.

openSUSE 10.3 und Ghostscript

Gestern ging mir der Hintern geringfügig auf Grundeis: am morgigen Freitag ist Rollout unseres ZABOS-Systems, die letzten Bugs sind soweit gefixt gewesen. Nach Ende einer Alarmierung (Details zu ZABOS gibt es unter http://www.zabos.info) sollte automatisch ein Abschluss-Report gedruckt werden. An sich auch gar kein Problem, da die mit BIRT erzeugten Reporte per lpr gedruckt werden sollten.

Allerdings lief auf dem Server noch Ghostscript in der Version 8.1.x, die bei der pdf2ps-Konvertierung den Fehler

   **** Warning:  An error occurred while reading an XREF table.
   **** The file has been damaged.  This may have been caused
   **** by a problem while converting or transferring the file.
   **** Ghostscript will attempt to recover the data.

schmiss. Grund dafür war, dass die installierte Ghostscript-Version noch nicht mit dem PDF-Format 1.5 klar kommt. BIRT erzeugt aber die PDFs in diesem Versions-Format. Eine Möglichkeit, eine ältere PDF-Formatsversion zu benutzen, habe ich nicht gefunden.

Ich hatte also nun die Option, das komplette, auf openSuSE basierende System, von 10.3 auf 11.2 zu upgraden oder aber die aktuelle Ghostscript-Version 8.70 zu kompilieren, in der der Fehler gefixt war.
Das Upgrade von 10.3 auf 11.2 mit Hilfe von zypper schlug fehl, da mir zypper ein std::bad_alloc() lieferte. Im Internet wurde ich nicht fündig, und die Zeit für das Debuggen hatte ich nicht.
Somit wurde die Option ersetzt durch “Server frisch aufsetzen und die komplette Umgebung anpassen”.
Da ich eher der Debian/Ubuntu-Mensch bin, hatte ich da so meine Abneigung gegen. Deshalb versuchte ich, Ghostscript manuell zu kompilieren. Als Paketabhängigkeiten müssen tiff-*-devel und cups-*-devel per YaST installiert werden, ein make && make install führte dann auch zum Erfolg.

Rautiges 2009-09-01

Durch das Konzert und Projekte in der Firma bin ich immer noch im Stress, deshalb hier mal wieder etwas Rautiges.

  • Am Freitag den 4. September hat unsere Band – die Rhythmutants – unseren ersten Auftritt. Mittlerweile läuft auch alles so, wie es soll. Ich bin stark gespannt, wie das Konzert dann ablaufen wird. Die Woche ist noch geprägt von jeder Menge Bandproben.
    Den letzten Samstag hat die Band + Support-Crew bis spät in die Nacht geprobt und Party gemacht. War sehr lustig – aber auch anstrengend.
  • Für mod_auth_ldap habe in der vergangenen Woche einen Patch geschrieben, mit dessen Hilfe es möglich ist, für einen (virtuellen) Server einmalig die LDAP-Verbindungseinstellungen zu setzen, die dann für den kompletten (virtuellen) Server gelten. Mich hat es mehr als angepestet, dass ich für jede Ressource die Zugangsdaten (AuthLDAPBindDN, AuthLDAPBindPassword und AuthLDAPURL) immer wieder setzen musste. Nun existieren die Parameter AuthLDAPGlobalURL, AuthLDAPGlobalBindDN und AuthLDAPBindPassword.
  • Unser Haus-internes Kicker-Team, bestehend aus Christoph, Marc, Florian, Mandy, Hendrik und mir, hat am vergangenen Donnerstag den ersten Platz beim 1. IT-Region 38 Kicker-Cups belegt. Es war ein äußerst spannender und unterhaltsamer Abend, den unser ECW-Badabäääm-Team erfolgreich abschließen konnte. Fotos vom Turnier gibt es bei der IT Region 38, Christoph hat weiterhin noch ein kurzes Interview gegeben.
    Nach dem Turnier haben Marc und ich am Klieversberg noch bis in die frühen Morgenstunden unseren grandiosen Sieg gefeiert.
  • Beim Studium habe ich heute den Abschlusstest für Rechnerstrukturen und Betriebssysteme abgelegt – und überraschend nicht bestanden. 2 der Tests wurden meiner Meinung nach vom System falsch ausgewertet, obwohl sie offensichtlich richtig waren, denn es mussten nur die Lösungen aus dem Buch abgeschrieben werden. Ich habe Bianca über diesen Missstand informiert und hoffe auf eine baldige Antwort – mein Tutor ist leider noch bis zum 6. September im Urlaub, so dass mir der richtige Ansprechpartner momentan nicht zur Seite steht. Ist alles sehr ärgerlich.
  • Die Migration unserer virtuellen Maschinen auf den Xen-Server haben wir erfolgreich hinter uns gebracht, auch wenn es einige Probleme gab. Nun läuft aber wieder alles. Damit steht – sobald es Zeittechnisch machbar ist – der Einführung eines Build-Servers nichts mehr im Wege. Erste Tests mit CruiseControl und unserem Deployment-Tool habe in der letzten Woche bereits gemacht.
    Sobald die komplette Infrastruktur steht, werde ich dazu einen ausführlichen Artikel schreiben.
  • Heute ist das erste Treffen zur bevorstehenden Ruderregatta am 12. und  13. September am Allersee. Ich bin sicher, dass die Ruderregatta wie jedes Jahr eine Mordsgaudi wird 😉

Neues sf.net-Projekt: h2benchw2csv / Ergebnis der iSCSI Performance-Tests

Die letzten beiden Tage habe ich unser SAN und das dahinter liegende iSCSI-Geraffel ausführlich mit h2benchw von Heise / c’t getestet. Da ich absolut keine Lust hatte, alle Ergebnisse in den Text-Dateien (waren knapp 20 Files) per Hand in Excel einzutippen, frickelte ich mir kurzerhand ein PHP-Script zusammen, dass mir aus den .txt-Dateien von h2benchw eine große CSV-Datei baut. Diese kann dann wiederum in Excel oder irgendeinem anderen Tabellen eingelesen werden.

Weiterhin unterstützt h2benchw2csv – so der Name des kleinen Scripts – die automatische Umwandlung der .ps-Dateien nach .pdf. Dies geschieht mit Hilfe des PDFCreators, der in der %PATH%-Variable verfügbar sein muss. Gegenwärtig ist h2benchw2csv noch im sf.net Approval State, sollte aber morgen oder übermorgen freigeschaltet werden.

Features:

  • Umwandeln von h2benchw .txt-Ergebnissen in eine CSV-Datei
  • Komplette Inhalte von Verzeichnissen können in der CSV-Datei gespeichert werden
  • Deutsch/Englisch
  • Umwandlung der h2benchw .ps-Dateien mit Hilfe des PDFCreators nach PDF
  • 100% Open Source und Kommandozeile
  • Benötigt wird nur PHP – es wird keine zusätzliche Bibliothek benötigt

Zu den Ergebnissen meiner iSCSI-Performance-Messung ist folgendes zu schreiben:

  1. Round-Robin oder Weighted Path in einem Verbund von 4 Netzwerkkarten auf Client und Server bringen rein gar nichts, wenn sie gemeinsam auf ein Target zugreifen. Die maximale Leserate betrug 75 MByte/s, die maximale Schreibrate 60 MByte/s. Wir gingen eigentlich davon aus, dass mit jeder (Gigabit)-Netzwerkkarte die Performance mitskaliert – also eine NIC: 70 MByte/s, zwei NICs 140 MByte/s u.s.w. Dem ist aber eindeutig nicht so.
  2. Interessant war hingegen, dass bei 4 Targets und Fail Over der Gesamtdurchsatz auf ca. 200 MByte/s beim Lesen und 170 MByte/s beim Schreiben anstieg.
  3. Für mich schaut das nach einem Problem im iSCSI Initiator oder -Treiber aus.
  4. Bonding und Multipath gemeinsam benutzt bringen nichts.
  5. Die Firmware 1.46 des Areca 1231 kann nun vernünftig mit NTP-Servern umgehen – bringt aber keine bessere Performance
  6. FileIO ist beim Schreiben geringfügig schneller als BlockIO (2 MByte/s)
  7. Jumboframes (MTU 9000 auf Windows Server 2003 und 9014 auf DSS) brachten bei uns keinen Performance-Unterschied
  8. Fail Over ist schneller als Weighted Path, Weighted Path ist schneller als Round Robin
  9. Keine der vier Intel-Netzwerkkarten wurde unter Windows Server 2003 zu mehr als 50% ausgelastet. Hier gibt es eventuell auch Treiber-Probleme.
  10. Trotz allem ist unser iSCSI-SAN fix 😉

Wartungsarbeiten am Server

Heute musste ich einige Sachen auf unserem DMZ-Server, auf dem auch dieser Blog liegt, updaten.
Trotz guter Vorbereitung stolperte ich über einige Probleme: Das Upgrade auf MySQL 5.1.30 kostete mich einige Nerven. Aus mir unerfindlichen Gründen konnte er die ibdata-Datei nicht mehr lesen und MySQL brachte einen hübschen Coredump zum Vorschein. Das Problem behob ich mit einer Neuinstallation des MySQL-Dienstes. Darauf folgte ein manueller Export der Datenbank-Daten via mysqldump aus der MySQL 5.0.13-Instanz. Diese spielte ich dann in 5.1.30 wieder ein.

Zeitgleich mit den Wartungsarbeiten installierte Florian seinen neuen alten Blog auf dem Server. Der Blog sollte unter http://prunkster.ecw.de erreichbar sein.

Nachdem ich die DNS-Einträge auf unserem DNS-Server und in der Firewall umgebogen hatte, hätte der Zugriff auf http://prunkster.ecw.de theoretisch möglich sein.
Praktisch war dies aber nicht möglich, da der Apache die Anfragen an wap.ecw.de weiterleitete. Ich überprüfte die einzelnen Virtual Host-Einträge des Apaches und stellte fest, dass PHP der Übeltäter bei diesem Problem war.
Nach dem Hinzufügen von

php_admin_value open_basedir "/pfad/zur/subdomain/web"

kam PHP auch nicht mehr durcheinander.

Für mich bedeutet das, das ich mich erfolgreich in’s Wochenende verdünnisieren kann.
Ach so: Hallo Flo! 🙂

Lebenszeichen

Ja, ich lebe noch. Es gab in den letzen paar Tagen nicht sonderlich viel Aufregendes, wofür es sich hätte gelohnt zu bloggen.
Bis letzten Freitag war Marci bei mir, das Bootcamp haben wir beide erfolgreich hinter uns gebracht. Allerdings waren wir nicht sonderlich produktiv. Das einzig erwähnenswerte ist, dass wir unter http://partyinwob.mixxt.de unsere Party-Community für Parties in und um Wolfsburg eingerichtet haben. Somit können wir die nächsten LANs und Parties über diese Plattform planen.

Von Freitag bis Sonntag ging es dann mit der Firma nach Gifhorn zur Klausurtagung. Davon gibt es ebenfalls nicht viel zu berichten, da nur firmeninterne Dinge besprochen wurden.

Die Arbeiten an meinem Blog hingegen schreiten langsam aber sicher voran. Mittlerweile habe ich meine private Zend Framework-Library ein vernünftiges Scaffolding integriert und das Projekt “Commandlets” in ein stabiles Stadium gebracht. Hinter den Commandlets verbirgen sich XML-Tags, die ich in meinen Blogs-Posts verwenden kann. Jedes registrierte Commandlet kann in einem Post verwendet werden, z.B. erzeugt mir

Porschestraße 10, Wolfsburg

einen Link zu Google Maps, so dass man sofort auf die Location zugreifen kann. An sich klingt das relativ trivial. Warum nicht gleich einen Link reintippern? Ganz einfach: Die Commandlets können als Parameter den Status des Blog-Eintrags bekommen (ON_VIEW, ON_CHANGE, ON_CREATE). Somit lassen sich bestimmte Aktionen nur beim Erstellen eines Blogs ausführen – beispielsweise das Erstellen eines Trackbacks oder ähnliches. Das Commandlet <n:songs> würde z.B. eine Link-Liste zu youtube, last.fm und Google erstellen, so dass ich automatisch zu Gitarren-Tabs, Songtexten, Videos oder allgemeine Band-Informationen weitergeleitet werde.

Das “n:” steht übrigens für den Namespace. Jedes Commandlet muss mit einem Namespace beginnen. Dies war für das vernünftige Parsing nötig.

Nebenbei unterstützen die Commandlets von Haus aus die Unterstützung des Zend_View_Interfaces, so das man die Ausgabe der Commandlets in der jeweiligen View festlegen kann. Dies erlaubt mir in Verbindung mit meiner Klasse Ckl_View_Multiple, dass ich je nach Endgerät die Ausgabe aufpeppen kann.
Möglich wäre dann z.B., dass ich bei der Anzeige mit dem Handy einen Link zum Google Mobile Maps-Routenplaner bekomme, bei Anzeige mit Firefox o.ä. hingegen direkt Google Maps über die API integriere.

Zusammengefasst sind die Commandlets mehr als irgendwelche Templates, da sie direkt Aktionen im Backend triggern können.

Musik während des Programmierens

Auf Coding Horror beschäftigt sich Jeff Atwood mit dem Thema “Musik während des Programmierens“.

Bei mir ist es so, dass ich während der täglichen Server- und Netzwerkadministration mir noch nicht bekannte Songs anhöre (Genre: Punk-Rock, Ska). Während der Routine-Arbeit und Sichten der Logs kann ich mich teilweise auch auf den Text konzentrieren.
Gleiches gilt für das morgendliche Durcharbeiten von Emails und Nachrichten.

Während des Entwickelns von Software kommt es auf den Teilprozesss an. Das Designen von Schnittstellen oder Architekturen mit Zettel und Stift führe ich eigentlich immer ungestört (ohne Musik, ohne Kollegen) durch, da sonst die Konzentration und die Ablenkung durch andere Sachen das komplette Konzept und meine Gedankengänge durcheinanderwirft.
Bei der Umsetzung von “normalen” Tätigkeiten (Script-Programmierung, 0815-Java-Geschreibsel etc pp.) höre ich eigentlich durchweg Ska-Punk. Ist nun mal *meine* Musikrichtung.
Bei anspruchsvolleren Sachen laufen bei mir hingegen ruhige und langsame Tracks. Das kann sowohl ruhiger Ska (z.B. Mad Caddies – State of Mind), Pop oder Metal sein. Hauptsache langsam.

Außerdem bin ich wesentlich produktiver, wenn ich während des Programmierens ein Lied höre, von dem ich einen Ohrwurm habe. Der Song kann dann teilweise auch in Endlosschleife zwei Stunden am Stück laufen. Ist mir zuletzt letzte Woche mit Mad Caddies – 10 West passiert.