<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de-DE">
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <title>mecker. mecker. mecker.</title>
    <id>http://blog.posativ.org/</id>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/" />
    <link rel="self" type="application/atom+xml" href="http://blog.posativ.org/atom/" />
    <updated>2012-02-03T10:34:00Z</updated>
    <generator uri="https://posativ.org/acrylamid/" version="0.3.0-dev">acrylamid</generator>
    <entry>
    <title>Linkschleuder #16</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2012/linkschleuder-16/" />
    <id>tag:blog.posativ.org,2012-02-03:/2012/linkschleuder-16</id>
    <updated>2012-02-03T10:34:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://code.google.com/p/zen-coding/&#34;&gt;Zen Coding&lt;/a&gt; – &lt;em&gt;a new way of writing
  &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; and &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt; code&lt;/em&gt;, &lt;a href=&#34;https://bitbucket.org/wbond/sublime-2-zencoding&#34;&gt;Sublime Text 2&amp;nbsp;Plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/apenwarr/sshuttle&#34;&gt;sshuttle&lt;/a&gt; – transparenter Proxy trifft
  &lt;span class=&#34;caps&#34;&gt;VPN&lt;/span&gt;, ohne viel basteln und ärgern. Einfach&amp;nbsp;&lt;span class=&#34;caps&#34;&gt;SSH&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://ziproxy.sourceforge.net/&#34;&gt;Ziproxy&lt;/a&gt; – ein zippender Proxy, der
  allerdings nicht alle externen Quellen in eine Datei packt. Dann wäre es
  für&amp;#8217;s Handy praktisch&amp;nbsp;gewesen.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://thechangelog.com/post/16464262046/gitfinger-finger-github-users-from-the-command-line&#34;&gt;gitfinger&lt;/a&gt;
  – Stalking auf&amp;nbsp;GitHub.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://python-for-humans.heroku.com/&#34;&gt;python for humans&lt;/a&gt; – ein sehr witziger
  Rant über Python und was die Community besser machen&amp;nbsp;kann.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.ezyang.com/2011/11/how-to-read-haskell/&#34;&gt;How to read Haskell like&amp;nbsp;Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://crate.io/&#34;&gt;crate.io&lt;/a&gt; – ein PyPi-Mirror, der quelloffen ist und mehr
  Features bietet als &lt;a href=&#34;http://pypi.python.org/pypi&#34;&gt;PyPi&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.merproject.org/&#34;&gt;mer&lt;/a&gt; – eine offene, optimiert für Mobilgeräte,
  Distribution á la &lt;a href=&#34;https://www.meego.com/&#34;&gt;MeeGo&lt;/a&gt; mit Fokus auf Qt und&amp;nbsp;&lt;span class=&#34;caps&#34;&gt;HTML5&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://plasma-active.org/&#34;&gt;plasma active&lt;/a&gt; – ein &lt;span class=&#34;caps&#34;&gt;KDE&lt;/span&gt; Projekt für Tablets und
  Mobilgeräte, der doch schon etwas besser als Android aussieht. Ein weiterer
  Beweis, dass &lt;span class=&#34;caps&#34;&gt;KDE&lt;/span&gt; verdammt modular&amp;nbsp;ist.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://goaccess.prosoftcorp.com/&#34;&gt;goaccess&lt;/a&gt; – ein (Apache) Common Logfile
  Reader. Mit ncurses (!) und für große Bildschirme optimiert! &lt;a href=&#34;http://blog.posativ.org/img/2012/goaccess.png&#34;&gt;Beispiel&lt;/a&gt;?&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://shop.oreilly.com/product/0636920022473.do&#34;&gt;&lt;span class=&#34;caps&#34;&gt;HTML5&lt;/span&gt; for Publishers&lt;/a&gt; –
  kostenlos in &lt;span class=&#34;caps&#34;&gt;PDF&lt;/span&gt;, epub und Mobi (auch für &lt;a href=&#34;http://www.schockwellenreiter.de/blog/2012/01/23/kostenlose-ebooks-uber-ebooks/&#34;&gt;Kindle&lt;/a&gt;) nach&amp;nbsp;Registrierung&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
<entry>
    <title>Linkschleuder #15</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2012/linkschleuder-15/" />
    <id>tag:blog.posativ.org,2012-02-02:/2012/linkschleuder-15</id>
    <updated>2012-02-02T21:56:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;Diesmal etwas *hust* sehr *hust*&amp;nbsp;Mac-lastig.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.aramzamzam.net/nativa/&#34;&gt;Nativa&lt;/a&gt; – &lt;em&gt;der&lt;/em&gt; Client für
  &lt;a href=&#34;http://libtorrent.rakshasa.no/&#34;&gt;rtorrent&lt;/a&gt;&amp;nbsp;schlechthin.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://chipmunkninja.com/Tunneler&#34;&gt;TunnelerX&lt;/a&gt; – und der Vorgänger
  &lt;a href=&#34;http://www.chipmunkninja.com/Tunneler-0.9---An-SSH-1g@&#34;&gt;Tunneler&lt;/a&gt;, der ein
  Icon in die Leiste setzt, um ad-hoc einen &lt;span class=&#34;caps&#34;&gt;SSH&lt;/span&gt;-Tunnel&amp;nbsp;aufzubauen.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://d.hatena.ne.jp/os0x/20100612/1276330696&#34;&gt;NinjaKit&lt;/a&gt; – GreaseMonkey
  für&amp;nbsp;Safari.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mplayerx.org/&#34;&gt;MplayerX&lt;/a&gt; – eine Art &lt;span class=&#34;caps&#34;&gt;VLC&lt;/span&gt; nur in hübsch (und&amp;nbsp;funktionaler).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.postbox-inc.com/&#34;&gt;Postbox&lt;/a&gt; – ein kommerzieller Mozilla
  Thunderbird Fork, der einfach nur etwas mehr Mac-&lt;span class=&#34;caps&#34;&gt;GUI&lt;/span&gt; hat. Nicht&amp;nbsp;empfehlenswert.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.lynapp.com/&#34;&gt;Lyn&lt;/a&gt; – möchte eine leichtgewichtige
  iPhoto-Alternative&amp;nbsp;sein.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://homepage.mac.com/nsekine/SYW/software/english/miniusage/index.html&#34;&gt;MiniUsage&lt;/a&gt;
  – zeigt diverse (unzählig viele) Statusinformationen leicht zugänglich per
  Dropdown-Menü in der Leiste&amp;nbsp;an.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.macdentro.com/MacDentro/Home.html&#34;&gt;MacDentro&lt;/a&gt; – &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X
  Wartungstool, das die &lt;span class=&#34;caps&#34;&gt;UNIX&lt;/span&gt;-Dienste und -Interna aufräumt (cronjobs laufen,
  etc. pp.). Gibt&amp;#8217;s auch in hübsch und kommerziell:
  &lt;a href=&#34;http://www.maintain.se/cocktail&#34;&gt;Cocktail.app&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.enqueueapp.com/&#34;&gt;Enqueue&lt;/a&gt; – eine leichtgewichtige
  iTunes-Alternative. Klare Empfehlung von&amp;nbsp;mir!&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.bean-osx.com/Bean.html&#34;&gt;Bean&lt;/a&gt; – eine Textverarbeitung für &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X.
  Hilfreich, wenn man auf Pages/Open|LibreOffice verzichten&amp;nbsp;möchte.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.sourcetreeapp.com/&#34;&gt;SourceTree&lt;/a&gt; – kostenloser Client für
  Mercurial und Git mit Integration von &lt;a href=&#34;https://github.com/&#34;&gt;github.com&lt;/a&gt; und
  &lt;a href=&#34;https://bitbucket.org/&#34;&gt;bitbucket.org&lt;/a&gt;. Erfordert nach einem Monat eine
  kostenlose&amp;nbsp;Registrierung.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.inkcode.net/qute&#34;&gt;Qute&lt;/a&gt; – ein ziemlich hübscher Editor für
  &lt;a href=&#34;http://daringfireball.net/projects/markdown/&#34;&gt;Markdown&lt;/a&gt;; gibt&amp;#8217;s auch für&amp;nbsp;&lt;span class=&#34;caps&#34;&gt;PC&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://tm2tips.tumblr.com/&#34;&gt;TextMate 2 Tips&lt;/a&gt; – ein Blog über das
  aufkommende TextMate 2. Unabhängig davon gibt es auch ein
  &lt;a href=&#34;http://www.matewiki.com/index.php?title=Main_Page&#34;&gt;MateWiki&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
<entry>
    <title>polipo – a caching web proxy</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2012/polipo-a-caching-web-proxy/" />
    <id>tag:blog.posativ.org,2012-01-29:/2012/polipo-a-caching-web-proxy</id>
    <updated>2012-01-29T20:21:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;In den zwei vergangenen Wochen habe ich viel mit Proxy-Techniken rumgespielt.
Anfangs noch ein &lt;a href=&#34;https://de.wikipedia.org/wiki/SOCKS&#34;&gt;SOCKSv5&lt;/a&gt; über &lt;span class=&#34;caps&#34;&gt;SSH&lt;/span&gt; getunnelt, über direkte &lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt;
Authentifizierung mit &lt;a href=&#34;http://www.pps.jussieu.fr/~jch/software/polipo/&#34;&gt;polipo&lt;/a&gt; und &lt;a href=&#34;http://privoxy.org/&#34;&gt;Privoxy&lt;/a&gt; im Chaining auf einem 128
MiB &lt;span class=&#34;caps&#34;&gt;RAM&lt;/span&gt; &lt;a href=&#34;http://edis.ch/&#34;&gt;Host in der Schweiz&lt;/a&gt;. Leider entsprach das nicht direkt meinem
Wunsch, den Verkehr bis zum anonymisierenden Proxy im Klartext zu schicken –
und langsam(er) war es auch. Für zwei Tage hatte ich auch mein SheevaPlug als
caching web proxy missbraucht, nur machte das in der Verbindung mit Privoxy
nicht allzu viel Spaß: über 3 Sekunden für ein Aufruf von &lt;code&gt;spiegel.de&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Das primäre Problem mit &lt;span class=&#34;caps&#34;&gt;SSH&lt;/span&gt; war das Abbrechen der Verbindung in jedem Fall
nach dem Ruhezustand (wenn nicht schon nach 5 Minuten nichts tun, was
zumindest mit &lt;code&gt;KeepAlive&lt;/code&gt; gehalten werden kann, eine &lt;span class=&#34;caps&#34;&gt;DSL&lt;/span&gt;-Zwangstrennung
überlebt das nicht). Zu spät habe ich von &lt;a href=&#34;http://www.harding.motd.ca/autossh/&#34;&gt;autossh&lt;/a&gt; erfahren und habe
stattdessen mit der Äpp &lt;a href=&#34;http://www.chipmunkninja.com/Tunneler-0.9---An-SSH-1g@&#34;&gt;Tunneler&lt;/a&gt; bzw. dessen Nachfolger &lt;a href=&#34;http://chipmunkninja.com/Tunneler&#34;&gt;TunnelerX&lt;/a&gt;
(free as in free beer) gespielt, wo letzteres zwar die Ports richtig
hinbekommt, nur ersteres aber die SOCKSv5-Verbindung – reconnecten nach dem
Schlafen kann es auch&amp;nbsp;nicht.&lt;/p&gt;
&lt;p&gt;Mit &lt;span class=&#34;caps&#34;&gt;DSL&lt;/span&gt; ~4500 macht ein Setup mit einem caching web proxy in der Schweiz wenig
Sinn, viel cooler wäre ja ein lokaler (oder im &lt;span class=&#34;caps&#34;&gt;LAN&lt;/span&gt;, sofern man im heimischen
W-&lt;span class=&#34;caps&#34;&gt;LAN&lt;/span&gt; ist) Proxy der das Pseudo-Scheiß-Caching vom Firefox und Konsorten
ausgleicht. Hier ein Tipp unter &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X: &lt;a href=&#34;https://github.com/dustinrue/ControlPlane&#34;&gt;ControlPlane&lt;/a&gt;, open-source, ist ein
Tool, dass verschiedene (Netzwerk-) Einstellungen je nach Abstand des Mondes
oder Wifi &lt;span class=&#34;caps&#34;&gt;SSID&lt;/span&gt;/&lt;span class=&#34;caps&#34;&gt;BSSID&lt;/span&gt; aktivieren kann. So kann für das Uni-Netz der heimische
Proxy-Server deaktiviert werden und sobald wieder das &amp;#8216;traute Netz da ist&amp;nbsp;aktivieren.&lt;/p&gt;
&lt;h3&gt;polipo&lt;/h3&gt;
&lt;p&gt;Warum &lt;a href=&#34;http://www.pps.jussieu.fr/~jch/software/polipo/&#34;&gt;polipo&lt;/a&gt;? Primär, weil es für Einzelbenutzer oder wenige Clients
konzipiert ist. Wer die hunderttausend Optionen im &lt;a href=&#34;http://www.squid-cache.org/&#34;&gt;squid&lt;/a&gt; kennt, kann
sicherlich auch den nutzen. Polipo gibt&amp;#8217;s im &lt;a href=&#34;https://github.com/mxcl/homebrew/&#34;&gt;homebrew&lt;/a&gt;-Repository, bringt
allerdings kein &lt;code&gt;launchd&lt;/code&gt;-Skript mit (gibt&amp;#8217;s unten). Da ich meinem MacBook Pro
letztens ein &lt;span class=&#34;caps&#34;&gt;RAM&lt;/span&gt;-Upgrade gegeben habe, darf polipo maximal ein halbes Gigabyte
&lt;span class=&#34;caps&#34;&gt;RAM&lt;/span&gt; nutzen – und das empfehle ich jedem. Denn polipo ist etwas buggy. Es hat
zwar einen Maintainer, aber die Commits halten sich in Grenzen. Wenn ich über
&lt;del&gt;vkontakte.ru&lt;/del&gt; &lt;a href=&#34;http://vk.com/&#34;&gt;vk.com&lt;/a&gt; einige Songs im &lt;span class=&#34;caps&#34;&gt;HTML5&lt;/span&gt; Player
streame, dann gibt es nach neun oder zehn&amp;nbsp;ein&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Short on chunk memory &amp;#8211; attempting to punch holes in the middle of&amp;nbsp;objects.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;und das bedeutet nichts gutes, denn es wird mitten im Streaming der Content
gelöscht und die Verbindung abgebrochen, da es an &lt;span class=&#34;caps&#34;&gt;RAM&lt;/span&gt; mangelt. YouTube
betrifft es ebenso. Aber nichtsdestotrotz sollte man polipo nutzen, denn neben
40 &lt;span class=&#34;caps&#34;&gt;MB&lt;/span&gt;/s Downstream (Firefox&amp;#8217; &lt;span class=&#34;caps&#34;&gt;XML&lt;/span&gt; Parser ist wirklich langsam ;-) bringt polipo
auch nützliche Privacy-Optionen&amp;nbsp;mit:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;c1&#34;&gt;# censoredHeaders = from, accept-language&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;censorReferer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;maybe&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;censoredHeaders&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;accept&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;language&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;und kann auch direkt einen eigenen &lt;span class=&#34;caps&#34;&gt;DNS&lt;/span&gt;-Server wie &lt;a href=&#34;http://thekelleys.org.uk/dnsmasq/doc.html&#34;&gt;dnsmasq&lt;/a&gt; nutzen (meine
Hoffnung war ja, dass polipo&amp;#8217;s &lt;code&gt;proxyOffline = true&lt;/code&gt; offline &amp;#8220;Browsen&amp;#8221; bringt,
aber die &lt;span class=&#34;caps&#34;&gt;DNS&lt;/span&gt;-Queries werden dennoch ein &lt;em&gt;Fehler: Server nicht gefunden&lt;/em&gt;&amp;nbsp;bringen).&lt;/p&gt;
&lt;h3&gt;~/Library/LaunchAgents/org.posativ.polipo.plist&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;&lt;span class=&#34;caps&#34;&gt;UTF&lt;/span&gt;-8&amp;quot;?&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;&amp;lt;!&lt;span class=&#34;caps&#34;&gt;DOCTYPE&lt;/span&gt; plist &lt;span class=&#34;caps&#34;&gt;PUBLIC&lt;/span&gt; &amp;quot;-//Apple//&lt;span class=&#34;caps&#34;&gt;DTD&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;PLIST&lt;/span&gt; 1.0//&lt;span class=&#34;caps&#34;&gt;EN&lt;/span&gt;&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;plist&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;dict&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;nt&#34;&gt;&amp;lt;key&amp;gt;&lt;/span&gt;Label&lt;span class=&#34;nt&#34;&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;nt&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;org.posativ.polipo&lt;span class=&#34;nt&#34;&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;nt&#34;&gt;&amp;lt;key&amp;gt;&lt;/span&gt;ProgramArguments&lt;span class=&#34;nt&#34;&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;nt&#34;&gt;&amp;lt;array&amp;gt;&lt;/span&gt;
        &lt;span class=&#34;nt&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;/usr/local/bin/polipo&lt;span class=&#34;nt&#34;&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
        &lt;span class=&#34;nt&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;-c&lt;span class=&#34;nt&#34;&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
        &lt;span class=&#34;nt&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;/usr/local/etc/polipo/config&lt;span class=&#34;nt&#34;&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/array&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;nt&#34;&gt;&amp;lt;key&amp;gt;&lt;/span&gt;RunAtLoad&lt;span class=&#34;nt&#34;&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;nt&#34;&gt;&amp;lt;true/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;/dict&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;/plist&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Diese plist generiert mir &lt;a href=&#34;http://www.peterborgapps.com/lingon/&#34;&gt;Lingon&lt;/a&gt; für &lt;code&gt;/usr/local/bin/polipo -c /usr/local/etc/polipo/config&lt;/code&gt; und sollte in den genannten Ort kopiert
werden, sodass polipo beim Anmelden gestartet wird. Mit &lt;code&gt;launchctl load
~/Library/LaunchAgents/org.posativ.polipo.plist&lt;/code&gt; wird der Daemon&amp;nbsp;gestartet.&lt;/p&gt;
&lt;h3&gt;Adblocking mit&amp;nbsp;adzapper&lt;/h3&gt;
&lt;p&gt;Privoxy ist für gewöhnlich das Tool der Wahl wenn es um Werbeblocken auf
Proxy-Seite geht, aber da es viel &lt;span class=&#34;caps&#34;&gt;CPU&lt;/span&gt;-Leistung verbrät, habe ich mich nach
Alternativen umgeschaut. Primär Alternativen, die mit den &lt;a href=&#34;https://easylist.adblockplus.org/de/&#34;&gt;Easylisten von
Adblock&lt;/a&gt; kompatibel sind. &lt;a href=&#34;http://www.pps.jussieu.fr/~jch/software/polipo/&#34;&gt;polipo&lt;/a&gt; hat zwar auch ein regex-kompatibles
&lt;code&gt;polipo.forbidden&lt;/code&gt;-file, aber die verfügbaren &lt;a href=&#34;http://rightfootin.blogspot.com/2009/11/ad-blocking-with-polipo.html&#34;&gt;adblock2polipo.(py|rb)&lt;/a&gt;
produzieren inkompatible reguläre Ausdrücke. Ob der Fehler bei der Liste oder
polipo liegt, weiß ich nicht. Allerdings bringt polipo ein &lt;em&gt;redirector&lt;/em&gt;
Feature mit. Das zwischen ein Perl-Programm wie z.B. &lt;a href=&#34;http://adzapper.sourceforge.net/&#34;&gt;adzapper&lt;/a&gt; &lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt; (ohne
S) und filtert anhand einiger regulären&amp;nbsp;Ausdrücke:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;wget http://adzapper.sourceforge.net/scripts/squid_redirect -O /usr/local/bin/adzapper
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;redirector = /usr/local/bin/adzapper&amp;quot;&lt;/span&gt; &amp;gt;&amp;gt; /usr/local/etc/polipo/config

launchctl unload ~/Library/LaunchAgents/org.posativ.polipo.plist
launchctl load ~/Library/LaunchAgents/org.posativ.polipo.plist
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Alternativ ginge auch eine &lt;code&gt;forward /&lt;/code&gt;-Direktive zu beispielsweise &lt;a href=&#34;http://bfilter.sourceforge.net/index.php&#34;&gt;bfilter&lt;/a&gt; mit aktivem&amp;nbsp;Adblock-Support.&lt;/p&gt;</content>
</entry>
<entry>
    <title>Linkschleuder #14</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2012/linkschleuder-14/" />
    <id>tag:blog.posativ.org,2012-01-20:/2012/linkschleuder-14</id>
    <updated>2012-01-20T10:43:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.keylength.com/en/compare/&#34;&gt;Cryptographic Key Length Recommendation&lt;/a&gt;
  – im Seminar aufgeschnappt; empfohlene Schlüssellängen einiger&amp;nbsp;Behörden.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bitbucket.org/aykevl93/weaveclient-chromium-continued/overview&#34;&gt;weaveclient-chromium-continued&lt;/a&gt;
  – nicht getestet, aber wäre cool, wenn das&amp;nbsp;funktioniert.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://projects.puppetlabs.com/projects/puppet&#34;&gt;puppet&lt;/a&gt; – automatisiertes
  Einrichten eines *nix-Systems mit einer Ruby-&lt;span class=&#34;caps&#34;&gt;DSL&lt;/span&gt;.&lt;br /&gt;
  „Puppet, an automated administrative engine for your *nix systems, performs
  administrative tasks (such as adding users, installing packages, and
  updating server configurations) based on a centralized&amp;nbsp;specification.“&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://manpages.ubuntu.com/manpages/dapper/de/man8/start-stop-daemon.8.html&#34;&gt;&lt;code&gt;start-stop-daemon&lt;/code&gt;&lt;/a&gt;
  – ein Debian/Ubuntu-Tool, um das Schreiben von eigenen Dämonen deutlich zu
  erleichten (&lt;a href=&#34;https://gist.github.com/6eec44bde70b8405ce73&#34;&gt;Beispiel&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/visionmedia/watch&#34;&gt;Watch&lt;/a&gt; – A tiny C program used to
  periodically execute a command. (via &lt;a href=&#34;http://thechangelog.com/post/14041353400/watch-simple-periodical-execution-utility-in-c&#34;&gt;The
  Changelog&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://dcrypt.it/&#34;&gt;dcrypt.it&lt;/a&gt; – &lt;span class=&#34;caps&#34;&gt;DLC&lt;/span&gt; Entschlüsselung mit ein paar mehr
  Input-Methoden als &lt;a href=&#34;http://posativ.org/decrypt/&#34;&gt;mein Angebot&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.pps.jussieu.fr/~jch/software/polipo/&#34;&gt;Polipo&lt;/a&gt; – a small and fast
  caching web proxy. Sowas wie &lt;a href=&#34;http://www.squid-cache.org/&#34;&gt;squid&lt;/a&gt;, aber eher für
  Single-User/Home-Betrieb gedacht. Werd&amp;#8217; ich mir mal näher&amp;nbsp;anschauen.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://ettercap.sourceforge.net/index.php&#34;&gt;ettercap&lt;/a&gt; – eine Suite für
  Man-in-the-Middle Angriffe im&amp;nbsp;&lt;span class=&#34;caps&#34;&gt;LAN&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
<entry>
    <title>WhatsApp Privacy Policy: Verschlüsselung im Transportmedium.</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2012/whatsapp-privacy-policy-verschluesselung-im-transportmedium/" />
    <id>tag:blog.posativ.org,2012-01-15:/2012/whatsapp-privacy-policy-verschluesselung-im-transportmedium</id>
    <updated>2012-01-15T23:43:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;&lt;a href=&#34;http://www.whatsapp.com/&#34;&gt;WhatsApp&lt;/a&gt; kennt sicherlich jeder Smartphone-Nutzer. Hat über &lt;a href=&#34;http://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2011/&#34;&gt;zwei
Millionen&lt;/a&gt; aktive Nutzer zu jeder Stunde und ist für jede mobile Plattform
verfügbar, leider nur nicht für den Desktop. Das lässt sich ja vielleicht
ändern, dachte ich mir und schmiss &lt;a href=&#34;https://wireshark.org/&#34;&gt;WireShark&lt;/a&gt;&amp;nbsp;an:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;WA............Android-2.7.431.........~.......Z*.....8..........~._......Xbm9uY2
U9IjE4ODAwNzM1MDU3OS IscW9wPSJhdXRoIixjaGFyc2V0PXV0Zi04LGFsZ29yaXRobT1tZDUtc2Vzc
w==.........cmVhbG09InMud2hhdHNhcHAubmV0IixyZXNwb25zZT0yZTY4M2U0YjlhNTA2ODdhMmN
mODA3NDQ1MTMxODM3Yyxub25jZT0iMTg4MDA3MzUwNTc5IixkaWdlc3QtdXJpP SJ4bXBwL3Mud2hhdH
NhcHAubmV0Iixjbm9uY2U9IjFtOWRzdGM2NzY1ZHQiLHFvcD1hdXRoLHVzZXJuYW1lPSI0OTE2MzYzMT
A2MTMiLG5jPTAwMDAwMDAx.#.......Rj#.13050253130. 1620558113....t8..+......t..a..
Ich....HC..:....{.M....Ua$....HC..2.:..........,..H8...491896312624.C../..../...
404......J......H8.C..2.........s&amp;lt;C..APA91bHEmfHjKPpBwu3MJLCOtK4hFMwe0ZWHdXimFDr1
pxIa18rznmbZ6FLB-7pFMVwX0GJiVPcUWCaAvnwTR0O_LVfEENMr--GtpzSy2FbWtq1IKSOG9_Z0N6Kz
LlIit9JaKaui47VY....t......491521283131..!..HC..3.:....491521283131.....{.L.)..H8
...491721883139.C..3......{.L...16990....t.....4914682512635..&amp;quot;..HC..4.:...
4914682512635.....{.L.+..H8..4915152523662.C..4......{.L...128494....t......t8..
.491896312624.
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Sieht ziemlich unleserlich aus. Die ersten zwei Bytes beginnen wohl das
interne &lt;span class=&#34;caps&#34;&gt;XMPP&lt;/span&gt;-Protokoll, WhatsApp-Version und dann&amp;#8230; äh ja. Dann sind da meine
Telefonnummer, Name, Ziel-Nummer (+ deren Zweitnummer und Geburtsdatum) der&amp;nbsp;Gesprächspartnerin.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Version: &lt;em&gt;Android-2.7.431&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;meine Nummer: &lt;em&gt;491896312624&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Zielnummer: &lt;em&gt;4914682512635&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Zweit-Nummer: &lt;em&gt;4915152523662&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Geburtsdatum: &lt;em&gt;16990&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wohlgemerkt ist das ein Dump, wenn ich die App einfach öffne. Wenn Text kommt,
dann ist da etwas weniger (Nachricht: Ich doch nicht&amp;nbsp;xD).&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;.F..]....4914682512635...C..316008602-1......O..........Ich doch nicht xD.@..]8
...4914682512635.C..316008602-1........O....C..316008602-1...
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ich war etwas erstaunt. WhatsApp verschlüsselt &amp;#8211; aber nur das eigene
Protokoll, was mit den Nutzerdaten passiert, ist ihnen egal. Ich kann mir
keine Erklärung dafür geben. Rechenleistung geht ja eh schon drauf, indem das
Protokoll verschlüsselt wird, warum also nicht gleich noch den Rest
verschlüsseln? Hauptsache keiner entwickelt einen Desktop-Clienten außerhalb
ihres&amp;nbsp;Einflussbereiches!11&lt;/p&gt;
&lt;p&gt;Im öffentlichen Hotspot sind die Daten für jedermann lesbar, für
verschlüsseltes &lt;span class=&#34;caps&#34;&gt;WLAN&lt;/span&gt; kann der Beitreber &lt;code&gt;ngrep&lt;/code&gt;-en und dass &lt;span class=&#34;caps&#34;&gt;GMS&lt;/span&gt;/&lt;span class=&#34;caps&#34;&gt;UMTS&lt;/span&gt; nicht
mehr sicher ist, weiß man spätestens nach dem &lt;a href=&#34;http://www.spiegel.de/netzwelt/netzpolitik/0,1518,776465,00.html&#34;&gt;Skandal in Dresden&lt;/a&gt;. Das
Problem ist auch &lt;a href=&#34;http://rickey-g.blogspot.com/2011/05/whatsapp-connection-details.html&#34;&gt;nicht&lt;/a&gt; &lt;a href=&#34;http://shakal.blog.de/2011/03/22/whatsapp-risiken-10872342/&#34;&gt;unbekannt&lt;/a&gt;, nur hat es noch keiner genug
reverse&amp;nbsp;engineered.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span class=&#34;caps&#34;&gt;PS&lt;/span&gt;: alle personenbezogenen Informationen sind&amp;nbsp;anonymisiert.&lt;/em&gt;&lt;/p&gt;</content>
</entry>
<entry>
    <title>Linkschleuder #13</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2012/linkschleuder-13/" />
    <id>tag:blog.posativ.org,2012-01-12:/2012/linkschleuder-13</id>
    <updated>2012-01-12T13:27:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://tapirgo.com/&#34;&gt;Tapir&lt;/a&gt; – eine Alternative zu &lt;a href=&#34;https://www.google.com/cse/&#34;&gt;Google Custom Search&lt;/a&gt;, sprich eine externe Suche für statische Seiten mit&amp;nbsp;Atom-Feed-Input.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://readthedocs.org/&#34;&gt;Read the Docs&lt;/a&gt; – ein &lt;a href=&#34;http://sphinx.pocoo.org/&#34;&gt;Sphinx&lt;/a&gt;-Dokumentationen-Hoster, der auch auf eigene Domains serviert. &lt;a href=&#34;http://readthedocs.org/docs/read-the-docs/en/latest/getting_started.html&#34;&gt;Hier geht&amp;#8217;s&amp;nbsp;los&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://packages.python.org/an_example_pypi_project/sphinx.html&#34;&gt;Einführung in Sphinx&lt;/a&gt; – nicht offiziell, aber sehr hilfreich für den ersten&amp;nbsp;Schritt.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kennethreitz/envoy&#34;&gt;Envoy: Python Subprocesses for Humans.&lt;/a&gt; – und das hat Python bitter&amp;nbsp;nötig!&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://excess.org/article/2011/12/unfortunate-python/&#34;&gt;Unfortunate Python&lt;/a&gt; – auch Python ist nicht perfekt in seiner&amp;nbsp;Implementierung.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://nadiana.com/python-pickle-insecure&#34;&gt;Why Python Pickle is insecure&lt;/a&gt; and &lt;a href=&#34;http://blog.nelhage.com/2011/03/exploiting-pickle/&#34;&gt;Exploiting&amp;nbsp;Pickle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://rsslounge.aditu.de/&#34;&gt;rsslounge&lt;/a&gt; – web-basierter &lt;span class=&#34;caps&#34;&gt;RSS&lt;/span&gt; Aggregator mit &lt;span class=&#34;caps&#34;&gt;PHP&lt;/span&gt; und MySQL. Ganz nett, aber noch etwas bugbelastet. Drei meiner 40 Feeds (&lt;span class=&#34;caps&#34;&gt;OPML&lt;/span&gt; Import) konnte er nicht laden und ist nun nicht mehr nutzbar. &lt;a href=&#34;https://code.google.com/p/rsslounge/&#34;&gt;Google&amp;nbsp;Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.adminer.org/&#34;&gt;Adminer&lt;/a&gt; – Datenbank-Verwaltung (MySQL, SQLite, etc.) in einer einzigen &lt;span class=&#34;caps&#34;&gt;PHP&lt;/span&gt;-Datei. Angenehm im Vergleich zu &lt;code&gt;mysql-client&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/satyr/coco&#34;&gt;Coco&lt;/a&gt; – is a CoffeeScript dialect that aims to be more radical and&amp;nbsp;practical.&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
<entry>
    <title>Linkschleuder #12</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2012/linkschleuder-12/" />
    <id>tag:blog.posativ.org,2012-01-09:/2012/linkschleuder-12</id>
    <updated>2012-01-09T14:56:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;Es wird leider auch nicht&amp;nbsp;weniger:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://maps3d.svc.nokia.com/webgl/&#34;&gt;Nokias Google Maps Fork&lt;/a&gt; – ohne Flash,
  sondern in WebGL. Sehr performant und echt beeindruckende&amp;nbsp;Qualität.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://airdroid.com/&#34;&gt;Wireless Android Management&lt;/a&gt; – ein sehr hübsches
  Webinterface auf Knopfdruck. So lassen sich bsw. &lt;span class=&#34;caps&#34;&gt;SMS&lt;/span&gt; im Browser&amp;nbsp;schreiben.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://torcloudservers.com/&#34;&gt;Tor bridges in the Amazon cloud&lt;/a&gt; –
  vorgefertigte Tor-Images für Amazons &lt;span class=&#34;caps&#34;&gt;EC2&lt;/span&gt;, &lt;del&gt;ab 3$/Monat für gut 15 &lt;span class=&#34;caps&#34;&gt;GB&lt;/span&gt; Traffic&lt;/del&gt;
  ersten 15 &lt;span class=&#34;caps&#34;&gt;GB&lt;/span&gt; Traffic sind kostenfrei, bei maximal 40 GiB kann das bis zu 3$/Monat&amp;nbsp;kosten.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://johnmacfarlane.net/pandoc/&#34;&gt;Pandoc&lt;/a&gt; – a universal document&amp;nbsp;converter.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.dehats.com/drupal/?q=node/58&#34;&gt;Lita&lt;/a&gt; – SQLite Administration Tool
  (mittels Adobe Air) ohne Error-Handling. Aber&amp;nbsp;hübsch.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/tthibo/SQL-Tutorial&#34;&gt;&lt;span class=&#34;caps&#34;&gt;SQL&lt;/span&gt; Tutorial using SQLite&lt;/a&gt; und
  &lt;a href=&#34;http://www.sqlite.org/syntaxdiagrams.html&#34;&gt;Syntax-Diagramme&lt;/a&gt; haben mir bei
  der Entwicklung von &lt;a href=&#34;https://github.com/posativ/weave-minimal/&#34;&gt;weave-minimal&lt;/a&gt; sehr&amp;nbsp;geholfen!&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.sublimetext.com/&#34;&gt;Sublime Text 2&lt;/a&gt; – auch wenn ich&amp;#8217;s schon
  erwähnt hatte. Der Texteditor ist derzeit das nonplusultra. Es macht so viel
  Spaß damit zu&amp;nbsp;arbeiten.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/vesln/issues&#34;&gt;GitHub Issue&lt;/a&gt; – ein &lt;span class=&#34;caps&#34;&gt;CLI&lt;/span&gt; Programm für
  GitHub&amp;#8217;s Issues (wer hätte das gedacht) in&amp;nbsp;Node.js.&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
<entry>
    <title>nginx</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2012/nginx/" />
    <id>tag:blog.posativ.org,2012-01-07:/2012/nginx</id>
    <updated>2012-01-07T22:03:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;Seit heute rennt das Blog unter &lt;a href=&#34;http://nginx.org/&#34;&gt;nginx&lt;/a&gt;. Der Grund ist einfach:
&lt;a href=&#34;http://www.lighttpd.net/&#34;&gt;lighttpd&lt;/a&gt; ist behindert zu konfigurieren, hat keine aktuellen/coolen
Features und ist zudem noch langsamer als nginx. Ich hoffte seit knapp einem
Jahr, dass sich in der Entwicklung was tut, aber außer einer Beta-Version mit
integriertem &lt;a href=&#34;http://redmine.lighttpd.net/wiki/1/AbsoLUAtion&#34;&gt;lua&lt;/a&gt;-Support (um überhaupt ein &lt;a href=&#34;http://redmine.lighttpd.net/wiki/1/Docs:Configuration#Conditional-Configuration&#34;&gt;if-else&lt;/a&gt; statt if-else-if
konfigurieren zu können) und zahlreichen &lt;em&gt;&lt;a href=&#34;http://blog.posativ.org/2011/lighttpd-git-grack-http-417/&#34;&gt;Won&amp;#8217;t&lt;/a&gt; &lt;a href=&#34;http://redmine.lighttpd.net/issues/1532&#34;&gt;fixes&lt;/a&gt;&lt;/em&gt; für 1.4.x hat
sich leider rein gar nichts&amp;nbsp;getan.&lt;/p&gt;
&lt;p&gt;Warum &lt;a href=&#34;http://nginx.org/&#34;&gt;nginx&lt;/a&gt;? Ja, das weiß ich auch nicht, aber die &lt;a href=&#34;https://en.wikipedia.org/wiki/Comparison_of_lightweight_web_servers&#34;&gt;Alternativen&lt;/a&gt; zu
non-Apache mit geringem Memory-Footprint, vielen Features und opensource sehen
schlecht aus. &lt;a href=&#34;https://en.wikipedia.org/wiki/Thttpd&#34;&gt;thttpd&lt;/a&gt; hat kein &lt;code&gt;mod_proxy&lt;/code&gt;, &lt;a href=&#34;http://www.cherokee-project.com/&#34;&gt;Cherokee&lt;/a&gt; bringt gleich
ein Web-&lt;span class=&#34;caps&#34;&gt;GUI&lt;/span&gt; zur Administration mit und &lt;a href=&#34;http://www.litespeedtech.com/overview.html&#34;&gt;LiteSpeed Web Server&lt;/a&gt; ist nicht
quell-offen. Also, was sind die Features von&amp;nbsp;nginx?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;schnell und&amp;nbsp;leichtgewichtig&lt;/li&gt;
&lt;li&gt;logische Konfiguration (was ich schon für behinderte Logik-Krämpfe mit lighttpd&amp;nbsp;hatte&amp;#8230;)&lt;/li&gt;
&lt;li&gt;mod_proxy, mod_fastcgi, expires, &lt;a href=&#34;https://en.wikipedia.org/wiki/PCRE&#34;&gt;&lt;span class=&#34;caps&#34;&gt;PCRE&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Moving from lighttpd to&amp;nbsp;nginx&lt;/h3&gt;
&lt;p&gt;Die Umstellung von lighttpd nach nginx ist nicht ganz ohne. Prinzipiell ist
alles anders und nginx hat keine Unterstützung für &lt;span class=&#34;caps&#34;&gt;CGI&lt;/span&gt; und rewrite-Regeln auf
Query-Parametern. Außerdem spawnt nginx nicht automatisch einen &lt;span class=&#34;caps&#34;&gt;PHP&lt;/span&gt;-Prozess
für FastCGI und erlaubt keine &lt;span class=&#34;caps&#34;&gt;POST&lt;/span&gt;-Requests auf statische Seiten &amp;#8211; aber das
lässt sich&amp;nbsp;umgehen.&lt;/p&gt;
&lt;h4&gt;1. Präambel -&amp;nbsp;/etc/nginx/nginx.conf&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;k&#34;&gt;user&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;www-data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;worker_processes&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;error_log&lt;/span&gt;  &lt;span class=&#34;s&#34;&gt;/var/log/nginx/error.log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;pid&lt;/span&gt;        &lt;span class=&#34;s&#34;&gt;/var/run/nginx.pid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;events&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;worker_connections&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;2048&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;http&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;include&lt;/span&gt;       &lt;span class=&#34;s&#34;&gt;/etc/nginx/mime.types&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

    &lt;span class=&#34;c1&#34;&gt;#access_log /var/log/nginx/access.log;&lt;/span&gt;

    &lt;span class=&#34;c1&#34;&gt;# cbc-mode ciphers might be vulnerable (&lt;span class=&#34;caps&#34;&gt;BEAST&lt;/span&gt;)&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;ssl_ciphers&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&lt;span class=&#34;caps&#34;&gt;RC4&lt;/span&gt;:&lt;span class=&#34;caps&#34;&gt;HIGH&lt;/span&gt;:!aNULL:!&lt;span class=&#34;caps&#34;&gt;MD5&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

    &lt;span class=&#34;kn&#34;&gt;sendfile&lt;/span&gt;        &lt;span class=&#34;no&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;keepalive_timeout&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;65&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;tcp_nodelay&lt;/span&gt;        &lt;span class=&#34;no&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

    &lt;span class=&#34;kn&#34;&gt;gzip&lt;/span&gt;  &lt;span class=&#34;no&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;gzip_disable&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;&lt;span class=&#34;caps&#34;&gt;MSIE&lt;/span&gt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;[1-6]\.(?!.*&lt;span class=&#34;caps&#34;&gt;SV1&lt;/span&gt;)&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;index&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;index.php&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;index.htm&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;index.html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

    &lt;span class=&#34;kn&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/etc/nginx/conf.d/*.conf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h4&gt;2. vhosts -&amp;nbsp;/etc/nginx/conf.d/posativ.org.conf&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;k&#34;&gt;server&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt;       &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;server_name&lt;/span&gt;  &lt;span class=&#34;s&#34;&gt;posativ.org&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;root&lt;/span&gt;         &lt;span class=&#34;s&#34;&gt;/home/www/posativ.org&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

    &lt;span class=&#34;kn&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;^~&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/blog&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;kn&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;conf.d/pyblosxom.redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

    &lt;span class=&#34;kn&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;~&lt;/span&gt; &lt;span class=&#34;sr&#34;&gt;^/(redmine|git)/&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;kn&#34;&gt;rewrite&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;^/(.*)&lt;/span&gt;$ &lt;span class=&#34;s&#34;&gt;https://posativ.org/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Selbsterklärend. Nicht mehr und nicht weniger will ich konfigurieren. Statt
im lighty irgendwelche obskuren Redirects auf Sockets != 443 zu kreieren,
gibt es hier ganz klar das Konzept „ich lausche auf diesen Ports mit folgenden&amp;nbsp;Einstellungen”.&lt;/p&gt;
&lt;h4&gt;3.&amp;nbsp;&lt;span class=&#34;caps&#34;&gt;SSL&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;In der Präambel lässt sich zudem noch die verwendete Cipher wählen und so
ein Angriff mittels &lt;span class=&#34;caps&#34;&gt;BEAST&lt;/span&gt;&amp;nbsp;verhindern.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;k&#34;&gt;server&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt;       &lt;span class=&#34;mi&#34;&gt;443&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;server_name&lt;/span&gt;  &lt;span class=&#34;s&#34;&gt;posativ.org&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;root&lt;/span&gt;         &lt;span class=&#34;s&#34;&gt;/home/www/posativ.org&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

    &lt;span class=&#34;kn&#34;&gt;ssl&lt;/span&gt;             &lt;span class=&#34;no&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;ssl_certificate&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;certs/posativ.org.crt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;ssl_certificate_key&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;certs/posativ.org.key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

    &lt;span class=&#34;kn&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;^~&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/redmine&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;kn&#34;&gt;proxy_pass&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;http://127.0.0.1:3001&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

    &lt;span class=&#34;kn&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;^~&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/git&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;kn&#34;&gt;proxy_pass&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;http://127.0.0.1:7654&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

    &lt;span class=&#34;c1&#34;&gt;# ...&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h4&gt;5. rewrite&amp;nbsp;rules&lt;/h4&gt;
&lt;p&gt;Das war zunächst das größte Problem. Ich pflege Rückwärtskompatibilität 
zwischen meinen (inzwischen vier) Blogs mit unterschiedlicher Software und
Permalinks. Einfach sind &lt;span class=&#34;caps&#34;&gt;URI&lt;/span&gt; -&amp;gt; &lt;span class=&#34;caps&#34;&gt;URI&lt;/span&gt;&amp;nbsp;rewrites-Rules:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;    &lt;span class=&#34;c1&#34;&gt;# lighttpd&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;url.redirect&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/blog/?$&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;https://blog.posativ.org/&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&amp;nbsp;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;    &lt;span class=&#34;c1&#34;&gt;# nginx&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;rewrite&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;^/blog/?&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$&amp;quot;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;http://blog.posativ.org/&amp;quot;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;permanent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Mit &lt;code&gt;perl -pe &#34;s/\&#34;(.+)\&#34; =&amp;gt; \&#34;(.+)\&#34;,/rewrite \&#34;\^\1\&#34; \&#34;\2\&#34; permanent;/g&#34;&lt;/code&gt;
hatte ich das grob von lighttpd auf nginx übertragen. Problem: nginx kann kein
rewrite auf die Request-Parameter (zurecht aber auch). Das sollte nicht nur
mich mit meinen anfänglichen &lt;code&gt;/?p=1dcdd17&lt;/code&gt; stören, auch diverse &lt;a href=&#34;http://frank.geekheim.de/&#34;&gt;andere
Blogs&lt;/a&gt; haben dieses &lt;span class=&#34;caps&#34;&gt;URL&lt;/span&gt;-Schema. Warum das nicht direkt von den
rewrite-Regeln unterstützt wird, ist klar: die Query-Parameterreihenfolge ist
variabel. Aber es ist nginx und da geht alles (wenn auch mit erhöhtem&amp;nbsp;Rechenaufwand):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;k&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;c1&#34;&gt;# das `?` am Ende leitet die &lt;span class=&#34;caps&#34;&gt;GET&lt;/span&gt;-Request Paramter nicht weiter&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$arg_p&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;1dcdd17)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;kn&#34;&gt;rewrite&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;^&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;http://blog.posativ.org/2011/weitere-html-abstraktion-in-python/?&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;permanent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
        &lt;span class=&#34;c1&#34;&gt;# ...&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h4&gt;6. weitere&amp;nbsp;Eigenheiten&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;nginx erlaubt kein &lt;span class=&#34;caps&#34;&gt;POST&lt;/span&gt;/&lt;span class=&#34;caps&#34;&gt;PUT&lt;/span&gt; auf statisches &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt;, denn sonst wäre es ja &lt;span class=&#34;caps&#34;&gt;CGI&lt;/span&gt;
  (was aber auch nicht geht, dazu gleich mehr). Aber auch dafür gibt es die
  merkwürdigsten Workarounds (&lt;span class=&#34;caps&#34;&gt;POST&lt;/span&gt; auf statisches &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; wirft&amp;nbsp;405):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;k&#34;&gt;error_page&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;405&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;@405&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;location&lt;/span&gt;       &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;@405&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;root&lt;/span&gt;    &lt;span class=&#34;s&#34;&gt;/home/www/blog.posativ.org&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span class=&#34;caps&#34;&gt;CGI&lt;/span&gt; wird auch nicht unterstützt, denn es ist langsam und erfordert viel
  Verwaltungs-Logik. Das macht bsw. lighttpd speicherhungriger als Apache (!),
  wenn Google mal ein &lt;span class=&#34;caps&#34;&gt;CGI&lt;/span&gt;-hosted Mercurial-Webinterface crawlt. Statt &lt;span class=&#34;caps&#34;&gt;CGI&lt;/span&gt;
  sollte FastCGI oder Proxy-Magie genutzt werden. Für &lt;span class=&#34;caps&#34;&gt;PHP&lt;/span&gt; spawnt nginx keinen
  Prozess, der muss vorher auch angelegt werden. Für Debian gibt es dafür ein
  &lt;a href=&#34;http://wiki.nginx.org/PHPFcgiExample#Spawning_a_FastCGI_Process&#34;&gt;&lt;code&gt;init.d&lt;/code&gt;-Skript&lt;/a&gt; und nach einem &lt;code&gt;invoke.rc-d start php-fcgi&lt;/code&gt; lauscht
  ein &lt;span class=&#34;caps&#34;&gt;PHP&lt;/span&gt;-Prozess auf Port&amp;nbsp;9000.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Rückblick&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;http://www.lighttpd.net/&#34;&gt;lighttpd&lt;/a&gt; war zwei Jahre mein treuer Begleiter im Kampf gegen Apaches
behinderte &lt;span class=&#34;caps&#34;&gt;XML&lt;/span&gt;-like Konfiguration mit kleinem Speicherverbrauch, aber die
Konfiguration ist inzwischen mehr als willkürlich. Schon eine Umordnung von
Statements, die logisch gleichwertig sind, kann das Problem lösen oder erst&amp;nbsp;erzeugen.&lt;/p&gt;
&lt;p&gt;Die nginx Konfiguration ist weitaus intuitiver, besitzt mehr Funktionialität
und trotzdem ist der Server schlanker, &lt;a href=&#34;http://wiki.nginx.org/Modules&#34;&gt;modularer&lt;/a&gt; und leistungsfähiger
als&amp;nbsp;lighttpd.&lt;/p&gt;
&lt;p&gt;&lt;span class=&#34;caps&#34;&gt;KTHXBYE&lt;/span&gt;&amp;nbsp;lighttpd.&lt;/p&gt;</content>
</entry>
<entry>
    <title>Linkschleuder #11</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2012/linkschleuder-11/" />
    <id>tag:blog.posativ.org,2012-01-02:/2012/linkschleuder-11</id>
    <updated>2012-01-02T19:11:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;Diesmal stark apfel-lastig; zwei zu &lt;a href=&#34;https://twitter.com/&#34;&gt;Twitter&lt;/a&gt;, Rest zu &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt;&amp;nbsp;X.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jgoerzen/twidge/wiki&#34;&gt;twidge&lt;/a&gt; – full commandline twitter client (in Haskell&amp;nbsp;geschrieben)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://onilabs.github.com/fork-a-twitter-client/&#34;&gt;Fork A Twitter Client&lt;/a&gt; – Twitter komplett im Browser (wie twitter.com), jedoch in&amp;nbsp;schlank.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kennethreitz/osx-gcc-installer&#34;&gt;&lt;span class=&#34;caps&#34;&gt;OSX&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;GCC&lt;/span&gt; Installer&lt;/a&gt; – &lt;span class=&#34;caps&#34;&gt;GCC&lt;/span&gt;-related Tools in XCode. Erspart nächstes mal vielleicht den 4,7 GiB&amp;nbsp;Download.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/pdherbemont/Glasses/&#34;&gt;&lt;span class=&#34;caps&#34;&gt;VLC&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;GUI&lt;/span&gt; rewrite&lt;/a&gt; – für &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X, ist leider eingeschlafen, weil es sehr wenige &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X Entwickler&amp;nbsp;gibt.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://khiltd.com/software/consultants_canary&#34;&gt;Consultant’s Canary&lt;/a&gt; – Diff zwischen &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X Erst-Installation und dem Müll, der jetzt drauf ist. Äußerst&amp;nbsp;praktisch.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.hep-cat.de/?p=5478&#34;&gt;Vom &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X zum SheevaPlug&lt;/a&gt; – inklusive Kommentar von einem Projekt mit quelloffenen&amp;nbsp;Treibern.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://peippo.eu/musorg/&#34;&gt;Musorg&lt;/a&gt; – &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X &lt;span class=&#34;caps&#34;&gt;MP3&lt;/span&gt; Tag Editor (GPLv2), nicht wirklich fertig, dafür immerhin was &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt;&amp;nbsp;X-natives.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.celmaro.com/tubbler/&#34;&gt;YouTube Player Client for &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X&lt;/a&gt; – ressourcensparend YouTube gucken, noch&amp;nbsp;kostenlos.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://flavio.tordini.org/musique&#34;&gt;Musique&lt;/a&gt; – ehemals MiniTunes, verfügbar für Windows, Linux und Mac &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X, &lt;span class=&#34;caps&#34;&gt;GPL&lt;/span&gt; und ohne &lt;a href=&#34;http://cdn.last.fm/blog/posts/april12/poster_boy.jpg&#34;&gt;AudioScrobbler-Support&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.pixiapps.com/ecoute/&#34;&gt;Ecoute 3&lt;/a&gt; – Standalone player based on your iTunes&amp;nbsp;library.&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
<entry>
    <title>Profiling Memory and CPU Time of Python Programs on OS X</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/profiling-memory-and-cpu-time-of-python-programs-on-os-x/" />
    <id>tag:blog.posativ.org,2011-12-28:/2011/profiling-memory-and-cpu-time-of-python-programs-on-os-x</id>
    <updated>2011-12-28T22:10:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;As a result of my last performance improvements to &lt;a href=&#34;https://github.com/posativ/acrylamid&#34;&gt;acrylamid&lt;/a&gt; I was not
able anymore to measure the memory used via &lt;em&gt;Activity Monitor&lt;/em&gt;. I can measure
cpu time in many different ways using &lt;code&gt;time&lt;/code&gt; or python&amp;#8217;s neat &lt;code&gt;-m cProfile -s
cumulative&lt;/code&gt; argument in front of my real program call, but I don&amp;#8217;t know any
way to measure memory of fast ending&amp;nbsp;applications.&lt;/p&gt;
&lt;h3&gt;Memory&amp;nbsp;Profiling&lt;/h3&gt;
&lt;p&gt;The first fact I found is that python has no capabilities of profiling and
&lt;span class=&#34;caps&#34;&gt;BSD&lt;/span&gt;&amp;#8217;s version of &lt;code&gt;time&lt;/code&gt; had no memory statistics support (seems, linux version
can do this). But there&amp;#8217;s an App&amp;#8230; erm tool for that: &lt;a href=&#34;http://valgrind.org/&#34;&gt;valgrind&lt;/a&gt;. Using it
with &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X&amp;#8217; default python produces a lot of output and will slow down code
execution, therefore you have to call valgrind with a specific supression file
using &lt;a href=&#34;http://valgrind.org/docs/manual/ms-manual.html&#34;&gt;Massif: a heap profiler&lt;/a&gt;
(or re-compile&amp;nbsp;--without-pymalloc):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;gp&#34;&gt;$&lt;/span&gt;&amp;gt; valgrind --tool&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;massif --suppressions&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Misc/valgrind-python.supp &lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;go&#34;&gt;   python ../acrylamid/bin/acrylamid gen&lt;/span&gt;
&lt;span class=&#34;gp&#34;&gt;$&lt;/span&gt;&amp;gt; ms_print massif.out.1928 &amp;gt; out.txt
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The latter produces a heap profile written to out.txt. &lt;span class=&#34;caps&#34;&gt;KDE&lt;/span&gt;/Linux seems to have
a visualizer, &lt;a href=&#34;http://kcachegrind.sourceforge.net/html/Home.htmls&#34;&gt;KCacheGrind&lt;/a&gt;, but &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X don&amp;#8217;t. But there might be an
application which claims to run on &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X as well: &lt;a href=&#34;http://kde-apps.org/content/show.php?content=122409&#34;&gt;Massif Visualizer&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;--------------------------------------------------------------------------------
Command:            python ../acrylamid/bin/acrylamid gen
Massif arguments:   (none)
ms_print arguments: massif.out.1928
--------------------------------------------------------------------------------

    MB
38.53^                                                          :             
     |                                                        # :             
     |                                                       @#::             
     |                              @   @               ::@@@@#::         ::@:
     |                              @:  @ :            :::@@@@#::::::@::::::@:
     |                       @@:::::@:::@::@@::@::@@::::::@@@@#::::::@::::::@:
     |           ::::::@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
     |      @   :: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
     |      @:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
     |   :::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
     |   :::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
     |  @:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
     |  @:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
     |  @:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
     | :@:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
     | :@:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
     | :@:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
     | :@:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
     | :@:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
     | :@:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
   0 +-----------------------------------------------------------------------&amp;gt;Gi
     0                                                                   40.63

Number of snapshots: 86
 Detailed snapshots: [2, 6, 8, 16, 23, 29, 33, 36, 39, 42, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 (peak), 73, 83]
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;&lt;span class=&#34;caps&#34;&gt;CPU&lt;/span&gt;&amp;nbsp;Time&lt;/h3&gt;
&lt;p&gt;To complete this overview article, here are the parameters to measure &lt;span class=&#34;caps&#34;&gt;CPU&lt;/span&gt; usage
from an earlier version of acrylamid (doing&amp;nbsp;nothing):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;$&amp;gt; acrylamid --version
0.1.11-dev
$&amp;gt; python -m cProfile -s cumulative ../bin/acrylamid gen | less
      392661 function calls (382947 primitive calls) in 0.684 seconds

Ordered by: cumulative time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.000    0.000    0.685    0.685 acrylamid:7(&amp;lt;module&amp;gt;)
     1    0.000    0.000    0.648    0.648 __init__.py:44(__init__)
     1    0.001    0.001    0.647    0.647 __init__.py:177(run)
     1    0.000    0.000    0.559    0.559 __init__.py:135(initialize)
     1    0.000    0.000    0.514    0.514 __init__.py:35(initialize)
     8    0.000    0.000    0.277    0.035 __init__.py:19(index_filters)
     1    0.000    0.000    0.270    0.270 hyphenation.py:191(__init__)
     1    0.000    0.000    0.270    0.270 hyphenation.py:150(build)
     1    0.010    0.010    0.269    0.269 hyphenation.py:34(__init__)
 14263    0.130    0.000    0.257    0.000 hyphenation.py:45(_insert_pattern)
 25/23    0.004    0.000    0.244    0.011 {__import__}
 28848    0.031    0.000    0.201    0.000 re.py:228(_compile)
     1    0.003    0.003    0.191    0.191 rst.py:7(&amp;lt;module&amp;gt;)
   248    0.000    0.000    0.161    0.001 re.py:188(compile)
   174    0.001    0.000    0.161    0.001 sre_compile.py:495(compile)
     5    0.001    0.000    0.156    0.031 __init__.py:10(&amp;lt;module&amp;gt;)
     1    0.002    0.002    0.096    0.096 __init__.py:68(&amp;lt;module&amp;gt;)
     1    0.003    0.003    0.090    0.090 states.py:101(&amp;lt;module&amp;gt;)
   174    0.000    0.000    0.085    0.000 sre_compile.py:480(_code)
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;With some optimization acrylamid 0.2.1 is now about 4 times faster (685ms
versus 140ms), just by lazy evaluate hyphenation patterns and docutils import.
You can also pass ncalls, tottime, percall and so on instead of cumtime,
see python&amp;#8217;s &lt;a href=&#34;http://docs.python.org/library/profile.html#pstats.Stats.sort_stats&#34;&gt;profile&lt;/a&gt; for all sort&amp;nbsp;keys.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;$&amp;gt; acrylamid --version
0.2.1
$&amp;gt; python -m cProfile -s cumulative ../bin/acrylamid gen | less
      81785 function calls (78036 primitive calls) in 0.140 seconds

Ordered by: cumulative time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.000    0.000    0.141    0.141 acrylamid:7(&amp;lt;module&amp;gt;)
     1    0.000    0.000    0.103    0.103 __init__.py:45(__init__)
     1    0.000    0.000    0.101    0.101 __init__.py:197(run)
     1    0.000    0.000    0.098    0.098 __init__.py:143(initialize)
     1    0.000    0.000    0.051    0.051 __init__.py:36(initialize)
    17    0.003    0.000    0.051    0.003 {__import__}
     1    0.000    0.000    0.046    0.046 __init__.py:38(initialize)
     5    0.000    0.000    0.045    0.009 __init__.py:22(index_views)
     5    0.000    0.000    0.043    0.009 environment.py:763(from_string)
     5    0.000    0.000    0.043    0.009 environment.py:453(compile)
     1    0.003    0.003    0.038    0.038 __init__.py:20(&amp;lt;module&amp;gt;)
    73    0.000    0.000    0.035    0.000 re.py:188(compile)
    73    0.001    0.000    0.035    0.000 re.py:228(_compile)
    67    0.000    0.000    0.034    0.001 sre_compile.py:495(compile)
     1    0.001    0.001    0.023    0.023 __init__.py:28(&amp;lt;module&amp;gt;)
     5    0.000    0.000    0.023    0.005 environment.py:396(_parse)
     1    0.000    0.000    0.022    0.022 md.py:7(&amp;lt;module&amp;gt;)
     1    0.001    0.001    0.021    0.021 __init__.py:31(&amp;lt;module&amp;gt;)
     1    0.002    0.002    0.021    0.021 hyphenation.py:4(&amp;lt;module&amp;gt;)
&lt;/pre&gt;&lt;/div&gt;</content>
</entry>
<entry>
    <title>TextMate</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/textmate/" />
    <id>tag:blog.posativ.org,2011-12-18:/2011/textmate</id>
    <updated>2011-12-18T18:02:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;Bevor ich so langsam zum &lt;a href=&#34;http://www.sublimetext.com/2&#34;&gt;Sublime Text&lt;/a&gt; Editor wechseln werde (es sei denn,
&lt;a href=&#34;http://net.tutsplus.com/tutorials/tools-and-tips/essential-textmate-shortcuts-tips-and-techniques/&#34;&gt;Version 2&lt;/a&gt; bringt es), noch einmal kurz meine Lieblings-Bundles, sprich
Macros, Themes und&amp;nbsp;Snippets.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://net.tutsplus.com/tutorials/tools-and-tips/essential-textmate-shortcuts-tips-and-techniques/&#34;&gt;Essential TextMate Shortcuts, Tips and&amp;nbsp;Techniques&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://ethanschoonover.com/solarized&#34;&gt;Solarized (light) Theme&lt;/a&gt; – the one and only one. Gibt nichts&amp;nbsp;besseres.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Bundles&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/foxostro/x86-assembly-textmate-bundle/tree/master/x86%20Assembly.tmbundle/&#34;&gt;x86 Assembler&lt;/a&gt;
  – Intel86 Syntax&amp;nbsp;Highlighting!1&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/textmate/lilypond.tmbundle&#34;&gt;lilypond&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.governatori.net/TextMate/index.html&#34;&gt;LaTeXExtension&lt;/a&gt; – mit $O[Ausrufezeichen]$ -&amp;gt; $\Omega$ und&amp;nbsp;so&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/textmate/restructuredtext.tmbundle&#34;&gt;reStructuredText&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/seaofclouds/sass-textmate-bundle&#34;&gt;&lt;span class=&#34;caps&#34;&gt;SASS&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/mitsuhiko/jinja2/blob/master/ext/JinjaTemplates.tmbundle.tar.gz&#34;&gt;Jinja2&amp;nbsp;Templating&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ppierre/python-pep8-tmbundle&#34;&gt;Python &lt;span class=&#34;caps&#34;&gt;PEP&lt;/span&gt;&amp;nbsp;8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dcramer/python-tools-tmbundle&#34;&gt;Python Tools&lt;/a&gt; – ⌘+S mit Syntax&amp;nbsp;Validierung&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Installiert wird das alles nach &lt;code&gt;~/Library/Application Support/TextMate/&lt;/code&gt;.&lt;/p&gt;</content>
</entry>
<entry>
    <title>weave-minimal – a Firefox Sync full-server fork</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/weave-minimal-a-firefox-sync-full-server-fork/" />
    <id>tag:blog.posativ.org,2011-12-18:/2011/weave-minimal-a-firefox-sync-full-server-fork</id>
    <updated>2011-12-18T17:35:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;The first time I tried to get a custom Firefox Sync server running, I used
&lt;a href=&#34;https://hg.mozilla.org/services/server-full/&#34;&gt;&lt;code&gt;server-full&lt;/code&gt;&lt;/a&gt; and even though
I know python (the server is written in python), the configuration was highly
difficult. There&amp;#8217;s no click &lt;span class=&#34;amp&#34;&gt;&amp;amp;&lt;/span&gt; install. You have to choose between Redis,
MySQL, PostgreSQL and Sqlite3. For most people, sqlite3 is quite fine. Sqlite
and sync-server config files have summed up almost 80 LoC. And you still don&amp;#8217;t
know how to authenticate unless you have already a &lt;span class=&#34;caps&#34;&gt;LDAP&lt;/span&gt; server&amp;nbsp;running.&lt;/p&gt;
&lt;p&gt;There are some alternatives:
&lt;a href=&#34;https://github.com/tolumak/ffpyweave&#34;&gt;ffpyweave&lt;/a&gt;, &lt;a href=&#34;https://github.com/jedie/django-sync-server/&#34;&gt;django sync
server&lt;/a&gt; and formerly
&lt;a href=&#34;http://ymartin59.free.fr/wordpress/index.php/2011/03/05/my-own-firefox-sync-weave-server/&#34;&gt;weave-minimal&lt;/a&gt;
too, written in &lt;span class=&#34;caps&#34;&gt;PHP&lt;/span&gt; but not supported anymore. But I&amp;#8217;ve forked the official
&lt;a href=&#34;https://hg.mozilla.org/services/server-full/&#34;&gt;&lt;code&gt;server-full&lt;/code&gt;&lt;/a&gt; (well I
completely rewrote) to a more easier installation without multiple backends
but completely relying on a simple sqlite&amp;nbsp;database.&lt;/p&gt;
&lt;h3&gt;Requirements&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;a web server with proxy or FastCGI/&lt;span class=&#34;caps&#34;&gt;WSGI&lt;/span&gt;&amp;nbsp;support&lt;/li&gt;
&lt;li&gt;python runtime (&amp;gt;=&amp;nbsp;2.5)&lt;/li&gt;
&lt;li&gt;shell&amp;nbsp;access&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Installation&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;nv&#34;&gt;$ &lt;/span&gt;easy_install -U werkzeug
&lt;/pre&gt;&lt;/div&gt;


&amp;nbsp;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;nv&#34;&gt;$ &lt;/span&gt;wget https://github.com/posativ/weave-minimal/tarball/master -O weave-minimal.tar.gz
&lt;span class=&#34;nv&#34;&gt;$ &lt;/span&gt;tar xfz weave-minimal.tar.gz
&lt;span class=&#34;nv&#34;&gt;$ &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd &lt;/span&gt;posativ-weave-minimal
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Usage&lt;/h3&gt;
&lt;p&gt;Currently, Firefox does not you create a user account on your own server.
I &lt;a href=&#34;https://bugzilla.mozilla.org/show_bug.cgi?id=708256&#34;&gt;filed a bug&lt;/a&gt; in a week ago. Therefore you need to set up every account&amp;nbsp;manually:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;nv&#34;&gt;$ &lt;/span&gt;./weave.py --register myname:mypassword
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;info&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; database &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;myname&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; created at &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;.data/myname.91dfd9ddb4198aff&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;$ &lt;/span&gt;./weave.py -p 8080
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;em&gt;Please note that only alpha-numerical characters are&amp;nbsp;allowed!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The last command launches weave.py on port 8080. You can now configure mod_proxy
in your webserver of choice or you some mod_fastcgi magic. See &lt;a href=&#34;https://github.com/posativ/weave-minimal&#34;&gt;&lt;span class=&#34;caps&#34;&gt;README&lt;/span&gt;.md&lt;/a&gt;
for an example&amp;nbsp;configuration.&lt;/p&gt;
&lt;p&gt;For the Firefox Sync Setup see in &lt;a href=&#34;https://github.com/posativ/weave-minimal&#34;&gt;&lt;span class=&#34;caps&#34;&gt;README&lt;/span&gt;.md&lt;/a&gt;,&amp;nbsp;too.&lt;/p&gt;
&lt;h3&gt;Hints&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;using an &lt;span class=&#34;caps&#34;&gt;SSL&lt;/span&gt;-encrypted server is recommended but not&amp;nbsp;required&lt;/li&gt;
&lt;li&gt;Firefox never transmits browser data unencrypted, just your username/password
  are sent base64-encoded over the air (&lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt; Basic&amp;nbsp;Authentication).&lt;/li&gt;
&lt;li&gt;you can have multiple user per weave-minimal&amp;nbsp;instance&lt;/li&gt;
&lt;li&gt;the user password is stored &lt;span class=&#34;caps&#34;&gt;SHA1&lt;/span&gt;-hashed (first 16 characters) into the
  database filename &lt;code&gt;name.91dfd9ddb4198aff&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;in case your web server sucks and does not send &lt;code&gt;HTTP_X_SCRIPT_NAME&lt;/code&gt;, start
  &lt;code&gt;weave.py&lt;/code&gt; with &lt;code&gt;--prefix=/url/prefix&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
<entry>
    <title>Linkschleuder #10</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/linkschleuder-10/" />
    <id>tag:blog.posativ.org,2011-12-16:/2011/linkschleuder-10</id>
    <updated>2011-12-16T19:31:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://cr.yp.to/daemontools.html&#34;&gt;daemontools&lt;/a&gt; – nein nicht die &lt;a href=&#34;http://www.daemon-tools.cc/&#34;&gt;Daemon
  Tools&lt;/a&gt;, um äh Sicherheitskopien zu mounten, sondern einen
  Prozess-Supervisor wie &lt;code&gt;init.d&lt;/code&gt; und kann im userspace laufen
  (&lt;a href=&#34;http://uberspace.de/&#34;&gt;via&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://code.dogmap.org/runwhen/&#34;&gt;runwhen&lt;/a&gt; – eine Art besseres &lt;code&gt;cron&lt;/code&gt;.
  Unterstützt z.B. direktes Ausführen eines Tasks und kann sekundengenau
  Arbeiten (&lt;a href=&#34;http://uberspace.de/dokuwiki/system:runwhen&#34;&gt;via&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.getontracks.org/&#34;&gt;Tracks&lt;/a&gt; – eine nette Todoliste mit Ruby on Rails,
  die gerade mal lächerliche 100 &lt;span class=&#34;caps&#34;&gt;MB&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;RAM&lt;/span&gt; idle verbrät. Unterstützt&amp;nbsp;Mobil-Geräte.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://piwigo.org/&#34;&gt;Piwigo&lt;/a&gt; – your own photo gallery (in &lt;span class=&#34;caps&#34;&gt;PHP&lt;/span&gt; und MySQL),
  gibt&amp;#8217;s direkt im Repository von Debian und Ubuntu. Ganz hübsch, aber ein
  leichter Overkill für einen&amp;nbsp;Einzelnutzer.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://macfusionapp.org/&#34;&gt;Macfusion&lt;/a&gt; – &lt;span class=&#34;caps&#34;&gt;SSH&lt;/span&gt; &lt;span class=&#34;amp&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;FTP&lt;/span&gt; Filesystem im Userspace
  aka &lt;span class=&#34;caps&#34;&gt;FUSE&lt;/span&gt;. Mit&amp;nbsp;&lt;span class=&#34;caps&#34;&gt;GUI&lt;/span&gt;!1&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mac.github.com/&#34;&gt;github:mac&lt;/a&gt; – gibt&amp;#8217;s in Version 1.1 und unterstützt
  unter anderem partielles Hinzufügen aka &lt;code&gt;git
  add --patch&lt;/code&gt; (wenn auch sehr&amp;nbsp;umständlich).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://redmine.lighttpd.net/wiki/lighttpd/AbsoLUAtion&#34;&gt;Lua Scripting im lighty 1.5&lt;/a&gt;
  – könnte &lt;a href=&#34;/2011/grack-redmine-auth-git-smart-http/&#34;&gt;Grack+Redmine&lt;/a&gt; unnötig
  machen, würde es denn irgendwann Version 1.5&amp;nbsp;geben.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/aaronsw/html2text&#34;&gt;&lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; nach Text konvertieren&lt;/a&gt; – ist sogar
  Markdow-valide, was da hinterher&amp;nbsp;rauskommt!&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://hisz.rsoe.hu/&#34;&gt;Disaster and Emergency AlertMap&lt;/a&gt; – auch mit
  &lt;a href=&#34;http://hisz.rsoe.hu/alertmap/index2.php&#34;&gt;Europa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://developer.yahoo.com/yslow/&#34;&gt;YSlow&lt;/a&gt; – Yahoo Tool um die
  Webseiten-Geschwindigkeit zu&amp;nbsp;analysieren.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://rubybestpractices.com/&#34;&gt;Ruby Best Practices (Buch)&lt;/a&gt; – &lt;em&gt;&amp;#8220;We can all
  write better Ruby code&amp;#8221;&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
<entry>
    <title>Firefox Sync auf dem eigenen Server. Ja. Wirklich.</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/firefox-sync-auf-dem-eigenen-server-ja-wirklich/" />
    <id>tag:blog.posativ.org,2011-12-07:/2011/firefox-sync-auf-dem-eigenen-server-ja-wirklich</id>
    <updated>2011-12-07T20:01:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;Vor gut &lt;a href=&#34;/2011/firefox-sync-auf-dem-eigenen-server-vielleicht-nein/&#34;&gt;zwei Wochen habe ich festgestellt&lt;/a&gt;, dass es irgendwie unmöglich
ist, einen eigenen Server für Firefox Sync zu nehmen. Aber so unmöglich ist es
dann gar nicht. Wenn man weiß, wie behindert das Setup ist, dann ist das&amp;nbsp;kinderleicht.&lt;/p&gt;
&lt;p&gt;Was nicht geht: ein neues Konto auf dem eigenen Server anlegen. Warum? Weil
Mozilla diese Service-&lt;span class=&#34;caps&#34;&gt;URL&lt;/span&gt; &lt;a href=&#34;&#34;&gt;auth.services.mozilla.com&lt;/a&gt; fest in den
Firefox kodiert hat. Die &lt;span class=&#34;caps&#34;&gt;API&lt;/span&gt;, um sich zu registrieren, hängt aber an obiger
&lt;span class=&#34;caps&#34;&gt;URL&lt;/span&gt; + &lt;code&gt;/user&lt;/code&gt;, genauer gesagt &lt;code&gt;PUT /user/1.0/mein_username&lt;/code&gt;. Da sich die &lt;span class=&#34;caps&#34;&gt;URL&lt;/span&gt;
für den Registrierungsserver (der Server ist in zwei Teilprojekte unterteilt,
&lt;code&gt;server-reg&lt;/code&gt; und &lt;code&gt;server-full&lt;/code&gt;) nicht einmal in der &lt;a href=&#34;&#34;&gt;about:config&lt;/a&gt; einstellen
lässt, wird dieser Workaround genutzt. Wir wissen ja, &lt;em&gt;&lt;a href=&#34;https://support.mozilla.com/de/questions/712986&#34;&gt;89 people have this
problem&lt;/a&gt;. I have this problem,&amp;nbsp;too!&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Workaround in&amp;nbsp;Firefox&lt;/h3&gt;
&lt;p&gt;Anstatt sich ein neues Nutzerkonto zu klicken, wählt man stattdessen aus, dass
man bereits ein Konto hat. Dafür wird allerdings wirklich ein Konto benötigt,
was zu einem unschönen Weg in die Kommandozeile führt (oder ins Webinterface,
sofern der Server derartiges anbietet). Nachdem man sich auf seinem Server
einen Nutzer registriert hat, geht&amp;#8217;s weiter. Anstatt das Gerät mit dem
drei-stelligen Code zu aktivieren (ich wüsste nicht, wie das mit eigenen
Servern funktioniert), wählt man &lt;em&gt;&amp;#8220;Ich habe das Gerät nicht bei mir&amp;#8221;&lt;/em&gt;, gibt
seine Daten ein, wählt &lt;em&gt;&amp;#8220;Eigenen Server verwenden&amp;#8230;&amp;#8221;&lt;/em&gt; aus und gibt seine &lt;span class=&#34;caps&#34;&gt;URL&lt;/span&gt;
ein. Das&amp;nbsp;war&amp;#8217;s.&lt;/p&gt;
&lt;p&gt;An Servern dürften damit wohl *noch* alle letztens aufgezählten
funktionieren, ob, das habe ich aber nicht&amp;nbsp;getestet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://hg.mozilla.org/services/server-full/&#34;&gt;offizielle Server-Implementierung&lt;/a&gt;,
  nicht gerade leicht zu installieren,&amp;nbsp;Bloatware++.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://ymartin59.free.fr/wordpress/index.php/2011/03/05/my-own-firefox-sync-weave-server/&#34;&gt;weave-minimal in &lt;span class=&#34;caps&#34;&gt;PHP&lt;/span&gt;&lt;/a&gt;,
  der ehemalige, offizielle Weave-Server,&amp;nbsp;discontinued.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jedie/django-sync-server/&#34;&gt;Django Sync&amp;nbsp;Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/tolumak/ffpyweave&#34;&gt;ffpyweave&lt;/a&gt;, ein single-file&amp;nbsp;&lt;span class=&#34;caps&#34;&gt;CGI&lt;/span&gt;-Skript&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/posativ/weave-minimal&#34;&gt;weave-minimal&lt;/a&gt;, meine Implementierung
  von &lt;code&gt;server-full&lt;/code&gt; in Python, nur ohne&amp;nbsp;Bloatware-Adapter.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Derweil habe ich einen &lt;a href=&#34;https://bugzilla.mozilla.org/show_bug.cgi?id=708256&#34;&gt;Bugreport mit meinem Unmut gefiledt&lt;/a&gt;.&lt;/p&gt;</content>
</entry>
<entry>
    <title>Firefox Sync auf dem eigenen Server. Vielleicht. Nein.</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/firefox-sync-auf-dem-eigenen-server-vielleicht-nein/" />
    <id>tag:blog.posativ.org,2011-11-26:/2011/firefox-sync-auf-dem-eigenen-server-vielleicht-nein</id>
    <updated>2011-11-26T23:03:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;So habe ich heute Firefox &lt;del&gt;Weave&lt;/del&gt; Sync kennengelernt. Ich dacht mir,
hey ich hab&amp;#8217; &amp;#8216;nen Server, oh und hey, der Sync-Server ist in Python
geschrieben, das wird bestimmt kinderleicht!1 Aber die Community Policy, die
Mozilla da seit geraumer Zeit fährt, macht jegliche Offenheit des Source Codes
sinnlos, weil es einfach nicht für den kleinen Mann &lt;a href=&#34;http://docs.services.mozilla.com/server-devguide/configuration.html&#34;&gt;dokumentiert ist&lt;/a&gt;. Das
ist so miserabel dokumentiert, dass ich ohne Studieren des Source Codes nicht
weiß, ob der &lt;a href=&#34;https://hg.mozilla.org/services/server-full/&#34;&gt;&lt;code&gt;server-full&lt;/code&gt;&lt;/a&gt;
überhaupt dafür konzipiert ist, geschlossen für einen, oder maximal auch zwei
Nutzer zu laufen. Denn ganz sicher werde ich für einen Single-User-Betrieb
keine &lt;span class=&#34;caps&#34;&gt;LDAP&lt;/span&gt;-Authentifizierung&amp;nbsp;aufsetzen.&lt;/p&gt;
&lt;p&gt;Früher™ gab es ja mal diesen &lt;a href=&#34;https://tobyelliott.wordpress.com/2011/03/25/updating-and-deprecating-the-weave-minimal-server/&#34;&gt;diesem Minimal Server&lt;/a&gt;. Der scheint aufgrund
von &lt;a href=&#34;http://docs.services.mozilla.com/storage/apis-1.1.html&#34;&gt;&lt;span class=&#34;caps&#34;&gt;API&lt;/span&gt;-Änderungen&lt;/a&gt; nicht mehr ganz zu funktionieren bzw. ist sowieso
&lt;em&gt;&lt;a href=&#34;https://hg.mozilla.org/services/deprecated/minimal-server/&#34;&gt;deprecated&lt;/a&gt;&lt;/em&gt;
(ist ja logisch, warum sowas kleines weiterführen, wenn man mit &lt;span class=&#34;caps&#34;&gt;LDAP&lt;/span&gt; gleich
die ganze Welt verwalten kann). Von einem &lt;a href=&#34;http://ymartin59.free.fr/wordpress/index.php/2011/03/05/my-own-firefox-sync-weave-server/&#34;&gt;Server in &lt;span class=&#34;caps&#34;&gt;PHP&lt;/span&gt;&lt;/a&gt; hab&amp;#8217; auch ich
gehört. Ein (älteres) &lt;a href=&#34;https://github.com/tolumak/ffpyweave&#34;&gt;single-file &lt;span class=&#34;caps&#34;&gt;CGI&lt;/span&gt;-Skript in python&lt;/a&gt; gibt&amp;#8217;s ebenfalls.
Ob das funktioniert, weiß ich nicht. Einen &lt;a href=&#34;https://github.com/jedie/django-sync-server/&#34;&gt;Django-Klon&lt;/a&gt; gibt&amp;#8217;s auch, das
ist aber die erste genannte Variante mit denselben Zielen, Millionen von
Nutzern zu verwalten, nur mit Django. Nicht viel&amp;nbsp;gekonnt.&lt;/p&gt;
&lt;p&gt;Es ist ja nicht so, dass ich zu unfähig bin, den offiziellen &lt;code&gt;server-full&lt;/code&gt; oder
das &lt;span class=&#34;caps&#34;&gt;CGI&lt;/span&gt;-Skript &lt;code&gt;pyweave&lt;/code&gt; zum Laufen zu bekommen. Das Problem ist das&amp;nbsp;hier:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Please enter valid server URL&#34; src=&#34;/img/2011/firefox-sync.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://support.mozilla.com/de/questions/712986&#34;&gt;89 people have this problem &lt;/a&gt;.
I have this problem,&amp;nbsp;too!1&lt;/p&gt;
&lt;p&gt;Wie gut, dass das Projekt (ich vermute, das ist es) &lt;a href=&#34;https://hg.mozilla.org/services/server-reg/&#34;&gt;&lt;code&gt;server-reg&lt;/code&gt;&lt;/a&gt; so
überragend dokumentiert&amp;nbsp;ist:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;gp&#34;&gt;$&lt;/span&gt;&amp;gt; cat &lt;span class=&#34;caps&#34;&gt;README&lt;/span&gt;
&lt;span class=&#34;go&#34;&gt;========&lt;/span&gt;
&lt;span class=&#34;go&#34;&gt;Sync 1.1&lt;/span&gt;
&lt;span class=&#34;go&#34;&gt;========&lt;/span&gt;

&lt;span class=&#34;go&#34;&gt;This is the Python implementation of the Sync Server 1.1.&lt;/span&gt;

&lt;span class=&#34;go&#34;&gt;The documentation is located in the doc folder.&lt;/span&gt;

&lt;span class=&#34;gp&#34;&gt;$&lt;/span&gt;&amp;gt; ls 
&lt;span class=&#34;go&#34;&gt;&lt;span class=&#34;caps&#34;&gt;MANIFEST&lt;/span&gt;.in  &lt;span class=&#34;caps&#34;&gt;README&lt;/span&gt;       SyncReg.spec  etc/           setup.py        syncreg/&lt;/span&gt;
&lt;span class=&#34;go&#34;&gt;Makefile     &lt;span class=&#34;caps&#34;&gt;RELEASE&lt;/span&gt;.txt  dev-reqs.txt  prod-reqs.txt  stage-reqs.txt&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</content>
</entry>
<entry>
    <title>Humble Introversion Bundle mit DEFCON</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/humble-introversion-bundle-mit-defcon/" />
    <id>tag:blog.posativ.org,2011-11-22:/2011/humble-introversion-bundle-mit-defcon</id>
    <updated>2011-11-22T20:43:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;Wuhuuu. Das &lt;a href=&#34;http://www.humblebundle.com/&#34;&gt;Humble introversion Bundle&lt;/a&gt; gibt&amp;#8217;s wieder und
diesmal mit dem Klassiker &lt;span class=&#34;caps&#34;&gt;DEFCON&lt;/span&gt;. Ich fand den Preis damals™ (15€) etwas zu hoch. Und jetzt
gibt&amp;#8217;s für 3,49$ gleich sechs Spiele auf einmal. Das würde ich allein für Defcon zahlen. Denn wer
träumt nicht heimlich vom (virtuellen) Weltkrieg mit Atomwaffen und das sogar&amp;nbsp;crossplattform?&lt;/p&gt;
&lt;p&gt;&amp;mdash; &lt;a href=&#34;http://www.humblebundle.com/&#34;&gt;the Humble introversion&amp;nbsp;Bundle&lt;/a&gt;&lt;/p&gt;</content>
</entry>
<entry>
    <title>Linkschleuder #9</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/linkschleuder-9/" />
    <id>tag:blog.posativ.org,2011-11-20:/2011/linkschleuder-9</id>
    <updated>2011-11-20T13:37:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.toastball.net/toast/&#34;&gt;toast&lt;/a&gt; &amp;#8211; packageless package manager for
  Unix systems and non-root&amp;nbsp;users &lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.backblaze.com/&#34;&gt;Backblaze&lt;/a&gt; &amp;#8211; wohl billigste Cloud-Backup Lösung
  überhaupt. Halt mit mangelnder Redundanz und&amp;nbsp;so.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://rolffreitag.de/projects/liberal/randomize.html&#34;&gt;IPv4 Logs randomisieren&lt;/a&gt;
  &amp;#8211; hatte ich letztens wieder eine Diskussion. Meine Lösung ist inzwischen aber
  &lt;code&gt;127.0.0.1&lt;/code&gt; im&amp;nbsp;&lt;span class=&#34;caps&#34;&gt;IP&lt;/span&gt;-Feld.&lt;/li&gt;
&lt;li&gt;Es gibt übrigens einen &lt;a href=&#34;https://tools.ietf.org/html/rfc5023&#34;&gt;Standard um mit &lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt;&lt;/a&gt;
  ein Blog zu administrieren. Das ist dann so mit &lt;span class=&#34;caps&#34;&gt;PUT&lt;/span&gt; und &lt;span class=&#34;caps&#34;&gt;DELETE&lt;/span&gt; und halt &amp;#8216;ne etwas
  behindertere &lt;span class=&#34;caps&#34;&gt;REST&lt;/span&gt;-&lt;span class=&#34;caps&#34;&gt;API&lt;/span&gt;. &lt;a href=&#34;http://bitworking.org/news/AtomAPI_Quick_Reference&#34;&gt;Hier&lt;/a&gt;
  und &lt;a href=&#34;https://www.ibm.com/developerworks/library/x-atompp1/&#34;&gt;hier&lt;/a&gt; ein Tutorial.
  Primäres Problem: wenn man so ein Blog hätte, dann gäbe es keine Tools&amp;nbsp;dafür.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://enable-cors.org/&#34;&gt;enable cross-origin resource sharing&lt;/a&gt; &amp;#8211; wer sich
  an die etwas restriktive &lt;a href=&#34;https://en.wikipedia.org/wiki/Same_origin_policy&#34;&gt;same-origin-policy&lt;/a&gt;
  stört, der kann es für seine Website individuell oder allgemein&amp;nbsp;aktiveren.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://pastebin.com/FD3xe6Jt&#34;&gt;Don&amp;#8217;t Use&amp;nbsp;MongoDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.dabeaz.com/coroutines/&#34;&gt;A Curious Course on Coroutines and Concurrency&lt;/a&gt; (in&amp;nbsp;Python!).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://packages.python.org/itsdangerous/&#34;&gt;It&amp;#8217;s dangerous to send data to an untrusted environment&lt;/a&gt;
  &amp;#8211; eine Python-Lib, um im Web kryptografisch zu signieren. Mit Timestamps und&amp;nbsp;so.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://effbot.org/zone/unicode-convert.htm&#34;&gt;Unicode nach Ascii&lt;/a&gt; &amp;#8211; zumindest
  für Latin1. Macht aus Æ ein Th und aus ß ein&amp;nbsp;ss.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://pypi.python.org/pypi/translitcodec/0.2&#34;&gt;Unicode nach Ascii++&lt;/a&gt; &amp;#8211; für
  Support von € in &lt;span class=&#34;caps&#34;&gt;EUR&lt;/span&gt; oder gar ☺ in :-). Ziemlich nützlich, um schöne URLs in
  Blogs zu bekommen und eine bessere Alternative als die üblichen Ansätze in WordPress
  und so mit &lt;span class=&#34;caps&#34;&gt;NFKD&lt;/span&gt; zu&amp;nbsp;normalisieren.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://pocoo.org/~mitsuhiko/badideas.pdf&#34;&gt;5 Years of Bad Ideas&lt;/a&gt; &amp;#8211; über Zauberei
  in Python. Gute und schlechte Zauberei, Zauberei mit Fallback und ungewöhnliche
  Zauberei. Sehr&amp;nbsp;lesenswert!&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://ncannasse.fr/projects/hss&#34;&gt;&lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt; Syntax mit Variablen und nested Blocks&lt;/a&gt;
  &amp;#8211; in einer mir unbekannten yetanother C++/Java-Klon Sprache namens &lt;a href=&#34;http://nekovm.org/&#34;&gt;Neko&lt;/a&gt;
  geschrieben. Die gibt&amp;#8217;s sogar als &lt;code&gt;mod_neko&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://learnboost.github.com/stylus/&#34;&gt;Yet another &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt;&amp;nbsp;Preprocessor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;und zu guter letzt noch ein &lt;a href=&#34;http://dailyjs.com/2010/11/01/node-tutorial/&#34;&gt;node.js-Tutorial&lt;/a&gt;
  (&lt;a href=&#34;https://github.com/alexyoung/dailyjs/&#34;&gt;GitHub&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
<entry>
    <title>lighttpd + git/grack = HTTP 417</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/lighttpd-git-grack-http-417/" />
    <id>tag:blog.posativ.org,2011-10-23:/2011/lighttpd-git-grack-http-417</id>
    <updated>2011-10-23T15:01:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;Just in case, anyone experiences this, too. &lt;a href=&#34;http://lighttpd.net/&#34;&gt;Lighttpd&lt;/a&gt; can not handle
&lt;code&gt;Expect: 100-continue&lt;/code&gt; properly. Pushing with &lt;a href=&#34;http://git-scm.org/&#34;&gt;git&lt;/a&gt; fails (sometimes) with
something like&amp;nbsp;this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;# git push origin master
    Counting objects: 11, done.
    Delta compression using up to 24 threads.
    Compressing objects: 100% (10/10), done.
    Writing objects: 100% (11/11), 1.94 KiB, done.
    Total 11 (delta 0), reused 0 (delta 0)
    error: RPC failed; result=22, HTTP code = 417
    fatal: The remote end hung up unexpectedly
    fatal: The remote end hung up unexpectedly
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;It&amp;#8217;s fixed in lighttpd 1.5 but is a &lt;em&gt;Wont&amp;#8217;t fix&lt;/em&gt; for version 1.4.29. As you may
know, version 1.5 is still beta and not finished yet. Since four years, now. Great
fix, though. A workaround can be &lt;a href=&#34;http://www.lighttpd.net/2009/2/16/1-4-21-yes-we-can-do-another-release&#34;&gt;found here&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reject&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;expect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;417&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;disable&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</content>
</entry>
<entry>
    <title>Linkschleuder #8</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/linkschleuder-8/" />
    <id>tag:blog.posativ.org,2011-10-22:/2011/linkschleuder-8</id>
    <updated>2011-10-22T20:19:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://kodapp.com/&#34;&gt;Kod&lt;/a&gt; – ein neuer Texteditor für &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X, der aussieht wie
  Chrome und recht dunkel ist. Noch in der Entwicklung, open-source und auf
  &lt;a href=&#34;https://github.com/rsms/kod&#34;&gt;GitHub&lt;/a&gt; zu&amp;nbsp;finden.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://resizesafari.com/&#34;&gt;Rezise Safari&lt;/a&gt; – Presets für diverse Endgeräte. Sicher
  nützlich für Webentwickler. Kostet&amp;nbsp;aber.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://unhosted.org/&#34;&gt;Unhosted&lt;/a&gt; – eine Gegenbewegung zu „you get our app, we get your&amp;nbsp;data”&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.matekarte.de/&#34;&gt;matekarte&lt;/a&gt; – eine Karte mit Mate-Lieferanten in deiner Nähe. Wirklich cool!&amp;nbsp;:-)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.userscripts.org/scripts/show/24894&#34;&gt;Wikipedia lesbarer: &lt;span class=&#34;caps&#34;&gt;GM&lt;/span&gt; Skript&lt;/a&gt;
  – &lt;a href=&#34;https://github.com/posativ/snippets/blob/master/wikipedia_-_easy_read.user.js&#34;&gt;etwas von mir gepimpt&lt;/a&gt;, damit
  es die gesamte Breite&amp;nbsp;einnimmt.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://nodebeginner.org/&#34;&gt;The Node Beginner Book – A comprehensive Node.js&amp;nbsp;tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://queue.acm.org/detail.cfm?id=2038036&#34;&gt;OCaml for the Masses&lt;/a&gt;
  – ich glaub, das nehm ich mir für dieses Semester vor. Rockt irgendwie.&amp;nbsp;Schon.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mirror.ocamlcore.org/ocaml-tutorial.org/index.html&#34;&gt;Objective &lt;span class=&#34;caps&#34;&gt;CAML&lt;/span&gt;&amp;nbsp;Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jgm/yst&#34;&gt;yst - static websites from &lt;span class=&#34;caps&#34;&gt;YAML&lt;/span&gt; and string templates&lt;/a&gt; – in Haskell&amp;nbsp;geschrieben!1&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://python-requests.org/&#34;&gt;Requests: &lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt; for Humans&lt;/a&gt; – für&amp;nbsp;python&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
<entry>
    <title>Über Git und Mercurial und warum Windows und Java nerven (und Eclipse auch)</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/ber-git-und-mercurial-und-warum-windows-und-java-nerven-und-eclipse-auch/" />
    <id>tag:blog.posativ.org,2011-10-22:/2011/ber-git-und-mercurial-und-warum-windows-und-java-nerven-und-eclipse-auch</id>
    <updated>2011-10-22T20:01:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;Ich finde es ja beinahe traurig, dass ich mich im 3. Semester als &amp;#8216;was mit
&lt;em&gt;~informatik&lt;/em&gt;-Student damit rumärgern muss, wieso ich beim kollaborativem
Entwickeln darauf achten muss, dass das auch ja unter Windows geht. Denn
Microsoft hat ganze Arbeit geleistet und selbst fortgeschrittene
Informatik-Studenten (wohlgemerkt „angewandte Informatik”) sind nicht in der
Lage, von dieser Linie abzuweichen. Man lebt ja in einer homogenen Umgebung.
Sollen sich doch die anderen anpassen! Ja, und das mache ich dann auch mal
wieder. Bei fünf (ich hatte Java mal in der Uni gehabt, und Delphi in der
Schule) versus einen (also wir brauchen da jetzt Redmine, Git und &amp;#8216;ne
anständige Programmiersprache) bleibt dann nur noch Anpassen an die behinderte
Windows&amp;nbsp;Umgebung.&lt;/p&gt;
&lt;p&gt;Leute, &lt;strong&gt;mit Windows kann man nicht programmieren!&lt;/strong&gt; Windows ist wie Android
und iOS ein &lt;span class=&#34;caps&#34;&gt;ANTI&lt;/span&gt;-Programmier-Betriebssystem. Und Java übrigens auch! Denn
wenn man mal anständig crossplattform mit Libs und so entwickeln will, dann
merkt man auch ganz schnell, das &lt;em&gt;compile once, run everywhere&lt;/em&gt; eher Slogan
denn Realität ist. Aber wen interessiert denn schon Linux/Mac. Das sind ja nur
Konkurrenten. Wenn&amp;#8217;s auf Windows läuft, läuft es ja eh überall. Das ist auch
eine Art&amp;nbsp;crossplattform.&lt;/p&gt;
&lt;p&gt;Die verwendete &lt;span class=&#34;caps&#34;&gt;IDE&lt;/span&gt; ist nach kurzem Überlegen &lt;a href=&#34;http://www.eclipse.org/&#34;&gt;Eclipse&lt;/a&gt; geworden. Nicht, 
dass das irgendwie sinnvoll ist. Eclipse ist eine Krankheit. Aber was anderes
hatten wir in dem Semester „Strukturiertes Programmieren” samt Tutorium „wie
bediene ich Eclipe?” nicht gehabt. Und den Leuten Eigeninitiative zu zeigen
wird wohl erst im Master funktionieren oder wenn der Kurs 
„Kompetenz für Informatiker” angeboten&amp;nbsp;wird.&lt;/p&gt;
&lt;p&gt;Dieses Eclipse hat neben einer hässlichen Oberfläche und 130 &lt;span class=&#34;caps&#34;&gt;MB&lt;/span&gt; Größe
allerdings noch keine Versionskontrollsysteme enthalten. Diese zwei Megabyte
sind leider zu viel. Da es aber sinnvoll ist, als Gruppe verteilte
Versionskontrolle zu nutzen, habe ich mich nach einem Plugin für Eclipse
umgeschaut (&lt;a href=&#34;http://www.cygwin.com/&#34;&gt;Cygwin&lt;/a&gt; muss nicht sein). Gibt &lt;a href=&#34;http://eclipse.org/egit/&#34;&gt;EGit&lt;/a&gt; und das scheint eine
komplette Implementierung von &lt;a href=&#34;http://git-scm.com&#34;&gt;Git&lt;/a&gt; in Java zu sein. Und das funktioniert
dann nicht mit meinem Server, weil das &lt;span class=&#34;caps&#34;&gt;SSL&lt;/span&gt;-Cert eine unbekannte Identität hat
– und &lt;span class=&#34;caps&#34;&gt;DAMIT&lt;/span&gt; konnte wohl &lt;span class=&#34;caps&#34;&gt;NIEMAND&lt;/span&gt; rechnen!!1! Da sieht man wieder
Enterprise-Entwickler bei der Arbeit. Einen hübschen Git-Client für Windows
habe ich nicht gefunden, aber mir war &lt;a href=&#34;http://tortoisehg.bitbucket.org/&#34;&gt;TortoiseHG&lt;/a&gt; ein Name. Hübsches &lt;span class=&#34;caps&#34;&gt;GUI&lt;/span&gt;,
erfordert allerdings ein anderes Backend auf&amp;#8217;m&amp;nbsp;Server.&lt;/p&gt;
&lt;p&gt;Aber ein &lt;a href=&#34;http://mercurial.selenic.com/wiki/HgWebDirStepByStep&#34;&gt;Mercurial Server&lt;/a&gt; mit &lt;a href=&#34;http://www.redmine.org/&#34;&gt;Redmine&lt;/a&gt; wie &lt;a href=&#34;https://blog.posativ.org/2011/grack-redmine-auth-git-smart-http/&#34;&gt;ich es mit Git habe&lt;/a&gt;,
lässt sich nicht ohne weiteres implementieren. Das geht entweder mit Apache
und dem Apache-only Auth-Handler Skript oder über &lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt; Basic/Digest Auth. Das
bringt mit Redmine aber nichts. Redmine nutzt &lt;code&gt;sha1(sha1(passwd) + salt)&lt;/code&gt;, was
auch die sinnvollste Methode ist. Nun stehe ich da, sehe ein high
sophisticated Webinterface (aka &lt;code&gt;hg serve&lt;/code&gt;) und möchte eigentlich nur &lt;code&gt;hg
push&lt;/code&gt; und &lt;code&gt;hg fetch&lt;/code&gt; machen. Von Redmine&amp;nbsp;authentifiziert.&lt;/p&gt;
&lt;p&gt;Ich hasse diese&amp;nbsp;Enterprise-Software-Welt.&lt;/p&gt;</content>
</entry>
<entry>
    <title>Grack + Redmine Auth = Git Smart HTTP++</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/grack-redmine-auth-git-smart-http/" />
    <id>tag:blog.posativ.org,2011-10-08:/2011/grack-redmine-auth-git-smart-http</id>
    <updated>2011-10-08T16:39:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;So, nach gut zwei Wochen weiterem Probieren und Failen habe ich nun auch eine
richtige Authentifizierung für &lt;a href=&#34;http://redmine.org/&#34;&gt;non-Apache&lt;/a&gt; Webserver mittels &lt;a href=&#34;http://www.redmine.org/projects/redmine/wiki/Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl&#34;&gt;Redmine&lt;/a&gt;.
Ich nutze hierbei das neue Smart &lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt; Transport Protokoll, das seit Git 1.6.6
unterstützt wird. Über &lt;span class=&#34;caps&#34;&gt;SSL&lt;/span&gt; getunnelt ist es &lt;a href=&#34;http://www.heise.de/security/meldung/Ueber-500-Zertifikate-Ausmass-des-CA-Hacks-schlimmer-als-erwartet-1336603.html&#34;&gt;fast&lt;/a&gt; so sicher und genauso
schnell wie die Übertragung über &lt;span class=&#34;caps&#34;&gt;SSH&lt;/span&gt; oder Git-Daemon. Nur halt mittels plain
&lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt;, Webserver und etwas&amp;nbsp;mod_proxy.&lt;/p&gt;
&lt;p&gt;Weil schon die &lt;a href=&#34;/2011/redmine-sqlite3-lighttpd-thin/&#34;&gt;Installation abseits von Apache/Nginx&lt;/a&gt; eine Qual wegen nicht
vorhandener Dokumentation war, will ich auch hier wieder dokumentieren, indem
ich mein Setup als Beispiel angebe. Wie immer nutze ich &lt;a href=&#34;http://lighttpd.net/&#34;&gt;lighttpd&lt;/a&gt; und eine
Redmine-Installation Version 1.2.1, betrieben mit &lt;a href=&#34;http://code.macournoyer.com/thin/&#34;&gt;thin&lt;/a&gt;. Weil Hype cool ist,
existieren Wrapper für git-http natürlich nur in &lt;a href=&#34;https://github.com/pedro/gnode&#34;&gt;nodejs&lt;/a&gt; und &lt;a href=&#34;https://github.com/schacon/grack&#34;&gt;ruby&lt;/a&gt;. Argh.
Naja, hab&amp;#8217; ich schon Ruby am Hals, nehm ich halt den letzteren. Mein Code
baut auf &lt;a href=&#34;https://github.com/maxlapshin/grack&#34;&gt;maxlapshin/grack&lt;/a&gt; auf, das ist ein ungemergter Fork eines
ungemergten Fork von &lt;a href=&#34;https://github.com/schacon/grack&#34;&gt;schacon/grack&lt;/a&gt;&amp;nbsp;x(&lt;/p&gt;
&lt;h3&gt;Schema&lt;/h3&gt;
&lt;p&gt;Mein angestrebtes &lt;span class=&#34;caps&#34;&gt;URL&lt;/span&gt;-Layout sieht wie folgt&amp;nbsp;aus:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;/redmine                &amp;lt;- meine Redmine-Installation, HTTPS-getunnelt
/git/myproject.git      &amp;lt;- das Repository
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Meine Ordnerstruktur ist so&amp;nbsp;aufgebaut:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;~/posativ.org/redmine/  &amp;lt;- die Redmine-Installation
~/posativ.org/grack/    &amp;lt;- dort liegt grack später™
~/repositories/git/myproject &amp;lt;- das Beispielprojekt
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;In der &lt;em&gt;/etc/lighttpd/lighttpd.conf&lt;/em&gt; steht dann wieder das&amp;nbsp;übliche:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;nv&#34;&gt;$&lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;host&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;posativ.org&amp;quot;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;

    &lt;span class=&#34;c1&#34;&gt;# some conf here&lt;/span&gt;
    &lt;span class=&#34;c1&#34;&gt;# index-file.names = (&amp;quot;index.html&amp;quot;) und so weiter&lt;/span&gt;
    &lt;span class=&#34;c1&#34;&gt;# mod_proxy ist erforderlich, logischerweise&lt;/span&gt;

    &lt;span class=&#34;nv&#34;&gt;$&lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;url&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=~&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;/git&amp;quot;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;proxy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;
            &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;host&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;port&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;7654&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Installation – Fortführung von &lt;a href=&#34;/2011/redmine-sqlite3-lighttpd-thin/&#34;&gt;dem&amp;nbsp;hier&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Damit das auch funktioniert, habe ich &lt;em&gt;grack&lt;/em&gt; &lt;a href=&#34;https://github.com/posativ/grack&#34;&gt;auch geforkt&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;gp&#34;&gt;$&lt;/span&gt; git clone https://github.com/posativ/grack ~/posativ.org/grack
&lt;span class=&#34;gp&#34;&gt;$&lt;/span&gt; thin config -c /home/www/posativ.org/grack/ -p 7654 -a 127.0.0.1 -e production &lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;go&#34;&gt;  -l grack.log -C /etc/thin/grack.yml&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Dann noch die &lt;code&gt;config.ru&lt;/code&gt; anpassen. Das Teil ist so gepatcht, dass es
&lt;span class=&#34;caps&#34;&gt;SSL&lt;/span&gt;-Zertifikate nicht prüft, denn das tut es nämlich irgendwie falsch.
Angegeben werden muss &lt;em&gt;use_redmine_auth&lt;/em&gt;, &lt;em&gt;redmine&lt;/em&gt; und in meinem Falle auch
&lt;em&gt;grack_suburi&lt;/em&gt;, denn es wird unter &lt;code&gt;/git/myproject.git&lt;/code&gt; gehostet.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;l-Scalar-Plain&#34;&gt;config = {&lt;/span&gt;
  &lt;span class=&#34;l-Scalar-Plain&#34;&gt;:project_root          =&amp;gt; &amp;quot;/home/www/repositories/git&amp;quot;,&lt;/span&gt;
  &lt;span class=&#34;l-Scalar-Plain&#34;&gt;:git_path              =&amp;gt; &amp;#39;/usr/bin/git&amp;#39;,&lt;/span&gt;
  &lt;span class=&#34;l-Scalar-Plain&#34;&gt;:upload_pack           =&amp;gt; true,&lt;/span&gt;
  &lt;span class=&#34;l-Scalar-Plain&#34;&gt;:receive_pack          =&amp;gt; true,&lt;/span&gt;

  &lt;span class=&#34;l-Scalar-Plain&#34;&gt;:use_redmine_auth      =&amp;gt; true,&lt;/span&gt;
  &lt;span class=&#34;l-Scalar-Plain&#34;&gt;:redmine               =&amp;gt; &amp;#39;https://posativ.org/redmine&amp;#39;,&lt;/span&gt;
  &lt;span class=&#34;l-Scalar-Plain&#34;&gt;:grack_suburi          =&amp;gt; &amp;#39;/git&amp;#39;&lt;/span&gt;
&lt;span class=&#34;l-Scalar-Plain&#34;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Dann noch ein&amp;nbsp;schnelles&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;gp&#34;&gt;$&lt;/span&gt; invoke-rc.d thin stop &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; invoke-rc.d thin start
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;und &lt;em&gt;grack&lt;/em&gt; läuft über Port 7654 auf localhost und wird von Webserver
getunnelt. Sogar mit &lt;span class=&#34;caps&#34;&gt;SSL&lt;/span&gt;. Damit die Redmine-Authentifizierung auch läuft, muss
die &lt;a href=&#34;http://www.redmine.org/projects/redmine/wiki/Rest_api&#34;&gt;&lt;span class=&#34;caps&#34;&gt;REST&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;API&lt;/span&gt;&lt;/a&gt; aktiviert werden. Die findet sich unter &lt;em&gt;Administration&lt;/em&gt; -&amp;gt;
&lt;em&gt;Konfiguration&lt;/em&gt; -&amp;gt; &lt;em&gt;Authentifizierung&lt;/em&gt; -&amp;gt; &lt;em&gt;&lt;span class=&#34;caps&#34;&gt;REST&lt;/span&gt; Schnittstelle aktivieren&lt;/em&gt;.
Denn was (mein) Grack macht, ist einfach
&lt;code&gt;https://redmine.tld/projects/myproject.xml&lt;/code&gt; mittels der Nutzerdaten aufrufen,
das bei Zugriff auf dieses Projekt 200 Ok oder eben 403 Forbidden&amp;nbsp;zurückgibt.&lt;/p&gt;
&lt;h3&gt;Usage&lt;/h3&gt;
&lt;p&gt;Das Handling ist jetzt noch etwas suboptimal, ich hoffe, es gibt dazu aber noch
schöne Redmine-Plugins. Denn ein Git-Repository muss als &lt;em&gt;--bare&lt;/em&gt; erstellt
werden (Voraussetzung für&amp;nbsp;&lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;gp&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/repositories/git
&lt;span class=&#34;gp&#34;&gt;$&lt;/span&gt; git init --bare myproject.git
&lt;span class=&#34;gp&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;# oder via git clone --bare ~/myproject myproject.git ein altes Projekt umwandeln&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Dann lässt sich das Repository über &lt;a href=&#34;https://domain.tld/git/myproject.git&#34;&gt;https://domain.tld/git/myproject.git&lt;/a&gt; klonen
und pushen. Ganz&amp;nbsp;hübsch.&lt;/p&gt;</content>
</entry>
<entry>
    <title>Goodbye Wuala</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/goodbye-wuala/" />
    <id>tag:blog.posativ.org,2011-10-05:/2011/goodbye-wuala</id>
    <updated>2011-10-05T23:43:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;Mal ernsthaft. Wie übel muss man failen, um &lt;a href=&#34;https://forum.wuala.com/viewtopic.php?f=39&amp;amp;t=2231&#34;&gt;so eine Scheiße&lt;/a&gt; zu
fabrizieren? Seit einem Jahr tut sich da nichts nennenswertes mehr. Andauernd
wird von &lt;em&gt;wir-haben-&lt;span class=&#34;caps&#34;&gt;GROSSE&lt;/span&gt;-unterderhaube-sachen-gemacht!11&lt;/em&gt; geredet und so
elementare Dinge wie &lt;span class=&#34;caps&#34;&gt;GUI&lt;/span&gt; und Backup &lt;span class=&#34;amp&#34;&gt;&amp;amp;&lt;/span&gt; Sync Interface werden außer Acht
gelassen. Wen haben die eigentlich als Vorbild? Hat DropBox/Azure/JungleDisk
dauernd davon erzählt, wie toll sie im Backend funktionieren? Nein! Und
das mit einem elementaren Unterschied: sie taugen als gute&amp;nbsp;Backup-Lösung.&lt;/p&gt;
&lt;p&gt;Was hat Wuala jetzt zu bieten? Eine unglaublich behinderte Java-&lt;span class=&#34;caps&#34;&gt;GUI&lt;/span&gt;, enormen
&lt;span class=&#34;caps&#34;&gt;CPU&lt;/span&gt;-Verbrauch und nicht-zuende-entwickelte Gruppen/Social-Features. Und dann
kam wer auf die Idee, ach lass&amp;#8217; uns doch mal so richtig tief ins Klo greifen,
und das Trading-Feature („Ich tausche 100 &lt;span class=&#34;caps&#34;&gt;GB&lt;/span&gt; und bekomme dafür 100 &lt;span class=&#34;caps&#34;&gt;GB&lt;/span&gt;
verteilt”) killen. Mir war so in Erinnerung, als dass das Hauptmerkmal beim
&lt;a href=&#34;http://www.youtube.com/watch?v=3xKZ4KGkQY8&#34;&gt;Google Tech Talk&lt;/a&gt; war. Und jetzt?
Ich kann mir auch ein paar Amazon S3 Instanzen zusammenklicken, einen Client
in Python schreiben und etwas &lt;span class=&#34;caps&#34;&gt;AES&lt;/span&gt;-Crypto anwerfen und das würde trotzdem
besser laufen als &lt;del&gt;diese Scheiße&lt;/del&gt; Wuala!&lt;/p&gt;
&lt;p&gt;Ich kann das auch absolut nicht nachvollziehen. Sie nutzen ja dennoch weiterhin
ihren undokumentierten, high secure (!11) &lt;a href=&#34;http://wualablog.blogspot.com/2011/05/wualas-encryption-revisited.html&#34;&gt;Cryptree&lt;/a&gt; – dessen
Implementierung sie btw auch irgendwann mal offenlegen wollten. Sicherlich.
Der einzige Vorteil ist jetzt, dass sie nun das Dateigrößenlimit auf 100 GiB
anheben (da eigentlich jede Datei vorher in Chunks gesplittet wird, eh ein
Fail für sich, dass gerade das nicht lief) und auch wie-auch-immer-implementiert
inkrementelle Backups erlauben (das ist eigentlich konzept-bedingt nicht&amp;nbsp;möglich).&lt;/p&gt;
&lt;p&gt;Naja, aber anscheinend hat Wuala irgendwelche Abnehmer gefunden. Die gehören
sicherlich zur Kategorie der &lt;span class=&#34;caps&#34;&gt;SAP&lt;/span&gt; und Microsoft-Nutzer. Halt freie
Marktwirtschaft und immer schön &lt;em&gt;&lt;span class=&#34;caps&#34;&gt;ABER&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;DIE&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;DATEN&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;BEI&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;AMAZON&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;LIEGEN&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;JA&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;GAR&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;NICH&lt;/span&gt;
&lt;span class=&#34;caps&#34;&gt;IN&lt;/span&gt; &lt;span class=&#34;caps&#34;&gt;EUROPA&lt;/span&gt;!!!111!!&lt;/em&gt; anprangern. Das ist so miserabel ins &lt;a href=&#34;https://forum.wuala.com/viewtopic.php?f=39&amp;amp;t=2231#p9428&#34;&gt;Gesicht gelogen&lt;/a&gt;.
Einfach nur&amp;nbsp;traurig:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We have strong security and privacy. If you want to have
client-side-encryption and if you want to have your data stored in Europe,
Wuala is your only&amp;nbsp;option.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Genau!1 Noch einmal zum mitschreiben: mein &lt;code&gt;rsync&lt;/code&gt; läuft mit einem Bruchteil
der Leistung feature-reicher und zuverlässiger als irgendeine Version von
Wuala in den vergangenen drei Jahren. Und sogar auf Servern innerhalb
Deutschlands und meiner&amp;nbsp;Wohnung!&lt;/p&gt;
&lt;p&gt;Und ein weiteres mal sehe ich mich nach Alternativen um. Und jede davon wird
angenehmer zu bedienen sein als Wuala. Zur Auswahl stehen jetzt &lt;code&gt;rsync&lt;/code&gt; mit
&lt;a href=&#34;http://duplicity.nongnu.org/&#34;&gt;duplicity&lt;/a&gt;, &lt;a href=&#34;https://www.tarsnap.com/&#34;&gt;Tarsnap&lt;/a&gt; als low-level Systeme und
&lt;a href=&#34;http://www.aerofs.com/&#34;&gt;AeroFS&lt;/a&gt; (invite-only, ich hätt&amp;#8217; gern einen) sowie &lt;a href=&#34;http://sparkleshare.org/&#34;&gt;SparkleShare&lt;/a&gt;.
Leider alles nix mit etwas social-dingens Support und ohne Backend. Hilft wohl
nur &lt;a href=&#34;http://adamas.ai/cgi-bin/index.cgi?page=permlink&amp;amp;id=4&#34;&gt;selber coden&lt;/a&gt;.&lt;/p&gt;</content>
</entry>
<entry>
    <title>Linkschleuder #7</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/linkschleuder-7/" />
    <id>tag:blog.posativ.org,2011-09-30:/2011/linkschleuder-7</id>
    <updated>2011-09-30T11:57:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://tyrs.nicosphere.net/index.html&#34;&gt;ncurses Twitter client&lt;/a&gt; – bin ja nach
  &lt;a href=&#34;https://github.com/jugyo/earthquake&#34;&gt;earthquake&lt;/a&gt; nun erstmal bei &lt;a href=&#34;http://www.echofon.com/&#34;&gt;Echofon&lt;/a&gt; im&amp;nbsp;Firefox.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://secure.wikimedia.org/wikipedia/commons/wiki/Category:Icons_themes&#34;&gt;Icon Stocks&lt;/a&gt;
  – Creative Commons und so, sehr&amp;nbsp;nützlich.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.opennicproject.org/&#34;&gt;alternative (unabhängige) Top-Level-Domains&lt;/a&gt;
  – erfordert allerdings Anpassung der &lt;em&gt;/etc/resolv.conf&lt;/em&gt;, aber &amp;#8216;ne nette&amp;nbsp;Idee.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.frameloss.org/2011/09/18/firewire-attacks-against-mac-os-lion-filevault-2-encryption/&#34;&gt;FireWire attacks against Lion&amp;#8217;s FileVault 2&lt;/a&gt; – tja, aus diesem Grund habe
  ich FireWire entfernt. Ein potentielles Problem&amp;nbsp;weniger.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sebest/collectd-mongodb&#34;&gt;collectd-Plugin für MongoDB&lt;/a&gt; – hab
  ich &lt;a href=&#34;https://posativ.org/jarmon/&#34;&gt;im Einsatz&lt;/a&gt; und funktioniert&amp;nbsp;einwandfrei.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.linushoppe.de/2011/09/22/hyperpolyglot-org-kurzreferenzen-der-bekannten-programmiersprachen/&#34;&gt;Kurzreferenzen bekannter Programmiersprachen – Übersicht&lt;/a&gt; – unter anderen mit
  &lt;a href=&#34;http://hyperpolyglot.org/scripting&#34;&gt;&lt;span class=&#34;caps&#34;&gt;PHP&lt;/span&gt;, Perl, Python, Ruby&lt;/a&gt;, &lt;a href=&#34;http://hyperpolyglot.org/embeddable&#34;&gt;Tcl, Lua, JavaScript, Io&lt;/a&gt;,
  &lt;a href=&#34;http://hyperpolyglot.org/c&#34;&gt;C, C++, Objective C, Java, C#&lt;/a&gt; und &lt;a href=&#34;http://hyperpolyglot.org/ml&#34;&gt;&lt;span class=&#34;caps&#34;&gt;ML&lt;/span&gt;, OCaml, Scala und&amp;nbsp;Haskell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.mathnews.uwaterloo.ca/Issues/mn11103/QuantumBogoSort.php&#34;&gt;Warum wir Quantencomputer &lt;em&gt;wirklich&lt;/em&gt;&amp;nbsp;brauchen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.tinypy.org/&#34;&gt;a minimalist implementation of python in 64k of code&lt;/a&gt;
  – &lt;em&gt;Q: What more could you possibly want? A: a&amp;nbsp;pony?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://wtforms.simplecodes.com/&#34;&gt;WTForms&lt;/a&gt; – Form validation and rendering
  library in python. Syntax überzeugt, Name&amp;nbsp;auch.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.nodebox.net/code/index.php/&#34;&gt;NodeBox&lt;/a&gt; – sowas wie
  &lt;a href=&#34;http://processing.org/&#34;&gt;Processing&lt;/a&gt; nur für python (und&amp;nbsp;Mac-only).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/tthibo/SQL-Tutorial&#34;&gt;A Gentle Introduction to &lt;span class=&#34;caps&#34;&gt;SQL&lt;/span&gt; Using&amp;nbsp;SQLite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.currybet.net/cbet_blog/2010/08/html5-for-journalists.php&#34;&gt;&lt;span class=&#34;caps&#34;&gt;HTML5&lt;/span&gt; for journalists&lt;/a&gt; – via &lt;a href=&#34;http://www.schockwellenreiter.de/blog/2011/09/29/html5-fur-journalisten/&#34;&gt;Schockwellenreiter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.jhr-online.de/290&#34;&gt;zsh, tab completion, remote hosts, and&amp;nbsp;collaboration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
<entry>
    <title>sqlite dump mit python</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/sqlite-dump-mit-python/" />
    <id>tag:blog.posativ.org,2011-09-24:/2011/sqlite-dump-mit-python</id>
    <updated>2011-09-24T13:28:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;Shell:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;n&#34;&gt;sqlite3&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;my&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;&lt;span class=&#34;caps&#34;&gt;SELECT&lt;/span&gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;&lt;span class=&#34;caps&#34;&gt;FROM&lt;/span&gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sqlite_master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;python:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sqlite3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;os&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;con&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sqlite3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;my.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;dump.sql&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;w&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;con&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterdump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;via &lt;a href=&#34;http://stackoverflow.com/questions/305378/get-list-of-tables-db-schema-dump-etc-in-sqlite-databases&#34;&gt;stackoverflow&lt;/a&gt;. Denn ich stehe auf Kriegsfuß mit dieser dämlichen &lt;span class=&#34;caps&#34;&gt;SQL&lt;/span&gt;-Logik. &lt;a href=&#34;https://couchdb.apache.org/&#34;&gt;CouchDB&lt;/a&gt; und &lt;a href=&#34;http://www.mongodb.org/&#34;&gt;MongoDB&lt;/a&gt;&amp;nbsp;ftw.&lt;/p&gt;</content>
</entry>
<entry>
    <title>ForkLift as Finder replacement in Lion</title>
    <link rel="alternate" type="text/html" href="http://blog.posativ.org/2011/forklift-as-finder-replacement-in-lion/" />
    <id>tag:blog.posativ.org,2011-09-22:/2011/forklift-as-finder-replacement-in-lion</id>
    <updated>2011-09-22T11:17:00Z</updated>
    <author>
        <name>posativ</name>
        <uri>http://blog.posativ.org/</uri>
        <email>info@posativ.org</email>
    </author>
    <content type="html">&lt;p&gt;Today, I did a short maintenance to my MacBook running &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X Lion. I found out, Macfuse is no longer supported and dead as well. But there is &lt;a href=&#34;http://osxfuse.github.com/&#34;&gt;&lt;span class=&#34;caps&#34;&gt;OSXFUSE&lt;/span&gt;&lt;/a&gt;, which installs without any problems. OpenPGP does not work for Mail, too and since the release of Lion (that&amp;#8217;s about two months ago) there is &lt;a href=&#34;http://gpgtools.lighthouseapp.com/projects/65764/tickets/135&#34;&gt;no &lt;span class=&#34;caps&#34;&gt;GPG&lt;/span&gt; support&lt;/a&gt;. Really embarrassing.
After I&amp;#8217;ve updated to Lion, I had iTunes and QuickTime, carefully removed, installed again and &lt;a href=&#34;http://www.reggieashworth.com/appdelete&#34;&gt;AppDelete&lt;/a&gt; was unable to remove it. I&amp;#8217;ve updated to the last version and could remove this crappy software again – waiting for the next &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X update&amp;nbsp;m(&lt;/p&gt;
&lt;p&gt;Since I am using a Mac, I am using &lt;a href=&#34;http://totalfinder.binaryage.com/&#34;&gt;TotalFinder&lt;/a&gt;, because &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt; X&amp;#8217; Finder sucks a lot. Every time I use it. It feels like you must not handle your files. Unfortunately TotalFinder looks like &lt;del&gt;shit&lt;/del&gt; Chrome and I don&amp;#8217;t like Chrome&amp;#8217;s &lt;span class=&#34;caps&#34;&gt;UI&lt;/span&gt; and prefer Safari&amp;#8217;s or Firefox&amp;#8217; tabbing style. I did another search for a Finder replacement and ended up with &lt;a href=&#34;http://www.binarynights.com/&#34;&gt;ForkLift&lt;/a&gt; –  replacing &lt;a href=&#34;http://www.panic.com/transmit/&#34;&gt;Transmit&lt;/a&gt; and &lt;a href=&#34;http://archiverapp.com/&#34;&gt;Archiver&lt;/a&gt; as well). To replace the Finder, I&amp;#8217;ve made the&amp;nbsp;following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;first, we need the Finder&amp;#8217;s icon located in &lt;em&gt;/System/Library/CoreServices/Dock.app/Contents/Resources/finder.png&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;convert it to an icon file (.icns) with &lt;code&gt;png2icns finder.icns finder.png&lt;/code&gt;, which didn&amp;#8217;t work for me so I used this &lt;a href=&#34;http://iconverticons.com/&#34;&gt;cool web&amp;nbsp;service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;open you Applications folder, locate &lt;em&gt;ForkLift&lt;/em&gt; and control-rightclick and select &amp;#8220;show package content&amp;#8221; and navigate to &lt;em&gt;Contents/Resources/&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;backup the existing &lt;em&gt;forklift.icns&lt;/em&gt; and move your converted &lt;em&gt;finder.icns&lt;/em&gt; to &lt;em&gt;forklift.icns&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now your ForkLift icon is identical to Finder. Lets remove the Finder from&amp;nbsp;Dock.app.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cd&lt;/code&gt; to &lt;em&gt;/System/Library/CoreServices/Dock.app/Contents/Resources/&lt;/em&gt; and open &lt;em&gt;DockMenus.plist&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;change &amp;#8220;finder-quit&amp;#8221; and/or &amp;#8220;finder-running&amp;#8221; (don&amp;#8217;t know, which one worked for me) to&amp;nbsp;include&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;DockMenus.plist&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;dict&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;nt&#34;&gt;&amp;lt;key&amp;gt;&lt;/span&gt;command&lt;span class=&#34;nt&#34;&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;nt&#34;&gt;&amp;lt;integer&amp;gt;&lt;/span&gt;1004&lt;span class=&#34;nt&#34;&gt;&amp;lt;/integer&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;nt&#34;&gt;&amp;lt;key&amp;gt;&lt;/span&gt;name&lt;span class=&#34;nt&#34;&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;nt&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;REMOVE_FROM_DOCK&lt;span class=&#34;nt&#34;&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;/dict&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;do &lt;code&gt;killall Dock&lt;/code&gt; which didn&amp;#8217;t work for me or log out and in again to restart&amp;nbsp;Dock.app&lt;/li&gt;
&lt;li&gt;now you can rightclick the Finder&amp;#8217;s icon and select remove from&amp;nbsp;Dock&lt;/li&gt;
&lt;li&gt;stick ForkLift to&amp;nbsp;Dock.app&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
</feed>
