Meine Frau zahlt, wer ist der Mann?

Habe heute Abend mal wieder ferngesehen. Im ZDF lief “Meine Frau zahlt”, eine Reportage über Familien, in denen die Frau die Hauptverdienerin ist. Drei Männer wurden vorgestellt. Einer hat mich beeindruckt: Lutz. Der meckert nicht rum, der macht.

Hausmann? Wenn, dann richtig: Die Frau wird mit leckerem Kaffee geweckt, die Kinder kriegen Smileys aufs Brot gemalt, und Wäsche falten plus bügeln, Putzen etc. wird auch korrekt und prompt erledigt.

Hier könnte jetzt was tiefschürfendes zu einer “neuen Männlichkeit” kommen, kommt aber nicht. Lutz ist ein Mann. Der nimmt die Herausforderung an (bzw. die fünf Herausforderungen (Frau mit eingerechnet)) und tut was getan werden muss, und das richtig.

Veröffentlicht unter Persönlich | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

PHP-Funktionen: http_build_query()

Eine nützliche PHP-Funktion, die ich bisher noch nicht kannte: http_build_query.

Die Funktion tut nichts anderes, als URL-codierte Query-Strings aus beliebig komplexen Arrays zu basteln. Ist in der Version mit optionalem Separator (& statt & für Queries in HTML-Dokumenten) seit PHP 5.1 vorhanden, kann also ohne Probleme eingesetzt werden.

Veröffentlicht unter Programmierung | Verschlagwortet mit , | Hinterlasse einen Kommentar

Drupal Commons 1.0

Drupal Commons, eine “Social business”-Distribution ist jetzt in der Version 1.0 erschienen.

Ich habe erst eine Stunde damit herumgespielt, bin aber jetzt schon schwer begeistert. Commons ist eine interessante Alternative zu Open Atrium, das eher auf Projektbasierte Kollaboration ausgelegt ist.

Veröffentlicht unter Programmierung | Verschlagwortet mit , , | Hinterlasse einen Kommentar

Aha-Moment Nr. 2 – vim

Yehuda Katz schreibt, dass er seine Versuche vim (bzw. MacVim) zu lernen bisher völlig falsch angegangen sei.

Ich kann das alles so bestätigen, mit dem Unterschied, dass ich kaum eine Wahl hatte — als ich angefangen habe, mich mit Unixen/Linuxen zu beschäftigen, var vi der Standard-Editor, und ich habe ihn tatsächlich genau so benutzt wie Notepad (zum Glück haben die Pfeiltasten funktioniert). Dann lernte ich C, A, D, dd, yy, p … und so weiter, mittlerweile finde ich mich prima zurecht und ärgere mich wenn ich mal andere Editoren benutzen muss.

Aber selbst nach mehr als zehn Jahren (wow) werde ich immer wieder von Details überrascht. Wie in diesem Satz von Herrn Katz (Hervorhebung von mir):

As the days went on, I learned a few commands here and there. The first big one for me was ci as in ci " (it means: replace what’s inside the next set of ” and go into insert mode).

(Kurze Erklärung auf deutsch: ci steht für “change in”, also “ersetze innerhalb von”. ci" bedeutet also “ersetze alles innerhalb der (nächsten) Anführungszeichen”.)

Bis jetzt habe ich immer den Cursor an die Anführungszeichen verfrachtet (f" oder F") wenn ich nicht schon drinnen war, und dann ci" ausgeführt. Es stellt sich also heraus, dass ich mir das f" in Zukunft sparen kann. Das hört sich jetzt nicht nach viel an, aber Text innerhalb von Anführungszeichen ändern gehört zu den Sachen, die ich jeden Tag ein paar hundert mal tue, und wenn ich da drei Anschläge sparen kann läppert sich das.

Warum erzähle ich das alles? Erstens, weil die Geschichte eine Moral hat: vim ist ein komplexes Viech, dass einen noch nach Jahren der Benutzung (positiv) überraschen kann. Aber man kann schon mit einem kleinen Vorrat an Kommandos einiges damit anfangen und es wird immer nur besser. Zweitens als Gedächtnisstütze für mich alten Sack. :)

Veröffentlicht unter Programmierung | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

Wikileaks To Leak 5000 Open Source Java Projects …

Dieser dringend nötige Lacher zum Feierabend wird Ihnen präsentiert von Steve Yegge:

EYJAFJÖLL, ICELAND — Java programmers around the globe are in a panic today over a Wikileaks press release issued at 8:15am GMT. Wikileaks announced that they will re-release the source code for thousands of Open Source Java projects, making all access modifiers ‘public’ and all classes and members non-’final’.

Agile Java Developer Johnnie Garza of Irvine, CA condemns the move. “They have no right to do this. Open Source does not mean the source is somehow ‘open’. That’s my code, not theirs. If I make something private, it means that no matter how desperately you need to call it, I should be able to prevent you from doing so, even long after I’ve gone to the grave.”

Veröffentlicht unter Programmierung | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar

Ein Aha-Moment mit wget und Pipes

Manchmal ist man doch wirklich blind. Ich ganz besonders. Ich habe gerade zum wahrscheinlich drölf-millionsten Mal den Download-und-Entpack-Tanz getanzt:

wget http://ftp.drupal.org/files/projects/drush-6.x-3.1.tar.gz
tar xzf drush-6.x-3.1.tar.gz
rm drush-6.x-3.1.tar.gz

Irgendwie meldete sich da eine kleine Stimme in meinem Hinterkopf und zitierte aus der tar-Manpage:

-f, --file [HOSTNAME:]F
      use archive file or device F (default "-", meaning stdin/stdout)

Aha, wenn man die “f”-Option weglässt, extrahiert “tar x” aus der Standardeingabe … wenn man wget die Option “-O -” mitgibt, schreibt wget die heruntergeladene Datei in die Standardausgabe (der zweite Bindestrich ist das Argument).

Wenn es doch irgendeine Möglichkeit geben würde, die beiden zusammenzubringen.

Natürlich gibt es die: Pipes. Und schon ist der Tanz ein ganzes Stück kürzer:

wget -O- http://ftp.drupal.org/files/projects/drush-6.x-3.1.tar.gz | tar xz

Wieder was gelernt. Warum jetzt erst? Das ganze geht übrigens auch mit curl:

curl http://ftp.drupal.org/files/projects/drush-6.x-3.1.tar.gz | tar xz

Und zu drush, der “Drupal Shell” die hier als Beispiel herhalten musste, sollte ich auch mal was schreiben. Die hat mir nämlich jetzt schon mehr Lebenszeitverschwendung erspart als diese kleine Entdeckung es jemals wird.

Veröffentlicht unter Programmierung | Verschlagwortet mit , , , , , | Hinterlasse einen Kommentar

Zwanzichzehn

Jetzt habe ich dieser Seite auch das neue Standard-Theme übergezogen. Das berühmte “Gefühl” für Dinge bekomme ich nämlich immer besser in einer Produktionsumgebung und sei sie auch noch so bescheiden.

Wenn es hier also in den nächsten Tagen zwischendurch sehr wurstig aussehen sollte, liegt es wahrscheinlich daran, dass ich Dinge ausprobiere die man eigentlich nicht live ausprobieren sollte. Ich brauche halt den Nervenkitzel. :)

Veröffentlicht unter Programmierung | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

WordPress 3.0

Die neue Version ist gestern erschienen. Für mich neu: Beginnend mit dieser Seite werde ich der automatischen Update-Funktion auch für Produktionsumgebungen vertrauen.

Das wirklich spannende kommt in den nächsten Wochen: Mindestens eine WPMU-Installation auf 3.0 bringen und wahrscheinlich ein paar Einzelblogs in ein “Netzwerk”, wie das jetzt ja heisst, überführen.

Ich werde berichten.

Veröffentlicht unter Programmierung | Verschlagwortet mit , , | Hinterlasse einen Kommentar

Javascript-Funktionen: Deklaration vs. Ausdruck

Ich habe mir den Webcast “10 Things I Learned from the jQuery Source” von Paul Irish angeschaut, und am Anfang geht es um das Modul-Pattern:

(function () {
  // genialer Code
})();

Man definiert eine anonyme Funktion und ruft sie direkt auf. Innerhalb der Funktion hat man dann eine “Sandkiste” für seinen Code, der anderen Skripten nicht in die Quere kommen kann. Soweit, so bekannt. Was mich aber stutzig gemacht hat, war die Aussage, dass die Klammern nicht notwendig sind. Und in der Tat funktioniert das Muster auch so:

! function () { alert("Ich bin ein Modul!"); } ();
+ function () { alert("Ich auch!"); } ();
- function () { alert("Und ich erst!"); } ();

Ich hatte bis dahin angenommen, dass die Klammern mit der Operatorpräzedenz zu tun hatten. Haben sie nicht. Ein wenig googeln hat mich dann zum Artikel “Named function expressions demystified” von Juriy “kangax” Zaytsev geführt, der das Ganze prima erklärt.

JavaScript kennt zwei Arten Funktionen mit dem function-Schlüsselwort zu definieren: Als Deklaration oder als Ausdruck. Ein Funktions-Ausdruck hat das Funktionsobjekt als “Rückgabewert”, das man dann mit dem ()-Operator aufrufen kann, eine Deklaration nicht. (Ausserdem kann man bei einer Deklaration den Funktionsnamen nicht weglassen.) Folgender Code funktioniert nicht:

// Funktioniert *nicht*
function () { alert("Ich bin kaputt"); } ();
function selbstMitNamen () { alert("geht das nicht"); } ();

Das “Geheimnis” ist die Tatsache, dass die Klammern, “+”, “-” und “!” Operatoren sind, die einen Ausdruck einleiten können. Der Parser sieht diese, denkt sich: “Oh, ich bearbeite einen Ausdruck.” und behandelt das function-Schlüsselwort entsprechend. Und schon hat man am Ende der Funktionsdefinition ein Objekt als Wert, das man ausführen kann.

Wieder mal was gelernt.

Veröffentlicht unter Programmierung | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar

Javascript: The Good Parts

Das Buch ist etwas älter, aber nach ein paar nachdrücklichen Empfehlungen habe ich es mir endlich zugelegt. Der Autor ist immerhin der “Entdecker” von JSON.

Der erste Eindruck: Mann, was für ein dünnes Buch. 145 Seiten (ohne Index). Allerdings nimmt Douglas Crockford schon im Vorwort den Mund reichlich voll:

This is not a book for dummies. This book is small, but it is dense. There is a lot of material packed into it. Don’t be discouraged if it takes multiple readings to get it. Your efforts will be rewarded.

Aber das ist OK, denn er liefert auch. Nach ein paar allgemeinen Ausführungen im ersten Kapitel (“Global variables are bad, mmmmkay?”) geht es direkt los: Die Grammatik der von Crockford favorisierten Teilmenge von JavaScript wird anhand von Syntaxdiagrammen erklärt. Code-Beispiele tauchen nur auf, wenn eine klärende Darstellung erforderlich ist.

In den restlichen Kapiteln wird das Tempo beibehalten. Allerdings notwendigerweise mit mehr Beispielcode. Objekte, Funktionen, Vererbung, Arrays, Reguläre Ausdrücke, Standardmethoden und ein paar Kapitel zum Programmierstil werden knapp, aber erschöpfend abgehandelt. Es ist, wie angekündugt, ab und zu nötig ein Kapitel mehrfach zu lesen um es richtig zu verstehen (bei mir z.B. “Vererbung” drei mal), aber wenn man endlich begreift, was der Autor einem sagen will, dann klickt es auch richtig.

In den Anhängen werden dann die schrecklichen und schlechten Features von JavaScript vorgestellt, mitsamt kurzer Erklärung für die Bewertung. Wer also seine Lieblingskonstrukte vorher im Buch vermisst hat, wird hier fündig. Dann noch eine kurze Einführung in JSLint und JSON und schon ist man durch.

Insgesamt ein gutes Buch, auch wenn ich nicht zu 100 Prozent mit dem Autor konform gehe was die besten Teile von JavaScript sind, bin ich bei den guten, schlechten und schrecklichen doch ganz seiner Meinung. Das Buch ist ideal, wenn man sich ein paar Gedanken über die Art machen will, wie man JavaScript (oder auch andere Programmiersprachen) einsetzt. Die Botschaft besseren Code durch den konsequenten Verzicht auf den Einsatz fragwürdiger Features zu schreiben, ist eine die ich noch nicht oft gehört habe, aber die zumindest bei mir angekommen ist. (Ich habe mehrfach gehört, dass es in Firmen die C++ einsetzen üblich sei, eine “legales” Subset der Sprache für zu definieren. Aber bei C++ wundert mich das jetzt auch gar nicht.)

Fazit: kein Tutorial, nicht unbedingt für Anfänger geeignet, mehr Meinung als Fakten (aber auf eine gute Art), super Gedankenfutter.

Kleine Anmerkung: Der Link ist ein Amazon-Partnerlink. Macht mich reich!

Veröffentlicht unter Programmierung | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar