Archiv der Kategorie 'Entwicklung'

Hello, World!

Dienstag, den 24. August 2010

Den Titel dieses Blog-Beitrags wusste ich schon seit Monaten, nur der genaue Zeitpunkt war unklar. :-)

p1010027_550px.jpg
Ich bin nun ein vor Glück und Freude platzender Papa, und für einige Tage/Wochen erstmal nur sehr eingeschränkt erreichbar. :-)

Auf die an dieser Stelle üblichen Nerd-Gags mit fork(), sleep(), usw. verzichte ich. :-P

iTunes-Erpressung

Freitag, den 9. Juli 2010

Einer der vielen Gründe, warum ich das iPhone nicht mag:

img_4450_klein.jpg
(dieses Bild wurde auf einem iPod Touch aufgenommen)

Ich glaube kaum, dass die Akzeptanz der AGB vor deutschen Gerichten gelten würde… wer liest sich denn bitte wirklich die 107 (!!) Seiten durch?

Unnötig zu sagen, dass ohne die obligatorische Zustimmung Apps weder installiert noch aktualisiert werden können…

Schönerer Traffic

Freitag, den 20. November 2009

Für unsere Serverkunden gibt’s auch eine Optimierung im Kundenmenü: eine überarbeitete Anzeige aller Leistungsdaten. Bisher haben wir die Werte mit MRTG gesammelt und dann relativ umständlich selber verwalten müssen, welcher Kunde welche PNG-Datei sehen darf. Eine Lösung wie Cacti wäre “oversized”, und auch nicht so eng in unser eigenes System integrierbar wie wir es gerne hätten.

Und da wir im Rahmen eines anderen Projektes eh gerade Know-How in der Graphen-Erzeugung aufbauen, war es nur konsequent, nun selber die Leistungsdaten per SNMP in eigene Round-Robin-Tabellen zu sammeln und selber die Graphen zu erzeugen. Die erste Version ist nun online und kann sich durchaus sehen lassen:

traffic.gif

An einigen Details wird natürlich noch geschliffen (z.B. sinnvollere Aufrundung der Y-Skala, dynamische Zoom-Funktion, u.v.m.). Die Erzeugung der Graphen läuft übrigens komplett per JavaScript im Browser ab; für die SVG/VML-Erzeugung kommt RaphaelJS zum Einsatz. Die ganze Mathematik für die Umrechnung von Datenpunkten in Graphen kommt von uns, und wird wahrscheinlich mittelfristig auch als eigene Open-Source-Bibliothek freigegeben. :-)

Windows 7 RC - nur noch heute

Donnerstag, den 20. August 2009

Nur noch bis heute stellt Microsoft den Windows 7 (Ultimate) Release Candidate zum kostenlosen Download zur Verfügung. Die Testlizenz gilt bis Juli 2010 ohne besondere Einschränkungen. Alle weiteren Informationen gibt’s hier.

Dazu noch zwei Tipps:

  • wer keine Lust auf den Download Manager hat, findet mit der passenden Google-Suche (oder Bing ;-) ) auch direkte Download-Links.
  • nach einer Anmeldung bei Windows Live und dem Ausfüllen eines kurzen Fragebogens erhält man einen Aktivierungscode für Windows 7 RC. Beim Reload dieser Seite mit dem Aktivierungscode erhält man bei jedem Reload einen Neuen… ;-)

API: FAIL

Samstag, den 15. August 2009

Man kann lange versuchen, die MySQL-Funktion mysql_library_init() per dlopen()/dlsym() zu laden…

Die Lösung zeigt sich nach einem Blick in die Datei mysql.h:

#define mysql_library_init mysql_server_init

Die Funktion mysql_server_init() ist übrigens “deprecated”… :roll:

Unit-Tests mit check

Freitag, den 24. Juli 2009

Vor rund drei Wochen hatten wir hier “Kick-Off” eines brandneuen Software-Projektes. Das Thema dieser Software liegt mir schon seit Jahren am Herzen, und endlich sind Zeit und Kapazitäten da um das umzusetzen (wer mich etwas genauer kennt weiß wahrscheinlich um was es da geht - aber bitte vorerst noch nichts verraten!).

Die Software wird in C/C++ geschrieben und täglich in einem automatisierten Test-Lauf auf (fast) allen unterstützten Plattformen geprüft, unter anderem auf OpenSolaris, FreeBSD und diversen Linux-Distributionen. Hierfür werkelt ein XEN-Server, auf dem per Cron-Job werktäglich jede Nacht auf jeder DomU der aktuelle Sourcecode aus dem zentralen Subversion-Repository ausgecheckt, compiliert und getestet wird.

Um dieses Setup kümmert sich ein eigener Mitarbeiter bei uns, der alleine mit der Portierung (systemspezifische Init-Scripte usw.) und der Pflege der Testumgebung fast Vollzeit beschäftigt ist. Noch ist der Code ja eher übersichtlich: es steht gerade mal ein Codegerüst, mit dem sich ein Serverprozess starten und kontrollieren lässt, die übliche Log-Datei und PID-Datei schreibt sowie seine Konfigurationsdatei liest.

Für das Lesen der Konfigurationsdatei habe ich “keine Kosten und Mühen gescheut”™ und einen eigenen Parser mittels flex und bison geschrieben. War irgendwie ganz witzig - mein letzter Kontakt mit Parser-Entwicklung war im Studium, zum Nachgucken habe ich in meine damaligen Übungsprogramme vom Herbst 2001 (!) geschaut. 8-) Da wir aber zukünftig noch mehr mit Parsern machen werden, war dieser Schritt schonmal eine ganz praktische Auffrischung.

Für das automatisierte Testen setzen wir nach einigen Überlegungen nun auf check. Hierbei handelt es sich um eine u.a. von JUnit inspirierte, kleine aber feine Test-Bibliothek für C/C++-Anwendungen; mit ein paar Patches läuft die sogar unter Windows. Für den Konfigurations-Parser habe ich eben gleich die ersten Unit-Tests geschrieben. :-)

Wie wichtig (sinnvolle und umfangreiche) Unit-Tests für die Qualitätssicherung einer Software sind sollte ja hoffentlich bekannt sein. Die Entwicklung der Tests bremst natürlich anfangs ein wenig aus - dennoch ist es ein gutes Gefühl, mit dem Schreiben der Unit-Tests die Entwicklung einer Komponente ordentlich und ruhigen Gewissens abschließen zu können.
Das zweitwichtigste Werkzeug in unserer Entwicklung ist Valgrind. Die Unit-Test machen neben einer Funktionsprüfung nach Möglichkeit auch so eine Art “Lasttest”; dieser wird mit Valgrind analysiert um eventuelle Memory Leaks zu erkennen und dank Profiling zu optimieren.

Jedenfalls macht es schon jetzt viel Spaß, eine Software mal so “richtig ordentlich” zu entwickeln. :-)

Das “etwas andere” SMS-Gateway

Donnerstag, den 14. Mai 2009

Die Telekom bietet auf ihrem neu eröffneten Entwicklerportal Developer Garden Programmierschnittstellen für einige Dienste wie z.B. SMS-Versand oder Aufbau einer Telefonverbindung.

Wer statt der bereitgestellten SDKs die Webservice-Schnittstelle nutzen will (oder muss) wird es aber nicht leicht haben, wie die Dokumentation zeigt. Diese Lösung mag technisch zwar sauber sein, und in hochkomplexen Systemen wie bei der Telekom auch sicher berechtigt sein, aber vielleicht schießt diese doch etwas am Ziel vorbei. Für den Versand einer SMS-Nachricht werden mindestens 4 SOAP-Nachrichten hin- und hergeschickt, und insgesamt rund 20 kB Daten ausgetauscht…

Für unser SMS-Gateway reicht ein einziger HTTP-Request. Die Authorisierung erfolgt über ein Hash, welches das Passwort, einen Timestamp, alle Nutzdaten sowie eine fortlaufende Seriennummer umfasst. Somit wird kein Klartextpasswort übertragen (unabhängig von der SSL-Verbindung), und der Sendeauftrag kann nicht mehrfach ausgeführt werden. Und ein PHP-Client dafür ist in weniger als 5 Minuten programmiert. :)

Ich hasse PHP

Donnerstag, den 9. April 2009

Das ich kein großer Freund von PHP bin ist wahrscheinlich nicht neu. Inzwischen fällt es mir aber schwer, PHP überhaupt als Programmiersprache ernst zu nehmen.

Wer mir zuerst sagen kann, welches Ergebnis man denn nach Schritt 5 erwartet (und welches man tatsächlich bekommt), gewinnt einen Kugelschreiber. :)

$betrag = ‘34.04148′; # Betrag in CHF
echo “Input: $betrag\n”;

# Schritt 1: *20
$betrag = $betrag * 20;
echo “Schritt 1: $betrag\n”;

# Schritt 2: Rundung
$betrag = round($betrag);
echo “Schritt 2: $betrag\n”;

# Schritt 3: / 20
$betrag = $betrag / 20;
echo “Schritt 3: $betrag\n”;

# Schritt 4: * 100
$betrag = $betrag * 100;
echo “Schritt 4: $betrag\n”;
var_dump($betrag);

# Schritt 5: intval
$betrag = intval($betrag);
echo “Schritt 5: $betrag\n”;