Bakgrund

Efter en lång tid med troget tjänande har jag kastat ut MacJournal som mitt primära verktyg för anteckningar, journalföring och utkast. Den största anledningen är att sync:en mellan iPad appen och dekstop programmet enbart går över WiFi och inte är det mest stabila. En andra motiveringen är att jag börjat sakta göra noteringar med Markdown och MacJournal har inget stöd eller hjälp för att jobba med Markdown. Det har däremot min valda ersättare nvALT, där har jag möjlighet att förhandsgranska mina texter direkt inom applikationen på ett smidigt sätt.

Detta har gjort att jag efter ett tag inte har kunnat få ett effektivt flöde när jag använder min iPad som anteckningsblock på möten eller bara har med mig iPad:en på en resa men hade glömt att synka den innan jag lämnade kontoret. Det stora dilemmat i det hela var dels vad ska jag ersätta det med samt hur flyttar jag över ett års samlade anteckningar över till något annat utan att förlora för mycket.

Lösningen

Det som gjorde att saker var möjliga är dels att MacJournal sparar alla dokument i ett OS X bundle på filsystemet som i sin tur innehåller en fysiskt rtf fil per inlägg i en journal. Detta går att konvertera till ren text som jag vill ha i mitt nya flöde.

Mitt nya flöde är baserat på Dropbox, nvALT samt Plaintext. Dropbox är kanske inte alltid den bästa tjänsten ur ett integritets perspektiv dock är det fortfarande den tjänsten som har bästa synkroniseringen mellan datorer och iPad applikationer. nvALT är i min meningen tillräckligt simpelt, snabbt och kraftfullt för att utan problem kunna ersätta mina behov för noteringar och samtidigt tillföra nytt utan att på något sätt störa mitt tänka flöde. Slutligen så har jag för stunden valt att använda mig av iOS applikationen Plaintext för att jobba med mina anteckningar på en iOS enhet.

Plaintext är precis som namnet antyder en applikation för att arbeta med enkla textfiler. Applikationen erbjuder även synkronisering av filer via Dropbox. Detta i kombination med mina inställningar i nvALT där jag talar om att jag vill spara varje notering som fristående text filer i en mapp på mitt Dropbox konto gör att jag nu kommer åt mina noteringar vart jag än är oavsett plattform. nvALT erbjuder även fördelar som att låta mig få förhandsgranska mina texter om jag använder mig av Markdown.

Själva migreringen gjorde jag genom att skriva ett enkelt shell skript som tar och konverterar alla rtf filer som MacJournal skapat och lägga dom i en ny mapp, detta blev första steget. Nästa steg blev att få sorteringen på filerna till något som nvALT kan hantera på ett bra sätt. Filerna i MacJournal bundlen har inte namn som är läsbara för en människa. Detta löser MacJournal genom att ha en index.mjml fil där alla rtf filter kopplas ihop med metadata om filen som när den är skapad, vilken journal den hör till. Mitt behov för att få det att fungera så som jag tänkt det med nvALT blev att hämta ut datumet när varje journal post skapades och sedan om det fanns en titel på posten lägga till detta i filnamnet. Lösningen blev att skriva ett XSLT skript som hämtar ut den relevanata informationen ur index.mjml filen och skapa underlaget för shell skript nummer två som har till uppgift att byta namn på originalfilerna ur MacJournal till den namn standard jag själv bestämt mig för att ha.

Själva körningen efter lite tester blev att dels köra förta shell skriptet nedan och sedan på den mappen som jag tog slutfilerna till köra xsltproc mj-convert.xsl index.mjl > renanme.sh. Rename skriptet byter sedan namn på originalfilerna efter mitt önskemål.

Filflytt skript

#!/bin/bash
for f in $(ls $1)
do
	output=$(echo $f|cut -d '.' -f -1 )
	echo "$file $output"
	if [ -d $f ]
	then
		#echo " $f is a directory"
		cd $f
		textutil -convert txt TXT.rtf -output $2/$output.txt
		cd ..
	elif [ -r $f ]
	then
		textutil -convert txt $f -output $2/$output.txt
	fi
done

XLST skript

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:funcs="http://www.w3.org/2005/xpath-functions"
 xmlns:mj="http://danschimpf.com/MacJournal.dtd">

<xsl:template match="journal">
    <xsl:for-each select="*/entry">
		DATE=$(echo "<xsl:value-of select="created"/>"|sed 's/[T:]/-/g;'|cut -d '.' -f -1)
		<xsl:choose>
		<xsl:when test="topic != ''">
			TOPIC=$(echo "<xsl:value-of select="topic"/>"|sed 's/ /_/g;'|sed 's/\//-/g;')
			echo "mv <xsl:value-of select="content/@id"/>.txt $DATE-$TOPIC.txt"
			mv <xsl:value-of select="content/@id"/>.txt $DATE-$TOPIC.txt
		</xsl:when>
		<xsl:otherwise>
			echo "mv <xsl:value-of select="content/@id"/>.txt $DATE.txt"
			mv <xsl:value-of select="content/@id"/>.txt $DATE.txt
		</xsl:otherwise>
		</xsl:choose>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Resultatet

Slutresultatet för min lilla skriptövning blev över förväntan. Jag har nu bytt applikation ordnat en bra synkronisering via Dropbox mot mina önskade plattformar och flyttat över all data jag varit ute efter utan några direkt begränsningar. Visserligen har jag tappat taggningen av mina journal poster dock är det inget jag saknar då jag knappt använde det i någon större utsträckning och inte kunde se vad jag behövde det till i min nya lösning.