Fokusiere dich auf die Teile des Codes, die wichtig sind. Blende den Rest aus, buchstäblich. Mit Yode-Nvim kannst du tiefer gehen als die Dateiebene, du pickst dir die Zeilen raus, die für die aktuelle Aufgabe wichtig sind. Ob du dich auf wichtige Teile einer großen Datei konzentrieren möchtest, oder kleine Stellen vieler Dateien sammeln, alles kannst du auf einen Blick sehen. Zoome vom fokussierten Teil zurück in die Datei, um deinen Kontext kurzzeitig zu erweitern oder deinen Fokus anzupassen. Alles spielt sich im Editor ab, die restliche Werkzeugkette funktioniert weiterhin, dadurch funktioniert Yode-Nvim für jede Programmiersprache, Framework usw.
Vergleichbar mit dem TodoMVC Projekt, habe ich ein Projekt zur Verwaltung von Bookmarks gestartet. Nachdem ich mich in GraphQL eingelesen hatte, brauchte ich etwas um mein Wissen in der Praxis zu testen. In diesem Projekt wird deshalb das bekannte Client Framework Apollo benutzt, um sich mit einem Fake Server zu verbinden. Der json-graphql-sever stellt anhand von Beispieldaten einen vollständigen GraphQL Fake Server inklusive Schema bereit. Dabei deckt die generierte API die gängigen CRUD Aktionen ab.
Für Softwareentwickler gibt es sehr viele Werkzeuge, die sie bei den verschiedensten Aspekten ihrer Arbeit unterstützen. Dies resultiert hauptsächlich aus den unterschiedlichen Arbeitsabläufen von Entwicklern. Um nun all diese Werkzeuge intelligent an einer zentralen Stelle zusammenzufassen, wurde von mir Sweetp erstellt. Sweetp bietet dem Entwickler in einem flexiblen Client-Server-Ansatz die Möglichkeit, Werkzeuge zu automatisieren und/oder zu integrieren. Dadurch können zum einen Routineaufgaben unter einem Befehl zusammengefasst werden. Zum anderen können Features verschiedener Werkzeuge integriert werden, um so Informationen aus diesen zu verwenden. Diese Automation und Integration kann in Sweetp als Service bereitgestellt werden, so können andere Programmierer oder Services diese Funktionalität wiederverwenden.
Die Serveranwendung verwaltet die Services und macht sie unter einer einheitlichen HTTP Schnittstelle verfügbar. Zusätzlich existieren weitere Projekte wie Services, Service Abstraktionen, Apps, usw.:
git commit --[fixup|squash] <commit>
muss kein Commit Hash angegeben werden.
Ist der letzte Commit bereits ein Fixup Commit, wird automatisch der ursprüngliche Commit herausgesucht und von diesem ein neuer Fixup Commit erstellt.
Desweiteren werden Hooks installiert, um den Benutzer vor Fehlern zu schützen.
Ein Git Push oder Merge wird automatisch abgebrochen, falls sich unter den betreffenden Commits ein oder mehrere Fixup Commits befinden.
Diese sollten vor solchen Aktionen mit einem git rebase -i --autosquash
zusammengefasst werden.
Damit der Wechsel zwischen zwei Kochrezepteverwaltungsapps einfach von vonstatten ging, habe ich einen Konverter für die eigenen Rezepte entwickelt. Dieser konvertiert die Rezepte von Cookbook+ aus einer SQLite Datenbankdatei in eine YAML Datei die Paprika versteht.
Dies war ein Testprojekt um die Funktionalität der Window-API von Chrome Packaged Apps im Zusammenspiel mit Tiling Window Managern zu testen. Ich setze den in Haskell geschriebenen Window Manager Xmonad ein. Deshalb war es für mich wichtig zu testen, ob von mir entwickelte Chrome Packaged Apps auch bei mir funktionieren. Das Ergebnis ist durchwachsen. Im floating Zustand klappt das Verändern der Größe gut. Die Positionierung spinnt leider etwas bei mehreren Monitoren, hier wird das Fenster anhand des ersten Monitors positioniert … obwohl es auf dem zweiten Monitor gestartet wurde. Man kann programmatisch erkennen ob das Fenster gerade minimiert ist, aber neue Fenster können nicht minimiert gestartet werden. Dafür kann das Fenster mit den Chrome eigenen Methoden versteckt und wieder angezeigt werden. Es funktioniert in den Vollbildmodus zu wechseln, leider ist nach dem Wechsel in den normalen Modus das Fenster immer in die Kacheln eingereiht und behält seinen vorherigen floating Status nicht.
Um Sails.js im Backend und AngularJS im Frontend zu testen, habe ich mir eine Single Page Application gebaut um den Status meiner TV Serien zu veranschaulichen. Die Rohdaten werden von Trakt.tv über eine API geladen. Damit die Daten von einem bestimmten Benutzer geladen werden, gibt man in der Admin Oberfläche seine Authentifizierungsinformationen ein. Jetzt können Informationen über die TV Serien, gesehenen und gekauften Episoden des Benutzers von Trakt geladen werden. Danach werden diese Informationen mit einander verknüpft um eine Darstellung wie in den Screenshots zu erreichen. Die aggregierten Daten werden in einer MongoDB gespeichert damit später weitere Eigenschaften vom Frontend aus verändert werden können.
So kann zum Beispiel eine Serie eingeklappt (Toggle-Button) oder versteckt (Hide-Button) werden. Zu jeder sichtbaren Serie werden eine Reihe von Informationen angezeigt. Über den Titel kommt man direkt zur Trakt Seite der Serie und über die Nummern der Staffel zu dieser Staffel der Serie auf Trakt. Unter dem Titel wird angezeigt wieviel Episoden aufeinander folgend schon im Besitz des Benutzers sind. So sieht man, wie vollständig eine bestimmte Serie schon ist und kann dies heranziehen um zu entscheiden welche Serie man als nächstes schauen sollte. Welche Episoden im Einzelnen schon besitzt bzw. angeschaut wurden wird anhand eines aufgeteilten Balkens für jede Staffel der Serie dargestellt. Blaue Balkenabschnitte sind Episoden die der Benutzer schon gesehen hat, grüne markieren den Besitz und graue besitzen keins der vorangegangen Attribute. Durch die grauen Abschnitte weiß man direkt welche Episoden noch angeschafft werden müssen um eine Staffel komplett zu haben. Die TV Serien können anhand verschiedener Kriterien gefiltert werden, auch mit einer Textsuche. Um herausfinden welche Serien als nächstes geschaut werden sollte gibt es unterschiedliche Methoden um die Serien zu sortieren. Außerdem können die Trakt Daten über einen Klick auf die entsprechende Schaltfläche aktualisiert werden.
In Vim sind “tags” ein Mechanismus um von einem Bezeichner zu der Stelle zu springen, die er bezeichnet. In einer Programmiersprache wäre ein Beispiel für einen Bezeichner der Name einer Funktion die im Code benutzt wird. Die Stelle zu der man hin springen möchte, wäre die Definition dieser Funktion. Eine tag Datei ist ein Verzeichnis die für diese Kombinationen von Bezeichner und Springziel. Vim generiert die tags nicht selbst, sondern überlässt dies anderen Programmen. Für JavaScript gibt es z.B. jsctags um solche tag Dateien zu generieren.
Damit eine tag Datei automatisch neu generiert wird, habe ich Taginator entwickelt. Es ist relativ schwierig und aufwendig allen Programmen zu sagen das sie nach einer Änderung bitte auch die tag Datei erneuern sollen. Zum Beispiel gibt es keine mir bekannte Möglichkeit die Entwicklertools von Chrome so zu konfigurieren. Deshalb wird in Taginator pro Projekt eine Konfiguration mit den nötigen Informationen angelegt um tags für das Projekt neu zu generieren. Dabei kann der Benutzer angeben welche Dateien von Taginator überwacht werden. Ändert sich eine dieser Dateien, werden die tags erneut generiert. Ändern sich mehrere Dateien nahezu gleichzeitig, wird eine kurze Zeit mit der Generierung gewartet. Ist diese abgelaufen und haben sich keine weiteren Dateien geändert, wird erst dann die tag Datei neu generiert. Neben der Überwachung von Dateien läuft auch ein Webserver. So können im Browser die aktuellen Konfigurationen aller Projekte eingesehen werden. Eine Konfiguration wird dabei etwas ausführlicher erklärt, um dem Benutzer zu zeigen wie sich Taginator für dieses Projekt verhält.
Filing.coffee ist ein digitales Register für meine Mappen in denen ich Schriftverkehr verwahre. Die Mappen sind durchnummeriert und ihr Inhalt ändert sich des Öfteren. Zuvor hatte ich ein Register von Hand geführt, aber konnte nur schwer den Überblick behalten in welcher Mappe sich gerade was befindet. Filing.coffee ermöglicht die standard CRUD Operationen und speichert die Daten in einer MongoDB Datenbank. Durch die interne Seitensuchfunktion des Browsers kann schnell die Mappennummer für einen bestimmten Titel gefunden werden. Außerdem wird beim Ändern des Titels oder dem Hinzufügen eines neuen Eintrags automatisch das aktuelle Datum mit Uhrzeit gespeichert. So lässt sich durch ändern der Spaltensortierung im ExtJs grid leicht herausfinden welche Mappen als letztes geändert oder hinzugefügt wurden. Fügt man einen neuen Eintrag hinzu, wird die ID danach automatisch um eins erhöht und der Cursor bleibt im Titelfeld stehen. So kann ich schnell mehrere neue Mappen einpflegen.
Um während der Masterarbeit die Work-Life-Balance nicht zu verlieren entstand das “Toggl Dashboard”. Gerade bei größeren Projekten wie meiner Masterarbeit ist man versucht, sich in ein Thema zu vertiefen und so den Zeitplan aus den Augen zu verlieren. In endlicher Zeit muss ein bestimmtes Themengebiet bearbeitet werden. Um den Überblick über die aufgewendeten Wochenstunden zu behalten, habe ich Toggl Dashboard programmiert. Dieses Projekt bietet ein einfaches Chart für die Daten von Toggl an. Damit konnte ich auf einen Blick feststellen, wieviel ich in der aktuellen Woche an Arbeitsstunden geleistet hatte und wieviel noch zu tun waren. Dieses Projekt benötigt keine Datenbank, da die Daten von Toggl direkt weiterverarbeitet werden. Die Logik ist in JavaScript geschrieben und läuft auf der Client-Seite.
Nach dem Lesen zahlreicher Artikel und dem GTD-Buch von David Allen habe ich versucht, mein eigenes Todo-System zu entwickeln. Dies wurde mit Dojo als eine “Single Page App” erstellt. Dazu wurde mit Symfony ein REST-Service implementiert, der die Daten aus der MongoDB ließt und an den Client schickt. Nachdem einige rudimentäre Funktionen erstellt waren, habe ich mich in die Qualitätssicherung mit Selenium und DOH vertieft. Außerdem habe ich Testswarm so verändert, dass DOH-Tests in verschieden Browsern ausgeführt werden können, die ich in diversen virtuelle Maschinen installiert hatte. Die Ergänzung weiterer Features wurde im Zuge der Erstellung meiner Masterarbeit zurückgestellt.
Dieses Projekt hilft mir meine ca. 100 Mappei-Ordner zu verwalten, die ich als Ablagesystem verwende. Jeder Ordner hat eine Nummer, zu der ein Titel und eine Beschreibung (Historie) angegeben wird. Ein Ordner kann auch “geleert” werden, so dass dessen Nummer als “frei” markiert wird. Das System kann somit die freien Ordner anzeigen in denen wieder neue Dinge abgelegt werden können. Außerdem wird durch Lucene (Apache) die Datenbank durchsuchbar. Hier wurden hauptsächlich die Scaffolding-Funktion von Symfony/Doctrine verwendet. Um Lucene einzubinden, wird das entsprechende Zend-Plugin benutzt.