Stefan Fischerländer’s Blog One Blog Is Not Enough

Microsoft liebt Perl doch

Dezember 7th, 2008

Microsoft und Perl, das ist bislang nicht die große Liebe. Zwar gibt es mit ActivePerl eine gut funktionierende Perl-Version für Windows; auch die von ActiveState mitgelieferten CPAN-Module lassen sich problemlos installieren. Doch wehe, der Windows-Perl-Entwickler versucht, ein anderes CPAN-Modul zu laden. Dann trifft ihn der CPAN-Wahnsinn.

Mit Strawberry gibt’s seit einiger Zeit eine neue Perl-Distribution, die Windows-Perl auch in Sachen CPAN-Module möglichst gleichwertig zu Linux-Perl machen möchte. Verantwortlich dafür ist Adam Kennedy. Dieser Adam Kennedy hat nun ein großes “Geheimnis” verkündet:

Microsoft wird jedem CPAN-Autor kostenlosen Zugang zu einer zentral gehosteten virtuellen Maschine geben, die alle wichtigen Windows-Versionen enthält. Damit kann die Perl-Community künftig ohne Aufwand und ohne Kosten die CPAN-Module ausgiebig unter Windows testen.

Sieht so aus, als gäbe es in Redmond doch noch Perl-Anhänger.

Python 3.0 ist da

Dezember 4th, 2008

Python 3.0 ist in der finalen Version verfügbar. Damit haben die Whitespace-Dompteure klar das Rennen gegen die Geschweifte-Klammern-Magier PHP und Perl auf ihren jeweiligen verschlungenen Wegen zur “6″ vor dem Punkt gewonnen. Die ausführlichen Änderungen in Python 3.0 sind in einem schönen Übersichtsartikel zusammengefasst:

  • Aus dem print-Statement mit all seinen Raffinessen wird in 3.0 eine schnöde Funktion.
  • map(), filter() und zip() geben Iteratoren zurück.
  • Die dict-Methoden liefern Views statt Listen; entsprechend werden dict.iterkeys(), dict.iteritems() and dict.itervalues() nicht mehr unterstützt.
  • Vergleiche (und daraus abgeleitet: die Sortierung) können nur noch auf vergleichbaren Werten durchgeführt werden. 1 < '' gibt einen TypeError.
  • Die Unicode-Behandlung wurde komplett verändert. Anstatt Unicode-Strings und 8-Bit-Strings gibt es nun nur noch Unicode-Strings (Typ str) und Binärdaten (Typ bytes). Diese beiden Typen sind nicht miteinander kompatibel, sondern müssen explizit ineinander umgewandelt werden.
  • Der String-Formatierungsoperator % ist noch vorhanden, wird aber mit 3.1 als deprecated eingestuft.
  • Diverse Syntax-Änderungen
  • Diverse Änderungen der Standard-Library

Alles in allem genügend Änderungen, um den Versionssprung auf 3.0 zu rechtfertigen - und um Scriptautoren einige Hausaufgaben bei der Umstellung alter Scripte zu geben. Insbesondere die komplette Änderung in Sachen Unicode und die damit zusammenhängende Überarbeitung aller Stellen in den Scripten, die Text bearbeiten, kann einen gehörigen Aufwand auslösen. Und ähnlich sieht es dort aus, wo intensiv mit Dictionaries und Listen gearbeitet wurde.

Aber trotz aller Änderungen scheint Python auch Python zu bleiben. Perl 6 hingegen soll ja eine mehr oder weniger neue Sprache zu werden.

PDO, MySQL and Nested Queries

Oktober 29th, 2008

PDO (PHP Data Objects) is regarded as state-of-the-art for database access in PHP. But as useful as an abstraction layer may be, the usage of PDO can really be painful. Why? In default mode, PDO uses unbuffered queries to access MySQL. This results in a somewhat strange behaviour: You cannot use two result statements at the same time on the same database connection. (see an example)

The official solution for this problem is to empty the result set of a previous query using fetchAll(). If you have to process every row in a table, this method copies the entire table into a PHP array. This is fine for small tables. But in a recent project, there’s one table which is 8 GB large. I surely don’t want to copy this table into my memory …

Thanks to Ilia, there is a solution for this: Just tell the underlying MySQL driver to use buffered queries.

$dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

The downside of this approach is obvious: Our PDO-based database access is no longer portable as we now use a MySQL specific functionality. But as long as there is no other solutions for iterating over big tables and issuing a query for every row, I think this is the way to go.

Ich liebe Olympia!

August 21st, 2008

Gestern habe ich kurz meinen Olympia Boykott unterbrochen. Ich musste mir unbedingt das 200m-Finale ansehen, denn ich wollte live dabei sein, wie Usain Bolt der versammelten Weltelite mit offenem Schnürsenkel auf 200 Metern ein paar Sekunden abnimmt und dabei Autogramme schreibt. Und ich muss sagen, die Boykott-Unterbrechung hat sich gelohnt! Wie Bolt allen davon gelaufen ist, herrlich. Mit solcher Leichtigkeit haben weder Lance Armstrong noch Jan Ullrich zu ihren jeweils besten Zeiten ihre gedopten Kollegen am Berg stehen lassen. Auch Marion Jones musste sich 2000 viel stärker anstrengen, ja sogar Ben Johnson sah im Finale 1988 gestresster aus – wenn auch nur ein klein wenig.

Als wäre das noch nicht der olympischen Freude genug, erklärt uns der “chinesische Spielberg” (Spiegel Online) und Regisseur der Eröffnungszeremonie Zhang Yimou die Überlegenheit der chinesischen Kultur: “Darsteller gehorchen Befehlen, sie können es wie Computer tun. Das ist der chinesische Geist.” Im Westen sei sowas nicht möglich, wegen der “Menschenrechte”, so Yimou weiter. Okay, dafür dürfen – wegen dieser blöden “Menschenrechte” – im Westen alle seine Filme gezeigt werden, was in China noch immer nicht der Fall ist, aber das scheint den Filmregisseur nicht zu stören. Hauptsache, man kann sich im Glanz der Parteiführung sonnen.

Aber zurück zum Sport. Die aktuellste Meldung verstehe ich nicht: Wieso werden Springreiter ausgeschlossen, weil ihre Pferde gedopt waren? Im Sinne der Gleichberechtigung muss für Pferde doch erlaubt sein, was für Schweine und Rinder schon lange gilt! Oder muss ich gar meine Firma aufgeben, wenn herauskommt, dass ich zum Mittagessen Schnitzel mit überhöhten Hormonwerten gegessen habe?

Beijing vs. Peking

August 12th, 2008

Seit die Olympischen Spiele in Peking (siehe auch Mein Olympia-Boykott) begonnen haben, fällt mir auf, dass immer häufiger statt des üblichen deutschen Ausdrucks Peking die Bezeichnung Beijing benutzt wird. Hier einige Beispiele:

  • Medien beklagen Behinderung durch Behörden in Beijing
  • Olympische Pandas in Beijing
  • Olympische Spiele in Beijing: Hotels bleiben zur Hälfte leer
  • Vorolympischer Besuch: Blond in Beijing
  • Wie das Symbol der Olympischen Spiele 2008 für Beijing entstand

Was bitte soll dieser Unfug? Peking ist Peking und nicht Beijing. Punktum. Beijing ist ja nichts anderes als die Lautschrift des chinesischen Namens für Peking. Aber warum sollte ein deutscher Autor die Lautschriftversion eines Namens benutzen, für den es eine deutsche Bezeichnung gibt? Ist das vorauseilende politische Korrektheit? Oder intellektuelle Coolness? Oder einfach nur gedankenlos und dumm? Okay, hätten die Nazis jemals die Zerschlagung Rest-Pekings gefordert, wäre der Namenswechsel verständlich. Aber so?

Wie sieht das dann in ein paar Jahren aus? Berichten deutsche Zeitungen künftig über leere Hotels in Roma? Oder über blonden Besuch in Praha? Und müssten vorbildliche Journalisten dann nicht in Berichten über die Spiele von 1980 vom Boykott von Moskwa schreiben – oder gar vom Boykott von Москва? Auch wenn letzteres wohl manche technische Vervielfältigungseinheit (Schreibmaschine, Druckmaschine, Browser) überfordern könnte.

Wieso kann ich mich eigentlich an keine deutschen Berichte zu den letzten Winterspielen erinnern, in denen vom Doping in Torino berichtet wurde? Klingt das womöglich nicht cool genug? Oder steckt da die Angst vor dem nächsten Großereignis im Grödnertal dahinter, das auf italienisch Val Gardena heißt? Denn Val Gardena wäre ja ebenfalls nicht wirklich politisch korrekt, wird doch im Grödnertal, pardon: in Gardeïna verbreitet ladinisch gesprochen – und das Ladinische sollte nach der Europäischen Charta der Regional- oder Minderheitensprachen auch “in Medien besonders gefördert werden”.

Wer also weiterhin Beijing statt Peking schreibt, sollte sich auch bei allen anderen Namensbezeichnungen dreimal überlegen, welcher Ausdruck nun der korrekteste (sic!) sein könnte. Und wenn 2018 tatsächlich die Winterspiele nach München kommen, erwarte ich die politisch extrem korrekte Überschrift Hotels in Minga komplett ausgebucht!.

Nachtrag: Wie nicht anders zu erwarten, gibt es dafür einen eigenen Ausschuss: Den Ständigen Ausschuss für geographische Namen. Dabei handelt es sich um ein Wissenschaftlergremium ohne besondere institutionelle Verfassung. Dieser Ausschuss gibt eine Liste mit deutschen Wörtern für fremde geographische Bezeichnungen (sogen. Exonyme) heraus. In dieser Liste finden sich viele weitere spannende deutsche Wörter und deren politischhochkorrekte Umschreibung.

Wer also künftig Bezeichnungen wie Peking zugunsten von Beijing aufgeben möchte, soll sich bloß nicht erwischen lassen, Mount Everest zu schreiben! Qomolangma Feng wäre nämlich korrekt. Einen Tibet-Konflikt gibt es demnach auch nicht, sondern höchstens einen Xizang-Konflikt. Versteht zwar keiner, ist aber schön richtig. Und wer jetzt noch eine Kanton-Ente bestellt, den holt der Teufel. Es sei denn, er kann seine Bestellung eben noch in Guangzhou-Ente korrigieren.

China garantiert “ausreichenden” Webzugang

Juli 30th, 2008

Vor einigen Wochen habe ich bereits über meinen privaten Olympia-Boykott geschrieben. Hintergrund ist beileibe nicht nur die Tibetfrage; die halte ich eher für nebensächlich. Weitaus wichtiger ist für mich wie die chinesische Regierung mit den Kritikern im eigenen Land umgeht und welche Rolle China in der Welt spielt – zum Beispiel bei der Unterstützung des Regimes im Sudan.

Nun hat das IOC stets wiederholt, dass die ausländischen Journalisten frei berichten dürfen und natürlich – eigentlich ein Irrsinn, das im Jahre 2008 extra hervorheben zu müssen – auch freien Internetzugang haben werden. Doch jetzt, wenige Tage vor Beginn der Spiele, wird selbst diese Selbstverständlichkeit wieder einkassiert:

Meine Hauptbeschäftigung und Verantwortung ist es, sicherzustellen, dass offen über die Wettbewerbe berichtet wird. Das erstreckt sich nicht notwendigerweise auf den freien Zugang und die Berichterstattung über alles, was mit China zu tun hat.

Kevan Gospar, Chef der IOC-Pressekommission, zitiert lt. FAZ

Ein Sprecher der chinesischen Olympia-Organisatoren nannte den bereitgestellten Webzugang “ausreichend”. Das heißt im Klartext, Websites der BBC oder der Deutschen Welle werden auch während der olympischen Spiele auch im IOC-Pressecenter gesperrt sein. Die Spiele von Peking werden immer mehr zur Farce.

Update: Ein “wunderschönes” Zitat von Herrn Gospar ist mir gestern durchgerutscht: “Ich kann den Chinesen nicht erzählen, was sie tun sollen.” Was für eine Heuchelei! Das IOC schafft es sogar, eigene Gesetzte schaffen zu lassen, etwa das deutsche Olympiaschutzgesetz. Aber in China können sie angeblich nichts ausrichten. Welch ein Witz. Das IOC müsste m.E. nur mit einer offiziellen Rüge drohen und die Regierung in Peking würde kuschen, zu groß wäre sonst der Gesichtsverlust. Das IOC und Chinas Regierung sind halt beide autoritäre Altmännervereine, kein Wunder, dass die sich so gut verstehen.

Will iPhone kaufen! oder: T-Mobile ist die chaotischte Firma Deutschlands

Juli 16th, 2008

Ich habe heute T-Mobile offiziell zur chaotischten Firma Deutschlands gewählt. Warum? Weil ich seit Wochen versuche, ein iPhone zu kaufen. Vergeblich natürlich, denn der Verkäufer heißt T-Mobile. Bei all den Erlebnissen mit dem Laden wundert’s mich, wie deren Radsportteam es schaffte, jahrelang systematisch zu dopen. Denn dass bei denen irgendwas systematisch funktioniert ist einfach nicht zu glauben. Aber zurück zum iPhone.

Im alten iPhone fehlte mir ein GPS-Modul. Alle Welt redet von Location-Based-Services; deshalb war mir klar, mein nächstes Handy muss GPS haben. Also musste ich abwarten – bis Ende Juni die Mail von T-Mobile kam: ‘iPhone jetzt bestellen!’. Ich habe also sofort angerufen bei der Geschäftskunden-Hotline – und wurde eiskalt abgeblockt. “Nö, Sie können das iPhone nicht vorbestellen.” – “Aber Sie machen ja schon Werbung dafür!” – “Naja, aber das geht trotzdem nicht.” Okay, warte ich also noch ein wenig.

Am 1. Juli dann die erneute, noch penetrantere Ankündigung von T-Mobile, dass das iPhone nun zu bestellen sei. Ich versuche mein Glück erneut. Und in der Tat nimmt der nette Herr an der Hotline meine Bestellung mit all ihren Feinheiten – ich brauch die E-Mail-Flatrate nicht mehr und auch meine Datenoption ist künftig hinfällig – entgegen. In der Folge warte ich auf die übliche schriftliche Auftratsbestätigung, die aber nicht eintrifft.

Also versuche ich am 11. Juli, immerhin der hochoffizielle Erstverkaufstag, mein Glück erneut an der Hotline. Mein diesmaliger Berater erklärt mir, dass mein 1.-Juli-Berater Unsinn erzählt habe, denn das iPhone könne erst heute bestellt werden. Offenbar habe der 1.-Juli-Berater meine Bestellung nur aufgeschrieben, so der wiederum nette Herr im Callcenter, und werde sie heute im Laufe des Tages eingeben. Da ich das arg obskur finde, bietet mir nun der 11.-Juli-Berater an, die Bestellung jetzt gleich ins System einzugeben. Vor meinem geistigen Auge sehe ich schon, wie mir der Paketdienst zwei iPhones aushändigen will; aber da ich ein risikofreudiger Mensch bin, nehme ich den Vorschlag trotzdem an.

Der 11.-Juli-Berater gibt also sämtliche Daten ein. Auf meine ausdrückliche Nachfrage erklärt er mir, dass der neue iPhone-spezifische Tarif “Complete M” erst aktiv würde mit der Aktivierung des iPhones, welches mir “Mitte kommender Woche” – also so um den 16. Juli herum – zugehen werde. Letzteres zweifle ich zwar innerlich an, aber Hauptsache, das Ding ist bestellt. Meine ebenfalls mitbestellte zweite SIM-Karte sowie die Auftragsbestätigung würden bereits am Montag im Briefkasten liegen, so jedenfalls mein 11.-Juli-Berater. Natürlich kommt weder eine Auftragsbestätigung noch eine SIM-Karte am Montag. Und am Dienstag auch nicht. Da ich aber den Sauhaufen T-Laden schon kenne, rege ich mich nicht weiter darüber auf. Irgendwann wird’s schon klappen.

Inzwischen schreiben wir den 15. Juli, spätabends. Mein Handy präsentiert mir eine SMS, dass auf meiner Mailbox ein Anruf vermerkt sei – was mir komisch vorkommt, da ich keinen Anruf gehört hatte. Nun gut, kann passieren. Als ich die obligatorische 3311 wähle, soll ich nun plötzlich mein VoiceMail konfigurieren. Wie VoiceMail? Hat T-Mobile wieder ein neues Mailbox-System eingeführt und ich muss wieder alles neu einstellen? Nun gut, es ist schon spät. Ich leg mich erst mal schlafen.

Am nächsten Morgen, also am 16. Juli, werde ich von zwei neuen Mailbox-SMSen geweckt. Ich kämpfe mich durch die VoiceMail-Konfiguration, um die Anrufe abhören zu können: In der Tat waren drei Nachrichten gespeichert – aber die Anrufliste des Handys hatte keinen davon verzeichnet. Irritiert rufe ich die Hotline wieder an, denn inzwischen konnten irgendwelche Synapsen in meinem Kopf eine Verbindung zwischen “VoiceMail” und “iPhone” herstellen …

Der freundliche Herr von der Hotline ist dieses Mal eine freundliche Dame. “Ja”, so erklärt sie, “Ihr Tarif wurde bereits auf Complete M umgestellt.” Aha. “Nein, die Auskunft des 11.-Juli-Beraters war nicht korrekt, dass dies erst nach der Aktivierung geschehe.” Soso. “Ja, eine Vorbestellung war für Geschäftskunden nicht möglich, weil wir glaubten, genügend Geräte zur Verfügung zu haben.” Grandios. Und wann kommt denn nun mein iPhone, dessen Tarif ich bereits habe – und wohl auch bezahle? “Nein, diese Woche klappt das nicht mehr. Wir warten noch auf die Lieferung von Apple.” Toll. “Ja, nächste Woche sollte es klappen.”

Da möchte Apple mit dem neuen iPhone vor allem bei Geschäftskunden punkten und der Chaosverein T-Mobile schafft es nicht, diese zu beliefern. Vermutlich hat denen ein BWL-Frischling sündteurer McKinsey-Berater vorgeschlagen, den Vorbestellprozess für Businesskunden einzusparen, weil ja eh genügend iPhone zu erwarten seien. Bravissimo.

Warum die Anrufe direkt auf der Mailbox landen, konnte die 16.-Juli-Beraterin übrigens nicht nachvollziehen. Sie meinte, vielleicht wäre nur die Anrufzeit mit 15 Sekunden zu kurz und versprach, diese auf 30 Sekunden zu verlängern. Nun mag es ja sein, dass 15 Sekunden für mich zu kurz sind – aber mein Handy sollte doch in der Lage sein, einen Anruf innerhalb von 15 Sekunden in die Anrufliste zu schreiben. Aber darauf wusste sich die 16.-Juli-Beraterin keinen Reim zu machen.

Und die Moral von der Geschichte? Wer mich anrufen will, wird so lange nur meine Mailbox, ähm sorry: meine VoiceMail erreichen, bis ich endlich ein iPhone erhalte. Wann das sein wird, steht in den Sternen. Mein Tipp ist: Irgendwann im August. 2008.

Update:
Hach, von wegen August! Nachdem ich schon schlimmste Befürchtungen hatte wegen der Meldungen, das iPhone sei erst im Herbst wieder lieferbar, klingelte heute (22. Juli) um halb neun im Büro der Postbote und übergab mir ein kleine schnuckeliges Päckchen. Mein iPhone ist da! Aber ein Chaotenverein bleibt T-Mobile trotzdem.

Öko-Guerilla-Bloggerin vs. Tchibo – und die Rolle von Spreadshirt

Juni 19th, 2008

Was passiert, wenn eine Bloggerin bei Tchibo ein individuell angefertigtes T-Shirt bestellt mit der Aufschrift “Dieses T-Shirt hat ein Kind für Tchibo genäht”? Tchibo liefert brav und wundert sich hinterher über schlechte Publicity. Dieser Clou ist Kirsten Brodde gelungen, die sich für faire Arbeitsbedingungen in den Betrieben der großen Bekleidungshersteller einsetzt. Sogar SPON berichtet darüber.

Was allerdings zumindest im Spiegel-Bericht untergeht, ist die Rolle von Spreadshirt. Denn Tchibo kooperiert mit Spreadshirt, und letztere sind komplett für die Herstellung der Tchibo-T-Shirts verantwortlich. Und von einem hippen, coolen, webzweinulligen Betrieb hatte ich durchaus erwartet, dass sie sich zumindest etwas für die Produktionsbedingungen in den Fabriken ihrer Partner in Bangladesh und Co. interessieren. Was aber die Pressesprecherin Eike Sievert dazu zu erzählen weiß, ist schon fast Realsatire:

Woher kommen die Shirts von Spreadshirt, Frau Sievert? Von vielen hundert Zulieferern aus aller Welt, erklärt sie. Was wisse man über deren Produktionsbedingungen? Man ließe sich schriftlich zusichern, dass es keine Kinderarbeit gäbe. Glaube man das einfach? Wir können doch keine Leute nach Asien schicken, um Kontrollen zu machen, sagt Frau Sievert.

Quelle: kirstenbrodde.de

Derartige Ignoranz würde man erwarten von Konzernen wie eben Tchibo, aber nicht von einem Betrieb, der auf der Web2.0-Welle mitschwimmt und viel von Offenheit redet: Da gab es das “Open Logo Project” und auf der Website kann der geneigte Betrachter mittels Videos einen Blick in die Leipziger Büros tun. Und richtiggehend lächerlich wird das ganze, sieht man sich im Spreadshirt-Blog um. Da gab’s erst diese Woche einen Beitrag mit dem schönen Titel Menschenrechte auf Baumwolle?. Tolle Selbstbeweihräucherung – aber keine Ahnung haben von den Arbeitsbedingungen in den Textilfabriken, in denen diese T-Shirts produziert werden.

Using Boost C++ libraries with gcc / g++ under Windows

Mai 9th, 2008

A lot of the power of C++ comes from the STL, the C++ Standard Library. And even more power is available using the Boost libraries, which are about to become part of the upcoming new STL version. Thus, using Boost libraries in your project is not even very convenient, it will also guarantee compatibility between platforms and future STL releases. (To all you C++ gurus out there: I hope this short introduction is not too misleading.)

While the Boost libraries are easy to install on Unix machines and the Boost websites offers binaries for Visual C++ 2005, it is more complicated to use Boost on Windows with the GNU Compiler Collection (aka gcc). In fact, it took me several hours to figure out how to use Boost with my favourite IDE, Netbeans. Netbeans? The Java IDE from Sun? Yes, I prefer Netbeans over Eclipse, because Netbeans is easier to use, but it is still a full-featured IDE and it even has a great C/C++-Plugin.

After doing some experiments with MingW, I decided that Cygwin would be a better choice. (Maybe I was just to stupid to get things working with MingW.) Here’s what you have to do to get Boost, cygwin with gcc/g++ and Netbeans working under Windows.

  1. Install Cygwin. Make sure that you also install gcc, g++, boost, make and gdb – you should find all of them within the Devel section of the Cywin installer.
  2. Put your Cygwin home and Cygwin bin directory in your PATH variable. In my case I had to add C:\cygwin\home;C:\cygwin\bin; to my PATH variable. (Some help for changing the PATH variable.)
  3. Now open a windows command prompt and execute the following statements: ‘gcc –version’, ‘g++ –version’, ‘make –version’ and ‘gdb –version’. You should get something like this:
    C:\Dokumente und Einstellungen\sf>gcc --version
    gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
    Copyright (C) 2004 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  4. Now install Netbeans. After installation, open Tools – Plugins. Under “Available Plugins” you should see “C/C++”. Install this plugin and restart Netbeans.
  5. Now open, again in Netbeans, Tools – Options – C/C++. In the section “Build Tools” click “Add ..” and choose your Cygwin bin directory (C:\cygwin\bin) as your base directory and click “Okay”. Netbeans now finds all your compiler and make tools from the Cygwin installation.
  6. In the section “Code Assistance” you have to choose the sub-section “C++ Compiler”. Add the include directory for your Boost libraries: In my installation this is C:\cygwin\usr\include\boost-1_33_1. Click “Okay”.
  7. Create a new Netbeans C++ project and write some code. Right click your project and choose “Set Configuration – Manage Configurations …”. In the “C++ Compiler” section, include the path to your Boost libraries int the “Include Directories” folder. My path is C:\cygwin\usr\include\boost-1_33_1.
  8. In the “Linker” section put your Cygwin bin directory (C:\cygwin\bin) in the “Additional Library Directories” field. Then edit the “Libraries” field below: Click “Add Library File …”, change file type to “.dll” and choose the libraries you need for your project. For my small regex example, I need cyboost_programm_options-gcc-mt-1_33_1 and cyboost_regex-gcc-mt-1_33_1.
  9. While editing your C++ file, hit F6 and Netbeans will compile, link and start your programm. You’re finally done.

This is my example code:

#include <iostream>
#include <string>
#include <boost/regex.hpp>
using namespace std;
using namespace boost;
int main() {
    string s = "This is my simple sample text, really.";
    regex re(",|:|-|\\s+");
    sregex_token_iterator my_iter(s.begin( ), s.end( ), re, -1);
    sregex_token_iterator my_end;
    while (my_iter != my_end)
        cout << *my_iter++ << '\n';
    return (EXIT_SUCCESS);
}

You can also build this little program on the command line. Open your Cygwin Bash Shell and navigate to your code directory. (Cygwin maps your windows drives under /cygdrive – thus cd /cygdrive/c/ navigates you to your windows C:\ drive.)
To compile your source file called regexp.cpp, just type:
g++ -c -I/usr/include/boost-1_33_1/ -o regexp.o regexp.cpp
And to link and build it:
g++ -o regexp.exe regexp.o -lboost_program_options-gcc-mt-s -lboost_regex-gcc-mt-s
That’s all. Now type ./regexp.exe to start your compiled program.

Das Kreuz mit dem Logging

April 12th, 2008

Es gibt manchmal Artikel in anderen Blogs, die führen zu einem Aha-Erlebnis. Ein aktueller Fall ist der Beitrag The Logs That Bind … in dem vorzüglichen und relativ neuen O’Reilly-Blog Beautiful Code. Michael Feathers erzählt dort von einer interessanten Szene als er versuchte, einem Entwicklerteam beim Überarbeiten eines Programm zu helfen, das etliche sehr lange Methoden enthielt. “Das Allheilmittel dafür liegt üblicherweise auf der Hand: Refactoring”, erzählt Feathers – doch hier wurde er von den Entwicklern gestoppt. Denn in den Methoden waren zahlreiche Logging-Aufrufe enthalten, die jeweils den Namen der aktuellen Methode enthielten. Nachdem sie verschiedene Möglichkeiten durchdiskutiert hatten, wendeten sie sich einem anderen Codeabschnitt zu.

“Das erinnerte mich, wie sehr ich logging hasse”, war das Fazit von Feathers – und für mich der Augenöffner. Denn sofort fielen mit mehrere Projekte ein, die ich mit ziemlich sauberen Code begonnen hatte, die aber am Ende fürchterlich unstrukturiert waren, weil ich irgendwann Logging einbauen musste. Und, im Rückblick wird mir das erst richtig deutlich, mit dem Logging begann jeweils das Chaos, denn Logging bedeutet, Programmbestandteile zu koppeln, die an sich wenig miteinander zu tun haben (sollten).

Wenn Logging durch den Code wuchert, wird das Programm schwieriger zu verstehen und man ist zurückhaltend, Änderungen vorzunehmen. (…) Wenn du loggst, musst du die Abhängigkeiten, die damit eingeführt werden, beherrschen; wenn nicht, werden sie dich beherrschen.

Liest man den Beitrag zwischen den Zeilen, so lautet der unausgesprochene Rat von Feathers, möglichst auf Logging zu verzichten. Doch gerade Anwendungen, die viel mit dem Web bzw. mit diversen Webseiten kommunizieren, kommen ohne Logging nicht aus. Ein Webcrawler braucht das Logging als quasi integralen Bestandteil: Milliarden von Seiten auf Millionen von Webservern, die alle ihre eigene Konfiguration haben. Mit Unit-Tests ist dieser Vielfalt nicht Herr zu werden, also bleibt nichts anderes übrig als ein de facto nicht ausreichend getestetes Programm in die freie Wildbahn zu entlassen. Ohne Logging ist das fahrlässig.