27. Februar 2011 von KG
Schon seltsam: Spiegel Online beschreibt den Titel-Betrüger Guttenberg als “adligen Minister”, die Zeit (Printmedium: der Tagesspiegel) schreibt von Geschehnissen im “Reichstag”. Beides vulgo verständlich, inhaltlich aber höchst bedenklich: Der Adel ist mit der Weimarer Reichsverfassung vom 11.09.1919 zum 14.08.1919 abgeschafft, den Reichstag finden wir nur noch als Reichstagsgebäude vor, das Organ ist seit dem Grundgesetz vom 23.05.1949 der Bundestag. Hat das Methode oder sind die Journalisten hier einfach nachlässig?
22. August 2010 von KG
Immer wieder kommt es vor, dass Dateien, die jemand unter Windows in ein Archiv (insb. zip und 7-zip) gepackt und mir geschickt hat, in den Dateinamen nach dem Entpacken anstelle bestimmter Sonderzeichen (Umlaute oder Akzente) lediglich Platzhalter aufweisen (auf Terminals normalerweise ein ‘?’ [Fragezeichen] unter Nautilus üblicherweise dieses Zeichen: ‘’ [was auch immer]).
Abhilfe schafft convmv (kann auf allen größeren Distributionen über den jeweiligen Paketmanager installiert werden).
Bei mir hilft normalerweise folgender Befehl, um sämtliche Dateinamen (inkl. Verzeichnisnamen) rekursiv zu konvertieren(–notest auslassen, um das Ergebnis zuvor zu prüfen):
convmv -f cp852 -t utf8 --nfc -r --notest [Pfad]
Mit
werden alle unterstützten Encodings angezeigt.
20. August 2010 von KG
Sobald du deinen Fernseher einschaltest, bist du in Gefahr. Wie beim Geruch von Schimmelsporen einer verseuchten Wohnung bemerkst du vielleicht nicht, dass dein Gehirn kontaminiert wird.
Der Emojournalismus greift an. Tom Schimmeck umreißt in seinem lesenwerten Buch Am besten nichts Neues im Kapitel Gefühlsecht dieses Phänomen. Im “klassischen” Journalismus sollen die Nachrichten die Fragen Wer-Was-Wann-Wo-Warum möglichst im ersten Satz beantworten. Der Emojournalismus zielt aber darauf ab, Rezipienten ein “Gefühlserlebnis” zu vermitteln und diese zu unterhalten.
Ausgerechnet in Sol Steins Buch Über das Schreiben, das sich dem fiktionalen und nichtfiktionalen Schreiben gleichermaßen widmet (Exerpt hier), finden sich zahlreiche Beispiele, wie man Nachrichten anreichern und spannend machen soll.
Die lapidare Begründung Steins für das emotionale Aufblähen von Fakten ist, dass der Mensch im 20.en Jahrhundert sich geändert habe durch die von Film und Fernsehen geprägten Rezeptionsgewohnheiten.
Dieser Ansatz ist fehlerhaft und gefährlich:
- Diskursfähigkeit: Bei journalistischen Nachrichten geht es darum, Inhalte zu vermitteln. Auf Grundlage der Fakten beginnen wir, diese zu reflektieren und die Fakten einzuordnen. Nur auf Grundlage von Fakten kann ein sinnvoller Diskurs geführt werden. Die Methodiken des Creative Writing zielen bewusst darauf ab, den Leser zum Lesekonsumenten zu machen, der nicht aus dem Lesefluss gerissen wird. Unverhohlen wird dabei auf die Kaufentscheidung des Lesers in der Buchhandlung abgezielt, der möglichst nach dem Lesen des ersten Satzes das Buch so spannend findet, dass er es sofort weiterlesen möchte.
Mit diesen Methodiken bläht man aber Inhalte auf und verbirgt und “streckt” Fakten, während man die Leser mit spannenden Erzähltechniken bei der Stange hält.
Wer dieses Prinzip auf journalistische Nachrichten überträgt, verschleiert oder verdrängt Fakten. Aus dem Infodump im Diskurs – um im Jargon zu bleiben – würde ein “Emodump”. D.h., anstelle beim Diskurs mit Fakten zu argumentieren, blieben lediglich Emotionen. Damit wäre jeder politische Diskurs ad absurdum geführt, da die politisch relevanten Inhalte fehlten.
- Mangelnde Differenzierung der journalistischen Darstellungsform: Stein vermengt die journalistischen Darstellungsformen. Für eine Dokumentation kann es durchaus nützlich sein, die Rezipienten in die Sichtweise Betroffener etc. zu versetzen, um dadurch z.B. Mitgefühl hervorzurufen. Ebenso wird ein Leitartikel die Leserschaft mit einer geschickten Einleitung fesseln. Hinsichtlich der Tatsachenvermittlung ist das aber unangebracht. Nicht verwunderlich ist deshalb, dass die meisten journalistischen Nachrichten-Beispiele Steins aus der Rubrik “Panorama/Vermischtes” stammen oder aber Nachrichten plötzlich zu Berichte/Reportagen umwandeln.
- Erzeugen von (Massen-)Hysterie: Wer Menschenmengen überemotionalisiert, erzeugt Massenhysterie. Auch als Deutsche im 21.en Jahrhundert dürften wir nicht gänzlich vergessen haben, welche Auswirkungen dies haben kann. (Michael Moore zeigt in Bowling for Columbine zeitgemäße Implikationen auf.).
- Entfernen und Umschreiben relevanter Informationen: In 1.) angedeutet: Je mehr Zeit (TV/Radio) und Platz (Printmedien, Internet) der Darstellung von Emotionen gewährt wird, desto weniger Fakten können präsentiert werden. Je weniger Fakten dargestellt werden, desto weniger Fakten können erinnert werden. Je weniger Fakten erinnert werden, desto einfacher ist es, Fakten “kreativ umzudeuten”. Ein schönes Beispiel ist die bei einem Attentat getötete Benazir Bhutto, der zusammen mit ihrem inhaftierten Ehemann gemeinschädliche Korruption nachgewiesen wurde, die aber 2007 zu einer “Lady Di” der Demokratie in allen westlichen Medien bis hin zur Guardian oder taz stilisiert wurde. Hier wurden die Korruptionsvorwürfe – vor dem Attentat (danach scheint das de mortuis nil nisi bene immer noch zu funktionieren) – nirgends recherchiert/erwähnt. 1984.
- Falsches Ziel: Sol Stein und viele Creative-Writing-Ratgeber behaupten, Ziel der guten Erzählung sei, Gefühle zu vermitteln. Das ist falsch und würde die Prinzipien des Spektakelkinos auf das Erzählen übertragen. Der eigentliche Wert der Literatur, das, was sie vom Film abgrenzt, ist, dass sie nicht nur Gefühle, sondern Erfahrungen vermitteln kann. Schwanitz beschreibt dies sehr eindrücklich.
PS: Ich habe den Fernseher abgeschafft. Und hoffe immer noch auf eine Tagesszeitung, die es zu abonnieren lohnt.
7. August 2010 von KG
Als Eigentümer eines HTC Desire bin ich sehr an dem Update auf das aktuelle Android-Betriebssystem FroYo (“Frozen Yogurth”) interessiert. Da mein Gerät aber kein Original-ROM von HTC aufweist, sondern offenbar von T-Mobile UK stammt (was lediglich in einem unterschiedlichen Bootlogo und -geräusch und T-Mobile-Lesezeichen zu erkennen ist), scheint mir das Update für längere Zeit vorenthalten zu bleiben: HTC verteilt die Over-The-Air (OTA-) Updates lediglich für Geräte mit einem Original-ROM.
Um das Update zu erhalten, versuche ich nun, das T-Mobile-ROM durch ein originales ROM zu ersetzen (im Jargon: zu “debranden”).
Hierzu benötigt man eine “Goldcard”, eine speziell präparierte Micro-SD-Karte.
Dazu gehe ich wie folgt vor (in diesem Fall auf einem Windows XP SP3 mit Administratorrechten, da mir kein anderer Rechner zur Verfügung steht):
HTC Desire Debranding
Goldcard-Image holen:
- Inhalt der Micro-SD-Card gesichert.
- Micro-SD-Card mit FAT32 formatiert.
- GoldCard Helper auf dem HTC Desire installiert.
- Micro-SD-Card eingelegt und GoldCard Helper aufgerufen.
- Reverse-CID auf PSAS eingegeben, E-Mail-Adresse mitgeteilt und rückwendend E-Mail mit dem GoldCard-Image erhalten.
- Micro-SD-Card aus dem Mobiltelefon entfernt, in einen Cardreader gesteckt und mit dem Rechner verbunden.
- HxD aufgerufen und über Extras->Datenträger öffnen die als Laufwerk eingebundene Micro-SD-Card unter Physische Datenträger geöffnet, dabei die Checkbox Schreibgeschützt öffnen deselektiert.
- Im HxD über Extras->Datenträgerabbild öffnen das lokal gespeicherte GoldCard-Image (Dateiname goldcard.img) geöffnet und alle Zeilen bis einschließlich 170 markiert und kopiert (Strg+c).
- Im HxD jetzt zum Micro-SD-Card-Laufwerk gewechselt, die Zeilen bis einschließlich 170 markiert und Bearbeiten->Einfügen gewählt (Strg+v).
- Jetzt in HxD gespeichert (Strg+s) und den Warnhinweis bestätigt.
Das Entnehmen und Wiedereinfügen der Micro-SD-Card ergibt beim erneuten Öffnen mit HxD, dass sich die Zeilen bis einschließlich 170 jetzt tatsächlich dem GoldCard-Image entsprechen. (Anmerkung dazu: Beim einem Versuch mit der im Telefon eingelegten Karte und Verbindung über USB wurden die Bytes 04-07 in Zeile 100 nicht überschrieben, dies funktionierte erst bei der Verbindung über den Kartenadapter.).
Jetzt die Karte (nun eine GoldCard
) wieder ins Desire eingelegt, das Gerät gestartet und das aktuelle 2.1-ROM installiert (vorher insbesondere SMS und MMS und ggf. Kontakte sichern!), das ist zur Zeit: RUU_Bravo_HTC_WWE_1.21.405.2_Radio_32.36.00.28U_4.06.00.02_2_release_126984_signed.exe.
(RUU steht für “ROM Upgrade Utility” – man muss das ROM nicht manuell übertragen/flashen, sondern wird assistentenbasiert geführt.).
Das funktionierte alles soweit – das Desire bootet mit dem ROM ohne Branding. Allein – beim Versuch, manuell über Einstellungen->Telefoninfo->Systemsoftware-Updates->Jetzt prüfen zu aktualisieren, folgt die Fehlermeldung “Das Telefon befindet sich auf dem neuesten Stand – Es stehen keine Updates für das Handy zur Verfügung.”
Hm. Sehr unerfreulich. Der Versuch mit einem anderen ROM scheiterte ebenfalls. Möglicherweise liegt das daran, dass bei HTC die IMEIs der Information zugeordnet sind, ob es sich um ein gebrandetes Modell handelt. Vielleicht habe ich auch etwas falsch gemacht.
Wie auch immer, ein Artikel auf handy-faq.de überzeugt mich, das Update über ein gerootetes OS zu beziehen.
HTC Desire rooten und mit Froyo versehen (unrEVOked-Methode)
unrEVOked bietet ein nettes Utility an, um bestimmte HTC-Geräte (u.a. das HTC Desire) einfach und “schmerzlos” zu rooten und beliebige ROMs aufzuspielen. Ich gehe wie folgt vor:
- HTC Sync auf dem Windows-XP-Rechner deinstallieren und Rechner neustarten.
- Auf dem Telefon die Option Einstellungen->Anwendungen->Entwicklung->USB-Debugging aktivieren.
- reflash_package.exe herunterladen und entpacken/installieren.
- Die Anleitungen zur Treiberinstallation in der Datei hboot driver.htm im entpackten Verzeichnis befolgen. Also im Wesentlichen: Telefon herunterfahren, mit gedrückter “Lautstärke verringern”-Taste einschalten (HBOOT), per USB anschließen und die Treiber im Unterverzeichnis hboot driver_files mit dem Treiberassistenten installieren.
- reflash.exe aufrufen. Der Rootvorgang erfolgt – sofern das Telefon erkannt wird – vollautomatisch zum Schluss sieht man eine Erfolgsmeldung.
- Jetzt folge ich den Anweisungen auf XDA-Developers. Also:
- 32.43.00.32U_5.09.00.20.zip downloaden und auf die SD-Karte des HTC Desire kopieren, ebenso Official_FroYo_Market_fixed.zip.
- Erneut das HTC Desire in den Recovery-Mode booten (Lautstärke verringern + Einschaltknopf).
- Mit nandroid das aktuelle ROM sichern. (Menüpunkte lassen sich mit den Lautstärketasten ansteuern, zum Auswählen auf den optischen Trackball drücken).
- Jetzt wipe data/factory reset wählen.
- Danach über das Menu install zip from sdcard das “Radio-ROM” 32.43.00.32U_5.09.00.20.zip installieren und erneut in den Recovery-Mode booten.
- Schließlich Froyo Official_FroYo_Market_fixed.zip über den Menüpunkt install zip from sdcard installieren.
Nach einem weiteren Neustart ist Froyo (Original-HTC mit wenigen Änderungen wie z.B. dem entfernten nervigen Bootsound) verfügbar .
Endlich kann ich auch screenshot verwenden:

27. Juni 2010 von KG
Nun ist Adobe AIR in Vers. 2 seit Mitte Juni 2010 verfügbar. Nach wie vor wird Linux stiefmütterlich behandelt: Für den Betrieb unter einem 64-Bit-Linux muss man sich zufriedenstellen mit einem völlig behelfsmäßigen 32-Bit-Layer, der umständlichst zusammengefrickelt wird: http://kb2.adobe.com/cps/521/cpsid_52132.html#ins_air2_64bit_ubuntu904
Ich mochte Flash noch nie: Mag es den schlechten Entwicklern zuzuschreiben sein, oder der Technologie: Tastaturunterstützung wird nur selten und dann meist extrem instringent angeboten.
Die Flash-Anwendungen nehmen gern die gesamte Rechenleistung dauerhaft in Anspruch (auf meinen Linux-Rechnern, “nbviewer.bin”), selbst nach Beenden des Browser-Threads.
Eingebettet in Webseiten sind Flash-Anwendungen oft nur in einer hartcodierten Auflösung verfügbar und passen damit meistens nicht richtig ins Browserfenster (aktuell zum Beispiel die Adobe-Hauptseite, was für ein technologisches Problem spricht. [Einfach mal mit gedrückter Strg-Taste das Scrollrad auf- oder abrollen.]).
Dass zum Beispiel der Software & Support-Verlag mit seinem “Intellibook” auf AIR setzt, dürfte in diesem Zusammenhang interessant sein. “Die müssten es doch wissen” – immerhin könnte der Verlag sicherlich auf das Know-How und Feedback seiner Autoren zurückgreifen.
Tatsächlich funktionert die Anwendung auf keinem meiner Linux-64-Bit-Systeme, weil ein 32-Bit-Acrobat erwartet, aber nicht gefunden wird (dazu ggf. ein gesonderten Eintrag). Tastaturbedienung ist nicht möglich, einen HTTP-Proxy einzutragen, eine Tortur, Login und Passwort können auch nicht gespeichert werden etc. etc. etc.
Das Marketing von Flash und AIR funktioniert wirklich prima. Nur die Software nicht.
24. Juni 2010 von KG
Kürzlich erst erfahren, dass sich der TV-Unterhalter Stefan Raab im Jahr 2005 die Wortmarke “Schland” sicherte (zum ganzen ein Wikipedia-Artikel “Schland o Schland“).
Wenn aber der selbsternannte “Wortwart der Nation”, Detlef Gürtler, erklärt, Stefan Raab hätte das Wort Schland erfunden, irrt er.
Ich behaupte, dass jeder halbwegs selbständig denkende Abiturient, der Leistungskurs Geschichte oder Deutsch gewählt hat und über einer Klausur zum Thema Deutschland i.w.S. brütet, beginnt, das Wort zu sezieren und mit den Silben herumzuspielen, um schließlich über die Bedeutungsmöglichkeiten des Wortes “Schland” zu sinnieren .
Das war jedenfalls in meinem Freundeskreis eine allgemein geteilte Erfahrung.
Immerhin hab ich das nachweislich festgehalten in einem Tagebucheintrag, der so schlecht ist, dass es mir die Schamesröte ins Gesicht treibt. Nicht meines mangelnden Patriotismus wegen. Da bekenne ich gern, dass ich mich nicht so sehr als Deutscher, denn als Europäer sehe, dem Italien, Österreich, die Schweiz, Großbritannien, und Frankreich genausoviel wie Deutschland bedeuten.
Aber dann doch nicht so sehr als Europäer denn als Wesen, das auf diesem Planeten lebt und diesem alles verdankt. Der die Gemeinsamkeiten zu allen Menschen lieber sieht und aufzudecken versucht als die Unterschiede, die vorhanden sind z.B. zwischen den Frohnauern, die jenseits und diesseits des Ludolfinger Platzes wohnen, zwischen Reinickendorfern und Zehlendorfern, Berlinern und Potsdamern, Brandenburgern und Bayern, Deutschen und Holländern, Europäern und Afrikanern etc.
Was mich peinlich berührt ist, wie miserabel und bodensätzig dieser – im Tagebuch immerhin durchgestrichene, d.h. verworfene – Eintrag vom 21.02.1992 daherkommt. Wie humorlos (von den letzten beiden Punkten abgesehen).
Sei’s drum, das Wort “Schland” kommt eindeutig darin vor, damit beanspruche ich den zeitlichen Primat
Deutschland.
Deut, deut, deut -
die [Dichter und] Denker
Schland, Schland, Schland -
[die Richter] und Henker.
Die D Oi Oi tschand.
Der Deutschen
deutsche Vita:
Bier, Stumpfsinn und Überheblichkeit.
----------------
In Reit im Winkel
kegeln und brüllen
saufende Vereine.
Bis zur Wi_dervereinigung...
"Was war da noch mit Schlesien?"
----------------
'''Mein''' ''Deutschland'', die Fiktion,
war immer schon vernichtet,
der Traum der Exilanten,
war immer nur ..
23. Juni 2010 von KG
Wer behauptet, das Theater sei tot, schaue sich zum Beispiel “Dämonen” in der Schaubühne an und staune.
Das Stück des schwedischen Dramatikers Lars Norén handelt von Zwang. Zwang, der angstgetriebene Menschen davon abhält, ihre Vorstellungen von Freiheit und Nähe zu verwirklichen, was zu brutalen Aggressionen gegen sich und ihr Umfeld führt.
Diese Problematik ließe sich auch mit dem Repertoire vergangener Jahrhunderte umsetzen (etwa Onkel Wanja).
Ein zeitgenössisches Stück überzeugt mehr: Dynamik, die sich aus gesellschaftlichen Konflikten ergibt, muss nicht herausgefiltert oder bemüht umgedeutet werden. Es genügt, die finanzielle Lage (wohlhabend – nicht so wohlhabend, beide Paare in einer Mietwohnung lebend) und die personelle Lage (keine Kinder – zwei Kinder) anzudeuten, um der Psychotragikomödie freien Lauf zu lassen.
Die perfekte Bühnenbild- und Videotechnik, die detailbetonte Inszenierung, lassen den Betrachter an einem Schauspiel aus unserer Zeit, für uns, teilhaben, wie es keine klassische Repertoireinszenierung vermöchte.
Das überragende Spiel von Lars Eidinger, dessen Facettenreichtum (letztlich drei ausgeprägte Psychosen über-, durcheinander) von Video-Close-Ups besonders wirksam verstärkt wird und von Brigitte Hobmeier, der es gelingt, Katarinas Teufelskreis aus emotionaler und materieller Abhängigkeit, Hass, Aggression und Schwäche in immer wieder neuen Pirouetten vorzuführen, lässt über gewisse Längen und Instringenzen hinwegsehen.
Mich verwunderte schließlich, dass Schauspieler und Schaubühne dieses brillante Spiel offensichtlich unter das des aktuellen Fußballspiels stellten: Insgesamt acht Hinweise auf das WM-Spiel, einschließlich des Spielstands, zählte ich mit. Hier hätte ich mir bewusste Irreführung gewünscht oder einen anderen Weg, denjenigen im Publikum eine zwanghafte Abhängigkeit vorzuführen, die lieber auf einen Fernseher gestarrt hätten als das packende Geschehen auf der Bühne zu verfolgen.
11. Juni 2010 von KG
Sehr unregelmäßig versuchen wir, im Familienkreis (mit drei Kindern) Videos zu betrachten, etwa aus der Sendung mit der Maus, Muppets oder Barbapapa.
Leider zickt hierbei regelmäßig und zuverlässig auf dem Notebook (mit Ubuntu Lucid/10.4) die Soundausgabe.
Dieser Link half mir, den Ton überhaupt zurückzuerhalten, wiewohl die Feinjustierung der Lautstärke (immer viel zu laut) bislang noch nicht gelang.
Die Kinder, anfänglich von Linux begeistert, denken, Linux wäre das Betriebssystem für Menschen, die nicht hören können.
3. Juni 2010 von KG
Ein Problem, das in Foren und Bugtrackingeinträgen immer wieder auftaucht, ist folgendes: Man öffnet oder erstellt eine Datei mit OpenOffice. Die Datei ist auf einem Samba-Share gespeichert. Beim Versuch, die Datei nach einer Änderung zu speichern, erhält man eine Fehlermeldung wie etwa
“Error creating object. Could not create backup copy”.
Das Problem trat – bei mir – nur auf Linux-Clients auf. Diese verbinden sich via CIFS mit dem Samba-Share. Um genauer zu sein: Mit autofs und zwar, wie hier beschrieben.
Mir gelang es trotz vieler Versuche und Einstellungsänderungen (seitens Samba, seitens der smbclient-Optionen) nicht, diesen Fehler zu beseitigen.
Bis ich auf Charlie Harveys Artikel gestoßen bin, der zumindest eine Lösung parat hält: Die Option nobrl (no byte range lock), mit der verhindert wird, dass Dateien so gelockt werden, dass wahlfreier Zugriff auf einzelne Abschnitte durch mehrere Anwendungen möglich ist (siehe Wikipedia [en]).
Mit der Zeile
* -fstype=cifs,nobrl,credentials=/home/[username]/.smb/[workgroup],directio,domain=[workgroup],iocharset=utf8 ://${host}/&
in der /etc/auto.[workgroup].sub und einem Neustart von autofs ist dieses nervige Problem behoben
22. Februar 2010 von KG
Auch wenn es einige gewichtige Argumente gegen Git gibt: Bei der Lektüre von Scott Chacons Buch Pro Git (gedruckte Version) wird mir das ganze Potential der postklassischen Versionskontrollsysteme klar: Auch wenn mir das Offline-Branching bislang immer am wichtigsten war (auf diese Weise kann ich im Zug einfach einen experimentellen Branch erstellen), bietet die Idee, stets das Repository bei sich zu führen (von Server-Hooks abgesehen), doch erheblich mehr Vorteile.
Zudem gefällt mir besonders gut, dass man Versionen einer Datei auch dann wiederherstellen kann, wenn der Branch (sollte eigentlich “das Branch” heißen, aber dagegen sträubt sich mein Sprachempfinden) gelöscht wurde. Das ist in Subversion z.B. nicht möglich. Ebenso ist das Konzept des “Staging” (geänderte Dateien werden erst nach einem expliziten Stage-Befehl committed [kann man auch deaktivieren]) für mich sehr nützlich – in Subversion habe ich bislang (vor allem graphisch) andersherum gerade in größeren Projekten gearbeitet: Aus der Fülle der geänderten Dateien musste ich immer die “herauspicken”, die nicht committet werden sollten, was sehr zeitraubend war. Jetzt geht es andersherum: Nur die Dateien, die wirklich wieder ins gemeinsame Repository sollen, gehen nach “Staging”, alle anderen bleiben erst einmal lokal.
Nun beleuchtet Zack Voase in seiner Gegenüberstellung des Quellcodes Gits und Mercurials, dass für eine vergleichbare Funktionalität ein Quellcodeverhältnis von 10 (Git) zu 1 (Mercurlal) vorhanden ist.
Da frage ich mich natürlich, wann endlich der Git-Nachfolger programmiert wird. Und zwar in Scala
1. September 2009 von KG
Ein Umstand, der in Unternehmen auf Entscheiderebene außerhalb des IT-Umfelds gerne verdrängt wird: Softwareentwickler sind Spezialisten und benötigen deshalb spezielle Hardware. Wer denkt, dass “Software schreiben” ungefähr mit dem Schreiben von Textdokumenten vergleichbar ist, liegt in etwa so richtig wie jemand, der meint, Autofahren hieße, auf einem Stuhl zu sitzen und beide Füße unregelmäßig auf- und abzubewegen.
Oberflächlich mag der typische Softwareentwickler Quellcode schreiben, was nicht so entfernt vom Schreiben von Textdateien zu sein scheint.
Tatsächlich ist der Quellcodeeditor nur ein Bestandteil von vielen, die die Integrierte Entwicklungsumgebung (“IDE”) eines Entwicklers ausmachen: Damit der Quellcode überhaupt ausgeführt werden kann, muss er kompiliert werden. Bisweilen muss ein Entwickler während der Ausführung des Programms an bestimmten Stellen den Ausführungsfluss Schritt-für-Schritt überwachen (“debuggen”), wozu die Anwendung in den Arbeitsspeicher geladen werden muss.
Der Quelltext bewegt sich auch nicht im luftleeren Raum: Anwendungen werden in Projekte und Bibliotheken aufgeteilt, häufig handelt es sich um einige hunderte bis tausende Dateien, die gemeinsam kompiliert und in den Arbeitsspeicher geladen werden müssen. Allein das Lesen der Quelltexte und das Erstellen der Kompilate kann bei mittelgroßen Anwendungen mehrere Minuten, bei größeren sogar viele Stunden andauern.
Auch wenn IDEs inkrementelles Kompilieren ermöglichen, wird des öfteren ein “Build” (alle Kompilate und dazugehörige Dateien) wieder gelöscht und vollständig neu erstellt.Zudem sind Softwareanwendungen im Unternehmensumfeld verteilt und kommunizieren mit Datenbanken, anderen Systemen und/oder der im Unternehmen eingesetzten Middleware.
Normalerweise ist der Entwickler bestrebt, auf seinem Rechner die Bedingungen, unter denen seine Anwendung später ausgeführt werden soll, en miniature nachzubilden: Auf diese Weise ist er unabhängig von Wartezeiten und kann ggf. auch offline (z.B. im Zug) arbeiten.
Was deshalb wirklich entscheidend für einen Entwicklerrechner?
Die Leistung:
Ein Softwareentwickler benötigt ein für seine Ansprüche äußerst leistungsfähiges System, was sich insbesondere auf
a) die Festplatte
b) den Hauptspeicher
c) die CPU und
d) Grafikkarte + Display bezieht.
Die Festplatte ist deshalb so wichtig, weil zum Erstellen von “Builds” oft tausende Dateien gelesen und geschrieben werden. Normalerweise liegt in langsamen Festplatten der Schwachpunkt von Entwicklersystemen (abgesehen von Virenscanner, die die Buildverzeichnisse überwachen). Sinnvoll können hier Solid State Discs (flash-basiert) oder RAID-Systeme (RAID 0 oder 0+1, aber nicht 5) mit SATA oder SAS sein, die den Datendurchsatz erhöhen.
Der Hauptspeicher muss sehr großzügig dimensioniert sein: Zur Zeit sollte ein Rechner für die Anwendungsentwicklung verteilter Systeme über mindestens 8 GByte Hauptspeicher verfügen, besser wäre gleich das Doppelte (einige Notebook-Workstations bieten mittlerweile 16 GByte an).
Softwareseitig bedingt dies den Einsatz von 64-Bit-Betriebssystemen.Wird mit virtuellen Maschinen gearbeitet (was immer mehr zunimmt), ist ein Mehrprozessor- wenigstens ein Multicoresystem sinnvoll. Um die Fülle an Informationen einer IDE wie Eclipse, Netbeans oder Qt auf einen Bildschirm zu bekommen, empfiehlt sich zudem ein hochauflösendes Display und eine entsprechende Grafikkarte.
Wie separat dargelegt, macht sich eine Leistungssteigerung bei Entwicklerrechnern schnell bezahlt. Um Entscheidern (und nach besserer Hardware strebenden Entwicklern) eine objektivere Entscheidungsgrundlage an die Hand zu geben, würde ich mir einen Benchmark wünschen, der
a) die Leistungsfähigkeit eines Systems hinsichtlich der o.a. Kriterien für einen Entwicklerrechner misst,
b) kostenlos verfügbar,
c) plattformunabhängig und
d) einfach bedienbar ist.
Ein Benchmark der mit Referenzprojekten arbeitet, der gängige IDEs startet, auf denen kleine, mittelgroße und große Referenzprojekte mit der IDE erstellt werden, wobei dies noch mit parallel laufenden Middlewareservern kombiniert werden sollte.
Falls jemandem ein solcher Benchmark bekannt ist, wäre ich dankbar für einen Hinweis ()! Interessenten, die ein derartiges Projekt auf die Beine stellen möchten, können mich gerne ansprechen.
30. August 2009 von KG
In Unternehmen verdrängen Entscheider außerhalb des IT-Umfelds gerne, dass Softwareentwickler Spezialisten sind und deshalb spezielle Hardware benötigen. Wer denkt, dass “Software schreiben” ungefähr mit dem Schreiben von Textdokumenten vergleichbar ist, liegt in etwa so richtig wie jemand, der meint, Autofahren hieße, auf einem Stuhl zu sitzen und beide Füße unregelmäßig auf- und abzubewegen.
Tatsächlich ist das Schreiben von Quellcode nur die Spitze des Eisbergs: Auf dem Entwicklerrechner wird dieser Quellcode nicht nur zu ausführbarer Software gemacht, sondern häufig eine vollständige Simulation der Unternehmensanwendungen ausgeführt, in deren Umgebung die Software verwendet werden soll. Also Datenbanken, Webserver, E-Mail-Server etc. etc.
Für den Entwicklerrechner bedeutet dies, dass er um ein Vielfaches leistungsfähiger sein muss als die Rechner, die man zur Erfüllung von Büroaufgaben verwendet.
Im Gegensatz zu Joel Spolsky statten viele Unternehmen ihre Softwareentwickler aber mit billiger Standardbürohardware aus. Meist muss schon die Aufrüstung des Arbeitsspeichers gesondert beantragt werden.
Was bedeutet das für die Entwickler? Vor allem müssen sie längere Wartezeiten in Kauf nehmen: Beim Kompilieren, beim Debuggen und Testen ihrer Anwendungen sowie beim Starten der IDE.
Was bedeutet das für die Unternehmen? Berechnen wir das einmal an einem Beispiel (aus meiner Praxis):
Die Entwickler eines größeren Finanzdienstleisters arbeiten mit Eclipse, die Anwendung wird in der Programmiersprache Java erstellt und ist in 10 voneinander abhängige Projekte (genauer: Maven-Module) gegliedert. Insgesamt handelt es sich um über viertausend Dateien, die kompiliert werden müssen (zuzügl. einiger Konfigurationsdateien).
Der durchschnittliche Rechner der Entwickler benötigt für das Erstellen eines Builds eine knappe halbe Stunde (mit Virenscanner über zweieinhalb Stunden).
In dieser Zeit können die Entwickler zumindest nicht programmieren, häufig nicht einmal mehr E-Mails lesen, weshalb der Arbeitsalltag so ausgerichtet ist, dass vollständige Builds zum einen vermieden und zum anderen auf den Morgen (Rechnerstart – Zeit für einen Kaffee) und die Mittagspause verlegt werden.
Im Team wird verteilt gearbeitet und regelmäßig integriert (d.h., Entwickler, die an Modul A arbeiten, stellen ihre Änderungen zur Verfügung, Entwickler, die an Modul B arbeiten, holen sich die aktualisierten Quelltexte von der Versionsverwaltung, was häufiger zur Folge hat, dass ein vollständiges Build erzeugt werden muss), wodurch zwei vollständige Builds am Tag die Regel sind.
Gehen wir vorsichtig von einem Durchschnittsgehalt von 60 T EUR für einen Entwickler mit mehr als sechs Jahren Berufserfahrung aus, ergeben sich folgende Kosten (Berechnungsgrundlage 223 Arbeitstage: 365 Kalendertage abzügl. Wochenenden (104 Tage), Feiertage (8 Tage) und Urlaub (30 Tage), 40-Stundenwoche):
Stundensatz
60.000 / 223 / 8 = 33,62 EUR
Auf zwei Builds zu je einer knappen halben Stunde am Tag bezogen bedeutete dies im ungünstigsten Fall (die Entwickler warten einfach nur, während das Build erstellt wird und sind ansonsten nicht weiter produktiv) jährliche Kosten von
223 x 33,62 EUR = 7.497,26 EUR pro Entwickler und
16 x 7.497,26 EUR = 119.956,16 EUR für das aus sechzehn Personen bestehende Team.
Die Verdopplung des Arbeitsspeichers und der Einbau schnellerer Festplatten bewirkte, dass ein vollständiges Build in gut 15 Minuten erstellt werden konnte.
Vergleicht man die Kosten für die Aufrüstung pro PC (450,- EUR für die Hardware, etwa 150,- EUR Personalkosten [Einbau durch Supporttechniker, Procurement] ) sieht man sofort, dass sich selbst bei einem geringeren Produktivitätsausfall als 100 % eine Investition in bessere Hardware schnell amortisiert:
Ersparnis rein rechnerisch:
119.956,16 EUR / 2* = 59978,08 EUR abzüglich 9.600,- EUR Hardwarekosten = 50.378,08 EUR
*Halbierung der Kompilierzeit
(Aufs Jahr bezogen wird somit eine Aufrüstung rentabel, sobald die festgestellte Produktivitätseinbuße bei über 8% liegt, was in jedem Fall gegeben ist.).
Weiterhin ist interessant, dass dieselben Rechner auch allen extenen Beratern zur Verfügung gestellt wurden. Deren Stundensatz lag dabei weitaus höher, wodurch sich die Investition noch schneller amortisierte.
Positive Seiteneffekte des Einsatzes leistungsfähigerer Entwicklerrechner sind zudem verbessertes Time-To-Market (offensichtlich) sowie ein besseres Betriebsklima (lange Buildzeiten frustrieren Entwickler, schnelle Rechner hingegen erfreuen sie).
27. Juni 2009 von KG
Das Bedürfnis, Reparaturen im Haushalt zu erledigen, wird mittlerweile bei vielen verdrängt durch den Wunsch, die eigene Software zu “reparieren”: Wir müssen die alltäglichen Anwendungen aktuell halten und das Betriebssystem, sogar für mobile Geräte; mal müssen Kontaktdaten gepflegt und von einem Social Network zum anderen synchronisiert werden, mal die Skindateien für den Audioplayer. Die Karten des Navigators sind aktuell zu halten und letztens kam der Kundendienst vorbei, um die Waschmaschine zu patchen.
Sicherlich werden Updates manchmal vereinfacht, sie sind unter Linux und vielen Open-Source-Anwendungen nicht so gräuslich umgesetzt wie die “Patch-Days” der Microsoft-Welt, die viele Angestellte kennen. Und fürchten.
Debians Paketaktualisierung oder die Aktualisierung des Firefox’ sind auf der Anwenderseite leicht umzusetzen. Und dennoch: Sie erfordern Aufmerksamkeit. Sie verlangen auf der Anwendungsebene meist, dass man die Anwendung neustartet, um die Aktualisierung zu erhalten. Das kostet Zeit und ggf. Nerven.
Und die Beschäftigung mit den Updates, vor allem den sicherheitskritischen, stellt eine weitere “Baustelle” dar, die einem vielleicht eine bessere, sicherere Software bringt, aber eines bestimmt nicht: Sinnvoll verbrachte Lebenszeit.
Hier mit dem Trade-Off zu argumentieren, man müsse noch viel mehr Zeit verbringen, wenn man sich aufgrund nicht aktualisierter Software mit Sicherheitslücken beschäftigen müsse etc., greift nicht: Die Aktualisierungen könnten auch so erfolgen, dass man nicht unterbrochen wird, sondern z.B. an einer zentralen Stelle sich die Information darüber holt (von mir aus als RSS-Feed vom Betriebssystem, der wiederum aggregiert wird aus den Updatemeldungen der Applikationen).
12. Mai 2009 von KG
Bizarre Situation erlebt: MitarbeiterIn A stellt MitarbeiterIn B eine fachliche Frage. B kümmert sich ein wenig darum und gibt auf Nachfrage von A eine mündliche Antwort. Während der Ausführungen Bs nimmt A eine leere Wasserflasche und fängt an, auf deren Rand zu blasen und dadurch Töne zu erzeugen. Zwei Nachfragen von B an A werden mit diesen Tönen ebenso beantwortet wie Bs Gruß an A, als B die Büroräume verlässt.
Meiner Einschätzung nach wird B das Verhalten A nicht übelnehmen. Aber es lässt Rückschlüsse auf die Fähigkeit von A zu, Wertschätzung auszudrücken. Ich frage mich, ob mich ein Arbeitsumfeld reizen würde, in dem jemand arbeitet, der sich derart unreif vor allem in Stresssituationen verhält.
(In dieser Umgebung habe ich übrigens zuerst den mir unbekannten Spruch nett ist die kleine Tochter von scheiße gehört, der mich wegen seiner grundlegenden Dümmlichkeit überraschte und gleichzeitig das Denken und die Ethik derjenigen widerspiegelt, die ihn "zitieren" [Provenienz ist mir unklar]).
11. April 2009 von KG
Mit großer Freude kann ich mitteilen, dass endlich der Durchbruch bei meinem "Akkordpermutationsprogramm" erfolgte: Das Programm ist in der Lage, die möglichen 68.586.311 Akkorde zu berechnen und zu speichern, alle Testabfragen gegen die Datenbank liefen erfolgreich.
Der Quellcode ist auf Google Code veröffentlicht, wenn auch noch nicht "gesäubert".
Für mich rückt die Fertigstellung eines musikalischen Projekts, das mich nunmehr seit über zwanzig Jahren begleitet, wieder in den Bereich des Realen.
Die Berechnungszeit dauert nur noch etwa 2 Tage, der erforderliche Speicherplatz ~35 GByte (im Vergleich zu mehreren Wochen und mind. 120 GByte). Auch wenn ich sie liebgewonnen hatte, bin ich von der H2-DB wieder zu MySQL zurückgekehrt, da H2 offensichtlich kein Index-based Locking unterstützt und mit versetzten Transaktionen nicht zurechtkam.
Für alle Nichteingeweihten: Was das Programm bewirkt, warum es sinnvoll sein kann, über 68 Millionen Akkorde zu berechnen und zu speichern, folgt später in einem ausführlicheren Beitrag.
15. Februar 2009 von KG
(Fortsetzung von Teil 2). Was ist beim Entwurf einer IT-Strategie zu beachten und wie macht man das in der Praxis?
Eine IT-Strategie entwerfen
Wesentlicher Leitsatz ist: Die IT-Strategie hat sich an der Unternehmensstrategie auszurichten und muss dabei die Produktstrategie tragen. Sie darf dabei die Produktstrategie, in manchen – gar nicht so seltenen – Fällen auch die Unternehmensstrategie, zu neuen Visionen anregen. Keinesfalls darf die IT-Strategie das Unternehmen und die Produkstrategie behindern.
Das klingt im luftleeren Raum schön und einfach, ist es in der Praxis aber nicht: Häufig widersprechen sich die Bedürfnisse des Produktmanagements und der IT-Führung.
Die Kunst besteht gerade darin, einen angemessenen Ausgleich zu schaffen und die IT-Strategie so zu formulieren, dass die IT der Produktentwicklung und dem Vertrieb ausreichend Spielräume verschafft, andererseits aber nicht zum bloßen Befehlsempfänger wird, der reaktiv versucht, die Produktentwicklungen des Vorjahres in die Backendsysteme zu “quetschen”, während längst schon andere Produkte verkauft werden.
Das Zusammenspiel ist hier allein erfolgversprechend und erfordert hochkommunikative Persönlichkeiten auf allen Seiten. Wünschenswert ist daher eine allgemein anerkannte Kommunikationskultur im Unternehmen, etwa basierend auf dem Harvard Principle of Negotiation.
Am Anfang ist das Ist
Nehmen wir nun an, dass die Mitarbeiter aus den betroffenen Abteilungen miteinander nutzbringend kommunizieren können. Wie soll es dann weitergehen? Man könnte, gewissermaßen im luftleeren Raum, eine Strategie ausarbeiten und dann alles tun, dass sie “irgendwie” umgesetzt wird.
Hier würde aber etwas fehlen: Die Einschätzung der aktuellen Lage, die Ermittlung einer zwar unbekannten, aber durchaus vorhandenen IT-Strategie. Ohne diese sind Sie gar nicht in der Lage, Vorgaben zu machen: Ähnlich wie bei einem Navigationssystem müssen Sie zunächst ermitteln (lassen), wo Sie sich gerade befinden.
Wie macht man das?
Die vier P: Personen, Prozesse, Philosophie, Performance
Einen guten Anhaltspunkt bieten vier Kriterien, die aus der Investmentbranche stammen (siehe z.B. hier), und möglicherweise eine Abwandlung des 4P-Prinzips von Toyota darstellen.
Diese vier Prinzipien sind deshalb so gut dafür geeignet, eine strategische Ausrichtung zu entwickeln, weil sie
a) den menschlichen Aspekt der IT berücksichtigen helfen (wenn Sie die Bücher De Marcos/Listers noch nicht kennen, wird es Zeit…);
b) ermöglichen, die Auswirkungen der eingeschlagenen IT-Strategie zu messen (und auf aktuelle Entwicklungen zu reagieren).
Ab Teil 4 werden diese Kriterien genauer betrachtet. Wir werden uns dabei fragen, wie sich das Unternehmen bezüglich dieser Prinzipien aktuell positioniert.
12. Februar 2009 von KG
(Fortsetzung von Teil 1).
Was ist IT-Strategie?
Als IT-Strategie im weiten Sinn verstehe ich:
Die Antwort auf die Frage, wie durch den Einsatz von Informationstechnologie die Unternehmens- und Produktstrategie unterstützt werden soll.
Die Frage…
“Welche IT-Strategie hat das Unternehmen eigentlich?”
…sollte eigentlich jeder Manager, insbesondere einer aus der IT, unmittelbar beantworten können. Sie/er sollte in der Lage sein, in wenigen Sätzen zu erläutern,
a) was die Unternehmens- und was die Produktstrategie ist;
b) wie der Einsatz von Informationstechnologie diese unterstützen soll.
Die Strategie ist verschwunden!
Häufiger als man denkt, ist die IT-Strategie aber unbekannt. Dies ist in jedem Fall ein ernstzunehmendes Krankheitssymptom für jedes Unternehmen, das IT einsetzt und ohne sie nicht funktionieren kann.
Variante 1: Keine Unternehmensstrategie
Woran kann das liegen? Der übelste Fall wäre, dass die Unternehmensstrategie noch nicht entwickelt wurde. Hier hilft nur, darauf hinzuwirken, dass dies schnellstmöglich erfolgt und die Strategie von der Unternehmensführung an alle Mitarbeiter kommuniziert wird.
Falls man keine Einflussmöglichkeiten in diese Richtung hat, muss man sich ernsthaft mit dem Gedanken auseinandersetzen, wie lange ein Unternehmen existieren kann, ohne über eine (nachhaltige) Unternehmensstrategie zu verfügen.
Variante 2: Keine Produktstrategie
Abgeschwächt könnte zwar eine Unternehmensstrategie vorhanden sein, aber die Produktstrategie fehlen (also die Antwort auf die Frage: mit welchen Produkten möchten wir unsere Unternehmensstrategie wie umsetzen?). Ohne Produktstrategie lässt sich aber keine IT-Strategie entwickeln. Hier sollte jeder IT-Mitarbeiter sehr daran interessiert sein, wie sich die Produkte des eigenen Unternehmens im Wettbewerb plazieren und nötigenfalls mit der Suche bei Monster etc. beginnen.
Variante 3: IT-Strategie vorhanden, aber nicht kommuniziert
Schließlich kann die IT-Strategie unbekannt sein.
Dass eine IT-Strategie unbekannt ist, kann unterschiedliche Ursachen haben. Beliebt ist die Konstellation, dass (irgend)eine IT-Strategie zwar im Kopf der leitenden Manager vorhanden ist (üblicherweise pro Kopf eine unterschiedliche Strategie), diese aber nicht kommuniziert und transparent gemacht wird und deshalb in summa unbekannt bzw. vage und widersprüchlich ist.
Dem kann verhältnismäßig einfach entgegengewirkt werden: Der oberste Chef der IT hat die IT-Strategie zu formulieren und nach unten zu kommunizieren. Dass dies auch erfolgt, ist Sache der Unternehmensleitung. Diese muss die IT-Strategie als Ausprägung der Unternehmensstrategie tragen und (deshalb auch: inhaltlich nachvollziehen können.).
Variante 4: Keine IT-Strategie
Schlimmer ist, wenn die IT-Strategie unbekannt ist, weil sie nicht entwickelt wurde. In diesem Fall muss die IT-Strategie erarbeitet werden (wir sind der Ansicht, dass sich die IT-Strategie von der Unternehmens- und Produktstrategie ableitet, und gehen hier davon aus, dass beide bereits vorhanden sind.) .
Wie man beginnt, eine IT-Strategie zu entwickeln, findet sich in Teil 3.
3. Februar 2009 von KG
Gerne verrate ich: IT-Strategie ist meine geheime Passion. Als Angestellter in der IT-Branche mit ambivalentem Hintergrund (Volljurist, der als Softwareentwickler, -architekt und IT-Berater tätig war und jetzt als Systems Engineer eine 100%ig passende Schnittstellenposition besetzt) reflektiere ich seit Beginn meiner Tätigkeit in der IT die Motivationen hinter unternehmerischen Entscheidungen mit unmittelbaren Einfluss auf die IT.
Immer wieder stoße ich auf die Frage (oder – schlimmer – werde gestoßen) welche IT-Strategie zu konkreten Handlungen oder Handlungsanweisungen in Unternehmen führt.
Die häufig wiederkehrenden Beispiele für konzeptionslosen, von keiner Strategie getragenen Aktionismus sind Legion:
- um Kosten zu reduzieren, wird die Softwareentwicklung der zentralen Transaktions- und Bestandsanwendungen “outgesourced”;
- Vertriebsmitarbeiter eines externen Softwareunternehmens bieten die neueste Version ihres Produkts an – das Management lässt daraufhin prüfen, welche Möglichkeiten es gibt, dieses einzusetzen (anstelle eine Software dann zu evaluieren, wenn sie benötigt wird);
- das von allen Mitarbeitern eingesetzte Helpdesksystem wird fachlich einem externen Mitarbeiter überantwortet; als dieser das Unternehmen verlässt, bleibt die Position vakant und wird einem Programmierer übertragen, der das System auch noch gleich warten soll;
- die technologisch kompetentesten Mitarbeiter aus der Softwareentwicklung müssen die Systeme selbst betreuen, weil kein Maintenance-Konzept vorliegt und Software nicht so entworfen wird, dass sie von Mitarbeitern ohne Programmierkenntnisse gewartet werden kann.
- für Softwareentwickler/Techniker ist kein Karrierekonzept vorhanden – sie können lediglich ins Management wechseln, um sich finanziell zu verbessern oder ihren Verantwortungsbereich zu vergrößern – dies führt dazu, dass sie entweder das Unternehmen verlassen oder sich “arrangieren” i.S.v. innerlich kündigen;
- Jungmanager werden ohne Assessment ausgewählt; am Beginn ihrer Karriere steht ihnen niemand zur Seite, der sie einarbeiten könnte; anstelle Mitarbeiter zu führen, verwalten sie diese und wundern sich, dass der Spaß an der Arbeit abnimmt und sich die Arbeitsergebnisse verschlechtern;
- ohne Rücksprache mit dem Entwicklungsteam wird versucht, die Qualität der Softwareprodukte zu messen, die verwendete Methodik berücksichtigt weder den Kundennutzen noch die Arbeitsweise des Teams.
All dies sind gute Beispiele, die sofort die Frage aufkommen lassen, was IT-Strategie ist und welche IT-Strategie ein Unternehmen hat. Die Antwort darauf findet sich in Teil 2.
10. Januar 2009 von KG
Problem
Bei der Arbeit mit Maven und Eclipse an einer modular aufgebauten Anwendung (mehrere Eclipse-Projekte, Maven mit dem m2Eclipse-Plugin, "Mama-POM" und Modulprojekte) vermeide ich abhängige Projekte, da es einen Unterschied macht, ob man mit dem physikalischen Ergebnis, also dem Maven-Artefakt, oder mit einem verknüpften Eclipse-Projekt arbeitet.
Vielen Probleme damit führten dazu, standardmäßig Disable Workspace Resolution und Disable Nested Modules zu wählen.
Das macht aber das Debuggen schwierig: Beim Debuggen möchte man beim Debuggen direkt in den Quellcode der mit der Startanwendung verbundenen Modulprojekte springen.
Defaultmäßig ist das nicht möglich, vielmehr wird die .class-Datei im Editor angezeigt. Hier hilft auch nicht, den Ort des Source-Codes in den Maven-Abhängigkeiten manuell mitzuteilen.
Verlinkte Quellordner (siehe linked resources) helfen hier nicht.
Lösung
In den Debug-Einstellungen als Quellordner die Modulprojekte angeben über Debug->Open Debug Dialog->Source.
Tip
Wenns beim Debuggen von WTP-Projekten dennoch nicht funktioniert, daran denken, den Server im Debug-Modus zu starten
24. November 2008 von KG
Sometimes you need to run your unit tests using DB2 TIMESTAMP values in your test data to match specific records. You can’t just use a Date() objekt because you have to specify nanoseconds.
As I couldn’t find any code snippet via Google, this might be helpful for you, dear reader.
Example: You want to check for a timestamp of ’2006-02-15 12:05:19.861555′ (within quotes, as shown by one of my favourite SQL clients, SQuirrel SQL).
DateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
Date theMilliDate = formatter.parse( "2006-02-15 12:05:19" );
Timestamp timestamp = new Timestamp(theMilliDate.getTime());
// Note the trailing zeros!
timestamp.setNanos(861555000);
// validFrom would be of type java.util.Date
myEntityObjekt.setValidFrom(timestamp);
This – at least – does the trick, if you know of a better solution, please share it
1. November 2008 von KG
(English users: See Kubuntu 8.10 ‘Intrepid Ibex’ : Networking problems with static IP address)
Nach einigen hartnäckigen Problemen mit dem aktuellen Lenny-Snapshot auf einem neuen Rechner hab ichs mal mit dem brandaktuellen Kubuntu 8.10 aka "Intrepid Ibex" versucht. Wesentlicher Grund war, das neue KDE 4.1.2 ausprobieren zu können.
Die Installation verlief weitgehend problemlos, vorhandene Partitionen wurden zwar erkannt, mussten aber den Mountpoints neu zugeordnet werden. (Könnte man das nicht noch besser machen und die vorhandene /etc/fstab einlesen und defaultmäßig vorschlagen [ich meine mich dunkel entsinnen zu können, dass SUSE 10.2 das so gemacht hat]?
Oder wenigstens dies ermöglichen?).
VGA-Mode in den Terminals ist immer noch 640×480, das machen andere Distributionen schon lange, lange besser. Aber immerhin kann man die /boot/grub/menu.lst nachträglich bearbeiten.
Der erste Start von KDE4 dauerte eine ganze Weile, höchstwahrscheinlich, weil viele Dateien im Home-Verzeichnis angelegt werden mussten.
Nach der Anmeldung flackerte der Bildschirm etwa alle 2-3 Sekunden, was mich beunruhigte. Meine Vermutung, dass keine NVidia-Treiber installiert waren, bestätigte sich, immerhin folgte sofort ein Hinweis von "Jockey", der Software für die Verwaltung proprietärer Treiber, dies solle man ändern.
Indes wurde meine Auswahl, Release 177 des Nvidia-Kernels zu verwenden, nicht übernommen.
Schnell war deutlich, weshalb: Die Netzwerkverbindung war nicht hergestellt. Zwar ist ein Icon im Systray vorhanden, das einem ermöglichen soll, die Netzwerkkarte zu konfigurieren. Nur werden die dort hinterlegten Einstellungen nicht in /etc/network/interfaces übernommen.
Also hab ich die Netzwerkkarte manuell dort eingetragen, entsprechend der Konfiguration auf dem anderen Debian-Lenny-Rechner:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.9.19
netmask 255.255.255.0
network 192.168.9.0
broadcast 192.168.9.255
gateway 192.168.9.1
Und noch /etc/resolv.conf erstellt, und dort die Arcor-Nameserver hinterlegt:
nameserver 145.253.2.75
nameserver 145.253.2.11
Leider half jetzt nicht einfach…
sudo su
/etc/init.d/networking stop
ifconfig eth0 down
/etc/init.d/networking start
… auszuführen, vielmehr musste ich den Rechner neustarten. Danach war die Netzwerkverbindung hergestellt.
Posts in den Ubuntuforen (hier und hier) lassen vermuten, dass es sich um ein generelles Problem handelt. Das ist nicht benutzerfreundlich gelöst, so eine Distribution darf man durchschnittlichen Anwendern nicht in die Hand geben, es sei denn, man möchte sie für Linux vergraulen.
Nachdem die Netzwerkverbindung aufgebaut war, ließ sich das Grundsystem einigermaßen komfortabel einrichten. Der NVidia-Treiber war schnell installiert (über den "Jockey"-Dialog), ebenso ein aktuelles Java
sudo su
apt-get-install sun-java6-jdk
Danach noch Synaptic installiert, da Adept mir völlig kryptisch erschien, die Suche nach Paketen nichts brachte und die Hilfedatei nicht verfügbar war.
Jetzt läufts, allerdings mit Einschränkungen: Gnome-Programme erkennen das Scrollrad nicht, die Tabs im Firefox (nachinstalliert) sehen gräuslich aus. Generell scheint mir noch viel manuelle Nacharbeit nötig zu sein.
Ein Blick in /etc/X11/xorg.conf zeigt, dass keine spezifischen 3D-Features für die Graphikkarte eingetragen sind, was möglicherweise aber anders funktioniert als bei Lenny (???).
Ansonsten macht KD4 einen recht guten allgemeinen Eindruck, vieles scheint mir aber auch noch überhaupt nicht ausgereift. Die Einstellungsanwendung ist in meinen Augen weitaus schlechter als das alte KDE Control Center, hier wünschte ich mir die frühere Anwendung zurück.
28. Oktober 2008 von KG
Manchmal benötigt man ein JAR, das nur Testklassen enthält, um diese in mehreren Projekten zu verwenden. Dieses erstellt man wie folgt:
1. Test-JAR im Ausgangsprojekt erstellen
In der pom.xml des Projekts, dessen Testklassen verwendet werden sollen, erstellt man ein separates JAR über eine Änderung des maven-jar-plugins:
<plugins>
<!-- Weitere Plugins -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
2. Test-JAR verwenden
In der pom.xml eines Projekts, welches das JAR mit den Testklassen verwenden soll, trägt man eine Dependency mit einem classifier ein:
<dependency>
<groupId>de.buergel.bas</groupId>
<artifactId>bas-spring.server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>test</scope>
<classifier>tests</classifier>
</dependency>
Siehe dazu den ausführlichen Blogeintrag von Walter Cedric (Englisch).
26. Oktober 2008 von KG
Früher half, das Modul pcspkr zu deaktiveren. Das hat sich offenbar geändert. Jetzt also in /etc/modprobe.d/blacklist
blacklist snd_pcsp
eintragen.
21. Oktober 2008 von KG
Legacy systems often contain composite natural keys, i.e. identifiers composed from different database fields.
Hibernate offers three ways to deal with it. One is the @IdClass annotation that allows you to create an annotation-free class containing all the fields you like to use and use those fields again in your annotated entity class, annotating them with @Id.
Normally you need to map the class member name with the database field name. I.e. if you use the members userId and versionId, it’s quite likely you have to map them to database fields named USER_ID and FIELD_ID.
With the JPA annotations you do so using the @Column-annotation. But there is a bug. Hibernate completely ignores the @Column annotation if used in conjunction with other annotations, e.g. @Id.
See http://opensource.atlassian.com/projects/hibernate/browse/ANN-756
Please vote for fixing this ugly, ugly bug.
15. September 2008 von KG
Wunschlisten gibt es einige im Netz. Angefangen von Amazons altbewährtem Wunschzettel über die biedere kommerzielle Variante wishlist.com hin zum trendigeren wishlistr.com. Eine deutsche Variante ist OpenWishes.
Diese Dienste sind aus einem Grund vorhanden – ihre Betreiber möchten Geld verdienen. Bei Amazon ists offensichtlich, dass jeder Wunsch sich auf ein Produkt im eigenen Warensortiment bezieht. (Zudem helfen die Wunschlisten, das Käuferprofil zu verfeinern, auch das kann Geld wert sein).
Bei den anderen Diensten ist das Geschäftsmodell nicht ganz offensichtlich, ich vermute, dass da eine Mischung aus Werbeprovisionen (via Google Adwords bei wishlistr) und Provisionen (wishlist) im Fall eines Kaufs zu Einnahmen führen soll.
An diesen Angeboten stört mich, dass sie sich überhaupt nicht mit dem zentralen Thema, dem Wunsch eines Menschen auseinandersetzen. Die Wünsche einer Wunschliste werden artig als ausschließlich materielle Wünsche betrachtet.
Schaut man sich den Action Tracker auf We are what we do an, sieht man, dass z.B. der Wunsch, die Welt lebenswerter und schöner zu machen, etwas ist, das viele antreibt, aber nicht durch redundanten Konsum erfüllt werden kann. Viele Wünsche sind immateriell oder bestehen aus einer Mischform (mit jemandem in ein Café/Museum/Konzert gehen etc. etc.).
Dass selbst wishlistr und OpenWishes als jüngste und “innovativste” Plattformen eine (ja: genau eine) Wunschliste ermöglichen, die man überhaupt nicht strukturieren kann, ist wirklich traurig.
Da genügt es doch, sich eine Wunschliste z.B. auf sein Blog zu packen und zu hoffen, dass jemand die dort geäußerten Wünsche erfüllt (die Blogger-Prominenz hätte da echte Chancen, auch unwahrscheinlichste Wünsche erfüllt zu bekommen).
Meine Wunschliste bestünde zur Zeit aus einem Wunsch, den könnte ich auf den o.a. “Diensten” aber gar nicht äußern: Ich wünsche mir eine Wunschlistenanwendung im Internet mit folgenden Eigenschaften:
- Wünsche können materieller und immaterieller Natur sein;
- beliebig viele Wunschlisten können erstellt werden;
- Wünschen können Kategorien/Tags zugeordnet werden;
- Wünsche können anderen zugänglich gemacht werden (Sichtbarkeitseinstellungen: Public – Work- Private – Friends – Individuals), wobei dies auf die gesamte Wünsche, einzelne Wunschlisten, Kategorien/Tags und einzelne Wünsche beschränkt werden kann;
- man sollte einen fremden Wunsch erfüllen können: die wünschende Person kann festlegen, ob man sie wegen des Wunschs kontaktieren kann oder ob die wunscherfüllende Person anonym bleibt;
- Preisangaben sind möglich (zu einem festgelegten Preis würde man sich selbst/einer anderen Person einen materiellen Wunsch erfüllen können/wollen, ggf. mit der Option, automatisch einen Kaufvertrag abzuschließen); diese Preisfestlegung sollte zeitlich begrenzbar sein;
- mehrere Personen mit demselben materiellen Wunsch können sich zu Preisabreden treffen, um gemeinsam kaufen zu können;
- berufliche Wünsche können geäußert werden, insbesondere “Aussteigerwünsche” (diese wären wegen der dahinterstehenden hohen Motivation für Personalberater interessant);
- Wünsche/Wunschlisten können beliebig sortiert, gefiltert, zusammen- und auseinandergeführt werden;
- URL-Snippets können per Drag&nDrop zu einem Wunsch hinzugefügt/ein Wunsch aus diesen erstellt werden;
- Alternativen können zu einem Wunsch geäußert werden;
- wenn ein Wunsch erfüllt wurde, ist dies sichtbar, es sei denn der Wunsch wird unsichtbar gemacht (letzteres kann per Einstellung bestimmt werden);
- Statusmeldungen zu Wünschen über Direct Messages bei Twitter;
- nichtmaterielle Wünsche via Twitter (sonst verspamt Twitter zunehmend);
- Nach Menschen mit ähnlich gelagerte Wünschen suchen können.
- Mashups mit anderen Diensten.
Wer eine entsprechende Seite kennt, kann mir ganz einfach diesen Wunsch erfüllen. Oder jemand schreibt eine entsprechende Anwendung. Da helf ich auch beim Programmieren