Deprecated: join(): Passing glue string after array is deprecated. Swap the parameters in /www/htdocs/martg/_app/core/api/path.php on line 309

Deprecated: join(): Passing glue string after array is deprecated. Swap the parameters in /www/htdocs/martg/_app/core/api/path.php on line 309

Deprecated: Array and string offset access syntax with curly braces is deprecated in /www/htdocs/martg/_app/core/api/helper.php on line 56

Deprecated: join(): Passing glue string after array is deprecated. Swap the parameters in /www/htdocs/martg/_app/core/api/path.php on line 309

Deprecated: join(): Passing glue string after array is deprecated. Swap the parameters in /www/htdocs/martg/_app/core/api/path.php on line 309

Deprecated: join(): Passing glue string after array is deprecated. Swap the parameters in /www/htdocs/martg/_app/core/api/path.php on line 309

Deprecated: join(): Passing glue string after array is deprecated. Swap the parameters in /www/htdocs/martg/_app/core/api/path.php on line 309
blindschleiche

blindschleiche

Sonderzeichen schnell in Mavericks eingeben

Ob das neu ist in MacOS 10.9 (Mavericks) oder ob es das schon länger gibt, kann ich garnicht sagen, praktisch ist es auf jeden Fall:

Per ctrl-cmd-space erscheint in entsprechenden Texteingabebereichen beim Cursor ein kleines Hilfsfenster zur Eingabe von Sonderzeichen, Smilies, etc.

Komplett mit verschiedenen Kategorien und einer Historie.

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

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.

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.