Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/www/users/octoat/subdomains/devlog/wp-content/themes/suffusion/functions/media.php on line 666

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/www/users/octoat/subdomains/devlog/wp-content/themes/suffusion/functions/media.php on line 671

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/www/users/octoat/subdomains/devlog/wp-content/themes/suffusion/functions/media.php on line 684

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/www/users/octoat/subdomains/devlog/wp-content/themes/suffusion/functions/media.php on line 689

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/www/users/octoat/subdomains/devlog/wp-content/themes/suffusion/functions/media.php on line 694
Octoate's Devlog - Part 3
Nov 102014
 

Weiterbildung spielt in unserem Beruf eine große Rolle – zumindest habe ich das immer so gesehen und suche eigentlich tagtäglich nach neuen Möglichkeiten mein Wissen zu erweitern und meine Arbeitsweise effizienter zu gestalten. Das Tolle ist auch, dass sich in unserem Beruf immer wieder Neues ergibt und man eigentlich gar nicht stehen bleiben kann. Es wäre ja langweilig, wenn man jahrelang ausschließlich auf seinem Wissensstand bleiben und nicht Neues mehr kennenlernen würde, oder?
Eine für mich neue Möglichkeit, die ich seit kurzem nutze, ist die kostenlose Microsoft Virtual Academy (MVA). Die MVA bietet jede Menge Kurse zu den unterschiedlichsten Themen aus dem Microsoft Umfeld an. Sei es die Softwareentwicklung mit C#, plattformübergreifende Anwendungen, Spieleentwicklung mit unterschiedlichen Spieleengines (bspw. Construct 2, GameMaker oder Unity) oder die Azure Dienste – hier werdet ihr fündig. Durch das Abarbeiten erhaltet ihr Punkte, die euren Rang auf der Plattform widerspiegeln. Die Qualität der Kurse ist meist auch recht hoch und beim Abschluss eines Kurses erhaltet ihr ein Teilnahmezertifikat. Schaut euch doch auch einfach mal ein paar Kurse an. Vielleicht gefällt es auch auch.

Okt 272014
 

Hattet ihr auch schon einmal das Problem, dass ihr in eurer Software eine Enumeration verwenden wolltet, aber eigentlich zwei Enumeration benötigt wurden, weil ein anderer Programmteil mehr Werte benötigt? Ich schon :-). In meinem Fall ging es um Messbereiche von unterschiedlichen Hardwaregeräten. Zum Beispiel besitzt Gerät A die Messbereiche „Low“ und „High“, während Gerät B die Messbereiche „Low“, „High“, „Medium“ und „Aux“. Der Entwickler soll in seinem Programm aber nicht mit der Hardwareabhängigkeit konfrontiert werden und wählt über den Namespace das entsprechende Gerät und damit auch die Implementierung der Enumeration.
Da „Low“ und „High“ die gemeinsamen Messbereiche abbilden, werden sie in der Hauptklasse verwendet, von der alle Erweiterungen dann ableiten. Der eigentliche Trick besteht aber darin, dass diese Klasse statische Klassenvariablen anbietet, die nur innerhalb dieser Klasse und ihrer Ableitungen initialisiert werden können. Überläd man außerdem noch die Operatoren kann man auch einfach die Werte miteinander vergleichen. Hier ein Beispiel, wie diese Klasse aussehen könnte:

Möchte man diese Klasse nun erweitern, braucht man nur eine neue Klasse anlegen, die von dieser Klasse ableitet und den Konstruktor der Basisklasse aufrufen. Hier das Beispiel für das oben genannte Gerät B:

Im Hauptprogramm kann man jetzt einfach eine Variable vom Typ „MeasurementRange“ deklarieren und die statischen Variablen der beiden Klassen zuweisen. Dabei ist es vollkommen egal, von welcher Klasse die statischen Variablen herkommen. Nachfolgend ein paar Zeilen Programmcode, die das auch noch verdeutlichen:

Für unsere Implementierung war das genau der richtige Ansatz. Solltet ihr das Extendable Enum in einem eurer Projekte einsetzen oder andere (elegantere?) Ansätze für das Problem haben, dann schreibt doch einen Kommentar. Würde mich freuen :-).

 

Okt 162014
 

Ok, zugegeben… eine etwas komische Überschrift, aber so ein wenig trifft sie dann doch das, was ich mit diesem neuen Blog hier vor habe. Wie bereits auf meinem Weblog angekündigt, ist das „Devlog“ eine Abspaltung meines Blogs, in dem es zukünftig Beiträge rund um die Softwareentwicklung gehen soll – quasi also alles, was man so als Softwareentwickler tagtäglich an der Arbeit antreffen kann. Der Hauptfokus wird auf der .NET Plattform von Microsoft liegen, aber auch allgemeine und grundlegende Dinge sollen hier beschrieben werden. Regelmäßige Beiträge wird es aber auch hier nicht geben. Wenn ich mal über irgendwas stolpere, das ich interessant finde, dann wird es hier abgelegt und natürlich bin ich auch offen für eure Anregungen. Wenn ihr also spannende Themen habt, dann nichts wie her damit. Auf meinem Weblog wird in Zukunft der Fokus eher auf meinen privaten Projekten liegen, wobei sich sicherlich gewisse Überschneidungen nicht vermeiden lassen. Mal schauen, wie ich das in Zukunft lösen werde.
Zum Auftakt habe ich erst einmal alle relevanten und nicht zu alten Beiträge zum Thema .NET und Softwareentwicklung aus meinem anderen Blog hier eingefügt. Also viel Spaß mit dem neuen Blog :-)!

Feb 262014
 

Heute hat mir ein Kollege erzählt, dass die Random Klasse im .NET Framework keine vernünftigen Zufallszahlen erzeugen würde und dass zwei Instanzen der Random Klasse jeweils die gleichen Zufallszahlen erzeugen. Das entsprechende Beispiel hat er mir schnell anhand eines kleinen NUnit-Tests gezeigt, der in etwa so aussah:

Lässt man das Programm laufen und vergleicht die beiden erzeugten Listen stellt man fest, dass beide Listen die gleichen Zufallszahlen enthalten, was meinen Kollegen etwas überrascht hat. Der Grund ist dafür aber eigentlich recht einfach und auch in der Hilfe zum .NET Framework dokumentiert. Die Initialisierung des Pseudozufallszahlengenerator wird anhand der Systemzeit durchgeführt und da die Random Klasse nur einen recht einfachen Zufallszahlengenerator beinhaltet, liefern beide Klassen jetzt die gleichen Werte zurück.
Das Problem kann man auf unterschiedlichen Wegen lösen. Zum Einen kann man einfach nur ein Objekt verwenden, das die Pseudozufallszahlen zurückliefert. Benötigt man trotzdem zwei unterschiedliche Instanzen der Klasse Random könnte man mittels System.Environment.TickCount die Klassen unterschiedlich instantiieren, bspw. so:

Eine letzte Möglichkeit ist es, einen Zufallszahlengenerator zu verwenden, der kryptographisch sichere Zufallszahlen erzeugt. So einen Zufallszahlengenerator bietet das .NET Framework unter System.Security.Cryptography.RandomNumberGenerator. Das Programm wird dadurch allerdings etwas aufwendiger, da ein solcher Zufallszahlengenerator immer in ein Byte-Array schreibt und man das Array dann erst in den benötigten Variablentyp umwandeln muss. Das Programm von oben würde unter Verwendung eines solchen Zufallszahlengenerator dann so aussehen:

Klingt doch eigentlich logisch, oder? Jedenfalls sollte man bei der Verwendung der Klasse Random etwas aufpassen und daran denken, dass bei Initialisierung mit gleichen Werten auch die gleichen Zufallszahlen zurückgegeben werden und sogar vorhersagbare Zufallszahlen zurückgeliefert werden (was in den meisten Fällen aber kein Problem sein sollte).

Nov 142013
 

In den letzten Tagen habe ich mir die Frage gestellt, wie ich erkennen kann, ob die Dateien, die ich auf einem Server abgelegt habe, wirklich noch ihren richtigen Inhalt haben oder ob sie evtl. durch Übertragungsfehler o.ä. geändert wurden. Die übliche Methode ist, dass man bspw. den Inhalt einer ZIP Datei mit einem MD5 Hash abgleicht, aber das hilft bei einem Ordner dann auch nicht weiter. Aus diesem Grund habe ich mich mal daran gemacht und ein kleines Programm geschrieben, das zuerst die ZIP Datei mit einem MD5 Hash vergleicht und anschließend dann den Inhalt des ZIP Datei mit dem Inhalt des Ordners vergleicht und neben einer GUI auch per Kommandozeile gesteuert werden kann, damit man die Prüfung in einer Batch-Datei durchführen kann.

MD5ZipFolderCheck MD5ZipFolderCheck-Compare MD5ZipFolderCheck-Console

Den Sourcecode und mehr Informationen gibt es auf GitHub. Eine kompilierte erste Version habe ich hier abgelegt: MD5ZipFolderCheck

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen