<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:soup="http://www.soup.io/rss" xmlns:media="http://search.yahoo.com/mrss/" xmlns:xCal="urn:ietf:params:xml:ns:xcal" version="2.0">
  <channel>
    <title>log.n0q.org</title>
    <link>http://log.n0q.org/</link>
    <image>
      <title>log.n0q.org</title>
      <link>http://log.n0q.org/</link>
      <url>http://e.asset.soup.io/asset/1628/6798_7e5c.png</url>
      <width>128</width>
      <height>128</height>
    </image>
    <description>Blog: http://noqqe.de Jabber: noqqe@jabber.ccc.de</description>
<item><enclosure type="image/jpeg" length="0" url="http://7.asset.soup.io/asset/3157/2375_22db_400.jpeg"/>
<title>(Image)</title>
<soup:attributes>{"tags":[],"type":"image","source":null,"body":null,"url":"http://7.asset.soup.io/asset/3157/2375_22db.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href=""&gt;&lt;img alt="2375_22db_400" height="264" src="http://7.asset.soup.io/asset/3157/2375_22db_400.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user431771" &gt;&lt;a class="" href="http://nukeforce.soup.io/post/252206517/Image"&gt;&lt;span class="name"&gt;nukeforce&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user148478" &gt;&lt;a class="" href="http://videogames.soup.io/post/252206629/Image"&gt;&lt;span class="name"&gt;videogames&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Mon, 07 May 2012 18:57:52 GMT</pubDate><link>http://log.n0q.org/post/252226239/Image</link><guid isPermaLink="false">urn:www-soup-io:1:252226239</guid><category domain="contenttype">image</category></item>
<item><title>Deadly 30 unter Debian Squeeze 64bit</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2012/05/06/deadly-30-unter-debian-squeeze-64bit/\"\u003EDeadly 30 unter Debian Squeeze 64bit\u003C/a\u003E","source":"http://noqqe.de/blog/2012/05/06/deadly-30-unter-debian-squeeze-64bit/","body":"\u003Cp\u003EGerade von \u003Ca href=\"http://www.deadly30.com/index.php\"\u003EDeadly 30\u003C/a\u003E gelesen. Linux Version\nist fertig. Hurra!\u003C/p\u003E\n\n\u003Cp\u003EAls ich den Trailer gesehen habe musste ich sofort an die \u003Ca href=\"http://de.wikipedia.org/wiki/Metal_Slug\"\u003EMetal Slug\nReihe\u003C/a\u003E denken, die ich total mag.\u003C/p\u003E\n\n\u003Cp\u003EEgal, es ist Sonntag Abend und hatte die 4 Euro \u00fcbrig. Ich hatte aber bereits\nerwartet, dass es nicht nur auf ein \u003Ccode\u003E./deadly 30\u003C/code\u003E hinauslaufen w\u00fcrde. Damit lag\nich auch richtig.\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E$ ./Deadly 30\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E./Deadly 30: error while loading shared libraries: libgstreamer-0.10.so.0:\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Ecannot open shared object file: No such file or directory\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EMh. Da ich nicht zwischen 32 und 64bit w\u00e4hlen durfte wahrscheinlich 32bit?\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E$ file Deadly 30                                                                                                                 \n\u003C/span\u003E\u003Cspan class=\"line\"\u003EDeadly 30: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Elinked (uses shared libs), for GNU/Linux 2.6.15, stripped\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EAlso die n\u00f6tigen 32bit Libraries runterladen und einbauen.\u003C/p\u003E\n\n\u003Ch2\u003E1. /usr/lib32/ Backup erstellen\u003C/h2\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E$ tar cfvz $HOME/usr-lib32.tar.gz /usr/lib32\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Ch2\u003E2. libgstreamer installieren\u003C/h2\u003E\n\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\"http://packages.debian.org/squeeze/libgstreamer0.10-0\"\u003Ehttp://packages.debian.org/squeeze/libgstreamer0.10-0\u003C/a\u003E\u003C/li\u003E\n\u003C/ul\u003E\n\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E5\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E$ cd /tmp\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E$ wget http://ftp.de.debian.org/debian/pool/main/g/gstreamer0.10/libgstreamer0.10-0_0.10.30-1_i386.deb\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E$ ar -x libgstreamer0.10-0_0.10.30-1_i386.deb\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E$ tar xfvz data.tar.gz\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E$ sudo cp -av /tmp/usr/lib/* /usr/lib32/\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Ch2\u003E3. libgstreamer-plugins installieren\u003C/h2\u003E\n\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\"http://packages.debian.org/squeeze/libgstreamer-plugins-base0.10-0\"\u003Ehttp://packages.debian.org/squeeze/libgstreamer-plugins-base0.10-0\u003C/a\u003E\u003C/li\u003E\n\u003C/ul\u003E\n\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E5\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E$ cd /tmp\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E$ wget http://ftp.de.debian.org/debian/pool/main/g/gst-plugins-base0.10/libgstreamer-plugins-base0.10-0_0.10.30-1_i386.deb \n\u003C/span\u003E\u003Cspan class=\"line\"\u003E$ ar -x libgstreamer-plugins-base0.10-0_0.10.30-1_i386.deb \n\u003C/span\u003E\u003Cspan class=\"line\"\u003E$ tar xfvz data.tar.gz\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E$ sudo cp -av /tmp/usr/lib/* /usr/lib32/\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EDas ist zwar alles immer total unsch\u00f6n, aber es funktioniert. Au\u00dferdem, was tut\nman nicht alles f\u00fcr ein bisschen 2D Shooter und Zombies?\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Gerade von &lt;a href="http://www.deadly30.com/index.php"&gt;Deadly 30&lt;/a&gt; gelesen. Linux Version
ist fertig. Hurra!&lt;/p&gt;

&lt;p&gt;Als ich den Trailer gesehen habe musste ich sofort an die &lt;a href="http://de.wikipedia.org/wiki/Metal_Slug"&gt;Metal Slug
Reihe&lt;/a&gt; denken, die ich total mag.&lt;/p&gt;

&lt;p&gt;Egal, es ist Sonntag Abend und hatte die 4 Euro &#252;brig. Ich hatte aber bereits
erwartet, dass es nicht nur auf ein &lt;code&gt;./deadly 30&lt;/code&gt; hinauslaufen w&#252;rde. Damit lag
ich auch richtig.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;$ ./Deadly 30
&lt;/span&gt;&lt;span class="line"&gt;./Deadly 30: error while loading shared libraries: libgstreamer-0.10.so.0:
&lt;/span&gt;&lt;span class="line"&gt;cannot open shared object file: No such file or directory&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Mh. Da ich nicht zwischen 32 und 64bit w&#228;hlen durfte wahrscheinlich 32bit?&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;$ file Deadly 30                                                                                                                 
&lt;/span&gt;&lt;span class="line"&gt;Deadly 30: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically
&lt;/span&gt;&lt;span class="line"&gt;linked (uses shared libs), for GNU/Linux 2.6.15, stripped&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Also die n&#246;tigen 32bit Libraries runterladen und einbauen.&lt;/p&gt;

&lt;h2&gt;1. /usr/lib32/ Backup erstellen&lt;/h2&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;$ tar cfvz $HOME/usr-lib32.tar.gz /usr/lib32&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;2. libgstreamer installieren&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://packages.debian.org/squeeze/libgstreamer0.10-0"&gt;http://packages.debian.org/squeeze/libgstreamer0.10-0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;$ cd /tmp
&lt;/span&gt;&lt;span class="line"&gt;$ wget http://ftp.de.debian.org/debian/pool/main/g/gstreamer0.10/libgstreamer0.10-0_0.10.30-1_i386.deb
&lt;/span&gt;&lt;span class="line"&gt;$ ar -x libgstreamer0.10-0_0.10.30-1_i386.deb
&lt;/span&gt;&lt;span class="line"&gt;$ tar xfvz data.tar.gz
&lt;/span&gt;&lt;span class="line"&gt;$ sudo cp -av /tmp/usr/lib/* /usr/lib32/&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;3. libgstreamer-plugins installieren&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://packages.debian.org/squeeze/libgstreamer-plugins-base0.10-0"&gt;http://packages.debian.org/squeeze/libgstreamer-plugins-base0.10-0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;$ cd /tmp
&lt;/span&gt;&lt;span class="line"&gt;$ wget http://ftp.de.debian.org/debian/pool/main/g/gst-plugins-base0.10/libgstreamer-plugins-base0.10-0_0.10.30-1_i386.deb 
&lt;/span&gt;&lt;span class="line"&gt;$ ar -x libgstreamer-plugins-base0.10-0_0.10.30-1_i386.deb 
&lt;/span&gt;&lt;span class="line"&gt;$ tar xfvz data.tar.gz
&lt;/span&gt;&lt;span class="line"&gt;$ sudo cp -av /tmp/usr/lib/* /usr/lib32/&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Das ist zwar alles immer total unsch&#246;n, aber es funktioniert. Au&#223;erdem, was tut
man nicht alles f&#252;r ein bisschen 2D Shooter und Zombies?&lt;/p&gt;</description><pubDate>Sun, 06 May 2012 19:51:00 GMT</pubDate><link>http://log.n0q.org/post/252048499/Deadly-30-unter-Debian-Squeeze-64bit</link><guid isPermaLink="false">urn:www-soup-io:1:252048499</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>Ext Filesystem Checks vorhersagen</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2012/05/05/ext-filesystem-checks-vorhersagen/\"\u003EExt Filesystem Checks vorhersagen\u003C/a\u003E","source":"http://noqqe.de/blog/2012/05/05/ext-filesystem-checks-vorhersagen/","body":"\u003Cp\u003EKernel Updates am Server seiner Wahl einspielen und dann\u2026warten. Warten auf die erl\u00f6senden\nICMP Antworten. Oder bootet die Kiste doch nicht? Alles dauert verd\u00e4chtig lange. Auch nach 10 Minuten noch nichts.\nGerade wenn man die Zugangsdaten f\u00fcrs DRAC/ILO rausgekramt hat zeigt sich: Filesystem Check.\u003C/p\u003E\n\n\u003Cp\u003EExtended Filesystems machen an den folgenden 2 Punkten fest wann fsck\u2019s passieren:\u003C/p\u003E\n\n\u003Cul\u003E\n\u003Cli\u003EMaximale Anzahl von Mounts\u003C/li\u003E\n\u003Cli\u003EZeitliche Abst\u00e4nde zwischen den Routine Checks\u003C/li\u003E\n\u003C/ul\u003E\n\n\n\u003Cp\u003EDie Informationen stehen im Superblock einer Parition. Das Tool dumpe2fs stellt diese zur Verf\u00fcgung:\u003C/p\u003E\n\n\u003Cpre\u003E\u003Ccode\u003E$ dumpe2fs -h /dev/sda1 \n\u003C/code\u003E\u003C/pre\u003E\n\n\u003Cp\u003EDas ganze hab ich dann verskriptet. Es \u201cscanned\u201d alle gemounteten ext Parititonen und warnt einen, falls die\nmaximalen Mounts oder die zyklischen Checks anstehen.\u003C/p\u003E\n\n\u003Cdiv\u003E\n\u003Cpre\u003E\u003Ccode\u003E#!/bin/bash\n# ext-verify: Verfiy if max mount count or cyclic fsck \n# on ext2,ext3,ext4 filesystems has been reached. \n# Copyright: (C) 2011 Florian Baumann \u0026lt;florian.baumann@noris.net\u0026gt;\n# License: GPL-3 \u0026lt;http://www.gnu.org/licenses/gpl-3.0.txt\u0026gt;\n# Date: Tuesday 2012-05-04\n\n# Configuration\nDUMPE2FS=$(which dumpe2fs)\nDUMPOPTS=\"-h\"\nWARNC=0\n\n# Security \nif [ -z \"$DUMPE2FS\" ]; then\n    if [ ! -x $DUMPE2FS ]; then\n        echo \"ERR: Could not find your dumpe2fs\"\n        echo \"ERR: Are you root?\"\n        exit 1\n    fi\nfi\n\n# Parsing functions\nfunction get_value () {\n    LANG=C $DUMPE2FS $DUMPOPTS $HDD 2\u0026gt;/dev/null | grep \"$1\" | sed \"s#$1s*##\" | tail -1\n    if [ $? -gt 0 ]; then echo \"ERR: Could not find value $1\" ; fi\n}\nfunction convert_date () {\n    if [ -n \"$1\" ]; then\n        date -d \"$1\" \"+%s\"\n    fi\n}\n\n# Scan Mode\nif [ -z \"$*\" ]; then\n    for x in $(mount | grep ext | awk '{print $1}'); do\n        HDD=$x\n        MOUNTED=$(get_value \"Mount count:\")\n        MAXMOUNT=$(get_value \"Maximum mount count:\")\n        NEXT=$(get_value \"Next check after:\")\n        DATENOW=\"$(date +%s)\"\n        DATENEXT=$(convert_date \"$NEXT\")\n\n        if [ ! \"$MAXMOUNT\" == \"-1\" ]; then\n                if [ $MOUNTED -ge $MAXMOUNT ]; then\n                        echo \"WARNING: Max mount count on $HDD has been reached. ($MOUNTED/$MAXMOUNT)\"  \n                        ((WARNC++))\n                fi\n        fi\n\n        if [ -n \"$DATENEXT\" ]; then\n                if [ $DATENOW -ge $DATENEXT ]; then\n                        echo \"WARNING: $HDD has reached the next periodically filesystemcheck. ($NEXT)\"\n                        ((WARNC++))\n                fi\n        fi\n\n        if [ $WARNC -gt 0 ]; then\n            echo \"RESULT: A fsck will be executed at the next reboot for $HDD.\"  \n        else\n            echo \"RESULT: Everything's fine on $HDD.\"\n        fi\n    done\nfi\n\nexit $WARNC\n\u003C/code\u003E\u003C/pre\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EDas sieht dann unter Umst\u00e4nden so aus:\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003EWARNING: Max mount count on /dev/sda1 has been reached. (29/29)\n\u003C/span\u003E\u003Cspan class=\"line\"\u003EWARNING: /dev/sda1 has reached the next periodically filesystemcheck. (Sa Apr 7 13:37:58 2012)\n\u003C/span\u003E\u003Cspan class=\"line\"\u003ERESULT: A fsck will be executed at the next reboot for /dev/sda1.\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003ENat\u00fcrlich f\u00fcr jede gefundene Partition. Um das jetzt noch am besten irgendwie zu\nautomatisieren hab ich mich entschieden das in \u003Ccode\u003Eapt\u003C/code\u003E zu integrieren.\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E$ vim /etc/apt/apt.conf.d/09extverfiy\n\u003C/span\u003E\u003Cspan class=\"line\"\u003EDPkg::Pre-Install-Pkgs   { \"if [ -x /usr/local/bin/ext-verify.sh ]; then echo 'Verifying ext Filesystems' ; /usr/local/bin/ext-verify.sh ; fi\"; };\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EBei jedem apt-get/aptitude wird das nun ausgef\u00fchrt.\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E5\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E6\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E7\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E8\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E9\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E10\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E11\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E12\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E$ aptitude install whois\n\u003C/span\u003E\u003Cspan class=\"line\"\u003EDie folgenden NEUEN Pakete werden zus\u00e4tzlich installiert:\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E  whois\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E0 Pakete aktualisiert, 1 zus\u00e4tzlich installiert, 0 werden entfernt und 0 nicht aktualisiert.\n\u003C/span\u003E\u003Cspan class=\"line\"\u003EMuss 0 B/64,9 kB an Archiven herunterladen. Nach dem Entpacken werden 406 kB zus\u00e4tzlich belegt sein.\n\u003C/span\u003E\u003Cspan class=\"line\"\u003EVerifying ext Filesystems\n\u003C/span\u003E\u003Cspan class=\"line\"\u003ERESULT: Everything's fine on /dev/sda1.\n\u003C/span\u003E\u003Cspan class=\"line\"\u003EVormals abgew\u00e4hltes Paket whois wird gew\u00e4hlt.\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E(Lese Datenbank ... 48680 Dateien und Verzeichnisse sind derzeit installiert.)\n\u003C/span\u003E\u003Cspan class=\"line\"\u003EEntpacken von whois (aus .../whois_5.0.10_amd64.deb) ...\n\u003C/span\u003E\u003Cspan class=\"line\"\u003ETrigger f\u00fcr man-db werden verarbeitet ...\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Ewhois (5.0.10) wird eingerichtet ...\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E"}</soup:attributes>
<description>&lt;p&gt;Kernel Updates am Server seiner Wahl einspielen und dann&#8230;warten. Warten auf die erl&#246;senden
ICMP Antworten. Oder bootet die Kiste doch nicht? Alles dauert verd&#228;chtig lange. Auch nach 10 Minuten noch nichts.
Gerade wenn man die Zugangsdaten f&#252;rs DRAC/ILO rausgekramt hat zeigt sich: Filesystem Check.&lt;/p&gt;

&lt;p&gt;Extended Filesystems machen an den folgenden 2 Punkten fest wann fsck&#8217;s passieren:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maximale Anzahl von Mounts&lt;/li&gt;
&lt;li&gt;Zeitliche Abst&#228;nde zwischen den Routine Checks&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Die Informationen stehen im Superblock einer Parition. Das Tool dumpe2fs stellt diese zur Verf&#252;gung:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ dumpe2fs -h /dev/sda1 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das ganze hab ich dann verskriptet. Es &#8220;scanned&#8221; alle gemounteten ext Parititonen und warnt einen, falls die
maximalen Mounts oder die zyklischen Checks anstehen.&lt;/p&gt;

&lt;div&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# ext-verify: Verfiy if max mount count or cyclic fsck 
# on ext2,ext3,ext4 filesystems has been reached. 
# Copyright: (C) 2011 Florian Baumann &amp;lt;florian.baumann@noris.net&amp;gt;
# License: GPL-3 &amp;lt;http://www.gnu.org/licenses/gpl-3.0.txt&amp;gt;
# Date: Tuesday 2012-05-04

# Configuration
DUMPE2FS=$(which dumpe2fs)
DUMPOPTS="-h"
WARNC=0

# Security 
if [ -z "$DUMPE2FS" ]; then
    if [ ! -x $DUMPE2FS ]; then
        echo "ERR: Could not find your dumpe2fs"
        echo "ERR: Are you root?"
        exit 1
    fi
fi

# Parsing functions
function get_value () {
    LANG=C $DUMPE2FS $DUMPOPTS $HDD 2&amp;gt;/dev/null | grep "$1" | sed "s#$1s*##" | tail -1
    if [ $? -gt 0 ]; then echo "ERR: Could not find value $1" ; fi
}
function convert_date () {
    if [ -n "$1" ]; then
        date -d "$1" "+%s"
    fi
}

# Scan Mode
if [ -z "$*" ]; then
    for x in $(mount | grep ext | awk '{print $1}'); do
        HDD=$x
        MOUNTED=$(get_value "Mount count:")
        MAXMOUNT=$(get_value "Maximum mount count:")
        NEXT=$(get_value "Next check after:")
        DATENOW="$(date +%s)"
        DATENEXT=$(convert_date "$NEXT")

        if [ ! "$MAXMOUNT" == "-1" ]; then
                if [ $MOUNTED -ge $MAXMOUNT ]; then
                        echo "WARNING: Max mount count on $HDD has been reached. ($MOUNTED/$MAXMOUNT)"  
                        ((WARNC++))
                fi
        fi

        if [ -n "$DATENEXT" ]; then
                if [ $DATENOW -ge $DATENEXT ]; then
                        echo "WARNING: $HDD has reached the next periodically filesystemcheck. ($NEXT)"
                        ((WARNC++))
                fi
        fi

        if [ $WARNC -gt 0 ]; then
            echo "RESULT: A fsck will be executed at the next reboot for $HDD."  
        else
            echo "RESULT: Everything's fine on $HDD."
        fi
    done
fi

exit $WARNC
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Das sieht dann unter Umst&#228;nden so aus:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;WARNING: Max mount count on /dev/sda1 has been reached. (29/29)
&lt;/span&gt;&lt;span class="line"&gt;WARNING: /dev/sda1 has reached the next periodically filesystemcheck. (Sa Apr 7 13:37:58 2012)
&lt;/span&gt;&lt;span class="line"&gt;RESULT: A fsck will be executed at the next reboot for /dev/sda1.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Nat&#252;rlich f&#252;r jede gefundene Partition. Um das jetzt noch am besten irgendwie zu
automatisieren hab ich mich entschieden das in &lt;code&gt;apt&lt;/code&gt; zu integrieren.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;$ vim /etc/apt/apt.conf.d/09extverfiy
&lt;/span&gt;&lt;span class="line"&gt;DPkg::Pre-Install-Pkgs   { "if [ -x /usr/local/bin/ext-verify.sh ]; then echo 'Verifying ext Filesystems' ; /usr/local/bin/ext-verify.sh ; fi"; };&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Bei jedem apt-get/aptitude wird das nun ausgef&#252;hrt.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;span class="line-number"&gt;6&lt;/span&gt;
&lt;span class="line-number"&gt;7&lt;/span&gt;
&lt;span class="line-number"&gt;8&lt;/span&gt;
&lt;span class="line-number"&gt;9&lt;/span&gt;
&lt;span class="line-number"&gt;10&lt;/span&gt;
&lt;span class="line-number"&gt;11&lt;/span&gt;
&lt;span class="line-number"&gt;12&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;$ aptitude install whois
&lt;/span&gt;&lt;span class="line"&gt;Die folgenden NEUEN Pakete werden zus&#228;tzlich installiert:
&lt;/span&gt;&lt;span class="line"&gt;  whois
&lt;/span&gt;&lt;span class="line"&gt;0 Pakete aktualisiert, 1 zus&#228;tzlich installiert, 0 werden entfernt und 0 nicht aktualisiert.
&lt;/span&gt;&lt;span class="line"&gt;Muss 0 B/64,9 kB an Archiven herunterladen. Nach dem Entpacken werden 406 kB zus&#228;tzlich belegt sein.
&lt;/span&gt;&lt;span class="line"&gt;Verifying ext Filesystems
&lt;/span&gt;&lt;span class="line"&gt;RESULT: Everything's fine on /dev/sda1.
&lt;/span&gt;&lt;span class="line"&gt;Vormals abgew&#228;hltes Paket whois wird gew&#228;hlt.
&lt;/span&gt;&lt;span class="line"&gt;(Lese Datenbank ... 48680 Dateien und Verzeichnisse sind derzeit installiert.)
&lt;/span&gt;&lt;span class="line"&gt;Entpacken von whois (aus .../whois_5.0.10_amd64.deb) ...
&lt;/span&gt;&lt;span class="line"&gt;Trigger f&#252;r man-db werden verarbeitet ...
&lt;/span&gt;&lt;span class="line"&gt;whois (5.0.10) wird eingerichtet ...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><pubDate>Sat, 05 May 2012 09:33:00 GMT</pubDate><link>http://log.n0q.org/post/251784459/Ext-Filesystem-Checks-vorhersagen</link><guid isPermaLink="false">urn:www-soup-io:1:251784459</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>Das CAP Theorem</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2012/04/29/das-cap-theorem/\"\u003EDas CAP Theorem\u003C/a\u003E","source":"http://noqqe.de/blog/2012/04/29/das-cap-theorem/","body":"\u003Cp\u003EDas CAP Theorem ist mir das erste mal wirklich begegnet im Podcast\n\u003Ca href=\"http://www.radiotux.de/index.php?/archives/5497-Binaergewitter-1-NoSQL.html\"\u003EBin\u00e4rgewitter #1\nNoSQL\u003C/a\u003E\nin dem es kurz und knackig an einfachen Beispielen gut erkl\u00e4rt wurde.\u003C/p\u003E\n\n\u003Cp\u003E\u003Cimg src=\"http://noqqe.de/uploads/2012/04/cap-theorem.png\" /\u003E\u003C/p\u003E\n\n\u003Cp\u003EIm Grunde hat sich schon kurz nach der Jahrtausendwende ein Professor in\nBerkeley Gedanken gemacht was man von einem Datenbank System erwarten kann.\nIm wesentlichen gehts um 3 Faktoren, die aber niemals alle zugleich erf\u00fcllt\nwerden k\u00f6nnen.\u003C/p\u003E\n\n\u003Cblockquote\u003E\u003Cp\u003EKonsistenz (C): Alle Knoten sehen zur selben Zeit dieselben Daten.\u003Cbr /\u003EVerf\u00fcgbarkeit (A): Alle Anfragen an das System werden stets beantwortet.\u003Cbr /\u003EPartitionstoleranz (P): Das System arbeitet auch bei Verlust von Nachrichten, einzelner Netzknoten oder Partition des Netzes weiter.\u003C/p\u003E\u003C/blockquote\u003E\n\n\n\u003Cp\u003EWill man sich mal anschauen, wenn man Datenbanken betreut.\u003C/p\u003E\n\n\u003Cp\u003ELinks\u003C/p\u003E\n\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\"http://de.wikipedia.org/wiki/CAP-Theorem\"\u003ECAP Theorem - Wikipedia Deutsch\u003C/a\u003E\u003C/li\u003E\n\u003Cli\u003E\u003Ca href=\"http://en.wikipedia.org/wiki/CAP-Theory\"\u003ECAP Theory - Wikipedia Englisch\u003C/a\u003E\u003C/li\u003E\n\u003C/ul\u003E"}</soup:attributes>
<description>&lt;p&gt;Das CAP Theorem ist mir das erste mal wirklich begegnet im Podcast
&lt;a href="http://www.radiotux.de/index.php?/archives/5497-Binaergewitter-1-NoSQL.html"&gt;Bin&#228;rgewitter #1
NoSQL&lt;/a&gt;
in dem es kurz und knackig an einfachen Beispielen gut erkl&#228;rt wurde.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://noqqe.de/uploads/2012/04/cap-theorem.png" /&gt;&lt;/p&gt;

&lt;p&gt;Im Grunde hat sich schon kurz nach der Jahrtausendwende ein Professor in
Berkeley Gedanken gemacht was man von einem Datenbank System erwarten kann.
Im wesentlichen gehts um 3 Faktoren, die aber niemals alle zugleich erf&#252;llt
werden k&#246;nnen.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Konsistenz (C): Alle Knoten sehen zur selben Zeit dieselben Daten.&lt;br /&gt;Verf&#252;gbarkeit (A): Alle Anfragen an das System werden stets beantwortet.&lt;br /&gt;Partitionstoleranz (P): Das System arbeitet auch bei Verlust von Nachrichten, einzelner Netzknoten oder Partition des Netzes weiter.&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Will man sich mal anschauen, wenn man Datenbanken betreut.&lt;/p&gt;

&lt;p&gt;Links&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://de.wikipedia.org/wiki/CAP-Theorem"&gt;CAP Theorem - Wikipedia Deutsch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/CAP-Theory"&gt;CAP Theory - Wikipedia Englisch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Sun, 29 Apr 2012 10:22:00 GMT</pubDate><link>http://log.n0q.org/post/250568403/Das-CAP-Theorem</link><guid isPermaLink="false">urn:www-soup-io:1:250568403</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>Keyboard Codes unter Debian mit xfce4.8</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2012/04/20/keyboard-codes-unter-debian-mit-xfce4-dot-8/\"\u003EKeyboard Codes unter Debian mit xfce4.8\u003C/a\u003E","source":"http://noqqe.de/blog/2012/04/20/keyboard-codes-unter-debian-mit-xfce4-dot-8/","body":"\u003Cp\u003EZuerstmal sei gesagt, dass ich sowieso schon sehr begeistert bin wie viele von\nden Spezialtasten auf dem Thinkpad schon Out-of-the-Box unter Debian\nfunktionieren. Trotzdem gab es noch ein paar die das nicht Taten oder zumindest\nnicht mit der Software funktioniert hatte bei der ich es brauche.\u003C/p\u003E\n\n\u003Ch2\u003EKeyboard Signale mit xev abfangen\u003C/h2\u003E\n\n\u003Cp\u003EErstmal gehts darum rauszufinden was f\u00fcr lustige Tasten ich eigentlich gerade\ndr\u00fccke. Hier gibts verschiedene Spielereien mit dem Tool xev und sed:\u003C/p\u003E\n\n\u003Cpre\u003E\u003Ccode\u003E$ xev | sed -n 's/^.*keycode *([0-9]+).*$/keycode * /p' \nkeycode 36 \nkeycode 8 \nkeycode 160 \nkeycode 160 \n\u003C/code\u003E\u003C/pre\u003E\n\n\u003Ch2\u003EXKeysymDB und benutzerdefiniertes Mapping\u003C/h2\u003E\n\n\u003Cp\u003ENachdem man weiss, was f\u00fcr KeyCodes man gerade dr\u00fcckt kann man damit auch weiter\narbeiten. Diese KeyCodes m\u00fcssen nun Keysyms zugeordnet werden.\nDer X11 bringt hier automatisch eine kleine \u00dcbersicht mit die es sich\nlohnt mal anzusehen:\u003C/p\u003E\n\n\u003Cpre\u003E\u003Ccode\u003E$ less /usr/share/X11/XKeysymDB\n\u003C/code\u003E\u003C/pre\u003E\n\n\u003Cp\u003EObacht: Man kann keine neuen Keysyms definieren. Man muss Keysyms aus dem DB\nFile benutzen um diese dann auf den Keycode zu mappen. Dieses Mapping\nfindet folgendem File statt:\u003C/p\u003E\n\n\u003Cpre\u003E\u003Ccode\u003E$ vim ~/.Xmodmap \nkeycode 160 = hpModelock1 \n\u003C/code\u003E\u003C/pre\u003E\n\n\u003Cp\u003EAnschliessend kann man die Xmodmap neu laden:\u003C/p\u003E\n\n\u003Cpre\u003E\u003Ccode\u003E$ xmodmap ~/.Xmodmap \n\u003C/code\u003E\u003C/pre\u003E\n\n\u003Ch2\u003Exfce Keymapping\u003C/h2\u003E\n\n\u003Cp\u003EDer eigentlich spannende Teil ist, die Shortcuts jetzt mit xfce zu verkn\u00fcpfen,\ndamit man bei Bet\u00e4tigung einen Befehl seiner Wahl ausf\u00fchren kann. In xfce gibt\nes eine kleine gui im Settings Manager (xfce4-settings-manager) mit der man\nsoetwas einrichten kann. Zumindest theoretisch. Leider k\u00f6nnen hier nur\nTastenkombinationen(!) hinterlegt werden. Keine Keysyms.\u003C/p\u003E\n\n\u003Cp\u003EAber das macht nichts. Wie so ziemlich alles gibts ein xml File in dem die Werte\nstehen:\u003C/p\u003E\n\n\u003Cpre\u003E\u003Ccode\u003E$ vim .config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml \n\u003C/code\u003E\u003C/pre\u003E\n\n\u003Cspan\u003Exfce4-keyboard-shortcuts.xml \u003C/span\u003E\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E5\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E6\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E7\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"xml\"\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nt\"\u003E\u0026lt;property\u003C/span\u003E \u003Cspan class=\"na\"\u003Ename=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"custom\"\u003C/span\u003E \u003Cspan class=\"na\"\u003Etype=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"empty\"\u003C/span\u003E\u003Cspan class=\"nt\"\u003E\u0026gt;\u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E  \u003Cspan class=\"nt\"\u003E\u0026lt;property\u003C/span\u003E \u003Cspan class=\"na\"\u003Ename=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"\u0026amp;lt;Alt\u0026amp;gt;F2\"\u003C/span\u003E \u003Cspan class=\"na\"\u003Etype=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"string\"\u003C/span\u003E \u003Cspan class=\"na\"\u003Evalue=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"xfrun4\"\u003C/span\u003E\u003Cspan class=\"nt\"\u003E/\u0026gt;\u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E  \u003Cspan class=\"nt\"\u003E\u0026lt;property\u003C/span\u003E \u003Cspan class=\"na\"\u003Ename=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"\u0026amp;lt;Control\u0026amp;gt;\u0026amp;lt;Alt\u0026amp;gt;Delete\"\u003C/span\u003E \u003Cspan class=\"na\"\u003Etype=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"string\"\u003C/span\u003E \u003Cspan class=\"na\"\u003Evalue=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"xflock4\"\u003C/span\u003E\u003Cspan class=\"nt\"\u003E/\u0026gt;\u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E  \u003Cspan class=\"nt\"\u003E\u0026lt;property\u003C/span\u003E \u003Cspan class=\"na\"\u003Ename=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"XF86Display\"\u003C/span\u003E \u003Cspan class=\"na\"\u003Etype=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"string\"\u003C/span\u003E \u003Cspan class=\"na\"\u003Evalue=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"xrandr --auto\"\u003C/span\u003E\u003Cspan class=\"nt\"\u003E/\u0026gt;\u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E  \u003Cspan class=\"nt\"\u003E\u0026lt;property\u003C/span\u003E \u003Cspan class=\"na\"\u003Ename=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"override\"\u003C/span\u003E \u003Cspan class=\"na\"\u003Etype=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"bool\"\u003C/span\u003E \u003Cspan class=\"na\"\u003Evalue=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"true\"\u003C/span\u003E\u003Cspan class=\"nt\"\u003E/\u0026gt;\u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E  \u003Cspan class=\"nt\"\u003E\u0026lt;property\u003C/span\u003E \u003Cspan class=\"na\"\u003Ename=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"hpModelock1\"\u003C/span\u003E \u003Cspan class=\"na\"\u003Etype=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"string\"\u003C/span\u003E \u003Cspan class=\"na\"\u003Evalue=\u003C/span\u003E\u003Cspan class=\"s\"\u003E\"/usr/bin/i3lock\"\u003C/span\u003E\u003Cspan class=\"nt\"\u003E/\u0026gt;\u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nt\"\u003E\u0026lt;/property\u0026gt;\u003C/span\u003E\n\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EDer letzte Eintrag wurde von mir per Hand eingetragen und funktioniert. Mit\nfn+F2 kann ich jetzt (wie auf meinem Keyboard belabelt) meinen Bildschirm\nsperren.\u003C/p\u003E\n\n\u003Ch2\u003ELinks\u003C/h2\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://en.gentoo-wiki.com/wiki/Multimedia_Keys\"\u003Ehttp://en.gentoo-wiki.com/wiki/Multimedia_Keys\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://wiki.ubuntuusers.de/Xmodmap\"\u003Ehttp://wiki.ubuntuusers.de/Xmodmap\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://wiki.xfce.org/faq#keyboard\"\u003Ehttp://wiki.xfce.org/faq#keyboard\u003C/a\u003E\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Zuerstmal sei gesagt, dass ich sowieso schon sehr begeistert bin wie viele von
den Spezialtasten auf dem Thinkpad schon Out-of-the-Box unter Debian
funktionieren. Trotzdem gab es noch ein paar die das nicht Taten oder zumindest
nicht mit der Software funktioniert hatte bei der ich es brauche.&lt;/p&gt;

&lt;h2&gt;Keyboard Signale mit xev abfangen&lt;/h2&gt;

&lt;p&gt;Erstmal gehts darum rauszufinden was f&#252;r lustige Tasten ich eigentlich gerade
dr&#252;cke. Hier gibts verschiedene Spielereien mit dem Tool xev und sed:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ xev | sed -n 's/^.*keycode *([0-9]+).*$/keycode * /p' 
keycode 36 
keycode 8 
keycode 160 
keycode 160 
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;XKeysymDB und benutzerdefiniertes Mapping&lt;/h2&gt;

&lt;p&gt;Nachdem man weiss, was f&#252;r KeyCodes man gerade dr&#252;ckt kann man damit auch weiter
arbeiten. Diese KeyCodes m&#252;ssen nun Keysyms zugeordnet werden.
Der X11 bringt hier automatisch eine kleine &#220;bersicht mit die es sich
lohnt mal anzusehen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ less /usr/share/X11/XKeysymDB
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Obacht: Man kann keine neuen Keysyms definieren. Man muss Keysyms aus dem DB
File benutzen um diese dann auf den Keycode zu mappen. Dieses Mapping
findet folgendem File statt:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ vim ~/.Xmodmap 
keycode 160 = hpModelock1 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Anschliessend kann man die Xmodmap neu laden:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ xmodmap ~/.Xmodmap 
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;xfce Keymapping&lt;/h2&gt;

&lt;p&gt;Der eigentlich spannende Teil ist, die Shortcuts jetzt mit xfce zu verkn&#252;pfen,
damit man bei Bet&#228;tigung einen Befehl seiner Wahl ausf&#252;hren kann. In xfce gibt
es eine kleine gui im Settings Manager (xfce4-settings-manager) mit der man
soetwas einrichten kann. Zumindest theoretisch. Leider k&#246;nnen hier nur
Tastenkombinationen(!) hinterlegt werden. Keine Keysyms.&lt;/p&gt;

&lt;p&gt;Aber das macht nichts. Wie so ziemlich alles gibts ein xml File in dem die Werte
stehen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ vim .config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml 
&lt;/code&gt;&lt;/pre&gt;

&lt;span&gt;xfce4-keyboard-shortcuts.xml &lt;/span&gt;&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;span class="line-number"&gt;6&lt;/span&gt;
&lt;span class="line-number"&gt;7&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class="xml"&gt;&lt;span class="line"&gt;&lt;span class="nt"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"custom"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"empty"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;  &lt;span class="nt"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"&amp;amp;lt;Alt&amp;amp;gt;F2"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"string"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"xfrun4"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;  &lt;span class="nt"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"&amp;amp;lt;Control&amp;amp;gt;&amp;amp;lt;Alt&amp;amp;gt;Delete"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"string"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"xflock4"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;  &lt;span class="nt"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"XF86Display"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"string"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"xrandr --auto"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;  &lt;span class="nt"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"override"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"bool"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;  &lt;span class="nt"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"hpModelock1"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"string"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"/usr/bin/i3lock"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Der letzte Eintrag wurde von mir per Hand eingetragen und funktioniert. Mit
fn+F2 kann ich jetzt (wie auf meinem Keyboard belabelt) meinen Bildschirm
sperren.&lt;/p&gt;

&lt;h2&gt;Links&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://en.gentoo-wiki.com/wiki/Multimedia_Keys"&gt;http://en.gentoo-wiki.com/wiki/Multimedia_Keys&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://wiki.ubuntuusers.de/Xmodmap"&gt;http://wiki.ubuntuusers.de/Xmodmap&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://wiki.xfce.org/faq#keyboard"&gt;http://wiki.xfce.org/faq#keyboard&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 20 Apr 2012 06:52:00 GMT</pubDate><link>http://log.n0q.org/post/248205232/Keyboard-Codes-unter-Debian-mit-xfce4-8</link><guid isPermaLink="false">urn:www-soup-io:1:248205232</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>Thinkpad X201</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2012/04/15/thinkpad-x201/\"\u003EThinkpad X201\u003C/a\u003E","source":"http://noqqe.de/blog/2012/04/15/thinkpad-x201/","body":"\u003Cp\u003EIch erstand bei \u003Ca href=\"http://ralf-scharbert.de\"\u003Eralf-scharbert.de\u003C/a\u003E ein Thinkpad X201\n(refurbished) f\u00fcr einen m.E. guten Preis.\u003C/p\u003E\n\n\u003Cp\u003E\u003Cimg title=\"Thinkpad X201\" class=\"right\" src=\"http://noqqe.de/uploads/2012/04/thinkpadx201-400px.png\" /\u003E\u003C/p\u003E\n\n\u003Cp\u003EAlles ist toll, Debian installiert, Funktionstasten gehen fast alle\nOut-of-the-Box. Nur das wlan musste kurz nachgebaut werden, weil non-free\nFirmware:\u003C/p\u003E\n\n\u003Cpre\u003E\u003Ccode\u003E$ apt-get install firmware-iwlwifi\n\u003C/code\u003E\u003C/pre\u003E\n\n\u003Cp\u003EWenn ich mich jetzt noch dran gew\u00f6hnen k\u00f6nnte den roten Nippel zu nutzen statt\ndas kleine Touchpad ist alles gut. Zumindest wurde mir das Nahe gelegt ;)\u003C/p\u003E\n\n\u003Cp\u003E\u003Cimg title=\"Thinkpad X201\" class=\"right\" src=\"http://noqqe.de/uploads/2012/04/thinkpadx201-400px-2.png\" /\u003E\u003C/p\u003E\n\n\u003Cp\u003EUm das zu Windows 7 zu sichern (sollte ich es mal brauchen) hab ich au\u00dferdem\nmal die Windows Image Sicherung ausprobiert. Konkret auf ein CIFS Share im\nNetzwerk die .VHD Files \u00fcberspielt und aus dem Internet den \u201cWindows\nSystemrettungsdatentr\u00e4ger\u201d geholt :). Habe nicht probiert ob das wirklich\nfunktioniert, aber es klingt zumindest so als k\u00f6nne man sich darauf verlassen.\u003C/p\u003E\n\n\u003Cp\u003EHurra.\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Ich erstand bei &lt;a href="http://ralf-scharbert.de"&gt;ralf-scharbert.de&lt;/a&gt; ein Thinkpad X201
(refurbished) f&#252;r einen m.E. guten Preis.&lt;/p&gt;

&lt;p&gt;&lt;img class="right" title="Thinkpad X201" src="http://noqqe.de/uploads/2012/04/thinkpadx201-400px.png" /&gt;&lt;/p&gt;

&lt;p&gt;Alles ist toll, Debian installiert, Funktionstasten gehen fast alle
Out-of-the-Box. Nur das wlan musste kurz nachgebaut werden, weil non-free
Firmware:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ apt-get install firmware-iwlwifi
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Wenn ich mich jetzt noch dran gew&#246;hnen k&#246;nnte den roten Nippel zu nutzen statt
das kleine Touchpad ist alles gut. Zumindest wurde mir das Nahe gelegt ;)&lt;/p&gt;

&lt;p&gt;&lt;img class="right" title="Thinkpad X201" src="http://noqqe.de/uploads/2012/04/thinkpadx201-400px-2.png" /&gt;&lt;/p&gt;

&lt;p&gt;Um das zu Windows 7 zu sichern (sollte ich es mal brauchen) hab ich au&#223;erdem
mal die Windows Image Sicherung ausprobiert. Konkret auf ein CIFS Share im
Netzwerk die .VHD Files &#252;berspielt und aus dem Internet den &#8220;Windows
Systemrettungsdatentr&#228;ger&#8221; geholt :). Habe nicht probiert ob das wirklich
funktioniert, aber es klingt zumindest so als k&#246;nne man sich darauf verlassen.&lt;/p&gt;

&lt;p&gt;Hurra.&lt;/p&gt;</description><pubDate>Sun, 15 Apr 2012 09:16:00 GMT</pubDate><link>http://log.n0q.org/post/246676531/Thinkpad-X201</link><guid isPermaLink="false">urn:www-soup-io:1:246676531</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>DaviCal, PostgreSQL und Apple Produkte</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2012/04/09/davical-postgresql-und-apple-produkte/\"\u003EDaviCal, PostgreSQL und Apple Produkte\u003C/a\u003E","source":"http://noqqe.de/blog/2012/04/09/davical-postgresql-und-apple-produkte/","body":"\u003Cp\u003EVor ewigen Zeiten hab ich mir mal ein eGroupware installiert. Es war schrecklich\nund deshalb hab ich es durch etwas weniger Schreckliches ersetzt.\n\u003Ca href=\"http://davical.org\"\u003EDaviCal\u003C/a\u003E.\u003C/p\u003E\n\n\u003Cp\u003ENicht das ich spontan Lust gehabt h\u00e4tte sowas wie Kontakte und so mal zu Ordnen.\nVielmehr hat mich die PostgreSQL Datenbank intressiert die dazu n\u00f6tig ist.\nInstallation und\nKonfiguration ist so sch\u00f6n dokumentiert das ich das hier nicht widerholen\nbrauche. Die Integration in Thunderbird verlief ohne Probleme. Dann kamen meine\nbeiden Ger\u00e4te aus dem Hause Crapple mit der Synchronisation der Kontakte dran.\u003C/p\u003E\n\n\u003Ch2\u003EiPhone\u003C/h2\u003E\n\n\u003Cp\u003EMein iPhone wollte den hingeworfenen Remote f\u00fcr Contacts nicht einfach so\nhinnehmen. Ewiges \u201cVerifying\u201d durch den Installationsassistenten und jedesmal\ngef\u00fchlte 5-10 Minuten sp\u00e4ter hat er mich dann abgewiesen. Im Apache Log ist\ndavon nichts\naufgetaucht. Nach bisschen w\u00e4lzen in der Dokumentation hier und da:\u003C/p\u003E\n\n\u003Cblockquote\u003E\u003Cp\u003ECardDav-Accounts only could set up via iPhone configuration utility. It had to\u003Cbr /\u003Eset up a principal url (e.g. https://domain.tld/caldav.php/username/contacts)\u003Cbr /\u003Efor a working account.\u003C/p\u003E\u003Cstrong\u003ECarddav Clients,\u003C/strong\u003E \u003Ccite\u003E\u003Ca href=\"http://wiki.davical.org/w/CardDAV/Clients\"\u003Ewiki.davical.org\u003C/a\u003E\u003C/cite\u003E\u003C/blockquote\u003E\n\n\n\u003Cp\u003EDas \u003Ca href=\"http://www.apple.com/support/iphone/enterprise/\"\u003EiPhone configuration utility\u003C/a\u003E also.\nSo ganz leicht fand ich das damit nicht\u2026 Ich hab aber gelernt das man super\nDebuggen kann \u00fcber die eingebaute Consolen Funktion in dem Tool. Im iPhone wird\nman nach dem ServerPath gefragt. Den ich mit\u003C/p\u003E\n\n\u003Cblockquote\u003E\u003Cp\u003Ehttp://cal.n0q.org/caldav.php/noqqe/addressbook\u003C/p\u003E\u003C/blockquote\u003E\n\n\u003Cp\u003EMein Fehler war eben genau die Angabe des Protokolls. Ich meine sorry.\nApple probiert hier gef\u00fchlte 1,3 mio (nichtmal wirklich RFC spezifizierte) Orte\nan denen meine Kontakte serverseitig wohl liegen k\u00f6nnten durch und am Ende\nk\u00f6nnen die nichtmal ein f\u00fchrendes http:// wegparsen? Egal. Fehler sah wie folgt\naus:\u003C/p\u003E\n\n\u003Cblockquote\u003E\u003Cp\u003Ehttp://http//cal.n0q.org/caldav.php/noqqe/addressbook\u003C/p\u003E\u003C/blockquote\u003E\n\n\u003Ch2\u003EMacbook\u003C/h2\u003E\n\n\u003Cp\u003EHier nun der wirklich lustige Teil. Das Address Book des Macbooks. Selbes\n\u201cVerifying\u201d Spielchen wieder.\u003C/p\u003E\n\n\u003Cp\u003ENachdem ich rausgefunden habe wie ich das intuitive Interface der App wirklich\nbenutzen soll kam nur folgendes auf meinem Webserver an:\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E77.191.14.156 - - [09/Apr/2012:19:35:53 +0200] \"PROPFIND /caldav.php/noqqe/addressbook:0(null)/ HTTP/1.1\" 401 401 \"-\" \"Address%20Book/883 CFNetwork/454.12.4 Darwin/10.8.0 (i386) (MacBook2%2C1)\"\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E77.191.14.156 - - [09/Apr/2012:19:35:53 +0200] \"PROPFIND /caldav.php/noqqe/addressbook:0(null)/ HTTP/1.1\" 400 477 \"-\" \"Address%20Book/883 CFNetwork/454.12.4 Darwin/10.8.0 (i386) (MacBook2%2C1)\"\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EHerzlichen Gl\u00fcckwunsch. Woher kommt dieses \u201c:0(null)\u201d ? Ich habe den Serverport angegeben:\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://noqqe.de/uploads/2012/04/addressbook.png\"\u003E\u003Cimg src=\"http://noqqe.de/uploads/2012/04/addressbook.png\" alt=\"\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003EIch habe mehr als 10 mal versucht das Interface korrekt auszuf\u00fcllen, aber hatte\nkeine Chance. Nach einmaligem Anlegen konnte ich den Serverpath nicht mehr\neditieren und wenn ich Ihn von vornherein eingetragen habe bekam ich immer das\noben beschriebene \u201c:0(null)\u201d.\u003C/p\u003E\n\n\u003Cp\u003EIch hab mir schliesslich die Config von Addressbuch m\u00fchsam ergrept und gefunden:\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E~/Library/Application Support/AddressBook/Sources/FC24F051-B1B2-4286-9A28-5830207F0DA2/Configuration.plist\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EDort gibt es unter anderem folgende Paramteri (bereits korrigiert):\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E5\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E6\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E7\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E8\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E9\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E10\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E11\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E12\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E13\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E14\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E15\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E16\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E17\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E18\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E19\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E20\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E21\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E22\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E23\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E\u0026lt;?xml version=\"1.0\" encoding=\"UTF-8\"?\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u0026lt;!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u0026lt;plist version=\"1.0\"\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u0026lt;dict\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;key\u0026gt;_className\u0026lt;/key\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;string\u0026gt;PHXCardDAVSource\u0026lt;/string\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;key\u0026gt;disabled\u0026lt;/key\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;integer\u0026gt;0\u0026lt;/integer\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;key\u0026gt;haveWriteAccess\u0026lt;/key\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;integer\u0026gt;0\u0026lt;/integer\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;key\u0026gt;isSharedABAccount\u0026lt;/key\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;integer\u0026gt;1\u0026lt;/integer\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;key\u0026gt;name\u0026lt;/key\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;string\u0026gt;cal.n0q.org\u0026lt;/string\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;key\u0026gt;refreshInterval\u0026lt;/key\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;integer\u0026gt;0\u0026lt;/integer\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;key\u0026gt;serverSupportsSearch\u0026lt;/key\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;integer\u0026gt;0\u0026lt;/integer\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;key\u0026gt;servername\u0026lt;/key\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    \u0026lt;string\u0026gt;http://cal.n0q.org:80/caldav.php/noqqe/addressbook\u0026lt;/string\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E    [...]\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u0026lt;/dict\u0026gt;\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u0026lt;/plist\u0026gt;\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EHurra. Ohne das kaputte Interface kann mein Address Book problemlos mit meinem neuen DaviCal Server reden.\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Vor ewigen Zeiten hab ich mir mal ein eGroupware installiert. Es war schrecklich
und deshalb hab ich es durch etwas weniger Schreckliches ersetzt.
&lt;a href="http://davical.org"&gt;DaviCal&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nicht das ich spontan Lust gehabt h&#228;tte sowas wie Kontakte und so mal zu Ordnen.
Vielmehr hat mich die PostgreSQL Datenbank intressiert die dazu n&#246;tig ist.
Installation und
Konfiguration ist so sch&#246;n dokumentiert das ich das hier nicht widerholen
brauche. Die Integration in Thunderbird verlief ohne Probleme. Dann kamen meine
beiden Ger&#228;te aus dem Hause Crapple mit der Synchronisation der Kontakte dran.&lt;/p&gt;

&lt;h2&gt;iPhone&lt;/h2&gt;

&lt;p&gt;Mein iPhone wollte den hingeworfenen Remote f&#252;r Contacts nicht einfach so
hinnehmen. Ewiges &#8220;Verifying&#8221; durch den Installationsassistenten und jedesmal
gef&#252;hlte 5-10 Minuten sp&#228;ter hat er mich dann abgewiesen. Im Apache Log ist
davon nichts
aufgetaucht. Nach bisschen w&#228;lzen in der Dokumentation hier und da:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;CardDav-Accounts only could set up via iPhone configuration utility. It had to&lt;br /&gt;set up a principal url (e.g. &lt;a href="https://domain.tld/caldav.php/username/contacts"&gt;https://domain.tld/caldav.php/username/contacts&lt;/a&gt;)&lt;br /&gt;for a working account.&lt;/p&gt;&lt;strong&gt;Carddav Clients,&lt;/strong&gt; &lt;cite&gt;&lt;a href="http://wiki.davical.org/w/CardDAV/Clients"&gt;wiki.davical.org&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;


&lt;p&gt;Das &lt;a href="http://www.apple.com/support/iphone/enterprise/"&gt;iPhone configuration utility&lt;/a&gt; also.
So ganz leicht fand ich das damit nicht&#8230; Ich hab aber gelernt das man super
Debuggen kann &#252;ber die eingebaute Consolen Funktion in dem Tool. Im iPhone wird
man nach dem ServerPath gefragt. Den ich mit&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://cal.n0q.org/caldav.php/noqqe/addressbook"&gt;http://cal.n0q.org/caldav.php/noqqe/addressbook&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Mein Fehler war eben genau die Angabe des Protokolls. Ich meine sorry.
Apple probiert hier gef&#252;hlte 1,3 mio (nichtmal wirklich RFC spezifizierte) Orte
an denen meine Kontakte serverseitig wohl liegen k&#246;nnten durch und am Ende
k&#246;nnen die nichtmal ein f&#252;hrendes http:// wegparsen? Egal. Fehler sah wie folgt
aus:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://http//cal.n0q.org/caldav.php/noqqe/addressbook"&gt;http://http//cal.n0q.org/caldav.php/noqqe/addressbook&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;h2&gt;Macbook&lt;/h2&gt;

&lt;p&gt;Hier nun der wirklich lustige Teil. Das Address Book des Macbooks. Selbes
&#8220;Verifying&#8221; Spielchen wieder.&lt;/p&gt;

&lt;p&gt;Nachdem ich rausgefunden habe wie ich das intuitive Interface der App wirklich
benutzen soll kam nur folgendes auf meinem Webserver an:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;77.191.14.156 - - [09/Apr/2012:19:35:53 +0200] "PROPFIND /caldav.php/noqqe/addressbook:0(null)/ HTTP/1.1" 401 401 "-" "Address%20Book/883 CFNetwork/454.12.4 Darwin/10.8.0 (i386) (MacBook2%2C1)"
&lt;/span&gt;&lt;span class="line"&gt;77.191.14.156 - - [09/Apr/2012:19:35:53 +0200] "PROPFIND /caldav.php/noqqe/addressbook:0(null)/ HTTP/1.1" 400 477 "-" "Address%20Book/883 CFNetwork/454.12.4 Darwin/10.8.0 (i386) (MacBook2%2C1)"&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Herzlichen Gl&#252;ckwunsch. Woher kommt dieses &#8220;:0(null)&#8221; ? Ich habe den Serverport angegeben:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://noqqe.de/uploads/2012/04/addressbook.png"&gt;&lt;img src="http://noqqe.de/uploads/2012/04/addressbook.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ich habe mehr als 10 mal versucht das Interface korrekt auszuf&#252;llen, aber hatte
keine Chance. Nach einmaligem Anlegen konnte ich den Serverpath nicht mehr
editieren und wenn ich Ihn von vornherein eingetragen habe bekam ich immer das
oben beschriebene &#8220;:0(null)&#8221;.&lt;/p&gt;

&lt;p&gt;Ich hab mir schliesslich die Config von Addressbuch m&#252;hsam ergrept und gefunden:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;~/Library/Application Support/AddressBook/Sources/FC24F051-B1B2-4286-9A28-5830207F0DA2/Configuration.plist&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Dort gibt es unter anderem folgende Paramteri (bereits korrigiert):&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;span class="line-number"&gt;6&lt;/span&gt;
&lt;span class="line-number"&gt;7&lt;/span&gt;
&lt;span class="line-number"&gt;8&lt;/span&gt;
&lt;span class="line-number"&gt;9&lt;/span&gt;
&lt;span class="line-number"&gt;10&lt;/span&gt;
&lt;span class="line-number"&gt;11&lt;/span&gt;
&lt;span class="line-number"&gt;12&lt;/span&gt;
&lt;span class="line-number"&gt;13&lt;/span&gt;
&lt;span class="line-number"&gt;14&lt;/span&gt;
&lt;span class="line-number"&gt;15&lt;/span&gt;
&lt;span class="line-number"&gt;16&lt;/span&gt;
&lt;span class="line-number"&gt;17&lt;/span&gt;
&lt;span class="line-number"&gt;18&lt;/span&gt;
&lt;span class="line-number"&gt;19&lt;/span&gt;
&lt;span class="line-number"&gt;20&lt;/span&gt;
&lt;span class="line-number"&gt;21&lt;/span&gt;
&lt;span class="line-number"&gt;22&lt;/span&gt;
&lt;span class="line-number"&gt;23&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;&amp;lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;&amp;lt;plist version="1.0"&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;&amp;lt;dict&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;key&amp;gt;_className&amp;lt;/key&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;string&amp;gt;PHXCardDAVSource&amp;lt;/string&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;key&amp;gt;disabled&amp;lt;/key&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;key&amp;gt;haveWriteAccess&amp;lt;/key&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;key&amp;gt;isSharedABAccount&amp;lt;/key&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;string&amp;gt;cal.n0q.org&amp;lt;/string&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;key&amp;gt;refreshInterval&amp;lt;/key&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;key&amp;gt;serverSupportsSearch&amp;lt;/key&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;key&amp;gt;servername&amp;lt;/key&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    &amp;lt;string&amp;gt;http://cal.n0q.org:80/caldav.php/noqqe/addressbook&amp;lt;/string&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;    [...]
&lt;/span&gt;&lt;span class="line"&gt;&amp;lt;/dict&amp;gt;
&lt;/span&gt;&lt;span class="line"&gt;&amp;lt;/plist&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Hurra. Ohne das kaputte Interface kann mein Address Book problemlos mit meinem neuen DaviCal Server reden.&lt;/p&gt;</description><pubDate>Mon, 09 Apr 2012 18:05:00 GMT</pubDate><link>http://log.n0q.org/post/245025840/DaviCal-PostgreSQL-und-Apple-Produkte</link><guid isPermaLink="false">urn:www-soup-io:1:245025840</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>ASCII Statistik Graphen mit Bash</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2012/04/01/ascii-statistik-graphen-mit-bash/\"\u003EASCII Statistik Graphen mit Bash\u003C/a\u003E","source":"http://noqqe.de/blog/2012/04/01/ascii-statistik-graphen-mit-bash/","body":"\u003Cp\u003E\u003Ca href=\"http://noqqe.de/blog/2011/04/14/statistical-statistiken-visualisieren-im-terminal/\"\u003EVor einem Jahr\u003C/a\u003E\nhab ich mich mit einem ASCII Balkendiagramm besch\u00e4ftigt. Als es dann fertig war\nkams unter dem Namen statistical auf Github:\n\u003Ca href=\"http://github.com/noqqe/statistical\"\u003Ehttp://github.com/noqqe/statistical\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://noqqe.de/uploads/2012/04/statistics-fail.jpg\"\u003E\u003Cimg src=\"http://noqqe.de/uploads/2012/04/statistics-fail.jpg\" alt=\"\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003EHab mir \u00fcberlegt wie schwierig das wohl ist, dass ganze Teil nochmal so\numzubauen, dass vertikale Balken entstehen. Horizontal gesehen ist das ja\nrelativ easy. Etwas skalieren hier und da und dann einfach die Anzahl der\nZeichen in einer Zeile ausgeben.\u003C/p\u003E\n\n\u003Cp\u003EIm v-barplot ist da schon etwas mehr Logik n\u00f6tig. Aber es ging dann trotzdem. Heraus kam dabei folgendes:\u003C/p\u003E\n\n\u003Cpre\u003E\u003Ccode\u003E./v-barplot foo:24 bar:90 alice:76 flo:32 blu:79 fa:12 bob:230 kika:121\n\u003C/code\u003E\u003C/pre\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://noqqe.de/uploads/2012/04/v-barplot.png\"\u003E\u003Cimg src=\"http://noqqe.de/uploads/2012/04/v-barplot.png\" alt=\"\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003EBeide Skripte (v-barplot \u0026amp; h-barplot) sind jetzt im statistical Repo. Anregungen\n\u0026amp; Kritik immer gerne.\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;&lt;a href="http://noqqe.de/blog/2011/04/14/statistical-statistiken-visualisieren-im-terminal/"&gt;Vor einem Jahr&lt;/a&gt;
hab ich mich mit einem ASCII Balkendiagramm besch&#228;ftigt. Als es dann fertig war
kams unter dem Namen statistical auf Github:
&lt;a href="http://github.com/noqqe/statistical"&gt;http://github.com/noqqe/statistical&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://noqqe.de/uploads/2012/04/statistics-fail.jpg"&gt;&lt;img src="http://noqqe.de/uploads/2012/04/statistics-fail.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hab mir &#252;berlegt wie schwierig das wohl ist, dass ganze Teil nochmal so
umzubauen, dass vertikale Balken entstehen. Horizontal gesehen ist das ja
relativ easy. Etwas skalieren hier und da und dann einfach die Anzahl der
Zeichen in einer Zeile ausgeben.&lt;/p&gt;

&lt;p&gt;Im v-barplot ist da schon etwas mehr Logik n&#246;tig. Aber es ging dann trotzdem. Heraus kam dabei folgendes:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;./v-barplot foo:24 bar:90 alice:76 flo:32 blu:79 fa:12 bob:230 kika:121
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://noqqe.de/uploads/2012/04/v-barplot.png"&gt;&lt;img src="http://noqqe.de/uploads/2012/04/v-barplot.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Beide Skripte (v-barplot &amp;amp; h-barplot) sind jetzt im statistical Repo. Anregungen
&amp;amp; Kritik immer gerne.&lt;/p&gt;</description><pubDate>Sun, 01 Apr 2012 09:11:00 GMT</pubDate><link>http://log.n0q.org/post/242541889/ASCII-Statistik-Graphen-mit-Bash</link><guid isPermaLink="false">urn:www-soup-io:1:242541889</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>The Revival of SCCS</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2012/03/23/the-revival-of-sccs/\"\u003EThe Revival of SCCS\u003C/a\u003E","source":"http://noqqe.de/blog/2012/03/23/the-revival-of-sccs/","body":"\u003Cp\u003EIch durfte wie bereits \u003Ca href=\"http://noqqe.de/blog/2012/03/22/chemnitzer-linux-tage-2012/\"\u003Eerw\u00e4hnt\u003C/a\u003E\nauf den Chemnitzer LinuxTagen einem Vortrag zur Geschichte von Versionskontrollsystemen und dem Revival von SCCS lauschen.\nDiesen fand ich unter anderem (besonders beim Historischen) informativ und unterhaltsam.\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://localhost:4000/uploads/2012/03/git-header.gif\"\u003E\u003Cimg src=\"http://noqqe.de/uploads/2012/03/git-header.gif\" alt=\"\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003ENicht \u00fcbereinstimmen kann ich aber in den angebrachten \u201cVergleichen\u201d von SCCS zu\n(unter anderem) git. Die Vortragsfolien k\u00f6nnen \u003Ca href=\"http://chemnitzer.linux-tage.de/2012/vortraege/folien/941_SCCS.pdf\"\u003Ehier\u003C/a\u003E\nangesehen werden.\u003C/p\u003E\n\n\u003Ch2\u003EDie Repository Initalisierung\u003C/h2\u003E\n\n\u003Cp\u003EInitalisierung aller OpenSolaris Source Files:\u003C/p\u003E\n\n\u003Cblockquote\u003E\u003Cp\u003ESCCS: 8 Sekunden\u003Cbr /\u003Egit: 100 Sekunden\u003C/p\u003E\u003Cstrong\u003ESchnelle\u00a0Massen\u00fcbernahme\u00a0in\u00a0SCCS,\u003C/strong\u003E \u003Ccite\u003E\u003Ca href=\"http://chemnitzer.linux-tage.de/2012/vortraege/folien/941_SCCS.pdf\"\u003ESCCS Seite 29\u003C/a\u003E\u003C/cite\u003E\u003C/blockquote\u003E\n\n\n\u003Cp\u003EAus dem H\u00f6rsaal kam die berechtigte Frage:\u003C/p\u003E\n\n\u003Cblockquote\u003E\u003Cp\u003EWie oft mache ich das?\u003C/p\u003E\u003C/blockquote\u003E\n\n\u003Cp\u003EIch denke das spricht schonmal f\u00fcr sich, aber das eigentliche Feature hierbei\nist, dass git von allen Files im Repo einen Bin\u00e4rblob in .git/ ablegt. W\u00e4hrend\nSCCS nur Diffs vom letzten zum neuen Commit speichert.\u003C/p\u003E\n\n\u003Cp\u003EDas hab ich mal nachgebaut, kommt schon hin:\u003C/p\u003E\n\n \u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nv\"\u003E$ \u003C/span\u003E\u003Cspan class=\"nb\"\u003Etime \u003C/span\u003Egit add .\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Ereal  0m38.405s\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Euser  0m17.121s\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Esys 0m2.620s\n\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\n\n \u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nv\"\u003E$ \u003C/span\u003E\u003Cspan class=\"nb\"\u003Etime \u003C/span\u003Egit commit -a -m \u003Cspan class=\"s2\"\u003E\"init\"\u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Ereal  0m26.078s\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Euser  0m6.132s\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Esys 0m1.660s\n\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003ENachvollziehbar, dass git l\u00e4nger daf\u00fcr braucht alle Files zu kopieren als SCCS\nmit \u201cAh, hier ist noch ein File, schreib ich den Namen des Files mal in meine Liste\u201d.\u003C/p\u003E\n\n\u003Ch2\u003EDas Datenvolumen\u003C/h2\u003E\n\n\u003Cp\u003EDie angesprochenen Werte auf Seite 36 der Pr\u00e4sentation beziehen sich auf simple\nTimestamps. J\u00f6rg Schilling hat hier 2 Mio. Timestamps erstellt und mit git und sccs\njeden davon mit jeweils einem Commit abgeschlossen.\u003C/p\u003E\n\n\u003Cblockquote\u003E\u003Cp\u003EPlatzbedarf\u00a0mit\u00a0SCCS\u00a0ca.\u00a0300\u00a0MB\u00a0(komprimiert\u00a0160\u00a0MB)\u003Cbr /\u003EPlatzbedarf\u00a0mit\u00a0GIT\u00a0gesch\u00e4tzt:\u00a0ca.\u00a015\u00a0TB\u003C/p\u003E\u003Cstrong\u003EDauertest\u00a0mit\u00a0SCCS\u00a0\u0026gt;2\u00a0Millionen\u00a0Deltas,\u003C/strong\u003E \u003Ccite\u003E\u003Ca href=\"http://chemnitzer.linux-tage.de/2012/vortraege/folien/941_SCCS.pdf\"\u003ESCCS Seite 36\u003C/a\u003E\u003C/cite\u003E\u003C/blockquote\u003E\n\n\n\u003Cp\u003EIch war so frei das einfach mal (aus zeitlichen Gr\u00fcnden mit 1 Mio. Files) nachzustellen:\u003C/p\u003E\n\n \u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E5\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E6\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E7\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E8\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E9\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"c\"\u003E#!/bin/bash\u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Etouch \u003Cspan class=\"nb\"\u003Etest \u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Egit add \u003Cspan class=\"nb\"\u003Etest \u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nv\"\u003EC\u003C/span\u003E\u003Cspan class=\"o\"\u003E=\u003C/span\u003E0\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nb\"\u003Etime \u003C/span\u003E\u003Cspan class=\"k\"\u003Ewhile\u003C/span\u003E \u003Cspan class=\"o\"\u003E[\u003C/span\u003E \u003Cspan class=\"nv\"\u003E$C\u003C/span\u003E -le 1004225 \u003Cspan class=\"o\"\u003E]\u003C/span\u003E; \u003Cspan class=\"k\"\u003Edo\u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"k\"\u003E  \u003C/span\u003Edate \u003Cspan class=\"s2\"\u003E\"+%Y%m%d %H%M%s%N\"\u003C/span\u003E \u0026gt; \u003Cspan class=\"nb\"\u003Etest \u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nb\"\u003E  \u003C/span\u003Egit commit -a -m \u003Cspan class=\"s2\"\u003E\"$C\"\u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E  \u003Cspan class=\"o\"\u003E((\u003C/span\u003EC++\u003Cspan class=\"o\"\u003E))\u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"k\"\u003Edone\u003C/span\u003E\n\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EGr\u00f6\u00dfe nach dem Command:\u003C/p\u003E\n\n \u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nv\"\u003E$ \u003C/span\u003Edu -sh /tmp/1miocommits/\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E12G .\n\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EIch bin mir nicht sicher was J\u00f6rg hier genau getan hat. Meine Testwerte\nunterscheiden sich jedenfalls erheblich von dem, was im Vortrag vorkommt.\u003C/p\u003E\n\n\u003Cp\u003EUnter anderem wurde erw\u00e4hnt, dass die Gr\u00f6\u00dfe des Git Repositories hochgerechnet\nwurde. Nun das ist nat\u00fcrlich insofern doof, wie man weiss das git Deduplication\nbetreibt. Teile aus den Blobs werden einmalig aufgehoben, wenn sie idientisch\nsind. So l\u00e4sst sich viel Platz sparen und das Konstrukt des \u201cHochrechnens\u201d\nbricht zusammen. Selbst wenn ich das jetzt nur verdopple kommen dabei 24 GB\nstatt 15 TB raus.\u003C/p\u003E\n\n\u003Ch2\u003EDie Zeit\u003C/h2\u003E\n\n\u003Cp\u003EEin weiterer Punkt der meines Erachtens beim Vergleich von git zu SCCS au\u00dfer\nacht gelassen wurde. Die Zeit.\u003C/p\u003E\n\n\u003Cp\u003EWas mich sehr interessiert sind die Wiederherstellzeiten. Klar git hat\neinen spezifischen Commit welcher auf ein Objekt im Hash Store zeigt. Dieser\nwird ausgelesen und fertig ist die Wiederherstellung.\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://localhost:4000/uploads/2012/03/gitobjects.png\"\u003E\u003Cimg src=\"http://noqqe.de/uploads/2012/03/gitobjects.png\" alt=\"\" /\u003E\u003C/a\u003E\n(Bild von progit.org - Creative Commons Attribution Non Commercial Share Alike 3.0\nlicense)\u003C/p\u003E\n\n\u003Cp\u003EAber bei SCCS? Angenommen ich m\u00f6chte vom 1.000.000 Commit zum 1. zur\u00fcck. Alle\nDiffs werden dazu auf das aktuelle File angewandt und zur\u00fcckgerechnet bis\ndas File wieder am Ursprungszustand angekommen ist. Ob das Spass macht?\u003C/p\u003E\n\n\u003Ch2\u003EDie Konsistenz\u003C/h2\u003E\n\n\u003Cp\u003ESelbes Szenario hier. Ich weiss nicht was passiert wenn das Diff File von SCCS\nunterwegs mal kaputt geht. Aus welchen Gr\u00fcnden auch immer. HDD Block kaputt oder\nversehentlich editiert. Faktisch sollte das File dann nicht mehr herstellbar sein.\u003C/p\u003E\n\n\u003Cp\u003EBei git bleibt weiterhin der mit zlib komprimierte Binary Blob bestehen und\nalles ist gut weil wie oben der Commit auf einen bin\u00e4r Blob referenziert.\nSelbst wenn dazwischen mal ein Block eines Blobs kaputt sein\nsollte (oder was auch immer).\u003C/p\u003E\n\n\u003Ch2\u003EEnde\u003C/h2\u003E\n\n\u003Cp\u003EIch m\u00f6chte zum Schluss nochmal unterstreichen, dass ich in keinster Weise den\nVortrag oder die Weiterentwicklung von J\u00f6rg Schilling an SCCS kritisieren will.\nIm Gegenteil. SCCS ist f\u00fcr bestimmte Einsatzzwecke bestimmt nett, eben weil es\n\u201canders\u201d ist als git. Aber, dass SCCS in allen Punkte besser als git m\u00f6chte ich\nnicht unterschreiben.\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Ich durfte wie bereits &lt;a href="http://noqqe.de/blog/2012/03/22/chemnitzer-linux-tage-2012/"&gt;erw&#228;hnt&lt;/a&gt;
auf den Chemnitzer LinuxTagen einem Vortrag zur Geschichte von Versionskontrollsystemen und dem Revival von SCCS lauschen.
Diesen fand ich unter anderem (besonders beim Historischen) informativ und unterhaltsam.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:4000/uploads/2012/03/git-header.gif"&gt;&lt;img src="http://noqqe.de/uploads/2012/03/git-header.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nicht &#252;bereinstimmen kann ich aber in den angebrachten &#8220;Vergleichen&#8221; von SCCS zu
(unter anderem) git. Die Vortragsfolien k&#246;nnen &lt;a href="http://chemnitzer.linux-tage.de/2012/vortraege/folien/941_SCCS.pdf"&gt;hier&lt;/a&gt;
angesehen werden.&lt;/p&gt;

&lt;h2&gt;Die Repository Initalisierung&lt;/h2&gt;

&lt;p&gt;Initalisierung aller OpenSolaris Source Files:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;SCCS: 8 Sekunden&lt;br /&gt;git: 100 Sekunden&lt;/p&gt;&lt;strong&gt;Schnelle&#160;Massen&#252;bernahme&#160;in&#160;SCCS,&lt;/strong&gt; &lt;cite&gt;&lt;a href="http://chemnitzer.linux-tage.de/2012/vortraege/folien/941_SCCS.pdf"&gt;SCCS Seite 29&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;


&lt;p&gt;Aus dem H&#246;rsaal kam die berechtigte Frage:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Wie oft mache ich das?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Ich denke das spricht schonmal f&#252;r sich, aber das eigentliche Feature hierbei
ist, dass git von allen Files im Repo einen Bin&#228;rblob in .git/ ablegt. W&#228;hrend
SCCS nur Diffs vom letzten zum neuen Commit speichert.&lt;/p&gt;

&lt;p&gt;Das hab ich mal nachgebaut, kommt schon hin:&lt;/p&gt;

 &lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="line"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;time &lt;/span&gt;git add .
&lt;/span&gt;&lt;span class="line"&gt;real  0m38.405s
&lt;/span&gt;&lt;span class="line"&gt;user  0m17.121s
&lt;/span&gt;&lt;span class="line"&gt;sys 0m2.620s
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;




 &lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="line"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;time &lt;/span&gt;git commit -a -m &lt;span class="s2"&gt;"init"&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;real  0m26.078s
&lt;/span&gt;&lt;span class="line"&gt;user  0m6.132s
&lt;/span&gt;&lt;span class="line"&gt;sys 0m1.660s
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Nachvollziehbar, dass git l&#228;nger daf&#252;r braucht alle Files zu kopieren als SCCS
mit &#8220;Ah, hier ist noch ein File, schreib ich den Namen des Files mal in meine Liste&#8221;.&lt;/p&gt;

&lt;h2&gt;Das Datenvolumen&lt;/h2&gt;

&lt;p&gt;Die angesprochenen Werte auf Seite 36 der Pr&#228;sentation beziehen sich auf simple
Timestamps. J&#246;rg Schilling hat hier 2 Mio. Timestamps erstellt und mit git und sccs
jeden davon mit jeweils einem Commit abgeschlossen.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Platzbedarf&#160;mit&#160;SCCS&#160;ca.&#160;300&#160;MB&#160;(komprimiert&#160;160&#160;MB)&lt;br /&gt;Platzbedarf&#160;mit&#160;GIT&#160;gesch&#228;tzt:&#160;ca.&#160;15&#160;TB&lt;/p&gt;&lt;strong&gt;Dauertest&#160;mit&#160;SCCS&#160;&amp;gt;2&#160;Millionen&#160;Deltas,&lt;/strong&gt; &lt;cite&gt;&lt;a href="http://chemnitzer.linux-tage.de/2012/vortraege/folien/941_SCCS.pdf"&gt;SCCS Seite 36&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;


&lt;p&gt;Ich war so frei das einfach mal (aus zeitlichen Gr&#252;nden mit 1 Mio. Files) nachzustellen:&lt;/p&gt;

 &lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;span class="line-number"&gt;6&lt;/span&gt;
&lt;span class="line-number"&gt;7&lt;/span&gt;
&lt;span class="line-number"&gt;8&lt;/span&gt;
&lt;span class="line-number"&gt;9&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="line"&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;touch &lt;span class="nb"&gt;test &lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;git add &lt;span class="nb"&gt;test &lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="nv"&gt;C&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="nb"&gt;time &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$C&lt;/span&gt; -le 1004225 &lt;span class="o"&gt;]&lt;/span&gt;; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="k"&gt;  &lt;/span&gt;date &lt;span class="s2"&gt;"+%Y%m%d %H%M%s%N"&lt;/span&gt; &amp;gt; &lt;span class="nb"&gt;test &lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="nb"&gt;  &lt;/span&gt;git commit -a -m &lt;span class="s2"&gt;"$C"&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;  &lt;span class="o"&gt;((&lt;/span&gt;C++&lt;span class="o"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Gr&#246;&#223;e nach dem Command:&lt;/p&gt;

 &lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="line"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;du -sh /tmp/1miocommits/
&lt;/span&gt;&lt;span class="line"&gt;12G .
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ich bin mir nicht sicher was J&#246;rg hier genau getan hat. Meine Testwerte
unterscheiden sich jedenfalls erheblich von dem, was im Vortrag vorkommt.&lt;/p&gt;

&lt;p&gt;Unter anderem wurde erw&#228;hnt, dass die Gr&#246;&#223;e des Git Repositories hochgerechnet
wurde. Nun das ist nat&#252;rlich insofern doof, wie man weiss das git Deduplication
betreibt. Teile aus den Blobs werden einmalig aufgehoben, wenn sie idientisch
sind. So l&#228;sst sich viel Platz sparen und das Konstrukt des &#8220;Hochrechnens&#8221;
bricht zusammen. Selbst wenn ich das jetzt nur verdopple kommen dabei 24 GB
statt 15 TB raus.&lt;/p&gt;

&lt;h2&gt;Die Zeit&lt;/h2&gt;

&lt;p&gt;Ein weiterer Punkt der meines Erachtens beim Vergleich von git zu SCCS au&#223;er
acht gelassen wurde. Die Zeit.&lt;/p&gt;

&lt;p&gt;Was mich sehr interessiert sind die Wiederherstellzeiten. Klar git hat
einen spezifischen Commit welcher auf ein Objekt im Hash Store zeigt. Dieser
wird ausgelesen und fertig ist die Wiederherstellung.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:4000/uploads/2012/03/gitobjects.png"&gt;&lt;img src="http://noqqe.de/uploads/2012/03/gitobjects.png" alt="" /&gt;&lt;/a&gt;
(Bild von progit.org - Creative Commons Attribution Non Commercial Share Alike 3.0
license)&lt;/p&gt;

&lt;p&gt;Aber bei SCCS? Angenommen ich m&#246;chte vom 1.000.000 Commit zum 1. zur&#252;ck. Alle
Diffs werden dazu auf das aktuelle File angewandt und zur&#252;ckgerechnet bis
das File wieder am Ursprungszustand angekommen ist. Ob das Spass macht?&lt;/p&gt;

&lt;h2&gt;Die Konsistenz&lt;/h2&gt;

&lt;p&gt;Selbes Szenario hier. Ich weiss nicht was passiert wenn das Diff File von SCCS
unterwegs mal kaputt geht. Aus welchen Gr&#252;nden auch immer. HDD Block kaputt oder
versehentlich editiert. Faktisch sollte das File dann nicht mehr herstellbar sein.&lt;/p&gt;

&lt;p&gt;Bei git bleibt weiterhin der mit zlib komprimierte Binary Blob bestehen und
alles ist gut weil wie oben der Commit auf einen bin&#228;r Blob referenziert.
Selbst wenn dazwischen mal ein Block eines Blobs kaputt sein
sollte (oder was auch immer).&lt;/p&gt;

&lt;h2&gt;Ende&lt;/h2&gt;

&lt;p&gt;Ich m&#246;chte zum Schluss nochmal unterstreichen, dass ich in keinster Weise den
Vortrag oder die Weiterentwicklung von J&#246;rg Schilling an SCCS kritisieren will.
Im Gegenteil. SCCS ist f&#252;r bestimmte Einsatzzwecke bestimmt nett, eben weil es
&#8220;anders&#8221; ist als git. Aber, dass SCCS in allen Punkte besser als git m&#246;chte ich
nicht unterschreiben.&lt;/p&gt;</description><pubDate>Fri, 23 Mar 2012 14:11:00 GMT</pubDate><link>http://log.n0q.org/post/240748943/The-Revival-of-SCCS</link><guid isPermaLink="false">urn:www-soup-io:1:240748943</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>Chemnitzer Linux Tage 2012</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2012/03/22/chemnitzer-linux-tage-2012/\"\u003EChemnitzer Linux Tage 2012\u003C/a\u003E","source":"http://noqqe.de/blog/2012/03/22/chemnitzer-linux-tage-2012/","body":"\u003Cp\u003EMittlerweile das 3. Jahr, dass ich mich bei den Chemnitzer Linux Tagen habe\nblicken lassen. Wie immer war alles sehr super, klasse organisiert (dickes\nKompliment an die Orga) und interessant :)\u003C/p\u003E\n\n\u003Cp\u003EKurze Review der Vortr\u00e4ge\u003C/p\u003E\n\n\u003Cul\u003E\n\u003Cli\u003E\u003Cp\u003E\u003Ca href=\"http://chemnitzer.linux-tage.de/2012/vortraege/1022\"\u003EPenetration Testing mit MetaSploit\u003C/a\u003E\nMetaSploit ist angeblich mit 1,2 Mio. Zeilen das gr\u00f6\u00dfte gepflegte OpenSource\nRuby Projekt. Wohl wegen den Zig Plugins :)\u003C/p\u003E\u003C/li\u003E\n\u003Cli\u003E\u003Cp\u003E\u003Ca href=\"http://chemnitzer.linux-tage.de/2012/vortraege/1006\"\u003EDer Systemaufruf und was danach passiert\u003C/a\u003E\nEin bisschen was zu SysCalls unter Linux und Unix. Folien waren leider nur\nbegrenzt lesbar wegen gelber Schrift auf weissem Grund. Ansonsten viel C\nBeispiele.\u003C/p\u003E\u003C/li\u003E\n\u003Cli\u003E\u003Cp\u003E\u003Ca href=\"http://chemnitzer.linux-tage.de/2012/vortraege/906\"\u003Estrace f\u00fcr Bash Versteher\u003C/a\u003E\nstrace benutzen um Bash Probleme zu debuggen? Einwandfrei. Manchmal etwas\n\u00fcberzogen gleich zu strace zu greifen, aber ansonsten super, da ich bisher wenig\nmit strace gemacht hatte.\u003C/p\u003E\u003C/li\u003E\n\u003Cli\u003E\u003Cp\u003E\u003Ca href=\"http://chemnitzer.linux-tage.de/2012/vortraege/974\"\u003EMit OpenStack zur eigenen Cloud\u003C/a\u003E\nAuch nett gewesen. Die verschiedenen Komponenten von OpenStack mal\nkennenzulernen die von RackSpace und der NASA entwickelt werden.\u003C/p\u003E\u003C/li\u003E\n\u003Cli\u003E\u003Cp\u003E\u003Ca href=\"http://chemnitzer.linux-tage.de/2012/vortraege/941\"\u003EUrspr\u00fcnge der Versionsverwaltung und Revival von SCCS\u003C/a\u003E\nDen Folien habe ich nichts hinzuzufuegen. Ganz besonders nicht Seite 36. Aber\nich habe schon wieder Schaum vorm Mund, wenn ich dran denke. Vielleicht gibts\ndar\u00fcber einen separaten Blogpost.\u003C/p\u003E\u003C/li\u003E\n\u003Cli\u003E\u003Cp\u003E\u003Ca href=\"http://chemnitzer.linux-tage.de/2012/vortraege/1054\"\u003EBitcoin, das elektronische Geld\u003C/a\u003E\nPaar interessante Hints bei gewesen. Wenn man sich aber schonmal schlau gelesen\nhat war wenig neues dabei.\u003C/p\u003E\u003C/li\u003E\n\u003Cli\u003E\u003Cp\u003E\u003Ca href=\"http://chemnitzer.linux-tage.de/2012/vortraege/1035\"\u003ELinuXContainer in der Praxis\u003C/a\u003E\nFand ich pers\u00f6nlich vortragstechnisch und inhaltlich den besten Vortrag. Bin\nauch schon 2 Stunden am basteln damit, wenn ich schonmal Urlaub habe.\u003C/p\u003E\u003C/li\u003E\n\u003C/ul\u003E"}</soup:attributes>
<description>&lt;p&gt;Mittlerweile das 3. Jahr, dass ich mich bei den Chemnitzer Linux Tagen habe
blicken lassen. Wie immer war alles sehr super, klasse organisiert (dickes
Kompliment an die Orga) und interessant :)&lt;/p&gt;

&lt;p&gt;Kurze Review der Vortr&#228;ge&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://chemnitzer.linux-tage.de/2012/vortraege/1022"&gt;Penetration Testing mit MetaSploit&lt;/a&gt;
MetaSploit ist angeblich mit 1,2 Mio. Zeilen das gr&#246;&#223;te gepflegte OpenSource
Ruby Projekt. Wohl wegen den Zig Plugins :)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://chemnitzer.linux-tage.de/2012/vortraege/1006"&gt;Der Systemaufruf und was danach passiert&lt;/a&gt;
Ein bisschen was zu SysCalls unter Linux und Unix. Folien waren leider nur
begrenzt lesbar wegen gelber Schrift auf weissem Grund. Ansonsten viel C
Beispiele.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://chemnitzer.linux-tage.de/2012/vortraege/906"&gt;strace f&#252;r Bash Versteher&lt;/a&gt;
strace benutzen um Bash Probleme zu debuggen? Einwandfrei. Manchmal etwas
&#252;berzogen gleich zu strace zu greifen, aber ansonsten super, da ich bisher wenig
mit strace gemacht hatte.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://chemnitzer.linux-tage.de/2012/vortraege/974"&gt;Mit OpenStack zur eigenen Cloud&lt;/a&gt;
Auch nett gewesen. Die verschiedenen Komponenten von OpenStack mal
kennenzulernen die von RackSpace und der NASA entwickelt werden.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://chemnitzer.linux-tage.de/2012/vortraege/941"&gt;Urspr&#252;nge der Versionsverwaltung und Revival von SCCS&lt;/a&gt;
Den Folien habe ich nichts hinzuzufuegen. Ganz besonders nicht Seite 36. Aber
ich habe schon wieder Schaum vorm Mund, wenn ich dran denke. Vielleicht gibts
dar&#252;ber einen separaten Blogpost.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://chemnitzer.linux-tage.de/2012/vortraege/1054"&gt;Bitcoin, das elektronische Geld&lt;/a&gt;
Paar interessante Hints bei gewesen. Wenn man sich aber schonmal schlau gelesen
hat war wenig neues dabei.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://chemnitzer.linux-tage.de/2012/vortraege/1035"&gt;LinuXContainer in der Praxis&lt;/a&gt;
Fand ich pers&#246;nlich vortragstechnisch und inhaltlich den besten Vortrag. Bin
auch schon 2 Stunden am basteln damit, wenn ich schonmal Urlaub habe.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 22 Mar 2012 19:16:00 GMT</pubDate><link>http://log.n0q.org/post/240748948/Chemnitzer-Linux-Tage-2012</link><guid isPermaLink="false">urn:www-soup-io:1:240748948</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>Das Ext4 Directory Indexing</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2012/03/08/a-byte-of-ext4-directory-indexing/\"\u003EDas Ext4 Directory Indexing\u003C/a\u003E","source":"http://noqqe.de/blog/2012/03/08/a-byte-of-ext4-directory-indexing/","body":"\u003Cp\u003EMit ext4 kam unter anderem ein Feature hinzu, welches sich Directory Indexing\nnennt. Es ist dazu gedacht in Verzeichnissen mit vielen Dateien eine Art Map\nanzulegen an welchen Inodes welche Files liegen und kommt erst ab Fileanzahl X\npro Directory automatisch dazu. Ziel der Entwickler war nat\u00fcrlich Performance Gewinn.\u003C/p\u003E\n\n\u003Cp\u003EAllerdings kauft man mit diesem Feature auch eine zus\u00e4tzliche Limitierung mit\nein, bei der ich mich schwer tat wirklich (aufgrund in meiner Wahrnehmung\nmangelnder Berichte und Doku) das Problem zu debuggen.\u003C/p\u003E\n\n\u003Cp\u003EDie Limitierung bei vielen Files sind in den meisten F\u00e4llen erstmal die Inodes\nder Platte. Ist die Platte aber ausreichend gro\u00df (oder die Inodes ausreichend\nklein) kommt hier das Directory Indexing ins Spiel:\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003EEXT4-fs warning (device /dev/sdd): ext4_dx_add_entry: Directory index full!\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003ERsyncs bzw. Schreibende Zugriffe in das Verzeichnis brechen ab und im \u003Ccode\u003Edmesg\u003C/code\u003E\nfindet man obige Meldung. Problem dabei: In dem Directory Index sind so viele\nFiles gelistet, dass in dem (wahrscheinlich FS Designtechnisch limitierten,\nkorrigiert mich bitte) Hashmap Block kein Platz mehr ist. Es k\u00f6nnen schlicht\nund ergreifend keine neuen Eintr\u00e4ge hinzugef\u00fcgt werden.\u003C/p\u003E\n\n\u003Ch2\u003EWas jetzt?\u003C/h2\u003E\n\n\u003Cp\u003EL\u00e4ngeres w\u00e4lzen von Dokumentation l\u00e4sst sich nicht vermeiden.\u003C/p\u003E\n\n\u003Cblockquote\u003E\u003Cp\u003EA linear array of directory entries isn\u2019t great for performance, so a new\u003Cbr /\u003Efeature was added to ext3 to provide a faster (but peculiar) balanced tree keyed\u003Cbr /\u003Eoff a hash of the directory entry name. If the EXT4_INDEX_FL (0x1000) flag is\u003Cbr /\u003Eset in the inode, this directory uses a hashed btree (htree) to organize and\u003Cbr /\u003Efind directory entries.\u003C/p\u003E\u003Cstrong\u003EExt4 Disk Layout,\u003C/strong\u003E \u003Ccite\u003E\u003Ca href=\"https://ext4.wiki.kernel.org/articles/e/x/t/Ext4_Disk_Layout_aecb.html\"\u003Eext4.wiki.kernel.org\u003C/a\u003E\u003C/cite\u003E\u003C/blockquote\u003E\n\n\n\u003Cp\u003EOder auch andere schaurige Threads aus Mailinglisten:\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://www.mail-archive.com/cwelug@googlegroups.com/msg01937.html\"\u003Ehttp://www.mail-archive.com/cwelug@googlegroups.com/msg01937.html\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003EMit debugfs lassen sich die Informationen des Filesystems\nauszulesen, die einen interessieren. Basic Problematik ist einfach, welches\nVerzeichnis ist betroffen, wie konnte das passieren und wie bekomme ich es wieder heile.\u003C/p\u003E\n\n\u003Cspan\u003E\u003C/span\u003E\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E5\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E6\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E7\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E8\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E9\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nv\"\u003E$ \u003C/span\u003E\u003Cspan class=\"nb\"\u003Ecd\u003C/span\u003E /var/\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nv\"\u003E$ \u003C/span\u003Edebugfs\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Edebugfs\u0026gt; open /dev/sdd1\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Edebugfs\u0026gt; \u003Cspan class=\"nb\"\u003Ecd \u003C/span\u003Elog/\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Edebugfs\u0026gt; htree .\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"o\"\u003E[\u003C/span\u003E...\u003Cspan class=\"o\"\u003E]\u003C/span\u003E\n\u003C/span\u003E\u003Cspan class=\"line\"\u003ENumber of Entries \u003Cspan class=\"o\"\u003E(\u003C/span\u003Ecount\u003Cspan class=\"o\"\u003E)\u003C/span\u003E: 508\n\u003C/span\u003E\u003Cspan class=\"line\"\u003ENumber of Entries \u003Cspan class=\"o\"\u003E(\u003C/span\u003Elimit\u003Cspan class=\"o\"\u003E)\u003C/span\u003E: 508\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"o\"\u003E[\u003C/span\u003E...\u003Cspan class=\"o\"\u003E]\u003C/span\u003E\n\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003E\nhtree listet die Indexes in dem Ordner und Informationen zum hashed B-Tree. Die\nLimit und Count Values sprechen denke ich f\u00fcr sich.\u003C/p\u003E\n\n\u003Ch2\u003EOkay. Problem gefunden. Wie beheb ich es?\u003C/h2\u003E\n\n\u003Cp\u003EMan baut den Directory Index neu auf, wobei der alte Dir Index\nprinzipiell behalten wird und der Neue an der letzten Stelle auf den weiteren\nIndex referenziert.\u003C/p\u003E\n\n\u003Cspan\u003E\u003C/span\u003E\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E\u003Cspan class=\"line\"\u003Efsck.ext4 -yfD /dev/sdd1\n\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EDazu ist ein unmounten zwingend erforderlich, was bei produktiven Systemen\nunsch\u00f6n ist. Oder man l\u00f6scht das Verzeichnis.\u003C/p\u003E\n\n\u003Cp\u003EWie sich sp\u00e4ter herausgestellt hat war die Ursache davon ein nicht korrekt\nfunktionierendes Logrotate welches ca 8 Mio. Files produziert hat. Das L\u00f6schen\nhat auch nur ca. 10 Tage gedauert. Nur so am Rande.\u003C/p\u003E\n\n\u003Ch2\u003EIrritiert.\u003C/h2\u003E\n\n\u003Cp\u003EZum Abschluss muss ich sagen bin ich etwas.. irritiert. Man schafft ein Feature,\ndass dann einspringt wenn es viele Files werden (bei meinen Tests ab 300.000\nFiles), welches dann sp\u00e4ter wegen diesen vielen Files zu fehlern f\u00fchrt. In dem\nBereich dazwischen ist das eventuell wirklich nett zu haben, weil Perfomance.\nAber dass ich den \u201cReferenzakt\u201d nicht anstossen kann w\u00e4hrend das FS gemountet\nist finde ich dann speziell f\u00fcr den HA Betrieb von Servern \u2026 fragw\u00fcrdig.\u003C/p\u003E\n\n\u003Cp\u003EKlar es ist in keinem Fall eine gute Idee mehr als 2 Mio. files in \u003Cem\u003Eein\u003C/em\u003E\nVerzeichnis zu legen, aber hey.\u003C/p\u003E\n\n\u003Cp\u003EWirklich gest\u00f6rt hat mich eher das mangelhaft Dokumentierte Vorgehen daf\u00fcr.\nSeitens Entwickler, seitens Community. Aber deswegen hab ich ja jetzt diesen\nPost verfasst.\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Mit ext4 kam unter anderem ein Feature hinzu, welches sich Directory Indexing
nennt. Es ist dazu gedacht in Verzeichnissen mit vielen Dateien eine Art Map
anzulegen an welchen Inodes welche Files liegen und kommt erst ab Fileanzahl X
pro Directory automatisch dazu. Ziel der Entwickler war nat&#252;rlich Performance Gewinn.&lt;/p&gt;

&lt;p&gt;Allerdings kauft man mit diesem Feature auch eine zus&#228;tzliche Limitierung mit
ein, bei der ich mich schwer tat wirklich (aufgrund in meiner Wahrnehmung
mangelnder Berichte und Doku) das Problem zu debuggen.&lt;/p&gt;

&lt;p&gt;Die Limitierung bei vielen Files sind in den meisten F&#228;llen erstmal die Inodes
der Platte. Ist die Platte aber ausreichend gro&#223; (oder die Inodes ausreichend
klein) kommt hier das Directory Indexing ins Spiel:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;EXT4-fs warning (device /dev/sdd): ext4_dx_add_entry: Directory index full!&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Rsyncs bzw. Schreibende Zugriffe in das Verzeichnis brechen ab und im &lt;code&gt;dmesg&lt;/code&gt;
findet man obige Meldung. Problem dabei: In dem Directory Index sind so viele
Files gelistet, dass in dem (wahrscheinlich FS Designtechnisch limitierten,
korrigiert mich bitte) Hashmap Block kein Platz mehr ist. Es k&#246;nnen schlicht
und ergreifend keine neuen Eintr&#228;ge hinzugef&#252;gt werden.&lt;/p&gt;

&lt;h2&gt;Was jetzt?&lt;/h2&gt;

&lt;p&gt;L&#228;ngeres w&#228;lzen von Dokumentation l&#228;sst sich nicht vermeiden.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;A linear array of directory entries isn&#8217;t great for performance, so a new&lt;br /&gt;feature was added to ext3 to provide a faster (but peculiar) balanced tree keyed&lt;br /&gt;off a hash of the directory entry name. If the EXT4_INDEX_FL (0x1000) flag is&lt;br /&gt;set in the inode, this directory uses a hashed btree (htree) to organize and&lt;br /&gt;find directory entries.&lt;/p&gt;&lt;strong&gt;Ext4 Disk Layout,&lt;/strong&gt; &lt;cite&gt;&lt;a href="https://ext4.wiki.kernel.org/articles/e/x/t/Ext4_Disk_Layout_aecb.html"&gt;ext4.wiki.kernel.org&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;


&lt;p&gt;Oder auch andere schaurige Threads aus Mailinglisten:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.mail-archive.com/cwelug@googlegroups.com/msg01937.html"&gt;http://www.mail-archive.com/cwelug@googlegroups.com/msg01937.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mit debugfs lassen sich die Informationen des Filesystems
auszulesen, die einen interessieren. Basic Problematik ist einfach, welches
Verzeichnis ist betroffen, wie konnte das passieren und wie bekomme ich es wieder heile.&lt;/p&gt;

&lt;span&gt;&lt;/span&gt;&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;span class="line-number"&gt;6&lt;/span&gt;
&lt;span class="line-number"&gt;7&lt;/span&gt;
&lt;span class="line-number"&gt;8&lt;/span&gt;
&lt;span class="line-number"&gt;9&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="line"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /var/
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;debugfs
&lt;/span&gt;&lt;span class="line"&gt;debugfs&amp;gt; open /dev/sdd1
&lt;/span&gt;&lt;span class="line"&gt;debugfs&amp;gt; &lt;span class="nb"&gt;cd &lt;/span&gt;log/
&lt;/span&gt;&lt;span class="line"&gt;debugfs&amp;gt; htree .
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;Number of Entries &lt;span class="o"&gt;(&lt;/span&gt;count&lt;span class="o"&gt;)&lt;/span&gt;: 508
&lt;/span&gt;&lt;span class="line"&gt;Number of Entries &lt;span class="o"&gt;(&lt;/span&gt;limit&lt;span class="o"&gt;)&lt;/span&gt;: 508
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;
htree listet die Indexes in dem Ordner und Informationen zum hashed B-Tree. Die
Limit und Count Values sprechen denke ich f&#252;r sich.&lt;/p&gt;

&lt;h2&gt;Okay. Problem gefunden. Wie beheb ich es?&lt;/h2&gt;

&lt;p&gt;Man baut den Directory Index neu auf, wobei der alte Dir Index
prinzipiell behalten wird und der Neue an der letzten Stelle auf den weiteren
Index referenziert.&lt;/p&gt;

&lt;span&gt;&lt;/span&gt;&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="line"&gt;fsck.ext4 -yfD /dev/sdd1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Dazu ist ein unmounten zwingend erforderlich, was bei produktiven Systemen
unsch&#246;n ist. Oder man l&#246;scht das Verzeichnis.&lt;/p&gt;

&lt;p&gt;Wie sich sp&#228;ter herausgestellt hat war die Ursache davon ein nicht korrekt
funktionierendes Logrotate welches ca 8 Mio. Files produziert hat. Das L&#246;schen
hat auch nur ca. 10 Tage gedauert. Nur so am Rande.&lt;/p&gt;

&lt;h2&gt;Irritiert.&lt;/h2&gt;

&lt;p&gt;Zum Abschluss muss ich sagen bin ich etwas.. irritiert. Man schafft ein Feature,
dass dann einspringt wenn es viele Files werden (bei meinen Tests ab 300.000
Files), welches dann sp&#228;ter wegen diesen vielen Files zu fehlern f&#252;hrt. In dem
Bereich dazwischen ist das eventuell wirklich nett zu haben, weil Perfomance.
Aber dass ich den &#8220;Referenzakt&#8221; nicht anstossen kann w&#228;hrend das FS gemountet
ist finde ich dann speziell f&#252;r den HA Betrieb von Servern &#8230; fragw&#252;rdig.&lt;/p&gt;

&lt;p&gt;Klar es ist in keinem Fall eine gute Idee mehr als 2 Mio. files in &lt;em&gt;ein&lt;/em&gt;
Verzeichnis zu legen, aber hey.&lt;/p&gt;

&lt;p&gt;Wirklich gest&#246;rt hat mich eher das mangelhaft Dokumentierte Vorgehen daf&#252;r.
Seitens Entwickler, seitens Community. Aber deswegen hab ich ja jetzt diesen
Post verfasst.&lt;/p&gt;</description><pubDate>Thu, 08 Mar 2012 18:38:00 GMT</pubDate><link>http://log.n0q.org/post/236950777/Das-Ext4-Directory-Indexing</link><guid isPermaLink="false">urn:www-soup-io:1:236950777</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>Switched to Octopress</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2012/03/05/switched-to-octopress/\"\u003ESwitched to Octopress\u003C/a\u003E","source":"http://noqqe.de/blog/2012/03/05/switched-to-octopress/","body":"\u003Cp\u003EHatte von \u003Ca href=\"http://octopress.org\"\u003EOctopress\u003C/a\u003E gelesen. Dann nochmal im \u003Ca href=\"http://k4cg.org\"\u003Ek4cg\u003C/a\u003E dr\u00fcber\ngesprochen. Irgendwie. So halb und anschliessend f\u00fcr super befunden.\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://noqqe.de/uploads/2012/03/05/zoidberg.png\"\u003E\u003Cimg src=\"http://noqqe.de/uploads/2012/03/05/zoidberg.png\" alt=\"\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003EIch weiss nicht warum, aber irgendwie hat mich das Thema dann einfach nicht mehr\nlos gelassen. Hier probiert, da gemacht. Das Ende vom Lied war dann, dass ich\nein fast vollst\u00e4nidg migriertes Blog in Octopress lokal gebaut hatte. Dann wars\nauch schon egal und ich hab mein Wordpress eingestampft.\u003C/p\u003E\n\n\u003Cp\u003EEigentlich ging alles ganz fix.\u003C/p\u003E\n\n\u003Cul\u003E\n\u003Cli\u003ERuby 1.9.2 via rvm installiert\u003C/li\u003E\n\u003Cli\u003EDie Anleitung auf \u003Ca href=\"http://octopress.org/docs/setup/\"\u003Eoctopress.org\u003C/a\u003E befolgt\u003C/li\u003E\n\u003Cli\u003EIn Wordpress Inhalte in wordpress.xml exportiert\u003C/li\u003E\n\u003Cli\u003EDem Konvertierungstool \u003Ca href=\"https://github.com/thomasf/exitwp\"\u003Eexitwp\u003C/a\u003E vorgeworfen\u003C/li\u003E\n\u003Cli\u003EAlles in \u003Ccode\u003Esource/_posts\u003C/code\u003E platziert\u003C/li\u003E\n\u003Cli\u003Ewordpress.xml nach [Disqus.com] hochgeladen\u003C/li\u003E\n\u003Cli\u003EViele sed/awk Spielchen f\u00fcr die richtigen ImagePfade und Code Block\nFormattierung betireben\u003C/li\u003E\n\u003Cli\u003EDeployed auf Webserver\u003C/li\u003E\n\u003Cli\u003EApache Redirects f\u00fcr alte Posts eingerichtet\u003C/li\u003E\n\u003C/ul\u003E\n\n\n\u003Cp\u003ELediglich das umgemappe und durch die Gegend redirecte war m\u00fc\u00dfig. Aber naja.\nJetzt ist sch\u00f6n und auch schon umgezogen. Mir gef\u00e4llts.\u003C/p\u003E\n\n\u003Cp\u003EWas mir bei der Recherche noch aufgefallen ist:\u003C/p\u003E\n\n\u003Cblockquote\u003E\u003Cp\u003EThe \u0026lt;center\u0026gt; element is deprecated in HTML4 since 1998. Just use CSS to make it\u003Cbr /\u003Eor its wrapper a block element with a fixed width and margin: 0 auto\u003C/p\u003E\u003Cstrong\u003EBalusC,\u003C/strong\u003E \u003Ccite\u003E\u003Ca href=\"http://stackoverflow.com/questions/3912694/using-markdown-how-do-i-center-an-image-and-its-caption\"\u003EStackoverflow\u003C/a\u003E\u003C/cite\u003E\u003C/blockquote\u003E\n\n\n\u003Cp\u003EWTF. Ich habe ca. 7 Jahre danach das erste mal ein Buch gelesen, dass sich mit\nHTML besch\u00e4ftigt und es war dort schon deprecated. Das war mir nicht klar.\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Hatte von &lt;a href="http://octopress.org"&gt;Octopress&lt;/a&gt; gelesen. Dann nochmal im &lt;a href="http://k4cg.org"&gt;k4cg&lt;/a&gt; dr&#252;ber
gesprochen. Irgendwie. So halb und anschliessend f&#252;r super befunden.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://noqqe.de/uploads/2012/03/05/zoidberg.png"&gt;&lt;img src="http://noqqe.de/uploads/2012/03/05/zoidberg.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ich weiss nicht warum, aber irgendwie hat mich das Thema dann einfach nicht mehr
los gelassen. Hier probiert, da gemacht. Das Ende vom Lied war dann, dass ich
ein fast vollst&#228;nidg migriertes Blog in Octopress lokal gebaut hatte. Dann wars
auch schon egal und ich hab mein Wordpress eingestampft.&lt;/p&gt;

&lt;p&gt;Eigentlich ging alles ganz fix.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ruby 1.9.2 via rvm installiert&lt;/li&gt;
&lt;li&gt;Die Anleitung auf &lt;a href="http://octopress.org/docs/setup/"&gt;octopress.org&lt;/a&gt; befolgt&lt;/li&gt;
&lt;li&gt;In Wordpress Inhalte in wordpress.xml exportiert&lt;/li&gt;
&lt;li&gt;Dem Konvertierungstool &lt;a href="https://github.com/thomasf/exitwp"&gt;exitwp&lt;/a&gt; vorgeworfen&lt;/li&gt;
&lt;li&gt;Alles in &lt;code&gt;source/_posts&lt;/code&gt; platziert&lt;/li&gt;
&lt;li&gt;wordpress.xml nach [Disqus.com] hochgeladen&lt;/li&gt;
&lt;li&gt;Viele sed/awk Spielchen f&#252;r die richtigen ImagePfade und Code Block
Formattierung betireben&lt;/li&gt;
&lt;li&gt;Deployed auf Webserver&lt;/li&gt;
&lt;li&gt;Apache Redirects f&#252;r alte Posts eingerichtet&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Lediglich das umgemappe und durch die Gegend redirecte war m&#252;&#223;ig. Aber naja.
Jetzt ist sch&#246;n und auch schon umgezogen. Mir gef&#228;llts.&lt;/p&gt;

&lt;p&gt;Was mir bei der Recherche noch aufgefallen ist:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The &amp;lt;center&amp;gt; element is deprecated in HTML4 since 1998. Just use CSS to make it&lt;br /&gt;or its wrapper a block element with a fixed width and margin: 0 auto&lt;/p&gt;&lt;strong&gt;BalusC,&lt;/strong&gt; &lt;cite&gt;&lt;a href="http://stackoverflow.com/questions/3912694/using-markdown-how-do-i-center-an-image-and-its-caption"&gt;Stackoverflow&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;


&lt;p&gt;WTF. Ich habe ca. 7 Jahre danach das erste mal ein Buch gelesen, dass sich mit
HTML besch&#228;ftigt und es war dort schon deprecated. Das war mir nicht klar.&lt;/p&gt;</description><pubDate>Mon, 05 Mar 2012 20:22:00 GMT</pubDate><link>http://log.n0q.org/post/236541399/Switched-to-Octopress</link><guid isPermaLink="false">urn:www-soup-io:1:236541399</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>if [ $KEYWORDCOUNT -lt 25 ]; then</title>
<soup:attributes>{"tags":[],"type":"regular","title":null,"source":null,"body":"if [ $KEYWORDCOUNT -lt 25 ]; then\u003Cbr /\u003E\u00a0\u00a0\u00a0 alert_page()\u003Cbr /\u003Efi \u003Cbr /\u003E\u003Cbr /\u003ESo doof sind die nicht :/ "}</soup:attributes>
<description>&lt;p&gt;[Reposted from &lt;span class="user_container  user353600" &gt;&lt;a class="" href="http://verschwoerer.soup.io/post/235683832/Would-you-like-to-spam-the-SHIT"&gt;&lt;span class="name"&gt;verschwoerer&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user30876" &gt;&lt;a class="" href="http://astera.soup.io/post/235833086/Would-you-like-to-spam-the-SHIT"&gt;&lt;span class="name"&gt;astera&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;if [ $KEYWORDCOUNT -lt 25 ]; then&lt;br /&gt;&#160;&#160;&#160; alert_page()&lt;br /&gt;fi &lt;br /&gt;&lt;br /&gt;So doof sind die nicht :/ </description><pubDate>Sat, 03 Mar 2012 16:13:19 GMT</pubDate><link>http://log.n0q.org/post/235843483/if-KEYWORDCOUNT-lt-25-then</link><guid isPermaLink="false">urn:www-soup-io:1:235843483</guid><category domain="contenttype">regular</category></item>
<item><title>MySQL | Table Migration zu InnoDB</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2012/01/22/mysql-table-migration-zu-innodb/\"\u003EMySQL | Table Migration zu InnoDB\u003C/a\u003E","source":"http://noqqe.de/blog/2012/01/22/mysql-table-migration-zu-innodb/","body":"\u003Cp\u003EIch durfte letztens einer sch\u00f6nen Schulung zum Thema MySQL lauschen. Dabei kam viel herrum. Ein Teil davon hat sich mit verschiedenen Storage Engines besch\u00e4ftigt.\u003C/p\u003E\n\n\u003Cp\u003EIch habe mich entschieden den Gro\u00dfteil meiner Datenbanken zu InnoDB umzuwandeln. Welche Vor- und Nachteile das hatt sollte sich jeder vorher klarmachen. Stichwort: ACID und Fulltext-Search. Nat\u00fcrlich k\u00f6nnte man einfach mit ALTER arbeiten. Aber ich wollte nicht umbedingt die alten MyISAM Tables noch im FS liegen haben. Also alle Datenbanken droppen und den ge\u00e4nderten Dump wieder einspielen, sodass die Tables neu (mit InnoDB) angelegt werden.\u003C/p\u003E\n\n\u003Cp\u003EZuersteinmal eine Liste mit den generieren mit den Datenbanken die man Bearbeiten m\u00f6chte. Es ist zu beachten, dass man den mysql Table selbst nicht auf InnoDB umstellen m\u00f6chte.\u003C/p\u003E\n\n\u003Cspan\u003E\u003C/span\u003E\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E\u003Cspan class=\"line\"\u003Emysql -u root -p -e \u003Cspan class=\"s2\"\u003E\"show databases;\"\u003C/span\u003E -N --batch | grep -v ^information_schema\u003Cspan class=\"nv\"\u003E$ \u003C/span\u003E| grep -v ^mysql\u003Cspan class=\"err\"\u003E$\u003C/span\u003E\n\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EDie Liste der Datenbanken wird nachher noch hilfreich sein. Danach will man wahrscheinlich erstmal alle Dienste beenden, die auf dem MySQL zugreifen (Apache, Tomcat, whatever). In der my.cnf habe ich dann folgende Optionen f\u00fcr die InnoDB spezifiziert.\u003C/p\u003E\n\n\u003Cspan\u003E\u003C/span\u003E\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E5\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E6\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E7\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E\u003Cspan class=\"line\"\u003Edefaulot-storage-engine \u003Cspan class=\"o\"\u003E=\u003C/span\u003E InnoDB\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nv\"\u003Einnodb_buffer_pool_size\u003C/span\u003E \u003Cspan class=\"o\"\u003E=\u003C/span\u003E 16M\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nv\"\u003Einnodb_additional_mem_pool_size\u003C/span\u003E \u003Cspan class=\"o\"\u003E=\u003C/span\u003E 2M\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nv\"\u003Einnodb_log_file_size\u003C/span\u003E \u003Cspan class=\"o\"\u003E=\u003C/span\u003E 5M\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nv\"\u003Einnodb_log_buffer_size\u003C/span\u003E \u003Cspan class=\"o\"\u003E=\u003C/span\u003E 8M\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nv\"\u003Einnodb_flush_log_at_trx_commit\u003C/span\u003E \u003Cspan class=\"o\"\u003E=\u003C/span\u003E 1\n\u003C/span\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"nv\"\u003Einnodb_lock_wait_timeout\u003C/span\u003E \u003Cspan class=\"o\"\u003E=\u003C/span\u003E 50\n\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EAnschliessend den Dump erstellen und alle ENGINE=MyISAM durch InnoDB ersetzen:\u003C/p\u003E\n\n\u003Cspan\u003E\u003C/span\u003E\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E\u003Cspan class=\"line\"\u003Emysqldump -u root -p \u0026gt; all-databases.sql\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Esed -i -e \u003Cspan class=\"s1\"\u003E's#ENGINE=MyISAM#ENGINE=InnoDB#g'\u003C/span\u003E all-databases.sql\n\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003E\u003Cstrong\u003EVorsicht. Hier ist mysql als Datenbank mit gedumped!\u003C/strong\u003E Mir ist dabei keine wirklich einfache Zeile eingefallen die mit Suche/Ersetze Spielchen mysql ausschliesst. Es gibt bei mysqldump die Option \u201c\u2013ignore-table=\u201d aber auch hier h\u00e4tte ich jeden mysql Table einzeln nennen m\u00fcssen. Ich hab die Datenbank dann einfach per hand aus dem Dump herausgel\u00f6scht.\u003C/p\u003E\n\n\u003Cp\u003EAu\u00dferdem sollte man seinen Datenbank Dump nach FULLTEXT durchsuchen, da dieser von InnoDB nicht unterst\u00fctzt wird. In meinem Fall hat es nur ein altes Forum das niemand mehr benutzt betroffen, weshalb ich die Zeile einfach l\u00f6schen konnte.\u003C/p\u003E\n\n\u003Cspan\u003E\u003C/span\u003E\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E\u003Cspan class=\"line\"\u003Egrep \u003Cspan class=\"s2\"\u003E\"FULLTEXT\"\u003C/span\u003E all-databases.sql\n\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EUm jetzt alle Datenbanken zu droppen hab ich mir folgende Line gebastelt:\u003C/p\u003E\n\n\u003Cspan\u003E\u003C/span\u003E\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E\u003Cspan class=\"line\"\u003E\u003Cspan class=\"k\"\u003Efor \u003C/span\u003Ex in \u003Cspan class=\"k\"\u003E$(\u003C/span\u003Emysql -u root -phierstehteinpasswort -e \u003Cspan class=\"s2\"\u003E\"show databases;\"\u003C/span\u003E -N --batch | grep -v ^information_schema | grep -v ^mysql\u003Cspan class=\"nv\"\u003E$)\u003C/span\u003E ; \u003Cspan class=\"k\"\u003Edo \u003C/span\u003Emysql -u root -phierstehteinpasswort -e \u003Cspan class=\"s2\"\u003E\"drop database $x ; \"\u003C/span\u003E --batch  ; \u003Cspan class=\"k\"\u003Edone\u003C/span\u003E\n\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003ENach der Bearbeitung kann man den Dump mit der neuen Engine f\u00fcr die Tables wieder einspielen:\u003C/p\u003E\n\n\u003Cspan\u003E\u003C/span\u003E\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E\u003Cspan class=\"line\"\u003Emysql -u root -p \u0026lt; all-databases.sql\n\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E"}</soup:attributes>
<description>&lt;p&gt;Ich durfte letztens einer sch&#246;nen Schulung zum Thema MySQL lauschen. Dabei kam viel herrum. Ein Teil davon hat sich mit verschiedenen Storage Engines besch&#228;ftigt.&lt;/p&gt;

&lt;p&gt;Ich habe mich entschieden den Gro&#223;teil meiner Datenbanken zu InnoDB umzuwandeln. Welche Vor- und Nachteile das hatt sollte sich jeder vorher klarmachen. Stichwort: ACID und Fulltext-Search. Nat&#252;rlich k&#246;nnte man einfach mit ALTER arbeiten. Aber ich wollte nicht umbedingt die alten MyISAM Tables noch im FS liegen haben. Also alle Datenbanken droppen und den ge&#228;nderten Dump wieder einspielen, sodass die Tables neu (mit InnoDB) angelegt werden.&lt;/p&gt;

&lt;p&gt;Zuersteinmal eine Liste mit den generieren mit den Datenbanken die man Bearbeiten m&#246;chte. Es ist zu beachten, dass man den mysql Table selbst nicht auf InnoDB umstellen m&#246;chte.&lt;/p&gt;

&lt;span&gt;&lt;/span&gt;&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="line"&gt;mysql -u root -p -e &lt;span class="s2"&gt;"show databases;"&lt;/span&gt; -N --batch | grep -v ^information_schema&lt;span class="nv"&gt;$ &lt;/span&gt;| grep -v ^mysql&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Die Liste der Datenbanken wird nachher noch hilfreich sein. Danach will man wahrscheinlich erstmal alle Dienste beenden, die auf dem MySQL zugreifen (Apache, Tomcat, whatever). In der my.cnf habe ich dann folgende Optionen f&#252;r die InnoDB spezifiziert.&lt;/p&gt;

&lt;span&gt;&lt;/span&gt;&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;span class="line-number"&gt;6&lt;/span&gt;
&lt;span class="line-number"&gt;7&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="line"&gt;defaulot-storage-engine &lt;span class="o"&gt;=&lt;/span&gt; InnoDB
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="nv"&gt;innodb_buffer_pool_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 16M
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="nv"&gt;innodb_additional_mem_pool_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 2M
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="nv"&gt;innodb_log_file_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 5M
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="nv"&gt;innodb_log_buffer_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 8M
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="nv"&gt;innodb_flush_log_at_trx_commit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 1
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="nv"&gt;innodb_lock_wait_timeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 50
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Anschliessend den Dump erstellen und alle ENGINE=MyISAM durch InnoDB ersetzen:&lt;/p&gt;

&lt;span&gt;&lt;/span&gt;&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="line"&gt;mysqldump -u root -p &amp;gt; all-databases.sql
&lt;/span&gt;&lt;span class="line"&gt;sed -i -e &lt;span class="s1"&gt;'s#ENGINE=MyISAM#ENGINE=InnoDB#g'&lt;/span&gt; all-databases.sql
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Vorsicht. Hier ist mysql als Datenbank mit gedumped!&lt;/strong&gt; Mir ist dabei keine wirklich einfache Zeile eingefallen die mit Suche/Ersetze Spielchen mysql ausschliesst. Es gibt bei mysqldump die Option &#8220;&#8211;ignore-table=&#8221; aber auch hier h&#228;tte ich jeden mysql Table einzeln nennen m&#252;ssen. Ich hab die Datenbank dann einfach per hand aus dem Dump herausgel&#246;scht.&lt;/p&gt;

&lt;p&gt;Au&#223;erdem sollte man seinen Datenbank Dump nach FULLTEXT durchsuchen, da dieser von InnoDB nicht unterst&#252;tzt wird. In meinem Fall hat es nur ein altes Forum das niemand mehr benutzt betroffen, weshalb ich die Zeile einfach l&#246;schen konnte.&lt;/p&gt;

&lt;span&gt;&lt;/span&gt;&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="line"&gt;grep &lt;span class="s2"&gt;"FULLTEXT"&lt;/span&gt; all-databases.sql
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Um jetzt alle Datenbanken zu droppen hab ich mir folgende Line gebastelt:&lt;/p&gt;

&lt;span&gt;&lt;/span&gt;&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="line"&gt;&lt;span class="k"&gt;for &lt;/span&gt;x in &lt;span class="k"&gt;$(&lt;/span&gt;mysql -u root -phierstehteinpasswort -e &lt;span class="s2"&gt;"show databases;"&lt;/span&gt; -N --batch | grep -v ^information_schema | grep -v ^mysql&lt;span class="nv"&gt;$)&lt;/span&gt; ; &lt;span class="k"&gt;do &lt;/span&gt;mysql -u root -phierstehteinpasswort -e &lt;span class="s2"&gt;"drop database $x ; "&lt;/span&gt; --batch  ; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Nach der Bearbeitung kann man den Dump mit der neuen Engine f&#252;r die Tables wieder einspielen:&lt;/p&gt;

&lt;span&gt;&lt;/span&gt;&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="line"&gt;mysql -u root -p &amp;lt; all-databases.sql
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><pubDate>Sun, 22 Jan 2012 14:09:07 GMT</pubDate><link>http://log.n0q.org/post/236541401/MySQL-Table-Migration-zu-InnoDB</link><guid isPermaLink="false">urn:www-soup-io:1:236541401</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>MySQL | Table Migration zu InnoDB</title>
<soup:attributes>{"tags":["Bash","Debian","General","Linux","ubuntuusers","acid","database","datenbank","fulltext","innodb","Migration","myisam","mysql","mysqldump","sql","tables"],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/archives/1850\"\u003EMySQL | Table Migration zu InnoDB\u003C/a\u003E","source":"http://noqqe.de/archives/1850","body":"\u003Cp\u003EIch durfte letztens einer sch\u00f6nen Schulung zum Thema MySQL lauschen. Dabei kam viel herrum. Ein Teil davon hat sich mit verschiedenen Storage Engines besch\u00e4ftigt.\u003C/p\u003E\n\u003Cp\u003EIch habe mich entschieden den Gro\u00dfteil meiner Datenbanken zu InnoDB umzuwandeln. Welche Vor- und Nachteile das hatt sollte sich jeder vorher klarmachen. Stichwort: ACID und Fulltext-Search. Nat\u00fcrlich k\u00f6nnte man einfach mit ALTER arbeiten. Aber ich wollte nicht umbedingt die alten MyISAM Tables noch im FS liegen haben. Also alle Datenbanken droppen und den ge\u00e4nderten Dump wieder einspielen, sodass die Tables neu (mit InnoDB) angelegt werden.\u003C/p\u003E\n\u003Cp\u003EZuersteinmal eine Liste mit den generieren mit den Datenbanken die man Bearbeiten m\u00f6chte. Es ist zu beachten, dass man den mysql Table selbst nicht auf InnoDB umstellen m\u00f6chte.\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003Emysql -u root -p -e \"show databases;\" -N --batch | grep -v ^information_schema$ | grep -v ^mysql$\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003EDie Liste der Datenbanken wird nachher noch hilfreich sein. Danach will man wahrscheinlich erstmal alle Dienste beenden, die auf dem MySQL zugreifen (Apache, Tomcat, whatever). In der my.cnf habe ich dann folgende Optionen f\u00fcr die InnoDB spezifiziert.\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003Edefaulot-storage-engine = InnoDB\u003Cbr /\u003E\ninnodb_buffer_pool_size = 16M\u003Cbr /\u003E\ninnodb_additional_mem_pool_size = 2M\u003Cbr /\u003E\ninnodb_log_file_size = 5M\u003Cbr /\u003E\ninnodb_log_buffer_size = 8M\u003Cbr /\u003E\ninnodb_flush_log_at_trx_commit = 1\u003Cbr /\u003E\ninnodb_lock_wait_timeout = 50\u003Cbr /\u003E\n\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003EAnschliessend den Dump erstellen und alle ENGINE=MyISAM durch InnoDB ersetzen:\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003Emysqldump -u root -p \u0026gt; all-databases.sql\u003Cbr /\u003E\nsed -i -e 's#ENGINE=MyISAM#ENGINE=InnoDB#g' all-databases.sql\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cb\u003EVorsicht. Hier ist mysql als Datenbank mit gedumped!\u003C/b\u003E Mir ist dabei keine wirklich einfache Zeile eingefallen die mit Suche/Ersetze Spielchen mysql ausschliesst. Es gibt bei mysqldump die Option \u201c\u2013ignore-table=\u201d aber auch hier h\u00e4tte ich jeden mysql Table einzeln nennen m\u00fcssen. Ich hab die Datenbank dann einfach per hand aus dem Dump herausgel\u00f6scht. \u003C/p\u003E\n\u003Cp\u003EAu\u00dferdem sollte man seinen Datenbank Dump nach FULLTEXT durchsuchen, da dieser von InnoDB nicht unterst\u00fctzt wird. In meinem Fall hat es nur ein altes Forum das niemand mehr benutzt betroffen, weshalb ich die Zeile einfach l\u00f6schen konnte. \u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003Egrep \"FULLTEXT\" all-databases.sql\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003EUm jetzt alle Datenbanken zu droppen hab ich mir folgende Line gebastelt:\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003Efor x in $(mysql -u root -phierstehteinpasswort -e \"show databases;\" -N --batch | grep -v ^information_schema | grep -v ^mysql$) ; do mysql -u root -phierstehteinpasswort -e \"drop database $x ; \" --batch  ; done\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003ENach der Bearbeitung kann man den Dump mit der neuen Engine f\u00fcr die Tables wieder einspielen:\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003Emysql -u root -p \u0026lt; all-databases.sql\u003C/code\u003E\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Ich durfte letztens einer sch&#246;nen Schulung zum Thema MySQL lauschen. Dabei kam viel herrum. Ein Teil davon hat sich mit verschiedenen Storage Engines besch&#228;ftigt.&lt;/p&gt;
&lt;p&gt;Ich habe mich entschieden den Gro&#223;teil meiner Datenbanken zu InnoDB umzuwandeln. Welche Vor- und Nachteile das hatt sollte sich jeder vorher klarmachen. Stichwort: ACID und Fulltext-Search. Nat&#252;rlich k&#246;nnte man einfach mit ALTER arbeiten. Aber ich wollte nicht umbedingt die alten MyISAM Tables noch im FS liegen haben. Also alle Datenbanken droppen und den ge&#228;nderten Dump wieder einspielen, sodass die Tables neu (mit InnoDB) angelegt werden.&lt;/p&gt;
&lt;p&gt;Zuersteinmal eine Liste mit den generieren mit den Datenbanken die man Bearbeiten m&#246;chte. Es ist zu beachten, dass man den mysql Table selbst nicht auf InnoDB umstellen m&#246;chte.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mysql -u root -p -e "show databases;" -N --batch | grep -v ^information_schema$ | grep -v ^mysql$&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Die Liste der Datenbanken wird nachher noch hilfreich sein. Danach will man wahrscheinlich erstmal alle Dienste beenden, die auf dem MySQL zugreifen (Apache, Tomcat, whatever). In der my.cnf habe ich dann folgende Optionen f&#252;r die InnoDB spezifiziert.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;defaulot-storage-engine = InnoDB&lt;br /&gt;
innodb_buffer_pool_size = 16M&lt;br /&gt;
innodb_additional_mem_pool_size = 2M&lt;br /&gt;
innodb_log_file_size = 5M&lt;br /&gt;
innodb_log_buffer_size = 8M&lt;br /&gt;
innodb_flush_log_at_trx_commit = 1&lt;br /&gt;
innodb_lock_wait_timeout = 50&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Anschliessend den Dump erstellen und alle ENGINE=MyISAM durch InnoDB ersetzen:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mysqldump -u root -p &amp;gt; all-databases.sql&lt;br /&gt;
sed -i -e 's#ENGINE=MyISAM#ENGINE=InnoDB#g' all-databases.sql&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Vorsicht. Hier ist mysql als Datenbank mit gedumped!&lt;/b&gt; Mir ist dabei keine wirklich einfache Zeile eingefallen die mit Suche/Ersetze Spielchen mysql ausschliesst. Es gibt bei mysqldump die Option &#8220;&#8211;ignore-table=&#8221; aber auch hier h&#228;tte ich jeden mysql Table einzeln nennen m&#252;ssen. Ich hab die Datenbank dann einfach per hand aus dem Dump herausgel&#246;scht. &lt;/p&gt;
&lt;p&gt;Au&#223;erdem sollte man seinen Datenbank Dump nach FULLTEXT durchsuchen, da dieser von InnoDB nicht unterst&#252;tzt wird. In meinem Fall hat es nur ein altes Forum das niemand mehr benutzt betroffen, weshalb ich die Zeile einfach l&#246;schen konnte. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;grep "FULLTEXT" all-databases.sql&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Um jetzt alle Datenbanken zu droppen hab ich mir folgende Line gebastelt:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;for x in $(mysql -u root -phierstehteinpasswort -e "show databases;" -N --batch | grep -v ^information_schema | grep -v ^mysql$) ; do mysql -u root -phierstehteinpasswort -e "drop database $x ; " --batch  ; done&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Nach der Bearbeitung kann man den Dump mit der neuen Engine f&#252;r die Tables wieder einspielen:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mysql -u root -p &amp;lt; all-databases.sql&lt;/code&gt;&lt;/p&gt;</description><pubDate>Sun, 22 Jan 2012 13:09:07 GMT</pubDate><link>http://log.n0q.org/post/225065961/MySQL-Table-Migration-zu-InnoDB</link><guid isPermaLink="false">urn:www-soup-io:1:225065961</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category><category domain="tag">bash</category><category domain="tag">debian</category><category domain="tag">general</category><category domain="tag">linux</category><category domain="tag">ubuntuusers</category><category domain="tag">acid</category><category domain="tag">database</category><category domain="tag">datenbank</category><category domain="tag">fulltext</category><category domain="tag">innodb</category><category domain="tag">migration</category><category domain="tag">myisam</category><category domain="tag">mysql</category><category domain="tag">mysqldump</category><category domain="tag">sql</category><category domain="tag">tables</category></item>
<item><title>GNU Parallel</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2012/01/08/gnu-parallel/\"\u003EGNU Parallel\u003C/a\u003E","source":"http://noqqe.de/blog/2012/01/08/gnu-parallel/","body":"\u003Cp\u003EVom \u003Ca href=\"http://www.gnu.org/software/parallel/\"\u003EGNU Parallel Projekt\u003C/a\u003E habe ich vor einiger Zeit in der Arbeit so am Rande etwas mitbekommen. Nachdem ich mir die gute \u003Ca href=\"http://www.gnu.org/software/parallel/man.html\"\u003EDokumentation\u003C/a\u003E etwas angeschaut habe, hab ich Lust bekommen das mal selbst auszuprobieren.\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://noqqe.de/uploads/2012/01/logo-gray+black300.png\"\u003E\u003Cimg src=\"http://noqqe.de/uploads/2012/01/logo-gray+black300.png\" alt=\"\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003EIch dachte es w\u00e4re eine gute Idee einfach ein paar md5 Summen zu bilden.\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E$ time seq 1 10000 | parallel 'echo {}| md5sum \u0026amp;\u0026gt; /dev/null '\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Ereal  0m20.102s\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Euser  0m35.082s\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Esys   0m24.918s\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003ENun. Ich bilde nicht so oft 10.000 md5 Summen. War das jetzt viel? Oder wenig? Um einen Vergleichswert zu haben sollte ich wohl auch mal nachsehen, wie das ohne Parallel so aussieht.\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E$ time for x in $(seq 1 10000); do echo $x | md5sum \u0026amp;\u0026gt; /dev/null; done\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Ereal  0m13.504s\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Euser  0m2.368s\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Esys   0m3.948s\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EZiemlich seltsam. Obwohl ich 10.000 md5 Summen gebildet habe war die sequenzielle Methode schneller als die Parallele. Zumindest dachte ich zu dem Punkt noch das es seltsam ist. Aber an was lag das. Ich hab mir dann \u00fcberlegt ob ich nicht vielleicht doch noch eine andere Aufgabe als md5 Summenbildung abbilden sollte. Ich entschied mich dazu 1000 mal eine 100.000 Zeichen lange Zeichenkette durch gzip zu schubsen.\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E$ time seq 1 1000 | parallel 'cat /dev/urandom | head -c 100000 | gzip \u0026amp;\u0026gt; /dev/null'\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Ereal  0m7.845s\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Euser  0m4.064s\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Esys   0m20.485s\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003E7 Sekunden. Sieht eigentlich ganz nett aus. Und in der Schleife sequenziell?\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E2\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E3\u003C/span\u003E\n\u003Cspan class=\"line-number\"\u003E4\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E$ time for x in $(seq 1 1000); do cat /dev/urandom | head -c 100000 | gzip \u0026amp;\u0026gt; /dev/null; done\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Ereal  0m31.869s\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Euser  0m8.301s\n\u003C/span\u003E\u003Cspan class=\"line\"\u003Esys   0m33.658s\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EOkay. Jetzt weiss ich, das GNU Parallel eher was f\u00fcr (rechen-)intensivere Aufgaben ist als f\u00fcr viele kleine Prozesse. Anscheinend braucht das Parsing des zus\u00e4tzlichen Binaries doch etwas zu lange um einen Prozess zu ordnen der sowieso nach sehr kurzer Zeit wieder beendet ist. Alles in allem gef\u00e4llt mir GNU Parallel aber sehr gut wenn man weiss f\u00fcr was man es einsetzen muss :)\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Vom &lt;a href="http://www.gnu.org/software/parallel/"&gt;GNU Parallel Projekt&lt;/a&gt; habe ich vor einiger Zeit in der Arbeit so am Rande etwas mitbekommen. Nachdem ich mir die gute &lt;a href="http://www.gnu.org/software/parallel/man.html"&gt;Dokumentation&lt;/a&gt; etwas angeschaut habe, hab ich Lust bekommen das mal selbst auszuprobieren.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://noqqe.de/uploads/2012/01/logo-gray+black300.png"&gt;&lt;img src="http://noqqe.de/uploads/2012/01/logo-gray+black300.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ich dachte es w&#228;re eine gute Idee einfach ein paar md5 Summen zu bilden.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;$ time seq 1 10000 | parallel 'echo {}| md5sum &amp;amp;&amp;gt; /dev/null '
&lt;/span&gt;&lt;span class="line"&gt;real  0m20.102s
&lt;/span&gt;&lt;span class="line"&gt;user  0m35.082s
&lt;/span&gt;&lt;span class="line"&gt;sys   0m24.918s&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Nun. Ich bilde nicht so oft 10.000 md5 Summen. War das jetzt viel? Oder wenig? Um einen Vergleichswert zu haben sollte ich wohl auch mal nachsehen, wie das ohne Parallel so aussieht.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;$ time for x in $(seq 1 10000); do echo $x | md5sum &amp;amp;&amp;gt; /dev/null; done
&lt;/span&gt;&lt;span class="line"&gt;real  0m13.504s
&lt;/span&gt;&lt;span class="line"&gt;user  0m2.368s
&lt;/span&gt;&lt;span class="line"&gt;sys   0m3.948s&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ziemlich seltsam. Obwohl ich 10.000 md5 Summen gebildet habe war die sequenzielle Methode schneller als die Parallele. Zumindest dachte ich zu dem Punkt noch das es seltsam ist. Aber an was lag das. Ich hab mir dann &#252;berlegt ob ich nicht vielleicht doch noch eine andere Aufgabe als md5 Summenbildung abbilden sollte. Ich entschied mich dazu 1000 mal eine 100.000 Zeichen lange Zeichenkette durch gzip zu schubsen.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;$ time seq 1 1000 | parallel 'cat /dev/urandom | head -c 100000 | gzip &amp;amp;&amp;gt; /dev/null'
&lt;/span&gt;&lt;span class="line"&gt;real  0m7.845s
&lt;/span&gt;&lt;span class="line"&gt;user  0m4.064s
&lt;/span&gt;&lt;span class="line"&gt;sys   0m20.485s&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;7 Sekunden. Sieht eigentlich ganz nett aus. Und in der Schleife sequenziell?&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;$ time for x in $(seq 1 1000); do cat /dev/urandom | head -c 100000 | gzip &amp;amp;&amp;gt; /dev/null; done
&lt;/span&gt;&lt;span class="line"&gt;real  0m31.869s
&lt;/span&gt;&lt;span class="line"&gt;user  0m8.301s
&lt;/span&gt;&lt;span class="line"&gt;sys   0m33.658s&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Okay. Jetzt weiss ich, das GNU Parallel eher was f&#252;r (rechen-)intensivere Aufgaben ist als f&#252;r viele kleine Prozesse. Anscheinend braucht das Parsing des zus&#228;tzlichen Binaries doch etwas zu lange um einen Prozess zu ordnen der sowieso nach sehr kurzer Zeit wieder beendet ist. Alles in allem gef&#228;llt mir GNU Parallel aber sehr gut wenn man weiss f&#252;r was man es einsetzen muss :)&lt;/p&gt;</description><pubDate>Sun, 08 Jan 2012 13:47:14 GMT</pubDate><link>http://log.n0q.org/post/236541406/GNU-Parallel</link><guid isPermaLink="false">urn:www-soup-io:1:236541406</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>GNU Parallel</title>
<soup:attributes>{"tags":["Bash","Linux","Web","ubuntuusers","gnu parallel","gzip","md5","parallel","seq","test"],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/archives/1846\"\u003EGNU Parallel\u003C/a\u003E","source":"http://noqqe.de/archives/1846","body":"\u003Cp\u003EVom \u003Ca href=\"http://www.gnu.org/software/parallel/\"\u003EGNU Parallel Projekt\u003C/a\u003E habe ich vor einiger Zeit in der Arbeit so am Rande etwas mitbekommen. Nachdem ich mir die gute \u003Ca href=\"http://www.gnu.org/software/parallel/man.html\"\u003EDokumentation\u003C/a\u003E etwas angeschaut habe, hab ich Lust bekommen das mal selbst auszuprobieren.\u003C/p\u003E\n\u003Cp\u003E\u003C/p\u003E\u003Ca href=\"http://blog.n0q.org/wp-uploads/2012/01/logo-gray+black300.png\"\u003E\u003Cimg title=\"logo-gray+black300\" class=\"alignnone size-full wp-image-1847\" src=\"http://blog.n0q.org/wp-uploads/2012/01/logo-gray+black300.png\" height=\"191\" alt=\"\" width=\"300\" /\u003E\u003C/a\u003E\u003Cp\u003E\u003C/p\u003E\n\u003Cp\u003EIch dachte es w\u00e4re eine gute Idee einfach ein paar md5 Summen zu bilden.\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003E$ time seq 1 10000 | parallel 'echo {}| md5sum \u0026amp;\u0026gt; /dev/null '\u003Cbr /\u003E\nreal\t0m20.102s\u003Cbr /\u003E\nuser\t0m35.082s\u003Cbr /\u003E\nsys\t0m24.918s\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003ENun. Ich bilde nicht so oft 10.000 md5 Summen. War das jetzt viel? Oder wenig? Um einen Vergleichswert zu haben sollte ich wohl auch mal nachsehen, wie das ohne Parallel so aussieht. \u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003E$ time for x in $(seq 1 10000); do echo $x | md5sum \u0026amp;\u0026gt; /dev/null; done\u003Cbr /\u003E\nreal\t0m13.504s\u003Cbr /\u003E\nuser\t0m2.368s\u003Cbr /\u003E\nsys\t0m3.948s\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003EZiemlich seltsam. Obwohl ich 10.000 md5 Summen gebildet habe war die sequenzielle Methode schneller als die Parallele. Zumindest dachte ich zu dem Punkt noch das es seltsam ist. Aber an was lag das. Ich hab mir dann \u00fcberlegt ob ich nicht vielleicht doch noch eine andere Aufgabe als md5 Summenbildung abbilden sollte. Ich entschied mich dazu 1000 mal eine 100.000 Zeichen lange Zeichenkette durch gzip zu schubsen. \u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003E$ time seq 1 1000 | parallel 'cat /dev/urandom | head -c 100000 | gzip \u0026amp;\u0026gt; /dev/null'\u003Cbr /\u003E\nreal\t0m7.845s\u003Cbr /\u003E\nuser\t0m4.064s\u003Cbr /\u003E\nsys\t0m20.485s\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E7 Sekunden. Sieht eigentlich ganz nett aus. Und in der Schleife sequenziell? \u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003E$ time for x in $(seq 1 1000); do cat /dev/urandom | head -c 100000 | gzip \u0026amp;\u0026gt; /dev/null; done\u003Cbr /\u003E\nreal\t0m31.869s\u003Cbr /\u003E\nuser\t0m8.301s\u003Cbr /\u003E\nsys\t0m33.658s\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003EOkay. Jetzt weiss ich, das GNU Parallel eher was f\u00fcr (rechen-)intensivere Aufgaben ist als f\u00fcr viele kleine Prozesse. Anscheinend braucht das Parsing des zus\u00e4tzlichen Binaries doch etwas zu lange um einen Prozess zu ordnen der sowieso nach sehr kurzer Zeit wieder beendet ist. Alles in allem gef\u00e4llt mir GNU Parallel aber sehr gut wenn man weiss f\u00fcr was man es einsetzen muss :)\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Vom &lt;a href="http://www.gnu.org/software/parallel/"&gt;GNU Parallel Projekt&lt;/a&gt; habe ich vor einiger Zeit in der Arbeit so am Rande etwas mitbekommen. Nachdem ich mir die gute &lt;a href="http://www.gnu.org/software/parallel/man.html"&gt;Dokumentation&lt;/a&gt; etwas angeschaut habe, hab ich Lust bekommen das mal selbst auszuprobieren.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;a href="http://blog.n0q.org/wp-uploads/2012/01/logo-gray+black300.png"&gt;&lt;img class="alignnone size-full wp-image-1847" title="logo-gray+black300" src="http://blog.n0q.org/wp-uploads/2012/01/logo-gray+black300.png" height="191" alt="" width="300" /&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Ich dachte es w&#228;re eine gute Idee einfach ein paar md5 Summen zu bilden.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ time seq 1 10000 | parallel 'echo {}| md5sum &amp;amp;&amp;gt; /dev/null '&lt;br /&gt;
real	0m20.102s&lt;br /&gt;
user	0m35.082s&lt;br /&gt;
sys	0m24.918s&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Nun. Ich bilde nicht so oft 10.000 md5 Summen. War das jetzt viel? Oder wenig? Um einen Vergleichswert zu haben sollte ich wohl auch mal nachsehen, wie das ohne Parallel so aussieht. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ time for x in $(seq 1 10000); do echo $x | md5sum &amp;amp;&amp;gt; /dev/null; done&lt;br /&gt;
real	0m13.504s&lt;br /&gt;
user	0m2.368s&lt;br /&gt;
sys	0m3.948s&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ziemlich seltsam. Obwohl ich 10.000 md5 Summen gebildet habe war die sequenzielle Methode schneller als die Parallele. Zumindest dachte ich zu dem Punkt noch das es seltsam ist. Aber an was lag das. Ich hab mir dann &#252;berlegt ob ich nicht vielleicht doch noch eine andere Aufgabe als md5 Summenbildung abbilden sollte. Ich entschied mich dazu 1000 mal eine 100.000 Zeichen lange Zeichenkette durch gzip zu schubsen. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ time seq 1 1000 | parallel 'cat /dev/urandom | head -c 100000 | gzip &amp;amp;&amp;gt; /dev/null'&lt;br /&gt;
real	0m7.845s&lt;br /&gt;
user	0m4.064s&lt;br /&gt;
sys	0m20.485s&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;7 Sekunden. Sieht eigentlich ganz nett aus. Und in der Schleife sequenziell? &lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ time for x in $(seq 1 1000); do cat /dev/urandom | head -c 100000 | gzip &amp;amp;&amp;gt; /dev/null; done&lt;br /&gt;
real	0m31.869s&lt;br /&gt;
user	0m8.301s&lt;br /&gt;
sys	0m33.658s&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Okay. Jetzt weiss ich, das GNU Parallel eher was f&#252;r (rechen-)intensivere Aufgaben ist als f&#252;r viele kleine Prozesse. Anscheinend braucht das Parsing des zus&#228;tzlichen Binaries doch etwas zu lange um einen Prozess zu ordnen der sowieso nach sehr kurzer Zeit wieder beendet ist. Alles in allem gef&#228;llt mir GNU Parallel aber sehr gut wenn man weiss f&#252;r was man es einsetzen muss :)&lt;/p&gt;</description><pubDate>Sun, 08 Jan 2012 12:47:14 GMT</pubDate><link>http://log.n0q.org/post/215020559/GNU-Parallel</link><guid isPermaLink="false">urn:www-soup-io:1:215020559</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category><category domain="tag">bash</category><category domain="tag">linux</category><category domain="tag">web</category><category domain="tag">ubuntuusers</category><category domain="tag">gnu parallel</category><category domain="tag">gzip</category><category domain="tag">md5</category><category domain="tag">parallel</category><category domain="tag">seq</category><category domain="tag">test</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://1.asset.soup.io/asset/2603/5777_7018_400.png"/>
<title>that's it. another childhood story which I'll never watch again.</title>
<soup:attributes>{"tags":[],"type":"image","source":null,"body":"that's it. another childhood story which I'll never watch again.","url":"http://1.asset.soup.io/asset/2603/5777_7018.png"}</soup:attributes>
<description>&lt;p&gt;&lt;a href=""&gt;&lt;img alt="5777_7018_400" height="474" src="http://1.asset.soup.io/asset/2603/5777_7018_400.png" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;that's it. another childhood story which I'll never watch again.&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user559155" &gt;&lt;a class="" href="http://szarrukin.soup.io/post/197035130/thats-it-another-childhood-story-which-Ill"&gt;&lt;span class="name"&gt;szarrukin&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user302057" &gt;&lt;a class="" href="http://TheoRettich.soup.io/post/213217877/thats-it-another-childhood-story-which-Ill"&gt;&lt;span class="name"&gt;TheoRettich&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Sat, 07 Jan 2012 11:00:18 GMT</pubDate><link>http://log.n0q.org/post/213715583/thats-it-another-childhood-story-which-Ill</link><guid isPermaLink="false">urn:www-soup-io:1:213715583</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://e.asset.soup.io/asset/2684/9790_5e78_400.jpeg"/>
<title>(Image)</title>
<soup:attributes>{"tags":[],"type":"image","source":null,"body":null,"url":"http://e.asset.soup.io/asset/2684/9790_5e78.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href=""&gt;&lt;img alt="9790_5e78_400" height="692" src="http://e.asset.soup.io/asset/2684/9790_5e78_400.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user536861" &gt;&lt;a class="" href="http://muv.soup.io/post/203029784/Image"&gt;&lt;span class="name"&gt;muv&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user226937" &gt;&lt;a class="" href="http://awezone.soup.io/post/203150228/Image"&gt;&lt;span class="name"&gt;awezone&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Tue, 27 Dec 2011 20:53:55 GMT</pubDate><link>http://log.n0q.org/post/203329591/Image</link><guid isPermaLink="false">urn:www-soup-io:1:203329591</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://5.asset.soup.io/asset/2683/5061_a90b.jpeg"/>
<title>(Image)</title>
<soup:attributes>{"tags":[],"type":"image","source":"http://www.flickr.com/photos/phineasx/4271800569/in/faves-aluslaw/","body":null,"url":"http://5.asset.soup.io/asset/2683/5061_a90b.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/phineasx/4271800569/in/faves-aluslaw/"&gt;&lt;img alt="5061_a90b" height="500" src="http://5.asset.soup.io/asset/2683/5061_a90b.jpeg" width="393" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user92029" &gt;&lt;a class="" href="http://Aluslaw.soup.io/post/202927474/Image"&gt;&lt;span class="name"&gt;Aluslaw&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user503882" &gt;&lt;a class="" href="http://wartemal.soup.io/post/202963995/Image"&gt;&lt;span class="name"&gt;wartemal&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Mon, 26 Dec 2011 14:55:01 GMT</pubDate><link>http://log.n0q.org/post/203024228/Image</link><guid isPermaLink="false">urn:www-soup-io:1:203024228</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://9.asset.soup.io/asset/2676/9433_99bb_400.png"/>
<title>(Image)</title>
<soup:attributes>{"tags":[],"type":"image","source":"http://24.media.tumblr.com/tumblr_lwks3gDWKQ1qc62xio1_500.png","body":null,"url":"http://9.asset.soup.io/asset/2676/9433_99bb.png"}</soup:attributes>
<description>&lt;p&gt;&lt;a href="http://24.media.tumblr.com/tumblr_lwks3gDWKQ1qc62xio1_500.png"&gt;&lt;img alt="9433_99bb_400" height="261" src="http://9.asset.soup.io/asset/2676/9433_99bb_400.png" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user437857" &gt;&lt;a class="" href="http://vixen17.soup.io/post/202510016/Image"&gt;&lt;span class="name"&gt;vixen17&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user503882" &gt;&lt;a class="" href="http://wartemal.soup.io/post/202967887/Image"&gt;&lt;span class="name"&gt;wartemal&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Mon, 26 Dec 2011 14:54:34 GMT</pubDate><link>http://log.n0q.org/post/203024166/Image</link><guid isPermaLink="false">urn:www-soup-io:1:203024166</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://8.asset.soup.io/asset/2669/6696_1305_400.jpeg"/>
<title>Engineering</title>
<soup:attributes>{"tags":[],"type":"image","source":"http://www.adafruit.com/","body":"\u003Cp\u003EEngineering\u003C/p\u003E","url":"http://8.asset.soup.io/asset/2669/6696_1305.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href="http://www.adafruit.com/"&gt;&lt;img alt="6696_1305_400" height="246" src="http://8.asset.soup.io/asset/2669/6696_1305_400.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;p&gt;Engineering&lt;/p&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user63883" &gt;&lt;a class="" href="http://sawb.soup.io/post/201990043/Engineering"&gt;&lt;span class="name"&gt;sawb&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user31661" &gt;&lt;a class="" href="http://soup.never-afk.de/post/202328113/Engineering"&gt;&lt;span class="name"&gt;bitstacker&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Thu, 22 Dec 2011 22:13:54 GMT</pubDate><link>http://log.n0q.org/post/202427711/Engineering</link><guid isPermaLink="false">urn:www-soup-io:1:202427711</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://0.asset.soup.io/asset/2673/7376_964e.jpeg"/>
<title>Penny! Penny! Penny!</title>
<soup:attributes>{"tags":[],"type":"image","source":null,"body":"Penny! Penny! Penny!","url":"http://0.asset.soup.io/asset/2673/7376_964e.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href=""&gt;&lt;img alt="7376_964e" height="576" src="http://0.asset.soup.io/asset/2673/7376_964e.jpeg" width="371" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Penny! Penny! Penny!&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user51" &gt;&lt;a class="" href="http://soup.johl.io/post/202405037/Penny-Penny-Penny"&gt;&lt;span class="name"&gt;johl&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user192494" &gt;&lt;a class="" href="http://this-looks-shopped.soup.io/post/202405455/Penny-Penny-Penny"&gt;&lt;span class="name"&gt;this-looks-shopped&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Thu, 22 Dec 2011 22:05:24 GMT</pubDate><link>http://log.n0q.org/post/202425938/Penny-Penny-Penny</link><guid isPermaLink="false">urn:www-soup-io:1:202425938</guid><category domain="contenttype">image</category></item>
<item><title>Arduino | Ich bau mir einen Synthesizer</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2011/12/21/arduino-ich-bau-mir-einen-synthesizer/\"\u003EArduino | Ich bau mir einen Synthesizer\u003C/a\u003E","source":"http://noqqe.de/blog/2011/12/21/arduino-ich-bau-mir-einen-synthesizer/","body":"\u003Cp\u003EVor ca. 2 Wochen habe ich auf der \u003Ca href=\"http://k4cg.soup.io\"\u003ESuppe vom K4CG\u003C/a\u003E ein \u003Ca href=\"http://vimeo.com/2266458\"\u003EVideo\u003C/a\u003E \u00fcber einen auf Arduino basierten Synthesizer. Die \u201cFirmware\u201d die darauf l\u00e4uft nennt sich \u201cAuduino\u201d.\u003C/p\u003E\n\n\u003Cp\u003EAuf deren \u003Ca href=\"http://code.google.com/p/tinkerit/wiki/Auduino\"\u003EProjektseite\u003C/a\u003E habe ich mich dann etwas schlau gelesen und wie auch schon bei dem \u003Ca href=\"http://noqqe.de/archives/1751\"\u003EMegabitmeter\u003C/a\u003E \u00fcber tinkersoup.de meine Teile bestellt. Auf der Projektseite ist die Konstruktion des ganzen finde ich zwar nicht sonderlich gut beschrieben, aber man kommt mit ein bisschen Googeln und Reverse Engineering schon weiter.\u003C/p\u003E\n\n\u003Cp\u003EHabe dabei aber einen \u003Ca href=\"http://arduino.cc/en/Main/ArduinoBoardNano\"\u003EArduino Nano\u003C/a\u003E benutzt, weil mir die Anschl\u00fcsse bzw \u201cArchitektur\u201d besser gef\u00e4llt und ich nicht erst ein Breakout Board von Seriell auf USB nachkaufen musste. Entgegen aller Erwartungen musste ich die Firmware daf\u00fcr nichtmal modifizieren, da auch bei diesem Board ein ATMega328 verbaut ist.\u003C/p\u003E\n\n\u003Cp\u003EIch habe mir wegen der einfacheren Anbringung am Nano so eine Art Halterung/Breadboard mitbestellt, in dem ich die Adern mit Schrauben einfacher verbauen konnte.\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://noqqe.de/uploads/2011/12/IMG_0604.jpg\"\u003E\u003Cimg src=\"http://noqqe.de/uploads/2011/12/IMG_0604.jpg\" alt=\"\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003EDie Potenziometer (wieder was, das ich gelernt habe) sind in Reihe an den Ground und den 5V Pin geschlossen. Der jeweils mittlere Pin der Drehschalter kommt an die Analog Pins 0 bis 4.\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://noqqe.de/uploads/2011/12/IMG_0606.jpg\"\u003E\u003Cimg src=\"http://noqqe.de/uploads/2011/12/IMG_0606.jpg\" alt=\"\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003EDanach kam der (f\u00fcr mich) kniffligere Teil. Der Audio Jack (bzw. Klinke Buchse) hat von Haus aus 5 Pins. Auf der Projekte Seite von Auduino nur Input und Ground. Nach bisschen schlaulesen in Wikis und Foren scheint es, als w\u00fcrden die verschiedenen Revisionen von Klinke andere Features mit sich bringen. f\u00fcr den Mini Synthesizer h\u00e4tte vollkommen Klinke Mono ausgereicht. Diverse Zusatzfunktionskan\u00e4le sind da eigentlich \u00fcberfl\u00fcssig aber im \u003Ca href=\"http://www.tinkersoup.de/product_info.php?products_id=74\u0026amp;osCsid=3c2172e4114e78d30b2788b3cd0d6077\"\u003EAudio Jack bei TinkerSoup\u003C/a\u003E integriert.\u003C/p\u003E\n\n\u003Cp\u003ENach etwas Trial and Error Verfahren den weg f\u00fcr Doofe gew\u00e4hlt. Ich hab ehrlichgesagt einfach ein altes Klinke Stecker auf Buchse Kabel aufgeschnitten und mir die Belegung auf der Steckerseite angesehen.\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://noqqe.de/uploads/2011/12/IMG_0609.jpg\"\u003E\u003Cimg src=\"http://noqqe.de/uploads/2011/12/IMG_0609.jpg\" alt=\"\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003EBei 3poligen Klinken Steckern sind die vorderen beiden Kontakte f\u00fcrs Signal (Links, Rechts) und hinten f\u00fcr Ground. Habe dann die beiden Signaladern auf der Buchsenseite verdrillt und wie vorgesehen in den Digitalen Pin 3 geklemmt. Ground nat\u00fcrlich an seine Stelle.\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://noqqe.de/uploads/2011/12/IMG_0611.jpg\"\u003E\u003Cimg src=\"http://noqqe.de/uploads/2011/12/IMG_0611.jpg\" alt=\"\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003EIm Endeffekt wars dann schon fertig. Firmware mit dem Arduino IDE auf den Chip geladen und hat auch schon funktioniert.  Aber weil ich dann st\u00e4ndig die Potenziometer durcheinander gebracht habe, hab ich noch eine alte Plastikbox aus dem Baumarkt meiner Wahl benutzt, die entsprechenden L\u00f6cher gebohrt dort das ganze eingebaut.\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://noqqe.de/uploads/2011/12/IMG_0616.jpg\"\u003E\u003Cimg src=\"http://noqqe.de/uploads/2011/12/IMG_0616.jpg\" alt=\"\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003EEtwas smoother ;) Noch ein paar kleine Kostproben von einem wirklich unbegabten Synthesizer-Bediener. Beim h\u00f6ren etwas aufpassen, ab und zu ist mir da ein Ton entglitten.\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://noqqe.de/uploads/2011/12/record.mp4\"\u003EAuduino Sample Mp4\u003C/a\u003E\n\u003Ca href=\"http://noqqe.de/uploads/2011/12/record16bit-22kkhz.wav\"\u003EAuduino Sample WAV 16 bit 22 Kkhz\u003C/a\u003E\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Vor ca. 2 Wochen habe ich auf der &lt;a href="http://k4cg.soup.io"&gt;Suppe vom K4CG&lt;/a&gt; ein &lt;a href="http://vimeo.com/2266458"&gt;Video&lt;/a&gt; &#252;ber einen auf Arduino basierten Synthesizer. Die &#8220;Firmware&#8221; die darauf l&#228;uft nennt sich &#8220;Auduino&#8221;.&lt;/p&gt;

&lt;p&gt;Auf deren &lt;a href="http://code.google.com/p/tinkerit/wiki/Auduino"&gt;Projektseite&lt;/a&gt; habe ich mich dann etwas schlau gelesen und wie auch schon bei dem &lt;a href="http://noqqe.de/archives/1751"&gt;Megabitmeter&lt;/a&gt; &#252;ber tinkersoup.de meine Teile bestellt. Auf der Projektseite ist die Konstruktion des ganzen finde ich zwar nicht sonderlich gut beschrieben, aber man kommt mit ein bisschen Googeln und Reverse Engineering schon weiter.&lt;/p&gt;

&lt;p&gt;Habe dabei aber einen &lt;a href="http://arduino.cc/en/Main/ArduinoBoardNano"&gt;Arduino Nano&lt;/a&gt; benutzt, weil mir die Anschl&#252;sse bzw &#8220;Architektur&#8221; besser gef&#228;llt und ich nicht erst ein Breakout Board von Seriell auf USB nachkaufen musste. Entgegen aller Erwartungen musste ich die Firmware daf&#252;r nichtmal modifizieren, da auch bei diesem Board ein ATMega328 verbaut ist.&lt;/p&gt;

&lt;p&gt;Ich habe mir wegen der einfacheren Anbringung am Nano so eine Art Halterung/Breadboard mitbestellt, in dem ich die Adern mit Schrauben einfacher verbauen konnte.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://noqqe.de/uploads/2011/12/IMG_0604.jpg"&gt;&lt;img src="http://noqqe.de/uploads/2011/12/IMG_0604.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Die Potenziometer (wieder was, das ich gelernt habe) sind in Reihe an den Ground und den 5V Pin geschlossen. Der jeweils mittlere Pin der Drehschalter kommt an die Analog Pins 0 bis 4.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://noqqe.de/uploads/2011/12/IMG_0606.jpg"&gt;&lt;img src="http://noqqe.de/uploads/2011/12/IMG_0606.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Danach kam der (f&#252;r mich) kniffligere Teil. Der Audio Jack (bzw. Klinke Buchse) hat von Haus aus 5 Pins. Auf der Projekte Seite von Auduino nur Input und Ground. Nach bisschen schlaulesen in Wikis und Foren scheint es, als w&#252;rden die verschiedenen Revisionen von Klinke andere Features mit sich bringen. f&#252;r den Mini Synthesizer h&#228;tte vollkommen Klinke Mono ausgereicht. Diverse Zusatzfunktionskan&#228;le sind da eigentlich &#252;berfl&#252;ssig aber im &lt;a href="http://www.tinkersoup.de/product_info.php?products_id=74&amp;amp;osCsid=3c2172e4114e78d30b2788b3cd0d6077"&gt;Audio Jack bei TinkerSoup&lt;/a&gt; integriert.&lt;/p&gt;

&lt;p&gt;Nach etwas Trial and Error Verfahren den weg f&#252;r Doofe gew&#228;hlt. Ich hab ehrlichgesagt einfach ein altes Klinke Stecker auf Buchse Kabel aufgeschnitten und mir die Belegung auf der Steckerseite angesehen.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://noqqe.de/uploads/2011/12/IMG_0609.jpg"&gt;&lt;img src="http://noqqe.de/uploads/2011/12/IMG_0609.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bei 3poligen Klinken Steckern sind die vorderen beiden Kontakte f&#252;rs Signal (Links, Rechts) und hinten f&#252;r Ground. Habe dann die beiden Signaladern auf der Buchsenseite verdrillt und wie vorgesehen in den Digitalen Pin 3 geklemmt. Ground nat&#252;rlich an seine Stelle.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://noqqe.de/uploads/2011/12/IMG_0611.jpg"&gt;&lt;img src="http://noqqe.de/uploads/2011/12/IMG_0611.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Im Endeffekt wars dann schon fertig. Firmware mit dem Arduino IDE auf den Chip geladen und hat auch schon funktioniert.  Aber weil ich dann st&#228;ndig die Potenziometer durcheinander gebracht habe, hab ich noch eine alte Plastikbox aus dem Baumarkt meiner Wahl benutzt, die entsprechenden L&#246;cher gebohrt dort das ganze eingebaut.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://noqqe.de/uploads/2011/12/IMG_0616.jpg"&gt;&lt;img src="http://noqqe.de/uploads/2011/12/IMG_0616.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Etwas smoother ;) Noch ein paar kleine Kostproben von einem wirklich unbegabten Synthesizer-Bediener. Beim h&#246;ren etwas aufpassen, ab und zu ist mir da ein Ton entglitten.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://noqqe.de/uploads/2011/12/record.mp4"&gt;Auduino Sample Mp4&lt;/a&gt;
&lt;a href="http://noqqe.de/uploads/2011/12/record16bit-22kkhz.wav"&gt;Auduino Sample WAV 16 bit 22 Kkhz&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 21 Dec 2011 16:30:58 GMT</pubDate><link>http://log.n0q.org/post/236541407/Arduino-Ich-bau-mir-einen-Synthesizer</link><guid isPermaLink="false">urn:www-soup-io:1:236541407</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>Arduino | Ich bau mir einen Synthesizer</title>
<soup:attributes>{"tags":["Coding","General","Hardware","PlanetenBlogger","Web","Arduino","auduino","community","kabel","lfo","l\u00f6ten","low frequenzy synthesizer","soldering","synthesizer","synthi","verkabeln","wiring"],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/archives/1833\"\u003EArduino | Ich bau mir einen Synthesizer\u003C/a\u003E","source":"http://noqqe.de/archives/1833","body":"\u003Cp\u003EVor ca. 2 Wochen habe ich auf der \u003Ca href=\"http://k4cg.soup.io\"\u003ESuppe vom K4CG\u003C/a\u003E ein \u003Ca href=\"http://vimeo.com/2266458\"\u003EVideo\u003C/a\u003E \u00fcber einen auf Arduino basierten Synthesizer. Die \u201cFirmware\u201d die darauf l\u00e4uft nennt sich \u201cAuduino\u201d.\u003C/p\u003E\n\u003Cp\u003EAuf deren \u003Ca href=\"http://code.google.com/p/tinkerit/wiki/Auduino\"\u003EProjektseite\u003C/a\u003E habe ich mich dann etwas schlau gelesen und wie auch schon bei dem \u003Ca href=\"http://noqqe.de/archives/1751\"\u003EMegabitmeter\u003C/a\u003E \u00fcber tinkersoup.de meine Teile bestellt. Auf der Projektseite ist die Konstruktion des ganzen finde ich zwar nicht sonderlich gut beschrieben, aber man kommt mit ein bisschen Googeln und Reverse Engineering schon weiter. \u003C/p\u003E\n\u003Cp\u003EHabe dabei aber einen \u003Ca href=\"http://arduino.cc/en/Main/ArduinoBoardNano\"\u003EArduino Nano\u003C/a\u003E benutzt, weil mir die Anschl\u00fcsse bzw \u201cArchitektur\u201d besser gef\u00e4llt und ich nicht erst ein Breakout Board von Seriell auf USB nachkaufen musste. Entgegen aller Erwartungen musste ich die Firmware daf\u00fcr nichtmal modifizieren, da auch bei diesem Board ein ATMega328 verbaut ist.\u003C/p\u003E\n\u003Cp\u003EIch habe mir wegen der einfacheren Anbringung am Nano so eine Art Halterung/Breadboard mitbestellt, in dem ich die Adern mit Schrauben einfacher verbauen konnte.\u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\"http://blog.n0q.org/wp-uploads/2011/12/IMG_0604.jpg\"\u003E\u003Cimg title=\"Arduino Nano mit Halterung\" class=\"aligncenter size-full wp-image-1836\" src=\"http://blog.n0q.org/wp-uploads/2011/12/IMG_0604.jpg\" height=\"375\" alt=\"\" width=\"500\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EDie Potenziometer (wieder was, das ich gelernt habe) sind in Reihe an den Ground und den 5V Pin geschlossen. Der jeweils mittlere Pin der Drehschalter kommt an die Analog Pins 0 bis 4. \u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\"http://blog.n0q.org/wp-uploads/2011/12/IMG_0606.jpg\"\u003E\u003Cimg title=\"IMG_0606\" class=\"aligncenter size-full wp-image-1837\" src=\"http://blog.n0q.org/wp-uploads/2011/12/IMG_0606.jpg\" height=\"375\" alt=\"\" width=\"500\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EDanach kam der (f\u00fcr mich) kniffligere Teil. Der Audio Jack (bzw. Klinke Buchse) hat von Haus aus 5 Pins. Auf der Projekte Seite von Auduino nur Input und Ground. Nach bisschen schlaulesen in Wikis und Foren scheint es, als w\u00fcrden die verschiedenen Revisionen von Klinke andere Features mit sich bringen. f\u00fcr den Mini Synthesizer h\u00e4tte vollkommen Klinke Mono ausgereicht. Diverse Zusatzfunktionskan\u00e4le sind da eigentlich \u00fcberfl\u00fcssig aber im \u003Ca href=\"http://www.tinkersoup.de/product_info.php?products_id=74\u0026amp;osCsid=3c2172e4114e78d30b2788b3cd0d6077\"\u003EAudio Jack bei TinkerSoup\u003C/a\u003E integriert. \u003C/p\u003E\n\u003Cp\u003ENach etwas Trial and Error Verfahren den weg f\u00fcr Doofe gew\u00e4hlt. Ich hab ehrlichgesagt einfach ein altes Klinke Stecker auf Buchse Kabel aufgeschnitten und mir die Belegung auf der Steckerseite angesehen. \u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\"http://blog.n0q.org/wp-uploads/2011/12/IMG_0609.jpg\"\u003E\u003Cimg title=\"Klinke Stecker offen\" class=\"aligncenter size-full wp-image-1838\" src=\"http://blog.n0q.org/wp-uploads/2011/12/IMG_0609.jpg\" height=\"324\" alt=\"\" width=\"500\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EBei 3poligen Klinken Steckern sind die vorderen beiden Kontakte f\u00fcrs Signal (Links, Rechts) und hinten f\u00fcr Ground. Habe dann die beiden Signaladern auf der Buchsenseite verdrillt und wie vorgesehen in den Digitalen Pin 3 geklemmt. Ground nat\u00fcrlich an seine Stelle. \u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\"http://blog.n0q.org/wp-uploads/2011/12/IMG_0611.jpg\"\u003E\u003Cimg title=\"Wired up\" class=\"aligncenter size-full wp-image-1839\" src=\"http://blog.n0q.org/wp-uploads/2011/12/IMG_0611.jpg\" height=\"375\" alt=\"\" width=\"500\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EIm Endeffekt wars dann schon fertig. Firmware mit dem Arduino IDE auf den Chip geladen und hat auch schon funktioniert.  Aber weil ich dann st\u00e4ndig die Potenziometer durcheinander gebracht habe, hab ich noch eine alte Plastikbox aus dem Baumarkt meiner Wahl benutzt, die entsprechenden L\u00f6cher gebohrt dort das ganze eingebaut. \u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\"http://blog.n0q.org/wp-uploads/2011/12/IMG_0616.jpg\"\u003E\u003Cimg title=\"Auduino Final\" class=\"aligncenter size-full wp-image-1840\" src=\"http://blog.n0q.org/wp-uploads/2011/12/IMG_0616.jpg\" height=\"375\" alt=\"\" width=\"500\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EEtwas smoother ;) Noch ein paar kleine Kostproben von einem wirklich unbegabten Synthesizer-Bediener. Beim h\u00f6ren etwas aufpassen, ab und zu ist mir da ein Ton entglitten. \u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\"http://blog.n0q.org/wp-uploads/2011/12/record.mp4\"\u003EAuduino Sample Mp4\u003C/a\u003E\u003Cbr /\u003E\n\u003Ca href=\"http://blog.n0q.org/wp-uploads/2011/12/record16bit-22kkhz.wav\"\u003EAuduino Sample WAV 16 bit 22 Kkhz\u003C/a\u003E\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Vor ca. 2 Wochen habe ich auf der &lt;a href="http://k4cg.soup.io"&gt;Suppe vom K4CG&lt;/a&gt; ein &lt;a href="http://vimeo.com/2266458"&gt;Video&lt;/a&gt; &#252;ber einen auf Arduino basierten Synthesizer. Die &#8220;Firmware&#8221; die darauf l&#228;uft nennt sich &#8220;Auduino&#8221;.&lt;/p&gt;
&lt;p&gt;Auf deren &lt;a href="http://code.google.com/p/tinkerit/wiki/Auduino"&gt;Projektseite&lt;/a&gt; habe ich mich dann etwas schlau gelesen und wie auch schon bei dem &lt;a href="http://noqqe.de/archives/1751"&gt;Megabitmeter&lt;/a&gt; &#252;ber tinkersoup.de meine Teile bestellt. Auf der Projektseite ist die Konstruktion des ganzen finde ich zwar nicht sonderlich gut beschrieben, aber man kommt mit ein bisschen Googeln und Reverse Engineering schon weiter. &lt;/p&gt;
&lt;p&gt;Habe dabei aber einen &lt;a href="http://arduino.cc/en/Main/ArduinoBoardNano"&gt;Arduino Nano&lt;/a&gt; benutzt, weil mir die Anschl&#252;sse bzw &#8220;Architektur&#8221; besser gef&#228;llt und ich nicht erst ein Breakout Board von Seriell auf USB nachkaufen musste. Entgegen aller Erwartungen musste ich die Firmware daf&#252;r nichtmal modifizieren, da auch bei diesem Board ein ATMega328 verbaut ist.&lt;/p&gt;
&lt;p&gt;Ich habe mir wegen der einfacheren Anbringung am Nano so eine Art Halterung/Breadboard mitbestellt, in dem ich die Adern mit Schrauben einfacher verbauen konnte.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.n0q.org/wp-uploads/2011/12/IMG_0604.jpg"&gt;&lt;img class="aligncenter size-full wp-image-1836" title="Arduino Nano mit Halterung" src="http://blog.n0q.org/wp-uploads/2011/12/IMG_0604.jpg" height="375" alt="" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Die Potenziometer (wieder was, das ich gelernt habe) sind in Reihe an den Ground und den 5V Pin geschlossen. Der jeweils mittlere Pin der Drehschalter kommt an die Analog Pins 0 bis 4. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.n0q.org/wp-uploads/2011/12/IMG_0606.jpg"&gt;&lt;img class="aligncenter size-full wp-image-1837" title="IMG_0606" src="http://blog.n0q.org/wp-uploads/2011/12/IMG_0606.jpg" height="375" alt="" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Danach kam der (f&#252;r mich) kniffligere Teil. Der Audio Jack (bzw. Klinke Buchse) hat von Haus aus 5 Pins. Auf der Projekte Seite von Auduino nur Input und Ground. Nach bisschen schlaulesen in Wikis und Foren scheint es, als w&#252;rden die verschiedenen Revisionen von Klinke andere Features mit sich bringen. f&#252;r den Mini Synthesizer h&#228;tte vollkommen Klinke Mono ausgereicht. Diverse Zusatzfunktionskan&#228;le sind da eigentlich &#252;berfl&#252;ssig aber im &lt;a href="http://www.tinkersoup.de/product_info.php?products_id=74&amp;amp;osCsid=3c2172e4114e78d30b2788b3cd0d6077"&gt;Audio Jack bei TinkerSoup&lt;/a&gt; integriert. &lt;/p&gt;
&lt;p&gt;Nach etwas Trial and Error Verfahren den weg f&#252;r Doofe gew&#228;hlt. Ich hab ehrlichgesagt einfach ein altes Klinke Stecker auf Buchse Kabel aufgeschnitten und mir die Belegung auf der Steckerseite angesehen. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.n0q.org/wp-uploads/2011/12/IMG_0609.jpg"&gt;&lt;img class="aligncenter size-full wp-image-1838" title="Klinke Stecker offen" src="http://blog.n0q.org/wp-uploads/2011/12/IMG_0609.jpg" height="324" alt="" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bei 3poligen Klinken Steckern sind die vorderen beiden Kontakte f&#252;rs Signal (Links, Rechts) und hinten f&#252;r Ground. Habe dann die beiden Signaladern auf der Buchsenseite verdrillt und wie vorgesehen in den Digitalen Pin 3 geklemmt. Ground nat&#252;rlich an seine Stelle. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.n0q.org/wp-uploads/2011/12/IMG_0611.jpg"&gt;&lt;img class="aligncenter size-full wp-image-1839" title="Wired up" src="http://blog.n0q.org/wp-uploads/2011/12/IMG_0611.jpg" height="375" alt="" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Im Endeffekt wars dann schon fertig. Firmware mit dem Arduino IDE auf den Chip geladen und hat auch schon funktioniert.  Aber weil ich dann st&#228;ndig die Potenziometer durcheinander gebracht habe, hab ich noch eine alte Plastikbox aus dem Baumarkt meiner Wahl benutzt, die entsprechenden L&#246;cher gebohrt dort das ganze eingebaut. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.n0q.org/wp-uploads/2011/12/IMG_0616.jpg"&gt;&lt;img class="aligncenter size-full wp-image-1840" title="Auduino Final" src="http://blog.n0q.org/wp-uploads/2011/12/IMG_0616.jpg" height="375" alt="" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Etwas smoother ;) Noch ein paar kleine Kostproben von einem wirklich unbegabten Synthesizer-Bediener. Beim h&#246;ren etwas aufpassen, ab und zu ist mir da ein Ton entglitten. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.n0q.org/wp-uploads/2011/12/record.mp4"&gt;Auduino Sample Mp4&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blog.n0q.org/wp-uploads/2011/12/record16bit-22kkhz.wav"&gt;Auduino Sample WAV 16 bit 22 Kkhz&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 21 Dec 2011 15:30:58 GMT</pubDate><link>http://log.n0q.org/post/202079379/Arduino-Ich-bau-mir-einen-Synthesizer</link><guid isPermaLink="false">urn:www-soup-io:1:202079379</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category><category domain="tag">coding</category><category domain="tag">general</category><category domain="tag">hardware</category><category domain="tag">planetenblogger</category><category domain="tag">web</category><category domain="tag">arduino</category><category domain="tag">auduino</category><category domain="tag">community</category><category domain="tag">kabel</category><category domain="tag">lfo</category><category domain="tag">l&#246;ten</category><category domain="tag">low frequenzy synthesizer</category><category domain="tag">soldering</category><category domain="tag">synthesizer</category><category domain="tag">synthi</category><category domain="tag">verkabeln</category><category domain="tag">wiring</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://9.asset.soup.io/asset/2661/3529_3276_400.jpeg"/>
<title>(Image)</title>
<soup:attributes>{"tags":[],"type":"image","source":"https://twitter.com/#!/webrocker/status/148736083956482049/photo/1/large","body":null,"url":"http://9.asset.soup.io/asset/2661/3529_3276.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href="https://twitter.com/#!/webrocker/status/148736083956482049/photo/1/large"&gt;&lt;img alt="3529_3276_400" height="662" src="http://9.asset.soup.io/asset/2661/3529_3276_400.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user348062" &gt;&lt;a class="" href="http://soup.serverfarmer.de/post/201286921/Image"&gt;&lt;span class="name"&gt;stoffelxx&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user433856" &gt;&lt;a class="" href="http://pi-nuts.soup.io/post/201386226/Image"&gt;&lt;span class="name"&gt;pi-nuts&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Tue, 20 Dec 2011 17:08:27 GMT</pubDate><link>http://log.n0q.org/post/201396610/Image</link><guid isPermaLink="false">urn:www-soup-io:1:201396610</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://f.asset.soup.io/asset/2620/5183_f49c_400.jpeg"/>
<title>(Image)</title>
<soup:attributes>{"tags":[],"type":"image","source":null,"body":null,"url":"http://f.asset.soup.io/asset/2620/5183_f49c.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href=""&gt;&lt;img alt="5183_f49c_400" height="296" src="http://f.asset.soup.io/asset/2620/5183_f49c_400.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user584364" &gt;&lt;a class="" href="http://metalchamber.soup.io/post/198241039/Image"&gt;&lt;span class="name"&gt;metalchamber&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user240632" &gt;&lt;a class="" href="http://FFFFFUUUUU.soup.io/post/198497133/Image"&gt;&lt;span class="name"&gt;FFFFFUUUUU&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Tue, 13 Dec 2011 17:53:29 GMT</pubDate><link>http://log.n0q.org/post/198513105/Image</link><guid isPermaLink="false">urn:www-soup-io:1:198513105</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://4.asset.soup.io/asset/2621/1348_4e34_400.jpeg"/>
<title>Nazgul</title>
<soup:attributes>{"tags":[],"type":"image","source":"http://a.asset.soup.io/asset/2619/6122_c212_480.jpeg","body":"Nazgul","url":"http://4.asset.soup.io/asset/2621/1348_4e34.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href="http://a.asset.soup.io/asset/2619/6122_c212_480.jpeg"&gt;&lt;img alt="1348_4e34_400" height="326" src="http://4.asset.soup.io/asset/2621/1348_4e34_400.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Nazgul&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user321207" &gt;&lt;a class="" href="http://majkey.soup.io/post/198271754/Nazgul"&gt;&lt;span class="name"&gt;majkey&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user226937" &gt;&lt;a class="" href="http://awezone.soup.io/post/198420765/Nazgul"&gt;&lt;span class="name"&gt;awezone&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Tue, 13 Dec 2011 12:16:49 GMT</pubDate><link>http://log.n0q.org/post/198435836/Nazgul</link><guid isPermaLink="false">urn:www-soup-io:1:198435836</guid><category domain="contenttype">image</category></item>
<item><title>fbcmd | Nie wieder Geburtstage vergessen via Shell.</title>
<soup:attributes>{"tags":[],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/blog/2011/12/11/fbcmd-nie-wieder-geburtstage-vergessen-via-shell/\"\u003Efbcmd | Nie wieder Geburtstage vergessen via Shell.\u003C/a\u003E","source":"http://noqqe.de/blog/2011/12/11/fbcmd-nie-wieder-geburtstage-vergessen-via-shell/","body":"\u003Cp\u003EDie nachfolgende Beschreibung eines technischen Vorgangs w\u00fcrde die Mehrheit der Gesellschaft wahrscheinlich als soziologisch fragw\u00fcrdig abstempeln. Jedoch beschreibe ich den Hergang trotzdem und gerade deswegen.\u003C/p\u003E\n\n\u003Cp\u003E\u003Ca href=\"http://noqqe.de/uploads/2011/12/112817814_facebook-birthday1.jpg\"\u003E\u003Cimg src=\"http://noqqe.de/uploads/2011/12/112817814_facebook-birthday1.jpg\" alt=\"\" /\u003E\u003C/a\u003E\u003C/p\u003E\n\n\u003Cp\u003EIch wei\u00df gar nicht mehr wie genau ich auf \u003Ca href=\"http://fbcmd.dtompkins.com/\"\u003Efbcmd\u003C/a\u003E gekommen bin.\u00a0 Im Zweifel \u00fcber einen XML basierten Medienkanal. Jedenfalls ist fbcmd ein \u00e4u\u00dferst sch\u00f6nes Tool um die g\u00e4ngigen Informationen zum eigenen Facebook Account auf der Kommandozeile abzufragen. Dazu bietet es wahnsinnig trickreiche Queries und \u201cVergruppungen\u201d der Facebook Bekanntschaften. Alles dazu \u003Ca href=\"http://fbcmd.dtompkins.com/syntax\"\u003Ehier\u003C/a\u003E und besonders \u003Ca href=\"http://fbcmd.dtompkins.com/parameters/flist\"\u003Ehier\u003C/a\u003E.\u003C/p\u003E\n\n\u003Cp\u003ESomit l\u00e4sst sich wunderbar ein automatisches \u201cAlles Gute zum Geburtstag!\u201d bauen. Vorraussetzung ist hierf\u00fcr eine funktionierende \u003Ca href=\"http://fbcmd.dtompkins.com/installation\"\u003EInstallation von fbcmd\u003C/a\u003E.\u003C/p\u003E\n\n\u003Cp\u003EDer von fbcmd vorgeschlagene Query um eine Geburstagsnachricht an die Pinnwand von jenen zu senden, deren Geburtstag sich heute j\u00e4hrt lautet:\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003Efbcmd WALLPOST =bday 'Alles Gute zum Geburstag!'\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EDas l\u00e4sst sich nat\u00fcrlich wunderbar in einen Cronjob verbauen, der einmal t\u00e4glich um 15:00 eben diesen Query ausf\u00fchrt:\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E0 15 * * *   fbcmd WALLPOST =bday 'Alles Gute zum Geburstag!' \u0026gt; /dev/null\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EWeil ich aber wissen m\u00f6chte, wem mein Rechner alles in meinem Namen zum Geburtstag graturliert hab ich das noch leicht modifiziert und lasse mich via Mail dar\u00fcber benachrichtigen:\u003C/p\u003E\n\n\u003Cdiv class=\"highlight\"\u003E\u003Ctable\u003E\u003Ctr\u003E\u003Ctd class=\"gutter\"\u003E\u003Cpre class=\"line-numbers\"\u003E\u003Cspan class=\"line-number\"\u003E1\u003C/span\u003E\n\u003C/pre\u003E\u003C/td\u003E\u003Ctd class=\"code\"\u003E\u003Cpre\u003E\u003Ccode class=\"\"\u003E\u003Cspan class=\"line\"\u003E0 15 * * *   fbcmd WALLPOST =bday 'Alles Gute zum Geburstag!'  | grep -v \"^No Friends With Birthday Matches$\" | mail -s \"fbcmd Gratulation\" user@domain.de\u003C/span\u003E\u003C/code\u003E\u003C/pre\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003C/div\u003E\n\n\n\u003Cp\u003EEigentlich ist der Titel des Posts gar nicht richtig. Man vergisst Sie trotzdem. Aber ein Device erledigt die Arbeit f\u00fcr einen :)\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Die nachfolgende Beschreibung eines technischen Vorgangs w&#252;rde die Mehrheit der Gesellschaft wahrscheinlich als soziologisch fragw&#252;rdig abstempeln. Jedoch beschreibe ich den Hergang trotzdem und gerade deswegen.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://noqqe.de/uploads/2011/12/112817814_facebook-birthday1.jpg"&gt;&lt;img src="http://noqqe.de/uploads/2011/12/112817814_facebook-birthday1.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ich wei&#223; gar nicht mehr wie genau ich auf &lt;a href="http://fbcmd.dtompkins.com/"&gt;fbcmd&lt;/a&gt; gekommen bin.&#160; Im Zweifel &#252;ber einen XML basierten Medienkanal. Jedenfalls ist fbcmd ein &#228;u&#223;erst sch&#246;nes Tool um die g&#228;ngigen Informationen zum eigenen Facebook Account auf der Kommandozeile abzufragen. Dazu bietet es wahnsinnig trickreiche Queries und &#8220;Vergruppungen&#8221; der Facebook Bekanntschaften. Alles dazu &lt;a href="http://fbcmd.dtompkins.com/syntax"&gt;hier&lt;/a&gt; und besonders &lt;a href="http://fbcmd.dtompkins.com/parameters/flist"&gt;hier&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Somit l&#228;sst sich wunderbar ein automatisches &#8220;Alles Gute zum Geburtstag!&#8221; bauen. Vorraussetzung ist hierf&#252;r eine funktionierende &lt;a href="http://fbcmd.dtompkins.com/installation"&gt;Installation von fbcmd&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Der von fbcmd vorgeschlagene Query um eine Geburstagsnachricht an die Pinnwand von jenen zu senden, deren Geburtstag sich heute j&#228;hrt lautet:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;fbcmd WALLPOST =bday 'Alles Gute zum Geburstag!'&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Das l&#228;sst sich nat&#252;rlich wunderbar in einen Cronjob verbauen, der einmal t&#228;glich um 15:00 eben diesen Query ausf&#252;hrt:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;0 15 * * *   fbcmd WALLPOST =bday 'Alles Gute zum Geburstag!' &amp;gt; /dev/null&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Weil ich aber wissen m&#246;chte, wem mein Rechner alles in meinem Namen zum Geburtstag graturliert hab ich das noch leicht modifiziert und lasse mich via Mail dar&#252;ber benachrichtigen:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code class=""&gt;&lt;span class="line"&gt;0 15 * * *   fbcmd WALLPOST =bday 'Alles Gute zum Geburstag!'  | grep -v "^No Friends With Birthday Matches$" | mail -s "fbcmd Gratulation" user@domain.de&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Eigentlich ist der Titel des Posts gar nicht richtig. Man vergisst Sie trotzdem. Aber ein Device erledigt die Arbeit f&#252;r einen :)&lt;/p&gt;</description><pubDate>Sun, 11 Dec 2011 19:45:18 GMT</pubDate><link>http://log.n0q.org/post/236541410/fbcmd-Nie-wieder-Geburtstage-vergessen-via-Shell</link><guid isPermaLink="false">urn:www-soup-io:1:236541410</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category></item>
<item><title>fbcmd | Nie wieder Geburtstage vergessen via Shell.</title>
<soup:attributes>{"tags":["Bash","Coding","Debian","Web","ubuntuusers","automagisch","automatisch","birthday","cronjob","facbeook","fb","fbcmd","geburtstag","pinnwand","reminder","versenden","wallpost"],"type":"regular","title":"\u003Ca href=\"http://noqqe.de/archives/1827\"\u003Efbcmd | Nie wieder Geburtstage vergessen via Shell.\u003C/a\u003E","source":"http://noqqe.de/archives/1827","body":"\u003Cp\u003EDie nachfolgende Beschreibung eines technischen Vorgangs w\u00fcrde die Mehrheit der Gesellschaft wahrscheinlich als soziologisch fragw\u00fcrdig abstempeln. Jedoch beschreibe ich den Hergang trotzdem und gerade deswegen.\u003C/p\u003E\n\u003Cp\u003E\u003C/p\u003E\u003Ca href=\"http://blog.n0q.org/wp-uploads/2011/12/112817814_facebook-birthday1.jpg\"\u003E\u003Cimg title=\"facebookbirthday\" class=\"aligncenter size-full wp-image-1828\" src=\"http://blog.n0q.org/wp-uploads/2011/12/112817814_facebook-birthday1.jpg\" height=\"197\" alt=\"\" width=\"300\" /\u003E\u003C/a\u003E\u003Cp\u003E\u003C/p\u003E\n\u003Cp\u003EIch wei\u00df gar nicht mehr wie genau ich auf \u003Ca href=\"http://fbcmd.dtompkins.com/\"\u003Efbcmd\u003C/a\u003E gekommen bin.\u00a0 Im Zweifel \u00fcber einen XML basierten Medienkanal. Jedenfalls ist fbcmd ein \u00e4u\u00dferst sch\u00f6nes Tool um die g\u00e4ngigen Informationen zum eigenen Facebook Account auf der Kommandozeile abzufragen. Dazu bietet es wahnsinnig trickreiche Queries und \u201cVergruppungen\u201d der Facebook Bekanntschaften. Alles dazu \u003Ca href=\"http://fbcmd.dtompkins.com/syntax\"\u003Ehier\u003C/a\u003E und besonders \u003Ca href=\"http://fbcmd.dtompkins.com/parameters/flist\"\u003Ehier\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003ESomit l\u00e4sst sich wunderbar ein automatisches \u201cAlles Gute zum Geburtstag!\u201d bauen. Vorraussetzung ist hierf\u00fcr eine funktionierende \u003Ca href=\"http://fbcmd.dtompkins.com/installation\"\u003EInstallation von fbcmd\u003C/a\u003E.\u003C/p\u003E\n\u003Cp\u003EDer von fbcmd vorgeschlagene Query um eine Geburstagsnachricht an die Pinnwand von jenen zu senden, deren Geburtstag sich heute j\u00e4hrt lautet: \u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003Efbcmd WALLPOST =bday 'Alles Gute zum Geburstag!'\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003EDas l\u00e4sst sich nat\u00fcrlich wunderbar in einen Cronjob verbauen, der einmal t\u00e4glich um 15:00 eben diesen Query ausf\u00fchrt:\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003E0 15 * * *   fbcmd WALLPOST =bday 'Alles Gute zum Geburstag!' \u0026gt; /dev/null\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003EWeil ich aber wissen m\u00f6chte, wem mein Rechner alles in meinem Namen zum Geburtstag graturliert hab ich das noch leicht modifiziert und lasse mich via Mail dar\u00fcber benachrichtigen:\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003E0 15 * * *   fbcmd WALLPOST =bday 'Alles Gute zum Geburstag!'  | grep -v \"^No Friends With Birthday Matches$\" | mail -s \"fbcmd Gratulation\" user@domain.de\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003EEigentlich ist der Titel des Posts gar nicht richtig. Man vergisst Sie trotzdem. Aber ein Device erledigt die Arbeit f\u00fcr einen :)\u003C/p\u003E"}</soup:attributes>
<description>&lt;p&gt;Die nachfolgende Beschreibung eines technischen Vorgangs w&#252;rde die Mehrheit der Gesellschaft wahrscheinlich als soziologisch fragw&#252;rdig abstempeln. Jedoch beschreibe ich den Hergang trotzdem und gerade deswegen.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;a href="http://blog.n0q.org/wp-uploads/2011/12/112817814_facebook-birthday1.jpg"&gt;&lt;img class="aligncenter size-full wp-image-1828" title="facebookbirthday" src="http://blog.n0q.org/wp-uploads/2011/12/112817814_facebook-birthday1.jpg" height="197" alt="" width="300" /&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Ich wei&#223; gar nicht mehr wie genau ich auf &lt;a href="http://fbcmd.dtompkins.com/"&gt;fbcmd&lt;/a&gt; gekommen bin.&#160; Im Zweifel &#252;ber einen XML basierten Medienkanal. Jedenfalls ist fbcmd ein &#228;u&#223;erst sch&#246;nes Tool um die g&#228;ngigen Informationen zum eigenen Facebook Account auf der Kommandozeile abzufragen. Dazu bietet es wahnsinnig trickreiche Queries und &#8220;Vergruppungen&#8221; der Facebook Bekanntschaften. Alles dazu &lt;a href="http://fbcmd.dtompkins.com/syntax"&gt;hier&lt;/a&gt; und besonders &lt;a href="http://fbcmd.dtompkins.com/parameters/flist"&gt;hier&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Somit l&#228;sst sich wunderbar ein automatisches &#8220;Alles Gute zum Geburtstag!&#8221; bauen. Vorraussetzung ist hierf&#252;r eine funktionierende &lt;a href="http://fbcmd.dtompkins.com/installation"&gt;Installation von fbcmd&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Der von fbcmd vorgeschlagene Query um eine Geburstagsnachricht an die Pinnwand von jenen zu senden, deren Geburtstag sich heute j&#228;hrt lautet: &lt;/p&gt;
&lt;p&gt;&lt;code&gt;fbcmd WALLPOST =bday 'Alles Gute zum Geburstag!'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Das l&#228;sst sich nat&#252;rlich wunderbar in einen Cronjob verbauen, der einmal t&#228;glich um 15:00 eben diesen Query ausf&#252;hrt:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;0 15 * * *   fbcmd WALLPOST =bday 'Alles Gute zum Geburstag!' &amp;gt; /dev/null&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Weil ich aber wissen m&#246;chte, wem mein Rechner alles in meinem Namen zum Geburtstag graturliert hab ich das noch leicht modifiziert und lasse mich via Mail dar&#252;ber benachrichtigen:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;0 15 * * *   fbcmd WALLPOST =bday 'Alles Gute zum Geburstag!'  | grep -v "^No Friends With Birthday Matches$" | mail -s "fbcmd Gratulation" &lt;a href="mailto:user@domain.de"&gt;user@domain.de&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Eigentlich ist der Titel des Posts gar nicht richtig. Man vergisst Sie trotzdem. Aber ein Device erledigt die Arbeit f&#252;r einen :)&lt;/p&gt;</description><pubDate>Sun, 11 Dec 2011 18:45:18 GMT</pubDate><link>http://log.n0q.org/post/198201969/fbcmd-Nie-wieder-Geburtstage-vergessen-via-Shell</link><guid isPermaLink="false">urn:www-soup-io:1:198201969</guid><source url="http://noqqe.de/feed"/><category domain="contenttype">regular</category><category domain="tag">bash</category><category domain="tag">coding</category><category domain="tag">debian</category><category domain="tag">web</category><category domain="tag">ubuntuusers</category><category domain="tag">automagisch</category><category domain="tag">automatisch</category><category domain="tag">birthday</category><category domain="tag">cronjob</category><category domain="tag">facbeook</category><category domain="tag">fb</category><category domain="tag">fbcmd</category><category domain="tag">geburtstag</category><category domain="tag">pinnwand</category><category domain="tag">reminder</category><category domain="tag">versenden</category><category domain="tag">wallpost</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://4.asset.soup.io/asset/2616/3796_58b6_400.jpeg"/>
<title>(Image)</title>
<soup:attributes>{"tags":[],"type":"image","source":"http://www.facebook.com/#!/photo.php?fbid=303630316337609\u0026set=a.155022034531772.30969.155018231198819\u0026type=1\u0026theater","body":null,"url":"http://4.asset.soup.io/asset/2616/3796_58b6.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href="http://www.facebook.com/#!/photo.php?fbid=303630316337609&amp;set=a.155022034531772.30969.155018231198819&amp;type=1&amp;theater"&gt;&lt;img alt="3796_58b6_400" height="300" src="http://4.asset.soup.io/asset/2616/3796_58b6_400.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;</description><pubDate>Sun, 11 Dec 2011 12:01:02 GMT</pubDate><link>http://log.n0q.org/post/198065615/Image</link><guid isPermaLink="false">urn:www-soup-io:1:198065615</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://b.asset.soup.io/asset/2614/2603_5467_400.jpeg"/>
<title>(Image)</title>
<soup:attributes>{"tags":[],"type":"image","source":null,"body":null,"url":"http://b.asset.soup.io/asset/2614/2603_5467.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href=""&gt;&lt;img alt="2603_5467_400" height="442" src="http://b.asset.soup.io/asset/2614/2603_5467_400.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user586810" &gt;&lt;a class="" href="http://Focusonme.soup.io/post/197805893/Image"&gt;&lt;span class="name"&gt;Focusonme&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user301544" &gt;&lt;a class="" href="http://starwars.soup.io/post/197806253/Image"&gt;&lt;span class="name"&gt;starwars&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Sat, 10 Dec 2011 11:35:38 GMT</pubDate><link>http://log.n0q.org/post/197873635/Image</link><guid isPermaLink="false">urn:www-soup-io:1:197873635</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://2.asset.soup.io/asset/2592/5634_100b_400.jpeg"/>
<title>(Image)</title>
<soup:attributes>{"tags":[],"type":"image","source":null,"body":null,"url":"http://2.asset.soup.io/asset/2592/5634_100b.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href=""&gt;&lt;img alt="5634_100b_400" height="420" src="http://2.asset.soup.io/asset/2592/5634_100b_400.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user483827" &gt;&lt;a class="" href="http://funkyanka.soup.io/post/196287618/Image"&gt;&lt;span class="name"&gt;funkyanka&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user226937" &gt;&lt;a class="" href="http://awezone.soup.io/post/197860935/Image"&gt;&lt;span class="name"&gt;awezone&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Sat, 10 Dec 2011 11:29:48 GMT</pubDate><link>http://log.n0q.org/post/197872696/Image</link><guid isPermaLink="false">urn:www-soup-io:1:197872696</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://d.asset.soup.io/asset/2615/4333_b2db.gif"/>
<title>(Image)</title>
<soup:attributes>{"tags":[],"type":"image","source":null,"body":null,"url":"http://d.asset.soup.io/asset/2615/4333_b2db.gif"}</soup:attributes>
<description>&lt;p&gt;&lt;a href=""&gt;&lt;img alt="4333_b2db" height="440" src="http://d.asset.soup.io/asset/2615/4333_b2db.gif" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user46681" &gt;&lt;a class="" href="http://cats.soup.io/post/197862825/Image"&gt;&lt;span class="name"&gt;cats&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Sat, 10 Dec 2011 11:28:27 GMT</pubDate><link>http://log.n0q.org/post/197872434/Image</link><guid isPermaLink="false">urn:www-soup-io:1:197872434</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://6.asset.soup.io/asset/2615/5334_11c6_400.jpeg"/>
<title>(Image)</title>
<soup:attributes>{"tags":[],"type":"image","source":null,"body":null,"url":"http://6.asset.soup.io/asset/2615/5334_11c6.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href=""&gt;&lt;img alt="5334_11c6_400" height="266" src="http://6.asset.soup.io/asset/2615/5334_11c6_400.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user510100" &gt;&lt;a class="" href="http://starbucks.soup.io/post/197864482/Image"&gt;&lt;span class="name"&gt;starbucks&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Sat, 10 Dec 2011 11:28:10 GMT</pubDate><link>http://log.n0q.org/post/197872387/Image</link><guid isPermaLink="false">urn:www-soup-io:1:197872387</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://2.asset.soup.io/asset/2610/8178_f95a_400.jpeg"/>
<title>(Image)</title>
<soup:attributes>{"tags":[],"type":"image","source":null,"body":null,"url":"http://2.asset.soup.io/asset/2610/8178_f95a.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href=""&gt;&lt;img alt="8178_f95a_400" height="624" src="http://2.asset.soup.io/asset/2610/8178_f95a_400.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user377084" &gt;&lt;a class="" href="http://lifedownthespiral.soup.io/post/197557378/Image"&gt;&lt;span class="name"&gt;lifedownthespiral&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user480460" &gt;&lt;a class="" href="http://antiprodukt.soup.io/post/197566614/Image"&gt;&lt;span class="name"&gt;antiprodukt&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Thu, 08 Dec 2011 20:40:54 GMT</pubDate><link>http://log.n0q.org/post/197603264/Image</link><guid isPermaLink="false">urn:www-soup-io:1:197603264</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://c.asset.soup.io/asset/2592/1388_c466_400.jpeg"/>
<title>(Image)</title>
<soup:attributes>{"tags":[],"type":"image","source":"http://www.funnyjunk.com/channel/minecraft/Office+Minecraft/nxerDak/","body":null,"url":"http://c.asset.soup.io/asset/2592/1388_c466.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href="http://www.funnyjunk.com/channel/minecraft/Office+Minecraft/nxerDak/"&gt;&lt;img alt="1388_c466_400" height="2540" src="http://c.asset.soup.io/asset/2592/1388_c466_400.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user484308" &gt;&lt;a class="" href="http://Basstarrd.soup.io/post/196263654/Image"&gt;&lt;span class="name"&gt;Basstarrd&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user354498" &gt;&lt;a class="" href="http://minecraft.soup.io/post/196310275/Image"&gt;&lt;span class="name"&gt;minecraft&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Fri, 02 Dec 2011 19:39:01 GMT</pubDate><link>http://log.n0q.org/post/196369684/Image</link><guid isPermaLink="false">urn:www-soup-io:1:196369684</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://7.asset.soup.io/asset/2580/1319_fe5c_400.png"/>
<title>fun</title>
<soup:attributes>{"tags":[],"type":"image","source":"http://df.magmawiki.com/images/4/40/FunComic.png","body":"fun","url":"http://7.asset.soup.io/asset/2580/1319_fe5c.png"}</soup:attributes>
<description>&lt;p&gt;&lt;a href="http://df.magmawiki.com/images/4/40/FunComic.png"&gt;&lt;img alt="1319_fe5c_400" height="1537" src="http://7.asset.soup.io/asset/2580/1319_fe5c_400.png" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;fun&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user27220" &gt;&lt;a class="" href="http://wytukaze.soup.io/post/195711839/fun"&gt;&lt;span class="name"&gt;wytukaze&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user31661" &gt;&lt;a class="" href="http://soup.never-afk.de/post/195716976/fun"&gt;&lt;span class="name"&gt;bitstacker&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Wed, 30 Nov 2011 19:14:04 GMT</pubDate><link>http://log.n0q.org/post/195765996/fun</link><guid isPermaLink="false">urn:www-soup-io:1:195765996</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://d.asset.soup.io/asset/1306/2157_ec78.jpeg"/>
<title>Guido Westerwelle</title>
<soup:attributes>{"tags":[],"type":"image","source":"http://krautchan.net/files/1291762959002.jpg","body":"Guido Westerwelle \u003Cbr /\u003E\u003Cbr /\u003E\u003Ca href=\"http://krautchan.net/files/1291762959002.jpg\"\u003E\u003Cbr /\u003E\u003C/a\u003E","url":"http://d.asset.soup.io/asset/1306/2157_ec78.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href="http://krautchan.net/files/1291762959002.jpg"&gt;&lt;img alt="2157_ec78" height="523" src="http://d.asset.soup.io/asset/1306/2157_ec78.jpeg" width="375" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Guido Westerwelle &lt;br /&gt;&lt;br /&gt;&lt;a href="http://krautchan.net/files/1291762959002.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user100231" &gt;&lt;a class="" href="http://wampe.soup.io/post/92722878/Guido-Westerwelle"&gt;&lt;span class="name"&gt;wampe&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user226937" &gt;&lt;a class="" href="http://awezone.soup.io/post/195691407/Guido-Westerwelle"&gt;&lt;span class="name"&gt;awezone&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Wed, 30 Nov 2011 19:12:05 GMT</pubDate><link>http://log.n0q.org/post/195765283/Guido-Westerwelle</link><guid isPermaLink="false">urn:www-soup-io:1:195765283</guid><category domain="contenttype">image</category></item>
<item><enclosure type="image/jpeg" length="0" url="http://2.asset.soup.io/asset/2577/4306_c11c_400.jpeg"/>
<title>CHALLANGE ACCEPTED!</title>
<soup:attributes>{"tags":[],"type":"image","source":"http://9gag.com/gag/788019?ref=fb-share","body":"CHALLANGE ACCEPTED!","url":"http://2.asset.soup.io/asset/2577/4306_c11c.jpeg"}</soup:attributes>
<description>&lt;p&gt;&lt;a href="http://9gag.com/gag/788019?ref=fb-share"&gt;&lt;img alt="4306_c11c_400" height="524" src="http://2.asset.soup.io/asset/2577/4306_c11c_400.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;CHALLANGE ACCEPTED!&lt;/p&gt;&lt;p&gt;[Reposted from &lt;span class="user_container  user220459" &gt;&lt;a class="" href="http://volldost.soup.io/post/195478978/CHALLENGE-ACCEPTED"&gt;&lt;span class="name"&gt;volldost&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; via &lt;span class="user_container  user226937" &gt;&lt;a class="" href="http://awezone.soup.io/post/195691594/CHALLANGE-ACCEPTED"&gt;&lt;span class="name"&gt;awezone&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;]&lt;/p&gt;</description><pubDate>Wed, 30 Nov 2011 19:10:57 GMT</pubDate><link>http://log.n0q.org/post/195764977/CHALLANGE-ACCEPTED</link><guid isPermaLink="false">urn:www-soup-io:1:195764977</guid><category domain="contenttype">image</category></item>
  </channel>
</rss>

