EverNote
Contents |
EverNote ist einer der Kandidaten für mein Notizbuch, das ich vom PDA bzw. MicrosoftOutlook ablösen wollte.
EverNote ist in der Grundversion kostenlos und verfügt auch über eine Importfunktion für Outlook-Notizen.
Meine Anforderungen
- Notizbuch in dem ich viele kleine Notizen speichern kann über für mich wissenswerte Dinge
- Notizen zu Interviews
- Tagebuch-Notizen zu Projekten oder Reisen
- Jede Notiz soll Stichwörter/Schlagwörter/Keywords/Tag haben (z.B. Thema, z.B. Projekt)
- Suchfunktion nach Tag und Volltext
- Die Notizen sollen primär auf meinen Windows-Computern beheimatet sein, aber auch auf meinen mobilen Geräten wie: iPad, Android Tablet
- Die Notizen müssen offline auf mobilen Geräten lesbar sein (z.B. als Reiseführer - Reisen)
- Ein Altbestand von vorhandenen Notizen in RSS (früher Outlook) soll übernommen werden (Datenmigration) aus
- Neue Notizen sollen auch als Ausschnitte von Web-Pages erstellt werden können (so wie früher FurlIt Bookmarks)
Meine Short-List
- Microsoft OneNote
- EverNote
- Google Notebook
- ClipMarks mit Page Caching
- WebLog mit RSS Offline Reader
- FurlIt
Erfahrungen mit EverNote
Eine Probephase mit EverNote erbrachte folgende Erkenntnisse:
- Import der Outlook-Notizen hat gut funktioniert.
- Auf dem PC konnte ich es gut nutzen, auf dem PDA habe ich keine Möglichkeit gefunden
- Der Funktionsumfang ist für meine Anforderungen zu groß (Handschriftenerkennung, Einnisten in den WebBrowser,...)
- Die Benutzeroberfläche ist mir zu kompliziert, besonders, da ich diese Funktionen nur seltener benutze
- Ich benötige das Ding nicht ständig - Minute für Minute, von früh bis spät - Nein, nur ein bis zwei Mal die Woche
Schlussfolgerungen
Ich versuche jetzt, meine Notizbuch als WebLog zu organisieren und über RSS auch auf den PDA zu kommen.
Export in eine XML-Datei
Die nun in EverNote vorhandenen Textnotizen können mit vollem Informationsgehalt in eine XML-Datei exportiert werden.
Auszugsweise sieht das so aus:
<evernote> <notes> <note name="title" content_date="2005/03/30 15:30:45" created="2008/04/07 19:55:01" id="[FA1234-5678-45454554]"> <content type="html"> <div>...html content...</div> </content> <contentplain> ....plain ascii content </contentplain> </note> </notes> </evernote>
Import von Google Notebook
Google Notebooks können als XML Atom exportiert werden. Evernote kann solche XML-Dateien importieren.
<?xml version='1.0' encoding='UTF-8'?> <feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/"CEMFSXcyfSp7ImA9WB9WE0Q."'> <updated>2007-11-18T13:26:58.995Z</updated> <title>My Notebook</title> <link rel='self' type='application/atom+xml' href='http://www.google.com/notebook/feeds/feeds/09925430894787480366/archive/BDQp6QgoQq4He79ki'/> <author><name>bunsch@gmail.com</name><email>bunsch@gmail.com</email></author> <generator version='1.0' uri='http://www.google.com/notebook'>Google Notebook</generator> <entry gd:etag='W/"Dk4NSHwzfCp7ImA9WB9WEkQ."'> <id>NDSCAQgoQ0JrcneQi</id> <updated>2007-11-17T10:23:19.284Z</updated> <category scheme='http://schemas.google.com/notebook/gdata/2007/section' term='SDQp6QgoQrIHe79ki' label=''/> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/notebook/2008/kind#note'/> <title>SQLite Datenbanksystem SQLite-Clients: "RazorSQL"... SQLite Browser (So...</title> <content type='html'><b>SQLite</b><br>Datenbanksystem <br>SQLite-Clients: <br><ul><li>"RazorSQL"...</li><li>SQLite Browser (Sourceforge)</li></ul>PHP unterstützt seit Version 5 direkt SQLite.<br><br>ODBC-Treiber bei: <a href="http://www.ch-werner.de/">http://www.ch-werner.de</a> <br><br> </content> <author><name>bunsch@gmail.com</name></author> </entry> <entry gd:etag='W/"CkIFRno6fCp7ImA9WB9WEU4."'> <id>NDQm6SgoQ4a6omOQi</id> <updated>2007-11-15T12:41:57.414Z</updated> <category scheme='http://schemas.google.com/g/2005/label' term='Computer'/> <category scheme='http://schemas.google.com/notebook/gdata/2007/section' term='SDQp6QgoQrIHe79ki' label=''/> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/notebook/2008/kind#note'/> <title>Mozilla Sage ist ein im Mozilla-Firefox integrierter RSS Feed Reader.</title> <content type='html'><b><font size="4"><font size="2">Mozilla Sage</font><br></font></b>ist ein im Mozilla-Firefox integrierter RSS Feed Reader.<br> </content> <author><name>bunsch@gmail.com</name></author> </entry> </feed>
Transformation nach Atom
Hat man erst einmal die XML-Datei, steht die Welt offen, um mit Hilfe von XSLT-Prozessoren, wie z.B. Xalan, diverse andere Formate zu erzeugen, z.B. für WordPress (über LiveJournal) oder Atom oder...
XSL Transformation
Für die Transformation in das Atom-Format habe ich ein XSLT-Sheet entwickelt. Zwei manuelle Nacharbeiten sind dann noch nötig:
- EverNote liefert den formatierten Notizentext als komplettes HTML-Dokument. Im Atom wird nur ein <DIV> Container erwartet. Die überschüssige HTML habe ich manuell entfernt.
- EverNote verwendet im formatierten Notizen Text "<BR>". Dies habe ich per FileEditing geändert in "<br />"
- Damit mein NewsfeedReader RssBandit dann auch den formatierten Notizentext anzeigt, musste ich letztlich dann noch den unformatierten Text (CONTENTPLAIN) ganz entfernen.
Die Datei Evernote2Atom.XSL (im Ordner d:\var\notizbuch\evernote2atom) sieht dann so aus:
<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/2005/Atom" version="1.0"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" cdata-section-elements="content" /> <xsl:template match="/EVERNOTE"> <xsl:text> </xsl:text><feed> <title>Notizbuch</title> <subtitle>Ehemalige Outlook-Notizen</subtitle> <link href="http://example.org/feed/" rel="self"/> <link href="http://example.org/"/> <xsl:variable name="D" select="@date" /> <updated> <xsl:value-of select="concat(substring($D,1,4),'-',substring($D,6,2),'-',substring($D,9,2),'T',substring($D,12,8),'Z')" /> </updated> <author> <name>Dietrich Kracht</name> <email>dietrich@kr8.de</email> </author> <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id> <xsl:apply-templates select="//NOTE"/> </feed> </xsl:template> <xsl:template match="/EVERNOTE/NOTES/NOTE"> <entry> <title> <xsl:value-of select="@name"/> </title> <link href="http://localhost/wordpress/?p=33"/> <id> <xsl:value-of select="@id" /> </id> <xsl:variable name="D" select="@content_date" /> <updated> <xsl:value-of select="concat(substring($D,1,4),'-',substring($D,6,2),'-',substring($D,9,2),'T',substring($D,12,8),'Z')" /> </updated> <xsl:variable name="D" select="@created" /> <published> <xsl:value-of select="concat(substring($D,1,4),'-',substring($D,6,2),'-',substring($D,9,2),'T',substring($D,12,8),'Z')" /> </published> <category term="Notizbuch" /> <author> <name>dkracht</name> </author> <content type="xhtml"> <xsl:value-of select="CONTENT" /> </content> <content2> <xsl:value-of select="CONTENTPLAIN"/> </content2> </entry> </xsl:template> </xsl:stylesheet>
Anmerkung: Damit die Sache mit den cdata-section-elements auch funktioniert, war es erforderlich den Namespace ganz oben in der zweiten Zeile anzugeben.
Atom als Format ungeeignet
Nun habe ich meine alten Textnotizen über EverNote und XSLT in ein schönes Atom-Format transformiert, leider vergebens, denn eigentlich niemand kann Atom importieren:
- WordPress kann kein Atom importieren
- Serendipity kann kein Atom importieren
- Blogger.com kann kein Atom importieren
Konsequenz: Nun transformiere ich ein weiteres Mal und zwar jetzt nach RSS.
Transformation nach RSS
Im Gegensatz zu Atom lässt sich RSS bestens importieren.
RSS Testdatei
Mit diesem kleinen (manuell erstellten) RSS-Test-File habe ich den Import es ausprobiert:
<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel> <title>NotizbuchRSS</title> <link>http://192.168.1.20/wordpress/</link> <pubDate>Thu, 12 Apr 2008 13:05:55 +0100</pubDate> <description>Ehemalige Outlook-Notizen</description> <item> <title>Nokia 3650 Combines Phone And Photos</title> <link>http://192.168.1.20/wordpress/?p=20</link> <pubDate>Thu, 13 Apr 2008 12:47:14 +0100</pubDate> <dc:creator>dkracht</dc:creator> <category>Notizbuch</category> <description>I've been playing with the new Nokia 3650. Finally, someone has got the combination of a cell phone with digital camera capabilities right! </description> </item> <item> <title>Sanyo Tablet PC Amazes!</title> <link>http://192.168.1.20/wordpress/?p=21</link> <pubDate>Thu, 14 Apr 2008 02:42:31 +0100</pubDate> <dc:creator>dkracht</dc:creator> <category>Notizbuch</category> <description></description> <content:encoded><![CDATA[I was dubious about the new <b>Tablet PCs</b>, but then I saw the latest from Sanyo. <br />Wow, cool looks and it works!]]> </content:encoded> </item> <item> <title>Canon MegaTiny Digital Camera Too Small</title> <link>http://192.168.1.20/wordpress/?p=22</link> <pubDate>Thu, 15 Apr 2008 11:12:47 +0100</pubDate> <dc:creator>dkracht</dc:creator> <category>Notizbuch</category> <description>OK, there is a limit to just how small is too small. Canon's MetaTiny, no larger than a quarter, simply is too little to use properly </description> </item> </channel> </rss>
XSL Transformation
Um als Ausgabe ein RSS-2.0-Format zu erzeugen, müsste man den RSS 2.0 Namespace als Default-Namespace angeben. Damit scheint es aber bei RSS 2.0 Probleme zu geben, es wird von einem empty namespace gesprochen.
Deshalb musste ich etwas trixen: http://www.xml.com/lpt/a/2003/01/02/tr.html
Mit diesem XSL-Stylesheet Atom2RSS.xsl kann ich mein nun schon vorhandenes Atom-Format in RSS 2.0 transformieren.
Die Transformation beschränkt sich auf die Teile, die in meinem Anwendungsbeispiel (mein Notizbuch) auch wirklich vorkommen.
Schießlich habe ich mir die Arbeit geschenkt, für RSS ein RFC 8222 konformes Datum zu erzeugen. Diesen letzen Schitt mache ich manuell mit einem FileEditor; d.h. aus der Monatsnummer den Monatsnamen erzeugen (01 --> Jan, 02 --> Feb etc.)
Das so erhaltene RSS-Datei kann ich schließlich nach WordPress importieren und zwar mit der dort vorhandenen RSS-Import-Funktion, nun endlich inklusiver des HTML-formatierten Notizentexts. Leider geht dabei der Author verloren...
<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="1.0"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" cdata-section-elements="content:encoded" /> <xsl:template match="*[local-name()='feed']"> <xsl:text> </xsl:text> <rss version="2.0"> <channel> <title>NotizbuchRSS</title> <link>http://localhost/wordpress</link> <xsl:variable name="D" select="*[local-name()='updated']" /> <pubDate> <xsl:value-of select="concat(substring($D,9,2),' ',substring($D,6,2),' ',substring($D,1,4),' ',substring($D,12,8),' +0200')" /> </pubDate> <description>Ehemalige Outlook-Notizen</description> <xsl:apply-templates select="*[local-name()='entry']" /> </channel> </rss> </xsl:template> <xsl:template match="*[local-name()='entry']"> <item> <title> <xsl:value-of select="*[local-name()='title']"/> </title> <link>http://localhost/wordpress/?p=33</link> <xsl:variable name="D" select="*[local-name()='updated']" /> <pubDate> <xsl:value-of select="concat(substring($D,9,2),' ',substring($D,6,2),' ',substring($D,1,4),' ',substring($D,12,8),' +0200')" /> </pubDate> <dc:creator>dkracht</dc:creator> <category>Notizbuch</category> <description></description> <content:encoded> <xsl:value-of select="*[local-name()='content']" /> </content:encoded> </item> </xsl:template> </xsl:stylesheet>
-- Dkracht 21:58, 9 February 2008 (CET)