1. Dezember 2010

Science Fiction Comes True

This looks like an image from a Science Fiction movie. But it is not. It is reality.

The image shows a real astronaut in a real space station and a real earth through real windows.

We see astronaut Tracy Caldwell Dyson inside the cupola of the ISS space station. The cupola has been installed during Space Shuttle mission STS-130 on 15 February 2010. It is the largest window ever deployed in space.

The Space Shuttle era comes to an end. It seems to the public, that not much progress has been made. But there actually is development. The cupola image is one indication. And more than 100 Space Shuttle missions result in unprecedented operational experience in space. Another sign for advance is the fact, that the Space Shuttle was not the only one. There are other "returnable" launch systems in active operation (X-37B) created by organisations with a budget, that is larger than NASA's.
_happy_spacing()

19. Oktober 2010

26. September 2010

A Website Chat made easy with XMPP and BOSH


A description of the live chat feature on http://avatar.lupuslabs.de/contact.html

10 years ago we spent weeks to develop a website chat. We implemented a chat server in C++, a PHP library, which talked to the chat server and JavaScript streaming in an iframe. Today it is much simpler.

Today we can use XMPP and BOSH and let the web page talk to my GTalk client, which runs all the time anyway.

Here is the shopping list of technologies:
These components do all the work. There is only some Javascript code and a little bit of plumbing required.

1. Set up ejabberd:

Download ejabberd from http://www.ejabberd.im/. The easiest way is to use the installer from http://www.process-one.net/en/ejabberd/downloads

For XMPP to work we need XMPP users. I prefer to run ejabberd with MySQL storage, because MySQL is the easiest way for me to add users and to manage the user list programatically. But the mnesia database also works.

Here is the config to use MySQL with ejabberd (to be added to ejabberd.cfg):
% {auth_method, internal}. % disabled
{auth_method, odbc}. % enabled
{odbc_server, {mysql, "localhost", "ejabberd", "mysql-user", "mysql-password"}}
Also I comment out XMPP in-band account registration, so that nobody creates users on my server:
{access, register, [{deny, all}]}.
This article explains how to create tables for ejabberd in the MySQL server: https://support.process-one.net/doc/display/MESSENGER/Using+ejabberd+with+MySQL+native+driver

2. Set up Apache as BOSH proxy:

Enable Apache modules "proxy" and "proxy_http". The debian way:
% a2enmod proxy
% a2enmod proxy_http
Add to the proxy configuration (Debian: proxy.conf)
ProxyPass /xmpp-httpbind http://127.0.0.1:5280/http-bind
ProxyPassReverse /xmpp-httpbind http://127.0.0.1:5280/http-bind
By default accessing the proxy is only allowed for localhost. Since Browers will access it, it needs to be accessible from anywhere. Add to the proxy configuration (Debian: proxy.conf)
Allow from all
ProxyRequests Off
3. Create an HTML file and start programming

Download Strophe and jQuery (or use the CDN version http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js). Add references to the HTML-head:
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript" src='strophe.min.js'></script>
4. Now comes the real fun: coding

We basically create a BOSH connection from Javascript to ejabberd through apache/mod_proxy:
var conn = new Strophe.Connection('/xmpp-httpbind');
Create an XMPP user in MySQL (I am using phpmyadmin) and connect with this user:
conn.connect('test@wolfspelz.de', 'secret', OnConnectionStatus);
The OnConnectionStatus function may look like:

function OnConnectionStatus(nStatus)
{
if (nStatus == Strophe.Status.CONNECTING) {
} else if (nStatus == Strophe.Status.CONNFAIL) {
} else if (nStatus == Strophe.Status.DISCONNECTING) {
} else if (nStatus == Strophe.Status.DISCONNECTED) {
} else if (nStatus == Strophe.Status.CONNECTED) {
OnConnected();
}
}
When the connection is established, register message handlers and send our own presence:
function OnConnected()
{
conn.addHandler(OnPresenceStanza, null, "presence");
conn.addHandler(OnMessageStanza, null, "message");
conn.send($pres());
}
BTW: handlers should always return "true". Otherwise they are removed from the handler list. A message handler may look like:
function OnMessageStanza(stanza)
{
var sFrom = $(stanza).attr('from');
var sType = $(stanza).attr('type');
var sBareJid = Strophe.getBareJidFromJid(sFrom);
var sBody = $(stanza).find('body').text();
// do something, e.g. show sBody with jQuery
return true;
}
A presence handler may be:
function OnPresenceStanza(stanza)
{
var sFrom = $(stanza).attr('from');
var sBareJid = Strophe.getBareJidFromJid(sFrom);
var sType = $(stanza).attr('type');
var sShow = $(stanza).find('show').text();
// do something, e.g. show status icon with jQuery
return true;
}
The connection should be closed when the page unloads. Unfortunately strophe.js (at least up to version 1.0.2) disconnects asynchronously, which does not work when the page is destroyed. After some time the XMPP server will notice, that the page disappeared and will close the connection. But if you do not want to wait, then we have to force strophe to close immediately.

There is a patch, which allows for synchronous connection closing. The patch must be applied to the strophe.js file:
diff --git a/src/core.js b/src/core.js
index 5aeb06a..f79ae29 100644
--- a/src/core.js
+++ b/src/core.js
@@ -2161,7 +2161,8 @@ Strophe.Connection.prototype = {

             req.date = new Date();
             try {
-                req.xhr.open("POST", this.service, true);
+               var async = !('sync' in this && this.sync === true);
+                req.xhr.open("POST", this.service, async);
             } catch (e2) {
                 Strophe.error("XHR open failed.");
                 if (!this.connected) {
How to use the patch:
    this.conn.flush();
    this.conn.sync = true; // Set sync flag before calling disconnect()
    this.conn.disconnect();

5. Summary

Of course, all these functions and callbacks should be prototype based and bind the instance to the closure. We should also use a model-view architecture and handle the protocol stuff in the model, while notifying the view of really important events.

Here are the files:
contact.html - the "driver" which loads everything and produces the GUI
model.js - the model does it, classes: Model, Room, Participant
view.js - the view shows it, the view registers listeners with the model
utils.js - utility classes, logging, unit test, oberver pattern
config.js - configurations for test and production
setup.js - selects the appropriate configuration
style.css
lib/strophe.js - including the above patch
lib/jquery-1.4.2.min.js
lib/jquery-ui-1.8.5.custom.min.js
_happy_chatting()

11. September 2010

Service URLs should be Immutable

Service URLs are URLs where you (the client) expect a service. No surprise. Examples:

  • the URL of a SOAP WSDL is a service URL,
  • the REST URL of the Twitter timeline API: http://twitter.com/statuses/friends_timeline.xml,
  • name or URL of AJAX scripts of a web site,
  • a chat room URL provides a software bus service.
These service URLs are provided to the client. Usually they are configured. The client gets them somehow. The client uses them to access the service. BUT the client should never construct them or append to them or change them. Service URLs should be final.

Why? I don't know, but I feel, that it is a bad thing. I had several cases in real applications where constructing, appending to, manipulating service URLs made an application less extensible, more complex, less testable.

Extensibility: if the client constructs the service URL from parts, then future server changes must take the client URL construction into account. The server can not just supply a different service URL, because the client also does something and might prevent the server from changing the service URL stucture or the URL altogether. For example, if the client appends the path of a URL to a host name and if the client assumes, that the server language is PHP, then the service URL might always look like a PHP script, even if the server technology changes. Imagine the unfortunate sysadmin who has to configure a Java application server to serve ".php" URLs. The client will have to be changed when the server changes. This is bad.

Complexity: Constructing URLs in the client is more processing than doing nothing. It introduces IFs, methods, more constants. This is usually not a big issue, but it rare cases the additional complexity can be quite significant. I have seen these cases.

Testability: Service URLs point to resources. Resources are dependencies. A very important concept of unit testing is inversion of control by dependency injection. But if the client generates its dependencies, then inversion of control is more difficult, if not impossible. It is much better to let the server be in control by configuring the client for production and test cases.

Do not...
  • combine host name and path to URLs
  • append or decide on filename extensions
  • append query parameters
  • decide the protocol
  • insert or remove port numbers
...in the client. Just leave it as you get it. The server knows what's good for you.

Exceptions: however, you may...
  • decide the protocol (http vs. https) in AJAX clients for JS security reasons,
  • replace query arguments by treating the service URL as a template,
  • append URL parameters if (and only if) the service protocol consists of URL parameters (thanks Allan)
  • (any other exceptions?)
happy_webservicing()

16. August 2010

Stellenausschreibung Softwareentwickler/in

In den nächsten 12 Monaten bauen wir eine interne Entwicklung mit 2 Scrum Teams auf. Wir suchen besondere, gute Leute, die mit anpacken, Produkte und Projekte umsetzen und mit dem Unternehmen wachsen wollen. Wir haben hier die Chance eine moderne IT aufzubauen, moderner, als unser Top-Management für möglich hält. Alles ist neu, keine Altlasten. Neuer guter Code und Softwarearchitektur. Wer mich kennt, weiss, dass wir aktuelle Technologien verwenden: Agile, Scrum, Unittesting, Clean Code, SOLID, DRY,KISS und wir werden bald wieder ein regelmäßiges Developer-Seminar machen.

Ihre Aufgaben:
  • Selbständige Projektarbeit in einem Scrum- Team
  • Objektorientierte Analyse und Entwurf
  • Entwicklung von webbasierten Anwendungen und Webservices
  • Aktive Teilnahme an modernen agilen Entwicklungsprozessen
Ihre Skills:
  • Erfahrungen im Bereich objektorientierter Entwicklungsmethoden
  • Sehr gute Programmierkenntnisse in einer der Sprachen Java oder C++ oder C# oder PHP. Gute Programmierkenntnisse in einer der anderen Sprachen
  • Sicherer Umgang mit CSS, JavaScript, XML, DOM/DHTML, Subversion, Webservices, MySQL und Entwicklungsumgebungen
  • Kenntnisse agiler Entwicklungsmethoden wie Scrum und Unit-Testing
  • Idealerweise Erfahrung mit moderner Programmiermethodik wie TDD, SOLID, DRY, KISS
  • Abgeschlossenes Hochschulstudium der Informatik, Naturwissenschaften, Ingenieurwissenschaften oder vergleichbare Qualifikation mit mindestens einjähriger Berufserfahrung
  • Sehr gute Deutsch- und gute Englischkenntnisse.
Die Deutsche Messe stellt im B2B-Umfeld Kontakt zwischen Herstellern und Interessenten her. Dazu dienen die großen Präsenzmessen CeBIT, HANNOVER MESSE und viele andere. Die Deutsche Messe Interactive, eine Tochter der Deutschen Messe setzt das Business der Messe im Netz fort. Die DMI führt Anbieter und Geschäftskunden über das Internet zusammen. Durch enge Verzahnung mit den Marketing- und Vertriebssystemen der Hersteller wird der Wert solcher Kontakte wirtschaftlich messbar. Kein Spam, keine New Economy, keine Handelsplattform, sondern echte Business Leads.

Arbeitsort: Hannover oder Hamburg
Beginn: je früher desto besser
Sicherheit: ja, das Startup ist solide finanziert (kein VC)

Schreibt mir an: heiner.wolf@messe-interactive.de
Schickt mir eine Telefonnummer und ein kurzes Profil. Ich rufe zurück.

15. August 2010

Entwickler Kennenlernen

Bei Startups ist das Team meistens klein. Da hängt der Erfolg des Unternehmens von jedem Einzelnen ab. Deshalb versuchen wir immer wieder ein starkes Team zusammen zu stellen, das alle Entwicklungsherausforderungen meistern kann.


Am Anfang ist es sehr schwer Entwickler/innen einzuschätzen. Der eine behauptet, eine Programmiersprache zu kennen, hat sie aber nur in der Vorlesung gesehen. Die andere gibt an "nur so ein bisschen zu programmieren", aber nicht richtig. Später kommt heraus, dass sie die Benutzerverwaltung für das Wohnheim als Webanwendung nebenbei gemacht hat und auch noch eine iPhone App dafür.

Und dann gibt es noch so viele Technologien. Keiner kann alles abdecken. Es ist fast unverschämt eine Web-Entwicklerin nach XAML zu fragen oder einen Hobby-Gamemodder, der gerade von der Schule kommt, nach Scrum. Trotzdem haben alle, die offen, aktiv und selbstmotiviert sind, das Potential großartige Developer zu sein.

Aber irgendwo muss ja anfangen. Deshalb hier meine kurze Liste von Themen, die mich brennend interessieren, wenn ich jemand von der programmierenden Menschheit kennen lernen will.

1. Technologie

Wie gut würden Sie Ihre Fähigkeiten als Programmierer/in einschätzen.
Auf der Skala von:
- Thema bekannt (gelesen, gehört, Vorlesung in der Uni)
- Etwas Praxis (probiert, Übungsaufgabe, mal verwendet)
- Viel Erfahrung (Profi-Level, kenne ich ziemlich gut)
- Ausgezeichnet (Wizard-Level, könnte das Ding selber schreiben)

Wizard-Level bedeutet, z.B. bei XML einen XML Parser selbst zu schreiben, nicht "nur" einen XML Parser zu benutzen. Wizard-Level heißt den PHP Interpreter selber schreiben können, einen HTTP-Server, JUnit nicht nur benutzen, sondern eine alternative Unit Test Library selbst schreiben

Java, C#
MySQL
HTTP
HTML/CSS
SOAP
XMPP
JSON
OAuth
TCP/IP
boost, STL
Eclipse
CVS, Subversion, Git
Win32, MFC, COM, XAML
3D-Engines, welche?
Selenium
PHP, Python, Ruby on Rails, Perl
MS SQL Server, Oracle
XML
JavaScript
REST
Ajax
COMET, BOSH
Objective-C , Scala, Groovy, Erlang
C, C++
gcc
Profiling
EC2, S3, SQS
wxWidgets, Qt, Gtk
Maven, Ant, Hudson/Jenkins
Spring, Hibernate
Javascript Libraries, jQuery, ExtJS, andere?
Netzwerk Programmierung, sockets, andere?
Concurrency, Mutex, pthread, andere Thread-APIs?
Assembler, welche?
DevStudio, welche Versionen?
Text Editoren, was verwenden Sie zum Programmieren/Scripting?
Web-Server, Application Server, Tomcat, Apache, andere?
Template Engines, welche?
Caches, Memcache, Redis, Terracotta, andere?
Browser Extensions, für welche Browser?
Unit Test Frameworks, JUnit, NUnit, andere?
Logging Frameworks, log4net, log4j, andere?

2. Methodik
Wie gut kennen und wenn ja, seit wann verwenden Sie:

Objektorientierte Entwicklung
Agile Entwicklung
TDD
BDD
SOLID
DRY
MVC
Refactoring
Unit Tests
Automatisiertes UI Testing
Automatisierte Integrationstests
Code Coverage Analyse
Coding Conventions
Frequent Releases, wie "frequent"?
Pair Programming
Software Design Patterns
Scrum als Developer, Scrum Master, PO
Refactoring- und Coding-Werkzeuge in Entwicklungsumgebungen

3. Allgemein

Haben Sie Computer zuhause?
Welche(s) Betriebssystem(e)?
Einen Rechner oder ein Netzwerk?
Haben Sie eine Website? welche URL?
Bloggen, Twittern Sie oder benutzen Sie andere Social Networks?
Können Sie Linux installieren und verwalten? Welche Distribution?
Auf welchen Plattformen programmieren Sie? Windows, Mac, Linux, iOS?
Haben Sie Cross-Plattform Erfahrung?
Programmieren Sie gerne?
Programmieren Sie viel? wie viel? gut? sehr gut?
Haben Sie an Open-Source Projekten mitgearbeitet? welche?
Gibt es öffentlich zugängliche Projekte? URL?
Können Sie Code oder andere Arbeitsproben zeigen?

2. August 2010

Tokyo Impressions

Brooklyn bridge and Statue of Liberty. A view from across the bay of Tokyo back to the Tokyo skyline (part of it). The skyline of Tokyo goes around the bay, very impressive.

The view is from Daiba, a resort complex with shops, restaurants, artificial woods and beautiful sand beach. There are restaurant boats slowly moving across the bay's arm. What looks like the Brooklyn bridge is actually the Rainbow bridge.
On Sunday I did the tourist thing: visiting temples, shrines, markets and the big shopping quarters.


At a budism temple - for a 100 yen contribution -I got a look at my future fortune. By chance (or maybe not) I seemed to be the luckiest guy.

This paper says "Best fortune: your dream will come true, if sick will heal quickly, person I am waiting for will come". The locals say, that this is the best one can get.

Lets see what the future holds.
The big KLab 10 year anniversary party. All 200 employees where there. The COO was DJ with hoody (Kaputzenpulli), his normal office dress. CEO gave a cool show on the stage. Lots of entertainment including the company's own girl band (!). People are very kind. I liked it very much.

Alcohol for free like beer, whisky. Unfortunately no RedBull for the wodka available. Started with Coke. Later I specialized on "umeshu rokku", apricot liquor on the rocks. Just say to the bar keeper: "umeschulokku".

Tokyo by night on the way back.

Just like any other city for a small person in a big street. But clean and very safe.

This was a good week.

Cya

29. Juli 2010

IBM recommends XMPP for Realtime Web Apps


There is a new tutorial from IBM about how to build modern realtime web apps. In the tutorial IBM suggests using XMPP, BOSH from JavaScript. It is worth reading.

http://www.ibm.com/developerworks/xml/tutorials/x-realtimeXMPPtut/index.html

This is exactly how weblin.lite was built 2 years. Even including the HTTP proxy to circumvent the JavaScript security limitation, tunneling XMPP through HTTP with BOSH, using a real XMPP server for message routing and a JavaScript XMPP client library to communicate. Also: jQuery, Ajaj, XML, JSON, WebServices, mysql. Basically, all the cool web-tech stuff we like.

Congrats to the weblin dev team. The best dev team I've ever had.

_happy_boshing()

Yes, we have been there. Now it is so much a standard, that IBM recommends the technology. It will be picked up by many others and we are already the experts. So much for certain ignorant investors and business angels, who do not recognize technology in their portfolio, even if it jumps into their face. We will be there without you.

23. Juli 2010

Vorbereitung für Tokio

Morgen Samstag 13:55 fliege ich von von Hamburg nach Frankfurt. Nach 5 h Aufenthalt (war billiger) von Frankfurt nach Tokio. Komme dort Sonntag
15 h Ortszeit an.

Tokio hat 7 h Unterschied zu Schland. Wenn hier 10 h ist, ist dort schon 17 h. Die Japaner sind uns was voraus. Ich werde da 3 Wochen sein. Und es wird heiss. Habe viele T-Shirts dabei.

Treffe in Tokio einen alten Freund aus Weblin-Zeiten. Mal sehen was da in Japan so geht Das wird ein Spass. Und ein Abenteuer - lost in translation.

happy_traveling()

22. Juli 2010

Virtual Goods Ticker

I just moved the Virtual Goods Ticker to its own domain.

Until recently, the Virtual Goods Ticker was hosted by this blog and all news updates constitued a single page/posing on this blog. From now on Virtual Goods Ticker is a blog in its own right with its own domain http://www.virtualgoodsticker.com and you can subscribe to the RSS feed.

The Virtual Goods Ticker provides daily updated news about:

  • virtual goods,
  • virtual items,
  • real money transfer (RMT),
  • micro payments, and
  • free to play business models.
_happy_tickering()

23. Mai 2010

Galactic Developments ist Premium Content

Habe letzte Woche ein kostenloses Adwords-Schnupperangebot von Google verwendet, um Besucher auf Galactic Developments zu leiten. Laut Google Analytics hatte die Website einige hundert Besucher in wenigen Tagen und sie scheinen das echt zu lesen.

Besucher bleiben im Schnitt unglaubliche 8 Minuten und machen dabei 7 Seitenzugriffe. Mehr als eine Minute pro Seite. Entweder sie schlafen ein oder lesen es tatsächlich.

Die Verteilung der Verweildauer ist auch interessant. Ein Drittel springt nach 10 Sekunden ab. Das sind natürlich die, die was Anderes erwartet haben. Weitere 12 % klicken bis zu einer Minute rum. Danach kommen die echten Leser: über die Hälfte bleibt länger als eine Minute, die Meisten bis 10 Minuten.

39% von denen, die die ersten Geschichtsseite (Interplanetare Entwicklung) lesen, klicken zur nächsten, obwohl da nur ganz unten nach längerem Scrollen ein Link ist. Ab da ist der Leser "gefangen". Von der zweiten Seite (Die solare Koalition) geht es für 86% weiter zu Der Aufbruch zu den Sternen. Da setzen leiche Ermüdungserscheinungen ein: weiter gehts mit 47% zu Siedlungspolitik auf Konfrontationskurs. Ab da klickt der harte Kern der Leser weiter von Seiten zu Seite: 86%, 62%, 82%, 90%. Alles ziemlich gute Werte.

Das ist richtig toll.

_happy_reading()

1. April 2010

Suche Projektleiter, Teamleiter, Senior Developer, Lead Operator, Datenbank Manager

Als CTO der Deutschen Messe Interactive (DMI), einer neuen Tochter der Deutschen Messe AG in Hannover, suche ich für die IT-Abteilung mehrere Leute:

  • Projektleiter(in) - Integration Manager
  • Teamleiter(in) Softwareentwicklung - Senior Developer
  • Senior Systemadministrator(in) - Lead Operator
  • Datenbank Fachleiter(in) - Database Business Manager
  • Projektleiter(in) - Scrum Product Owner
  • Software Entwickler(in)
Stellen im Detail:
Ich baue in den nächsten 18 Monaten die IT-Abteilung der DMI auf. Dieses Jahr werden wir 5 Personen einstellen, nächstes Jahr weitere 10. Wir suchen besondere, gute Leute, die mit anpacken, Produkte und Projekte umsetzen und mit dem Unternehmen wachsen wollen. Wir haben hier die Chance eine moderne IT aufzubauen, moderner, als unser Top-Management für möglich hält. Alles ist neu, keine Altlasten. Neuer guter Code und Softwarearchitektur. Wer mich kennt, weiss, dass wir aktuelle Technologien verwenden: Agile, Scrum, Unittesting, Clean Code, SOLID, DRY, KISS und wir werden bald wieder ein regelmäßiges Developer-Seminar machen.

Die Deutsche Messe stellt im B2B-Umfeld Kontakt zwischen Herstellern und Interessenten her. Dazu dienen die großen Präsenzmessen CeBIT, Hannover Messe und viele andere. Die DMI setzt das Business der Messe im Netz fort. Die DMI führt Anbieter und Geschäftskunden über das Internet zusammen. Durch enge Verzahnung mit den Marketing- und Vertriebssystemen der Hersteller wird der Wert solcher Kontakte wirtschaftlich messbar. Kein Spam, keine New Economy, keine Handelsplattform, sondern echte Business Leads.

(Etwas) mehr über Deutschen Messe Interactive:
Bezahlung: gut
Urlaub: ziemlich gut
Arbeitsort: Hannover
Sicherheit: ja, das Startup ist solide finanziert (kein VC)

Schreibt mir an: heiner.wolf@messe-interactive.de
Schickt mir eine Telefonnummer und ein kurzes Profil. Ich rufe zurück.

Stellenausschreibung Senior Systemadministrator

Ihre Aufgaben:

  • Setup und Betrieb der Produktivserver für interne und externe Benutzer
  • Planung, Setup und Betrieb von Load-Balancer und Failover-Mechanismen
  • Verantwortung für Installation, Betrieb, Update, Sicherheit und Backup
  • Kommunikation mit dem Hosting-Dienstleister
  • Beratung der IT-Leitung bei Plattform- und Strategiefragen
  • Aufbau und Leitung des Operating-Teams
Ihre Skills:
  • Mehrere Jahre Erfahrung als Linux Admin (Debian)
  • Betrieb einer LAMP (PHP) Plattform
  • Erfahrung mit Installation und Betrieb von Open Source Anwendungen
  • Apache, DNS, Firewall, Load-Balancer, Backup-, Überwachungs- und Alarmierungtools
  • Professionelle Erfahrung mit Mailserver-Konfiguration und Massen-Mailings
  • Erfahrung mit CMS-, CRM-, Shop-Systemen
  • Im Produktiveinsatz: Munin, Nagios Subversion, NFS, rsync, VPN
  • Erfahrung als Administrator eines hochverfügbaren Systems
Vorteilhaft:
  • Mehrere Jahre Erfahrung im B2B Umfeld
  • Im Produktiveinsatz: LDAP, NFS, SOAP, mono
  • Windows Small Business Server
  • Konfiguration und Betrieb von SugarCRM, Joomla, Drupal, osCommerce, OTRS
  • Praktische Erfahrung mit Video-Streaming
  • Erfahrung im Einkauf von Internet-Dienstleistungen: Hosting, Traffic
Arbeitsort: Hannover
Beginn: je früher desto besser
Profile an: heiner.wolf@messe-interactive.de

Stellenausschreibung Teamleiter Softwareentwicklung

Ihre Aufgaben:

  • Technische Projektleitung über alle Projektphasen (Konzeption, Implementierung, Integration, Test und Rollout)
  • Steuerung der Implementierung von Komponenten und Systemen auf einer LAMP Plattform
  • Verantwortung für die Entwicklung von Produkten und Einzelfeatures
  • Kommunikation mit Dienstleistern und Partnern, Koordination der Umsetzung
  • Aufbau und Leitung eines Scrum Entwicklungs-Teams
  • Praktische Arbeit bei der Implementierung als „primus(a) inter pares“
  • Mitarbeit bei der Festlegung der IT-Strategie für die Systeminfrastruktur
Ihre Skills:
  • Sehr gute Programmierkenntnisse und mehrjährige praktische Arbeit in wenigstens 2 der Sprachen: C++, C#, Java, PHP, JavaScript
  • Sehr gute Kenntnisse in CSS, JavaScript, XML, DOM/DHTML, Subversion, Webservices, MySQL, LAMP
  • 4 Jahre Erfahrung und sehr gute Kenntnisse in objektorientierter Programmierung und Web-Anwendungsentwicklung
  • Projektleitungserfahrung
  • 2 Jahre Teamleitung als Lead-Developer/Senior-Developer
  • Praktische Erfahrung mit Agile-Development Methoden, wie Unit-Testing, Nightly-Builds und Pair-Programming
  • Abgeschlossenes Hochschulstudium in Informatik oder Naturwissenschaften
  • Sehr gute Englischkenntnisse
Vorteilhaft:
  • Praktische Erfahrung mit Scrum
  • Programmierung von Kernfunktionen oder Erweiterungen von Open Source Anwendungen wie SugarCRM, Joomla, Drupal, osCommerce
Arbeitsort: Hannover
Beginn: je früher desto besser
Profile an: heiner.wolf@messe-interactive.de

Stellenausschreibung Datebase Manager

Ihre Aufgaben:

  • Produktmanagement Management und Weiterentwicklung für die der Adressdatenbank der Deutschen Messe Interactive GmbH (enthält u.a. die Besucherdaten der CeBIT und HANNOVER MESSE)
  • Planung und Weiterentwicklung der Datenbankstruktur
  • Verantwortung für die Datenqualität: Interne und externe Qualifizierung und Anreicherung der Datenbasis
  • Segmentierung der Datenbank und Erstellung von Mailverteilern für Leadkampagnen
  • Auswertung der Leadkampagnen und Einpflegen der Resultate in die Adressdatenbank
  • Erstellung von Korrelationen und Auswertungen zur Verbesserung der Mailingeffizienz (Datamining)
  • Betreuung von Hilfskräften (Werkstudenten) und externen Dienstleistern zur Qualifikation/Anreicherung der Daten
  • Aufbau der Datenanalyse, BI
  • Leitung eines Teams
Ihre Skills:
  • Mehrjährige Erfahrung im Betrieb und Qualifikation von Adressdatenbanken
  • Ausgezeichnete SQL-oder OLAP- Kenntnisse
  • Erfahrung bei der Nutzung von statistischen Tools zur Segmentierung und Korrelationsanalyse (Datamining)
  • Erfahrung in der Verwendung von BI-Tools
  • Kenntnisse des Marktumfelds für externe Adresslieferanten (Datenbankqualität und Konditionen)
  • Erfahrung in der Leitung von kleinen Teams und der Steuerung von externen Dienstleistern
  • Studium der Informatik, Mathematik oder ähnliches
  • Sehr gute analytische, mathematische Fähigkeiten
  • Gute Englisch-Kenntnisse
Vorteilhaft:
  • Erfahrung im B2B Umfeld und oder im Direkt-Marketing Umfeld
Arbeitsort: Hannover
Beginn: je früher desto besser
Profile an: heiner.wolf@messe-interactive.de

Stellenausschreibung Product Owner

Ihre Aufgaben:

  • Interne Positionierung und Entwicklung der DMI-Innovationsmarketing-Plattform: Zielgruppen, Konsistenz, Kernnutzen, Aufwände, Synergien; interne Abstimmung mit DMI Produktleitung, Kommunikation und Muttergesellschaft; fachliche Leitung externer Dienstleister; Benchmarking mit Wettbewerbsfunktionalitäten
  • Product Ownership nach “Agile”-Methodik: Verantwortung für die Wirtschaftlichkeit der Produktentwicklung durch fachliche Leitung der internen und externen Entwicklerteams, insbes. Definition der User Stories; Priorisierung anhand eigener Wertanalysen; Pflege des Product Backlog; Feature Reviews und Abnahmen; enge Abstimmung mit Product Marketing und User Experience Design; Mitwirkung bei Prozessverbesserung der Produktentwicklung
  • Laufendes Erheben und Abgleichen der Produktperformance gegenüber Annahmen und Wettbewerb, und Nachsteuern über kontinuierlichen Verbesserungsprozess
  • Einsatzplanung und fachliche Betreuung von Werkstudenten in Praktikumsprojekten

Ihr Profil:
  • Mehrjährige Erfahrung mit fachlicher Konzeption, Projektleitung und marktreifer Realisierung von Online-Produkten
  • Erfahrung in mindestens 2 der 3 der Marktumfelder Onlinewerbung, Direktmarketing, und Online-Verlagswesen, bevorzugt auf internationaler Ebene
  • Vertrautheit mit „Agile“-Methoden zur Produktentwicklung, bevorzugt Scrum
  • Erfahrung mit Betreuung von Praktikumsprojekten
  • Diplom-Abschluss in Informatik, Kommunikations- oder Naturwissenschaften
  • Sehr gute konzeptionelle und analytische Fähigkeiten
  • Sehr gute Englisch-Kenntnisse
Arbeitsort: Hannover
Beginn: je früher desto besser
Profile an: heiner.wolf@messe-interactive.de

11. März 2010

Open Source Fusion Funding Success

Great, Prometheus Fusion got more than the needed 3.000 $ on kickstarter.

The guy already achieved fusion with a grid based fusor. He is now working on the first (to my knowledge) one-man-show/small-budget gridless virtual cathode polywell IEC device. Not as big and cool as the EMC2 device, but still amazing for a garage project. Maybe comparable to EMC2's WB-3.

I am proud to be an early backer (#5 of 79 on day 2)

_happy_fusing()

3. März 2010

Welcome Neptun

In my spare time I am currently implementing a virtual items management system for the OVW project. During October/November 2009, I programmed a rudimentary item inventory as a Web portal in C#. I am developing on Windows/.NET and run the production server with Linux/mono. (BTW: mono is really great).

Since I had no item server, I implemented a quick web service, which simulated an item server to populate my inventory with dummy items from a dummy web service. This is a view of the inventory as a web page.

The simulator worked directly on the database with lots of SELECTs each time you accessed the inventory page, which shows all items. As we all know, caching helps to take load off the database, but in the case of virtual items, caching is not enough. Virtual items are active. They live. They have timers. They interact, and they change over time. Every single activity invalidates the cache. What virtual items need is an active cache.

That's what I programmed in the last 3 weeks: a specialized cache only for virtual items which can be accessed like a web service via HTTP. The protocol could be SOAP (too heavy) or REST (too unstructured). As you might have guessed, the protocol actually is SRPC.

So, now I have an item server that

  • populates the inventory and
  • serves as an active cache for the database, and
  • has a web service interface.
The thing is called "Neptun". (Yep, I just noticed, that it should be "neptune")

The inventory web page above is for users. Developers can also see items in the item server, but they are much more bare bone there. Neptun has a web user interface. There is a list of item numbers and item properties. Not much for the user, but informative for developers.

Neptun has been developed with lots of unit tests and integration tests (as usual). And here is another proof, that unit-testing is king: when I replaced my dummy item service with the real item server by exchanging just one web service URL, the thing just worked.

_happy_orbiting()

Thanks to Ingo for consulting at the Silpion party.

16. Januar 2010

Metaprognose Fazit 2009

Nun ist es offiziell. Das BIP ist um 5% geschrumpft.

Hier nochmal der erste Absatz meines Postings vom 6. Februar:

"Zur Zeit überbieten sich die Wirtschaftsforscher mit Negativprognosen. Während vor einem halben Jahr für 2009 noch 1,5% Wachstum in Deutschland vorhergesagt wurde, liegen wir im Moment schon bei -2,5%. Extrapoliert man das Q4 2008, dann wären auch -4,8% möglich."

Na bitte.

Nur so nebenbei: da steht auch "DAX 3.500". Das war bei einem Stand von 4644. Einen Monat später war dann das Minimum bei 3666.

Gar nicht so schlecht für'n Techie.

_happy_forecasting()

9. Januar 2010

Blizzards Next MMO

The next game will be a cross over between MMORPG, Adventure, and the Sims in a futuristic cyber punk world with space flight and also dark corners. Here is why:

What's next?

There was always the question what would be the next big thing. But until recently the industry was too busy creating Everquest clones with many different skins. The main movement in the MMO space was to duplicate the success of WoW. We saw very successful games by 2004 standards, which are now regarded as complete disappointments because they failed to reach WoW numbers.

Now is the time to go one step further. The blog-chatter about what's next is ramping up. More and more people are talking what could be next. Blizzard started hiring for the next game some time ago, hinting at a "different massively multiplayer experience". Clearly, the concept of monster beating with the tank-healer-DPS trinity will not be enough for the next generation of games. Repeating the same in a steam punk or wild west universe won't do.

To call it the next generation there must be something really new and different. On the other hand, Blizzard does not primarily innovate. Blizzard perfects. So, we have to look for existing trends which can be pushed to the next level by extensive polishing.

Crossover and Integration

I believe that crossover and ubiquity are the key motives. Not the ubiquity of augmented reality. That will be left for the 2025 generation. The next MMO will break out of platform restrictions and single operation models. The next generation will span multiple platforms, integrate different play styles and address diverse audiences in one game.

We already see many of these developments. CCP is very successful with EVE-Online (by 2004 standards :-). They lead the way into new territory with a console game that is separat from EVE, but still integrates with the PC game. Public character profiles outside of the game client where once a "great" feature. They combine the game world with the Web and are now taken for granted. Some publishers successfully integrated the mobile platform with PC games. Virtual goods and social games made a remarkable splash last year and are expected to explode in 2010/11. Virtual goods are a great way to address multiple platforms at once and integrate casual gaming with hard core play style. Social networks are sometimes regarded as virtual worlds. Not in the 3D sense, but in the sense, that people and all of their friends live there.

200 Million Dollar Production

There is a company that managed to perfect trends so well, that it produced the leading game in 3 genres. Blizzard also is the only company that dares to invest a lot of money into an MMO. After the perceived failures between 2005 and 2008 investors shy away from MMOs. Blizzard surely believes in its own capabilities having proven them 3 times in a row. And we are talking about a lot of money. Not the $ 60 Mio. price tag of WoW. We can expect the next generation to cost as much as a big movie production. Something like $ 200-300 Mio.

Casual and Extreme

So here is my take: Blizzard needs something that captures the masses. For the next thing they need a larger audience than WoW. A demographics like Facebook is the goal and Facebook numbers would be cool. This means normal people. Not only hardcore gamers but average people. Normal people, especially women want to live, not slay monsters. They want to live a life, tend their stuff, socialize, and care for others. Micro-managing a farm or a fish pond is currently big. Micro-managing also has been very successful with women earlier. That's the Sims aspect of the new game: housing, living, socializing. Yep, Sims online failed, but nobody knows why. This time the concept will succeed as part of something larger.

Adventure and Social

There must also be adventure. Story is an emerging trend. Blizzard will capture adventurers with better quests and story driven soloing: a Longest Journey aspect instead of the kill-ten-rats grind. Raiding and end game is and will be important. There must be dungeons. That's the easy part: the WoW aspect. Of course, it's not a sharded server. Everyone will live in the same huge universe. That's a requirement of the Facebook aspect. It is free to play with virtual items driven premium features covering casual and power gaming styles.

To capture the masses, the game will not be limited to a genre. Genre can scare off customers. It won't be pure fantasy, not SciFi, not just underworld darkness. Not Starcraft, not WoW, not Diablo. It will be a new setting. The Sims aspect needs a big bright world. The Longest Journey works well modern setting. However, the WoW aspect needs dungeons and mystery. And when you enter a space ship then you are clearly SciFi.

Cyber Punk and Monsters

Fortunately they can all be combined. Imagine a futuristic city with player housing. This is where you live. The normal game life happens in a hyper developed privileged world, surrounded by technology and lifestyle with current western and Asian street trends. Starting in this futuristic environment players would adventure in the "upper world", uncover conspiracies and safe the world (see The Longest Journey). They could easily switch to cyberspace (Otherland) for parts of the quests. My own wishful thinking would add space travel and combat a la EVE-Online or SWG, including an Elite universe.

And where there is light, there is also shadow. The underworld of the distant future is big, dark and old. It is a perfect environment for a World of Darkness where technology meets arcane arts and monsters. Vampires? no problem: a product of criminal bio engineering or uncontrolled nanotech. Or they just developed over thousands of years in kilometers deep dungeons of a planetary megalopolis. Monsters have been gengineered or imported over thousands of years. The perfect setting for an embedded RPG shooter. But "underworld" does not imply darkness. Future tech will supply lower levels with a virtual sky and enough light, if needed. It's just not as civilized as the upper world.

Genre scares off customers. The basic system will be genre free with a slight twist towards hyper modern reality. Other genres will be embedded. Genre embedding is already happening. We stopped wondering a long time ago about the gnome steampunk embedded into Tolkien-fantasy WoW.

Combat and Farming

Of course adventures in both worlds will have combat with the full range of skills, guns, quests, shooting, nano and bio weapons, field effect, casting, regeneration, healing, vicious enemies, robots, cyberspace hacking, monsters. But also character development, tending the garden, arranging player housing and meeting friends. A world where the whole family can live, do their preferred activity (dad: adventure, mom: sims, son: shooter, daughter: social) and meet for diner. A single access point for an online life accessible from different media like PC, console, mobile, browser.

EVE, Second Life, Sims, Facebook, Zynga: watch out.

Sounds too much? we are talking about a product life cycle from 2015 to 2030, about 64 core CPUs, full body gesture controlled Sims and friends who join your family in their virtual living room with ambient 3-D proximity voice and video. It will be futuristic ... and polished.

_just_guessing()

Update:
Just minutes after I posted, I saw this Massivly article in the feed reader. Massively posted 5 hours after I started writing. What a coincidence. Especially since I copied large parts of the text from my 2 years old "suggestion" to CCP. @CCP: it's not too late.