blindschleiche

Bereich: computer

Freigaben automatisch verbinden

Natürlich kann man sich Netzwerkfreigaben auch einfach in die Anmeldeobjekte werfen, aber das hat den Nachteil, daß ein so, oder über den Finder, eingebundenes Netzlaufwerk verschwindet sobald es mal nicht verfügbar ist. Da mein Mac i.d.R. durchläuft, mein NAS sich aber Nachts schlafen legt, wäre das bei mir jeden Tag der Fall.

Nutz man die Laufwerke nur manuell ist es einfach ein Ärgernis und man muß sie einfach neu verbinden, bei automatisch ablaufenden Skripten aber ist es extrem ungünstig wenn die plötzlich nur Leere vorfinden wo sie einen Ordner auf dem NAS erwarten.

Umgehen kann man das Ganze indem man den automount-Mechanismus benutzt den es seit einiger Zeit in OS X gibt.

Als erstes legt man, z.B. pro Server oder Netzwerk, einen Ordner unter /Volumes an:

mkdir /Volumes/NAS

(NAS dient nur als Beispiel, der Ordner kann natürlich heißen wie er will, solange er nicht mit bereits unter /Volumes eingebundenem kollidiert.)

Dann fügt man in die Datei /etc/auto_master eine neue Zeile für diesen Ordner ein:

/Volumes/NAS           auto_NAS

Und legt eine neue Datei /etc/auto_NAS an in die man nun die zur verbindenden ‘Shares’ mitsamt Anmeldeinformationen eingibt.

home   -fstype=smbfs ://USER:PASSWORD@NAS/home
Sync   -fstype=smbfs ://USER:PASSWORD@NAS/Sync

Zu beachten ist dabei, daß in den Dateien jeweils ein LineFeed nach der letzten Zeile sein muß!

Damit das alles auch greift fehlt jetzt nur noch ein:

sudo automount -vc

Für manches mag das Verfahren den Nachteil haben, daß die Laufwerke jetzt nicht mehr, wie händisch eingebundene, in der Seitenleiste des Finders erscheinen, aber man kann sich entweder die Wurzel /Volumes/NAS manuell da hineinlegen oder sich mit Aliases oder Symlinks an geeigneter Stelle behelfen.

.pdf via tesseract nach .txt

Auf der Suche nach einem halbwegs brauchbaren OCR-Programm bin ich über tesseract gestolpert. Weil das Programm aber nur reine Grafikdateien entgegennehmen mag und ich es gerne für PDFs verwenden wollte habe ich mir dafür ein kleines Skript geschrieben.

Aber der Reihe nach:

Als erstes benötigt man natürlich tesseract. Am Mac lässt sich das am einfachsten über die MacPorts installieren. Sind diese erstmal installiert, dann genügt ein einfaches sudo port selfupdate und sudo port install tesseract um dieses auf die Platte zu befördern, was aber je nach Anzahl der noch fehlenden Pakete eine Zeit lang dauern kann.

Danach sollte man sich noch die benötigten Sprachdateien herunterladen. Die für deutsch tragen ein .deu. im Namen, die für englisch .eng.. Die darin enthaltenen .traineddata-Dateien kommen nach /usr/local/share/tessdata.

Um das PDF zur Wandlung in eine Grafikdatei zu wandeln setzt mein Skript auf das in ImageMagick enthaltene Tool convert. Was sich wieder einfach via MacPorts installieren lässt.

pdf2orc.sh:

#!/bin/bash

## testen ob Parameter 1 als Datei existiert
if [ ! -f "$1" ]
then
    echo "$1: File does not exist"; exit 1
fi

base=$(basename -s .pdf "$1")

## TMP-Verzeichnis anlegen und darin Datei definieren
tmpdir=$(mktemp -d -t pdf2ocr)
if [ $? -ne 0 ]; then
    echo "$0: Can't create temp dir, exiting..."; exit 1
fi
tmpfile="${tmpdir}/pdf2ocr.png"

## PDF in an langes PNG wandeln
/usr/local/bin/convert -depth 4 -density 300 "${1}" miff:- | convert - -append "${tmpfile}"

## deu ist Standardsprache gibt es mehr als einen Parameter bestimmt der 2. die Sprache
lang="deu"
if [ $# -gt 1 ]; then
    lang=$2
fi
echo "Using Language: $lang"

## OCR in basename + txt des aktuellen Verzeichnisses
/usr/local/bin/tesseract "${tmpfile}" "${base}" -l $lang

# aufräumen
rm "${tmpfile}"

Das Skript nimmt als ersten Parameter die PDF-Datei entgegen und wandelt diese, solange man nichts anderes mit angibt, mit der deutschen Sprachvorgabe in eine Textdatei die anschließend parallel zur Eingabedatei mit dem selben Namen aber der Endung .txt liegt. Möchte man z.B. eine englische Texterkennung muß man dies dem Skript als zweiten Parameter mitgeben.

pdf2ocr.sh Scans/Eingabedatei.pdf eng

Das Skript wandelt die Eingabedatei erstmal in eine, mitunter laaaange, PNG-Datei um, nimmt im Beispiel statt der (standardmäßigen) deutschen, die englische Sprache, und lässt tesseract auf die Grafik los. Anschließend hat man in Scans/Eingabedatei.txt das Ergebnis liegen.

So wird z.B. aus diesem, leicht schiefen, Scan, dieser Text:

den Rand hinausragt.

6. Bringen Sie das Paket zur Post (DHL). Das Frankieren der Sendung ist mit dem
vorfrankierten Rücksendeetikett nicht erforderlich. Wenn Sie das vorfrankierte
Rücksendeetikett nicht nutzen: Bei einem Wert der zurückzusendenden Sache ab 40 EUR

Damit kann man leben :-).

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

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.

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.

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.

Bye Textmate, welcome TextWrangler

Jetzt bin ich doch schon wieder mal umgestiegen. Nach x Jahren XEmacs und 6 Jahren Textmate auf TextWrangler. Auch hier: Mal schaun…

Bye SOHO Notes

Von SOHO Notes und Notelife umgestiegen auf DevonThink Pro und ToGo. Ob’s eine gute Entscheidung war? Mal schaun wie DevonThink ToGo 2 wird…

An Notelife hat mich gestört, dass man Einträge nicht umgekehrt alphabetisch sortieren konnte und dass man keine Notizen aus Drafts reinbekam.