http://www.politiker-stopp.de/gfx/politiker-stopp-print.png

Ich mag nicht mehr...


Ich mag nicht mehr… Ich mag einfach nicht mehr…
Ich mag echt nicht mehr mit solcher Schrottsoftware wie OwnCloud arbeiten; hat bitte jemand eine Alternative fuer mich?

Highlight des Tages: PROPFIND /.well-known/carddav

<?xml version="1.0" encoding="utf-8"?>
<D:propfind xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav"><D:prop>
<D:current-user-principal/>
<D:resourcetype />
<D:displayname />
<C:addressbook-home-set/>
</D:prop></D:propfind>

Unter OwnCloud 5.0.5 hat das die korrekte XML Antwort der CardDAV Ressourcen des sich authentifizierenden Users gegeben:

<?xml version="1.0" encoding="utf-8"?>
<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:card="urn:ietf:params:xml:ns:carddav">
	<d:response>
		<d:href>/remote.php/carddav/</d:href>
		<d:propstat>
			<d:prop>
				<d:current-user-principal>
					<d:href>/remote.php/carddav/principals/b***r@s***r.h***p.n***t/</d:href>
				</d:current-user-principal>
				<d:resourcetype>
					<d:collection/>
				</d:resourcetype>
			</d:prop>
			<d:status>HTTP/1.1 200 OK</d:status>
		</d:propstat>
		<d:propstat>
			<d:prop>
				<d:displayname/>
				<card:addressbook-home-set/>
			</d:prop>
			<d:status>HTTP/1.1 404 Not Found</d:status>
		</d:propstat>
	</d:response>
	<d:response>
		<d:href>/remote.php/carddav/principals/</d:href>
		<d:propstat>
			<d:prop>
				<d:current-user-principal>
					<d:href>/remote.php/carddav/principals/b***r@s***r.h***p.n***t/</d:href>
				</d:current-user-principal>
				<d:resourcetype>
					<d:collection/>
				</d:resourcetype>
			</d:prop>
			<d:status>HTTP/1.1 200 OK</d:status>
		</d:propstat>
		<d:propstat>
			<d:prop>
				<d:displayname/>
				<card:addressbook-home-set/>
			</d:prop>
			<d:status>HTTP/1.1 404 Not Found</d:status>
		</d:propstat>
	</d:response>
	<d:response>
		<d:href>/remote.php/carddav/addressbooks/</d:href>
		<d:propstat>
			<d:prop>
				<d:current-user-principal>
					<d:href>/remote.php/carddav/principals/b***r@s***r.h***p.n***t/</d:href>
				</d:current-user-principal>
				<d:resourcetype>
					<d:collection/>
				</d:resourcetype>
			</d:prop>
			<d:status>HTTP/1.1 200 OK</d:status>
		</d:propstat>
		<d:propstat>
			<d:prop>
				<d:displayname/>
				<card:addressbook-home-set/>
			</d:prop>
			<d:status>HTTP/1.1 404 Not Found</d:status>
		</d:propstat>
	</d:response>
</d:multistatus>

Und unter dem tollen neuen - ein halbes Dutzend XSS und CSRF Fehler behenden - 5.0.6 bekomme ich trommelwirbel eine HTML-LOGIN SEITE!

<!DOCTYPE html>
<!--[if lt IE 7]><html class="ng-csp ie ie6 lte9 lte8 lte7"><![endif]-->
<!--[if IE 7]><html class="ng-csp ie ie7 lte9 lte8 lte7"><![endif]-->
<!--[if IE 8]><html class="ng-csp ie ie8 lte9 lte8"><![endif]-->
<!--[if IE 9]><html class="ng-csp ie ie9 lte9"><![endif]-->
<!--[if gt IE 9]><html class="ng-csp ie"><![endif]-->
<!--[if !IE]><!--><html class="ng-csp"><!--<![endif]-->
        <head data-requesttoken="84f010760acb3ec5bbe6">
                <title>ownCloud</title>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <meta name="apple-itunes-app" content="app-id=543672169">
                <link rel="shortcut icon" href="/core/img/favicon.png" />
                <link rel="apple-touch-icon-precomposed" href="/core/img/favicon-touch.png" />
                                        <link rel="stylesheet" href="/remote.php/core.css?v=389bc7bb1e1c2a5e7e147703232a88f6" type="text/css" media="screen" />
                                                        <script type="text/javascript" src="/index.php/core/js/config.js?v=389bc7bb1e1c2a5e7e147703232a88f6"></script>
                                        <script type="text/javascript" src="/remote.php/core.js?v=389bc7bb1e1c2a5e7e147703232a88f6"></script>
                                        <script type="text/javascript" src="/core/js/visitortimezone.js?v=389bc7bb1e1c2a5e7e147703232a88f6"></script>

                        </head>

        <body id="body-login">
                <div id="login">
                        <header><div id="header">
                                <img src="/core/img/logo.svg" class="svg" alt="ownCloud" />
                        </div></header>
                        <!--[if IE 8]><style>input[type="checkbox"]{padding:0;}</style><![endif]-->
<form method="post">
        <fieldset>
                        <ul>
                                                                </ul>
                <p class="infield grouptop">
                        <input type="text" name="user" id="user" placeholder=""
                                   value="" autofocus                              autocomplete="on" required/>
                        <label for="user" class="infield">Username</label>
                        <img class="svg" src="/core/img/actions/user.svg" alt=""/>
                </p>

                <p class="infield groupbottom">
                        <input type="password" name="password" id="password" value="" data-typetoggle="#show" placeholder=""
                                   required />
                        <label for="password" class="infield">Password</label>
                        <img class="svg" id="password-icon" src="/core/img/actions/password.svg" alt=""/>
                        <input type="checkbox" id="show" name="show" />
                        <label for="show"></label>
                </p>
                <input type="checkbox" name="remember_login" value="1" id="remember_login"/><label
                        for="remember_login">remember</label>
                <input type="hidden" name="timezone-offset" id="timezone-offset"/>
                <input type="submit" id="submit" class="login primary" value="Log in"/>
        </fieldset>
</form>

                </div>
                <footer><p class="info"><a href="http://owncloud.org/">ownCloud</a> &ndash;
                        web services under your control</p></footer>
        </body>
</html>

Ich weiss nicht, was ich dazu noch gross sagen soll…

EOF


1 Comments | Published: 17 May 2013

blindRSS 1.0 is finished!


The first release of blindRSS (version 0.1) was created on Jan 18. 2008.
Today, more than 5 years later, I am happy to announce blindRSS version 1.0!

Featurewise the changes from 0.9 to 1.0 include:

  • You can mark entries as favorites
  • You can add tags to entries
  • Entries can once again be searched
  • Global options are no longer a modal window, but a dropdown
  • You can choose between text or icons in the top menu
  • The interface for re-arranging feeds now uses jqTree instead of a self-rolled UI
  • Many, many bugfixes

You can get your copy of blindRSS from github.com/blind-coder/blindRSS.
Instead of screenshots, you can try the interactive demo.

If you want, you can stop reading now, but I’ll take this chance to give you an overview over the last 5 years of development.

I’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’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’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’re off I might miss entries, especially in some stupid feeds that display only a handful of entries or when I’m offline for a few days (vacation for example) and still don’t want to miss out.
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.

In the beginning I took a small book (“AJAX Ge-Packt”) and started working on the “Web 2.0”-y part of the reader. I wanted it to be “slick” and responsive, not relead an entire website for every entry (not that I wouldn’t do stuff like that cough).
Since AJAX means “Asynchronous Javascript And XML” I started working on the XML part. Little did I know about JSON and I didn’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.

The story could end here if I had found another RSS reader that would have suited me. I really, really, really 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.
To me, that is an inacceptable situation. It’s why I’m running my own mailserver, my own cloud, my own everything as far as reasonably possible. It’s also why I never even considered Google Reader (which is now rightfully dead anyway) or any other “hosted” solution for RSS reading.
It’s also the reason why I’m probably never going to abandon this project. At least not while there are still RSS feeds to read.

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!

EOF


2 Comments | Published: 12 Apr 2013

Warum ich Facebook verlasse


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.
Weder damals noch heute weiss ich, was mir Facebook eigentlich bringen soll.

“Freunde finden” werden einige von euch jetzt sicherlich sagen.
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.

“Sachen teilen” werden einige von euch auch sagen.
Wenn ich mir die Dinge ansehe, die über Facebook so “geteilt” werden, dann sehe ich entweder “witzige” Videos oder “grosse Lebensweisheiten” in grellbunten Bildern, mit einem Kommentar, der selten über “Denk mal drüber nach” oder “Dem kann ich nur zustimmen” hinausgeht.

“Spiele spielen” mag mancher noch als Argument anbringen.
Ja, ich gestehe: Auch ich habe FarmVille… ich wollte fast sagen “gespielt”, aber ist FarmVille überhaupt ein Spiel?
Ein Spiel ist für mich eine klar abgegrenzte Einheit. Man hat eine Spielsituation und ein Spielziel:

  • Blöcke abbauen wie in Arkanoid / Brickbreaker
  • Gleiche Steine zusammenschieben wie in Samegame / Match-3 / 4 gewinnt
  • Die Welt retten wie in fast jeden Rollenspieladventure
  • Die gegnerische Basis demolieren wie z.B. bei League of Legends
  • Aus einem Labyrinth entkommen wie bei Legend of Grimrock

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

Ich gestehe frei heraus, dass auch ich mich all dieser Dinge “schuldig” 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 “einzuchecken” wo ich gerade bin, egal ob das nun irgendeinen Informationswert für meine Facebook-Freunde hat oder nicht.

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

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

Fangen wir mit einem einfachen Beispiel an: Du klickst den “Gefällt mir” Button bei einem Text, den ein Facebook-Freund gepostet hat.
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 “Gefällt mir nicht mehr” Button drückst.
Auch wenn du einen Kommentar zu einem Text, Bild oder Video abgibst, werden diese Daten von Facebook gespeichert und ausgewertet.

Kein Problem denkst du? Wie wärs damit:
Wenn du ganz normal im Web surfst, speichert Facebook alle Seiten, die du besuchst.
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.
Vereinfacht steht da drin: Ich bin Benjamin Schieder, User ID 1234567890
Kein Problem sollte man meinen, solange dieses Cookie nur an die Facebook-Server zurückgeschickt wird.
Sind dir aber mal all diese kleinen “Gefällt mir” oder “Empfehlen” Buttons auf unzähligen Webseiten aufgefallen? Zum Beispiel bei Nachrichtenseiten wie dem Spiegel Online?
Diese Buttons werden von den Facebook Servern geladen. Und dein Browser schickt das oben erwähnte Cookie an Facebook.
Facebook weiss jetzt also, dass du heute von deinem Handy / Laptop / PC die oben verlinkte Nachrichtenseite aufgerufen hast.

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

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:

  • Frauen zwischen 25 und 40 die Single sind und in Hannover wohnen
  • Bilder die in Berlin vor 1990 entstanden sind
  • Studenten, die in 2 Jahren ihren Abschluss machen werden
  • Freunde, die letzte Woche Pornoseiten besucht haben

Ich persönliche finde, dass dieser Preis für die Leistung, die Facebook mir bietet, zu hoch ist.
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:

  • Man kann mir eine E-Mail schreiben.
  • Man kann mir einen Kommentar im Weblog hinterlassen.
  • Mit ein bisschen Willen kann man sogar meine Adresse und meine Telefonnummer herausfinden.

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

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

EOF


3 Comments | Published: 04 Apr 2013

Another mindblowing bug in ownclouds CardDAV implementation


This is NOT an April Fools joke, even though it very well might be…

Once again owncloud is messing stuff up.
There’s a problem with handling groups and ownCloud with ownCloud behaving incorrectly.

If you create a group, you get back the following information:

array (
'http/1.1 204 no content' => '',
'date' => 'Mon, 01 Apr 2013 08:44:15 GMT',
'server' => 'Apache/2.2.16 (Debian)',
'x-powered-by' => 'PHP/5.3.3-7+squeeze15',
'expires' => 'Thu, 19 Nov 1981 08:52:00 GMT',
'cache-control' => 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0',
'pragma' => 'no-cache',
'etag' => '1',
'set-cookie' => 'PHPSESSID=00000; path=/; HttpOnly',
'content-length' => '0',
'vary' => 'Accept-Encoding',
'content-type' => 'text/html',
)

ownCloud sends back the etag ‘1’. But when we send back the etag ‘1’ it doesn’t match anything, because internally ownCloud uses md5(vcard) as the etag.
A workaround is to set the Timeout to ‘0’ which forces RCMCardDAV to update the group vcard and thus getting the correct etag before adding new users.

UPDATE: This is logged as issue #920 and fixed in git and probably next release.


2 Comments | Published: 01 Apr 2013

This site now runs on jekyllrb


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.

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 /rss.xml in the future to save us both one HTTP 301.

EOF


0 Comments | Published: 28 Mar 2013