Octoate.de – Sinnvolles könnt ihr woanders lesen Konkrete Themen – Fehlanzeige, was mich gerade beschäftigt, wird aufs Korn genommen.

6Jun/130

C# – Byte Array als Key in einem Dictionary / HashSet

Heute stand ich vor dem Problem, dass ich ein Byte Array als Index in einem Dictionary in .NET verwenden wollte. Das hat natürlich nicht funktioniert, da der Hash-Code von zwei inhaltsgleichen Byte-Arrays ungleich ist und dadurch der Vergleich beim Zugriff fehl schlägt. Wenn ich also überprüfen möchte, ob ein Key bereits in der Datenstruktur vorhanden ist, wird es immer fehl schlagen, da das erzeugte Objekt mit in den Hashwert eingeht.

Das folgende kleine Beispiel zeigt das Problem:

Man erhält als Ergebnis "Hash Array 1 = '37121646', Hash Array 2 = '45592480'”. Fügt man also das erste Array z.B. einem Dictionary hinzu, wird mit bei einer Abfrage mit ContainsKey(...) ein false erhalten.

Glücklicherweise gibt es seit .NET 3.5 die Möglichkeit, diesen Datentypen im Konstruktor einen IEqualityComparer<T> mitzugeben, der dann den Vergleich übernimmt.  Eine Klasse, die dieses Interface implementiert, muss die Methoden Equals(...) und GetHashCode(...) zur Verfügung stellen. Für meinen Anwendungsfall reicht die folgende Implementierung:

Wichtig ist hier speziell die GetHashCode(...) Methode. Hier wird der Inhalt des Arrays mit dem BitConverter in einen Hex-String konvertiert und von diesem String der HashCode zurückgegeben. Der Hash wird dann also über den Inhalt gebildet und ist dann bei beiden Arrays gleich. Unsere neue Implementierung wird dem Konstruktor dann mit übergeben und dann in der entsprechenden Datenstruktur verwendet. Das folgende Beispiel zeigt die Anwendung und ein "Vorher / Nachher" Vergleich:

Startet man das Programm, erhält man folgende Ausgabe "Ohne IEqualityComparer - Contains = False. Mit IEqualityComparer - Contains = True". Problem gelöst :-) .

25Apr/130

HP Touchpad im aktuellen Milka Werbespot

War das da nicht gerade? Doch, oder? Gibt’s doch nicht! – So in etwa sah meine Reaktion aus, als ich in einer Werbepause den aktuellen Werbespot der Firma Milka zu ihrem Produkt “Cake & Choc” gesehen habe. Da wird doch tatsächlich das von HP verschmähte HP Touchpad in der Werbung gezeigt. Ich bin ja immer noch froh, dass ich das Ding habe und benutze es – nach wie vor – täglich. Schade, dass es von HP so voreilig aufgegeben wurde…

Hier der Werbespot – zu sehen ist das Touchpad ab der 4. Sekunde:

veröffentlicht unter: Kurioses keine Kommentare
24Jan/130

DES / 3DES Verschlüsselungsbibliothek für Arduino

Für ein kleines Projekt auf dem Arduino Leonardo habe ich vor kurzem eine Crypto-Bibliothek gesucht, mit der ich DES und 3DES Nachrichten verschlüsseln und entschlüsseln kann. Leider bin ich nicht fündig geworden, bzw. zumindest nicht als Bibliothek für die Entwicklungsumgebung des Arduinos. Bei “Das Labor” gibt es aber eine hervorragende Crypto-Bibliothek für Atmel AVR Mikrocontroller – nichts anderes ist ja auch ein Arduino – also habe ich mir den DES / 3DES Teil geschnappt und ihn auf den Arduino portiert. Das Ergebnis habe ich, ganz der GPL folgend, auf GitHub verfügbar gemacht. Solltet ihr also in einem Sketch bei euch auch DES / 3DES Verschlüsselung benötigen, dann könnt ihr die Bibliothek verwenden. Wenn ihr Änderungen habt, dann nichts wie her damit (entweder als Patch oder als Pull-Request per GitHub).

19Dez/120

Tschüss treues Arbeitstier!

Nachdem unser DSL Router nach einem Gewitter den Geist aufgegeben hat und der neue DSL Router da war, wurde ein altes Arbeitstier überflüssig, das jahrelang brav seinen Dienst verrichtet hat. Grund genug, dem alten Router einen kleinen Blogeintrag zu widmen.

Am Anfang von DSL hatte man die Wahl, ein externes DSL Modem direkt an den PC anzuschließen oder einen Router davor zu schalten, um das Internet gleich im Netzwerk zu verteilen. Zum damaligen Zeitpunkt habe ich mir aufgrund mehrerer vorhandener Computer dann auch einen DSL Router besorgt (müsste um 2002-2003 gewesen sein), den SMC Barricade 7004ABR, und mein Netzwerk ab sofort darüber laufen lassen. Nachdem anfangs noch das alte Telekom Modem an der Leitung dran hing, das nach ein paar Jahren den Geist aufgegeben hat. Anschließend gab es noch mal ein neues externes DSL Modem und danach dann meinen ersten Telekom Speedport Router (der übrigens auch noch brav seinen Dienst als WLAN Repeater verrichtet). Der Barricade wurde dadurch zwar überflüssig, von mir aber immer noch als Netzwerkswitch weiterverwendet und zwischenzeitlich hing auch mal ein Server von unserem damals kleinen StartUp dran. Irgendwann gab es dann aber eine größere FritzBox und die hatte dann auch die entsprechende Anzahl der Ports, die ich für das Netzwerk brauchte. Der Barricade wurde so in meinem Netzwerk überflüssig.

Allerdings haben dann meine Eltern mittlerweile ihren DSL Anschluss bekommen und es gab das Problem, einen Drucker in das Netzwerk einzubinden. Tja, und schon war der alte Router wieder zur Stelle, denn der hatte ja zusätzlich noch einen Druckerserver integriert – also ab an den Drucker, entsprechend auf den Systemen (Linux / Windows) installiert und schon lief alles. Und so hat er bis heute durchgehalten – bis zu dem im ersten Satz erwähnten Gewitter. Danach gab es einen neuen DSL Router mit Druckerserver und jetzt fehlt mir leider die Verwendung.

War ein prima Gerät, hat lange durchgehalten, würde ich wieder kaufen Smiley. Man darf sich ja auch mal über einen Hersteller freuen. Hier noch ein Foto von der alten Kiste (sorry für die schlechte Qualität):

SMC-Barricade

7Nov/120

Embedded Projects Journal Ausgabe 14

Eine neue Ausgabe des kostenlosen Embedded Projects Journal Magazin ist erschienen. Das Magazin ist eine Open-Source Zeitschrift rund um das Thema Mikrocontroller und eingebetteten Systemen. Pro Jahr erscheinen 4 Ausgaben, die entweder kostenlos als PDF, kostenlos auf Papier oder als Abo für 12,99 EUR auf Papier bezogen werden. Mehr dazu könnt ihr auf der Seite vom Embedded Projects Journal erfahren. Den Download der PDF Version findet ihr unten rechts unter “Aktuelle Ausgabe”.

Inhalt:

  • DidCAM – Wärmebildkamera
  • LED-Cube
  • Erstellung eines Nutzen in EAGLE
  • Ein 8-Bit Rechner mit Spartan
  • Funkübertragung mit IEEE802.15.4
  • Beschleunigungssensor an Gnublin

 

embeddedjournals