Leider kann man .NET Applikationen nicht ohne weiteres von Desktop Systemen auf Comapct Framework basierte Systeme kopieren. Das CF unterstütz nicht den vollen Umfang des .NEt Frameworks. Zwei Probleme die bei der Portierung multi-thread-fähiger Applikationen auf das CF auftreten können werden im folgenden gelöst:

Die erste Falle lauert im Aufruf

System.TimeSpan yield = new System.TimeSpan(10);
System.Threading.Thread.Sleep(yield);

Das CF unterstütz den Sleep-Aufruf nicht mit einerm TimeSpan Struct als Paramter. Ein Integer ist hier die Lösung und im Handumdrehen implementiert:

System.TimeSpan ts = new System.TimeSpan(10);
int yield = ts.Milliseconds;
System.Threading.Thread.Sleep(yield);

Spannender wird es beim Aufruf der WaitOno-Methode. Diese wird im CF lediglich ohne Paramter unterstützt. Wer neben dem externen Signal auf einen timeout wartne möchte, kann dies lange tun. Eine einfache Möglichkeit bietet ein PInvoke-Aufruf:

[System.Runtime.InteropServices.DllImport("CoreDll.dll")]
private extern static System.Int32 WaitForSingleObject(
    System.IntPtr Handle,
    System.Int32 Wait);

Jetzt kann der Aufruf

foo.WaitOne((int)((bar - System.DateTime.Now.Ticks), false);

durch folgenden Dreizeiler ersetzt werden:

System.IntPtr hProcess = foo.Handle;
System.Int32 iWait = (int)((bar - System.DateTime.Now.Ticks));
WaitForSingleObject(hProcess, iWait);

Kompilieren, auf das mobile Gerät kopieren und wieder ist ein Tag gerettet.

Posted at Tuesday, November 16, 2004 2:49:03 AM (W. Europe Standard Time, UTC+01:00) 
Comments [0] #      | 

Zeit zur Selbstbeweihräucherung! Mit den beiden Kollegen Saternus und Kindzorra haben wir den Besuchern des Wissenschaftstages im September unsere Technologien und das Zusammenspiel mit Fischertechnik näher gebracht! Ein voller Erfolg, und jetzt der Lohn:

Martin, Oliver and me at fischertechnik Fan-Club

Posted at Thursday, November 11, 2004 11:55:51 PM (W. Europe Standard Time, UTC+01:00) 
Comments [0] #      | 

"see it. and hear it. first on ***."
anonymous

Posted at Thursday, November 11, 2004 11:28:52 PM (W. Europe Standard Time, UTC+01:00) 
Comments [0] #      | 

Das UPS Tracking-Tool ist für mich eine der größten Errungenschaften der Menschheit! Wenn ich mir soetwas anschaue, verstehe ich es manchmal nicht, wie es manche Menschen noch ohne DAS Netz aushalten!

Posted at Thursday, November 11, 2004 8:50:04 AM (W. Europe Standard Time, UTC+01:00) 
Comments [0] #      | 

06:42 Uhr ICE startet Richtung Berlin. Dabei bin ich gerade erst schlafen gegangen, das war eine harte Nacht, mehrere hundert LOCs sind mir aus den Fingern gefallen. Da Programmieren durchaus eine Kunst ist, sollte man die Muse, hat sie einen denn endlich geküsst, nicht mit einem Plattschuss erlegen, sondern sich direkt Ihrer Fügung hingeben.

 

Irgendwann gegen Mittag kommt der Zug an. Verspätung. Ach ja, die Queen ist heute in Berlin, da muss halt ein Zug schon einmal 30 Minuten 500 Meter vor dem Bahnhof warten. Zu spät zum Termin angekommen, haben sich die Kollegen der TU Berlin als extrem freundliche Zeitgenossen herausgestellt. Kollege Saternus, auch mit von der Partie, hat sich schon dem Kaffee gefrönt. 

 

The Master and Martin

 

 

An dieser Stelle muss man das wirklich lobenswert erwähnen: noch nie habe ich jemanden getroffen, der mit einer solchen Hingabe aber auch Geduld, die von ihm verfasste API erklärt hat. Leider hatte ich OneNote nicht auf dem Laptop installiert, also musste der vi des Windows herhalten und mit notepad.exe wurden spontan 3 Seiten mitgetippt.

 

Martin and me

 

Nachdem die Accounts für eine hier nicht näher genannte Sourcecode-Verwaltung angelegt waren, wurde auch gleich das Aus- und Einchecken an der Datenbank geübt. Mit neuem Sourcecode auf der Platte wird die Rückreise wieder angetreten. Während Kollege Saternus sich durch den Feierabendverkehr bis zum Flughafen durchschlagen muss, habe ich Glück: der Bahnhof ist nur ein paar Fußminuten um die Ecke: "Ahhhh, Berlin..." das war definitiv ein kurzer Besuch aber ein lohnenswerter. Während der ICE Sprinter mit nahezu der Take-Off-Geschwindigkeit einer Boing 757-200 entgegen des nächsten Sonnenaufgangs gondelt, werden noch liegen gebliebene Aufgaben erledigt. Das Outlook Postfach wurde schlielich noch mal schnell auf den aktuellen Stand gebracht und die 70 noch nicht gelesenen Mails haben sich enorm reduziert. Nichts desto trotz liegen noch 917 zwar gelesene aber nicht abgearbeitet Mails im Postfach nichts kritisches aber einfach Mails mit Links, Texten oder Informationen, die noch nicht verarbeitet sind. Im Akt dieser Arbeitswut sind natrlich auch einige Antwort-Mails der digitalen Feder entsprungen müssen später nur noch weggeschickt werden!

 

 

21 Mails to send

 

Wieder einmal neigt sich ein 19 Stunden Arbeitstag dem Ende entgegen mit dem Gefühl .NET ist doch eine feine Sache.

Posted at Thursday, November 04, 2004 12:40:14 AM (W. Europe Standard Time, UTC+01:00) 
Comments [0] #      | 

Ein Fehler wie folg popt plötzlich bei dem Kunden hoch: und dieser ist recht erstaunt, denn vor 5 Minuten hat die Applikation ja noch einwandfrei funktioniert.

Nach dem ersten Schreck sehen wir als erfahrener Entwickler, dass der Fehler eindeutig in der Konfigurationsdatei liegen muss!

Ja, sieht ja ganz gut aus. Und der Connection String, der vor 5 Minuten vom Kunden angepasst wurde scheint auch zu stimmen. Eine Test-Applikation kann sich mit dem angegebenen String ohne Probleme verbinden: Von Hand geht das auch, das XML ist wohlgeformt, um nicht zu sagen, ein besseres XML gibt es auch der weiten Welt nicht!

Na, den Fehler schon gefunden? Nein? Dann mal hierher schauen:

Na, jetzt ist es doch klar, oder? In der Tat, benötigt man nicht mehr als diese beiden kleinen Ausschnitte um den Fehler zu finden: Das Schöne am Arbeiten mit XML Dokumenten ist, dass man die Dokumente Formatieren kann wie man möchte, ob man jetzt 2 oder 4 Whitecaracter einrückt, oder ob man den Tabulator verwendet ist egal... und wenn einmal ein Leerzeichen zwischen den Tags steht, nun denn, das fördert die Lesbarkeit des Dokumentes. Mit einer Ausnahme: Vor dem <?xml darf nun mal KEIN Leerzeichen stehen, sonst wird das Dokument falsch geparst. Zu blöd, dass der Kunde beim “ndern der config-Datei versehentlich ein Leerzeichen hinzugefügt hat. Nunja, da der Kunde diesn un weiß, erkennt er auch den, wen nur marginalen Unterschied in den obigen Bildausschnitten...

Posted at Friday, October 29, 2004 4:51:06 PM (W. Europe Daylight Time, UTC+02:00) 
Comments [0] #      | 

Aus dem Film "Sneakers" aus dem Jahr 1992 mit Robert Redford kann ich mich noch an den Satz "no more secrets" errinern. In diesem Sinne steht dieser Eintrag unter dem Titel "no more errors".

Aufgrund einer Anfrage bin ich dazu gekommen, ein kleines Tool zu schreiben, welches eine bestehende  Datenbank mit zusätzlichen Einträgen füllt. Um sicherzustelen, dass dieses Tool keinen Unfog treibt, wird die komplette Entwicklung test-getrieben durchgeführt. Das hierfür verwendete Tool ist, wer hätte es auch anders erwartet NUnit. Um von Anfang an eine saubere Trennung wischen Tests und Programm zu erhalten wurden alle Tests in eine eigene Klasse respetive eine eigene File verfrachtet.

Bevor wir überhaupt mit der Entwicklung der GUI anfangen wird zunächst all die Funktionalität im System sichergestellt. Ein sehr primitiver Test: den Connection String für die Datenbank aus der.config-Datei zu laden:

[Test]
public void CanRetrieveConnectionString()
{
    Assert.IsNotNull(connectionString);
}

Dieser Test is einer der einfachsten, und einder der wichtigsten, denn klappt es hier nicht, klappt gar nichts. Un man sollte auf diese einfachen Tests wirklich nicht verzichten.

Natürlich müssen wir zum Testen auch Daten in die Datenbank pumpen, die wir später wieder entfernen müssen:

[TestFixtureSetUp]
public void FixtureSetUp()
{
   
// create uploader
   
uploader = new ManiacKeyUploader();
   
connectionString = uploader.ConnectionString;

    // fill database with test data
       //...
   }
}

Natürlich wird dies alles wieder in der [TestFixtureTearDown] alles wieder aufgeräumt, schilesslich sollen am Ende ja keine Karteileichen rumliegen: Was bringt das ganze, fragt man sich jetzt?

Wie man schön sehen kann, ist einer der Test fehgeschlagen. Ganz wichtig: Es handelt sich hierbei um einen Test, der vor den letzten Änderungen fehlerfrei durchlief. D.h. man kann mit Bestimmtheit sagen, dass in den letzten 5 Zeilen Code-“nderungen der Fehler begraben liegt, der sich auf den bereits vorhandenen Code auswirkt! DIESER Fehler wäre unter "normalen" Entwicklungsbedingungen nie mehr aufgetaucht und vermutlich erst beim Produktivbetrieb aufgefallen... Welche Kosten man durch ein solches Vorgehen spart... der vermdeindliche Mehraufwand lohnt sich allemal. Wer jetzt noch immer nicht davon überzeugt ist: Das Verhältnis Produktivcode zu Testcode liegt im Moment bei 1:2 und durch das test-getriebene Vorgehen wird der ganze Code wesentlich kleiner, schöner und effektiver.

Link: www.nunit.org

Posted at Friday, October 29, 2004 10:00:10 AM (W. Europe Daylight Time, UTC+02:00) 
Comments [0] #      | 

DAS kann man alles aus einem Windows XP mit Service Pack 2 herausholen! Und endlich kann ich der Welt auch einmal zeigen wie einfach das ganze geht. Natürlich hätte auch ich das nicht ohne Hilfe geschafft, aber einmal in die richtige Richtung gestupst ist es kein Problem mehr sein Desktop mehr und mehr zu tunen: Was AMG für Mercedes ist... ist mein Desktop für Windows!

Das Theme ist sogar ohne weitere Hilfsmittel auf dem System installiert worden, hierbei handelt es sich um das von Micrsooft erst vor kurzem veröffentlichten Energy Blue Theme Pack für die Tablet PC Edition 2005.

Posted at Thursday, October 28, 2004 10:44:06 AM (W. Europe Daylight Time, UTC+02:00) 
Comments [0] #      | 
Copyright © 1995-2009 by Andreas Heil. aheil is a registered trademark of Andreas Heil. All rights reserved.
The opinions expressed herein are my own personal opinions and do not represent my employers' views in any way. Content and thoughts expressed on these pages and the weblog are subject to be changed. Out of date posts should not be considererd as my current thoughts and opinions.