Software Toolchains

Ich wurde bereits des öfteren gefragt welche Software ich für meine Anwendungen, Spiele und in der täglichen Arbeit einsetze. Je nach (Betriebs-)System und Einsatzzweck habe ich diverse Programme im Einsatz. Dabei setze ich auf ein Zusammenspiel von mächtigen professionellen Werkzeugen und Open Source Software (OSS).

Windows

Softwareentwicklung

  • WinMerge – Vergleichen von Dateien und Diff erstellen
  • .NET – Das .NET Framework
  • Microsoft ASP.NET MVC – Bibliothek für Model View Control ASP.NET Webseiten
  • Microsoft SQL Server – Datenbank von Microsoft
  • Microsoft Visual Studio – Entwicklungsumgebung für C# und viele weitere Sprachen
  • TortoiseSVN – Client für Subversion
  • Java Runtime Environment – Laufzeitumgebung für Java

Webentwicklung

  • Microsoft Visual Studio – Entwicklungsumgebung für C# und viele weitere Sprachen
  • Google Chrome – Browser von Google
  • Firefox – Browser der Mozilla Foundation
  • Fiddler – HTTP debugging proxy server Anwendung
  • FileZilla – FTP Programm für Datentransfer
  • Notepad++ – Extrem mächtiger Texteditor
  • Microsoft Visual Studio Code – Extrem mächtiger Codeeditor

Bildbearbeitung

  • Paint.NET – Zeichenprogramm
  • GIMP – Umfangreiche Bildbearbeitung
  • Inkscape – Bearbeitung von Vektorgrafiken/SVC Dateien
  • Adobe Photoshop – Das wohl beste Bildbearbeitungsprogramm (Abo über Cloud Photography Plan)

Sonstiges

  • VLC – Video- und Audioplayer für alle gängigen Dateiformate
  • Audacity – Audioberbeitung
  • Spotify – Musikstreaming
  • Microsoft Office – Office Paket von Microsoft
  • OpenOffice – Freies Office Paket
  • Adobe Reader – PDF Anezige
  • MiKTeX – Compiler und Pakete für LaTeX
  • TeXnicCenter – Editor für TeX/LaTeX
  • PDFCreator – PDF Erstellung
  • Avira – Antivirenprogramm
  • KeePass 2 – Passwortverwaltung
  • FreeMind – MindMap Erstellung
  • Dropbox – Cloud Datenspeicher
  • OneDrive – Cloud Datenspeicher
  • 7-Zip – Datenkomprimierung
  • WinRAR – Datenkomprimierung
  • Skype – Telefonie und Video über das Internet
  • Thunderbird – Mailclient
  • RD Tabs – Remotedesktop mit mehreren Tabs

Linux

Raspberry Pi

  • PuTTY – SSH Client für Windows

Ninite

Download der wichtigsten Tools über Ninite.

Großes Paket

.NET 4.6.1, Audacity, Avira, CDBurnerXP, Chrome, Dropbox, FileZilla, Firefox, GIMP, Google Drive, Inkscape, Java 8, KeePass 2, Notepad++, OneDrive, OpenOffice, Paint.NET, PuTTY, Skype, Spotify, Steam, Thunderbird, VLC, WinMerge, WinRAR

Kleines Paket

.NET 4.6.1, 7-Zip, Chrome, Dropbox, FileZilla, Firefox, GIMP, Inkscape, Java 8, KeePass 2, Notepad++, Paint.NET, PuTTY, Spotify, VLC, WinMerge

Hacking Sebastian – Teil 2 – Umsetzung

Quantified Self oder wie Kopfschmerzen in der Datenbank aussehen und welche Webseiten diese verursachen. Hauptziel des Projektes ist die Auswertung meiner persönlichen Daten. Die Tools zur Erfassung, Verarbeitung und Darstellung von Daten müssen daher so einfach wie nötig und so mächtig wie möglich sein. Aufgrund meiner umfangreichen Softwareentwicklungserfahrung habe ich mich für die Programmiersprache C# entschieden. Als Frontend wird eine Webseite mittels ASP.NET MVC erstellt. Das Framework erlaubt die schnelle Generierung von Webseiten auf Basis bestehender Datenmodelle. Komplexe Bearbeitungsdialoge entfallen somit und die automatische Generierung übernimmt den größten Teil der Arbeit. Als Entwicklungsumgebung kommt Microsoft Visual Studio Express 2013 for Web zum Einsatz. Die Daten werden in einer Microsoft SQL Server Datenbank gespeichert. Die Applikation lässt sich in vier Bereiche aufteilen.

Code
Code

Funktionen

  • Daten importieren
  • Daten erfassen
  • Daten auflisten
  • Analyse
Hacking Sebastian Homepage
Hacking Sebastian Homepage

Das Importieren der Daten ermöglicht es CSV, TCX und andere Dateiformate automatisch in die Datenbank zu übernehmen. Daten die nicht in anderen Applikationen und Webseiten erfasst werden benötigen eine eigene Eingabemaske für die Erfassung. Zur Überprüfung der erfassten und importieren Daten hilft die Auflistung. Die Analyse ist das Herzstück der Applikation. Hier werden die Quantified Self Informationen in Korrelation gesetzt und wichtige Erkenntnisse gewonnen (oder bunte Bilder erstellt ;-)).

Tabellen (Database first)

Der Einfachheit halber erstelle ich zuerst alle Tabelle in der Datenbank. Aus den Tabellen generiert Visual Studio die Model Klasse, die im Anschluß für die Importer nutzbar sind. Anhand der generierten Klassen können auch die Controller und Views automatisch erstellt werden. Die Dialoge benötigen danach keinerlei Überarbeitung mehr. Validierung und Security entfallen weil die Applikation nicht im Internet erreichbar sein wird.

Import – CSV (FullFitness, Geofency, …)

CSV Dateien sind extrem einfach zu parsen. Ein gutes Framework ermöglicht das Spezifizieren der Trennzeichen und möglicher Anführungszeichen. Die Klasse Microsoft.VisualBasic.FileIO.TextFieldParser ist hier hervorragend geeignet. Obwohl diese aus dem VisualBasic Namespace stammt, kann sie einfach eingebunden werden. Beispiel:

using (TextFieldParser parser = new TextFieldParser("Geofency.csv")) {
    parser.SetDelimiters(",");
    parser.HasFieldsEnclosedInQuotes = true;
    while (!parser.EndOfData) {
        parser.ReadFields();
        ...
    }
}

Die Felder sind danach direkt in die generierten Model Klassen übertragbar.

Import – TCX (Runtastic)

Training Center XML (TCX) is a data exchange format introduced in 2007 as part of Garmin’s Training Center product. The XML is similar to GPX since it exchanges GPS tracks, but treats a track as an Activity rather than simply a series of GPS points. TCX provides standards for transferring heart rate, running cadence, bicycle cadence, calories in the detailed track. It also provides summary data in the form of laps. (Wikipedia)

Mit der Klasse System.Xml.XmlDocument sind die XML Dateien leicht lesbar. Wichtig ist die Einbindung des XmlNamespaceManager, er ermöglicht Zugriff auf die Garmin Datei für XPath Abfragen. Beispiel:

XmlDocument doc = new XmlDocument();
doc.Load(file.FullName);
XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(doc.NameTable);
xmlnsManager.AddNamespace("x", "http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2");
var node = doc.SelectNodes("//x:Activity", xmlnsManager).Item(0);
...

Import – Web (MyFitnessPal)

Leider ist die Druckversion kein valides XML. Mit Hilfe des HtmlAgilityPack können HTML Dokumente ausgelesen und analog zu XML Dateien verarbeitet werden. Beispiel:

HtmlDocument doc = new HtmlDocument();
doc.Load(file.FullName, System.Text.UnicodeEncoding.UTF8);
var days = doc.DocumentNode.SelectNodes("//h2[@id='date']");
...

Erfassen (Kopfschmerzen)

Hacking Sebastian Input
Hacking Sebastian Input

Bei der Erstellung von Standardformularen und Eingabemasken kommt die größte Stärke des ASP.NET MVC Frameworks zum Tragen. Visual Studio ermöglich die Generierung eines Controllers für bestehende Model Klasse. Zusätzlich werden die Views für Auflisten, Anlegen, Bearbeiten und Löschen (CRUD) erstellt. Somit lässt sich die Bearbeitungsmaske für die Kopfschmerzen mit einem Dialog erstellen.

Auflisten

Das Auflisten funktioniert analog zum Erfassen. Mit einem Klick kann der Controller erstellt werden, inklusive aller CRUD Views. Die überflüssigen Views lassen sich einfach löschen.

Auflistung
Auflistung

Analyse

Excel Export/Import
Excel Export/Import

Zur Auswertung der Daten ermöglichen diverse Tools unzählige Möglichkeiten. Am einfachsten ist Excel einsetzbar. Durch die native Einbindung des SQL Servers ist ein direkter Zugriff auf die Tabellen möglich. JavaScript in HTML5 erlaubt die Erstellung von interaktiven Grafiken. Beispielsweise mit Highcharts. Statische Analysen sind durch Sprachen wie R möglich. Die eingesetzten Tools hängen von den Daten ab und führen zu den Ergebnissen der Analyse.

Ergebnisse der Analyse

Im nächsten Teil der Quantified Self Serie.