# Thursday, May 15, 2008

Erster FoeBuD-Treff in Siegen

Der Bielefelder Verein FoeBuD (Verein zur Förderung des öffentlichen bewegten und unbewegten Datenverkehrs e.V.) hat nach jahrelanger erfolgreicher Arbeit sein Einzugsgebiet für aktive Mitstreiter vergrößert. War bisher Bielefeld der Ort, an dem sich die Mitglieder trafen, so gibt es nun ein Konzept für FoeBud-Treffs (man könnte es mit den Chaos-Treffs des CCC vergleichen, wenn es auch nicht das gleiche ist). Der erste FoeBud-Treff wurde nun in Siegen gegründet, und ich bin dabei. Momentan noch nicht als Mitglied im FoeBuD, aber das wird sich in näherer Zukunft ändern.

Wer Interesse an der Mitarbeit hat oder sich einfach über Themen wie Datenschutz, Videoüberwachung oder ähnliches informieren möchte, ist herzlich eingeladen, uns bei einem Treffen zu besuchen oder uns auf anderem Wege zu kontaktieren. Regelmäßiger Treffpunkt ist das 7inch in der Siegener Oberstadt. Die Treffen finden jeweils am zweiten und vierten Mittwoch des Monats statt.

Thursday, May 15, 2008 8:42:44 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback
# Thursday, May 08, 2008

Neues Spielzeug gefällig?

Ich hoffe, dass mein Handyvertrag jetzt schneller ausläuft und mein Provider des Vertrauens das kleine Juwel in sein Portfolio übernimmt. Man sehe uns staune... das iPhone ist ja wohl ein Witz dagegen. Darauf läuft ja noch nicht einmal ein .NET Framework ;)

Thursday, May 08, 2008 11:35:36 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [2] | Trackback
# Wednesday, May 07, 2008

Powershell TCP Listener

The project I'm currently working on is an embedded device without any graphical interface capability. The only ways to get some information out is the NIC or a serial port. There is also a CAN-Bus interface, but as far as my company developed the device it is better to not base our debugging capabilities on a potentially buggy part of the system. Out first debug out was implemented as a serial output tracer. As the day comes closer that out hardware prototypes will arrive, the higher the need to port the tracing over to the NIC as far as the final hardware won't have a serial port on it.
So last week the network tracer was check in into source control. Now, how to read these information?
Windows ships with Hyper Terminal. But this isn't very comfortable and you manually have to reestablish a lost connection. In my today's lunch break I wrote a small powershell script that listens to the network socket. At the moment I'm porting it to C# to add some more features.

But here is the first part, a small and simple powershell script to listen to a network socket. But please let me clarify that this is code snippet is NOT the way code. It was a fast hack to get it running. There is no error handling and ressources are not freed gracefully as it has to be terminated with ctrl + c. In clear words: This is a sample on how to receive data from a network socket.

$socket = new-object System.Net.Sockets.TcpClient("172.16.170.123", 9950)
if($socket -eq $null) { return; }
$stream = $socket.GetStream()
$buffer = new-object System.Byte[] $socket.ReceiveBufferSize
$encoding = new-object System.Text.AsciiEncoding

while($true)
{
   if($stream.DataAvailable)
   {
      $read = $stream.Read($buffer, 0, $socket.ReceiveBufferSize)  
      write-host -n ($encoding.GetString($buffer, 0, $read))
   }
}

Wednesday, May 07, 2008 9:47:07 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback
# Sunday, May 04, 2008

Reaktionen auf den Flashmob

Ich hätte nie gedacht, dass der gestrige Flashmob-Versuch solch eine Aufruhr auf meinem kleinen, bescheidenen Blog erzeugt. In den Kommentaren zu meinem gestrigen Eintrag meldet sich ein Kritiker zu Wort, per Mailformular bekomme ich anonyme Hinweise, wer sich für die Aktion verantwortlich fühlt etc...

Disclaimer
Eines kurz zur Klarstellung: Diese Blog ist kein Flashmob-Blog. Ich habe lediglich aus lokalpatriotischem Antrieb etwas über den Flashmob geschrieben. Dieser Blog dient nicht zum Meinungsaustausch, zum bashen und flamen von Teilnehmern, Organisatoren etc. Mir unaufgefordert zugesendete Informationen ohne Absender werde ich nicht veröffentlichen. Ich fühle mich weiter nicht dazu verpflichtet, meine persönliche Meinungsäußerung vom gestrigen Tag zu widerrufen oder klarzustellen.

Sunday, May 04, 2008 2:09:52 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [1] | Trackback
# Saturday, May 03, 2008

Flashmob versus Shutdown Day

Wie man sieht, habe ich es nicht geschafft, der Shutdown Day-Bewegung zu folgen. Für mich war dieser bereits gestern. Heute gab es jedoch ein Ereignis, von dem berichtet werden muss:
In Siegen gab es einen Flashmob!
Laut der SchülerCC-Gruppe, die wohl die Hauptorganisation der Aktion durchführte, war dies der zweite Flashmob in Siegen. Ich war mit der Kamera vor Ort, konnte jedoch keine brauchbaren Ergebnisse erzielen.

Was ist ein Flashmob?
Laut Wikipedia ist ein Flashmob ein Blitzauflauf. Per Internet wird ein Treffpunkt organisiert, an dem sich dann scheinbar aus dem Nichts ein immenser Auflauf bildet. Der gesamte Mob führt dabei die gleiche Handlung aus. Nach der Aktion löst sich der Mob ebenso schnell in alle Richtungen auf, wie er sich gebildet hat.

Was in Siegen passierte?
Gegen 14:45 Uhr füllt sich langsam, aber sicher, das Erdgeschoss der dort ansässigen Einkaufsmeile. Die Sicherheitskräfte waren augenscheinlich eingeweiht, da teilweise Rolltreppen von anderen Stockwerken ins Erdgeschoss abgestellt wurden.  Gegen 14:55 Uhr war allerdings fast kein Durchkommen mehr. Von Passanten wurden wir gefragt, was denn hier los sei, worauf ein Bekannter sagte, es werde eine Autogrammstunde mit einem noch nicht bekannten DSDS-Teilnehmer geben. Gegen 15:00 Uhr konnte ich den angekündigten Pfiff vernehmen, worauf sich im vorderen Teil der Einkaufspassage alle auf den Boden legten. In dem Bereich, in dem ich mehr oder weniger eingeklemmt war, wurde der Pfiff gnadenlos ignoriert. Dadurch breitete sich das Ganze mehr als Laola durch die Passage, was jedoch den kollektiven Eindruck extrem störte. Nach noch nicht einmal einer Minute standen jedoch schon wieder alle, von den angekündigten zwei Minuten war also nur noch die Hälfte übrig geblieben. Somit war es für mich extrem schwer, aus der dunklen Ecke, in der ich eingezwängt war, in die helleren Bereiche vorzudringen. Als ich dort war, war das Spektakel bereits vorbei und es waren keine guten Bilder in der Kiste. Leider.

Persönliche Eindrücke
  1. Gut, dass es eine Bewegung gibt, die absolut unpolitisch die verschiedensten Jugendgruppen anspricht.
  2. Gut, dass die Jugendlichen mit solchen Aktionen feststellen können, dass sie es locker schaffen, den normalen Verkehr in einer Einkaufspassage komplett zum erliegen zu bringen.
  3. Gut, dass es sehr viele Teilnehmer waren.

  4. Schlecht, dass fast mehr Schaulustige als Teilnehmer anwesend waren.Schlecht, dass sich eine solche Menge (ich schätze ca. 300 Teilnehmer) nur auf zwei Haufen ballt. In vielen kleinen Gruppen auf allen drei Stockwerken wäre die Aktion viel imposanter gewesen.
  5. Schlecht, dass eine von zwei Gruppen den Einsatz total verpennt.
  6. Schlecht, dass es nur einen Organisator gab, der es nicht geschafft hat, die Gruppen zu verteilen, wobei er vorher bei beiden Gruppen mit Leuten gesprochen hat. Dort hätte es mehrere geben müssen, die sich auf die Aktion vorbereitet haben müssten.
  7. Schlecht, dass es nicht sehr spontan aussah. Wenn man wusste, was passiert, konnte man bereits ab 14:35 Uhr die ersten Anzeichen erkennen.
Fazit
Bleibt zu hoffen, dass solche Aktionen in Zukunft wiederholt werden (natürlich nicht die selben) und dass sich die Organisatoren etwas mehr zutrauen. Lieber 50 Leute auf drei Stockwerken verteilen, als 300 auf einem Haufen. Und mir persönlich wäre es sehr lieb, wenn man die angekündigten Zeiten erstens einhalten und zweitens verlängern könnte. Denn nichts beschreibt einen Flashmob besser als Bilder. Bei solch kurzen Aktionen ist es jedoch extrem schwierig, vernünftige Resultate zu erzielen.

Saturday, May 03, 2008 4:21:35 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [8] | Trackback
# Saturday, April 26, 2008

Shutdown Day 2008



Durch Damir Tomicic darauf aufmerksam geworden; und nun bin ich auch dabei.

Saturday, April 26, 2008 12:35:59 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback
# Sunday, April 20, 2008

Häuser wie Software

Und wieder hat der Code-Inside Blog einen sehr interessanten, diesmal weniger lustigen, weil leider wahren Artikel in seinem Blog veröffentlich. Allerdings hätte ich Mark durch Euro ersetzt; Was aber zeigt, dass das Problem bereits sehr lange bekannt und doch immer noch nicht gelöst wurde.

Sunday, April 20, 2008 12:37:51 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback
# Friday, April 18, 2008

Excel: Zellen verbinden per Shortcut

Ich musste gerade einige Zellen in Excel verbinden. Da mir das ewige Markieren - Rechtsklick - Zellen Formatieren - Zellen verbinden zu langsam war, habe ich nach einem Shortcut für diese Aktion gesucht. Leider bringt Excel so etwas nicht mit. Aber mit einem kleinen Macro kann man die Funktionalität nachrüsten:

Diese Makro wechselt nach der Zuweisung einer Tastenkombination den Status von mehreren Zellen von Nicht verbunden zu Verbunden und wieder zurück.
Sub Makro2()
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = Not .MergeCells
    End With
End Sub

Friday, April 18, 2008 9:56:58 AM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback
# Thursday, April 17, 2008

Bürospielchen - Lange nicht mehr so gelacht

Komme gerade nach einem echt langen Tag nach Hause. Muss auch fast schon wieder zum nächsten Termin, aber will mal schnell schauen, was mein privater Posteingang noch Ansprechendes zu bieten hat. Da dort leider nichts Ansprechendes zu finden ist, stöber' ich noch schnell durch meine RSS-Feeds und finde dabei einen Blogpost von Robert Mühsig. Da ein bisschen Spaß im Büro nie schaden kann, fange ich an zu lesen. Aber vor allem zu lachen. Mit Tränen dabei. Ach, lange nicht mehr etwas so lustiges gelesen. Ich denke, ich werde morgen mal mit Punkt 1.5 beginnen :)

Thursday, April 17, 2008 9:04:56 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [2] | Trackback
# Wednesday, April 16, 2008

Renaming of several Microsoft embedded products

From a post ont the Windows Embedded blog - Microsoft announced some name changes for their embedded products:
  • Windows Embedded CE is now known under Windows Embedded Compact
  • Windows XP Embedded is now known under Windows Embedded Standard
  • Operating systems wich embedded licences are now known under Windows Embedded Enterprise
  • Point of Service applikations and platforms are now known under Windows Embedded POSReady

Wednesday, April 16, 2008 8:44:17 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback

iX: Muschel verpackt

In der iX 5/2008 schreibt Dr. Holger Schwichtenberg:
Muschel verpackt

Die wegen ihrer Leistungsfähigkeit viel gepriesene PowerShell bietet bisher nur eine unkomfortable Benutzeroberfläche. Microsoft hat es bisher nicht geschafft, der Shell ein angemessenes GUI zu verpassen. Diese Lücke schließt nun das Third-Party-Tool PowerShellPlus.
Ich weiß ja nicht so genau, was Herr Dr. Schwichtenberg unter einer Shell versteht, aber für mich ist eine Shell eher Kommandozeileninterpreter als GUI. Ich denke, damit stehe ich nicht allein. Zugegeben; Ich habe den Artikel noch nicht gelesen und manchmal denke auch ich, dass es ein GUI hier und da etwas einfacher macht. Aber Shell bleibt Shell. Sonst könnte man es ja direkt MMC nennen. Außerdem ist die PowerShell als Ersatz für den Kommandozeileinterpreter cmd.exe gedacht, wenn man der Wikipedia glauben darf.

Wednesday, April 16, 2008 7:27:55 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback
# Sunday, April 13, 2008

Mit Powershell das EventLog eines Remoterechners überwachen

Mein Blog wird auf einem Windows 2003 Server gehostet. Da ich gerne wissen möchte, was dort so alles passiert, habe ich mir ein kleines Powershell-Script geschrieben, welches mir einmal pro Tag die Eventlog-Einträge des letzten Tages per E-Mail zusendet:

$sys = Get-Eventlog -list | Foreach-Object -process{Get-Eventlog $_.Log} | ?{$_.TimeGenerated -gt [DateTime]::Now.AddDays(-1)} |  ConvertTo-Html
$msg = New-Object Net.Mail.MailMessage("from@my.mail", "to@my.mail", "Daily Eventlog summary", $sys)
$msg.IsBodyHTML = $true
$smtp = New-Object NetMail.SmtpClient("mailserver.my.mail")
$smtp.Send($msg)

Was macht das Script genau?


Zuerst wird per
Get-Eventlog -list
eine Liste der auf dem System vorhandenen Eventlogs erstellt. Das Ergebnis wird an das Foreach-Object-Cmdlet gepipt, welches für jedes Element der Liste die Einträge abfragt:
Foreach-Object -process{Get-Eventlog $_.Log}
Die daraus resultierende Liste von Einträgen wird dann gefilter. Es sollen nur die Einträge weiterverarbeitet werden, die innerhalb des letzten Tages erstellt wurden:
?{$_.TimeGenerated -gt [DateTime]::Now.AddDays(-1)}
Diese Zeile kann auch als
Where-Object {$_.TimeGenerated -gt [DateTime]::Now.AddDays(-1)}
geschrieben werden, aber ? ist einfach etwas schneller.
Die gefilterten Einträge werden dann als HTML
ConvertTo-HTML
in der Variablen $sys gespeichert.
Im nächsten Schritt wird ein System.Net.Mail.MailMessage-Objekt erstellt, welches die HTML-Liste $sys der Eventlog-Einträge als Nachrichtentext übergeben bekommt.
$msg = New-Object Net.Mail.MailMessage("from@my.mail", "to@my.mail", "Daily Eventlog summary", $sys)
Die MailMessage-Instanz ist nötig, da wir eine HTML-Mail versenden wollen.
$msg.IsBodyHTML = $true
Möchten wir PlanText versenden, können wir den Nachrichtentext auch der $smtp.Send()-Methode übergeben.
Um die Mail per smtp.Send versenden zu können, muss erst der SmtpClient instanziiert werden. Im Konstruktor bekommt er den Mailserver übergeben, über der die Nachricht gesendet werden soll.
$smtp = New-Object NetMail.SmtpClient("mailserver.my.mail")
$smtp.Send($msg)


Im nächsten Schritt werde ich daraus ein kleines, konfigurierbares C#-Programm erstellen, das zum Beispiel verschiedene Ereignisquellen ausfiltern kann.

Sunday, April 13, 2008 12:44:37 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback
# Wednesday, April 09, 2008

Duff's Device

Da ich momentan eher mit C beschäftige, dort allerdings noch ein paar Fragen offen waren, hatte ich heute ein Code Review mit einem "alten Hasen". Dabei gab es eine Menge zu lernen. Als ich später mit meinem PM (der auch aus der C/C++-Welt stammt) das Review besprach, zeigt er mir einen netten kleinen Codeschnippsel: Duff's Device. Ich lasse das hier einmal ohne Erklärung stehen.
n = (anzahl + 3) / 4;
 
switch(anzahl % 4) {
    case 0:        do { ziel[stelle] = quelle[stelle]; stelle++;
    case 3:             ziel[stelle] = quelle[stelle]; stelle++;
    case 2:             ziel[stelle] = quelle[stelle]; stelle++;
    case 1:             ziel[stelle] = quelle[stelle]; stelle++;
                   } while(--n > 0);
}
Für meine C#-Augen war das ja gar nichts. Fallthrough im Switch-Statement. Brrr. Wenn das der Compiler sehen würde ;) Aber C ist eben etwas ganz anderes.

Wednesday, April 09, 2008 9:29:20 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback
# Tuesday, April 08, 2008

String.Format mit geschweifter Klammer

Mit Hilfe der String.Format-Methode können ja bekanntlich formatierte Einsetzungen in einen String vorgenommen werden. Im Ursprungsstring werden dazu Platzhalter in der Form {0}, {1}, etc eingefügt. Sind allerdings im Formatstring, als dem String, in den die neuen Teile eingesetzt werden, geschweifte Klammern enthalten, werden diese als Formatierungszeichen betrachtet. Aufgefallen ist mir dies bei der Formatierung der Zeichenkette:
#ifndef _BLABLUB_H_
#define _BLABLUB_H_

#  ifdef __cplusplus
  extern "C" {
#  endif /* __cplusplus */
BLABLUB sollte dabei durch den entsprechenden Namen der Headerdatei ersetzt werden. Allerdings hagelte es mit folgendem FormatString bei jedem Versuch, die formatierte Ausgabe zu erzeugen, eine FormatException.
public static string HeaderExklusionStart = "#ifndef {0}"
    + Environment.NewLine
    + "#define {0}"
    + Environment.NewLine
    + Environment.NewLine
    + "#  ifdef __cplusplus"
    + Environment.NewLine
    + "  extern \"C\" {"
    + Environment.NewLine 
    + "#  endif /* __cplusplus */";
Um den Fehler zu beheben, müssen einfach geschweifte Klammern, die ausgegeben werden sollen und somit nicht als Formatierungsanweisungen zu interpretieren sind, doppelt eingefügt werden:
+ "  extern \"C\" {{"

Auf den Fehler hingewiesen hat mich der Artikel Kombinierte Formatierung im MSDN. Prädikat: Wertvoll.
Tuesday, April 08, 2008 12:14:50 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback

Fehlerkorrektur: String auf ASCII-Reinheit prüfen

In meinem gestrigen Post String auf ASCII-Reinheit prüfen hat sich ein Fehler eingeschlichen. Die öffentliche Eigenschaft Encoding des StreamWriters ist ReadOnly. Um das Encoding des StreamWriters festzulegen, muss dieses im Constructur übergeben werden:
sourceWriter = new System.IO.StreamWriter( sourceFS, Encoding.ASCII );

Tuesday, April 08, 2008 10:00:49 AM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback
# Monday, April 07, 2008

String auf ASCII-Reinheit prüfen

Momentan liegt mein beruflicher Schwerpunkt eher auf der Programmiersprache C im Embedded Umfeld. Da dies jedoch nicht meine präferierte Sprache ist und außerdem die Arbeit (Webserverprogrammierung, CGI-Funktionen, etc) auf Grund der Vielzahl von ähnlichen CGI-Funktionen ein bisschen nach Automatisierung riecht, habe ich begonnen, einen Codegenerator zu schreiben.
Ein paar Worte zur Erklärung. Wir haben eine Anwendung mit zentraler Pseudodatenbank, die alle Programmteile als Quelle und Senke nutzen. Ca. 80% der Datenpunkte sollen per Web-Frontend editierbar sein. Um den Programmierer des Web-Frontends nicht mit den Interna des Microcontrollers zu belasten, stellen wir die Datenpunkte über CGI-Funktionen bereit. Somit muss für jeden Datenpunkt eine ähnlichlautende Zugriffsfunktion in C erstellt werden. Lediglich der Datentyp ändert sich. Die Pflege der Datenpunkte erfolgt in einer Excel-Datei, die auch externen Firmen zur Verfügung gestellt wird.
Da es sich bei dem generierten Code um C-Code handelt und die eingesetzte Entwicklungsumgebung keine Quelltexte in Unicode verarbeiten kann, muss ASCII-Code generiert werden. C# verarbeitet jedoch 2 Byte breite Chars und schreibt liebend gern Unicode. Dies wäre an sich kein Problem, da man einem StreamWriter ja über dessen öffentliche Eigenschaft Encoding die Codierung der Daten vorgeben kann. Jedoch sind, warum auch immer, in den Bezeichnern der Datenpunkte Umlaute vorhanden. Diese können jedoch nicht einfach so in ASCII konvertiert werden, da sie dort nicht definiert sind. So kam schnell der Gedanke nach einem eigenen Konverter oder Filter auf.
Aber wie?

Möglichkeit 1 - Regular Expression Match
System.Text.RegularExpressions.Regex regex = 
     new System.Text.RegularExpressions.Regex( "[^\x00-\x7F]" );
 if ( regex.IsMatch( testString ) )
 {
     //Nicht-ASCII-Zeichen gefunden
 }
Mit dieser Regular Expression werden alle Zeichen gefunden, deren Byte-Repräsentation nicht im Bereich 00 bis 7F liegt. Man könnte nun im If-Block ein paar Methoden zur Ersetzung von beispielsweise 'ä' einsetzen. Allerdings werden dann nur diese Zeichen ersetzt, alle anderen müssen anderweitig behandelt werden. Dadurch wird der Programmablauf inkonsistent.
Alternativ könnten diese Zeichen nicht weiter beachtet werden. Dies würde dann entsprechende Lücken in der Ausgabe hinterlassen.
Wird der If-Block jedoch nicht angesprungen, ist der String garantiert frei von Nicht-ASCII-Zeichen.

Möglichkeit 2 - Regular Expression Grouping
Ändert man den regulären Ausdruck von oben ein wenig ab, kann man die gefundenen Zeichen gruppieren. Dies ermöglicht es, eine Match-Collection zu verwenden, die weitergehende Möglichkeiten bietet. Die Syntax für des regulären Ausdrucks für die Gruppierung wäre:
System.Text.RegularExpressions.Regex regex = 
    new System.Text.RegularExpressions.Regex( "(^\x00-\x7F)" );
System.Text.RegularExpressions.MatchCollection matches =
    regex.Matches( testString );
foreach ( System.Text.RegularExpressions.Match match in matches )
{
    //Nicht-ASCII-Zeichen-Gruppe gefunden
}
Dabei stellt das Objekt Match eine ganze Reihe nützlicher Funktionen bereit, so zum Beispiel die Position des Matches im Ursprungs-String oder die Länge des Matches. Es werden nämlich mit dieser Möglichkeit auch Gruppen wie im Beispiel "Hallööö Welt" die Gruppe "ööö" als ein zusammenhängender Treffer erkannt.

Möglichkeit 3 - Die Klasse Encoding
Die Klasse Encoding stellt verschiedene Möglichkeiten bereit, um mit Zeichen und Zeichenketten zu hantieren. Bei dem oben dargestellten Problem war dies mein erster Anlaufpunkt. Jedoch bin ich nach einigen Monaten C-Programmierung hier einem falschen Pferd aufgesessen :). Man beachte nachfolgende Zeile C#-Code und komme bitte nicht auf die Idee, dies irgendwo zu verwenden:
Encoding.ASCII.GetString( (byte[])testString, 0, testString.Length );
Die Methode GetString der Klasse Encoding.ASCII erwartet als ersten Parameter ein Byte-Array. Was würde man also in C machen? Richtig. Wie oben geschrieben, castet man seine Zeichenkette, eigentlich ja nur ein Char-Array in ein Byte-Array. Die Datentypen sind ja jeweils 1 Byte lang. 1 Byte? Ein Char in C#? Und da steckt der Fehler. In C# ist ein Char 2 Byte lang. Stichwort Unicode. Glücklicherweise meckert dies bereits der Compiler an.
Wie dem auch sei. Der Versuch mündete schließlich in folgendem Qullcode:
string testString = "Halööö Welt. Hähähäh!!!";
byte[] byteArray = Encoding.ASCII.GetBytes( testString );
Console.WriteLine( Encoding.ASCII.GetString( byteArray, 0, byteArray.Length ) );
Dieser Codeschnippsel spuckt dann, wie erwartet, einen ASCII-String aus: Hall??? Welt. H?H?H?!!! Wer damit leben kann...

Fazit
Glücklicher Weise übermittelte mir plötzlich ein Kollege die frohe Botschaft, dass die Bezeichner in den nächsten Tagen auf englische Bezeichner umgestellt werden. Also Umlaute ade. Das ist mir in dieser Situation gar nicht unpassend, da mir keine triviale Lösung für das Problem der Konvertierung eines Unicode-Strings in einen ASCII-String bekannt ist. Schließlich müssen einige Dinge beachtet werden, zum Beispiel die CurrentCulture, da wahrscheinlich ein ö in Deutschland einfach durch oe ersetzt werden kann. Ob das im türkischen ebenso möglich ist, weiß ich nicht.

Dieser Beitrag soll zum einen Anregungen geben, wie die Lösung eines solchen Problems angegangen werden kann. Zum anderen ist es ein Aufruf: Falls jemand dieses Problem schon einmal lösen musste, wäre ich (wahrscheinlich nicht ausschließlich) sehr dankbar, seinen Weg kennenzulernen.

Monday, April 07, 2008 9:02:49 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback

DreamSpark - Auffrischung

Heute kam ein Eintrag über DreamSpark vom TechNet Team Blog Austria in meinen Newsreader geflattert. Ich habe bereits am 19.02. darüber gebloggt. Aber leider hat sich seitdem nichts daran geändert, dass mehr als 90% (geschätzt, 24 Unis eingetragen, davon sind mir ca. 15 vollkommen unbekannt) aller deutschen Studenten nicht an diesem Programm teilnehmen können. Microsoft scheint dort leider auch keine Eile zu haben, etwas daran zu ändern. Hoffentlich war das nicht wieder solch eine schöne "Wir geben Software für umsonst ab"-Ankündigung, die dann direkt im Anschluss an die Veröffentlichung vergessen wird.

Monday, April 07, 2008 12:36:10 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback
# Thursday, April 03, 2008

"Bloggen ohne Technorati zu nutzen? - Ja, wo kommen wir denn da hin?" ... In eine vorsichtigere Welt?

Dirk schreibt einen netten kleinen Eintrag in seinem Blog, der offensichtlich von der re:publica '08 inspiriert wurde. Dazu meine Antwort:

Ich war zwar nicht/bin nicht/werde nicht sein auf der re:publica, komme mir aber durch Dirks Eintrag so modern vor... :-)
Ich twittere auch nicht... Bin in keinem Social Network vertreten... und - fast schon unglaublich - ich bin ebenfalls nicht bei Technorati registriert ;-)

Und das schöne ist: Ich bin stolz drauf.

Arbeitskreis Vorratsdatenspeicherung

Thursday, April 03, 2008 2:36:40 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback
# Sunday, March 30, 2008

Sender Policy Framework added for dotnetphen.com

Today I designed the SPF-record for my domain and sent it to my provider. Hopefully it is added to the dns the next days.

SPF stands for "sender policy framework" and is, simply said, a dns text-entry that specifies all mail server that are sending mail from a domain. For my domain this is for example "v=spf1 a mx ~all". This SPF record can be explained as:
  • v=spf1
    This identifies the TXT record as an SPF string.
  • a
    dotnetphen.com's IP address is 88.80.208.233 (vcvps1043.vcdns.de). That server is allowed to send mail from dotnetphen.com.
  • mx
    This wizard found 2 names for the MX servers for dotnetphen.com: mail and vcvps1043.vcdns.de (A single machine may go by more than one hostname. All of them are shown.). The servers behind those names are allowed to send mail from dotnetphen.com.
  • ~all
    SPF queries that do not match any other mechanism will return "softfail". Messages that are not sent from an approved server should still be accepted but may be subjected to greater scrutiny.

My mail server sends data with the hostname mail.dotnetphen.com, but my provider added two mx records to the dns. So we have to get rid of the one record that isn't used; we create a second spf entry that points to the active host. After that it has to look like this (in bind syntax):
dotnetphen.com. IN TXT "v=spf1 a mx ~all"
mail.dotnetphen.com. IN TXT "v=spf1 a -all"

The first entry specifies my mx-servers to be "ok", the second on specifies the host with the name mail.dotnetphen.com to be the mx record used to send mail.

To support admins during the sender policy framework setup process the SPF Project Site has a SPF Setup Wizard that is a great help to get a fast start.
Sunday, March 30, 2008 5:11:17 PM (W. Europe Daylight Time, UTC+02:00) #    Comments [0] | Trackback
# Saturday, March 29, 2008

CCC veröffentlicht Schäubles Fingerabdruck

Der Chaos Computer Club hat in der aktuellen Datenschleuder, dem CCC-eigenen Magazin, einen Fingerabdruck von Wolfgang Schäuble veröffentlich. Dabei beließ es der CCC nicht nur bei der Print-Veröffentlichung, sondern legte direkt eine Attrappe bei, mit der Aufforderung, diese möglichst oft (z.B. bei der Einreise in die USA) zu benutzen. Laut heise ist der CCC über einen Sympathisanten an den Fingerabdruck gelangt, der ein Glas, aus dem Schäuble während einer Podiumsdiskussion getrunken hatte, an den CCC weiterleitete.

Doch mit dem Bundesinnenminister gibt sich der CCC nicht zufrieden. In der Datenschleuder ist auch eine Wunschliste enthalten, auf der unter anderem Frau Bundeskanzler Merkel verzeichnet ist. Auch eine Anleitung, wie man einen Fingerabdruck sichert und dem CCC zukommen lässt, liegt der aktuellen Ausgabe der Datenschleuder bei.

Eine rechtlich eindeutige Bewertung der Aktion ist offenbar nicht möglich. Der CCC, der sich vor der Aktion beraten lies, geht nicht davon aus, dass es eine Handhabe durch die Veröffentlichung des Fingerabdrucks gäbe. Jedoch vertreten andere Anwälte (siehe hierzu den Artikel bei heise) die Auffassung, dass mit der Vervielfältigung durchaus eine Ordnungswidrigkeit oder gar eine Straftat vorliegt, Stichwort Datenschutz.

Eine sehr interessante Frage wirft heise noch auf: Darf der Staat millionenfach solche biometrischen Daten der Bürger erheben und intransparent nutzen, der einzelne Bürger jedoch nicht? Ich persönlich finde das eine hervorragende Aktion, unserem Bundesparanoiaminister zu zeigen, dass er einige Punkte seiner ausufernden Überwachungshisterie einmal überdenken sollte. Nicht überall, wo Terror draufsteht, ist auch Gefahr drin.

Saturday, March 29, 2008 4:52:00 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0] | Trackback
# Friday, March 28, 2008

DasBlog Mobile support

Today I was browsing around the internet a bit with my mobile phone and just wanted to check what was going on in my logs as I recognized that dasBlog has a great support for mobile browsers. So, quite a bit puzzled at first, I afterwards asked myself how I could miss that feature. So I checked it out and it seems to be in dasBlog since version 1.9. Really darn cool feature. Again one more point for this great bloging engine.

In consideration on what is going on on the dasBlog mailing list I hope that there will be a future for dasBlog or something similar to this (dasText or whatever is it called). I hope that I then can take some time to also do some work for the new project.

Friday, March 28, 2008 7:55:29 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0] | Trackback
# Friday, March 21, 2008

News about TrueCrypt vulnerability

A little late, but I hope that still in time. Recently the TrueCrypt Devs reacted on the vulnerability report. From their point of view the author of the report hasn't analyzed the source code very well. He has stated the wrong routines and furthermore TC is just not able to encrypt the system partition on Windows 2000 computers. Nevertheless they acknowledged the problem with some storage drivers.
Caused by this problems the TrueCrypt-Team is currently thinking about filing a complaint about Microsoft to publish the hibernation API.

Friday, March 21, 2008 3:23:54 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0] | Trackback
# Monday, March 17, 2008

Für ein Morgen in Freiheit

Meine erste Demo als Teil des Arbeitskreises Vorratsdatenspeicherung, und meine erste bewusst besuchte Demo.

Leider hinke ich mit meinem Bericht etwas hinterher, sodass mir ein wenig die Themen ausgegangen sind. Vieles wurde bereits auf den Mailinglisten des Arbeitskreises Vorratsdatenspeicherung diskutiert, die anderen beteiligten Organisationen werden wahrscheinlich ebenso einiges thematisiert haben, sodass ich dies hier nicht noch einmal alles aufgreifen möchte. Deshalb bleibt mir eigentlich nur noch die Bekanntgabe meiner FEMIF-Galerie. Dies sind ein paar Eindrücke aus der Mitte der Demo, wie sie meines Erachtens nach bisher noch nicht häufig veröffentlicht wurden.

Eine schöne Übersicht über bisherige Reaktionen im Netz gibt es übrigens beim Volkszertreter.

Monday, March 17, 2008 10:32:05 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0] | Trackback
# Thursday, March 13, 2008

JavaScript und WISO Sparbuch 2008

Da immer wieder Leute Probleme mit dem Wiso Sparbuch 2008 und deaktiviertem JavaScript haben, nehme ich mich diesem Thema einmal kurz an. Eigentlich wäre das die Aufgabe von Buhl Data, aber dort wird lieber der Kunde so lange gegängelt, bis er seine persönlichen Daten rausrückt und eines dieser Abos gekauft hat.

Also, wer JavaScript deaktiviert hat und vom Programm auf eine neue Version hingewiesen wird, kann den Installationsdialog öffnen. Am unteren Rand (eventuell muss man ein, zwei, dreimal Weiter klicken) befindet sich ein sehr kleiner Link auf die Support-Seite von Buhl Data.




Nach dessen Betätigung öffnet sich, nein, nicht der Standardbrowser. Es wird immer der Internet Explorer geöffnet. Wie dem auch sei. Ich habe mich mittlerweile mit diesem Stück Software abgefunden und meine Lektion gelernt. Also weiter im Text. Auf der Homepage gibt es einen Link "WISO Sparbuch". Diesem folgen wir.




Anschließend müssen wir die Updateseite aufrufen:



Und nun sind wir endlich auf der Update-Seite. Jetzt muss man noch das passende Programm in der Liste mit gefühlten 250 Einträgen suchen, herunterladen und, Vorsicht, sollten es mehrere sein, in der richtigen Reihenfolge installieren. Das alles ganz ohne JavaScript, ohne Abo und ohne preisgabe der persönlichen Daten. Danke an Buhl für diesen einfachen Updatemechanismus und den hervorragenden Support für die Kunden, die nicht nach ihrer Pfeife tanzen wollen.
Thursday, March 13, 2008 10:20:54 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0] | Trackback

Possible TrueCrypt vulnerability

In TrueCrypt 5.1 a possible vulnerability was found. A russian blog entry describes that the keys can eventually be written on the hard disk when the system goes into hibernation and the system drive is encrypted. From there they can be extracted later on. Especially Windows 2000 with a RAID controller based on Intel's Matrix Storage chips shall be vulnerable.

Until now there is feedback from neither the TrueCrypt developers nor any other security expert to confirm or disprove the suspicion.

Thursday, March 13, 2008 10:04:46 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0] | Trackback