blindschleiche

Neue Lieblingstinte: Montblanc Midnight Blue

Jetzt habe ich doch tatsächlich eine neue Lieblingstinte gefunden; die “Montblanc Midnight Blue”.

Nachdem ich ja so meine Probleme mit den Noodler’s “bulletproof” Tinten habe, die Lamy Blau-Schwarz im Fass jetzt scheinbar keine Eisengallustinte mehr ist und auch mein Restbestand einen recht mageren Tintenfluss im Lamy 2000 gezeigt hat, war es Zeit etwas Neues zu suchen. Und gleich der erste Versuch war ein Volltreffer.

Die Midnight Blue hat einen sehr guten Tintenfluss, ist deutlich dunkler als die (Eisengallus-) Lamy Tinte und scheint trotzdem deren positive Eigenschaften zu teilen. Sie verwischt nicht und ist wasserbeständig. Der einzige Nachteil den ich bis jetzt gefunden habe ist der Preis: 13EUR/60ml. Das ist nicht direkt günstig aber auch nicht außergewöhnlich viel zumal sie in einem recht hübschen und praktischen Gefäß daherkommt.

Hier gibt es einen deutschsprachigen Testbericht dazu.

Zur Lichtbeständigkeit kann ich momentan noch nichts sagen, aber das wird sich zeigen.

[Nachtrag 2014-04-30] Leider scheint die aktuelle Variante auch keine Eisengallustinte mehr zu sein (“Non Perma”). Sehr schade.

Zusatzpakete für die Synology DS213j

Seit neuestem habe ich hier ein Synology DS213j NAS stehen. Nachdem was ich mir angelesen habe und den technischen Spezifikationen zufolge schien mir dieses Modell am geeignetsten für meine Zwecke zu sein. Das günstige und sparsamste Modell mit 2 Plattenschächten und 512MB RAM.

Ein Plan von mir war, gewisse Ordner des NAS regelmäßig per duply auf mein Telekom Mediacenter WebDAV zu sichern. Duply ist ein einfaches Skript und duplicity auf dem es aufbaut ist in Python geschrieben für das es ein fertiges Paket von Synology gibt.

Leider musste ich aber feststellen, daß alle Beschreibungen im Internet über das Installieren von z.B. duplicity für mein System ins Leere greifen; das ganze ipkg-Zeugs und die Pakete dazu gibt es einfach nicht für die ARMv7 Marvell-370 Plattform der DS213j.

Ein Versuch das alles aus den archlinux|ARM-Paketen nachzurüsten scheiterte an einer inkompatiblen glibc-Version. Also habe ich mich mal über das CrossCompiling für die Diskstation schlau gemacht.

Erstmal eine virtuelle Ubuntu-Maschine installiert (bei mir als 12.4-er Download direkt von Parallels aus) und gemäß dieser Anleitung die richtige “Tool Chain” heruntergeladen (für meine DS213j mit DSM4.2 war das gcc464_glibc215_hard_armada370-GPL.tgz) und nach /usr/local ausgepackt. Da die von Parallels bereitgestellte Maschine aber 64-bitig ist und die Programme der “Tool Chain” in 32-bit vorliegen braucht es noch etwas Nacharbeit um diese auch lauffähig zu machen: sudo apt-get install ia32-libs

duplicity benötigt librsync, also besorgen wir uns diese mal und entpacken es in einem temporären Ordner in der Linux-Machine (Synology bei mir im Homeverzeichnis). Zum Cross-Kompilieren braucht es ein paar Umgebungsvariablen, die sicherstellen, daß mit den richtigen Tools für das richtige Ziel übersetze wird. Dazu habe ich mir zwei Dateien im Synology-Ordner angelegt

synconf.sh:

env PATH=$PATH:/usr/local/arm-marvell-linux-gnueabi/bin CC=/usr/local/arm-marvell-linux-gnueabi/bin/ CC=/usr/local/arm-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi-gcc \
LD=/usr/local/arm-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi-ld \
RANLIB=/usr/local/arm-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi-ranlib \
CFLAGS=" -I/usr/local/arm-marvell-linux-gnueabi/arm-marvell-linux-gnueabi/libc/include -mhard-float -mfpu=vfpv3-d16" \
LDFLAGS=" -L/usr/local/arm-marvell-linux-gnueabi/arm-marvell-linux-gnueabi/libc/lib" \
./configure --host=arm-marvell-linux-gnueabi --target=arm-marvell-linux-gnueabi --build=i686-pc-linux --prefix=/opt

synmake.sh:

env PATH=$PATH:/usr/local/arm-marvell-linux-gnueabi/bin make

Um sie jeweils an die entsprechende Pakete noch anzupassen kopiere ich mir diese in die entsprechenden Ordner. Um z.B. die librsyncnicht nur als statische Bibliothek sondern auch als dynamische zu bauen braucht es für ./configure noch die Option --enable-shared. Das configure-Skript wird dann aus dem entsprechenden Unterordner heraus per . synconf.sh aufgerufen und make per . synmake.sh.

Beim Übersetzen der librsync hat es gleich mal einen Fehler gegeben. errno.h wurde im Ordner /usr/local/arm-marvell-linux-gnueabi/arm-marvell-linux-gnueabi/libc/include/asm vermutet, lag da aber nicht. Also in den Ordner gewechselt und die aus asm-genericda hinein verlinkt (sudo ln -s ../asm-generic/errno.h .). Eine dynamische Bibliothek habe ich trotzdem nicht zustande gebracht ./.libs/librsync.so: undefined reference to 'RollsumUpdate'. Also neuer Versuch mit der 0.9.6-er Version statt der 0.9.7-er; mit der hat es dann geklappt.

Weiter sollte es mit GnuPG 2.0 gehen. synconf.sh lief auch durch, hat aber auf soviele fehlende Pakete aufmerksam gemacht, daß ich es dann aufgegeben habe. Denn eigentlich habe ich mich ja für die Synology entscheiden weil ich etwas wollte an dem man nicht herumbasteln muß, sonst hätte es ein Rasberry sicher auch getan.

Jetzt sichere ich die Daten erstmal vom Mac aus und werde mir bei Gelegenheit mal die verschlüsselten Ordner und die integrierten Backuptools ansehen.

Alles was die Synology von Haus aus so anbietet und was ich davon nutze funktioniert übrigens einwandfrei und ist leicht zu konfigurieren, wenn man jedoch zusätzliche Software nutzen will sollte man entweder zu einem System mit verbreiteterer CPU greifen, abwarten bis sich ARMv7 durchsetzt oder sich auf einiges an Bastelei einstellen.

Ablauf zum Veröffentlichen von Bildern

Das Veröffentlichen von Bildern geht bei mir jetzt mehr oder minder automatisch. Sowohl für meine Texte als auch für meine Bilder habe ich jeweils einen Ordner auf meiner Dropbox.

Bilder die ich veröffentlichen will landen im Bilderordner und hinter dem hängt ein Hazel Arbeitsablauf der wiederum ein Automatoraktion aufruft.

Name: Bild-Sync
if all of the following conditions are met
  Date Last modified is after Date last Matched
  Name               does not match <Thumbnail>
  Kind               is Image
Do the following to the matched file or folder:
  Run shell script       embedded script
  Run Automator Workflow Bild-Sync.workflow

Mit dem zweiten Kriterium vermeide ich, daß die Synchronisierung (die ja nicht nur eine einzelne Datei sondern den gesamten Ordner hochlädt) bei einem Bild-Thumbnail-Paar zweimal angestossen wird.

Hinter dem Shell-Skript steckt einfach ein sleep 2 damit auf jeden Fall auch das Thumbnail schon bereit steht bevor die Synchronisierung beginnt.

So sieht die Automator-Aktion für die Ordnersynchronisierung mit Transmit (mittlerweile Version 4) aus:

BildSync.workflow (Arbeitsablauf)
Snchronize
Verbinden mit:      Favorit
Favorit:            blindschleiche.de
Synchr.-Richtung:   Hochladen
Vergleichen:        Änderungsdatum
Dateien überspr.:   Browse.plb
Lokaler Pfad:       Bilder
Optionen:     [x] Verweiste Objekte am Ziel löschen
Entfernter Pfad:    /assets/img

Hinter dem Texte-Ordner steht, im Wesentlichen, dieselbe Aktion.

Für Fotos die ich aus Aperture veröffentliche habe ich dort einen speziellen Namen, als Format PNG und einen speziellen Pfad als Ausgabe hinterlegt. Landet nun so ein Bild in diesem Ordner ruft Hazel zwei verschiedene Aktionen auf. Die erste lässt mein Skript darüber laufen (welches mir schon seit 7 Jahren treue Dienste leistet (erst unter Linux und jetzt unter MacOS)) das die Eingabedatei verkleinert, einen Rahmen darum zieht und ein Wasserzeichen einfügt, ein Thumbnail dazu erzeugt (mit anderem Rahmen) und die Eingabedatei löscht. Im Anschluss steht in meinem Vorbereitungsordner ein Bildpaar:

2013-07-06_2013042_tn.jpg
2013-07-06_2013042.jpg

Und auf dieses stürzt sich dann die zweite Hazel-Aktion die diese in meinen Bilderordner auf Dropbox verschiebt von wo aus sie dann die oben beschriebene Aktion auf den Webserver hochlädt.

Um mir die Sache noch einfacher zu machen kopiert mir bereits mein watermark-Skrit den späteren Pfad als Markdown-Code in die Zwischenablage den ich dann nur noch einzufügen brauche.

echo "[![](${imgpath}/${thumbnail})](${imgpath}/${fullsize})" | pbcopy

Jetzt muss ich nur noch den Text hier in meinem Texteordner abspeichern und schon steht die ganze Choose im Netz :-). Fällt mir dann hinterher nochwas ein, editiere ich das einfach lokal und schwups wird auch der Inhalt in Web aktualisiert. Und letzteres ist der Grund warum ich bei Hazel gelandet bin und nicht bei den eingebauten Ordneraktionen geblieben bin (s.a. Beiträge in Stamatic erfassen).

noch ein iPhone 4S Photo

Als Test meines neuen Workflows zum Bilderveröffentlichen nochmal ein anderes Lanschaftsfoto mit dem iPhone 4S. Wie man an den Grüntönen erkennen kann natürlich üppig aufgebrezelt.

Funkturm vor Wolken

Weil’s mit Statamic jetzt gar so einfach geht, gleich noch ein Bild.

Kamera:     Pentax K-5
Objektiv:   Tamron 28-75mm/f2.8@33mm
ISO:        80
Blende:     8
Belichtungszeit:1/500s

Auburn University

Zum Worflow (des Veröffentlichens von Texten und Bildern auf Statamic, nicht zu dem der Bildbearbeitung) später vermutlich mehr, aber weil es gar so leicht von der Hand geht, gleich noch ein Foto.

Kamera:     Nikon V1
Objektiv:   Nikkor 18,5mm/f1.8
ISO:        100
Blende:     3,2
Belichtungszeit:1/640s

Bearbeitet in Aperture und SilverEfex.

Beiträge in Stamatic erfassen

Einer der Hauptgründe dafür Textpattern zu Verlassen war ja, dass ich keine Lust hatte für einen neuen Beitrag immer das Webinterface aufzurufen bzw. mich mit irgendwelchen Blog-Programmen oder Protokollen herumzuschlagen.

Bei Statamic reicht mir jetzt ein Dropbox-Ordner um meine Beiträge von überall her mit Mac und iPhone zu erfassen. Es reicht wenn ich eine Datei mit dem richtigen Header in den entsprechenden Ordner stelle; der Rest geht automatisch.

Sowohl in Textexpander für den Mac als auch für das iPhone habe ich einen Schnippsel, der mir bei Eingabe von .bh sowas in den Text schreibt …

---
title: ""
author: Martin Glinski
categories: [ ]
_template: post
---

… und den Cursor zwischen die Anführungszeichen setzt. Am Ende des Textes kann ich dann meinen Beitrag erfassen. Am Mac mit dem TextWrangler und auf dem iPhone mit Drafts. Auf dem Mac speichere ich meine Datei dann einfach — entsprechend benannt — in den Dropbox-Ordner /Blog und in Drafts habe ich eine Aktion die mir den Text automatisch mit YYYY-MM-DD-erste-Zeile.md benannt in den Ordner in meiner Dropbox stellt.

Am Mac habe ich dann noch eine Ordner-Aktion an meinen Blog-Ordner gehängt die via Transmit (ich benutze noch die 3-er Version) den Inhalt mit dem Ordner _content/2-blogs auf meinem Webserver synchronisiert sobald eine neue Datei dazu kommt.

Perfekt ist das nicht, da sich z.B. nichts tut wenn ich im Urlaub bin und der Mac aus ist, aber so eilig habe ich mit meinem Mitteilungsbedürfnis üblicherweise nicht, wichtiger ist mir das ich meine Gedanken gleich loswerde, wann sie dann im Web erscheinen ist zweitrangig.

Auch nicht perfekt ist, daß Ordneraktionen nur feuern wenn was in den Ordner dazu kommt und nicht auch bei Änderungen. Aber dafür habe ich noch eine Automator-Aktion die ich von Hand aufrufen kann wenn ich auch ohne neue Datei Änderungen synchronisieren möchte. Ansonsten sind sie eben dran wenn das nächste mal was dazu kommt.

DevonThink ToGo sync

Also die Synchronisierung von DevonThink ToGo mit DevonThink auf dem Mac ist wirklich extrem mager. Außer neue Beiträge auf dem iPhone zu erfassen und Texteinträge zu bearbeiten kann man garnichts machen.

Kein Löschen, kein Verschieben, nichts.

Zum reinen Erfassen funzt es aber ganz gut und zuverlässig; für den Rest werde ich wohl auf DevonThink ToGo 2 warten müssen, für das ein verschlüsselter Cloud-Sync auch nicht das blödeste wäre.

Statamic, alte Links erhalten

Nachdem in meiner Sub-Domain alles rund lief, habe ich den Schritt getan und Statamic in das Wurzelverzeichnis verschoben. Da dadurch auch die dortige .htaccess und index.php überschrieben wurden waren meine alten Pfade damit erstmal pfutsch.

Nachdem ich mich mit diversen Redirect-Regeln nicht anfreunden konnte habe ich zum in Statamic eingebauten Mechanismus gegriffen. Unter _config gibt es eine Beispieldatei für eine vanity.yaml für Pfadweiterleitungen. Der Aufbau ist darin recht trivial:

/alter/Pfad: /neuer/Pfad

Da ich sowieso bereits ein Programm hatte, daß mir alle Textpattern-Artikel als Links in eine html-Datei schreibt, habe ich einfach das genommen um mir für beide Arten von Pfaden die ich eingesetzt habe eine Liste zu schreiben, mithilfe derer ich dann wieder mittels TextWrangler Grep Replace mir eine solche vanity-Datei erstellt habe:

...
/stacheldraht-makro: /blog/stacheldraht-makro
/artikel/94/stacheldraht-makro: /blog/stacheldraht-makro
...

Und schon haben die alten Links die sich in irgendwelchen Suchmaschinen oder Lesezeichen gehalten haben wieder funktioniert.

<?
mysql_connect("localhost", $dbuser, $dbpasswd);
$result = mysql($db, "SELECT ID, Title, Section, url_title FROM txptextpattern WHERE Status=4 ORDER by ID DESC");
while(list($ID, $head, $sec, $url_title)=mysql_fetch_row($result)) {
  echo "<a href=/$sec/$ID/$url_title>$head</a><br>\n"; 
  /* echo "<a href=/$url_title>$head</a><br>\n"; */
}
?>

Umstieg Textpattern > Statamic

Datenexport

Als erstes habe ich mit Hilfe dieses Skriptes einmal alle meine Beiträge aus Textpattern extrahiert; dabei aber festgestellt, daß zum einen die Umlaute dabei nicht richtig herauskommen und daß ich lieber categories gefolgt von den Kategorien in eckigen Klammern anstatt von categorygefolgt von Zeilenumbruch und den Kategorien mit minus vorne dran hätte.

Also gleich mal die Textkodierung aktiviert indem ich die Ausgabe von $dataContent['Title'] und 'Body' jeweils in einen utf8_encode() gepackt habe und die Ausgabe der Kategorien umgeschrieben:

fwrite($handle, 'categories: [ ');
if(isset($importCategories) && $dataContent['Category1'] != '') fwrite($handle, $dataContent['Category1']);
if(isset($importCategories) && $dataContent['Category2'] != '') fwrite($handle, ', '.$dataContent['Category2']);
fwrite($handle, " ]\n");

Jetzt hatte ich auf dem Server eine ganze Reihe von .textile Dateien liegen

...
2008-10-16-benchmark-einiger-sd-karten.textile
2009-01-22-bienengarnele-endlich-vernuenftige-aquarienfotos.textile
...

Die alle so aufgebaut waren:

---
title: Benchmark einiger SD-Karten
author: Martin Glinski
categories: [ computer, photo ]
_template: post
---
<txp:glx_image id="35" class="left" />

Evtl. ist es ja für den einen oder anderen von Interesse.
...

Jetzt blieb noch das Problem mit den Bildern, die ich natürlich mittels der Textpattern-Tags so nicht beibehalten konnte. Da aber alle Bilder auf dem Server unter /images liegen und als Basis die id im Namen tragen und meistens Jpegs sind die aus einem Thumbnail-Bildpaar bestehen habe ich es mir erstmal leicht gemacht, die Artikel alle lokale herunter geladen und über das gesamte Verzeichnis ein Suchen und Ersetzen via TextWrangler mit der Option Grep laufen lassen:

Find:       <txp:glx_image id="(\d+)".*/>
Replace:    !/images/\1t.jpg!:/images/\1.jpg

Jetzt waren noch die übrig die keine Jpegs sind und die die keine Verlinkung (großes Bild) haben. Da es nicht zuviele Artikel sind habe ich diesmal nur zum “Multi-File Search” gegriffen um die entsprechenden Dateien im Verzeichnis herauszusuchen und die Anpassungen von Hand zu machen.

Damit hatte ich erstmal eine Basis zum loslegen. Was ggf. noch offen war sollte sich ja hinterher noch einfach von Hand nachpflegen lassen.

Installation

Also habe ich Statamic in einen Unterordner auf meinen Webserver hochgeladen, den _cache-Ordner schreibbar gemacht und geschaut was passiert. Nicht viel, denn dafür hätte ich auch die htaccess-Datei mit ins root-Verzeichnis verschieben müssen, was ich aber zu diesem Zeitpunkt noch nicht wollte, da ich mir noch nicht so recht darüber klar was, was mit den alten Links geschehen soll und Textpattern erstmal weiter laufen sollte.

Also eine Subdomain blog.blindschleiche.deangelegt und Statamic da hinein verschoben. Jetzt konnte ich schon eine Beispielseite sehen aber die Links haben noch nicht funktioniert. Also noch die sample.htaccessumbenannt nach .htaccess und das Beispiel lief.

Übernahme

Damit hatte ich nun das Problem, daß meine hübsch generierten /image-Links nicht mehr funktionieren. Das einfachste wäre jetzt gewesen ich hätte einfach einen Symlink dahin angelegt, aber da ich keinen Shellzugriff auf den Server habe fiel das flach. Also nochmals ein “Multi-File Search” und alle /images/durch http://www.blindschleiche.de/images/ersetzt.

Jetzt habe ich im Beispielbaum 2-blog umbenannt nach 1-Arktikel, 1-about-me nach 5-Kolophonund 4-survival-guide nach 7-Impressumund habe die restlichen Ordner unter _content gelöscht und alle meine exportierten Artikel nach 1-Artikel transferiert nachdem ich die dort vorhandenen .md-Dateien gelöscht hatte.

Jetzt hatte ich gehofft meine Artikel zu sehen, das war aber nicht so. Also nochmal forschen und das Video Building a Simple Blog with Statamic ansehen und dann der Reihe nach.

Erstmal ein trip durch _settings/config.yaml (Lizenzschlüssel, Seitenname, …). Uups, da scheint ja auch die Markup-Sprache auf nur eine festgelegt zu sein. Eigentlich wollte ich ja die alten Sachen in textile behalten und die neuen in markdown verfassen. Mal schauen wie sich das auflösen lässt. Zum Start also erstmal ‘textile’.

Jetzt hat das alles aber leider nur funktioniert wenn ich den Ordner 1-Artikel wieder in 2-blog umbenannt habe, schon waren sie da meine Artikel. Ist erstmal ein Anfangszustand auf dem man aufbauen kann.

Da ich aber nicht ewig bei textile bleiben will, mal schnell alle Artikel nach Markdown wandeln (halb-manuell) und wenn ich schonmal dabei bin auch gleich einige Thumbnails wegrationalisieren, nicht mehr aktuelle Links anpassen und ausmisten.

Die Thumbnail-Links lassen sich z.B. wieder mit der Grep-Suche so umwandeln:

Find:       ^!(.*)!:(.*)$
Replace:    [![](\1)](\2)

Und die normalen Links z.B. so:

Find:       "(.*)":(\S*)
Replace:    [\1](\2)

Beim Überarbeiten ist mir aufgefallen, daß der Wert von title: besser in Anführungszeichen stehen sollte, sonst gibt es bei einem Doppelpunkt im Titel nur “Array” als Überschrift.

weitere Schritte

Jetzt muß ich mir noch etwas zum Design einfallen und eine Lösung für die alten Links finden, sowie die Installation absichern.