28
Sep
13

Mein Blog ist umgezogen

Mein Blog hat nun ein neues Zuhause:

http://blog.abramowitsch.de

Auf https://minibrain.wordpress.com werden keine neuen Beiträge veröffentlicht.

Advertisements
20
Mai
13

ProgressBar für die Console

Für ein kleines Projekt brauchte ich einen Fortschrittsbalken für eine Kommandozeilen-Applikation. Ich war erstaunt, wie einfach das funktionierte und möchte meine Erfahrungen hier teilen.

Hier schon mal ein Blick auf das Endergebnis:

image

Zuerst einmal müssen die Begrenzungen des Fortschrittsbalken gezeichnet werden.

Um den Cursor zu positionieren, kann auf die statischen Eigenschaften CursorTop und CursorLeft der Console zurückgegriffen werden:

CursorTopLeft

Hier der Code zum Erstellen der Begrenzungen des Fortschrittsbalkens:

// Create boundaries for progress bar
Console.CursorTop = topOffset;
Console.CursorLeft = leftOffset;
Console.Write("[");
Console.CursorLeft = length;
Console.Write("]");

Das sieht dann erstmal so aus:

image

 

Dann füllen wir die Begrenzungen mit dem aktuellen Fortschritt:

// Calculate size of one percent element
float progressElementSize = ((float)length – leftOffset – 2) / total;

// Create progress content
int position = 1;
Console.CursorLeft = position;
for (int i = leftOffset; i < progressElementSize * progress; i++)
{
    Console.BackgroundColor = progressColor;
    Console.CursorLeft = position++;
    Console.Write(" ");
}
Console.BackgroundColor = ConsoleColor.Black;

Und das sieht dann so aus:

image

Ganz wichtig: In der letzten Zeile wird die Farbe wieder auf schwarz gesetzt, da sonst die aktuelle Schriftfarbe auf die des Fortschritts gesetzt wird.

Abschließend will ich noch den aktuellen Fortschritt prozentual anzeigen:

// Write progress message
Console.CursorLeft = length + 2;
int result = progress * 100 / total;
Console.Write(customProgressMessage ?? (result + "%").PadLeft(4));

Das .PadLeft(4) habe ich angehängt, damit der String nicht springt, wenn von 9% auf 10% und von 99% auf 100% gesprungen wird.

Viel Spaß damit Smiley

Download: http://sdrv.ms/10HH7Pk

16
Mai
13

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!

29
Apr
13

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);

18
Apr
13

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

17
Mrz
13

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

22
Feb
13

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_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image 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




Blog Stats

  • 194,480 hits