Die DotNet Cologne 2013 (#dnc13)

2013-05-03 09.17.38Dieses Jahr war die dotnet cologne 2013 eine besondere Konferenz für mich: ich habe erstmals auf einer Entwickler-Konferenz einen Vortrag gehalten. Das Thema war “Einstieg in das Windows Installer XML (WiX) Toolset”.

Der Raum war wirklich gut gefüllt und es hat mir wirklich viel Spaß gemacht. Auch Dank der freundlichen Unterstützung meines überraschenden  “Co-Referenten” Sebastian Seidel zu den Fragen während des Vortrags war die Session aus meiner Sicht ein Erfolg.

Die Folien habe ich auf SlideShare hochgeladen:
http://de.slideshare.net/minibrain/einstieg-in-das-windows-installer-xml-wix-toolset

Die gezeigten Codebeispiele liegen auf github:
https://github.com/minibrain/DNC13

Nach dem Vortrag gab es noch zahlreiche interessante Diskussionen zum Thema Windows Installer, MSI und Windows Installer XML Toolset. Vielen Dank an dieser Stelle nochmals an alle Teilnehmer!

Während meines Vortrags gab es noch weitere Vorträge, die mich sehr interessiert hätten. “Hackers Reverse Engineering Uncovered” von Rüdiger Kügler war einer davon. Glücklicherweise hat sich im Gespräch später am Stand von WiBu Systems ergeben, dass demnächst der Vortrag in einem webcast wiederholt wird. Das werde ich mir dieses Mal nicht entgehen lassen Smiley

Die Lunch-Session und die folgende Session stand ganz im Zeichen von Usability und User Experience. War wirklich mal interessant, einen Einblick in einen Entwicklungsprozess zu bekommen, der einen Focus auch auf Usability hat. Der Vortrag “WPF UI Development Best Practices” drehte sich im ersten Teil auch um Usability und besprach dann WPF Best Practices natürlich mit Focus auf Usability!

Timur Zanagar hat dann im Vortrag zu “Mobile .NET Entwicklung mit Xamarin 2.0” die Entwicklung mobiler Applikationen für iOS, Android, Windows Phone und MacOS unter Xamarin 2.0 gezeigt. Auch hier haben die zahlreichen Diskussionen zu einer wirklich guten Atmosphäre geführt. Hier muss ich unbedingt mal ein wenig Zeit investieren und eine eigene Android App basteln Smiley

Den Abschluss meiner .NET Cologne 2013 machte der Vortrag von Dennis Traub “Strategischer Anwendungsentwurf mit Domain-Driven Design”. Wirklich interessant, aber schon etwas schwere Kost zum Abschluss.

Alles in allem war diese dotnet cologne 2013 für mich noch etwas besser als die letztes Jahr. Die Organisatoren Albert Weinert, Roland Weigelt, Stefan Lange und Melanie Eibl haben wieder einmal eine tolle Konferenz organisiert. Dankeschön nochmals an dieser Stelle!

Drag&Drop: FileDrop aus eigener Applikation heraus

Möchte man per Drag&Drop Dateien aus dem Windows Explorer in die eigene Applikation hereinziehen, so ist das kein Problem:

  • Platzieren eines Controls, auf dem die Datei(en) per Drag&Drop gezogen werden sollen
  • Eigenschaft “AllowDrop” des Controls auf “True” setzen:

image

  • Registrieren auf die Events DragEnter und DragDrop:

image

  • Im EventHandler für DragEnter prüfen, ob es sich im Dateien und den Mauszeiger anpassen handelt:

if (e.Data.GetDataPresent("FileDrop"))
{
    e.Effect = DragDropEffects.Copy;
}

  • Im EventHandler für DragDrop die Datei auslesen (und in einer TextBox darstellen)

string[] files = e.Data.GetData("FileDrop") as string[];
if (files == null) return;

_txtContent.Text = File.ReadAllText(files[0]);

Das Resultat kann dann so aussehen:

image

Anders herum ist es jedoch etwas schwieriger: Wie kann ich Daten beispielsweise aus einer TextBox per Drag&Drop in eine Datei in den Windows Explorer droppen?

Dazu muss man sich eines kleinen Tricks behelfen: Man muss ein FileDrop initiieren und die zu droppenden Daten in eine temporäre Datei kopieren. Der Dateiname der temporären Datei ist dann auch der Dateiname des Drop Targets. Hier ist eine kleine Schritt-für-Schritt Anleitung:

  • Registrieren auf das MouseDown Event als Initiator für die Drag&Drop Aktion:

image

  • Anlegen einer temporären Datei mit dem Inhalten, die in die zu droppende Datei geschrieben werden sollen. Wichtig: Der Dateiname ist auch der Dateiname der dort erstellt wird, wo die Datei im Explorer gedropped wird:

// Create temporary file name
string tempFile = Path.Combine(Path.GetTempPath(), "LoremIpsum.txt");

  • Inhalt in die temporäre Datei schreiben

// Write content to drop into the temporary file
File.WriteAllText(tempFile, _txtContent.Text);

  • Temporäre Date in ein string-Array verpacken (wird benötigt, da FileDrop ein string array erwartet):

// Create string-array for FileDrop operations
string[] files = new[] { tempFile };

  • DataObject erstellen und mit dem Format der Daten (“FileDrop”) und den Daten instanziieren:

// Create DataObject for "FileDrop" and add string[] with temporary file
DataObject dataObject = new DataObject("FileDrop", files);

  • DragDrop initiieren und dataObject übergeben:

// Initiate DragDrop operation
DoDragDrop(dataObject, DragDropEffects.All);

GitHub Repository mit PlasticSCM verwalten

Durch Zufall bin ich heute auf der Seite von CodeIce gelandet und habe gesehen, dass deren SCM (Software Configuration Management) System namens “Plastic SCM” auf mit Git Repositories auf GitHub, CodePlex & Co umgehen kann.

Da ich selbst an OpenSource Projekten auf GitHub und CodeProject arbeite, wollte ich mir das System mal genauer anschauen. Eine Lizenz für bis zu 15 Benutzer ist zudem kostenlos – was habe ich also schon verlieren? Zwinkerndes Smiley

 

Nachdem ich mir einen ersten Workspace eingerichtet habe, wollte ich mein GitHub Repository importieren bzw. synchronisieren. Dazu habe ich zuerst meine GitHub Projektseite geöffnet: https://github.com/minibrain/VisualStudioSetupProjectToWixConverter

image

Anschließend öffnet man in Plastic SCM den Eintrag “Branches” unter “Main actions”:

image

Als nächstes wählt man den Branch aus und klickt mit der rechten Maustaste darauf. Im Kontextmenü wählt man nun “Replication” und “Sync with Git …”.

Anschließend gibt man den Pfad zum Repository und die Login-Daten ein:

image

Nach einem Klick auf “Sync” wird damit begonnen, die Branches aus dem Git Repository zu importieren:

image

Nach einer kurzen Weile ist der Import dann abgeschlossen:

image

Nun kann man die Features von Plastic SCM nett verwenden. Beispielsweise kann der “Branch Explorer” dazu verwendet werden, alle Branches visuell darzustellen. Bei meinem kleinen Spielprojekt ist das ganze etwas witzlos, weil ich noch nicht weggebrancht habe:

image

Alle Dateien aus dem Verzeichnis zeigt die “Items”-Ansicht:

image

Alle Commits lassen sich unter der Rubrik “Changesets” im Tab “Main actions” auflisten, durchsuchen und exportieren:

image

Die Integration in Visual Studio ist auch dabei:

image

Viele der gezeigten Features sind auch im Visual Studio verfügbar.

Alls in allem ein wirklich gutes Tool. Als nächstes werde ich versuchen, mein CodePlex Repository zu synchronisieren. Mal schauen, ob das auch so einfach geht Smiley

Hier kann man das Tool kostenlos herunterladen:
http://www.plasticscm.com/

Spezielle Seite zum neuen Feature “GitSync”:
http://www.plasticscm.com/gitsync/index.html

Blog-Eintrag zum Sync von GitHub Repos: http://codicesoftware.blogspot.com/2013/01/using-plastic-scm-to-sync-with-junior.html

Windows 7 vom USB Stick installieren

Mein alter Rechner (Dell Inspiron 1720) hat zwar ein DVD-Laufwerk, doch meine Windows 7 DVD mag er nicht mehr lesen. Nachdem die Windows 8 RC-Version dort abgelaufen ist, will ich wieder Windows 7 installieren.

Zum Glück gibt es dafür ein Tool von Microsoft namens “Windows 7 USB/DVD Download Tool”, das mir die umständliche Arbeit abnimmt, einen USB-Stick bootfähig zu machen und die DVD-Inhalte draufzuziehen.

Schritt 1: Auswahl der ISO-Datei:

image

Wer die DVD noch nicht als ISO-Datei vorrätig hat, kann einfach ein Tool wie ISOBuster oder MagicISO verwenden oder in seinem Brenn-Programm (z.B. Nero Burning Rom oder Ashampoo Burning Studio) die DVD in eine ISO-Datei brennen.

Schritt 2: Auswahl des Medien-Typs:

image

In unserem Fall wollen wir einen USB-Stick beschreiben und wählen daher “USB device”.

Schritt 3: USB-Stick anstecken und auswählen:

image

Nach Klick auf “Begin copying” startet der Vorgang, der etwa 1 Stunde dauert.

Schritt 4: Erstellen des bootfähigen USB-Sticks:

image

Bei mir erschien leider eine Fehlermeldung “We were unable to copy your files. Please check your USB device and the selected ISO file and try again.”:

image

Auch ein neuer Versuch war leider ohne Erfolg. Nach etwas googlen habe ich gelesen, dass der MBR des USB-Sticks möglicherweise nicht gelöscht werden kann. Abhilfe schafft da das Tool DiskPart von Microsoft, das bei Windows bereits mitgeliefert wird.

Dazu ist ein Satz von Kommandos erforderlich, die ich nachfolgend beschreibe:

– Öffnen der Kommandozeile: Start | Ausführen | cmd

– Ausführen von DiskPart: diskpart eingeben und “Enter”-Taste drücken:

image

– Anschließend wird DiskPart geöffnet. Dort listet man zuerst über das Kommando “list disk” alle verfügbaren Laufwerke auf:

image

– Nun wählt man das USB-Gerät aus. In meinem Beispiel ist es der Datenträger 1:

image

Ganz wichtig: Hier gut aufpassen, dass das korrekte Laufwerk ausgewählt wird!! Andernfalls kann es passieren, dass Daten verloren gehen!!

– Über den Befehl “clean” wird der Datenträger bereinigt:

image

Clean ist der wichtigste Schritt, denn hierbei wird der Master Boot Record (MBR) und die Partitionstabelle überschrieben. Möglicherweise hat das Microsoft-Tool ein Problem und führt das clean-Kommando nicht aus.

– Nun legen wir eine Primärpartition über den Befehl “Create partition primary” an:

image

– Die neu angelegte Partition wählt man über den Befehl “select partition 1” aus:

image

– Aktiviert wird diese Partition über den Befehl “active”:

image

– Über “format quick fs=fat32” wird das Dateisystem auf dem Stick mit FAT32 formatiert:

image

– Das Laufwerk wird über den Befehl “assign” wieder gemounted, das heißt es wird ihm wieder ein Laufwerksbuchstabe zugeordnet:

image

Über den Befehl “Exit” wird DiskPart dann wieder geschlossen. Nun kann man das Erzeugen des USB-Devices mit dem Tool erneut versuchen.

Nun sollte das Formatieren erfolgreich beendet werden können und die Dateien auf den USB-Stick kopiert werden:

image

image

Tipp: Virenscanner wie Avira & co. müssen eventuell temporär deaktiviert werden, da sonst die frisch geschriebene autorun.inf als unerwünschtes Programm blockiert wird und das Kopieren wieder fehlschlägt.

Hier der Link zum Windows 7 USB/DVD Download Tool (2,6 MB): http://www.microsoftstore.com/store/msstore/html/pbPage.Help_Win7_usbdvd_dwnTool

Debugger zum Prozess-Start anhängen

Ab und zu kann es vorkommen, dass man sich bereits zu Prozess-Start mit einem Debugger anhängen möchte.

Dazu kann man sich eines einfachen Ticks bedienen. In der Registry registriert man einen Debugger an einem Prozessnamen.

Dazu öffnet man den Registrierungseditor (Start | Ausführen | regedit.exe):

image

Am Schlüssel
“HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options”

trägt man dann einfach den Namen zu debuggenden Prozesses ein (hier: “MyDebuggee.exe”). Anschließend legt man eine neue Zeichenkette namens “debugger” an und weist ihr den Wert “vsjitdebugger.exe” zu.

Sobald man dann MyDebuggee.exe ausführt, erscheint der Just-In-Time Debugger Dialog von Visual Studio:

image

Jetzt muss man nur noch einen geeigneten Debugger auswählen und schon kann die Debugging-Session losgehen.

Hier noch der Link zum Original MSDN-Artikel: http://msdn.microsoft.com/en-us/library/a329t4ed(v=vs.100).aspx

Happy Debugging! Smiley

Dell XPS 12–Ein Erfahrungsbericht

Am Freitag war es endlich so weit: nach ca. 6 Wochen Lieferzeit wurde per UPS mein XPS12 geliefert.

Doch zuerst ein paar Worte zum Bestellprozess:

Vor ca. 4 Jahren habe ich mir bereits ein Notebook (ein Inspiron 1720) bei Dell bestellt. Die Variationen waren sehr vielfältig: Ich konnte auswählen, welcher Prozessor, wieviel Arbeitsspeicher, die Größe und Geschwindigkeit der Festplatte usw. verbaut werden sollten. Heute geht das leider nicht mehr – man kann den XPS12 lediglich in 3 vorkonfigurierten Varianten bestellen:

  • Intel Core i3 mit 128GB SSD für 1199,-€
  • Intel Core i5 mit 256GB SSD für 1399,-€
  • Intel Core i7 mit 256GB SSD für 1499,-€

Auch die Wahl des Betriebssystems ist nicht möglich: der Rechner wird mit Windows 8 ausgeliefert. Eine Option auf die Pro gibt es nicht.

Die Bestellung klappte auch nicht ohne Probleme. Nach Eingabe meiner Verified-By-Visa-PIN brach der Bestellvorgang mit einer Fehlermeldung ab. Nach einem erneuten Bestellversuch wenige Stunden später erschienen zwei Auftragsnummern in meinem Kunden-Konto:

image

Mehrfach habe ich versucht, das Problem zu lösen und die irrtümliche Bestellung zu stornieren.

Nach mehreren unbeantworteten E-Mails vom Dell-Support habe ich mich dann an den Support-Chat gewendet. Dort teilte man mir dann mit, dass es sich bei der ersten Auftragsnummer um McAfee Antivirus und bei der zweiten Auftragsnummer um meinen Dell XPS12 handelt – natürlich steht das nirgends, was auch der Support-Mitarbeiter bestätigte. Schließlich einigten wir uns darauf nix zu tun und meine Stornierungs-e-mails zu ignorieren. Einige Tage später war dann McAfee storniert …

Ich habe nix weiter unternommen, da ich den Rechner eigentlich schon zu Weihnachten haben wollte. Kundenzufriedenheit sieht anders aus!!

Nachdem nun endlich am Freitag mein Rechner den langen Weg von China über Shangai, Korea, Kasachstan, Polen, Köln und Ditzingen den Weg zu mir gefunden hat, konnte ich das Schmuckstück endlich in Betrieb nehmen.

Windows 8 startet wirklich binnen weniger Sekunden und es macht echt Spaß es zu bedienen.

Den Vergleich mit einem iPad in Puncto Surf-Tablet verliert der Dell eindeutig aufgrund folgender Kriterien:

  • Akkulaufzeit (XPS12: 5h, iPad: 8h)
  • Gewicht (XPS12 ist viel zu schwer, um es als Tablet zu verwenden)
  • Bedienung (der IE10 kann in vielen Punkten dem Safari einfach nicht das Wasser reichen, die Touch-Bedienung ist auf dem Dell XPS12 recht ungenau)
  • Skype Videotelefonie (XPS12: 0,9 MegaPixel, iPad: 1,2 MegaPixel)

Aber ich habe mir ja so eine Maschine nicht nur als Couch-Gerät gekauft Smiley Ich möchte damit auch entwickelt – idealerweise Windows 8 Apps und diese direkt auf dem Entwicklergerät testen. Da sollte sich das Gerät tatsächlich als sehr praktisch erweisen.

Was mir persönlich am XPS12 sehr gut gefällt:

  • der Hybrid von Tablet und Ultrabook
  • die beleuchtete Tastatur und die Tastatur an sich (schreibt sich sehr gut)
  • die Handschrifterkennung von Windows 8 (ich habe einen Wacon Digitizer zu Weihnachten bekommen)
  • die unglaubliche Geschwindigkeit des Systems – es flufft einfach Zwinkerndes Smiley und macht Spaß!
  • das brillante Display mit der hohen Auflösung (1920×1080)
  • Windows 8 an sich
  • das Design des Notebooks

Was mir persönlich am XPS12 nicht so gut gefällt:

  • Nach 1 Tag Bedienung sieht man unglaublich viele Fingerabdrücke
  • Akku ist nicht austauschbar
  • kein optisches Laufwerk (DVD/Blueray)
  • kein Recovery-Medium (muss noch erstellt werden)
  • ungenaue Touchbedienung
  • Videotelefonie-Kamera mit recht geringer Auflösung
  • die Tasten am Touchpad benötigen zu viel Kraft zum Drücken
  • kein Windows 8 Pro im Lieferumfang
  • die recht geringe Anzahl an Windows 8 Apps

In der Windows Leistungsindex erreicht das Gerät aufgrund der schwachen Grafikkarte eine 5,4. Hier folgt eine detailliertere Bewertung:

image

In den nächsten Tagen und Wochen wird sich zeigen, wie gut das Gerät wirklich ist. Ich möchte meine eigene Windows 8 App entwickeln. Ideen habe ich schon einige Smiley

Western Digital “My Book World”–SSH Zugang

Heute habe ich seit langer Zeit mal ein Software-Update auf meinem NAS, einem WD My Book World, durchgeführt. Nachdem das System nicht ansprechbar war, habe ich einen Reset durchgeführt und dann neu über das Webinterface connected.

Dabei ist mir etwas interessantes aufgefallen: Mein NAS besitzt ja einen SSH-Zugang!

image

Somit kann man via PuTTY mal schnell eine Konsole aufmachen und beispielsweise nachsehen, welche Prozesse so laufen:

image

Im Internet bin ich dann noch auf weitere nützliche Seiten mit Tipps&Tricks gestoßen:

http://martin.hinner.info/mybook/

http://mybookworld.wikidot.com/

http://www.ismprofessional.net/pascucci/documenti/mybook/mybook-hacking-en.html

Mal schauen, was ich in Zukunft damit anfangen kann Smiley