<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
        <title>blog.crash-override.net</title>
        <description>blog.crash-override.net - Benjamin Schieder</description>
        <link>http://blog.crash-override.net/</link>
        <link>http://blog.crash-override.net/</link>
        <lastBuildDate>2013-05-17T16:17:22+02:00</lastBuildDate>
        <pubDate>2013-05-17T16:17:22+02:00</pubDate>
        <ttl>1800</ttl>


        <item>
                <title>Ich mag nicht mehr...</title>
                <description>&lt;p&gt;Ich mag nicht mehr&amp;#8230; Ich mag einfach nicht mehr&amp;#8230;&lt;br /&gt;Ich mag echt nicht mehr mit solcher Schrottsoftware wie OwnCloud arbeiten; hat &lt;strong&gt;bitte&lt;/strong&gt; jemand eine Alternative fuer mich?&lt;/p&gt;

&lt;p&gt;Highlight des Tages: PROPFIND /.well-known/carddav&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='xml'&gt;&lt;span class='cp'&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;/span&gt;
&lt;span class='nt'&gt;&amp;lt;D:propfind&lt;/span&gt; &lt;span class='na'&gt;xmlns:D=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;DAV:&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;xmlns:C=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;urn:ietf:params:xml:ns:carddav&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&amp;lt;D:prop&amp;gt;&lt;/span&gt;
&lt;span class='nt'&gt;&amp;lt;D:current-user-principal/&amp;gt;&lt;/span&gt;
&lt;span class='nt'&gt;&amp;lt;D:resourcetype&lt;/span&gt; &lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
&lt;span class='nt'&gt;&amp;lt;D:displayname&lt;/span&gt; &lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
&lt;span class='nt'&gt;&amp;lt;C:addressbook-home-set/&amp;gt;&lt;/span&gt;
&lt;span class='nt'&gt;&amp;lt;/D:prop&amp;gt;&amp;lt;/D:propfind&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Unter OwnCloud 5.0.5 hat das die korrekte XML Antwort der CardDAV Ressourcen des sich authentifizierenden Users gegeben:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='xml'&gt;&lt;span class='cp'&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;/span&gt;
&lt;span class='nt'&gt;&amp;lt;d:multistatus&lt;/span&gt; &lt;span class='na'&gt;xmlns:d=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;DAV:&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;xmlns:s=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;http://sabredav.org/ns&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;xmlns:card=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;urn:ietf:params:xml:ns:carddav&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
	&lt;span class='nt'&gt;&amp;lt;d:response&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;d:href&amp;gt;&lt;/span&gt;/remote.php/carddav/&lt;span class='nt'&gt;&amp;lt;/d:href&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;d:propstat&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;d:prop&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;d:current-user-principal&amp;gt;&lt;/span&gt;
					&lt;span class='nt'&gt;&amp;lt;d:href&amp;gt;&lt;/span&gt;/remote.php/carddav/principals/b***r@s***r.h***p.n***t/&lt;span class='nt'&gt;&amp;lt;/d:href&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;/d:current-user-principal&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;d:resourcetype&amp;gt;&lt;/span&gt;
					&lt;span class='nt'&gt;&amp;lt;d:collection/&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;/d:resourcetype&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;/d:prop&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;d:status&amp;gt;&lt;/span&gt;HTTP/1.1 200 OK&lt;span class='nt'&gt;&amp;lt;/d:status&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;/d:propstat&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;d:propstat&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;d:prop&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;d:displayname/&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;card:addressbook-home-set/&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;/d:prop&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;d:status&amp;gt;&lt;/span&gt;HTTP/1.1 404 Not Found&lt;span class='nt'&gt;&amp;lt;/d:status&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;/d:propstat&amp;gt;&lt;/span&gt;
	&lt;span class='nt'&gt;&amp;lt;/d:response&amp;gt;&lt;/span&gt;
	&lt;span class='nt'&gt;&amp;lt;d:response&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;d:href&amp;gt;&lt;/span&gt;/remote.php/carddav/principals/&lt;span class='nt'&gt;&amp;lt;/d:href&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;d:propstat&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;d:prop&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;d:current-user-principal&amp;gt;&lt;/span&gt;
					&lt;span class='nt'&gt;&amp;lt;d:href&amp;gt;&lt;/span&gt;/remote.php/carddav/principals/b***r@s***r.h***p.n***t/&lt;span class='nt'&gt;&amp;lt;/d:href&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;/d:current-user-principal&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;d:resourcetype&amp;gt;&lt;/span&gt;
					&lt;span class='nt'&gt;&amp;lt;d:collection/&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;/d:resourcetype&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;/d:prop&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;d:status&amp;gt;&lt;/span&gt;HTTP/1.1 200 OK&lt;span class='nt'&gt;&amp;lt;/d:status&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;/d:propstat&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;d:propstat&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;d:prop&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;d:displayname/&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;card:addressbook-home-set/&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;/d:prop&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;d:status&amp;gt;&lt;/span&gt;HTTP/1.1 404 Not Found&lt;span class='nt'&gt;&amp;lt;/d:status&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;/d:propstat&amp;gt;&lt;/span&gt;
	&lt;span class='nt'&gt;&amp;lt;/d:response&amp;gt;&lt;/span&gt;
	&lt;span class='nt'&gt;&amp;lt;d:response&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;d:href&amp;gt;&lt;/span&gt;/remote.php/carddav/addressbooks/&lt;span class='nt'&gt;&amp;lt;/d:href&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;d:propstat&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;d:prop&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;d:current-user-principal&amp;gt;&lt;/span&gt;
					&lt;span class='nt'&gt;&amp;lt;d:href&amp;gt;&lt;/span&gt;/remote.php/carddav/principals/b***r@s***r.h***p.n***t/&lt;span class='nt'&gt;&amp;lt;/d:href&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;/d:current-user-principal&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;d:resourcetype&amp;gt;&lt;/span&gt;
					&lt;span class='nt'&gt;&amp;lt;d:collection/&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;/d:resourcetype&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;/d:prop&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;d:status&amp;gt;&lt;/span&gt;HTTP/1.1 200 OK&lt;span class='nt'&gt;&amp;lt;/d:status&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;/d:propstat&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;d:propstat&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;d:prop&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;d:displayname/&amp;gt;&lt;/span&gt;
				&lt;span class='nt'&gt;&amp;lt;card:addressbook-home-set/&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;/d:prop&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;d:status&amp;gt;&lt;/span&gt;HTTP/1.1 404 Not Found&lt;span class='nt'&gt;&amp;lt;/d:status&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;/d:propstat&amp;gt;&lt;/span&gt;
	&lt;span class='nt'&gt;&amp;lt;/d:response&amp;gt;&lt;/span&gt;
&lt;span class='nt'&gt;&amp;lt;/d:multistatus&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Und unter dem tollen neuen - ein halbes Dutzend XSS und CSRF Fehler behenden - 5.0.6 bekomme ich &lt;strong&gt;trommelwirbel&lt;/strong&gt; eine HTML-LOGIN SEITE!&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='html'&gt;&lt;span class='cp'&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class='c'&gt;&amp;lt;!--[if lt IE 7]&amp;gt;&amp;lt;html class=&amp;quot;ng-csp ie ie6 lte9 lte8 lte7&amp;quot;&amp;gt;&amp;lt;![endif]--&amp;gt;&lt;/span&gt;
&lt;span class='c'&gt;&amp;lt;!--[if IE 7]&amp;gt;&amp;lt;html class=&amp;quot;ng-csp ie ie7 lte9 lte8 lte7&amp;quot;&amp;gt;&amp;lt;![endif]--&amp;gt;&lt;/span&gt;
&lt;span class='c'&gt;&amp;lt;!--[if IE 8]&amp;gt;&amp;lt;html class=&amp;quot;ng-csp ie ie8 lte9 lte8&amp;quot;&amp;gt;&amp;lt;![endif]--&amp;gt;&lt;/span&gt;
&lt;span class='c'&gt;&amp;lt;!--[if IE 9]&amp;gt;&amp;lt;html class=&amp;quot;ng-csp ie ie9 lte9&amp;quot;&amp;gt;&amp;lt;![endif]--&amp;gt;&lt;/span&gt;
&lt;span class='c'&gt;&amp;lt;!--[if gt IE 9]&amp;gt;&amp;lt;html class=&amp;quot;ng-csp ie&amp;quot;&amp;gt;&amp;lt;![endif]--&amp;gt;&lt;/span&gt;
&lt;span class='c'&gt;&amp;lt;!--[if !IE]&amp;gt;&amp;lt;!--&amp;gt;&lt;/span&gt;&lt;span class='nt'&gt;&amp;lt;html&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;ng-csp&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;&lt;span class='c'&gt;&amp;lt;!--&amp;lt;![endif]--&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;head&lt;/span&gt; &lt;span class='na'&gt;data-requesttoken=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;84f010760acb3ec5bbe6&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
                &lt;span class='nt'&gt;&amp;lt;title&amp;gt;&lt;/span&gt;ownCloud&lt;span class='nt'&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
                &lt;span class='nt'&gt;&amp;lt;meta&lt;/span&gt; &lt;span class='na'&gt;http-equiv=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;Content-Type&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;content=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;text/html; charset=utf-8&amp;quot;&lt;/span&gt; &lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class='nt'&gt;&amp;lt;meta&lt;/span&gt; &lt;span class='na'&gt;name=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;apple-itunes-app&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;content=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;app-id=543672169&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
                &lt;span class='nt'&gt;&amp;lt;link&lt;/span&gt; &lt;span class='na'&gt;rel=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;shortcut icon&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;href=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;/core/img/favicon.png&amp;quot;&lt;/span&gt; &lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class='nt'&gt;&amp;lt;link&lt;/span&gt; &lt;span class='na'&gt;rel=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;apple-touch-icon-precomposed&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;href=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;/core/img/favicon-touch.png&amp;quot;&lt;/span&gt; &lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
                                        &lt;span class='nt'&gt;&amp;lt;link&lt;/span&gt; &lt;span class='na'&gt;rel=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;href=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;/remote.php/core.css?v=389bc7bb1e1c2a5e7e147703232a88f6&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;type=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;media=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;screen&amp;quot;&lt;/span&gt; &lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
                                                        &lt;span class='nt'&gt;&amp;lt;script &lt;/span&gt;&lt;span class='na'&gt;type=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;src=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;/index.php/core/js/config.js?v=389bc7bb1e1c2a5e7e147703232a88f6&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
                                        &lt;span class='nt'&gt;&amp;lt;script &lt;/span&gt;&lt;span class='na'&gt;type=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;src=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;/remote.php/core.js?v=389bc7bb1e1c2a5e7e147703232a88f6&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
                                        &lt;span class='nt'&gt;&amp;lt;script &lt;/span&gt;&lt;span class='na'&gt;type=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;src=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;/core/js/visitortimezone.js?v=389bc7bb1e1c2a5e7e147703232a88f6&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

                        &lt;span class='nt'&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

        &lt;span class='nt'&gt;&amp;lt;body&lt;/span&gt; &lt;span class='na'&gt;id=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;body-login&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
                &lt;span class='nt'&gt;&amp;lt;div&lt;/span&gt; &lt;span class='na'&gt;id=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;login&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
                        &lt;span class='nt'&gt;&amp;lt;header&amp;gt;&amp;lt;div&lt;/span&gt; &lt;span class='na'&gt;id=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;header&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
                                &lt;span class='nt'&gt;&amp;lt;img&lt;/span&gt; &lt;span class='na'&gt;src=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;/core/img/logo.svg&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;svg&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;alt=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;ownCloud&amp;quot;&lt;/span&gt; &lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class='nt'&gt;&amp;lt;/div&amp;gt;&amp;lt;/header&amp;gt;&lt;/span&gt;
                        &lt;span class='c'&gt;&amp;lt;!--[if IE 8]&amp;gt;&amp;lt;style&amp;gt;input[type=&amp;quot;checkbox&amp;quot;]{padding:0;}&amp;lt;/style&amp;gt;&amp;lt;![endif]--&amp;gt;&lt;/span&gt;
&lt;span class='nt'&gt;&amp;lt;form&lt;/span&gt; &lt;span class='na'&gt;method=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;post&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;fieldset&amp;gt;&lt;/span&gt;
                        &lt;span class='nt'&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
                                                                &lt;span class='nt'&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
                &lt;span class='nt'&gt;&amp;lt;p&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;infield grouptop&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
                        &lt;span class='nt'&gt;&amp;lt;input&lt;/span&gt; &lt;span class='na'&gt;type=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;name=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;user&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;id=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;user&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;placeholder=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;
                                   &lt;span class='na'&gt;value=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;autofocus&lt;/span&gt;                              &lt;span class='na'&gt;autocomplete=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;on&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;required&lt;/span&gt;&lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class='nt'&gt;&amp;lt;label&lt;/span&gt; &lt;span class='na'&gt;for=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;user&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;infield&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;Username&lt;span class='nt'&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
                        &lt;span class='nt'&gt;&amp;lt;img&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;svg&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;src=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;/core/img/actions/user.svg&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;alt=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class='nt'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

                &lt;span class='nt'&gt;&amp;lt;p&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;infield groupbottom&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
                        &lt;span class='nt'&gt;&amp;lt;input&lt;/span&gt; &lt;span class='na'&gt;type=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;password&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;name=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;password&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;id=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;password&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;value=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;data-typetoggle=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;#show&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;placeholder=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;
                                   &lt;span class='na'&gt;required&lt;/span&gt; &lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class='nt'&gt;&amp;lt;label&lt;/span&gt; &lt;span class='na'&gt;for=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;password&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;infield&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;Password&lt;span class='nt'&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
                        &lt;span class='nt'&gt;&amp;lt;img&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;svg&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;id=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;password-icon&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;src=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;/core/img/actions/password.svg&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;alt=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class='nt'&gt;&amp;lt;input&lt;/span&gt; &lt;span class='na'&gt;type=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;checkbox&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;id=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;show&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;name=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;show&amp;quot;&lt;/span&gt; &lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span class='nt'&gt;&amp;lt;label&lt;/span&gt; &lt;span class='na'&gt;for=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;show&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
                &lt;span class='nt'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
                &lt;span class='nt'&gt;&amp;lt;input&lt;/span&gt; &lt;span class='na'&gt;type=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;checkbox&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;name=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;remember_login&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;value=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;id=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;remember_login&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;/&amp;gt;&amp;lt;label&lt;/span&gt;
                        &lt;span class='na'&gt;for=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;remember_login&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;remember&lt;span class='nt'&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
                &lt;span class='nt'&gt;&amp;lt;input&lt;/span&gt; &lt;span class='na'&gt;type=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;hidden&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;name=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;timezone-offset&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;id=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;timezone-offset&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class='nt'&gt;&amp;lt;input&lt;/span&gt; &lt;span class='na'&gt;type=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;submit&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;id=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;submit&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;login primary&amp;quot;&lt;/span&gt; &lt;span class='na'&gt;value=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;Log in&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;/fieldset&amp;gt;&lt;/span&gt;
&lt;span class='nt'&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;

                &lt;span class='nt'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
                &lt;span class='nt'&gt;&amp;lt;footer&amp;gt;&amp;lt;p&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;info&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class='na'&gt;href=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;http://owncloud.org/&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;ownCloud&lt;span class='nt'&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; &lt;span class='ni'&gt;&amp;amp;ndash;&lt;/span&gt;
                        web services under your control&lt;span class='nt'&gt;&amp;lt;/p&amp;gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;
        &lt;span class='nt'&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class='nt'&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ich weiss nicht, was ich dazu noch gross sagen soll&amp;#8230;&lt;/p&gt;

&lt;p&gt;EOF&lt;/p&gt;</description>
                <link>http://blog.crash-override.net//blog/2013/05/17/ich-mag-nicht-mehr.html</link>
                <guid>http://blog.crash-override.net//blog/2013/05/17/ich-mag-nicht-mehr</guid>
                <pubDate>2013-05-17T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>blindRSS 1.0 is finished!</title>
                <description>&lt;p&gt;The first release of blindRSS (version 0.1) was created on Jan 18. 2008.&lt;br /&gt;Today, more than 5 years later, I am happy to announce blindRSS version 1.0!&lt;/p&gt;

&lt;p&gt;Featurewise the changes from 0.9 to 1.0 include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can mark entries as favorites&lt;/li&gt;

&lt;li&gt;You can add tags to entries&lt;/li&gt;

&lt;li&gt;Entries can once again be searched&lt;/li&gt;

&lt;li&gt;Global options are no longer a modal window, but a dropdown&lt;/li&gt;

&lt;li&gt;You can choose between text or icons in the top menu&lt;/li&gt;

&lt;li&gt;The interface for re-arranging feeds now uses jqTree instead of a self-rolled UI&lt;/li&gt;

&lt;li&gt;Many, many bugfixes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can get your copy of blindRSS from &lt;a href='https://github.com/blind-coder/blindRSS'&gt;github.com/blind-coder/blindRSS&lt;/a&gt;.&lt;br /&gt;Instead of screenshots, you can try the &lt;a href='http://www.crash-override.net/blindrss_demo/'&gt;interactive demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you want, you can stop reading now, but I&amp;#8217;ll take this chance to give you an overview over the last 5 years of development.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve started this project in 2008 to learn some AJAX. I was disappointed in all the RSS readers I found back then for a simple reason: Lack of synchronisation and the need to be online. I&amp;#8217;ll explain each of these now: - Lack of synchronisation If I want to read RSS feeds from home, work or from my mobile phone or tablet or wherever, I needed an RSS reader on each of these devices. Sadly, these didn&amp;#8217;t talk to each other so I would have the same entries in the feeds over and over again. Especially in some high-volume feeds this quickly becomes tedious. - Need to be online Neither my desktop PC, my laptop, my phone or my tablet are always turned on. But if they&amp;#8217;re off I might miss entries, especially in some stupid feeds that display only a handful of entries or when I&amp;#8217;m offline for a few days (vacation for example) and still don&amp;#8217;t want to miss out.&lt;br /&gt; But I had a server rented in a datacenter that is running 24/7. So the logical conclusion was to run the RSS reader there and to be able to access it from everywhere I decided on a web-application.&lt;/p&gt;

&lt;p&gt;In the beginning I took a small book (&amp;#8220;AJAX Ge-Packt&amp;#8221;) and started working on the &amp;#8220;Web 2.0&amp;#8221;-y part of the reader. I wanted it to be &amp;#8220;slick&amp;#8221; and responsive, not relead an entire website for every entry (not that I wouldn&amp;#8217;t do stuff like that &lt;em&gt;cough&lt;/em&gt;).&lt;br /&gt;Since AJAX means &amp;#8220;Asynchronous Javascript And XML&amp;#8221; I started working on the XML part. Little did I know about JSON and I didn&amp;#8217;t want to use ready-to-use toolkits for this, so I hand-crafted my xmlHttpRequest and returned pseudo-XML from the server. You can still see (and use!) that code from the blindRSS version 0.1 if you really, really want to.&lt;/p&gt;

&lt;p&gt;The story could end here if I had found another RSS reader that would have suited me. I really, &lt;strong&gt;really&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;really&lt;/em&gt;&lt;/strong&gt; dislike the idea of dumping any of my personal data into the hands of a third party. Unfortunately this is the boom of Software-as-a-Service and everyone and their dog are offering (and jumping to use) tools that run on the providers premises, preventing any kind of control or power over them by the end user.&lt;br /&gt;To me, that is an inacceptable situation. It&amp;#8217;s why I&amp;#8217;m running my own mailserver, my own cloud, my own everything as far as reasonably possible. It&amp;#8217;s also why I never even considered Google Reader (which is now rightfully dead anyway) or any other &amp;#8220;hosted&amp;#8221; solution for RSS reading.&lt;br /&gt;It&amp;#8217;s also the reason why I&amp;#8217;m probably never going to abandon this project. At least not while there are still RSS feeds to read.&lt;/p&gt;

&lt;p&gt;What started as a simple playground for me to learn javascript and AJAX has over the years turned into a tool that I use every day. I hope it might become the same for you!&lt;/p&gt;

&lt;p&gt;EOF&lt;/p&gt;</description>
                <link>http://blog.crash-override.net//blog/2013/04/12/blindrss-10-is-finished.html</link>
                <guid>http://blog.crash-override.net//blog/2013/04/12/blindrss-10-is-finished</guid>
                <pubDate>2013-04-12T21:00:00+02:00</pubDate>
        </item>

        <item>
                <title>Warum ich Facebook verlasse</title>
                <description>&lt;p&gt;Vor ein paar Jahren - ich glaube es war 2008 - habe ich mich tatsächlich zu einem Schritt entschieden, den ich bis dato entschieden ablehnte: Ich meldete mich bei Facebook an.&lt;br /&gt;Weder damals noch heute weiss ich, was mir Facebook eigentlich bringen soll.&lt;/p&gt;

&lt;p&gt;&amp;#8220;Freunde finden&amp;#8221; werden einige von euch jetzt sicherlich sagen.&lt;br /&gt;Und obwohl ich tatsächlich wieder einen - wenn auch leider nur sehr knappen - Kontakt zu zwei, drei Freunden aus meiner Vergangenheit über Facebook herstellen konnte, so ist es auch hier nicht möglich, diesen Kontakt über eine räumliche Distanz von 500 Kilometern zu halten.&lt;/p&gt;

&lt;p&gt;&amp;#8220;Sachen teilen&amp;#8221; werden einige von euch auch sagen.&lt;br /&gt;Wenn ich mir die Dinge ansehe, die über Facebook so &amp;#8220;geteilt&amp;#8221; werden, dann sehe ich entweder &amp;#8220;witzige&amp;#8221; Videos oder &amp;#8220;grosse Lebensweisheiten&amp;#8221; in grellbunten Bildern, mit einem Kommentar, der selten über &amp;#8220;Denk mal drüber nach&amp;#8221; oder &amp;#8220;Dem kann ich nur zustimmen&amp;#8221; hinausgeht.&lt;/p&gt;

&lt;p&gt;&amp;#8220;Spiele spielen&amp;#8221; mag mancher noch als Argument anbringen.&lt;br /&gt;Ja, ich gestehe: Auch ich habe FarmVille&amp;#8230; ich wollte fast sagen &amp;#8220;gespielt&amp;#8221;, aber ist FarmVille überhaupt ein Spiel?&lt;br /&gt;Ein Spiel ist für mich eine klar abgegrenzte Einheit. Man hat eine Spielsituation und ein Spielziel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blöcke abbauen wie in Arkanoid / Brickbreaker&lt;/li&gt;

&lt;li&gt;Gleiche Steine zusammenschieben wie in Samegame / Match-3 / 4 gewinnt&lt;/li&gt;

&lt;li&gt;Die Welt retten wie in fast jeden Rollenspieladventure&lt;/li&gt;

&lt;li&gt;Die gegnerische Basis demolieren wie z.B. bei League of Legends&lt;/li&gt;

&lt;li&gt;Aus einem Labyrinth entkommen wie bei Legend of Grimrock&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Daher kann ich mir FarmVille &amp;amp; Co. zwar als netten, wenn auch wenig anspruchsvollen Zeitvertreib durchaus eingehen lassen, aber ein Spiel ist es meiner Meinung nach nicht.&lt;br /&gt;Wenn man dazu noch das zum Teil sehr aufdringliche &amp;#8220;Freemium&amp;#8221; Konzept mit einrechnet, vergeht mir an solchen Spielen sehr schnell die Lust.&lt;/p&gt;

&lt;p&gt;Ich gestehe frei heraus, dass auch ich mich all dieser Dinge &amp;#8220;schuldig&amp;#8221; gemacht habe. Ich habe weder besonders tiefgreifende Texte auf Facebook veröffentlicht (höchstens Links zu meinem Blog oder anderen Webseiten), noch habe ich mehr gemacht, als ab und zu mal &amp;#8220;einzuchecken&amp;#8221; wo ich gerade bin, egal ob das nun irgendeinen Informationswert für meine Facebook-Freunde hat oder nicht.&lt;/p&gt;

&lt;p&gt;All diesen Werten steht bei Facebook ein grosser Preis, den man zahlen muss, gegenüber: die eigene Privatsphäre.&lt;/p&gt;

&lt;p&gt;Bevor ihr jetzt den Aufschrei probt und mir sagt: &amp;#8220;Dann poste halt nichts, von dem du nicht möchtest, dass es jemand erfährt&amp;#8221;, denkt kurz darüber nach, dass das nur die halbe Wahrheit ist.&lt;br /&gt;Ich selbst war lange ein Verfechter dieses Satzes: &amp;#8220;Poste nur, was jeder wissen darf.&amp;#8221; Und wer Fotos der letzten durchzechten Nacht postet, ist selber schuld. Habe ich gedacht.&lt;br /&gt;Doch Facebook sammelt viel mehr Informationen über uns, als wir meinen.&lt;/p&gt;

&lt;p&gt;Fangen wir mit einem einfachen Beispiel an: Du klickst den &amp;#8220;Gefällt mir&amp;#8221; Button bei einem Text, den ein Facebook-Freund gepostet hat.&lt;br /&gt;Ausser der Tatsache, dass mir das wohl gefällt, speichert Facebook noch den Ort (GPS vom Handy, Ort anhand deiner IP-Adresse) von wo und die Zeit wann dir das gefallen hat. Es steht zu vermuten, dass diese Daten nicht gelöscht werden, wenn du den &amp;#8220;Gefällt mir nicht mehr&amp;#8221; Button drückst.&lt;br /&gt;Auch wenn du einen Kommentar zu einem Text, Bild oder Video abgibst, werden diese Daten von Facebook gespeichert und ausgewertet.&lt;/p&gt;

&lt;p&gt;Kein Problem denkst du? Wie wärs damit:&lt;br /&gt;Wenn du ganz normal im Web surfst, speichert Facebook alle Seiten, die du besuchst.&lt;br /&gt;Wie das gehen soll? Ganz einfach: Wenn du dich bei Facebook einloggst, speichert Facebook ein sogenanntes Cookie auf deiner Festplatte ab. Das sind kleine Textdateien, die dich identifizieren. Besuchst du jetzt wieder die Webseite von Facebook, sendet dein Browser dieses Cookie zurück an Facebook und Facebook weiss, dass du du bist.&lt;br /&gt;Vereinfacht steht da drin: Ich bin Benjamin Schieder, User ID 1234567890&lt;br /&gt;Kein Problem sollte man meinen, solange dieses Cookie nur an die Facebook-Server zurückgeschickt wird.&lt;br /&gt;Sind dir aber mal all diese kleinen &amp;#8220;Gefällt mir&amp;#8221; oder &amp;#8220;Empfehlen&amp;#8221; Buttons auf unzähligen Webseiten aufgefallen? Zum Beispiel bei &lt;a href='http://www.spiegel.de/wirtschaft/unternehmen/oecd-deutschland-zieht-dem-rest-der-euro-zone-davon-a-891500.html'&gt;Nachrichtenseiten wie dem Spiegel Online&lt;/a&gt;?&lt;br /&gt;Diese Buttons werden von den Facebook Servern geladen. Und dein Browser schickt das oben erwähnte Cookie an Facebook.&lt;br /&gt;Facebook weiss jetzt also, dass du heute von deinem Handy / Laptop / PC die oben verlinkte Nachrichtenseite aufgerufen hast.&lt;/p&gt;

&lt;p&gt;Diesen immensen Datenschatz macht Facebook dann zu Geld. Facebook hat sogar eine eigene Suchmaschine für diesen Datenbestand ins Leben gerufen, Facebook Graph Search.&lt;br /&gt;Dies ist ein absoluter Albtraum für jeden, der noch einen Rest Privatsphäre im Internet behalten möchte. Hier ein paar Hintergrundlinks dazu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://slashdot.org/topic/cloud/facebooks-graph-search-kiss-your-privacy-goodbye/'&gt;Englischer Artikel bei Slashdot.org&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://searchengineland.com/facebook-graph-search-now-passing-keyword-data-to-webmasters-152874'&gt;Englischer Artikel über die Vorteile von Facebook Graph Search für Werbetreibende&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.netzwelt.de/news/94990-facebook-graph-search-schluepfrigen-infos-findet-suche.html'&gt;Kritischer Artikel bei Netzwelt.de: Wie man mit Facebook Graph Search schlüpfrige Informationen findet&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://t3n.de/news/facebook-graph-search-wissen-437328/'&gt;Artikel bei t3n.de&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Facebook Graph Search beherrscht also ähnlich wie Apples Siri das Verständnis von normaler Sprache. Mit Facebook Graph Search kann in Zukunft jeder nach folgenden Dingen suchen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frauen zwischen 25 und 40 die Single sind und in Hannover wohnen&lt;/li&gt;

&lt;li&gt;Bilder die in Berlin vor 1990 entstanden sind&lt;/li&gt;

&lt;li&gt;Studenten, die in 2 Jahren ihren Abschluss machen werden&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;&lt;em&gt;Freunde, die letzte Woche Pornoseiten besucht haben&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ich persönliche finde, dass dieser Preis für die Leistung, die Facebook mir bietet, zu hoch ist.&lt;br /&gt;Wer weiterhin mit mir in Kontakt bleiben oder in Zukunft mit mir in Kontakt treten möchte, kann das auch heute schon über eine Vielzahl an Möglichkeiten machen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Man kann mir eine E-Mail schreiben.&lt;/li&gt;

&lt;li&gt;Man kann mir einen Kommentar im Weblog hinterlassen.&lt;/li&gt;

&lt;li&gt;Mit ein bisschen Willen kann man sogar meine Adresse und meine Telefonnummer herausfinden.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All diese Kontaktmöglichkeiten stehen heute schon jedem offen, ohne dass ich meine Privatsphäre Facebook zum Frass vorwerfen müsste.&lt;br /&gt;Und wem diese - minimalste - Anstrengung zu viel ist, der sucht offensichtlich doch nicht sooo dringend meinen Kontakt.&lt;/p&gt;

&lt;p&gt;Die Facebook Buttons auf dieser Seite leiten übrigens &lt;strong&gt;nicht&lt;/strong&gt; automatisch eure Daten zu Facebook weiter. Erst wenn ihr sie durch einen Klick aktiviert, wird der eigentliche Button von Facebook &amp;amp; Co. geladen.&lt;/p&gt;

&lt;p&gt;EOF&lt;/p&gt;</description>
                <link>http://blog.crash-override.net//blog/2013/04/04/warum-ich-facebook-verlasse.html</link>
                <guid>http://blog.crash-override.net//blog/2013/04/04/warum-ich-facebook-verlasse</guid>
                <pubDate>2013-04-04T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>Another mindblowing bug in ownclouds CardDAV implementation</title>
                <description>&lt;p&gt;This is &lt;strong&gt;NOT&lt;/strong&gt; an April Fools joke, even though it very well might be&amp;#8230;&lt;/p&gt;

&lt;p&gt;Once again owncloud is messing stuff up.&lt;br /&gt;There&amp;#8217;s a problem with handling groups and ownCloud with ownCloud behaving incorrectly.&lt;/p&gt;

&lt;p&gt;If you create a group, you get back the following information:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='php'&gt;&lt;span class='x'&gt;array (&lt;/span&gt;
&lt;span class='x'&gt;&amp;#39;http/1.1 204 no content&amp;#39; =&amp;gt; &amp;#39;&amp;#39;,&lt;/span&gt;
&lt;span class='x'&gt;&amp;#39;date&amp;#39; =&amp;gt; &amp;#39;Mon, 01 Apr 2013 08:44:15 GMT&amp;#39;,&lt;/span&gt;
&lt;span class='x'&gt;&amp;#39;server&amp;#39; =&amp;gt; &amp;#39;Apache/2.2.16 (Debian)&amp;#39;,&lt;/span&gt;
&lt;span class='x'&gt;&amp;#39;x-powered-by&amp;#39; =&amp;gt; &amp;#39;PHP/5.3.3-7+squeeze15&amp;#39;,&lt;/span&gt;
&lt;span class='x'&gt;&amp;#39;expires&amp;#39; =&amp;gt; &amp;#39;Thu, 19 Nov 1981 08:52:00 GMT&amp;#39;,&lt;/span&gt;
&lt;span class='x'&gt;&amp;#39;cache-control&amp;#39; =&amp;gt; &amp;#39;no-store, no-cache, must-revalidate, post-check=0, pre-check=0&amp;#39;,&lt;/span&gt;
&lt;span class='x'&gt;&amp;#39;pragma&amp;#39; =&amp;gt; &amp;#39;no-cache&amp;#39;,&lt;/span&gt;
&lt;span class='x'&gt;&amp;#39;etag&amp;#39; =&amp;gt; &amp;#39;1&amp;#39;,&lt;/span&gt;
&lt;span class='x'&gt;&amp;#39;set-cookie&amp;#39; =&amp;gt; &amp;#39;PHPSESSID=00000; path=/; HttpOnly&amp;#39;,&lt;/span&gt;
&lt;span class='x'&gt;&amp;#39;content-length&amp;#39; =&amp;gt; &amp;#39;0&amp;#39;,&lt;/span&gt;
&lt;span class='x'&gt;&amp;#39;vary&amp;#39; =&amp;gt; &amp;#39;Accept-Encoding&amp;#39;,&lt;/span&gt;
&lt;span class='x'&gt;&amp;#39;content-type&amp;#39; =&amp;gt; &amp;#39;text/html&amp;#39;,&lt;/span&gt;
&lt;span class='x'&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ownCloud sends back the etag &amp;#8216;1&amp;#8217;. But when we send back the etag &amp;#8216;1&amp;#8217; it doesn&amp;#8217;t match anything, because internally ownCloud uses md5(vcard) as the etag.&lt;br /&gt;A workaround is to set the Timeout to &amp;#8216;0&amp;#8217; which forces RCMCardDAV to update the group vcard and thus getting the correct etag before adding new users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: This is logged as &lt;a href='https://github.com/owncloud/apps/issues/920'&gt;issue #920&lt;/a&gt; and fixed in git and probably next release.&lt;/p&gt;</description>
                <link>http://blog.crash-override.net//blog/2013/04/01/another-mindblowing-bug-in-ownclouds-carddav-implementation.html</link>
                <guid>http://blog.crash-override.net//blog/2013/04/01/another-mindblowing-bug-in-ownclouds-carddav-implementation</guid>
                <pubDate>2013-04-01T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>This site now runs on jekyllrb</title>
                <description>&lt;p&gt;After several years of running on snownews, I have now moved this site to jekyllrb. The reason is that I never quite got around to inspecting the snownews code for weaknesses and its bad code style (markup mixed with code) never alluded to me. Why did I use it in the first place, then? Because it was easy to use and easy to set up. Now, several years later, I find jekyll to offer the same. I find it even easier to use, as I can actually write my entries with my favorite editor and not lose an entire article because I wanted to delete the last word with ^W.&lt;/p&gt;

&lt;p&gt;I also wrote no less than exactly 400 RewriteRules so that all the old URLs continue to work. Still, please update your feedreader to point to &lt;a href='/rss.xml'&gt;/rss.xml&lt;/a&gt; in the future to save us both one HTTP 301.&lt;/p&gt;

&lt;p&gt;EOF&lt;/p&gt;</description>
                <link>http://blog.crash-override.net//blog/2013/03/28/this-site-now-runs-on-jekyllrb.html</link>
                <guid>http://blog.crash-override.net//blog/2013/03/28/this-site-now-runs-on-jekyllrb</guid>
                <pubDate>2013-03-28T00:00:00+01:00</pubDate>
        </item>

        <item>
                <title>[Tech] GitLab on SmartOS - Image version 0.0.5</title>
                <description>I just created a new SmartOS zone that includes gitlab.&lt;br /&gt;
&lt;br /&gt;
ChangeLog:&lt;br /&gt;
&lt;div class='code'&gt;- Uses Joyents base64-1.8.1 image instead of base64-1.8.4 which contains provisioning bugs&lt;br /&gt;
- Updated to GitLab-4.2&lt;br /&gt;
- Seamless deployment now works :-)&lt;br /&gt;
- Use the IP address provided during VM creation for GitLab&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
The GitLab default username is 'admin@local.host' and the default password is '5iveL!fe'.&lt;br /&gt;
&lt;br /&gt;
You can download the image from my dataset server: &lt;a href='http://pallas.crash-override.net/datasets/'&gt;http://pallas.crash-override.net/datasets/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2013/03/17/427.html</link>
                <guid>http://blog.crash-override.net//blog/2013/03/17/427</guid>
                <pubDate>2013-03-17T00:00:00+01:00</pubDate>
        </item>

        <item>
                <title>[TechSucks] WTF? char signedness not defined</title>
                <description>WTF?&lt;br /&gt;
I never understood why people use the type &lt;code&gt;char&lt;/code&gt; to pass integers in C. I always thought it was a bad idea without ever being able to say WHY it was. Now I do:&lt;br /&gt;
&lt;div class='code'&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
void foo(char x){&lt;br /&gt;
	printf (&amp;quot;%i\\n&amp;quot;, x);&lt;br /&gt;
}&lt;br /&gt;
int main(){&lt;br /&gt;
	foo(-1);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
This code is simple enough, right? It demonstrates the way that from my experience MANY people pass single-byte integers around. And now here's why this is FSCKING STUPID:&lt;br /&gt;
&lt;div class='code'&gt;[09:40 AM][blindcoder@x86-host:~]$ gcc -o test test.c&lt;br /&gt;
[09:40 AM][blindcoder@x86-host:~]$ ./test&lt;br /&gt;
-1&lt;/div&gt;&lt;br /&gt;
Works as expected? Sure, on x86. Now, let's try the same on ARM, like the Raspberry Pi:&lt;br /&gt;
&lt;div class='code'&gt;[09:44 AM][pi@raspberry:~]$ gcc -o test test.c&lt;br /&gt;
[09:44 AM][pi@raspberry:~]$ ./test&lt;br /&gt;
255&lt;/div&gt;&lt;br /&gt;
UNSIGNED! Simple, basic, first class idiotic &lt;a href='http://cwe.mitre.org/data/definitions/191.html'&gt;integer underflow&lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
Seriously, people: if you want to pass integers, USE integers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2013/03/17/426.html</link>
                <guid>http://blog.crash-override.net//blog/2013/03/17/426</guid>
                <pubDate>2013-03-17T00:00:00+01:00</pubDate>
        </item>

        <item>
                <title>[Tech] Hotfix for gitlab-smartos 0.0.3</title>
                <description>I've just realized some problems with the gitlab-smartos 0.0.3 image I &lt;a href='http://blog.crash-override.net/index.php/422'&gt;announced last week&lt;/a&gt; and can be downloaded at &lt;a href='http://blog.crash-override.net/index.php/423'&gt;http://blog.crash-override.net/index.php/423&lt;/a&gt;.&lt;br /&gt;
The http:// ressources for git don't work, as does editing via the webinterface.&lt;br /&gt;
&lt;br /&gt;
Here's the fixes:&lt;br /&gt;
&lt;br /&gt;
&lt;div class='code'&gt;&lt;br /&gt;
# rvm use 1.9.3&lt;br /&gt;
# sudo -u gitlab -H bundle exec rake gitlab:satellites:create RAILS_ENV=production&lt;br /&gt;
# cd /opt/local/bin&lt;br /&gt;
# ln -s python python2&lt;br /&gt;
# sudo -u gitlab -H git config --global user.name  &amp;quot;GitLab&amp;quot;&lt;br /&gt;
# sudo -u gitlab -H git config --global user.email &amp;quot;gitlab@gitlab&amp;quot;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
After these commands, it worked fine for me. I'll work them into the next version of the dataset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2013/02/27/425.html</link>
                <guid>http://blog.crash-override.net//blog/2013/02/27/425</guid>
                <pubDate>2013-02-27T00:00:00+01:00</pubDate>
        </item>

        <item>
                <title>[TechSucks] Qt4 renderText with OpenGL/ES</title>
                <description>Seems like the Qt people were too lazy to implement renderText with OpenGL/ES. All you get is an error message saying that this function is not implemented. Great work, people. Not.&lt;br /&gt;
&lt;br /&gt;
Luckily, someone named &lt;a href='http://www.baysmith.com/'&gt;Bradley A. Smith&lt;/a&gt; &lt;a href='http://qt-project.org/forums/viewthread/10196/#57955'&gt;wrote an overload for this function&lt;/a&gt; so that you can simply dump these two files into your project and compile it. THAT is great work! And should obviously be part of Qt itself, but... oh well.&lt;br /&gt;
&lt;br /&gt;
Get &lt;a href='http://gitorious.org/mifit/mifit/blobs/master/libs/opengl/Text.cpp'&gt;Text.cpp&lt;/a&gt; and &lt;a href='http://gitorious.org/mifit/mifit/blobs/master/libs/opengl/Text.h'&gt;Text.h&lt;/a&gt;, adapt the calls to renderText a bit, and be happy!&lt;br /&gt;
&lt;br /&gt;
&lt;div class='code'&gt;mi::opengl::Text *t;&lt;br /&gt;
#define renderText(x, y, unknown, s, f) { t = new mi::opengl::Text(f); t-&gt;renderText(x, y, s); delete t) }&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
I compiled pianobooster with it and it worked fine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2013/02/19/424.html</link>
                <guid>http://blog.crash-override.net//blog/2013/02/19/424</guid>
                <pubDate>2013-02-19T00:00:00+01:00</pubDate>
        </item>

        <item>
                <title>[Tech] SmartOS-gitlab download</title>
                <description>As promised, you can download the smartos zone with gitlab using the dataset repository at &lt;a href='http://pallas.crash-override.net/datasets/'&gt;http://pallas.crash-override.net/datasets/&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
There are some known issues:&lt;br /&gt;
- The URLs to clone the repositories points to 'localhost'&lt;br /&gt;
- Logfiles have not been correctly cleared before creating the zone&lt;br /&gt;
&lt;br /&gt;
If you find any problems, contact me!&lt;br /&gt;
Also, if it works, please contact me, too :-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2013/02/17/423.html</link>
                <guid>http://blog.crash-override.net//blog/2013/02/17/423</guid>
                <pubDate>2013-02-17T00:00:00+01:00</pubDate>
        </item>

        <item>
                <title>[Tech] SmartOS zone with gitlab</title>
                <description>I just created a SmartOS zone that includes gitlab.&lt;br /&gt;
It's running as - almost - plug and play:&lt;br /&gt;
- install the dataset&lt;br /&gt;
- create a vm&lt;br /&gt;
- login on http://&lt;ip.add.re.ss&gt;/&lt;br /&gt;
&lt;br /&gt;
Of course, there's lots you &lt;b&gt;can&lt;/b&gt; and probably &lt;b&gt;should&lt;/b&gt; configure:&lt;br /&gt;
- postfix&lt;br /&gt;
- mysql server (currently there's a mysql server contained)&lt;br /&gt;
- probably the features you want in gitlab&lt;br /&gt;
&lt;br /&gt;
I'll upload the dataset over the weekend, it's 633MB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2013/02/14/422.html</link>
                <guid>http://blog.crash-override.net//blog/2013/02/14/422</guid>
                <pubDate>2013-02-14T00:00:00+01:00</pubDate>
        </item>

        <item>
                <title>[Tech] #rvm on SmartOS</title>
                <description>I just wanted to use rvm in a SmartOS zone. It's really quite easy:&lt;br /&gt;
&lt;br /&gt;
&lt;div class='code'&gt;# pkgin update&lt;br /&gt;
# pkgin -y install bash curl git patch scmgit-1.7.10.5 coreutils-8.13nb4 gcc47-4.7.0nb2 gcc47-runtime-4.7.0nb2 gmake-3.82nb5&lt;br /&gt;
# echo insecure &gt;&gt; ~/.curlrc&lt;br /&gt;
# curl -L get.rvm.io | bash -s stable&lt;br /&gt;
# rvm install 1.9.3&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2013/02/13/421.html</link>
                <guid>http://blog.crash-override.net//blog/2013/02/13/421</guid>
                <pubDate>2013-02-13T00:00:00+01:00</pubDate>
        </item>

        <item>
                <title>[TechSucks] Android Facebook/Twitter clients</title>
                <description>Does anyone have a suggestion for a GOOD Facebook/Twitter/G+ client for Android? The following features are a MUST:&lt;br /&gt;
- At least Facebook AND Twitter integration, with G+ a great plus (no pun intended).&lt;br /&gt;
- Combined view for all messages, no matter which platform they originate from.&lt;br /&gt;
- Possibility to create custom views (for example for searches on Twitter hashtags).&lt;br /&gt;
- No automatic uploads in any way, shape or form in default settings.&lt;br /&gt;
&lt;br /&gt;
Reliability (ie: less than 1 freeze per day) optional, but nice to have.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I can hardly express my dislike for all the currently &amp;quot;trending&amp;quot; (and other) Facebook/Twitter/G+ clients for Android.&lt;br /&gt;
I'll try to put it into short words:&lt;br /&gt;
&lt;br /&gt;
Official Facebook app:&lt;br /&gt;
Cons:&lt;br /&gt;
It's slow, it's a battery drain and it doesn't integrate Twitter or G+, so I would need another app for those.&lt;br /&gt;
Pros:&lt;br /&gt;
When it finally updates and didn't suck my battery dry, it actually works.&lt;br /&gt;
&lt;br /&gt;
Official Twitter app:&lt;br /&gt;
I wholeheartedly admit that I never used it, but I bet it doesn't integrate Facebook or G+, so I would need another app for those.&lt;br /&gt;
&lt;br /&gt;
Official G+ app:&lt;br /&gt;
Cons:&lt;br /&gt;
Where do I start?&lt;br /&gt;
In the default settings it automatically starts uploading all my pictures from my device.&lt;br /&gt;
Let me repeat that because it is so important: In the &lt;b&gt;default settings&lt;/b&gt; it &lt;b&gt;automatically&lt;/b&gt; starts &lt;b&gt;uploading all my pictures from my device&lt;/b&gt;. Without asking if I even want that.&lt;br /&gt;
The widget and the started app use different storages for content. When my widget already displays new entries, the started app needs to re-download those same entries again, causing unnecessary traffic.&lt;br /&gt;
The widget only has a &amp;quot;back&amp;quot; button to scroll to older entries, but how I get back to newer entries, I don't know.&lt;br /&gt;
It doesn't integrate Facebook or Twitter, so I would need another app for those (notice a pattern?).&lt;br /&gt;
Pros:&lt;br /&gt;
It actually works quite fast once it updated and it seems like the entire functionality of the G+ website is there.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scope:&lt;br /&gt;
Cons:&lt;br /&gt;
No G+ integration (see above).&lt;br /&gt;
Can only hold one Twitter and one Facebook account.&lt;br /&gt;
Needs a seperate Scope account (what the f*ck for?)&lt;br /&gt;
Can not create user-defined Views (for example for Twitter hashtags).&lt;br /&gt;
Does not have an option to shorten URLs, you need to do that manually.&lt;br /&gt;
Constant nagging to rate/comment/recommend the app.&lt;br /&gt;
Regularly freezes up completely so I have to force close and restart the app, sometimes losing all information about read messages or mentions.&lt;br /&gt;
Sometimes it just hangs at &amp;quot;Loading...&amp;quot; but never actually finishes, force closing and restarting sometimes helps here.&lt;br /&gt;
No search button and no menu button in Android 4, so on devices without respective hardware buttons (Samsung Galaxy Tabs) you have no way of accessing those.&lt;br /&gt;
Pros:&lt;br /&gt;
Has a nice interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TweakDeck:&lt;br /&gt;
It's been a while since I last used it, so maybe this has become better in the meantime:&lt;br /&gt;
Cons:&lt;br /&gt;
No G+ integration (see above).&lt;br /&gt;
Unintuitive interface. There are &amp;quot;bubbles&amp;quot; informing me if there are new messages in a feed or not, but no indication of which feed that is.&lt;br /&gt;
Sometimes I get entries that just list the name of the person but no content. Sometimes that are just some FarmVille status messages that no one cares about anyway, sometimes it's pictures, sometimes text... There's really no telling.&lt;br /&gt;
Pros:&lt;br /&gt;
Can handle multiple Twitter accounts, can create custom views for searches (for example Twitter hashtags).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seesmic:&lt;br /&gt;
Has been replaced by HootSuite according to a dialogbox that appears on first start. Go figure.&lt;br /&gt;
Cons:&lt;br /&gt;
No G+ integration (see above).&lt;br /&gt;
Can not create user-defined Views (for example for Twitter hashtags).&lt;br /&gt;
Interface is a nightmare. There is no mixed view for Twitter/Facebook messages, so to read all messages you have to read first the one feed, then go back to the accounts, then select the other feed. I could just as well use two different, specialised apps for that and have a better experience.&lt;br /&gt;
Pros:&lt;br /&gt;
Haven't found any worth mentioning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2013/01/22/420.html</link>
                <guid>http://blog.crash-override.net//blog/2013/01/22/420</guid>
                <pubDate>2013-01-22T00:00:00+01:00</pubDate>
        </item>

        <item>
                <title>[Tech] blindRSS now in github</title>
                <description>I've started getting into git and for that purpose have put blindRSS into github.&lt;br /&gt;
You can find it &lt;a href='https://github.com/blind-coder/blindRSS'&gt;there&lt;/a&gt; and maybe leave me a note if you wish.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2013/01/16/419.html</link>
                <guid>http://blog.crash-override.net//blog/2013/01/16/419</guid>
                <pubDate>2013-01-16T00:00:00+01:00</pubDate>
        </item>

        <item>
                <title>[TechSucks] Customize Rails Scaffold Template</title>
                <description>This cost me a whole day today to figure out:&lt;br /&gt;
How to customize the default scaffold template in ruby on rails 3:&lt;br /&gt;
&lt;div class='code'&gt;&lt;br /&gt;
cd RAILS_PROJECT&lt;br /&gt;
mkdir -p lib/templates/erb/scaffold&lt;br /&gt;
cd lib/templates/erb/scaffold&lt;br /&gt;
cp ${GEM_PATH}/gems/railties-3.*/lib/rails/generators/erb/scaffold/templates/*&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Now you can edit the templates to fit your own CI and will not have to manually change them every time you need a new scaffold.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2012/10/15/418.html</link>
                <guid>http://blog.crash-override.net//blog/2012/10/15/418</guid>
                <pubDate>2012-10-15T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>[Personal] State of development</title>
                <description>Some people asked me: When will there be a new release of blindRSS, rcmcarddav or the Hackers Diet Offline?&lt;br /&gt;
The short answer is: When it's ready ;-)&lt;br /&gt;
&lt;br /&gt;
The long(er) answer is: I'm currently maintaining three different software projects for a living, two for my employer and one for a customer of my employer.&lt;br /&gt;
So in the evening when I get home I just have no motivation to continue programming.&lt;br /&gt;
&lt;br /&gt;
Also, I'm going on a two-week, no-internet honeymoon now! WOOHOOO!&lt;br /&gt;
&lt;br /&gt;
See you all when I'm back!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2012/09/20/417.html</link>
                <guid>http://blog.crash-override.net//blog/2012/09/20/417</guid>
                <pubDate>2012-09-20T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>[Tech] carddav plugin 0.7.0 for roundcube 0.6 and newer</title>
                <description>I just released version 0.7.0 of the carddav plugin for roundcube.&lt;br /&gt;
&lt;br /&gt;
ChangeLog:&lt;br /&gt;
&lt;div class='code'&gt;This version adds caching of addressbooks to speed up queries.&lt;br /&gt;
&lt;br /&gt;
This release is almost entirely Mike's work. All thanks for new features and bugfixes go to him!&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Get &lt;a href='http://www.crash-override.net/carddavdownload.html'&gt;the latest version&lt;/a&gt;, have &lt;a href='http://bugs.crash-override.net/index.php?project=2&amp;do=index'&gt;a look at the bugtracker&lt;/a&gt;, join &lt;a href='http://www.crash-override.net/carddavmailinglist.html'&gt;the mailinglist&lt;/a&gt; or &lt;a href='http://svn.crash-override.net/rcmcarddav/'&gt;check out the subversion repository&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2012/05/29/416.html</link>
                <guid>http://blog.crash-override.net//blog/2012/05/29/416</guid>
                <pubDate>2012-05-29T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>[Travel] Grossbritannien, die erste Woche</title>
                <description>Sonntag, 15. April&lt;br /&gt;
&lt;br /&gt;
England. Land des Generalverdachts und des Linksverkehrs. Hier werde ich jetzt also erstmal sein.&lt;br /&gt;
Der Flughafen hat mich jedenfalls schonmal nett begruesst: mein Koffer war gleich da und die Passkontrolle ging so schnell wie nirgendwo sonst bislang.&lt;br /&gt;
Naechste Station: die Autovermietung. Sixt hat hierfuer am Terminal 5 in Heathrow sogar einen kostenlosen Shuttleservice. Auf dem Weg dorthin sind die Strassen dann auch ueberall mit Warnungen beschriftet: Look right when crossing the street!&lt;br /&gt;
&lt;br /&gt;
Vor der ersten Fahrt zum Hotel hab ich mich dann erstmal gedrueckt und meinen Kollegen fahren lassen. War auch so schon aufregend genug.&lt;br /&gt;
&lt;br /&gt;
Gegen 23:00 Uhr waren wir dann auch im Hotel, welches direkt an einem Shopping Mall liegt. Endlich muss ich mal meine Hotelverpflegung nicht quer durch die Stadt tragen. Leider war jetzt natuerlich schon alles zu, weswegen ich mich auch direkt ins Bett gepackt habe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Montag, 16. April&lt;br /&gt;
&lt;br /&gt;
Nach einer langen Telefonkonferenz, die gefuehlt mitten in der Nacht stattfand, sind wir erstmal fruehstuecken gegangen. Das Fruehstueck ist gut, aber nicht umwerfend.&lt;br /&gt;
Den Weg zum Kunden bin ich jetzt gefahren. Verdammt bloedes Gefuehl, nicht nur auf der falschen Seite im Auto zu sitzen, sondern auch noch auf der falschen Seite zu FAHREN. Man muss staendig dagegen ankaempfen, mit dem Auto links die Fahrbahn zu verlassen.&lt;br /&gt;
&lt;br /&gt;
Nach Feierabend haben wir dann erstmal die Umgebung erkundet.&lt;br /&gt;
Neben dem Hotel liegt ein riesieger Shopping Mall, dort haben wir uns mit lokalen Mobilfunkkarten mit &amp;quot;All-you-can-eat data&amp;quot; eingedeckt.&lt;br /&gt;
Ein kurzer Rundgang ergab: wir koennten genauso gut zu Hause sein, sieht alles gleich aus. Aber kurz vor dem Ausgang ein Highlight: Ein Ben&amp;Jerrys Eiscreme Automat!&lt;br /&gt;
&lt;br /&gt;
Der Tag wurde dann noch mit einem kleinen Subway Sandwich und zwei Bier im Pub beendet.&lt;br /&gt;
Ich weiss zwar nicht warum, aber um kurz nach 21 Uhr war der Tag im Bett zu Ende.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dienstag, 17. April&lt;br /&gt;
&lt;br /&gt;
Heute sind wir nach Mansfield gefahren, haben dort aber nicht viel mehr gemacht als Arbeiten. 2 Stunden &amp;quot;Autobahn&amp;quot; bei 70 MPH (etwa 110 km/h) machen keinen Spass.&lt;br /&gt;
Abends haben wir uns dann im White House Pub das Spiel Bayern - Real Madrid angesehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mittwoch, 18. April&lt;br /&gt;
&lt;br /&gt;
Siehe Dienstag, nur dass wir heute in West Brom waren und Chelsea gegen Barcelona gespielt hat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Samstag, 20. April&lt;br /&gt;
&lt;br /&gt;
Heute haben wir einen Ausflug nach London unternommen. Mit dem Auto sind wir bis Watford gefahren und wollten von da aus den Zug nehmen. Dummerweise gabs grade da Bauarbeiten und so liefen wir etwa 1km bis zur Haltestelle &amp;quot;Bushey&amp;quot;.&lt;br /&gt;
Von dort fuhr ein Zug direkt nach Euston, was noch 2 Tube-Stationen von unserem ersten Ziel, Oxford Circus, entfernt war. Hier liefen wir dann in Richtung Piccadilly Circus. Die Strecke ist eine langgezogene Einkaufsmeile, alles ziemlich noble Laeden, die in meiner Groesse wohl eh nichts fuehren.&lt;br /&gt;
&lt;br /&gt;
Vom Piccadilly Circus nahmen wir dann wieder die Tube nach Knightsbridge, ins Harrods. Dagegen wirkt das KaDeWe einfach nur niedlich. Hier gibts einfach mal alles, vom Teeloeffel mit einem Bild der Queen bis zu einem einen Meter hohen Dinosaurierbastelteil, von der Nespresso Kaffeemaschine bis zur Designercouchgarnitur. Hier koennte ich mich tagelang aufhalten und haette nach etwa 30 Sekunden meine Kreditkarten gesprengt.&lt;br /&gt;
Nach einem sehr zurueckhaltenden Einkauf gings dann den selben Weg rueckwarts wieder zurueck ins Hotel.</description>
                <link>http://blog.crash-override.net//blog/2012/04/24/415.html</link>
                <guid>http://blog.crash-override.net//blog/2012/04/24/415</guid>
                <pubDate>2012-04-24T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>[Politik] "Mein Kampf" wird Schulbuch</title>
                <description>So zumindest der reisserische Titel im &lt;a href='http://www.spiegel.de/schulspiegel/wissen/0,1518,druck-829502,00.html#ref=rss'&gt;Spiegel Online&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Ich frag mich ja: Wieso erst jetzt?&lt;br /&gt;
&lt;br /&gt;
Mein Kampf soll komplett wissenschaftlich (sic!) kommentiert aufgelegt werden, mit einer einfacher verstaendlichen Version als Schulbuch.&lt;br /&gt;
&lt;br /&gt;
Dass dies zur Entmystifizierung dieses - quasi-verbotenen - Buches beitraegt, davon bin ich ueberzeugt. Und ich werde mir bestimmt eine Kopie davon holen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2012/04/24/414.html</link>
                <guid>http://blog.crash-override.net//blog/2012/04/24/414</guid>
                <pubDate>2012-04-24T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>[TechSucks] ownCloud 3 still missing too many features</title>
                <description>I've been using ownCloud 3 for a few weeks now and unfortunately it is still lacking many features that one would expect.&lt;br /&gt;
&lt;br /&gt;
By far the smallest gripe I have with it is the lack for HTTP Range requests.&lt;br /&gt;
Say you have a file in there that is several GB in size and want to download it. The download breaks near the end for one reason or another.&lt;br /&gt;
With plain HTTP or even with Apache's built-in WebDAV module you could simply download the remaining part that did not get downloaded. With ownCloud you have to start from the beginning.&lt;br /&gt;
&lt;br /&gt;
Full Disclosure for the seconde one: I'm authoring a carddav-plugin for roundcubemail!&lt;br /&gt;
The second, somewhat bigger problem is the CardDAV implementation.&lt;br /&gt;
It does not support &lt;a href='http://tools.ietf.org/html/rfc6578.html#section-3.2'&gt;DAV:sync-collection&lt;/a&gt; which would make it much easier to synchronise with practically anything else.&lt;br /&gt;
&lt;br /&gt;
The third is IMO a really big one:&lt;br /&gt;
ownCloud does not support &lt;code&gt;/.well-known/carddav&lt;/code&gt; and &lt;code&gt;/.well-known/caldav&lt;/code&gt; as per &lt;a href='http://tools.ietf.org/html/rfc5785#section-1.1'&gt;RFC 5785&lt;/a&gt; in connection with &lt;a href='http://tools.ietf.org/html/draft-daboo-srv-caldav-10#section-5'&gt;this draft&lt;/a&gt; (yes, draft-only, but it's not a big deal now, is it?).&lt;br /&gt;
&lt;br /&gt;
Lastly there's an interface missing feature that should really be in there:&lt;br /&gt;
I can share files with other users or the general public just fine. Why not addressbooks and calendars and calendar entries? Why can't I say &amp;quot;invite user X to this event&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These might seem as small problems to others, but it makes me think:&lt;br /&gt;
Shouldn't they rather focus on making a good UI to existing WebDAV (Apache), CardDAV and CalDAV (DAViCal) servers instead of rolling their own?&lt;br /&gt;
Probably not, but I hope that the next release will be the first I can show to some less technically inclined people.&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2012/03/28/413.html</link>
                <guid>http://blog.crash-override.net//blog/2012/03/28/413</guid>
                <pubDate>2012-03-28T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>[Travel] Lesotho - Eindruecke</title>
                <description>Das Erste, was einem an Lesotho auffaellt, ist der Energieerhaltungssatz. Klingt komisch? Ist aber so:&lt;br /&gt;
&lt;br /&gt;
Der Energieerhaltungssatz besagt, dass Energie nicht verloren geht, sondern nur umgewandelt wird.&lt;br /&gt;
In Europa sind -20 Grad. Wo ist die thermische Energie also hin? Sie ist nach Lesotho ausgewandert und schafft beinahe unangenehme 36 Grad Schattentemperatur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wie ueblich habe ich mir nach der Ankunft (und nachdem ich im Hotel nach &gt; 24 Stunden Reisezeit erstmal wieder Mensch geworden bin) erstmal eine lokale Mobilfunkkarte besorgt.&lt;br /&gt;
Da ist mir das zweite Mal etwas aufgefallen: Die Terroristen haben hier schon gewonnen! Man muss sich naemlich nicht ausweisen, um eine Karte zu kaufen. Man geht einfach in den naechsten Vodacom Laden, legt umgerechnet 50 Euro auf den Tisch und bekommt eine Prepaid Karte mit mehreren Stunden Sprechzeit und 2,5 GB Datenvolumen, gueltig fuer 6 Monate.&lt;br /&gt;
Warum ist es eigentlich den deutschen Mobilfunkern nicht moeglich, derart akzeptable Preise anzubieten?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Als letztes fiel mir dann noch die Landschaft auf.&lt;br /&gt;
Das als &amp;quot;Berge&amp;quot; zu bezeichnen wird den Tatsachen schon fast nicht mehr gerecht. Man braucht schon einen Gelaendewagen, um irgendwohin zu kommen.&lt;br /&gt;
Zu einem meiner Ziele gings nur noch ueber steinige Buckelpisten und Trampelpfaden, die von wildlebenden Eseln planiert wurden.&lt;br /&gt;
Dennoch vermietet Avis hier anscheinend lediglich Autos des Typs Nissan Micra. Man muss sich doch wundern...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2012/02/08/412.html</link>
                <guid>http://blog.crash-override.net//blog/2012/02/08/412</guid>
                <pubDate>2012-02-08T00:00:00+01:00</pubDate>
        </item>

        <item>
                <title>[Travel] Lesotho</title>
                <description>So, morgen solls wieder losgehen, das Ziel dann: &lt;a href='http://g.co/maps/4225s'&gt;Maseru, Lesotho&lt;/a&gt;&lt;br /&gt;
24 Stunden Reisezeit, dafuer nur eine Stunde Zeitunterschied.&lt;br /&gt;
Bin ja mal gespannt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2012/01/29/411.html</link>
                <guid>http://blog.crash-override.net//blog/2012/01/29/411</guid>
                <pubDate>2012-01-29T00:00:00+01:00</pubDate>
        </item>

        <item>
                <title>[Travel] Azerbaidjan</title>
                <description>Es ist schoen, wenn man in ein Land und eine Stadt reist, in der man schon einmal war.&lt;br /&gt;
Man sieht Baustellen, die weiter fortgeschritten sind als beim letzten Besuch.&lt;br /&gt;
Man kennt sich schon ein wenig mit den lokalen Taxigepflogenheiten aus.&lt;br /&gt;
Man weiss auch genau, wenn man jetzt um die Ecke biegt, dann &lt;s&gt;ist da ein&lt;/s&gt; war da jedenfalls mal ein Supermarkt.&lt;br /&gt;
&lt;br /&gt;
Hier in Baku bin ich jetzt das dritte Mal dieses Jahr. Ich kannte die Besonderheiten des Flughafens, womit ich diesmal zuegig durch die Zollkontrolle kam (endlich mal bei &amp;quot;nichts zu verzollen&amp;quot; durchgegangen).&lt;br /&gt;
Leider bin ich auch wieder im selben Hotel wie die letzten Male, was bedeutet dass ich die Strasse laut und deutlich hoere: Hupen, draengeln, quietschende Reifen, Lautsprecher vom Polizeiwagen, der direkt vor dem Hotel stationiert ist. Es ist fast so laut, als wuerde man direkt auf der Strasse schlafen.&lt;br /&gt;
&lt;br /&gt;
Was ich aber gestern entdeckt habe, ist ein Geschaeft namens &amp;quot;Brothaus - deutschequalitaet&amp;quot;. Musste ich natuerlich gleich mal rein.&lt;br /&gt;
Sobald ich die deutschen(!) Namen unter der Auslage gelesen habe, fiel es mir ploetzlich extrem schwer, Englisch zu sprechen und fing ich sofort das Stottern an. Ziemlich unangenehm, aber dafuer waren die Brezen (1,20 Euro das Stueck) trotzdem lecker!&lt;br /&gt;
Warum ich Englisch sprechen musste? Die &amp;quot;Baeckereifachverkaeuferinnen&amp;quot; sind Azerbaidjanerinnen, keine Deutschen.&lt;br /&gt;
Beim Verlassen des Geschaeftes sah ich die vermeintliche Eigentuemerin. Ich erkannte sie daran, dass sie gerade mit ein paar Leuten ueber Umdekorationen oder Aehnliches sprach.&lt;br /&gt;
Sie war mir sofort unsympathisch, da sie aussieht wie die Katzenberger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2011/09/25/410.html</link>
                <guid>http://blog.crash-override.net//blog/2011/09/25/410</guid>
                <pubDate>2011-09-25T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>[Tech] Base64 encode and decode in MySQL</title>
                <description>I just found this earlier when trying to do base64 encode and decode in MySQL:&lt;br /&gt;
http://wi-fizzle.com/downloads/base64.sql&lt;br /&gt;
&lt;div class='code'&gt;-- base64.sql - MySQL base64 encoding/decoding functions&lt;br /&gt;
-- Copyright (C) 2006 Ian Gulliver&lt;br /&gt;
-- &lt;br /&gt;
-- This program is free software; you can redistribute it and/or modify&lt;br /&gt;
-- it under the terms of version 2 of the GNU General Public License as&lt;br /&gt;
-- published by the Free Software Foundation.&lt;br /&gt;
-- &lt;br /&gt;
-- This program is distributed in the hope that it will be useful,&lt;br /&gt;
-- but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
-- GNU General Public License for more details.&lt;br /&gt;
-- &lt;br /&gt;
-- You should have received a copy of the GNU General Public License&lt;br /&gt;
-- along with this program; if not, write to the Free Software&lt;br /&gt;
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;
&lt;br /&gt;
delimiter |&lt;br /&gt;
&lt;br /&gt;
DROP TABLE IF EXISTS base64_data |&lt;br /&gt;
CREATE TABLE base64_data (c CHAR(1) BINARY, val TINYINT) |&lt;br /&gt;
INSERT INTO base64_data VALUES &lt;br /&gt;
	('A',0), ('B',1), ('C',2), ('D',3), ('E',4), ('F',5), ('G',6), ('H',7), ('I',8), ('J',9),&lt;br /&gt;
	('K',10), ('L',11), ('M',12), ('N',13), ('O',14), ('P',15), ('Q',16), ('R',17), ('S',18), ('T',19),&lt;br /&gt;
	('U',20), ('V',21), ('W',22), ('X',23), ('Y',24), ('Z',25), ('a',26), ('b',27), ('c',28), ('d',29),&lt;br /&gt;
	('e',30), ('f',31), ('g',32), ('h',33), ('i',34), ('j',35), ('k',36), ('l',37), ('m',38), ('n',39),&lt;br /&gt;
	('o',40), ('p',41), ('q',42), ('r',43), ('s',44), ('t',45), ('u',46), ('v',47), ('w',48), ('x',49),&lt;br /&gt;
	('y',50), ('z',51), ('0',52), ('1',53), ('2',54), ('3',55), ('4',56), ('5',57), ('6',58), ('7',59),&lt;br /&gt;
	('8',60), ('9',61), ('+',62), ('/',63), ('=',0) |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DROP FUNCTION IF EXISTS BASE64_DECODE |&lt;br /&gt;
CREATE FUNCTION BASE64_DECODE (input BLOB)&lt;br /&gt;
	RETURNS BLOB&lt;br /&gt;
	CONTAINS SQL&lt;br /&gt;
	DETERMINISTIC&lt;br /&gt;
	SQL SECURITY INVOKER&lt;br /&gt;
BEGIN&lt;br /&gt;
	DECLARE ret BLOB DEFAULT '';&lt;br /&gt;
	DECLARE done TINYINT DEFAULT 0;&lt;br /&gt;
&lt;br /&gt;
	IF input IS NULL THEN&lt;br /&gt;
		RETURN NULL;&lt;br /&gt;
	END IF;&lt;br /&gt;
&lt;br /&gt;
each_block:&lt;br /&gt;
	WHILE NOT done DO BEGIN&lt;br /&gt;
		DECLARE accum_value BIGINT UNSIGNED DEFAULT 0;&lt;br /&gt;
		DECLARE in_count TINYINT DEFAULT 0;&lt;br /&gt;
		DECLARE out_count TINYINT DEFAULT 3;&lt;br /&gt;
&lt;br /&gt;
each_input_char:&lt;br /&gt;
		WHILE in_count &lt; 4 DO BEGIN&lt;br /&gt;
			DECLARE first_char CHAR(1);&lt;br /&gt;
	&lt;br /&gt;
			IF LENGTH(input) = 0 THEN&lt;br /&gt;
				RETURN ret;&lt;br /&gt;
			END IF;&lt;br /&gt;
	&lt;br /&gt;
			SET first_char = SUBSTRING(input,1,1);&lt;br /&gt;
			SET input = SUBSTRING(input,2);&lt;br /&gt;
	&lt;br /&gt;
			BEGIN&lt;br /&gt;
				DECLARE tempval TINYINT UNSIGNED;&lt;br /&gt;
				DECLARE error TINYINT DEFAULT 0;&lt;br /&gt;
				DECLARE base64_getval CURSOR FOR SELECT val FROM base64_data WHERE c = first_char;&lt;br /&gt;
				DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET error = 1;&lt;br /&gt;
	&lt;br /&gt;
				OPEN base64_getval;&lt;br /&gt;
				FETCH base64_getval INTO tempval;&lt;br /&gt;
				CLOSE base64_getval;&lt;br /&gt;
&lt;br /&gt;
				IF error THEN&lt;br /&gt;
					ITERATE each_input_char;&lt;br /&gt;
				END IF;&lt;br /&gt;
&lt;br /&gt;
				SET accum_value = (accum_value &lt;&lt; 6) + tempval;&lt;br /&gt;
			END;&lt;br /&gt;
&lt;br /&gt;
			SET in_count = in_count + 1;&lt;br /&gt;
&lt;br /&gt;
			IF first_char = '=' THEN&lt;br /&gt;
				SET done = 1;&lt;br /&gt;
				SET out_count = out_count - 1;&lt;br /&gt;
			END IF;&lt;br /&gt;
		END; END WHILE;&lt;br /&gt;
&lt;br /&gt;
		-- We've now accumulated 24 bits; deaccumulate into bytes&lt;br /&gt;
&lt;br /&gt;
		-- We have to work from the left, so use the third byte position and shift left&lt;br /&gt;
		WHILE out_count &gt; 0 DO BEGIN&lt;br /&gt;
			SET ret = CONCAT(ret,CHAR((accum_value &amp; 0xff0000) &gt;&gt; 16));&lt;br /&gt;
			SET out_count = out_count - 1;&lt;br /&gt;
			SET accum_value = (accum_value &lt;&lt; 8) &amp; 0xffffff;&lt;br /&gt;
		END; END WHILE;&lt;br /&gt;
	&lt;br /&gt;
	END; END WHILE;&lt;br /&gt;
&lt;br /&gt;
	RETURN ret;&lt;br /&gt;
END |&lt;br /&gt;
&lt;br /&gt;
DROP FUNCTION IF EXISTS BASE64_ENCODE |&lt;br /&gt;
CREATE FUNCTION BASE64_ENCODE (input BLOB)&lt;br /&gt;
	RETURNS BLOB&lt;br /&gt;
	CONTAINS SQL&lt;br /&gt;
	DETERMINISTIC&lt;br /&gt;
	SQL SECURITY INVOKER&lt;br /&gt;
BEGIN&lt;br /&gt;
	DECLARE ret BLOB DEFAULT '';&lt;br /&gt;
	DECLARE done TINYINT DEFAULT 0;&lt;br /&gt;
&lt;br /&gt;
	IF input IS NULL THEN&lt;br /&gt;
		RETURN NULL;&lt;br /&gt;
	END IF;&lt;br /&gt;
&lt;br /&gt;
each_block:&lt;br /&gt;
	WHILE NOT done DO BEGIN&lt;br /&gt;
		DECLARE accum_value BIGINT UNSIGNED DEFAULT 0;&lt;br /&gt;
		DECLARE in_count TINYINT DEFAULT 0;&lt;br /&gt;
		DECLARE out_count TINYINT;&lt;br /&gt;
&lt;br /&gt;
each_input_char:&lt;br /&gt;
		WHILE in_count &lt; 3 DO BEGIN&lt;br /&gt;
			DECLARE first_char CHAR(1);&lt;br /&gt;
	&lt;br /&gt;
			IF LENGTH(input) = 0 THEN&lt;br /&gt;
				SET done = 1;&lt;br /&gt;
				SET accum_value = accum_value &lt;&lt; (8 * (3 - in_count));&lt;br /&gt;
				LEAVE each_input_char;&lt;br /&gt;
			END IF;&lt;br /&gt;
	&lt;br /&gt;
			SET first_char = SUBSTRING(input,1,1);&lt;br /&gt;
			SET input = SUBSTRING(input,2);&lt;br /&gt;
	&lt;br /&gt;
			SET accum_value = (accum_value &lt;&lt; 8) + ASCII(first_char);&lt;br /&gt;
&lt;br /&gt;
			SET in_count = in_count + 1;&lt;br /&gt;
		END; END WHILE;&lt;br /&gt;
&lt;br /&gt;
		-- We've now accumulated 24 bits; deaccumulate into base64 characters&lt;br /&gt;
&lt;br /&gt;
		-- We have to work from the left, so use the third byte position and shift left&lt;br /&gt;
		CASE&lt;br /&gt;
			WHEN in_count = 3 THEN SET out_count = 4;&lt;br /&gt;
			WHEN in_count = 2 THEN SET out_count = 3;&lt;br /&gt;
			WHEN in_count = 1 THEN SET out_count = 2;&lt;br /&gt;
			ELSE RETURN ret;&lt;br /&gt;
		END CASE;&lt;br /&gt;
&lt;br /&gt;
		WHILE out_count &gt; 0 DO BEGIN&lt;br /&gt;
			BEGIN&lt;br /&gt;
				DECLARE out_char CHAR(1);&lt;br /&gt;
				DECLARE base64_getval CURSOR FOR SELECT c FROM base64_data WHERE val = (accum_value &gt;&gt; 18);&lt;br /&gt;
&lt;br /&gt;
				OPEN base64_getval;&lt;br /&gt;
				FETCH base64_getval INTO out_char;&lt;br /&gt;
				CLOSE base64_getval;&lt;br /&gt;
&lt;br /&gt;
				SET ret = CONCAT(ret,out_char);&lt;br /&gt;
				SET out_count = out_count - 1;&lt;br /&gt;
				SET accum_value = accum_value &lt;&lt; 6 &amp; 0xffffff;&lt;br /&gt;
			END;&lt;br /&gt;
		END; END WHILE;&lt;br /&gt;
&lt;br /&gt;
		CASE&lt;br /&gt;
			WHEN in_count = 2 THEN SET ret = CONCAT(ret,'=');&lt;br /&gt;
			WHEN in_count = 1 THEN SET ret = CONCAT(ret,'==');&lt;br /&gt;
			ELSE BEGIN END;&lt;br /&gt;
		END CASE;&lt;br /&gt;
	&lt;br /&gt;
	END; END WHILE;&lt;br /&gt;
&lt;br /&gt;
	RETURN ret;&lt;br /&gt;
END |&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2011/08/27/409.html</link>
                <guid>http://blog.crash-override.net//blog/2011/08/27/409</guid>
                <pubDate>2011-08-27T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>[Tech] Getting Android running natively on the WeTab</title>
                <description>This is a short summary of my last Weekend hacking on getting Android-X86 to run as smoothly on the WeTab as possible.&lt;br /&gt;
&lt;br /&gt;
A first search on the web showed me that the Sparta build should run smoothly on the WeTab, so that was the first I tried.&lt;br /&gt;
This image seemed to work mostly. Touchscreen works, but every touch is registered twice, so it's basically unusable. ALso, the screenresolution is just half of what it could be.&lt;br /&gt;
&lt;br /&gt;
Next I tried the TegaV2 image which is supposed to work on most Asus hardware. I don't know if the WeTab is Asus hardware, but at least the Ubuntu which I have installed on it loads the asus-laptop.ko kernel module.&lt;br /&gt;
Unfortunately, the TegaV2 image had some pros and cons.&lt;br /&gt;
Pros: screen resolution much better.&lt;br /&gt;
Cons: Touchscreen doesn't work, softkey doesn't work.&lt;br /&gt;
The first was easy to fix: load the hid-multitouch.ko kernel module.&lt;br /&gt;
The second was almost as easy: load the asus-laptop.ko kernel module; unfortunately it didn't come with the image, so I had to compile it manually. Learning and doing it cost me about half a day, but by that time I had a basic understanding of compiling anything inside the android-x86 source tree.&lt;br /&gt;
For reference:&lt;br /&gt;
&lt;div class='code'&gt;&lt;br /&gt;
root@localhost:android-source/ # cat buildspec.mk&lt;br /&gt;
TARGET_PRODUCT:=tegav2&lt;br /&gt;
TARGET_STRIP:=1&lt;br /&gt;
root@localhost:android-source/ # . build/envsetup.sh&lt;br /&gt;
root@localhost:android-source/ # lunch tegav2-eng&lt;br /&gt;
root@localhost:android-source/ # make -C kernel O=$OUT/obj/kernel menuconfig&lt;br /&gt;
root@localhost:android-source/ # cp $OUT/obj/kernel/.config ./device/tegatech/tegav2/tegav2_defconfig&lt;br /&gt;
root@localhost:android-source/ # make kernel&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Now you have the compiled kernel and modules in out/target/product/tegav2/ and can copy them over to your system.&lt;br /&gt;
In the ramdisk I added three lines to load the modules hid-multitouch, sparse-keymad and asus-laptop and added the line 'key 226 BACK' to system/usr/keylayout/de.kl to bind the BACK function to the softkey.&lt;br /&gt;
&lt;br /&gt;
Everything sound easy so far? Just one-and-a-half days of hacking through the Android sources and compiling, copying, rebooting the WeTab and testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This concludes part 1 of my experience with Android. There's more that happened on the weekend but that's for the next time :-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF</description>
                <link>http://blog.crash-override.net//blog/2011/08/08/408.html</link>
                <guid>http://blog.crash-override.net//blog/2011/08/08/408</guid>
                <pubDate>2011-08-08T00:00:00+02:00</pubDate>
        </item>


</channel>
</rss>
