Virales Marketing

Gestern wurde mir diese Mail im CC geschickt:

Hallo XXX,
bei unserer gestrigen Besprechung mit Herrn YYY hat sich ergeben, dass das Startup-Window der ZZZ-Anwendung bei den Anwendern auf starke Ablehnung führt, da die Kombination von Augen und Tastatur Assoziationen zu Big Brother erzeugen wurden (siehe Anhang). Kannst du dazu bitte einen „freundlicheren“ Screen entwerfen?
..

Das ist ja an sich schon lustig aber ich mußte natürlich gleich ans virale Marketing denken. Shit ne, wir haben wirklich nichts besseres zu tun.

Top 100 X

Nun hat es der Laden in dem ich arbeite sogar in die Top 100 geschafft! Das sind keine Verkaufscharts, eher so etwas wie die Mittelstandsplakette mit Halsband und Standarte am grünen Band. Ich hoffe, es waren mehr als 100 Bewerber. Wir erinnern uns noch alle an die Bundesjugendspiele, als man mit 15 Sekunden auf 100m noch locker “8. Sieger” wurde. Wenn auch nur 9 mitrannten.
Woran liegt es denn? Was sind denn die Geheimnisse, mit denen die Firma ihre Ergebnisse, hoffentlich bald sogar wieder mehr Gewinn als eine schwarze Null erwirtschaftet? Der IT-Service Teil ist einfach, er lebt einfach von den Projekten und der Fähigkeit, nach Bedarf Kräfte hinzuzunehmen oder abzulegen. Hier sind vor allem vermutlich die Kontakte zu Siemens und Daimler-Chrysler hilfreich, die von altersher beitrugen, Aufträge an Land zu ziehen.

In der Softwareentwicklung sieht es anders aus. Hier sind Neukunden und Projekte deutlich schwerer zu gewinnen. Die Konkurrenz ist härter. Durch Bugs und Support verbrauchen wir wieder eine Menge Geld, oft mehr, als die Kunden für Wartung, Neuentwicklung und Lizenzen ausgeben.

In regelmäßigem Abstand werde ich gefragt, jedoch mindestens wöchentlich, wie man es denn besser machen könnte. Dann krame ich jedesmal meinen Rezeptzettel aus der Hosentasche und lese ihn laut vor. Nein, quoka, ganz so einfach ist es nicht. Ich kann darauf meistens keine offene Antwort geben, da ich fast immer die Gefühle des Fragestellers verletzen würde. Man kann es aber andersherum ausdrücken. Es ist wie beim Schachspiel, es verliert immer der, der die meisten Fehler macht. Nicht so viel an dem Prozeß herumdoktern, sondern einfach Fehler vermeiden. Welche Fehler fallen denn offensichtlich ein? Hier eine kleine unvollständige Liste, ohne Priorisierung:

  • Mehrere inkompatible Produktlinien pflegen. Je größer das Projekt, desto wichtiger ist es, daß zentrale Komponenten nicht mehrfach existieren
  • Schlechte Kommunikation. Nicht auf den Bürofunk sollte man vertrauen, sondern seine Mitarbeiter in regelmäßigen Abständen über laufende Projekte informieren. Damit sind keine täglichen oder wöchentlichen Meetings gemeint. Einmal im Jahr ist aber entschieden zu wenig.
  • Weiterbildung der Mitarbeiter ist kritisch. Man muß sie dazu nicht auf teure Seminare schicken, sondern einfach ab und zu in Neuentwicklungen einbinden. Ihnen die Arbeits-Zeit geben, sich neue Sachen anzueignen. Es ist fatal, wenn in einer Gruppe von 15 Entwicklern alle Innovationsarbeit von 2-3 Leuten gemacht wird.
  • Sparen an technischer Ausstattung. Entwickler sind genügsame Mitmenschen. Viele von ihnen halten es sogar aus, in dunklen, schlecht belüfteten Räumen eng beieinander zu sitzen. Aber die klapperlahmen Rechner sollte man wenigstens ab und an austauschen, da sind sich wirklich alle einig.

Es gibt natürlich noch viel mehr. Oft sind es Themen aus der “zweiten Reihe”, die helfen Wartungskosten in der Entwicklung zu reduzieren. Dazu gehört zum Beispiel, daß zentrale Codeelemente so gut kommentiert wie möglich sein sollten. Und so primitiv wie möglich in der Konstruktion, denn viele Leute müssen den Code verstehen um Fehler zu finden und darauf neue Funktionalität aufzubauen. Oft haben wir den Fall, daß manche neuentwickelte Elemente schreckliche Performance oder unnötige Fehler aufweisen die nur daher kommen, daß der betreffenden Entwickler den Code drumherum nicht begriffen hat.
Ich bin schon gespannt, was ich heute wieder zum besten geben werde, wenn ich gefragt werde, “du Daniel sag mal, warum würde das denn so lang dauern, das müßte doch irgendwie besser gehen ..?”

Bauernfänger

Beim Absenden einer E-Mail aus dem GMX Webmailer erhielt ich heute folgende Meldung:

Wahoo! Habe ich einen fixen Preis gewonnen oder was. Erst darf man seine persönlichen Daten eingeben, die nur an “interessierte” Dritte zum Zweck des Anbietens neuer Produkte weitergeleitet werden (weia), dann nimmt man an einem Gewinnspiel teil, an dem man den bereits erwähnten fixen Gewinn sicher hat. Was für einen Gewinn? Es steht erst ganz unten auf der Seite: Ein einjähriges Zeitschriftenabo. Welche Zeitschrift? Wir ahnen es bereits: “Produktvorstellungen, Spiele und vieles mehr…”.

Pizzeria Rumänia

Wie kann dies das Puls200 Blog sein ohne daß ich je ein Wort über jene Stätte der mittäglichen Mißhandlung verliere, die ab und an bei mir selbst 200 Puls erzeugt? Diesen Mißstand will ich hiermit beseitigen. Weniger die Pizzeria an sich als ihre Unfähigkeit, bei Vorbestellungen dieselben auch nur annährend zeitnah zu berücksichtigen. Äh, dann brauche ich auch nicht anzurufen, wenn ich mit 8 Leuten vorhabe, innerhalb von 30-45 Minuten eine Mahlzeit einzunehmen? Darüberhinaus beschäftigen sie den Schlurfer, einen osteuropäischen Zeitgenossen, der dem gastronomischen Dienstleistungsgewerbe noch mit real existierendem Sozialismus begegnet. Einmal wurden zwei Kollegen sehr ungleich eingeschenkte Getränke überreicht. Als der weniger reichlich Bedachte diesen Umstand reklamierte, nahm der Schlurfer sein Getränk mit und füllte es 1:1 in ein größeres Glas um, das er ihm direkt wieder hinstellte. Bei einer anderen Gelegenheit wurden einige komplett schwarz verbrannte Pizzen serviert. Das sah man allerdings erst, als man angefangen hatte zu essen, bzw. die Dinger umdrehte. Der Schlurfer tauchte erst wieder auf, als alle anderen restlos fertig waren und die Pechvögel definitiv keine Zeit mehr hatten, das Zeug zurückgehen zu lassen. “Hat nicht geschmeckt?”. Ne, hat nicht geschmeckt, Blödmann. Darüberhinaus sieht er bei der Bestellungsaufnahme stets über einen hinweg und gibt einem immer das Gefühl, extrem ungelegen zu sein. Der wandelnde “wenn’s denn unbedingt sein muß“. Kurioserweise gehe ich trotzdem hin und wieder mit, was allerdings mehr dem Herdentrieb zuzuordnen ist. Auf der Habenseite befinden sich moderate Preise und der beim Mittagstisch kostenlose Espresso. Etwas zu mager, wie ich finde. SterneSterneSterneSterneSterne

Bitmap vs. Image

In C# existiert eine abstrakte Basisklasse für Bilder genannt Image. Speichere ich nun ein geladenes Bild als Image in einer anderen Klasse, scheint es irgendwann vom GarbageCollektor abgeräumt zu werden.
d.h. sowas:

class Ship {
private Image image;
// ..
}

Am Anfang wird das Bild geladen und mehrfach verwendet. Nur irgendwann ist es weg (null)!. Ernsthaft, ich dachte ich spinne. Speichert man das Bild als Bitmap funktioniert alles wie erwartet. Ich habe recht lange gegoogelt und nichts gefunden bis ich durch Zufall diese Änderung gemacht habe und auf einmal funktionierte alles. Zum Haareraufen! (daher paßt es gut hierher ;-) )

Nachklapp mit Dokumentation [Wieslauftal]

Um nochmals auf den vorherigen Eintrag von letzter Woche zurückzukommen. Heute waren wir wieder in besagter Gegend mit dem Rad unterwegs, diesmal hatte ich allerdings die Kamera dabei. Jetzt kann ich auch beweisen, warum eine Umgehungsstraße ein Projekt von geistig Umnachteten für geistig Umnachtete ist. Mitten auf dem Radweg kommt man an folgender Konstruktion vorbei:

Letzte Woche dachte ich noch, möönsch, da hat aber einer einen gepflegten Bauplatz ergaunert,aber heute sehe ich mit kaltem Grausen, daß das der Rohbau für eine Straßenbrücke werden soll. Tja, wo soll denn hier eigentlich eine Straße langführen? Na ganz einfach, geradewegs mitten hier durch:

Au backe, der sich das ausgedacht hat ist entweder blind oder war noch nie persönlich vor Ort. Ein Trauerspiel. Meine Tochter faßt meine Meinung dazu mit einem passenden Gesichtsausdruck zusammen:

Dampf ablassen

Kaum kommen wieder Leute ums Leben ist entweder Dschihad oder ein Bengel hat angeblich zuviel Counterstrike gezockt. Unsere Welt scheint förmlich um einfache Erklärungen zu betteln. Kann man den Leuten nicht zumuten, daß manche Ereignisse einen etwas komplexeren Hintergrund haben dürfen? Aber um eine kurzfristige Antwort parat zu haben, brauchen Medien, Profilierer und Machtinhaber einfache Problemstellungen. Diese versucht man auf mehr oder minder haarsträubende Weise aus dem Vorgefallenen abzuleiten. Das eigentliche Problem wird damit umgangen, nein, es wird sogar irrelevant. Bahn frei für Aktionismus! Wir haben uns inzwischen dran gewöhnt. Achja, die Terroristen müssen jetzt auch aufpassen in Deutschland, denn Schäuble guckt ihnen inzwischen auf die Finger! Er kann sich in die Reihe mit u.a. MV und Oettinger illuster besetzter, peinlicher Landesgenossen einreihen. Ich schließe die Augen und denke dreimal ganz fest “I gher net dazu“..
Das Schlimme ist, daß der ganzen Denke kein böser Wille zugrunde liegt. Wenn’s denn nur so wäre! Dann wüßte ich zumindest, daß wir nicht von ahnungsresistenten Aktivisten regiert werden. Aber es scheint einfach nur nicht zuende gedacht worden sein. Klar ist es praktisch, wenn die Polizei zusätzliche Hilfsmittel für die Verbrechensabwehr erhält. Nur was passiert mit den ganzen Daten? Darum dreht sich im Wesentlichen doch die Kritik. Die CDU offenbart komplette Ignoranz, überhaupt angemessen auf die Frage einzugehen. Arrgh! Und weil das Ganze durch den demokratischen Prozeß gesetzlich festzementiert wird, sind wir alle ein bißchen selbst schuld daran. Zum Haareraufen.

Remoting für Runaways

Ein jeder, der sich noch vage an Dinge wie Corba erinnern kann weiß, welch nette Idee hinter verteilten Objekten steckt: Ein Objekt wird als verteilt gekennzeichnet und wenn es mit einem geeigneten Parameter erzeugt wird, entsteht es auf einem anderen Rechner. Für die Anwendung sieht es aber wie ein lokales Objekt aus, auf das ganz normal zugegriffen werden kann. Hört sich toll an, führt in der Praxis jedoch zu allerlei Problemen, da die Zugriffe von den Launen des Netzwerks abhängig sind. Unter .NET wurde das Rad nochmal unter der Bezeichnung remoting neu erfunden.

Der Zugriff auf ein entferntes Objekt ist einfach, ein paar Zeilen genügen:

string url = string.Format(“tcp://{0}:40506/LPT_IO_Server”,

                    this.address);

this.remoteObj = (BaseRemoteObject)

   Activator.GetObject( typeof(BaseRemoteObject), url);

Aber jetzt kommt das dicke Ende: Wenn der Server unten ist, bleibt die Anwendung beim Zugriff auf eines der Felder einfach hängen. Es gibt keine Möglichkeit, einen connection timeout einzustellen. Es dauert dann etwa 45 Sekunden, bevor eine SocketException anzeigt, daß da was schiefging. Nicht gut für eine Anwendung mit Benutzerinteraktion. Man kann sich allerdings “dreckig” behelfen, indem man den Zugriff in einen eigenen Thread packt:

Exception setException = null;

System.Threading.Thread setThread = new System.Threading.Thread( delegate()

{

    try

    {

        this.remoteObj.setValue(value);

    }

    catch (Exception ex)

    {

        setException = ex;

    }

});

setThread.Start();

if (setThread.Join((int)5000))

{

    if (setException == null)

    {

        // everything seems to be A-OK

        return true;

    }

}

return false;

Das sieht nicht nur scheußlich aus sondern ist es auch. Aber so funktioniert es wenigstens. Jetzt bekommt man zwar auch eine Exception, aber asynchron. Ich finde es verwunderlich, daß M$ hier auf ein besseres Interface verzichtet hat. Hat man sich aber soweit vorgewühlt, ist die remoting Lösung eine sehr praktische Sache. Keine Socketprogrammierung, kein Marshaling, einfach nur die Objekte deklariert und es kann losgehen.
Meine Anwendung sieht folgendermaßen aus: Auf bis zu 8 entfernten Rechnern laufen Windows Services, die die Datenkanäle des LPT Ports schalten können. Das Interface besteht aus einer einzigen Funktion: setValue(byte). Auf einem zentralen Rechner kann man in einem Fenster alle entfernten Ports einzeln oder gleichzeitig schalten. Aus Remoting-Sicht ist dieser Rechner also der Client, der zu den entfernten Servern eine Verbindung aufbaut. Es ist wirklich phänomenal, wie schnell man zu einem Ergebnis kommt: Hätte ich o.g. Probleme nicht gehabt, wäre ich nach 5 Stunden (einschließlich der Setups) fertig gewesen.

Das Ende der Birne

Minister Gabriel zum Thema “Glühbirne” als politischer Trittbrettfahrer (hatte ich das nicht ein paar Tage vorher woanders gelesen? Welches Land will nochmal gleich die Glühbirnen abschaffen?) Was im Grunde richtig ist, ist aber genauso Lobbyarbeit wie das Editorial des ADAC Vizepräsidenten in der meistgelesenen Zeitschrift Deutschlands. Richtig, das ADAC-“Blättle”. Da fordert er, daß die KfZ Besteuerung “umweltgerecht” nach CO2 Ausstoß berechnet werden soll. Das ist zwar auch nicht verkehrt, aber was soll das Ganze, wenn der CO2-reduzierte Neuwagen trotzdem 15l Super zieht? Das hilft höchstens als Daseinsberechtigung für die Bürokratie, neue Vergabeschlüssel für die KfZ zu vergeben und sich im allgemeinen wichtig zu machen. Es ginge doch so viel einfacher: Die KfZ-Steuer, so sie denn sein muß einfach über die Tankstellen einziehen! Die bei der Verbrennung entstehende Gasmenge ist direkt proportional zum Kraftstoffverbrauch. Ganz simpel, das muß man dem Wähler nicht mal extra erklären.
Allem Gemecker hier zum Trotz bin ich froh, daß das Thema Energie endlich die Medienpräsenz hat, die es schon lange verdient hat. Auch wenn meine Elterngeneration die Aufregung nicht nachvollziehen kann und sich gleich bevormundet fühlt, nur weil irgendjemand fordert, man solle nicht mehr nach Bangkok sondern umweltschonend in den Bayrischen Wald fliegen. Der Erholung wegen. Inzwischen müßten wir uns doch an die politischen Aktivisten gewöhnt haben um zu erkennen, daß hier nur jemand ganz schnell oderhochwassertypisch Punkte ziehen will.

css Kuriositäten

Seit ich die neue WordPress Version installiert habe, (2.1) funktioniert ein Teil der Bilder im Textverlauf nicht mehr. Bisher hatte ich diese immer in ein div eingeschlossen. Das Bild wird jetzt aber nicht mehr angezeigt, außer wenn man das width Attribut setzt. Seltsam. Setze ich “float:left;” z.B. direkt im Image, funktioniert es wie erwartet. Ich finde das nicht so besonders zufriedenstellend.