<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
>
<channel>
	<title>pberndt.com: News &amp; Blog</title>
	<link>http://www.pberndt.com/index.html</link>
	<description>Summary of index.html</description>
	<pubDate>Fri, 27 Mar 2015 13:25:57 +0000</pubDate>
	<language>de</language>
	<ttl>2880</ttl>
	<item>
	<title>Ein paar Tools</title>
	<link>http://www.pberndt.com/_Newsdata/iwebd2-privbind-etc.html</link>
	<comments>http://www.pberndt.com/_Newsdata/iwebd2-privbind-etc.html</comments>
	<description><![CDATA[ 
		<p>
			<img src="_Newsdata/python.jpg?ct=raw" alt="Python" class="float"/>
			Ich habe in letzter Zeit wieder einige praktische Scripte in <a
			href="https://github.com/phillipberndt/scripts">mein Repository</a>
			übernommen, die vielleicht praktisch sein könnten. Daher stelle 
			ich dir mal kurz vor:
		</p>
		<ul><li><a href="/_Newsdata/iwebd.html">iwebd</a> und den Vorgänger
			<a href="/_Newsdata/iftpd.html">iftpd</a> hatte ich hier schon erwähnt. Ich habe zwischenzeitlich
			beide verworfen und <a href="https://github.com/phillipberndt/scripts/tree/master/iwebd">ein großes Rewrite</a>
			daraus gemacht. Der neue iwebd kann neben HTTP und FTP auch WebDAV, SSL,
			HTTP-Uploads per Drag &amp; Drop in Verzeichnisansichten und kündigt sich
			im lokalen Netz per Avahi an. Transparente Kompression, CGI und
			Passwortschutz per Digest-Authentifizierung kann er auch.  Und er läuft
			übrigens auch auf Android einwandfrei, wenn man Python installiert hat.
			Also eine kleine eierlegende Wollmichsau, wenn man auf die Schnelle Dateien
			austauschen muss ;) HTTP/2 folgt vermutlich irgendwann.</li>
		<li><a href="https://github.com/phillipberndt/scripts/tree/master/libprivbind">libprivbind</a>
			ist ein Python-Modul, um an priviligierte Ports zu binden. Ich weiß, dass es <a href="https://github.com/JiriHorky/privbind">privbind</a>
			und authbind gibt - das Modul verfolgt aber einen anderen Ansatz. Statt zu versuchen, generell <code>bind()</code> Aufrufe
			abzufangen und damit Prozessen transparent die Möglichkeit zu geben,
			priviligierte Ports zu verwenden, bietet es einen eigenen Aufruf, der
			Sockets an priviligierte Ports bindet. Das funktioniert, indem der
			Dateideskriptor an einen Prozess mit <code>cap_net_bind_service</code>
			übergeben wird; im Gegensatz zu den älteren Ansätzen nicht kompliziert per
			<code>sendmsg</code> über ein UNIX-Socket, sondern einfach, indem das
			Socket vor dem <code>execv</code> Aufruf nicht geschlossen wird.</li>
		<li><a href="https://github.com/phillipberndt/scripts/tree/master/pydoce">pydoce</a> öffnet beliebigen Python-Code
			im Editor. <code>pydoce os.path.isfile</code> öffnet z.B. das path Modul gleich an der richtigen Zeile.</li>
		<li><a href="https://github.com/phillipberndt/scripts/tree/master/livereload">livereload</a> ist eine Python-Implementierung
			des livereload-Standards. Es gibt so etwas massig, aber meistens für Ruby oder mit aberwitzigen Abhängigkeiten. Diese
			Version braucht "nur" Tornado.</li>
		</ul>
		<p>Schon älter ist, und nichts mit Python zu tun hat, <a
		href="https://github.com/phillipberndt/scripts/tree/master/gdo">gdo</a>. Ich
		benutze das so wahnsinnig viel, dass ich das noch einmal verlinken musste: Das ist ein Tool, das
		i.W. <code>find -regextype pcre -iregex "$1" -exec "$2" \;</code> entspricht.</p>
		
		 ]]></description>
	</item>
	<item>
	<title>Postscript und PDF für pqiv</title>
	<link>http://www.pberndt.com/_Newsdata/pqiv-pdf-backend.html</link>
	<comments>http://www.pberndt.com/_Newsdata/pqiv-pdf-backend.html</comments>
	<description><![CDATA[ 
		<p>
			<img src="_Newsdata/pqiv-scrot.jpg?ct=raw" alt="pqiv 1.0 und 2.0-rc1" class="float" />
			In letzter Zeit habe ich <a href="/Programme/Linux/pqiv/index.html">pqiv</a> mal wieder
			etwas mehr Zeit gewidmet. In meinem wissenschaftlichen Alltag speichere ich Plots
			in aller Regel direkt als Postscript oder PDF Datei, damit ich für die Einbindung
			in ein Paper direkt ideale Qualität habe, ohne doppelte Arbeit zu haben. Nachteil
			dieser Praxis ist, dass es aufwendig ist, schnell durch Serien von Plots zu schauen,
			die z.B. während langer Simulationen regelmäßig zwecks Übersicht weggespeichert
			werden. Da ich in pqiv 2.x ohnehin Cairo zum Zeichnen verwende, ist die
			Einbindung von
			<a href="http://poppler.freedesktop.org/">Poppler</a> extrem simpel:
			<a href="http://people.freedesktop.org/~ajohnson/docs/poppler-glib/PopplerPage.html#poppler-page-render">Das rendert in einer Zeile eine PDF auf eine Cairo Oberfläche</a>. Von daher
			bot es sich an, das mal nachzurüsten.
		</p>
		<p>
			Aufwendiger war es, das <em>schön</em> zu machen. Ich hatte bislang gdk-pixbuf fest
			mit pqiv verdrahtet, weil ich beim Designen nicht davon ausgegangen war, dass ich
			einmal mehr Backends als nur das verwenden will. Diese Verknüpfung ist nun aufgehoben,
			sodass das Nachrüsten von Backends extrem einfach geworden ist. (<a href="https://github.com/phillipberndt/pqiv/blob/master/backends/poppler.c">Der gesamte Poppler Code</a> ist z.B.
			derzeit nur 179 Zeilen inklusive Kommentaren lang.)
		</p>
		<p>
			Ich habe mich für's erste an meinen Bedürfnissen orientiert und neben Poppler nur durch
			<a href="http://www.freedesktop.org/wiki/Software/libspectre/">libspectre</a>
			Postscript-Support eingebaut. Für Spezialanwendungen dürfte aber selbst so etwas wie ein
			gnuplot Backend machbar sein, falls jemand daran interessiert ist ;) Nebenbei kamen
			durch die Umbauten noch besserer BSD-Support, diverse Bugfixes und allgemein bessere
			Stabilität als Gimmick hinzu, denn beim ausgiebigen, inzwischen automatisierten, Testen
			habe ich einige Probleme gefunden &amp; behoben.
		</p>
		<p>
			Wer an den Änderungen interessiert ist, findet
			<a href="https://github.com/phillipberndt/pqiv/commit/eea4f4fcc90ba5f6f1b0bfaeab6efbe2c5ad2f04">hinter dem Merge-Commit</a> noch die Versionsgeschichte
			der Umbauten.
		</p>
		
		 ]]></description>
	</item>
	<item>
	<title>Neues zu pqiv</title>
	<link>http://www.pberndt.com/_Newsdata/pqiv-rewrite-2.html</link>
	<comments>http://www.pberndt.com/_Newsdata/pqiv-rewrite-2.html</comments>
	<description><![CDATA[ 
		<p>
			<img src="_Newsdata/pqiv-scrot.jpg?ct=raw" alt="pqiv 1.0 und 2.0-rc1" class="float" />
			<a href="https://github.com/phillipberndt/pqiv/releases/tag/2.0">pqiv
			2.0</a> ist vor inzwischen wieder einer ganzen Weile erschienen und steht
			bereits in den Testversionen von Debian und Gentoo zur Verfügung. Während im Vergleich zur
			hier angekündigten rc-Version nicht mehr viel passiert ist, wird die kommende Version 2.1
			einige große Änderungen bringen:
		</p>
		<p>
			Sie fügt per inotify automatisch neue Dateien zur Dateiliste hinzu, gibt
			endgültig den Namen <em>qiv</em> auf, bringt Überblendungen zwischen
			Bildern zurück - schicker als je zuvor, denn diesmal funktioniert der
			Effekt für beliebige Bilder, kommt besser mit dem Nachladen großer Bilder
			zurecht, schont die CPU beim Neuzeichnen von Bildern, indem mehr gecached
			wird, bringt einen neuen „low memory“ Modus, der alle Zwischenspeicher so
			weit wie möglich abschaltet, und ermöglicht das Laden der Bilder im einem
			„lazy mode“, bei dem das Fenster bereits angezeigt wird, bevor alle Bilder
			geladen worden sind. Auf letzteres Feature bin ich ein wenig stolz, denn
			richtig sortiert werden die nachgeladenen Bilder trotzdem. Das erreiche ich,
			indem ich statt der Dateiliste einen <a
			href="http://en.wikipedia.org/wiki/Order_statistic_tree">order-statistic</a>
			<a href="http://en.wikipedia.org/wiki/AVL_tree">AVL Baum</a> verwende. Das
			ist ein Suchbaum, in dem zusätzlich, ebenfalls in <em>O(log n)</em>, per
			Index auf Elemente zugegriffen werden kann. Da ich so etwas nicht in fertig
			für C gefunden habe, habe ich mir einen selbst geschrieben: Das Projekt
			habe ich <a href="https://github.com/phillipberndt/bostree">bostree</a>
			(binary order statistic tree) genannt.
		</p>
		<p>
			In other, unrelated news: Ich habe die Homepage auf einen Server umgezogen,
			über den ich etwas mehr Kontrolle habe. Meinen alten Hoster musste ich
			dafür leider ganz verlassen, weil man mir keine Hoheit über die
			DNS-Einträge geben wollte. Nun liegt die Domain bei Host Europe. Dadurch
			gibt es hier endlich den ganzen Technik-Schnickschnack, der schon lange
			überfällig war: IPv6, SSL und für Email <a
			href="http://en.wikipedia.org/wiki/DKIM">DKIM</a> und <a
			href="http://en.wikipedia.org/wiki/Sender_Policy_Framework">SPF</a>.  Und
			bei Gelegenheit habe ich die Seite mal auf UTF-8 umgestellt.
		</p>
		
		 ]]></description>
	</item>
	<item>
	<title>pqiv 1.0 und 2.0-rc1</title>
	<link>http://www.pberndt.com/_Newsdata/pqiv-rewrite.html</link>
	<comments>http://www.pberndt.com/_Newsdata/pqiv-rewrite.html</comments>
	<description><![CDATA[ 
		<p>
			<img src="_Newsdata/pqiv-scrot.jpg?ct=raw" alt="pqiv 1.0 und 2.0-rc1" class="float" />
			Für meinen Bildbetrachter <a href="/Programme/Linux/pqiv/index.html">pqiv</a> gibt es ein
			großes Update. Zunächst ein kleines: Version 0.13 springt auf 1.0, denn das Release mit
			einem kleinen neuen Feature (anpassbare Fenstertitel) wird das letzte in dieser Reihe sein.
			pqiv 2.0 wird demnächst als komplettes Rewrite mit GTK 3 erscheinen.
		</p>
		<p>
			Zunächst einmal <a href="_Newsdata/pqiv012.html">hatte ich ja mal eine
			Portierung angekündigt</a>. Während der Arbeit daran habe ich aber gemerkt, dass
			ich einige Konzepte von GTK erst jetzt richtig verstehe und dass sich einige auch
			mit der neuen Version geändert haben. Das ganze neu zu schreiben erschien
			mir da angebracht.
		</p>
		<p>
			Die neue Version läuft mit GTK 3 und Cairo, ist aber rückwärtskompatibel
			mit den neueren Versionen von GTK 2. Einige aus heutiger Sicht unnütze
			Features werden verschwinden, dafür kommt auch ein neues, das mir schon
			länger gefehlt hat: pqiv lädt das kommende Bild schon vorab in den Speicher,
			sodass bei Albenpräsentationen nach Betätigung der Leertaste auch wirklich
			sofort das nächste Bild zu sehen ist. Außerdem ist die neue Version dank
			saubererer Verwendung der Schnittstelle zum Display Server und intensivem
			Testen mit verschiedenen Fenster Managern (mutter, muffin, xfwm, i3 und
			etwas am Rande auch mingw32) deutlich kompatibler und hat weniger Macken.
		</p>
		<p>
			Ich freue mich, wenn jemand das schon testen will &amp; Feedback gibt!
			Den Code gibt es <a href="https://github.com/phillipberndt/pqiv/tree/rewrite">im
			Rewrite Branch auf Github</a>. Kompilieren geht einfach per
			<code>make</code>, <code>./configure</code> ist noch optional.
		</p>
		
		 ]]></description>
	</item>
	<item>
	<title>UPnP relay daemon</title>
	<link>http://www.pberndt.com/_Newsdata/upnp_relay.html</link>
	<comments>http://www.pberndt.com/_Newsdata/upnp_relay.html</comments>
	<description><![CDATA[ 
		<p>
			<img src="_Newsdata/upnp.jpg?ct=raw" alt="UPnP Logo" class="float" />
			Meine Eltern haben einen <a
			href="http://www.philips.de/c/fernsehgeraete/4000-series-81-cm-32-zoll-full-hd-1080p-dvb-t-c-s2-32pfl4007k_12/prd/">Philips
			Fernseher</a>, der über einen OpenWRT-WLAN-Router in das eigentliche LAN
			eingebunden ist. Ich hatte mir - eigentlich schon über Weihnachten -
			vorgenommen, herauszufinden, warum der Computer den Fernseher nicht via
			UPnP als Ausgabegerät findet. Am Netzwerk lag es nicht, Multicast-Routing
			hatte ich eingerichtet und in die andere Richtung hat auch alles
			funktioniert.
		</p>
		<p>
			Jetzt an Ostern war ich wieder einmal zu Hause und hatte Gelegenheit,
			noch einmal herumzuexperimentieren: Anscheinend hat der Fernseher einen Bug.
			In der UPnP-Spezifikation tauschen Geräte über UDP/Port 1900 per Multicast
			HTTP-Nachrichten aus, um einander zu finden. Über eine weitere URL, die
			dann per TCP aufgerufen wird, lädt sich jedes interessierte Gerät dann
			nähere Informationen herunter. Es gibt nun zwei verschiede Mechanismen: Zum
			einen senden alle Geräte ab und zu ein "NOTIFY"-Request, in dem sie ihre
			Präsenz ankündigen. Der andere Mechanismus ist eine aktive Suche, bei der
			ein Gerät ein "M-SEARCH" an dieselbe Adresse schickt und alle Geräte eine
			HTTP-Antwort speziell an den Fragenden zurücksenden.
		</p>
		<p>
			Letzterer Mechanismus funktioniert auf dem Fernseher offenbar nicht. Und auch bei
			dem Notify gibt es Probleme, denn im laufenden Betrieb sendet er bisweilen eine
			Nachricht ins Netz, in der er sich aus dem Verbund abmeldet. Und danach ist
			dann Funkstille.
		</p>
		<p>
			Ich habe einen kleinen Dämon geschrieben, den man auf seinem Router laufen lassen
			kann, der das Problem angeht. Er cached die NOTIFY-Nachrichten und antwortet
			auf M-SEARCH Anfragen mit Antworten aus diesem Cache. Dabei halte ich mich nicht gänzlich
			an die Spezifikation und erzeuge einigen unnötigen Traffic, aber dafür finden alle Geräte
			jetzt den Fernseher und ich kann endlich von meinem Handy aus Videos vom PC auf dem
			Fernseher starten. Schick.
		</p>
		<p>
			Außerdem kann man den Dämon auf einen Router zwischen zwei gerouteten
			Netzwerken setzen und kann sich auf die Weise Multicast-Routing komplett
			sparen. Auch nützlich.
		</p>
		<p>
			Wer will: Auf <a href="https://github.com/phillipberndt/upnprd/">Github
			gibt es ein Repository</a>.
		</p>
		
		 ]]></description>
	</item>
</channel>
</rss>
