Freie ePub Bibliotheken für C#

Vor ein paar Tagen war ich auf der Suche nach einer .NET Bibliothek zum Lesen und Schreiben von ePub Dateien. Bei ePub handelt es sich um einen offenen Standard für eBooks. Möchte man ePub-Dateien nur lesen, so dürfte sich die Bibliothek ePubReader anbieten, welche auf CodePlex zu finden ist.

epubreader.codeplex.com

epubreader.codeplex.com

Ist man auch auf das Schreiben von ePub-Dateien angewiesen, gibt es die Bibliothek DotNetEpub. An zweiter Stelle wäre die Bibliothek epubsharp.net zu nennen, allerdings existiert zu dieser Bibliothek kein Quelltext.

Private Variablen und Eigenschaften mittels NUnit testen

Manchmal möchte man private Variablen und Eigenschaften einer Klasse mittels NUnit testen. Im Normalfall lautet die Antwort auf diese Fragestellung – Nein. Stattdessen soll nur das öffentliche Interface getestet werden. Möchte bzw. muss man trotzdem ein privates Mitglied einer Klasse testen, so muss man sich der Reflection bedienen. Das könnte dann so aussehen:

string[] lines=(string[])typeof(MyClass).GetField("Lines",BindingFlags.NonPublic|BindingFlags.Static).GetValue(null);

In diesem Fall wird sich das statische String Array Lines aus der Klasse MyClass geholt. Je nachdem, wie man die entsprechenden BindingFlags einstellt, ist es auch möglich Instanzvariablen zu ermitteln.

Freie dreistellige .net Domains

Pünktlich zu Beginn des neuen Jahres war ich auf der Suche nach einer dreistelligen .net Domain. Da es natürlich keinen Spaß macht alle möglichen Kombinationen von Hand auszuprobieren habe ich das ganze automatisiert und mir eine Liste von freien .net Domains zusammengestellt. Die Liste ist dabei erwartungsgemäß relativ kurz:

5q3.net
5sy.net
8q9.net
9b6.net
9g4.net
9h4.net
c0f.net
d9i.net
g6t.net
g7f.net
i8e.net
j3q.net
j8l.net
k0g.net
k1g.net
k1t.net
k6q.net
l0b.net
l2y.net
l5j.net
l5q.net
l6d.net
n0u.net
o0f.net
o3f.net
o6p.net
o6u.net
o8c.net
p3v.net
q8c.net
q8k.net
r9l.net
s8h.net
s9r.net
u7r.net
y5d.net
y9h.net
y9p.net
y9q.net
z5i.net
z7g.net

Wer also noch eine dreistellige Domain braucht, sollte sich ranhalten ;)

Pattern für asynchronen Timer

In den letzten Tagen habe ich nach einem Pattern für C#/.NET gesucht welches elegant einen Timer zur Verfügung stellt. Gestoßen bin ich dabei auf ein Pattern, welches sich die neuen Keywörter async und await aus den aktuellen C#-Versionen zu Nutze macht. Mit Hilfe dieser Schlüsselwörter lassen sich nebenläufige Funktionen ohne größeren Overhead entwickeln. Die Timer-Funktion sieht dabei so aus:

async void StartPollingTimer()
{
    while(true)
    {
        await Task.Delay(2000);

        //Do something
    }
}

Aufgerufen wird das ganze dabei einfach mittels:

StartPollingTimer();

Der Entwickler muss sich dabei nicht mehr um die Thread-/Task-Verwaltung kümmern und kann damit auf die Schnelle einen Timer implementieren, welcher asynchron läuft.

HttpWebResponse.GetRequestStream hängt sich auf

Bei der gestern vorgestellten Twitter-Bibliothek bemerkte ich nach einigem Testen ein Problem. Folgender Quellcode:

var twitter=new TinyTwitter.TinyTwitter(oauth);
twitter.UpdateStatus(".");
twitter.UpdateStatus("..");
twitter.UpdateStatus("..");
twitter.UpdateStatus("....");
twitter.UpdateStatus(".....");

funktionierte nicht wie gewünscht. Anstatt auf Twitter diese fünf Tweets angezeigt zu bekommen, schaffen es nur die ersten zwei Tweets durch die API. Das Problem ergab sich hierbei daraus das sich die .NET Framework-Methode HttpWebResponse.GetRequestStream einfach aufhängte bzw. nicht mehr reagierte. Problematisch daran ist, das man als Entwickler keine Rückmeldung bekommt, warum das ganze schief läuft. Nach einiger Recherche stellte ich dann fest, das HttpWebResponse.GetRequestStream nur dann erneut aufgerufen werden darf, wenn der vorherige Aufruf der Methode abgeschlossen ist. Im Falle der TinyTwitter Bibliothek, habe ich das Problem durch Aufruf der Methode Abort (nachdem die angefragten Informationen angekommen sind) im HttpWebResponse-Objekt gelöst.