Samstag, 20. Februar 2016

Vimwiki - Personal Wiki in Vim

2016-02-20_vimwiki

Ein Vim sie zu knechten

Vim ist einer der besten Texteditoren, die ich kenne. Zwar fragt sich der VIM-Neuling anfänglich, ob er bei einer Computer-Variante von "Verstehen Sie Spaß" gelandet ist, aber nach einer kurzen Eingewöhnungszeit stellt man dann erstaunt fest, dass man in diesem Editor extrem effizient arbeiten kann, sobald man mal eine paar grundlegende Konzepte und Befehle verinnerlicht hat. Aus diesem Grunde verwende ich ihn seit vielen Jahren für eigentlich alles, was mit Text zu tun hat: Programmieren, Texte schreiben (z.B. in LaTeX) config Files anpassen etc.

Was einen guten Editor ausmacht ist aber nicht nur sein Interface, sondern vor allem, dass man ihn den persönlichen Bedürfnissen anpassen kann. Faustregel bei der Editor-Wahl: Wenn sich das Ding nicht gut konfigurieren lässt und es Erweiterungen nicht unterstützt – Finger weg. Vim lässt sich durch Plugins erweitern, die man entweder in Vimscript schreiben kann, oder aber auch in Python. Ähnliches gilt für den Erzrivalen Emacs, nur dass hier LISP das Mittel der Wahl ist.

Aber wieso mache ich so viel Aufhebens um einen Texteditor? Weil Textfiles unglaublich praktisch sind. Das wird nun vielen Leuten komisch vorkommen und so mancher hat heute gar keine Ahnung mehr, was ich mit Textfile überhaupt meine, wo doch jede Software inzwischen ein neues Dateiformat definiert, das zu allen anderen inkompatibel ist. Ist ja auch viel besser für den Hersteller, wenn ein Wechsel zur Konkurrenz durch die Unverträglichkeit der Dateien erschwert wird.

Aber eigentlich verwende ich stinknormale Textfiles andauernd – z.B. für

  • ToDo Listen
  • Notizen
  • Mitschriften aus Meetings
  • Meinen Wunschzettel
  • Readme Files für Programme
  • Readme Files für Folder in meinem Dateisystem
  • ...

Das ist praktisch, denn es ist kinderleicht ein Textfile zu editieren, man kann es sehr effizient durchsuchen – im Editor oder z.B. mit grep, ich kann es mit diff mit einer anderen Version vergleichen, alle Versionierungssysteme kommen damit klar, es ist schlank, es funktioniert problemlos unter LINUX, Windows, Mac, Android, iOS, DOS, CPM, OS/2, dem Betriebssystem von HAL9000 und überhaupt überall.

Mit anderen Worten es ist ein extrem einfaches und deshalb mächtiges Dateiformat.

Ein Vim sie zu finden

Zahlreiche Textfiles finden sich verstreut auf meinem Computer – ich organisiere sie so gut ich kann durch sinnvolle Ordnerstruktur. Im Großen und Ganzen klappt das gut. Manchmal denke ich mir aber, es wäre nett, wenn ich auch ein tool hätte, das bestimmte Dokumente stärker zusammenhält und verlinkt. Z.B. meine ToDos, Meetingnotizen und kleinere Texte in denen ich meine Gedanken ordne, Konzepte erarbeite etc. Ich hatte in der Vergangenheit schon gelegentlich verschiedene GUI Tools ausprobiert, die versprachen, meine Produktivität zu steigern, das Denken zu fördern, Verbindungen zu managen und den Weltfrieden herbeizuführen. Lange Rede kurzer Sinn – nach einer, meist kurzen, Testphase war ich zurück bei Textfiles in Folders, ggf. mit begleitenden Medien und Dokumenten, wie Photos, PDFs etc.

Warum? Weil alle diese vermeintlichen Produktivitätsbooster irgendwie unbequem zu bedienen waren, nur auf einer oder wenigen Plattformen funktionierten, untereinander vollkommen inkompatibel waren und einfach nervten.

Kürzlich bin ich nun auf etwas sehr angenehmes gestoßen: vimwiki. Das ist exakt, was der Name suggeriert: eine Implementierung eines Wiki Systems als Vim-Plugin. Wikis wurden ursprünglich erfunden, um es dem weniger HTML-erleuchteten Bürger zu ermöglichen, effizient kleine Webseiten zu erstellen, sie untereinander zu verlinken und auf diese Weise eine Menge wertvolle Information organisiert zu kriegen. Wikipedia ist das Vorzeigekind der Familie. Aber es muss nicht gleich ein Lexikon sein – ein Wiki ist auch unglaublich nützlich, um seine eigenen Gedanken Festzuhalten und Informationen, die man von irgendwo her hat zu organisieren. In der Tat waren auch veritable Wiki System unter den oben verworfenen Lösungen – sie waren einfach Overkill für das, was ich haben wollte.

Vimwiki implementiert nun ein minimalistisches Wiki. Die Syntax erinnert an Markdown, ist aber nicht exakt die gleiche, was aber echt wurscht ist. Und so habe ich angefangen, mir ein persönliches Wiki zu bauen und es füllt sich stetig:

  • Todo Liste (eigentlich mehrere, nach Kontext geordnet)
  • Lösungen zu schwierigen Computer-Problemen, die ich nicht verlieren möchte
  • Bookmarks mit ausführlichen Kommentaren für mich selbst
  • Ideen für Bastelprojekte und Blog Beiträge
  • Outlines für längere Texte, an denen ich arbeite
  • Planung unserer Urlaubstermine
  • Skizzen für Blogbeiträge
  • Ideen und Notizen zu Dingen, die gerade lerne oder lernen möchte
  • Meine Wunschliste
  • Geschenkideen für andere
  • und vieles mehr

Das Ergebnis besteht aus einer Vielzahl von Textfiles im vimwiki Markup, die in einem speziellen wiki Ordner liegen und untereinander durch Hyperlinks verbunden sind. Öffne ich das Ganze in Vim fühlt es sich an, wie Websurfen mit einem Text-basierten Browser (lynx/w3m o.ä.). Ich kann von meiner Hauptseite aus wie im Flug durch diverse Links navigieren, bis ich im Zieldokument ankomme. Innerhalb der Dokumente kann ich dann mit den gewohnten Vim Befehlen arbeiten und das Syntaxhighlighting machte es leicht, die Dokumentenstruktur zu erfassen.

Vimwiki kennt mehrere Levels von Überschriften, geordnete und ungeordnete Listen, die sich auch schachteln lassen, Links nach außen (auf Files, Webseiten, Bilder, etc.). Simple Textauszeichnungen, wie fett oder kursiv fehlen ebenfalls nicht.

Ein Vim sie ins Dunkel zu treiben und ewig zu binden

Und natürlich lässt sich das Ganze (oder einzelne Dateien) auch leicht in HTML verwandeln. wozu das nützlich ist? Zum Beispiel, um sein Wiki in aufgehübschter Form zu durchforsten, oder es anderen lesend zur Verfügung zu stellen.

Oder zum bloggen -- dieser Post wurde komplett in vimwiki geschrieben, nach HTML konvertiert und auf blogspot kopiert...

Sonntag, 14. Februar 2016

Code snippet beautification in vim

Hallo Welt! Chris hatte neulich ein schönes tool zum Verhübschen von Source Code vorgestellt (Gist). Das ist nützlich für Blogposts in denen man mal ein Stück Code vorstellen will.

Nun bin ich ein alter VIM user, denn in meinen Augen ist das der beste Editor der Welt und mithilfe diverser Plugins kann man ihm ungeahnte neue Trick beibringen. Einige erstaunliche Sachen kann er aber auch schon ohne solche Erweiterungen. Dazu gehört ein sehr hilfreiches Syntax-Highlighting für ziemliche alle Programmiersprachen, die es so gibt. Und wie es der Zufall so will bringt vim auch einen html Konverter mit! Um den aufzurufen gibt man einfach im Kommandozeilen Modus folgendes ein:

:TOhtml

Das Ergebnis landet in einem neuen Buffer und kann von dort als html File gespeichert oder eben in den Blog kopiert werden – zumindest der Teil zwischen den body tags. Probieren wir das also mal aus mit einem code snippet für die Collatz conjecture. Das sieht dann so aus:

def collatz(number):
    path = [number]
    while number != 1:
        if even(number):
            number /= 2
        else:
            number = number * 3 + 1
        path.append(number)
    return(path)

Die Formatierung passt schon, aber  Syntax-Highlighting wäre toll. Der Grund das es fehlt ist, dass vim per default CSS verwendet, was aber problematisch ist, wenn man nur das snippet kopiert. Man kann das aber auch abschalten, und zwar so:

:let html_use_css=0

Und dann wären Zeilennummern noch schön. Also:

:set number

Das Ergebnis gefällt mit schon sehr gut:

19 def collatz(number):
20     path = [number]
21     while number != 1:
22         if even(number):
23             number /= 2
24         else:
25             number = number * 3 + 1
26         path.append(number)
27     return(path)



Die Zeilennummern gehen bei 19 los, weil das die Zeile im Original File war. Wenn ich für das Snippet lieber bei 1 starten möchte dann muss ich vorher eben noch das Snippet in ein eigenes File tun - auch kein Akt. Und wenn einem das Farbschema nicht gefällt gibt es natürlich diverse zur Auswahl. z.B.:

:colorscheme delek

und man bekommt dies (diesmal mit Nummerierung bei 1 startend):

def collatz(number):
        path = [number]
        while number != 1:
                if even(number):
                        number /= 2
                else:
                        number = number * 3 + 1
                path.append(number)
        return(path)

Freitag, 29. Januar 2016

Gedankenstürme - oder doch Nachwirkungen der MakeMunich?

Komischer Titel für einen Beitrag, ich weiß. Ich hatte ja schon erwähnt, dass der Besuch der MakeMunich mit Philipp zusammen seine Spuren bei mir hinterlassen hat. Besonders angetan war ich vom bq-Stand, der unter anderem neuen 3D-Drucker Hephestos 2 präsentiert. Verfügbar und erschwinglich, für 850 Euronen... Hat ziemlich gute Kritiken soweit, großes Buildvolume, Auto-Bed-Levelling und als Einsteiger sicherlich interessant und als Highlight war Tom Sanladerer höchstpersönlich anwesend, dessen Youtube-Kanal ich natürlich als hoffentlich zukünftiger 3D-Druckerbesitzer abonniert habe ;-). Er wurde ja unlängst von bq angeheuert, wie er auch in seinem Channel erklärt. Hab ein bisserl geblauscht, war ganz nett. Ist der erste Youtuber aus meinen vielen Abos, den ich persönlich kennengelernt habe. Der Drucker kommt als Kit (siehe Foto) und wurde auf der Messe von einem jungen Mann in ca. 2 Stunden komplett aufgebaut - cool.


Aber ich Schweife ab. Ja, ein 3D-Drucker wäre schon schön. Ist aber groß und dann doch relativ teuer. Vielleicht gibt es ja was "Kleineres", das mein Herz erwärmen könnte? Tja, und das fand ich dann... Zuerst einige schöne Bücher am dPunkt Stand und dann noch folgendes Ding auf dem Filmchen unten, dann war's um mich geschehen:



Ja genau: LEGO Mindstorms EV3... seit er rausgekommen ist spiele ich schon mit dem Gedanken mir das Set 31313 zu holen, aber er war mir immer zu teuer. Aber: dieses mal war es anders :-). Ich hatte noch vom braven Christkind (meiner Eltern...) genau 350 EUR, für die ich bis zu diesem Augenblick keine Idee hatte, wie ich sie denn ausgeben könnte. Dada... komischer Zufall ;-), das Set kostet genau 349 Euro. Der Entschluss war also gefasst. Ich ließ ihn noch ein paar Tage reifen und begann zu recherchieren. Vielleicht doch besser die Education-Version 45544 oder doch die Home-Edition. Education ist noch einiges teurer (ca. 430 Euro) und die SW kostet dort noch extra (Class-Room Lizenz halt). Außerdem ist das Education Set besonders dadurch teuer, da es den LiIon-Akku für 100 Euro enthält... Außerdem sind etwas andere Sensoren dabei. Hmm... Was tun? Dann fand ich folgende Seite "Lego Mindstorms EV3 Comparison" auf github und musste Schmunzeln wozu man Python alles verwenden kann. Das Projekt generiert eine Delta-Aufstellung der beiden Sets und generiert auf Wunsch auch gleich eine automatische Bestellung der Teile auf der Lego Seite, cool. Außerdem gibt es Links auf weitere "Brick"-Seiten, wo man die fehlenden Teile kaufen kann.


Zusätzlich habe ich noch festgestellt, dass die PDFs der Bauanleitungen für die Education-Modelle frei verfügbar sind. Programmieren will ich die Dinger eh selber (am besten mit Linux ev3dev). Damit war klar, ich hol mir die Home-Edition. Gleich im Lego-Store München Pasing angerufen und ein Set weglegen lassen, nach der Arbeit mit S-Bahn vorbeigefahren und Set mitgenommen. Hab mir gleich noch den Gyro-Sensor und den Ultraschallsensor mitgenommen, den hatten sie dort lagern für je 35 Euro. Im Lego Online-Shop sind die aktuell nicht lieferbar und über Amazon/Ebay etc. gibt's die Dinger nur überteuert für mehr als 50 Euro. Alles gleich was gespart ;-). Die Teile, die man fürs Education-Set zusätzlich braucht hab ich mir über Brick-Owl (eine Meta-Suchmaschine für Legoteile, die auch ganze Set-Inventories anzeigen kann und einen weltweit an Brick-Shops weitervermittelt) geholt, die Delta-Aufstellung bekommt man sehr übersichtlich auf Rebrickable. Die Links hierfür fand ich auf der oben erwähnten github-Seite.

Dann folgte das Übliche: ersten Roboter aufbauen, Software runterladen und spielen. Mein 7-jähriger Sohn hatte mindestens genauso viel Spaß wie ich. muss ihm nur noch klarmachen, dass es MEIN Mindstorms ist ;-). Ich erspare hier die langweilige Auflistung des Lieferumgfangs, der Leistungsdaten, etc. Das wurde im Netz bereits zur Genüge behandelt.Gesagt sei nur, das Ding ist echt geil :-). Auch ohne Computer lässt sich das Ding rudimentär über den Brick direkt programmieren bzw. mit der Infrarotfernsteuerung oder über Bluetooth und Android/iOS App fernsteuern - was allein für Jüngere schon ziemlich Laune macht.

Aber mein Sohn will natürlich gleich was eigenes bauen, und zwar einen Drachen. Den hat er auch im Kopf geplant und den Oberteil mit Flügeln selbst konstruiert. Das Ding ist echt cool geworden.


Ich bin nun für die Beine und das Laufen verantwortlich, hab dafür aber nur mehr einen mittleren Motor zur Verfügung, hmmm. Die beiden großen brauchen wir für die Flügel ;-). Aber mit etwas Geschick und Inspirationssuche bei diversen Onlinequellen, hab ich eine "lauffähige Lösung" gebaut (Video als Beweis, dass das Ding echt läuft). Natürlich reicht das meinem Sohn nicht, er will auch rückwärts und lenken können - das geht halt mit einem Motor schwer. Daher hab ich gleich einen zweiten bestellt - der kommt morgen ;-).



Übrigens: die ganze Firmware des auf Linux basierenden EV3-Bricks ist quelloffen und auf der Lego Seite zum Download verfügbar. Zusätzlich verschiedenste SDKs für neue Sensoren, Firmware und Kommunkation. Auch die Hardware ist komplett offen, alle Schältplane, sogar die Ladeschaltung des Akku! Das gibt es bei so einem Produkt selten, macht es aber extrem attraktiv für Hacker.

Echt kein Mist: Gist

Beim durchlesen meiner Blog-Posts fragte ich mich: wie kann ich einfach Quellcode inkludieren, und zwar schön formatiert und mit Syntax-Highlighting. Nach etwas Googeln fand ich den Service Gist, angeboten von Github.

Das Ding ist selbsterklärend, es gilt nur zu beachten, dass man einen Github-Account benötigt, wenn man Gists hinterher nochmal editieren möchte. Auch bekommt man beim initialen Befüllen kein on-the-fly Syntax-Highlighting und Einrücken. Daher zuerst eingeloggt den leeren Gist mit der entsprechenden Dateierweiterung speichern und gleich wieder zum Editieren öffnen. Dann gibt's on-the-fly Formatierung und Einfärbung.

3-Servo Zweifüßer Teil #1: Mechanik

Vorbemerkung:
Dieser Beitrag existiert schon ewig als Enwurf (seit 2013!!). Daher ist es an der Zeit ihn mal zu bringen - zumindest als Teil #1 einer Serie. Er deckt nur mal die mechanischen Aspekte ab. Zum Programmieren bin ich nie groß gekommen, das hängt aber auch damit zusammen, dass ich die Picaxe-Umgebung und Sprache nicht so mag. Mittlerweile in der neuesten Version ist sie viel besser geworden, und vielleicht wird es ja nochmal was ;-).

Jetzt geht's los...

In diesem Beitrag stelle ich einen kleinen 2-Füßigen Roboter vor, der mit minimalen Mitteln (3 Servos, ein Micro und ein paar Farb-Rührhölzer) zu realisieren ist. Wie viele andere meiner Projekte (ich lerne ja noch ;-)) ist es leider keine eigene neue Idee, sondern ein Nachbau von einem Projekt, dass Frits Lyneborg auf seinem Make-Blog "Latest in Hobby Robotics" vorgestellt hat. Frits ist auch Mit-Initiator von letsmakerobots.com und auch dort ist der Roboter zu finden: Biped Walker with 3 Servos (Dead Duck Walking)

Farbrührhölzer oder Rührstäbe gibt's im Baumarkt für kleines Geld, vor allem die mit aufgedruckter Werbung. Die sind für kleine Projekte insofern super, da sie in Standardgrößen kommen und aus Hartholz bestehen.

Das ganze startet denkbar einfach, nämlich mit dem Absägen von 4 gleich langen Stücken (jeweils 1,5 Servolängen) von einem großen Farbrührholz (5mm dick, 30mm breit und ca. 30cm lang). Falls keine Rührhölzer zur Hand sind, gibt es Buchenholzleisten mit dieser Dicke und Breit im Baumarkt (Bastelholz). Nun werden jeweils 2 Löcher reingebohrt (Größe: M4 Schrauben sollen sich darin gut drehen können).


Als nächstes werden auf zwei Standardservos (ich verwende RS-2 von Modelcraft vom Völkner bzw. Conrad) Holzstückchen mit Heißkleber aufgeklebt, wie auf den folgenden Bildern zu sehen. Die Servohalterungen werden mit eine Feile abgeflacht, sodass sie mit dem Holzplättchen plan abschließen.


 

Die beiden Flächen die sich auf dem Bild unter diesem Absatz berühren, müssen gut gegeneinander gleiten können und werden mit einer Feile zu diesem Zweck entsprechend behandelt.


Nun werden 3 Stücke mit genau Servolänge (inkl der angeklebten Holzplättchen) abgesägt und eines der länge nach halbiert.


Die 4 enstandenen Stücke werden folgendermaßen mit ein wenig Heißkleber aufeinandergeklebt, um die folgende Bohrung zu erleichtern.



Nun brauchen wir ein reines Längs-Servohorn. Da bei meinen nur Kreuzhörner dabei waren, hab ich diese mit der Zange zurechtgeknipst. Weiters habe ich die Oberseite des Horns plan geschliffen.


Das Servohorn kommt jetzt auch mit Heißkleber auf den "Holzstapel".


Jetzt folgen die versprochenen Löcher ;-).


Danach das ganze wieder in seine Einzelteile brechen und somit haben wir alle Teile beieinander und können bald mit der Montage beginnen.


Aber bevor ich mit dem Zusammenbau beginnen kann, muss ich die Servos in der Mittelstellung haben. Damit das gelingt, hab ich mein kleines Picaxe Projektboard, namlich das AXE230 PICAXE-08M MODULE verwendet (wie auch bei letsmakerobots vorgeschlagen; mittlerweile gibt es schon den Nachfolger AXE231) und ein einfaches Programm geschrieben, um die Servos zu zentrieren.


Natürlich musste ich das unbedingt in einem kleinen Youtube-Video dokumentieren ;-).


So, nun beginnt die eigentliche Montage. Die Bilder sprechen soweit für sich. Im Originalbeitrag auf letsmakerobots.com gibt es auch ein 5-minütiges Video, dass die Montage zeigt. Ist alles in allem nicht sonderlich schwierig. Als erstes kommt der mittlere Servo dran, der die Wank-Bewegung des Roboters übernehmen wird (oder "Rollbewegung" für die Profis).




Hier nochmal ein Close-up Foto vom AXE230 Projektboard. Ist einfach über die serielle Schnittstelle programmierbar (mit einem USB-to-Serial-Adapter). Cool ist, dass das Teil out-of-the-box Header für bis zu 4 Servos hat. Wenn da halt nicht das Picaxe-Basic wäre, das ich nicht so prickelnd finde...

Nun werden die zwei Fuß-Servos links und rechts neben den mittleren Servo montiert. Diese Servos werden die Drehbewegung der Füße um die Hochachse übernehmen. Die grundlegende Idee ist ja, durch wechselseitiges Wanken des Walkers und dazupassendes Drehen der Füße eine Vorwärtsbewegung zu erzeugen.




Dann kommt ein Rührstabteil als "Kopf" rauf. dort wird auch das Batteriefach draufmontiert. Natürlich alles mit Heißkleber - what else ;-). 


Dann noch die Fußflächen unten an die Servos kleben und "dada" fertig ist das Teil. Ach ja, die Schrauben müssen so angezogen und die Löcher so dimensioniert werden, dass sich alles leicht bewegen lässt. Die Muttern hab ich mit Schraubensicherung gesichert, dass sie sich im Betrieb nicht lösen.



So, dann haben wir's fast mit der Mechanik. Zum Schluss noch zwei ganz frische aktuelle Fotos (Jan. 2016) vom fertigen Walker-Roboter. Hab ihn in einer meiner großen Projektkisten wiedergefunden ;-). Ich hoffe, dass es auch einen Teil 2# zu diesem Projekt geben wird. Vielleicht dann in 2018 oder so - na ich hoffe nicht, dass es so lange dauert. Und mit der neuesten Picaxe Entwicklungsumgebung ist das programmieren dieser Dinger auch nicht mehr ganz so schlimm wie früher.




Sonntag, 17. Januar 2016

Make Munich 2016

Ich hatte es vor ein paar Tagen angekündigt: Chris und ich haben heute die Make Munich 2016 besucht. Es war ein Reisenspaß! Jede Menge bunte Leute mit coolen technischen Basteleien und diverse Anbieter auf einem Fleck! Sozusagen eine Mischung aus Ingenieurskongress, Hippie-Treffen und Mad Max (nur dass die Leute nett sind)  ;-)

Es gab unendlich viel zu sehen und ich kann unmöglich alles vorstellen, aber ein paar Impressionen sollen gezeigt werden:

Mr. Beam – ein low-power, low-cost Lasercutter

Analoger Synthesizer

Ein riesiger 3D-Drucker aus dem Maker Space Garching der TUM

Ein High-Tech Gewächshaus

Raspberry-Pi gesteuertes Auto

Dieses Gerät fabriziert 3D-Drucker-Filament aus Plastikgranulat

Optische Bank aus Lego

Tanzender Roboter, Smartphone gesteuert.

Diese Dame macht Werbung für Arduino.

Rubik's Cube solver aus Lego Technik

Uranglasmurmeln - hier zu einem geheimnisvoll blinkenden Anhänger verarbeitet.

Der Koffer für den James-Bond Bösewicht in Dir...

Teslaspule am Heise Stand

Amateurfunker zeigen tolle Analogtechnik.

Dieser Herr (Jan Hasenbalg) hat die "Isomatte der Zukunft" anzubieten: lässt sich in verschiedene Fomen biegen, zu Clustern verbinden etc.
Robo-Cup
 

Zuri von Zoobotics: Tolle Quatro- und Hexapod Roboter Kits.

Viele Fablabs und Makerspaces waren da. Hier mal ,ganz lokalpatriotisch, einer aus der Oberpfalz.


Hacklace

Lustiges Kunstprojekt: "Safe Coffee". Die Überwachungskanmeras sind garkeine mehr, sondern spenden Kaffee. Und da zapfe ich mir doch gleich mal einen.

Ein Bild vom Selfie-Bot.