From dffe5e060399eea7d8a6985664786cc2a5d933ff Mon Sep 17 00:00:00 2001
From: Adrian Kummerlaender
Date: Thu, 11 Sep 2014 13:08:41 +0200
Subject: Squashed 'source/00_content/' content from commit 63d9db8
git-subtree-dir: source/00_content
git-subtree-split: 63d9db8438ed6b32c4a85d487c07ea31bda666e4
---
articles/2010-02-06_debian_auf_dem_sheevaplug.md | 65 +++++
.../2010-02-24_traffic_ueberwachung_mit_vnstat.md | 10 +
...ngen_mit_dem_sheevaplug_im_laengeren_einsatz.md | 22 ++
...r_und_automatische_uebersetzung_mit_dem_n900.md | 17 ++
...linux_ein_archlinux_port_fuer_den_sheevaplug.md | 12 +
articles/2011-03-31_sheevaplug_ueberwachung.md | 93 ++++++++
...1-06-14_darstellen_von_gps_daten_mit_gnuplot.md | 105 +++++++++
articles/2011-09-03_die_sache_mit_dem_netzteil.md | 7 +
...1-10-01_lighttpd_konfiguration_fuer_symphony.md | 17 ++
.../2011-10-02_tarsnap_backups_fuer_paranoide.md | 28 +++
...-16_kurztipp_n900_retten_ohne_neu_zu_flashen.md | 15 ++
.../2011-11-08_informationen_umformen_mit_xsl.md | 143 +++++++++++
.../2011-12-28_gedanken_zu_de_zentralen_netzen.md | 36 +++
articles/2012-01-25_erfahrungen_mit_openslides.md | 49 ++++
...2-04-07_mobile_endgeraete_und_freie_software.md | 58 +++++
...-08-29_erfahrungen_mit_einer_ssd_unter_linux.md | 48 ++++
...rung_mit_kvm_und_virtuelle_netzwerke_mit_vde.md | 135 +++++++++++
...ng_and_controlling_object_ownership_in_cpp11.md | 92 ++++++++
...functions_local_to_a_translation_unit_in_cpp.md | 49 ++++
articles/2013-10-06_notizen_zu_cpp_und_unicode.md | 80 +++++++
...res_as_tuples_using_template_metaprogramming.md | 261 +++++++++++++++++++++
...013-12-21_musikalischer_jahresruekblick_2013.md | 49 ++++
...tiated_class_template_specializations_in_cpp.md | 74 ++++++
...4-07-11_mapping_arrays_using_tuples_in_cpp11.md | 63 +++++
meta.xml | 6 +
microblog.xml | 1 +
pages/about.md | 17 ++
pages/contact.md | 20 ++
pages/impressum.md | 11 +
pages/projects/binary_mapping.md | 24 ++
pages/projects/codepoint_iterator.md | 15 ++
pages/projects/dotfiles.md | 28 +++
pages/projects/graph_storage.md | 12 +
pages/projects/input_xslt.md | 30 +++
pages/projects/scribble.md | 8 +
pages/projects/simple_parser.md | 18 ++
pages/projects/spam_question_filter.md | 12 +
pages/projects/trie.md | 15 ++
...ng_and_controlling_object_ownership_in_cpp11.md | 1 +
...functions_local_to_a_translation_unit_in_cpp.md | 1 +
tags/cpp/2013-10-06_notizen_zu_cpp_und_unicode.md | 1 +
...res_as_tuples_using_template_metaprogramming.md | 1 +
...tiated_class_template_specializations_in_cpp.md | 1 +
...4-07-11_mapping_arrays_using_tuples_in_cpp11.md | 1 +
.../2011-03-31_sheevaplug_ueberwachung.md | 1 +
...1-06-14_darstellen_von_gps_daten_mit_gnuplot.md | 1 +
.../2011-11-08_informationen_umformen_mit_xsl.md | 1 +
...ng_and_controlling_object_ownership_in_cpp11.md | 1 +
...functions_local_to_a_translation_unit_in_cpp.md | 1 +
.../2013-10-06_notizen_zu_cpp_und_unicode.md | 1 +
...res_as_tuples_using_template_metaprogramming.md | 1 +
...tiated_class_template_specializations_in_cpp.md | 1 +
...4-07-11_mapping_arrays_using_tuples_in_cpp11.md | 1 +
...ng_and_controlling_object_ownership_in_cpp11.md | 1 +
...functions_local_to_a_translation_unit_in_cpp.md | 1 +
...res_as_tuples_using_template_metaprogramming.md | 1 +
...tiated_class_template_specializations_in_cpp.md | 1 +
...4-07-11_mapping_arrays_using_tuples_in_cpp11.md | 1 +
.../german/2010-02-06_debian_auf_dem_sheevaplug.md | 1 +
.../2010-02-24_traffic_ueberwachung_mit_vnstat.md | 1 +
...ngen_mit_dem_sheevaplug_im_laengeren_einsatz.md | 1 +
...r_und_automatische_uebersetzung_mit_dem_n900.md | 1 +
...linux_ein_archlinux_port_fuer_den_sheevaplug.md | 1 +
tags/german/2011-03-31_sheevaplug_ueberwachung.md | 1 +
...1-06-14_darstellen_von_gps_daten_mit_gnuplot.md | 1 +
.../2011-09-03_die_sache_mit_dem_netzteil.md | 1 +
...1-10-01_lighttpd_konfiguration_fuer_symphony.md | 1 +
.../2011-10-02_tarsnap_backups_fuer_paranoide.md | 1 +
...-16_kurztipp_n900_retten_ohne_neu_zu_flashen.md | 1 +
.../2011-11-08_informationen_umformen_mit_xsl.md | 1 +
.../2011-12-28_gedanken_zu_de_zentralen_netzen.md | 1 +
.../2012-01-25_erfahrungen_mit_openslides.md | 1 +
...2-04-07_mobile_endgeraete_und_freie_software.md | 1 +
...-08-29_erfahrungen_mit_einer_ssd_unter_linux.md | 1 +
...rung_mit_kvm_und_virtuelle_netzwerke_mit_vde.md | 1 +
.../2013-10-06_notizen_zu_cpp_und_unicode.md | 1 +
...013-12-21_musikalischer_jahresruekblick_2013.md | 1 +
tags/linux/2010-02-06_debian_auf_dem_sheevaplug.md | 1 +
.../2010-02-24_traffic_ueberwachung_mit_vnstat.md | 1 +
...ngen_mit_dem_sheevaplug_im_laengeren_einsatz.md | 1 +
...r_und_automatische_uebersetzung_mit_dem_n900.md | 1 +
...linux_ein_archlinux_port_fuer_den_sheevaplug.md | 1 +
...1-10-01_lighttpd_konfiguration_fuer_symphony.md | 1 +
...-16_kurztipp_n900_retten_ohne_neu_zu_flashen.md | 1 +
...2-04-07_mobile_endgeraete_und_freie_software.md | 1 +
...-08-29_erfahrungen_mit_einer_ssd_unter_linux.md | 1 +
...rung_mit_kvm_und_virtuelle_netzwerke_mit_vde.md | 1 +
.../2011-12-28_gedanken_zu_de_zentralen_netzen.md | 1 +
...2-04-07_mobile_endgeraete_und_freie_software.md | 1 +
...013-12-21_musikalischer_jahresruekblick_2013.md | 1 +
.../2010-02-06_debian_auf_dem_sheevaplug.md | 1 +
...ngen_mit_dem_sheevaplug_im_laengeren_einsatz.md | 1 +
...linux_ein_archlinux_port_fuer_den_sheevaplug.md | 1 +
.../2011-03-31_sheevaplug_ueberwachung.md | 1 +
.../2011-09-03_die_sache_mit_dem_netzteil.md | 1 +
95 files changed, 1802 insertions(+)
create mode 100644 articles/2010-02-06_debian_auf_dem_sheevaplug.md
create mode 100644 articles/2010-02-24_traffic_ueberwachung_mit_vnstat.md
create mode 100644 articles/2010-03-16_erfahrungen_mit_dem_sheevaplug_im_laengeren_einsatz.md
create mode 100644 articles/2010-07-12_ocr_und_automatische_uebersetzung_mit_dem_n900.md
create mode 100644 articles/2010-12-09_plugbox_linux_ein_archlinux_port_fuer_den_sheevaplug.md
create mode 100644 articles/2011-03-31_sheevaplug_ueberwachung.md
create mode 100644 articles/2011-06-14_darstellen_von_gps_daten_mit_gnuplot.md
create mode 100644 articles/2011-09-03_die_sache_mit_dem_netzteil.md
create mode 100644 articles/2011-10-01_lighttpd_konfiguration_fuer_symphony.md
create mode 100644 articles/2011-10-02_tarsnap_backups_fuer_paranoide.md
create mode 100644 articles/2011-10-16_kurztipp_n900_retten_ohne_neu_zu_flashen.md
create mode 100644 articles/2011-11-08_informationen_umformen_mit_xsl.md
create mode 100644 articles/2011-12-28_gedanken_zu_de_zentralen_netzen.md
create mode 100644 articles/2012-01-25_erfahrungen_mit_openslides.md
create mode 100644 articles/2012-04-07_mobile_endgeraete_und_freie_software.md
create mode 100644 articles/2012-08-29_erfahrungen_mit_einer_ssd_unter_linux.md
create mode 100644 articles/2012-11-20_virtualisierung_mit_kvm_und_virtuelle_netzwerke_mit_vde.md
create mode 100644 articles/2013-03-01_introduction_to_expressing_and_controlling_object_ownership_in_cpp11.md
create mode 100644 articles/2013-04-27_declaring_functions_local_to_a_translation_unit_in_cpp.md
create mode 100644 articles/2013-10-06_notizen_zu_cpp_und_unicode.md
create mode 100644 articles/2013-11-03_mapping_binary_structures_as_tuples_using_template_metaprogramming.md
create mode 100644 articles/2013-12-21_musikalischer_jahresruekblick_2013.md
create mode 100644 articles/2014-01-05_disabling_methods_in_implicitly_instantiated_class_template_specializations_in_cpp.md
create mode 100644 articles/2014-07-11_mapping_arrays_using_tuples_in_cpp11.md
create mode 100644 meta.xml
create mode 100644 microblog.xml
create mode 100644 pages/about.md
create mode 100644 pages/contact.md
create mode 100644 pages/impressum.md
create mode 100644 pages/projects/binary_mapping.md
create mode 100644 pages/projects/codepoint_iterator.md
create mode 100644 pages/projects/dotfiles.md
create mode 100644 pages/projects/graph_storage.md
create mode 100644 pages/projects/input_xslt.md
create mode 100644 pages/projects/scribble.md
create mode 100644 pages/projects/simple_parser.md
create mode 100644 pages/projects/spam_question_filter.md
create mode 100644 pages/projects/trie.md
create mode 120000 tags/cpp/2013-03-01_introduction_to_expressing_and_controlling_object_ownership_in_cpp11.md
create mode 120000 tags/cpp/2013-04-27_declaring_functions_local_to_a_translation_unit_in_cpp.md
create mode 120000 tags/cpp/2013-10-06_notizen_zu_cpp_und_unicode.md
create mode 120000 tags/cpp/2013-11-03_mapping_binary_structures_as_tuples_using_template_metaprogramming.md
create mode 120000 tags/cpp/2014-01-05_disabling_methods_in_implicitly_instantiated_class_template_specializations_in_cpp.md
create mode 120000 tags/cpp/2014-07-11_mapping_arrays_using_tuples_in_cpp11.md
create mode 120000 tags/development/2011-03-31_sheevaplug_ueberwachung.md
create mode 120000 tags/development/2011-06-14_darstellen_von_gps_daten_mit_gnuplot.md
create mode 120000 tags/development/2011-11-08_informationen_umformen_mit_xsl.md
create mode 120000 tags/development/2013-03-01_introduction_to_expressing_and_controlling_object_ownership_in_cpp11.md
create mode 120000 tags/development/2013-04-27_declaring_functions_local_to_a_translation_unit_in_cpp.md
create mode 120000 tags/development/2013-10-06_notizen_zu_cpp_und_unicode.md
create mode 120000 tags/development/2013-11-03_mapping_binary_structures_as_tuples_using_template_metaprogramming.md
create mode 120000 tags/development/2014-01-05_disabling_methods_in_implicitly_instantiated_class_template_specializations_in_cpp.md
create mode 120000 tags/development/2014-07-11_mapping_arrays_using_tuples_in_cpp11.md
create mode 120000 tags/english/2013-03-01_introduction_to_expressing_and_controlling_object_ownership_in_cpp11.md
create mode 120000 tags/english/2013-04-27_declaring_functions_local_to_a_translation_unit_in_cpp.md
create mode 120000 tags/english/2013-11-03_mapping_binary_structures_as_tuples_using_template_metaprogramming.md
create mode 120000 tags/english/2014-01-05_disabling_methods_in_implicitly_instantiated_class_template_specializations_in_cpp.md
create mode 120000 tags/english/2014-07-11_mapping_arrays_using_tuples_in_cpp11.md
create mode 120000 tags/german/2010-02-06_debian_auf_dem_sheevaplug.md
create mode 120000 tags/german/2010-02-24_traffic_ueberwachung_mit_vnstat.md
create mode 120000 tags/german/2010-03-16_erfahrungen_mit_dem_sheevaplug_im_laengeren_einsatz.md
create mode 120000 tags/german/2010-07-12_ocr_und_automatische_uebersetzung_mit_dem_n900.md
create mode 120000 tags/german/2010-12-09_plugbox_linux_ein_archlinux_port_fuer_den_sheevaplug.md
create mode 120000 tags/german/2011-03-31_sheevaplug_ueberwachung.md
create mode 120000 tags/german/2011-06-14_darstellen_von_gps_daten_mit_gnuplot.md
create mode 120000 tags/german/2011-09-03_die_sache_mit_dem_netzteil.md
create mode 120000 tags/german/2011-10-01_lighttpd_konfiguration_fuer_symphony.md
create mode 120000 tags/german/2011-10-02_tarsnap_backups_fuer_paranoide.md
create mode 120000 tags/german/2011-10-16_kurztipp_n900_retten_ohne_neu_zu_flashen.md
create mode 120000 tags/german/2011-11-08_informationen_umformen_mit_xsl.md
create mode 120000 tags/german/2011-12-28_gedanken_zu_de_zentralen_netzen.md
create mode 120000 tags/german/2012-01-25_erfahrungen_mit_openslides.md
create mode 120000 tags/german/2012-04-07_mobile_endgeraete_und_freie_software.md
create mode 120000 tags/german/2012-08-29_erfahrungen_mit_einer_ssd_unter_linux.md
create mode 120000 tags/german/2012-11-20_virtualisierung_mit_kvm_und_virtuelle_netzwerke_mit_vde.md
create mode 120000 tags/german/2013-10-06_notizen_zu_cpp_und_unicode.md
create mode 120000 tags/german/2013-12-21_musikalischer_jahresruekblick_2013.md
create mode 120000 tags/linux/2010-02-06_debian_auf_dem_sheevaplug.md
create mode 120000 tags/linux/2010-02-24_traffic_ueberwachung_mit_vnstat.md
create mode 120000 tags/linux/2010-03-16_erfahrungen_mit_dem_sheevaplug_im_laengeren_einsatz.md
create mode 120000 tags/linux/2010-07-12_ocr_und_automatische_uebersetzung_mit_dem_n900.md
create mode 120000 tags/linux/2010-12-09_plugbox_linux_ein_archlinux_port_fuer_den_sheevaplug.md
create mode 120000 tags/linux/2011-10-01_lighttpd_konfiguration_fuer_symphony.md
create mode 120000 tags/linux/2011-10-16_kurztipp_n900_retten_ohne_neu_zu_flashen.md
create mode 120000 tags/linux/2012-04-07_mobile_endgeraete_und_freie_software.md
create mode 120000 tags/linux/2012-08-29_erfahrungen_mit_einer_ssd_unter_linux.md
create mode 120000 tags/linux/2012-11-20_virtualisierung_mit_kvm_und_virtuelle_netzwerke_mit_vde.md
create mode 120000 tags/opinion/2011-12-28_gedanken_zu_de_zentralen_netzen.md
create mode 120000 tags/opinion/2012-04-07_mobile_endgeraete_und_freie_software.md
create mode 120000 tags/opinion/2013-12-21_musikalischer_jahresruekblick_2013.md
create mode 120000 tags/sheevaplug/2010-02-06_debian_auf_dem_sheevaplug.md
create mode 120000 tags/sheevaplug/2010-03-16_erfahrungen_mit_dem_sheevaplug_im_laengeren_einsatz.md
create mode 120000 tags/sheevaplug/2010-12-09_plugbox_linux_ein_archlinux_port_fuer_den_sheevaplug.md
create mode 120000 tags/sheevaplug/2011-03-31_sheevaplug_ueberwachung.md
create mode 120000 tags/sheevaplug/2011-09-03_die_sache_mit_dem_netzteil.md
diff --git a/articles/2010-02-06_debian_auf_dem_sheevaplug.md b/articles/2010-02-06_debian_auf_dem_sheevaplug.md
new file mode 100644
index 0000000..c7bc555
--- /dev/null
+++ b/articles/2010-02-06_debian_auf_dem_sheevaplug.md
@@ -0,0 +1,65 @@
+# Debian auf dem SheevaPlug
+
+Auf dem herkömmlichen [Weg](http://www.cyrius.com/debian/kirkwood/sheevaplug/) ist es zwar möglich ein Debian auf dem SheevaPlug zu installieren, jedoch nur auf einem externen USB-Stick oder auf einer SD-Karte. Die Installation auf dem 512MB großen internen Flashspeicher des Plugs ist damit nicht möglich. Es gibt jedoch einen Weg um Debian auch im internen Speicher zu installieren, der auch noch um einiges komfortabler als der oben verlinkte Weg ist.
+
+Als erstes laden wir uns den normalen SheevaInstaller herunter mit dem man Ubuntu 9.04 auf dem Sheeva installieren kann ([klick](http://www.plugcomputer.org/index.php/us/resources/downloads?func=select&id=5)). Nach dem wir den Tarball heruntergeladen haben sollte man ihn entpacken. Als nächstes laden wir ein Debian Lenny / Squeeze Prebuild von [hier](http://www.mediafire.com/sheeva-with-debian) herunter. Nun ersetzen wir die „rootfs.tar.gz“ mit der neuen Debian „rootfs.tar.gz“. Bevor wir jedoch mit der Installation beginnen müssen wir die neue „rootfs.tar.gz“ mit „tar“ entpacken. Dazu führen wir auf der Konsole
+
+~~~
+mkdir rootfs
+cd rootfs
+tar xfvz rootfs.tar.gz
+~~~
+{: .language-sh}
+
+aus. In dem Ordner führen wir nun ein
+
+~~~
+mknod -m 660 dev/ttyS0 c 4 64
+~~~
+{: .language-sh}
+
+aus. Mit diesem Befehl wird die fehlende serielle Konsole erstellt. Jetzt verpacken wir das Archiv wieder mit
+
+~~~
+tar cfvz ../rootfs.tar.gz *
+~~~
+{: .language-sh}
+
+Den gesamten Inhalt des Ordners /install im SheevaInstaller-Verzeichniss müssen wir jetzt auf einen mit FAT formatierten USB-Stick kopieren. Diesen stecken wir schon einmal in den USB-Port des Sheevas. Als nächstes verbinden wir den SheevaPlug mit einem Mini-USB Kabel mit unserem Computer und führen das Script „runme.php“ aus. Wenn alles klappt wird nun ein neuer Boot-Loader und das rootfs auf den Plug kopiert. Dannach ist unser Debian einsatzbereit.
+Sollte der Plug den USB-Stick nicht erkennen und somit auch das rootfs nicht kopieren können hilft es einen anderen USB-Stick zu verwenden. Beispielsweise wurde mein SanDisk U3 Stick trotz gelöschtem U3 nicht erkannt. Mit einem anderen Stick funktionierte es jedoch tadelos. Auch sollte der Stick partitioniert sein. Der Bootloader des SheevaPlugs kann nicht gut mit direkt auf dem Stick enthalten Dateisystemen umgehen. Wenn die MiniUSB Verbindung beim Ausführen des runme-Scripts nicht funktionieren sollte hilft oft ein
+
+~~~
+rmmod ftdi_sio
+~~~
+{: .language-sh}
+
+und
+
+~~~
+modprobe ftdi_sio vendor=0x9e88 product=0x9e8f
+~~~
+{: .language-sh}
+
+(beides als root). Ebenfalls sollte kein zweites Serielles-Gerät am Computer angeschlossen sein.
+Bei neueren Plugs kann man bei Problemen bei der Installation die Datei „uboot/openocd/config/interface/sheevaplug.cfg“ im SheevaInstaller-Ordner nach
+
+~~~
+interface ft2232
+ft2232_layout sheevaplug
+ft2232_vid_pid 0×0403 0×6010
+#ft2232_vid_pid 0x9e88 0x9e8f
+#ft2232_device_desc “SheevaPlug JTAGKey FT2232D B”
+jtag_khz 2000
+~~~
+{: .language-sh}
+
+umändern.
+Wenn Debian jetzt auf dem SheevaPlug läuft und man sich über SSH einloggen konnte (pwd: nosoup4u), sollte man als erstes ein Update machen.
+
+ apt-get update && apt-get dist-upgrade
+
+Über die Paketverwaltung kann man jetzt ganz einfach die benötigte Software installieren. Ich setzte auf meinem Plug z.B. lighttpd als Webserver mit PHP5 und MySQL für diese Website ein. Es empfielt sich /var und /tmp auszulagern um Löschzyklen zu sparen. Für /tmp eignet sich eine ramdisk.
+
+## Erfahrungen
+
+Ein Debian ist eine gute Alternative zu dem vorinstallierten Ubuntu 9.04. Denn dieses wirft Fehler bei booten aus und hat anfangs Konfigurationsprobleme. Auch braucht es im Vergleich zum Debian eine Ewigkeit zum booten. Das mag bei einem Server nicht wichtig sein, aber ich finde es dennoch schön schnell rebooten zu können. Das gute ist, dass man wenn man schon Erfahrung mit Ubuntu hat auch sehr gut mit Debian zurechtkommt. Aber Ubuntu Karmic lässt sich leider nicht mehr auf dem SheevaPlug installieren. Der SheevaPlug ist erstaunlich schnell. Er erstellt die Seiten etwa doppelt so schnell wie die Server des vorher von mir verwendeten Gratishoster “bplaced.net”. Auch hat er einen sehr geringen Stromverbrauch von nur 5 Watt. Und selbst wenn Webhostingangebote zumindest in der Internetanbindung schneller sein mögen, hat man mit einem SheevaPlug einen sehr günstigen Root-Server, auf dem man tun und lassen kann was man will.
diff --git a/articles/2010-02-24_traffic_ueberwachung_mit_vnstat.md b/articles/2010-02-24_traffic_ueberwachung_mit_vnstat.md
new file mode 100644
index 0000000..9f81703
--- /dev/null
+++ b/articles/2010-02-24_traffic_ueberwachung_mit_vnstat.md
@@ -0,0 +1,10 @@
+# Traffic-Überwachung mit vnstat
+
+Heute möchte ich euch ein kleines und praktisches Programm zum Überwachen des Netzwerkverkehrs vorstellen: [vnstat](http://humdi.net/vnstat/).
+vnStat ist ein konsolenbasierter Netzwerkverkehrmonitor der Logs mit der Menge des Datenverkehrs auf beliebigen Netzwerkschnittstellen speichert. Aus diesen Logs generiert vnStat dann diverse Statistiken.
+
+
+
+Installieren kann man vnstat unter Debian bequem aus den Paketquellen mit `apt-get install vnstat` oder unter ArchLinux mit `pacman -S vnstat`. Gestartet wird vnStat mit `vnstat`. Sobald der Daemon läuft schreibt vnstat den aktuellen Netzwerkverkehr in eine Datenbank. Durch Anhängen von Argumenten kann man jetzt schöne Statistiken auf der Konsole ausgeben, z.B. eine Statistik über die letzten Tage mit `vnstat -d` (siehe Bild) oder über die letzten Wochen mit `vnstat -w`. Eine Übersicht über alle möglichen Argumente bekommt man wie Üblich über `vnstat –help`. Eine sehr Interessante Funktion wie ich finde ist die Möglichkeit zur live-Anzeige des Verkehrs mit `vnstat -h`.
+
+Ich finde vnStat zum Überwachen des Netzwerkverkehrs wirklich sehr praktisch, und auch das Anzeigen des Verkehrs über die letzen Tage, Wochen oder Monate ist nützlich. vnStat ist dabei sehr ressourcenschonend und verlangsamt das Netzwerk selbst nicht (es schaltet sich nicht etwa zwischen System und Netzwerkkarte). Für die Anzeige des Traffics auf einer schicken Internetseite gibt es auch das [vnStat PHP frontend](http://www.sqweek.com/sqweek/index.php?p=1). Weiterführende Informationen bekommt ihr auch auf der [Webpräsenz von vnStat](http://humdi.net/vnstat/).
diff --git a/articles/2010-03-16_erfahrungen_mit_dem_sheevaplug_im_laengeren_einsatz.md b/articles/2010-03-16_erfahrungen_mit_dem_sheevaplug_im_laengeren_einsatz.md
new file mode 100644
index 0000000..2e2369e
--- /dev/null
+++ b/articles/2010-03-16_erfahrungen_mit_dem_sheevaplug_im_laengeren_einsatz.md
@@ -0,0 +1,22 @@
+# Erfahrungen mit dem SheevaPlug im längeren Einsatz
+
+Da ich den SheevaPlug ja jetzt schon seit längerer Zeit einsetze und auch dieses Blog auf ihm gehostet ist, will ich jetzt einmal über meine Erfahrungen mit dem Einsatz des SheevaPlugs über längere Zeit als Webserver berichten.
+
+Der SheevaPlug ist wirklich stabil und läuft ohne Probleme mit Debian Lenny. Als Webserver setze ich, wie schoneinmal geschrieben Lighttpd ein. Apache2 läuft zwar auch einwandfrei, jedoch ist die Erstellungszeit der Seiten mit PHP bei Lighttpd doch noch etwas schneller. Auch ist der Speicherverbrauch im RAM merklich geringer, was bei den 512 MB Ram des Plugs doch ganz nett ist.
+
+Als Datenbankserver verwende ich MySQL, welches zwar doch eine ganz schöne größe auf dem NAND-Speicher hat aber wirklich gut funktioniert. Zur Verwaltung der Datenbanken verwende ich phpMyAdmin. Auch das läuft wirklich zufriedenstellend und schnell übers Netzwerk.
+
+Da ich mit den Schreibzyklen und der Kapazität des NANDs möglichst sparsam umgehen möchte, habe ich /var komplett auf eine SD-Karte ausgelagert. Der SD-Reader ist schnell genug, nur wäre es schön, wenn die Karte irgendwie einrasten würde, da sie beim versehentlichen Verschieben des Plugs gerne herausrutscht. Jedoch bereue ich es mittlerweile, dass ich nicht das komplette System auf eine SD-Karte ausgelagert und im NAND nur ein Backup-OS belassen habe, da man mit nur 462 MB nicht wirklich viel machen kann. Auch steigt die Datenmenge im Speicher während der Plug läuft “zufällig” an. Er wird über die Wochen immer voller und kraxelt gemütlich den 65% entgegen (zumindest kann ich keine bestimmte Aktion meinerseits damit verbinden). Hat einer von euch eventuell eine Idee woran das liegen könnte?
+
+Auch verursacht der MySQL-Server in ebanfalls ungleichen Abständen eine 100%ige CPU-Auslastung, ich kann daraufhin nurnoch mit SSH und nicht mer über den Webserver auf den Plug zugreifen. Das abschießen von MySQL und auch ein reboot funktionieren nicht. Gebe ich “reboot” als root ein, werden zwar entsprechende Meldungen ausgegeben, rebooten tut der PlugComputer jedoch nicht (dann hilft nurnoch der harte Weg – Strom weg). Es ist so wirklich kein guter Zustand, sollte ich einmal für mehrere Tage keinen HW-Zugriff auf den SheevaPlug haben und es würde wieder anfangen, könnte ich nichts machen um den Fehler zu beheben. Hat auch zu diesem Problem (das vllt. nicht unbedingt am Plug, sondern auch an einer Fehlkonfiguration von mir liegt) vielleicht einer von euch eine mögliche Lösung parat?
+
+Das Netzwerkinterface des Plugs ist für mich ausreichend schnell (macht bei dem mageren DSL 2000 eh nichts aus), so wie es aussieht ist das einzige was wirklich ausbremst die Schreib- und Lesegeschwindigkeit des Speichers. Für einen Webserver reicht es jedoch ohne Probleme, nur zum Sichern der Backups könnte es schneller sein.
+
+Im Betrieb wird der Plug nur Handwarm, das einzige was man vllt. verbessern könnte wäre das störende Blinken des Netzwerkanschlusses. Damit könnte man den Energieverbrauch sicher noch ein wenig weiter senken, denn der Plug ist wirklich festlich beleuchtet. Sitzt man im dunkeln direkt daneben, kann das Blinken und Leuchten wirklich stören.
+Die 1.2 Ghz der CPU reichen gut aus, schneller muss es für einen Webserver bei nicht explodierenden Besucherzahlen nicht sein (wobei das Problem vorher eher die Netzwerkanbindung nach außen wäre, aber für solche Belastungen ist der Plug ja auch nicht gebaut).
+
+Noch etwas zu den Anwendungen die ich auf dem SheevaPlug einsetze: WordPress für diesen Blog, Piwik um euch zu überwachen und phpMyAdmin für die Datenbanken. Ebenfalls läuft Dovecot als IMAP-Server in dem die Mails meiner verschiedenen Postfächer per fetchmail gesammelt und mit procmail sortiert werden. Torrents lade ich über das Webinterface von Transmission herunter, anderes über Nacht mit at und wget.
+
+Man sieht, der SheevaPlug lässt sich wirklich zu einigem gebrauchen und er funktioniert auch über längere Zeit gut. Als Alternative zu Debian bin ich neulich über [ArchMobile](http://www.archmobile.org/) gestolpert, einer Variante meiner Lieblingsdistribution für ARM, welche auch auf dem SheevaPlug läuft. Die Paketquellen sind allerdings noch etwas leer und beinhalten nicht alle Software die ich für den Webserver bräuchte. Und da ich keine Lust habe alles selber zu kompilieren (vor Arch habe ich Gentoo auf meinem Desktop eingesetzt), kommt es zur Zeit als Alternative für mich leider noch nicht in Frage. Werde aber trozdem informiert bleiben und eventuell auch einmal näher darüber [berichten](/symphony/artikel/plugbox-linux-ein-archlinux-port-fuer-den-sheevaplug).
+
+Der SheevaPlug ist wirklich ein wunderbares kleines Teil und ich habe durch ihn viel über Linux gelernt – allein dadurch hat er sich schon gelohnt.
diff --git a/articles/2010-07-12_ocr_und_automatische_uebersetzung_mit_dem_n900.md b/articles/2010-07-12_ocr_und_automatische_uebersetzung_mit_dem_n900.md
new file mode 100644
index 0000000..c842df8
--- /dev/null
+++ b/articles/2010-07-12_ocr_und_automatische_uebersetzung_mit_dem_n900.md
@@ -0,0 +1,17 @@
+# OCR und automatische Übersetzung mit dem N900
+
+Heute bin ich auf einem Streifzug durch das Maemo5 testing-Repository auf ein sehr praktisches Programm gestoßen: PhotoTranslator. Mit ihm lässt sich der Text aus Bildern extrahieren und mittels Google-Translate übersetzen.
+
+
+
+Das ist z.B. praktisch um fremdsprachige Speisekarten o.ä. in die eigene Sprache zu übersetzen. Nachdem man ein Bild ausgewählt oder direkt aus dem Programm heraus eines erstellt hat (funktioniert in der aktuellen Alpha-Version von PhotoTranslator noch nicht richtig) muss man als erstes den gewünschten Textteil mittels eines Rahmens, wie man ihn auch zum Zuschneiden von Fotos im Bildbetrachter des N900 verwendet auswählen – zur Zeit geht das jedoch leider nur mit einzelnen Zeilen und nicht mit ganzen Textblöcken.
+
+
+
+Danach muss man nurnoch die Ausgangs und Zielsprache wählen, kurz warten und schon bekommt man den eingescannten Ausgangstext und die Übersetzung präsentiert. Das funktioniert auch schon in dieser frühen Alpha-Version sehr gut.
+
+
+
+PhotoTranslator lässt sich aber nicht nur zum Übersetzen von Bildern, sondern auch als einfache Oberfläche für Google-Translate mit Texteingabe über die Tastatur verwenden.
+Weitere Informationen und ein Demo-Video findet ihr unter [cybercomchannel.com](http://www.cybercomchannel.com/?p=63). Installieren lässt sich PhotoTranslator bei aktivierten extras-testing Repositories bequem aus der Paketverwaltung des N900 heraus.
+Anmerkung: Auch diesen Artikel habe ich komplett aus dem Browser des N900 heraus geschrieben – das Gerät ist einfach fantastisch, ich kann es nur empfehlen.
diff --git a/articles/2010-12-09_plugbox_linux_ein_archlinux_port_fuer_den_sheevaplug.md b/articles/2010-12-09_plugbox_linux_ein_archlinux_port_fuer_den_sheevaplug.md
new file mode 100644
index 0000000..56d992f
--- /dev/null
+++ b/articles/2010-12-09_plugbox_linux_ein_archlinux_port_fuer_den_sheevaplug.md
@@ -0,0 +1,12 @@
+# PlugBox Linux - Ein ArchLinux Port für den SheevaPlug
+
+Nachdem ich ja jetzt einige Zeit Debian Lenny auf meinem SheevaPlug eingesetzt habe, verwende ich seit kurzem Plugbox Linux. [Plugbox](http://archlinuxarm.org/) ist eine Portierung von [ArchLinux](https://archlinux.de) auf den SheevaPlug und einige andere ARM-Hardware wie PogoPlug, Dockstar, GuruPlug und diverse Smartphones wie das N900.
+
+Seit einiger Zeit läuft Arch also jetzt nicht mehr nur auf meinem Desktop sondern auch auf meinem Plug – und was soll ich sagen, ich bin einfach begeistert!
+Es läuft über längere Zeit zu meinem Erstaunen um einiges besser und stabiler als Debian. Ich habe bis jetzt keinerlei Probleme mehr mit MySQL CPU-Auslastung oder Zulaufen des Arbeitsspeichers. Ich kann den Plug jetzt tatsächlich über Monate ohne Reboot laufen lassen – bei Debian war ja leider öfter nötig.
+
+Nett ist es auch, dass ich mich nicht an neue Konfigurationsdateien gewöhnen und Pacman als Paketverwaltung verwenden kann. Auch die Installation von Paketen aus dem AUR wird unterstützt. Das war bei mir allerdings bis jetzt noch nicht nötig, da alles was ich zur Zeit brauche (Lighttpd, MySQL, php, python etc.) schon vorkompiliert in den Paketquellen vorhanden ist. Die Pakete werden übrigens nicht crosskompiliert o.ä. sondern werden direkt auf einem SheevaPlug erstellt.
+
+## Installation
+
+Installieren kann man das rootfs Image mit dem [SheevaPlug Installer 1.0](http://plugcomputer.org/data/docs/sheevaplug-installer-v1.0.tar.gz) sowohl im NAND des Plugs als auch auf einer SD Karte. Bei der Installation auf einer SD Karte musste ich für einen fehlerfreien Bootvorgang die Uboot bootcmd um ein zweites “mmcinit;” erweitern – ohne diese Anpassung blieb der Bootloader bei einem Kaltstart hängen.
diff --git a/articles/2011-03-31_sheevaplug_ueberwachung.md b/articles/2011-03-31_sheevaplug_ueberwachung.md
new file mode 100644
index 0000000..0cbea1c
--- /dev/null
+++ b/articles/2011-03-31_sheevaplug_ueberwachung.md
@@ -0,0 +1,93 @@
+# SheevaPlug Überwachung
+
+Um den Überblick über die Auslastung und den Traffic meines SheevaPlugs zu behalten setze ich [Conky](http://conky.sourceforge.net/), [dstat](http://freshmeat.net/projects/dstat/) und [gnuplot](http://www.gnuplot.info/) ein.
+
+Den Systemmonitor Conky lasse ich mit dem Befehl `ssh -X -vv -Y -p 22 adrian@asterix "conky -c /home/adrian/.conkyrc"` über X-forwarding in meiner XFCE-Session anzeigen. Das klappt einwandfrei und ergibt zusammen mit dieser [Conky-Konfiguration](http://adrianktools.redirectme.net/files/.conkyrc) und einer lokalen Conky-Instanz folgendes Bild:
+
+
+
+Zusätzlich loggt der SheevaPlug regelmäßig die aktuellen Systemdaten wie CPU-Auslastung, Netzwerkverkehr und belegten Arbeitsspeicher und generiert sie zu Graphen die mir dann jede Nacht per eMail zugesand werden.
+Zum Loggen der Daten verwende ich dstat das mit folgendem, von einem Cron-Job gestarteten Befehl aufgerufen wird:
+
+~~~
+dstat -tcmn 2 1 | tail -1 >> /var/log/systat.log
+~~~
+{: .language-sh}
+
+Die Argumente -tcmn geben hierbei die zu loggenden Systemdaten und deren Reihenfolge an – heraus kommen Zeilen wie diese:
+
+ 31-03 19:40:04 | 2 4 95 0 0 0 | 141M 11.3M 71.6M 277M | 684B 736B
+
+Um 0 Uhr wird dann die Log-Datei von einem Cron-Job mit diesem Script wegkopiert, Graphen werden von gnuplot generiert und dann mit einem kleinen Python-Programm versendet.
+
+~~~
+#!/bin/sh
+mv /var/log/systat.log /root/sys_graph/stat.dat
+cd /root/sys_graph/
+./generate_cpu.plot
+./generate_memory.plot
+./generate_network.plot
+./send_report.py
+~~~
+{: .language-sh}
+
+Hier das gnuplot-Script zur Erzeugung des CPU-Graphen als Beispiel:
+
+~~~
+#!/usr/bin/gnuplot
+set terminal png
+set output "cpu.png"
+set title "CPU usage"
+set xlabel "time"
+set ylabel "percent"
+set xdata time
+set timefmt "%d-%m %H:%M:%S"
+set format x "%H:%M"
+plot "stat.dat" using 1:4 title "system" with lines, \
+"stat.dat" using 1:3 title "user" with lines, \
+"stat.dat" using 1:5 title "idle" with lines
+~~~
+{: .language-sh}
+
+… und hier noch das Python-Programm zum Versenden per Mail:
+
+~~~
+#!/usr/bin/python2
+import smtplib
+from time import *
+from email.mime.image import MIMEImage
+from email.mime.multipart import MIMEMultipart
+
+lt = localtime()
+
+# Mail-Header
+msg = MIMEMultipart()
+msg['Subject'] = strftime('Leistungsreport – %d%m%Y', lt)
+msg['From'] = 'reports@asterix'
+msg['To'] = 'mail@mail.mail'
+
+msg.preamble = strftime('Leistungsreport – %d%m%Y', lt)
+
+# Attachments
+fileArray = ['cpu.png','memory.png','network.png']
+for file in fileArray:
+ fp = open(file, ‘rb’)
+ img = MIMEImage(fp.read())
+ fp.close()
+ msg.attach(img)
+
+# Login in SMTP-Server
+s = smtplib.SMTP('smtpmail.t-online.de')
+s.login('mail@mail.mail', '#####')
+
+s.sendmail('mail@mail.mail', 'mail@mail.mail', msg.as_string())
+s.quit()
+~~~
+{: .language-python}
+
+Als Endergebniss erhalte ich dann täglich solche Grafiken per Mail:
+
+
+
+Ich finde es immer wieder erstaunlich mit wie wenigen Zeilen Quelltext man interessante Sachen unter Linux erzeugen kann – oder besser wie viel Programme wie gnuplot mit nur wenigen Anweisungen erzeugen können. So hat das komplette Schreiben dieser Scripts mit Recherche nur etwa 1,5 Stunden gedauert – inklusive Testen.
+Alle verwendeten Programme sind in den ArchLinux Paketquellen vorhanden – auch in denen von PlugBox-Linux, einer Portierung von ArchLinux auf ARM-Plattformen die ich nur immer wieder empfehlen kann – besonders nach den jetzt oft erscheinenden Paket-Updates. Aber dazu auch dieser Artikel: [Plugbox Linux – Ein ArchLinux Port für den SheevaPlug](/article/plugbox_linux_ein_archlinux_port_fuer_den_sheevaplug/).
diff --git a/articles/2011-06-14_darstellen_von_gps_daten_mit_gnuplot.md b/articles/2011-06-14_darstellen_von_gps_daten_mit_gnuplot.md
new file mode 100644
index 0000000..809df85
--- /dev/null
+++ b/articles/2011-06-14_darstellen_von_gps_daten_mit_gnuplot.md
@@ -0,0 +1,105 @@
+# Darstellen von GPS Daten mit gnuplot
+
+Bei meiner letzten Wanderung in den Schweizer Alpen habe ich spaßeshalber das N900 alle 10 Sekunden meine Position loggen lassen. Als Ergebnis erhielt ich dann ein aus 1991 Messpunkten bestehendes XML entsprechend der GPX Spezifikation.
+
+Die Daten der Messpunkte sind im XML als `trkpt`-Tags gespeichert. Enthalten sind jeweils der Längen- und Breitengrad, die Uhrzeit, der Modus (3d / 2d), die Höhe über Null und die Anzahl der zur Positionsbestimmung genutzten Satelliten. Aussehen tut das ganze dann z.B. so:
+
+~~~
+
+
+ 3d
+ 870
+ 6
+
+~~~
+{: .language-xml}
+
+Diese Daten lassen sich nun sehr einfach Verarbeiten – ich habe das Python `xml.dom.minidom` Modul verwendet. Um die Positionen einfacher verwenden zu können, werden sie mit dieser Funktion in Listenform gebracht:
+
+~~~
+def getPositions(xml):
+ doc = minidom.parse(xml)
+ node = doc.documentElement
+ rawTrkPt = doc.getElementsByTagName("trkpt")
+ positions = []
+ for TrkPt in rawTrkPt:
+ pos = {}
+ pos["lat"] = TrkPt.getAttribute("lat")
+ pos["lon"] = TrkPt.getAttribute("lon")
+ pos["ele"] = int(TrkPt.getElementsByTagName("ele")[0].childNodes[0].nodeValue)
+ positions.append(pos)
+ return positions
+~~~
+{: .language-python}
+
+Aus dieser Liste kann ich jetzt schon einige Kennzahlen ziehen:
+
+~~~
+def printStats(gpxPositions):
+ highEle = gpxPositions[0]["ele"]
+ lowEle = gpxPositions[0]["ele"]
+ for pos in gpxPositions:
+ if pos["ele"] > highEle:
+ highEle = pos["ele"]
+ if pos["ele"] < lowEle:
+ lowEle = pos["ele"]
+ eleDiv = highEle - lowEle
+ print "Measure points: " + str(len(gpxPositions))
+ print "Lowest elevation: " + str(lowEle)
+ print "Highest elevation: " + str(highEle)
+ print "Height difference: " + str(eleDiv)
+~~~
+{: .language-python}
+
+
+Die Kennzahlen für meine Testdaten wären:
+
+ Measure points: 1991
+ Lowest elevation: 863
+ Highest elevation: 1665
+ Height difference: 802
+
+Da die Daten ja, wie schon im Titel angekündigt, mit gnuplot dargestellt werden sollen werden sie mit dieser Funktion in für gnuplot lesbares CSV gebracht:
+
+~~~
+def printCsv(gpxPositions):
+ separator = ';'
+ for pos in gpxPositions:
+ print pos["lat"] + separator + pos["lon"] + separator + str(pos["ele"])
+~~~
+{: .language-python}
+
+## Plotten mit gnuplot
+
+
+
+Eine solche, dreidimensionale Ausgabe der GPS Daten zu erzeugen ist mit der `splot`-Funktion sehr einfach.
+
+~~~
+#!/usr/bin/gnuplot
+set terminal png size 1280,1024
+set output "output.png"
+set multiplot
+set yrange [9.365:9.31]
+set xrange [47.325:47.28]
+set zrange [800:1700]
+set view 28,272,1,1
+set ticslevel 0
+set grid
+set datafile separator ';'
+splot "/home/adrian/projects/gpxplot/wanderung_120611.csv" with impulses lt 3 lw 1
+splot "/home/adrian/projects/gpxplot/wanderung_120611.csv" with lines lw 2
+unset multiplot
+~~~
+{: .language-sh}
+
+Mit `set terminal png size 1280,1024` und `set output "output.png"` werden zuerst das Ausgabemedium, die Größe und der Dateiname der Ausgabe definiert. Dannach aktiviert `set multiplot` den gnuplot-Modus, bei dem mehrere Plots in einer Ausgabe angezeigt werden können. Dieses Verhalten brauchen wir hier, um sowohl die Strecke selbst als rote Line, als auch die zur Verdeutlichung verwendeten blauen Linien gleichzeitig anzuzeigen.
+Mit `set [y,x,z]range` werden die Außengrenzen des zu plottenden Bereichs gesetzt. Dies ließe sich natürlich auch über ein Script automatisch erledigen. Als Nächstes wird mit `set view 28,272,1,1` die Blickrichtung und Skalierung definiert. `set ticslevel 0` sorgt dafür, dass die Z-Achse direkt auf der Grundebene beginnt. Um ein Gitter auf der Grundfläche anzuzeigen, gibt es `set grid`.
+Als letztes werden jetzt die zwei Plots mit `splot` gezeichnet. Die Angaben hinter `with` Steuern hierbei das Aussehen der Linien.
+
+Falls jemand den Artikel mit meinen Daten nachvollziehen möchte - das GPX-File kann hier heruntergeladen werden:
+ [wanderung_120611.gpx](http://blog.kummerlaender.eu/workspace/media/upload/wanderung_120611.gpx)
+
+Zum Schluss hier noch ein Blick vom Weg auf den Kronberg Richtung Jakobsbad im Appenzell:
+
+
diff --git a/articles/2011-09-03_die_sache_mit_dem_netzteil.md b/articles/2011-09-03_die_sache_mit_dem_netzteil.md
new file mode 100644
index 0000000..6b2fa47
--- /dev/null
+++ b/articles/2011-09-03_die_sache_mit_dem_netzteil.md
@@ -0,0 +1,7 @@
+# Die Sache mit dem Netzteil
+
+Diese Woche hat meinen SheevaPlug das selbe Schicksal getroffen wie viele andere auch – nach dem Urlaub war das Netzteil kaputt. Mit einem externen von [Conrad](http://www.conrad.de/ce/de/product/510820/Dehner-SYS1308-Netzt-fests-5V15W%22%22) geht er jetzt aber wieder einwandfrei.
+
+
+
+Als sehr nützlich, um in der Zeit bis der Plug repariert war wenigstens eine _Netzteil-Kaputt_-Meldung auf der Webseite anzeigen zu können, erwies sich [Staticloud](http://staticloud.com) – ein netter Webservice um statische Webseiten per drag ‘n drop kostenlos in der Amazon-Cloud hosten zu können. Um die Inhalte zugänglich zu halten (Backup habe ich natürlich schon – aber bis jetzt nur als MySQL-Dump, ab jetzt wohl auch das ganze als HTML ) half mir Google – der gesammte Blog hängt praktischerweise dort im Cache.
diff --git a/articles/2011-10-01_lighttpd_konfiguration_fuer_symphony.md b/articles/2011-10-01_lighttpd_konfiguration_fuer_symphony.md
new file mode 100644
index 0000000..fade6af
--- /dev/null
+++ b/articles/2011-10-01_lighttpd_konfiguration_fuer_symphony.md
@@ -0,0 +1,17 @@
+# Lighttpd Konfiguration für Symphony
+
+Da ich die Neuauflage dieser Seite nicht mehr auf Wordpress, sondern auf dem [Symphony CMS](http://http://symphony-cms.com/) aufgebaut habe, aber nicht den Webserver wechseln wollte, musste ich einen Weg finden die Apache URL-Rewrites in Lighttpd nachzubilden.
+
+Von den im Netz verfügbaren [Beispielen](http://blog.ryara.net/2009/12/05/lighttpd-rewrite-rules-for-symphony-cms/) hat jedoch keines ohne Einschränkungen funktioniert. Aus diesem Grund habe ich auf Basis der oben verlinkten Konfiguration ein funktionierendes Regelwerk geschrieben:
+
+ url.rewrite-once += (
+ "^/favicon.ico$" => "$0",
+ "^/robots.txt$" => "$0",
+ "^/symphony/(assets|content|lib|template)/.*$" => "$0",
+ "^/workspace/([^?]*)" => "$0",
+ "^/symphony(\/(.*\/?))?(.*)\?(.*)$" => "/index.php?symphony-page=$1&mode=administration&$4&$5",
+ "^/symphony(\/(.*\/?))?$" => "/index.php?symphony-page=$1&mode=administration",
+ "^/([^?]*/?)(\?(.*))?$" => "/index.php?symphony-page=$1&$3"
+ )
+
+Dieses läuft mit der aktuellsten Symphony Version einwandfrei. Zu finden ist die Konfiguration übrigens mit den restlichen Quellen meines neuen Webseiten-Setups auf [Github](https://github.com/KnairdA/blog.kummerlaender.eu).
diff --git a/articles/2011-10-02_tarsnap_backups_fuer_paranoide.md b/articles/2011-10-02_tarsnap_backups_fuer_paranoide.md
new file mode 100644
index 0000000..7aedf41
--- /dev/null
+++ b/articles/2011-10-02_tarsnap_backups_fuer_paranoide.md
@@ -0,0 +1,28 @@
+# Tarsnap - Backups für Paranoide
+
+Für meine Backups nutze ich jetzt seit einiger Zeit den Online-Service [Tarsnap](http://www.tarsnap.com/). Dabei handelt es sich um einen Client der es ermöglicht verschlüsselte Backups in der Amazon-Cloud zu speichern und zu verwalten.
+
+Das ganze ist so aufgebaut, dass immer nur veränderte und neue Dateien übertragen werden müssen. Alle Daten werden schon vom Client verschlüsselt, sodass keine unverschlüsselten Daten übers Netzwerk fließen und weder die Entwickler von Tarsnap noch Amazon den Inhalt der Daten auslesen können.
+
+Der Service ist nicht kostenlos, aber sehr günstig - der Preis pro Byte Speicher / Datenverkehr beträgt 300 Picodollar, ein Gigabyte kostet also pro Monat nur 0,30$.
+
+Der Tarsnap-Client ist im Quellcode verfügbar (aber nicht unter einer Open Source Lizenz) und lässt sich problemlos auch auf ARM Prozessoren kompilieren, sodass ich auch vom N900 und SheevaPlug aus Zugriff auf meine Backups haben kann. Die Authentifizierung mit dem Server funktioniert über einen Schlüssel, der sich nach Eingabe des Passworts mit folgendem Befehl generieren lässt:
+
+ tarsnap-keygen --keyfile [pfad-zum-schlüssel] --user [email] --machine [hostname]
+
+Die resultierende Datei ermöglicht ohne zusätzliche Authentifizierung Zugriff auf die Backups und sollte somit sicher aufbewahrt werden und nicht in falsche Hände geraten, denn ohne sie hat man keinen Zugriff mehr auf seine Daten.
+
+Ein neues Backup lässt sich über diesen Befehl anlegen:
+
+ tarsnap -c -f [name-des-backups] [zu-sichernder-pfad]
+
+Jedes weitere Backup geht danach um einiges schneller weil Tarsnap nur veränderte Daten überträgt. Standardmäßig wird dieser Cache unter "/usr/local/tarsnap-cache" und der Schlüssel unter "/root/tarsnap.key" erwartet, dies lässt sich jedoch über entsprechende Parameter steuern - näheres dazu findet sich auf der [Manpage](http://www.tarsnap.com/man-tarsnap.1.html).
+
+Sollte man dann einmal in die nicht wünschenswerte Situation kommen Zugriff auf sein Backup zu benötigen, reicht dieser Befehl um die Daten wiederherzustellen:
+
+ tarsnap -x -f [name-des-backups] [wiederherzustellender-pfad]
+
+Tarsnap kann ich wirklich empfehlen, es hat mich vom [Konzept](http://www.tarsnap.com/design.html) und der Umsetzung her voll überzeugt und ist auf jeden Fall eine ernst zunehmende Alternative zu anderen Backuplösungen in der _Wolke_.
+
+Der Tarsnap Client ist direkt aus den ArchLinux Repositories verfügbar: [tarsnap](http://www.archlinux.org/packages/community/i686/tarsnap/)
+
diff --git a/articles/2011-10-16_kurztipp_n900_retten_ohne_neu_zu_flashen.md b/articles/2011-10-16_kurztipp_n900_retten_ohne_neu_zu_flashen.md
new file mode 100644
index 0000000..f59b709
--- /dev/null
+++ b/articles/2011-10-16_kurztipp_n900_retten_ohne_neu_zu_flashen.md
@@ -0,0 +1,15 @@
+# Kurztipp: N900 retten ohne neu zu flashen
+
+Letztens habe ich es beim herumexperimentieren mit dem [Speed- und Batterypatch](http://talk.maemo.org/showthread.php?t=73315) für das N900 geschafft einen endlosen Reboot zu erzeugen.
+Ich wusste, dass ich zum Korrigieren des Problems nur einen Wert in der Konfiguration des Batterypatch anpassen musste - konnte jedoch aufgrund des andauernden Neustartens nicht auf das rootfs zugreifen.
+
+Erst sah es so aus, als würde ich nicht darum herum kommen das Betriebsystem neu zu flashen und den Großteil meiner Einstellungen neu zu setzen, doch dann stieß ich auf das N900 [rescueOS](http://n900.quitesimple.org/rescueOS/).
+
+Dabei handelt es sich um ein kleines Linux welches mithilfe des normalen [Flashers](http://tablets-dev.nokia.com/maemo-dev-env-downloads.php) direkt in den RAM des N900 kopiert und dort gebootet werden kann. Vom rescueOS aus kann man dann das Root-Dateisystem problemlos einbinden und Probleme beheben. Zum Starten reicht das [initrd Image](http://n900.quitesimple.org/rescueOS/rescueOS-1.0.img) und folgender Befehl:
+
+~~~
+flasher-3.5 -k 2.6.37 -n initrd.img -l -b"rootdelay root=/dev/ram0"
+~~~
+{: .language-sh}
+
+Nähere Informationen zur Verwendung und den Funktionen finden sich in der rescueOS [Dokumentation](http://n900.quitesimple.org/rescueOS/documentation.txt).
diff --git a/articles/2011-11-08_informationen_umformen_mit_xsl.md b/articles/2011-11-08_informationen_umformen_mit_xsl.md
new file mode 100644
index 0000000..7785b83
--- /dev/null
+++ b/articles/2011-11-08_informationen_umformen_mit_xsl.md
@@ -0,0 +1,143 @@
+# Informationen umformen mit XSL
+
+Im Rahmen meiner Vorstandstätigkeit beim KV Konstanz der Piratenpartei betreue ich die Webseite [piraten-konstanz.de](http://piraten-konstanz.de)
+
+Unsere Termine organisieren wir üblicherweise im [Wiki](http://wiki.piratenpartei.de/Kreisverband_Konstanz) - seit der Einführung der neuen KV Seite auf Basis von Wordpress müssen wir diese Termine doppelt pflegen. Da dies kein Zustand ist welcher mir auf Dauer gefällt, habe ich nach Möglichkeiten zum Auslesen der Terminliste im Wiki und dem anschließenden Darstellen in Wordpress gesucht.
+
+Schlussendlich habe ich dann eine [XSLT](http://de.wikipedia.org/wiki/XSLT) geschrieben und rufe diese von einem einfachen [PHP-Script](http://piraten-konstanz.de/wp-content/tool/events_rss.php) auf.
+
+Mit XSL lassen sich XML Dateien in andere Formen bringen. Da Mediawiki mehr oder weniger valides XHTML ausgibt, kann man, nachdem das XHTML mit [Tidy](http://tidy.sourceforge.net) ein wenig aufgeräumt wurde, sehr einfach die [Terminliste](http://wiki.piratenpartei.de/BW:Kreisverband_Konstanz/Termine) extrahieren und gleichzeitig in RSS umformen:
+
+~~~
+
+
+
+
+
+
+
+
+
+ Termine des KV Konstanz
+ http://wiki.piratenpartei.de/BW:Kreisverband_Konstanz/Termine
+ Termine des KV Konstanz
+
+
+
+
+
+
+
+
+
+ am
+
+
+
+
+ um
+
+ Uhr
+
+
+ http://wiki.piratenpartei.de
+
+
+
+
+
+
+
+
+~~~
+{: .language-xsl}
+
+Der Kern dieses XSL ist nicht mehr als ein Template welches auf den [XPATH](http://de.wikipedia.org/wiki/XPATH) zum Finden der Terminliste reagiert. Die For-Each-Schleife iteriert dann durch die Termine und formt diese entsprechend in RSS um.
+Der einzige Knackpunkt kommt daher, dass XHTML kein normales XML ist und somit seinen eigenen Namespace hat. Diesen sollte man im Element `xsl:stylesheet` korrekt angeben, sonst funktioniert nichts. Auch muss im XPATH Ausdruck dann vor jedem Element ein `x:` eingefügt werden um dem XSL Prozessor den Namespace für das jeweilige Element mitzuteilen.
+
+Das leere Template `xsl:template match="text()"` sorgt dafür, dass alle XML-Zweige, die nicht auf ein anderes Template passen, nicht ausgegeben werden.
+`xsl:template match="/"` springt auf das Root-Element der XHTML-Seite an, bildet die RSS Grundstruktur und bindet dann alle anderen Templates ein.
+
+Zum Anpassen des Datums verwende ich - wie auch in diesem Blog - die [date-time.xsl](http://symphony-cms.com/download/xslt-utilities/view/20506/) Transformation.
+
+## Generieren des RSS Feed
+
+Mit der eben beschriebenen XSLT lässt sich jetzt in drei Schritten das fertige RSS generieren:
+
+~~~
+#!/bin/sh
+wget -O termine_wiki.html "http://wiki.piratenpartei.de/BW:Kreisverband_Konstanz/Termine"
+tidy -asxml -asxhtml -O termine_tidy.html termine_wiki.html
+xsltproc --output termine_kvkn.rss --novalid termine_kvkn.xsl termine_tidy.html
+~~~
+{: .language-sh}
+
+In PHP ist das ganze dann zusammen mit sehr einfachem Caching auch direkt auf einem Webserver einsetzbar:
+
+~~~
+define('CACHE_TIME', 6);
+define('CACHE_FILE', 'rss.cache');
+
+header("Content-Type: application/rss+xml");
+
+if ( file_exists(CACHE_FILE) )
+{
+ if ( !filemtime(CACHE_FILE) < time() - CACHE_TIME * 3600 ) {
+ readfile(CACHE_FILE);
+ }
+ else {
+ if ( !generate_rss() ) {
+ readfile(CACHE_FILE);
+ }
+ }
+}
+else {
+ ob_start();
+
+ generate_rss();
+
+ ob_end_flush();
+
+ $cache_file = fopen(CACHE_FILE, 'w');
+ fwrite($cache_file, ob_get_contents());
+ fclose($cache_file);
+}
+
+function generate_rss()
+{
+ $event_page = file_get_contents('http://wiki.piratenpartei.de/BW:Kreisverband_Konstanz/Termine');
+
+ if ($event_page != false)
+ {
+ $config = array('output-xhtml' => true, 'output-xml' => true);
+
+ $tidy = new tidy();
+
+ $xml = new DomDocument();
+ $xml->loadXML( $tidy->repairString($event_page, $config) );
+
+ $xsl = new DomDocument();
+ $xsl->load('termine_kvkn.xsl');
+
+ $xslt = new XsltProcessor();
+ $xslt->importStylesheet($xsl);
+
+ $rss = $xslt->transformToXML($xml);
+ echo $rss;
+
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+~~~
+{: .language-php}
diff --git a/articles/2011-12-28_gedanken_zu_de_zentralen_netzen.md b/articles/2011-12-28_gedanken_zu_de_zentralen_netzen.md
new file mode 100644
index 0000000..6391f4f
--- /dev/null
+++ b/articles/2011-12-28_gedanken_zu_de_zentralen_netzen.md
@@ -0,0 +1,36 @@
+# Gedanken zu (de)-zentralen Netzen
+
+Das Internet war von Anfang an als dezentrales Netzwerk gedacht und ist es auch - bis zu einem bestimmten Grad. Hardwareseitig.
+
+Auf der Seite der Dienste und Anwendungen wird es jedoch zunehmend zentralisierter. Nachrichten werden nicht mehr per Mail sondern über zentrale Plattformen wie Facebook, Google+ etc. ausgetauscht. Kommunikation mit Freunden läuft nicht mehr direkt sondern über zentrale Knotenpunkte und unsere Daten liegen immer mehr nicht lokal auf eigenen Medien verteilt sondern zentralisiert in der Cloud. Rechenleistung wird weniger von eigenen Servern sondern viel mehr von großen Rechnerverbünden on Demand bereitgestellt.
+
+Das alles ist auf den ersten Blick schön und macht vieles einfacher, aber natürlich bringt es wie alles auch Probleme mit sich.
+In diesem Fall ist es ein ziemlich großes Problem.
+
+Dadurch das sich immer mehr Kommunikation, ein Teil der Gesellschaft ins Netz verlagert und neue Dinge auf Basis des Internet geschaffen werden wird die Abhängigkeit von diesen zentralen Dienstleistern immer größer. Für Unternehmen, Regierungen und die Verwertungsindustrie eröffnen sich so Ansatzpunkte zur Kontrolle großer Teile der Information und Kommunikation.
+
+Auswirkungen dieser Möglichkeiten schlagen sich beispielsweise regelmäßig in Gesetzesinitiativen wie dem Jugendmedienschutz-Staatsvertrag oder dem Zugangserschwerungsgesetz nieder. Bis jetzt konnten diese Repressionen und Gefahren immer mehr oder weniger abgewendet werden - doch das muss nicht immer so sein.
+
+Auch aus Sicht des Datenschutzes und beim Blick auf die AGBs diverser Plattformen sollte einem die Gefahr, die übermäßiges Verlagern von Daten in fremde Hände birgt, bewusst werden.
+
+## Alternativen
+
+Es gibt Möglichkeiten das Unterdrücken und Kontrollieren von Kommunikation zumindest so lange das Netz selbst noch verfügbar ist zu erschweren. Ein erster Schritt kann das Ersetzen von Plattformen wie Facebook oder Twitter mit Software wie z.B. [Diaspora](https://joindiaspora.com/) oder [StatusNet](http://status.net/) sein. Daten speichern und Tauschen lässt sich - auch auf Hardware die unter eigener Kontrolle steht - realisieren dank Projekten wie [OwnCloud](http://owncloud.org/). Zum Tauschen von Daten gibt es heute schon weit verbreitete dezentrale Protokolle wie BitTorrent. InstantMessaging ist bequem über [Jabber](http://einfachjabber.de/) möglich. Auch anonymes Nutzen des Internet und anonymes Bereitstellen von Anwendungen im Internet ist mit [Tor](https://www.torproject.org/) machbar.
+
+Diese Dienste lassen sich alle über eigene Server verwenden - wer wie ich einen Schritt weiter gehen möchte kann es auch mit einem Rechner bei sich zu Hause, über die eigene Internetanbindung machen. Hier gibt es dank der zunehmenden Beliebtheit von [ARM-Prozessoren](http://de.wikipedia.org/wiki/ARM-Architektur) einen stetigen Nachschub an Hardware. Beispiele hierfür sind die [CuBox](http://www.solid-run.com/) und die Steckdosenrechner von [Marvell](http://www.marvell.com/solutions/plug-computers/) wie der [SheevaPlug](http://de.wikipedia.org/wiki/SheevaPlug) mit dem ich persönlich über die letzten zwei Jahre sehr gute Erfahrungen gemacht habe.
+Diese Computer vereinen für die üblichen Fälle gut ausreichende Rechenleistung mit einem sehr geringen Stromverbrauch (aktuell etwa 5 Watt) was auch bei ganzjährlichem Betrieb kaum Kosten entstehen lässt.
+
+## Ausblick
+
+Man stelle sich vor jeder hätte einen solchen Server bei sich am Laufen. Dieser Server könnte über eine Diaspora Instanz ein Teil eines globalen, dezentralen, sozialen Netzwerks sein, über einen Jabber-Server Echtzeitkommunikation ermöglichen und über OwnCloud Daten freigeben. Jeder könnte jeden Service anbieten und wenn eine Instanz ausfällt betrifft es nur einen: den Ausgefallenen.
+Ein Projekt das versucht diese Idee zu verwirklichen ist die [Freedom](http://wiki.debian.org/FreedomBox)[Box](http://freedomboxfndn.mirocommunity.org/video/9/elevate-2011).
+
+Zentrale Dienste könnten in diesem Modell natürlich immernoch existieren - jedoch bestünde im besten Fall auch die Möglichkeit
+die Daten vom Dienst zu trennen und so Freiheit zu erlangen. Das [Unhosted-Projekt](http://unhosted.org/) ermöglich das schon jetzt durch
+ein JavaScript-Framework welches es erlaubt Anwendungen zu schreiben die auf einem zentralen Server laufen, die Daten jedoch auf den
+Rechnern der Nutzer selbst speichern.
+
+Eine ähnliche Idee verfolgt auch Opera durch die Integration eines Webservers in den Browser mit [Unite](http://unite.opera.com/applications/). Jedoch ist Unite leider kein direktes Peer2Peer Netzwerk da aller Netzverkehr duch Opera-Proxys geroutet wird und sich das Unternehmen in den AGBs das Recht einräumt Inhalte zu löschen und zu blockieren.
+Prinzipiell ist diese Idee für den normalen Nutzer jedoch vermutlich sogar besser als die vieler lokaler Heimserver: "Ich mache das Fenster für das Internet auf und wenn ich es zu mache bin ich nicht mehr im Internet - auch nicht meine Inhalte.".
+
+Dieser Ansatz in einer Software richtig verpackt, so dass für den Nutzer kein sichtbarer Unterschied besteht und er nicht direkt merkt das er sich seine Dienste selbst zu Verfügung stellt, könnte dem Ziel eines auch aus Sicht der Dienste dezentralen Netzes sicher auf die Sprünge helfen.
diff --git a/articles/2012-01-25_erfahrungen_mit_openslides.md b/articles/2012-01-25_erfahrungen_mit_openslides.md
new file mode 100644
index 0000000..a3fde3a
--- /dev/null
+++ b/articles/2012-01-25_erfahrungen_mit_openslides.md
@@ -0,0 +1,49 @@
+# Erfahrungen mit OpenSlides
+
+Für den letzten Kreisparteitag des [KV Konstanz](http://piraten-konstanz.de) suchte ich nach einer möglichst bequemen Möglichkeit die aktuelle Tagesordnung auf einem Beamer abzubilden. Gestoßen bin ich dabei auf die freie Software [OpenSlides](http://openslides.org/de/index.html).
+
+OpenSlides ist ein auf dem Python-Webframework [Django](https://www.djangoproject.com/) basierendes Präsentationsystem zur Darstellung und Steuerung von Tagesordnungen, Anträgen, Abstimmungen und Wahlen - also ein für die Organisation von Parteitagen sehr gut geeignetes Werkzeug.
+
+Das UI ist dabei in den Administrationsbereich, über den sämtliche Daten eingegeben werden können, und eine Beamer-Ansicht geteilt. Beide dieser Komponenten laufen in einem gewöhnlichen Webbrowser. Das Aussehen lässt sich also einfach durch Modifikation der Templates und der CSS-Formatierungen an die eigenen Wünsche anpassen.
+
+
+
+Nachdem ich anfangs alle Wahlen, bekannten Teilnehmer und Anträge in das Redaktionsystem eingespiesen hatte, ließ sich am Parteitag selbst dann mit wenigen Mausklicks eine ansprechende Präsentation des aktuellen Themas erzeugen.
+Wahlergebnisse waren ebenso wie die Annahme oder Ablehnung eines Antrags über entsprechende Formulare schnell eingepflegt und dargestellt.
+Sehr gefallen hat mir im Vorfeld auch die Möglichkeit der Generierung von Antragsbüchern als PDF.
+
+
+
+Der Funktionsumfang von OpenSlides geht jedoch über die bloße Darstellung der TO auf einem Beamer hinaus. So kann wenn gewünscht jeder Teilnehmer über sein eigenes Endgerät auf das Webinterface zugreifen und als Deligierter an der Versammlung teilnehmen - also Abstimmen, Wählen und Anträge stellen.
+Theoretisch ermöglicht es diese Software also - bei entsprechender Authentifizierung - die Durchführung von dezentralen Versammlungen. Aber auch wenn dies z.B. aufgrund von zur Nachvollziehbarkeit nötiger Klarnamenspflicht nicht in Frage kommt, ergibt sich doch so für die Teilnehmer immerhin die Möglichkeit den Ablauf auf einem eigenen Gerät nachzuverfolgen.
+
+Der einzige Punkt der mich wirklich störte war die fehlende Anzeige von Wahlergebnissen der Teilnehmer die eine Wahl verloren hatten. Die jeweilige Stimmenzahl war im Frontend erst sichtbar nachdem der entsprechende Kandidat als Sieger markiert worden war.
+Doch auch dieses Problem ließ sich - OpenSource sei Dank - schnell über manuelles Eingreifen im Quelltext korrigieren:
+
+~~~
+--- /home/adrian/Downloads/original_views.py
++++ /opt/hg.openslides.org/openslides/agenda/views.py
+@@ -132,14 +132,11 @@
+ for poll in assignment.poll_set.all():
+ if poll.published:
+ if candidate in poll.options_values:
+- if assignment.is_elected(candidate):
+- option = Option.objects.filter(poll=poll).filter(user=candidate)[0]
+- if poll.optiondecision:
+- tmplist[1].append([option.yes, option.no, option.undesided])
+- else:
+- tmplist[1].append(option.yes)
++ option = Option.objects.filter(poll=poll).filter(user=candidate)[0]
++ if poll.optiondecision:
++ tmplist[1].append([option.yes, option.no, option.undesided])
+ else:
+- tmplist[1].append("")
++ tmplist[1].append(option.yes)
+ else:
+ tmplist[1].append("-")
+ votes.append(tmplist)
+~~~
+{: .language-diff}
+
+OpenSlides ist wirklich ein tolles Stück Software und ich kann nur jedem der vor der Aufgabe steht eine Versammlung zu organisieren, sei es die eines Vereins oder wie in meinem Fall die einer Partei, empfehlen sich es einmal näher anzusehen.
+Weitere Angaben zur Installation und Konfiguration finden sich auf der [Webpräsenz](http://openslides.org/de/index.html) und im [Quell-Archiv](http://openslides.org/download/openslides-1.1.tar.gz).
diff --git a/articles/2012-04-07_mobile_endgeraete_und_freie_software.md b/articles/2012-04-07_mobile_endgeraete_und_freie_software.md
new file mode 100644
index 0000000..6eacd67
--- /dev/null
+++ b/articles/2012-04-07_mobile_endgeraete_und_freie_software.md
@@ -0,0 +1,58 @@
+# Mobile Endgeräte und freie Software
+
+Wenn man an Smartphones und mobile Endgeräte im Allgemeinen denkt fallen einem wohl zuerst Begriffe wie iPhone, iPad und Android ein. Mit diesen Geräten lassen sich tolle Sachen anstellen - ich kann "Apps" installieren, dazu beitragen die 200000 Jahre, die die Menschheit mit Angry Birds [verbracht](http://www.rovio.com/en/news/blog/95/angry-birds-smashes-half-a-billion-downloads/) hat, weiter zu erhöhen und mein Adressbuch unverschlüsselt per "WhatsApp" [veräußern](http://blog.posativ.org/2011/wieviel-sind-meine-telefonnummern-wert-9-cent/).
+Doch was ist wenn man mehr oder anderes machen will, wenn man ein Gerät für mehr nutzen will als für das was die Hersteller erlauben? Wenn ich mit der Hardware, für die ich Geld bezahlt habe, die mir gehört, auch machen können kann was ich will?
+
+In diesem Blog-Artikel möchte ich einen Überblick über die verschiedenen Hardware-Plattformen, offene Betriebsysteme und geeignete Nutzeroberflächen bieten.
+Als offen bezeichne ich Geräte die es mir ermöglichen einen eigenen Linux-Kernel auszuführen und deren Hardware entsprechend gut unterstützt wird.
+
+An Hardware gibt es theoretisch eine sehr große Auswahl. Eine große Mehrheit der Smartphones und Tablets setzt auf ARM Prozessoren und auf diesen läuft meist auch ein Linux Kernel. Ausgenommen ist hier üblicherweise Apple, da hier von Apple selbst angepasste ARM Designs verwendet werden, für die eine Linux-Portierung aufgrund von schlichtem Nichtvorhandenseins von Dokumentation oft nicht möglich ist.
+Geräte die auf Android als Betriebssystem setzen bieten natürlich prinzipiell erst einmal alle die Möglichkeit auch ein offenes Linux einzusetzen - Problem ist hier der Hang vieler Hersteller zum Sperren der Bootloader und Blockieren von unsigniertem Code. Ein Smartphone das ich erst "Jail-Breaken" muss um vollen Zugriff zu erlangen ist für mich nicht das Wahre. Hinzu kommt, dass die einzigen sinnvoll einsetzbaren Betriebsystem-Alternativen wieder nur Android-Derivate sind die mich alleinschon durch das fehlen eines X-Servers, der Abstinenz der GNU Core-Tools und einer entsprechenden nativen Konsole zu sehr einschränken. Android läuft zwar auf einem Lin