<?xml version="1.0" encoding="UTF-8"?>
			<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"	xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
	
			<channel>
			<title>patrickalbertini.de - webdevelopment</title>
			<link>http://www.patrickalbertini.de/</link>
			<description>patrickalbertini.de - Blog eines Programmierers und Netz-Beobachters</description>
			<language>de</language>
			<pubDate>Tue, 07 Feb 2012 08:54:04 +0100</pubDate>
			<generator>patrickalbertini.de</generator>
			<sy:updatePeriod>hourly</sy:updatePeriod>
			<sy:updateFrequency>1</sy:updateFrequency>
			<item>
				<title><![CDATA[Denic down?]]></title>
			    <link>http://www.patrickalbertini.de/blog/20100512_Denic_down.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[
For etwa 30 Minuten dachte ich, ich habe den Datenbankserver einer meiner Webanwedungen zerschossen, aber Fehlanzeige - das Problem hat die DENIC.
Me...]]></description>
			    <content><![CDATA[
<p>For etwa 30 Minuten dachte ich, ich habe den Datenbankserver einer meiner Webanwedungen zerschossen, aber Fehlanzeige - das Problem hat die DENIC.</p>
<p>Mein Provider meldet dazu:   </p>
<p>Probleme bei der  Namensauflösung von .de-Domains</p>
<p>Ticket eröffnet: 12.05.10, 13:44 Uhr</p>
<p>Derzeit lassen sich viele Domains die auf  .de enden nicht auflösen. Unsere eigenen Nameserver funktionieren  jedoch. Wir gehen derzeit von einem Problem auf Seiten des Betreibers  der Top-Level-Domain ".de" aus und halten Sie an dieser Stelle auf dem  Laufenden. </p>
<p>[Update 12.05.2010 14:13]</p>
<p>Der Verdacht hat sich erhärtet. Das Problem liegt also nicht in unserem  Einflussbereich, wir hoffen auf eine schnelle Problemlösung seitens der  DENIC und halten Sie an dieser Stelle auf dem Laufenden.</p>
<p>Aktuell liefern 4 der 6 DENIC-Nameserver-IPs auf Anfragen eine Antwort  die signalisiert, dass es die Domain nicht gibt. (NXDOMAIN). </p>
<p>[Update 12.05.2010 14:21]</p>
<p>Aktuell sind alle 6 DENIC-Nameserver-IPs nicht mehr erreichbar. Das  DENIC ist über das Problem informiert und arbeitet an der Lösung.  </p>
<p>[Update 12.05.2010 14:49]</p>
<p>Wir haben gegen 14:35 unsere Mailserver angehalten um die Anzahl der  Bounces (Nicht-Zustellbarkeits-Benachrichtigungen) zu minimieren.  Derzeit nehmen wir auf unseren Postausgangsservern keine E-Mails an. Wir  werden E-Mails erneut ausliefern sobald die .de-TLD wieder  ordnungsgemäß funktioniert.</p>
<p>Derzeit sind wieder 2 von 6 DENIC-Nameservern aktiv. Die restlichen 4  Nameserver liefern aber immernoch fälschlicherweise "Domain nicht  gefunden" aus.  </p>
<p>[Update 12.05.2010 14:55]</p>
<p>Inzwischen sind 4 von 6 DENIC-Nameservern wieder aktiv.</p>
<p> </p>
<p>In einigen Foren spricht man von einem Serverumzug von Amsterdam nach Frankfurt, der an allem Schuld sei.("Gestern wurde afaik das produktiv Datacenter vom Backup-Standort  Amsterdam zurück nach FFM verlegt." - http://forum.webhostlist.de/forum/ausfaelle/109165-big-trouble-bei-de-denic.html)</p>

 

Fakt ist, dass einige hundertausend .DE Domains seit 45 Minuten mal erreichbar sind und mal nicht. Kein Wunder, dass Twitter absolut heiß läuft zu diesem Thema.
Zuletzt gab es Meldungen, dass auch einige .EU Domains betroffen sind, diese wurden aber offiziell noch nirgendwo bestätigt.

Bisher melden erst wenige Onlinezeitung etwas zu dem Thema, das liegt aber vielleicht daran, dass die Redakteure ihr CMS nicht mehr erreichen.

Interessant ist, dass www.denic.de nicht betroffen scheint ;)]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[[de] Hands On: HTC HD2]]></title>
			    <link>http://www.patrickalbertini.de/blog/20100304_Hands_On:_HTC_HD2.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[
Seit etwa zwei Wochen hatte ich nun Gelegenheit das HTC HD2 zu benutzen, und dachte mir es wäre Zeit für ein Hands-On.
Außen
Von außen ist das Sm...]]></description>
			    <content><![CDATA[
<p>Seit etwa zwei Wochen hatte ich nun Gelegenheit das HTC HD2 zu benutzen, und dachte mir es wäre Zeit für ein Hands-On.</p>
<h2>Außen</h2>
<p>Von außen ist das Smartphone auf den ersten Blick ziemlich groß.  Auch liegt es recht schwer in der Hand. Beides sind für mich keineswegs Nachteile, denn: Die Größe des Handys entspricht bis auf wenige Millimeter der Größe des Displays (größer als beim iPhone) und das Gewicht vermittelt (wahrscheinlich nicht zu Unrecht) ein Gefühl der Wertigkeit. So ist etwa die Abdeckung des Akkus auf der Rückseite aus Aluminium gefertigt, und ein Riesendisplay wie dieses wiegt nun einmal auch.</p>
<p> </p>
<p>Bei näheren begreifen des Apparates bekommt man zunehmen den Eindruck, das gesamte Gerät wäre aus einem Block Metall herausgeschnitten: nichts bewegt sich, nichts klappert oder quietscht oder erweckt den Eindruck es könnte zerstörbar sein.</p>
<p> </p>
<p>Einzig die Kameralinse steht etwas aus dem Monolith heraus, das stört mich aber nicht und wirkt auch dem positiven unzerstörbar Eindruck nicht entgegen.</p>
<p> </p>
<p>Fazit außen : super.</p>
<h2>Innen</h2>
<p>Die wahren Werte bei einem Smartphone offenbaren sich meist erst, wenn das Display anfängt zu leuchten, so auch hier. Zuerst fällt einem natürlich genau das auf: Die Intensität des Displays; und auch hier wieder ein Sieg übers iPhone, das HD2 ist klarer und heller.</p>
<p> </p>
<p>Bei meinem letzten Handy war vor allem die Software ein großer Hazzle. Es hatte zwar eine tolle Tastatur zum ausklappen, aber ncihts funktionierte so, wie man meint das es sollte. Das ist beim HD2 ganz anders. Danke HTCs "Sense" merkt man kaum, das man mit Windows Mobile arbeitet. Was man nicht bemerkt sind die Nachteile die diesem nachgesagt werden, z.B. die Kontraintuivität und die Geschwindigkeit. Letzteres liegt sicher am Prozessor. HTC selbst schreibt darüber : "Als weltweit erstes Windows® phone mit kapazitivem Touchscreen und 1  GHz-Prozessor reagiert er außerdem so präzise und schnell auf leichte  Berührungen Ihrer Finger, wie Sie es noch nie erlebt haben." Das kann ich nur bestätigen.</p>
<h2>Software</h2>
<p>Nachdem man eine Weile gestaunt hat, wie schnell alles ist und wie grandios leicht die Dinge fallen, kommen die Vorzüge von Windows Mobile zum Tragen. Die größten sind dabei am besten versteckt; so finden sich wie zufällig unter "Tools" Dinge wie eine sofort einwandfrei funktionierende "Remotedesktop Mobile" Verbindung (!), wahrscheinlich findet man irgendwo sogar einen Wake-On-LAN Knopf, aber ich suche noch. Naja, klar eigentlich, dass die Profi-Tools etwas versteckt sind, während man den obligatorischen Facebook-, Outlook- (auch Exchange) und RSS-Reader Andwendungen den Vorzug in der Menuführung gibt.</p>
<p> </p>
<p>Neben solchen Knallern (die im RMD Falle nicht HTC sondern Microsoft anzurechnen sind) finden sich überall Kleinigkeiten die das Leben einfacher machen. Zum Beispiel "Footprints", eine Anwendung, die einem Foto direkt GEO Daten hinzufügt, die Möglichkeit Kontaktbilder vom Facebook Profil des Kontakts zu benutzen, die Möglichkeit alle Schnellstart-Menüs entsprechend der eigenen Bedürfnisse anzupassen ...</p>
<h2>Display & Umwelt</h2>
<p>Aber warum sich in Kleinigkeiten verlieren die selbstverständlich sein sollten. Noch gar nicht erwähnt habe ich die Touchscreen Empfindlichkeit und Usability, die durchweg gut abgestimmt ist. Zoomen mit zwei Fingern, wie man es vom iPhone kennt ist gar kein Problem.</p>
<p> </p>
<p>Neben der Größe und der super Reaktion bemerkt man einige Dinge erst lange nach der ersten Benutzung. Als ich vor kurzem im Auto eine Allee entlang fuhr, bemerkte ich zum Beispiel, dass das Display heller wurde, wenn die Sonne darauf scheint und dunkler, wenn alles schattig ist; natürlich mit fließendem Übergang, weshalb ich es auch erst nach drei Wochen bemerkte.</p>
<p>Überhaupt ist die Reaktion auf die Umwelt bei HD2 gut gelungen. Wenn ich das Handy ans Ohr führe geht der Bildschirm aus. Das spart Akku, den man ja auch nicht benutzen will um das eigene Ohr auszuleuchten. Ziehe ich den Stecker der Kopfhörer pausiert die Musik. Klingelt das Telefon und ich lege es mit dem Display nach unten auf den Tisch wird das Klingeln lautlos.</p>
<p> </p>
<p>Oft denkt man einfach: Da hat jemand mitgedacht und eine gute Lösung gefunden.</p>
<h2>Konnektivität</h2>
<p>Beim ersten einschalten sagt einem das Handy in etwa so etwas: "Hey, lieber Mensch. Ich mache jetzt die ganze Vodafone-Zugriffspunkt Konfiguration für Dich, weil ich weiß wie sehr es nervt Dich mit propietärem Kram auseinanderzusetzen." Das mochte ich.</p>
<p> </p>
<p>Auch nett ist, dass wirklich wichtige Dinge wie WLAN-Verwaltung und VPN einfach funktionieren, ohne das man sein Leben dait verschwendet viel darüber nachzudenken. Sag einfach "ja, will das Netz" und "hier nimm das Passwort" und er merkt es sich und nervt einen nie wieder damit. Hier ist sicher auch einiges über Feinabstimmung nachgedacht worden. Es erscheint nicht nach einem gescheiterten Verbindungsversuch eine schwer loszuwerdende Fehlermeldung, sondern vielleicht beim zweiten oder dritten.</p>
<p> </p>
<p>Auch die Software hält hier mit. Es hat nur zwei Minuten gedauert, meine drei wichtigsten IMAP Postfächer einzurichten, und das Handy versteht es auch damit umzugehen. Es speichert keinen IMAP Müll lokal auf dem Gerät ab, sondern synchronisiert intelligent mit dem Server. Und erst die ANimationsqualität wenn man E-Mail (siehe auch Fotos oder SMS) durch-blättert...</p>
<h2>Nachteile</h2>
<p>Bis jetzt habe ich drei Dinge festgestellt, die mich nicht begeistern:</p>
<p> </p>
<p>Zuerst wäre da der Akku zu nennen. Das dieser leidet, bei einem deratigen Display, einen derartigen Prozessor und derartigen Modems ist ja klar. Aber man hätte versuchen sollen einen mit höherer Kapazität zu verbauen. Ich lade etwa alle 20 Stunden das Handy.</p>
<p> </p>
<p>Zunächst dann das Ladekabel: zwar kann man das Handy üer USB laden, was auch einwandfrei funktioniert, aber der Stecker am Gerät selbst ist kein Standard Mini-USB Stecker. Ich muss also weitere HTC Kabel bestellen, um überall Ladegeräte verteilen zu können.</p>
<p> </p>
<p>Und zuletzt: Vor einer Weile wurde ich vom Handy beständig mit der Mitteillung genervt, dass es keine Datenverbindung gibt. Da dies mitten im Karnevals Trubel passierte, bin ich der Sache nicht auf den Grund gegangen. Es kann durchaus sein, dass eben keine 3G Verbindung bestand und ich irgendwas versucht was eine Verbindung erfordert. Seitdem ist das auch nie wieder vorgekommen. Vielleicht sind die Fehlermeldungen einfach nicht für feiernde Menschen konzipiert worden :)</p>
<h2>Fazit</h2>
<p>Bisher war für mich das iPhone immer das höchste der Gefühle, was Mobiltelephonie angeht. Nachdem ich nun öfter beide Handys gleichzeitig in der Hand gehalten habe, würde ich das HTC jederzeit vorziehen und jederzeit empfehlen.</p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[jQuery Plugin : "The BASH"]]></title>
			    <link>http://www.patrickalbertini.de/blog/20100219_jQuery_Plugin_:_The_BASH.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[
Hello dear readers. All of you love unix bash, do you? Good news: now you can integrate unix bash in your website. BASH looks like a bash, feels like...]]></description>
			    <content><![CDATA[
<p>Hello dear readers. All of you love unix bash, do you? Good news: now you can integrate unix bash in your website. BASH looks like a bash, feels like a bash, and will be hated by all designers (the ones not involved with boring stuff like program code (uahh).</p>
<p> </p>
<p>I also have added the BASH to my projects, nut much to read there, yet.</p>
<p> </p>
<p>I want talk too much now, but just let the allmighty BASH speak for itself:</p>
<p>(try ls "files/img" -p or man ls or fread "index.php")</p>
<p> </p>
<p></p>
<p> </p>
<p>A really beautiful toy for all you geeks out there.</p>
<p> </p>
<p>Want to have it? Take it home, install it on a webserver and feel like a hacker?</p>
<p>Since it's mainly JS you will find a hacky way to download it without any link.</p>
<p> </p>
<p>Please note : The plugin needs jquery.fieldselection.js</p>
<p> </p>
<p>Note further : all the really good stuff (namely sql, ls and fread by now) needs PHP or similar. Adjust the config setting bashPHP to your PHP (or similar) file, look at what comes in with $_GET from the BASH and react with some json_encode($myVar) stuff.</p>
<p> </p>
<p>PS: here's some PHP sample code:</p>
<p> </p>
<p><?php<br />global $_USER;<br />switch ($_GET['cmd']) {<br />    case 'ls': <br />    <br />        if ($_USER->may('superuser') || <br />                $_GET['dir'] == 'files/img/' || <br />                $_GET['dir'] == 'files/img') {<br />            if (isset($_GET['offset'])) {<br />                $res = array_slice(scandir($_GET['dir']),$_GET['offset'],10);<br />            } else {<br />                $res = scandir($_GET['dir']);<br />            }<br />        } else {<br />            $res = array("scanning directories is not allowed in demo.");<br />        }<br />        <br />    break;<br />    case 'fread':<br />        <br />        if ($_USER->may('superuser')) {<br />            $res = file($_GET['file']);<br />        } else {<br />            $res = array("reading files is not allowed in demo.");<br />        }<br />            <br />    break;<br />    case 'sql':<br />        <br />        if ($_USER->may('superuser')) {<br />            $db = MySQL::getInstance();<br />            switch ($_GET['mode']) {<br />                case "get":<br />                    $res = $db->getEntry($_GET['sql']);<br />                break;<br />                default:<br />                    $res = $db->getEntry($_GET['sql']);<br />                break;    <br />            }<br />            //if (!empty($db->error())) $res = $db->error();<br />            <br />            <br />        } else {<br />            $res = array("sql queries is not allowed in demo.");<br />        }<br />            <br />    break;<br />    default : <br />        $res = "strange commands, hum?";<br />    break;<br />}<br />echo json_encode($res);<br />?></p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[[de] Framework und Cloud Services]]></title>
			    <link>http://www.patrickalbertini.de/blog/20091202_[de]_Re-design:_Mal_wieder.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[Seit heute strahlt's hier grau, weiß und rot. Mir war das blaue Design nach kurzer Zeit schon zu schwer, ich glaube mit etwas leichterem halte ich es...]]></description>
			    <content><![CDATA[<p>Seit heute strahlt's hier grau, weiß und rot. Mir war das blaue Design nach kurzer Zeit schon zu schwer, ich glaube mit etwas leichterem halte ich es diesmal etwas länger aus.</p>
<p> </p>
<p>Alternate</p>
<p>Beizeiten steht noch an, das Framework auf den neuesten Stand zu bringen. Alternate nähert sich einer unsichtbaren 1.0 Marke, und diese Seite läuft auf einer inoffiziellen Version 0.2. Ich bin immer noch nicht sicher ob ich das Framework open-source machen soll. Sicher, ich gehe konform mit dem Gedanken, aber habe auch einige Bedenken. Vor allem Sicherheit ist ein Thema.</p>
<p>Zwar ist Security-trough-Obscurity nicht grade das schönste Modell einer sicheren Anwendung, andererseits ist jedes Quentchen Sicherheit eben auch mehr Sicherheit. Zwar ist z.B. der Firefox ein Beispiel dafür, dass open-source Apps sicherer sind, aber es gibt auch Gegenbeispiele. Nämlich immer dann, wenn nicht genug Entwickler sich für die Anwendung interessieren. Interesse zu erzeugen bedeutet aber Werbung zu machen, und dafür habe ich keine Zeit. Anregungen sind sehr willkommen.</p>
<p> </p>
<p>St. Clouds</p>
<p>Noch etwas anderes beschäftigt mich dieser Tage: Cloud Services und Hosting von Business Intelligence. Um ein Business drum herum entstehen in meiner Branche enorme Menge verschiedenartiger Daten. Emails, Bilder, Tabellen, Dokumente usw..</p>
<p>Was soll damit geschehen? Einerseits ist es sinnvoll die Daten per Web verfügbar zumachen, um flexibel zu bleiben in der Gestaltung der Arbeitsprozesse (Raum und Zeit). Andererseits will man sie gesichert haben, will Datenschutz in vielerleit Hinsicht gewährleisten. Was den Schutz der Daten angeht mache ich mir kaum Illusionen: Dateien bei Google zu hinterlegen ist wahrscheinlich sicherer als mit Halbwissen bewaffnet einen Server aufzusetzen, der 7 Millionen Löcher hat (wobei nmap bisher ganz begeistert von unserem scheint).</p>
<p>Auch sind die Einstiegspreise bei den Clouds sehr niedrig, aber eben laufende Kosten, die sich auch mal summieren können.</p>
<p>Zu guter letzt weiß ich nicht genau, ob es politisch klug ist die Clouds zu fördern. Ich meine,erst kam das Fernsehen, dann das Pay-TV, ein Probeabo der WZ verlängert sich automatisch zu einem Vollwertigen und sowieso folgt die Wirtschaft eher dem Grundsatz "es gibt nichts geschenkt".</p>
<p> </p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[Javascript: Blur for div]]></title>
			    <link>http://www.patrickalbertini.de/blog/20091118_[en]_Javascript:_Blur_for_div.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[Today I looked for a method to enable a tinyMCE instance by click and disable it when the page is clicked elsewhere. I encountered two problems: a div...]]></description>
			    <content><![CDATA[<p id="__mce">Today I looked for a method to enable a tinyMCE instance by click and disable it when the page is clicked elsewhere. I encountered two problems: a div has no blur event firing, and the tinyMCE control panel will be recognized as something not the editor, when clicked (I used an external control panel for some reason).</p>
<p><br id="__mce" /></p>
<p>Now, here's what seems to be a solution. Instead of blur I use the click event of "body". To prevent it to fire, when we click one of the (here) green control buttons, I prevent it from firing by only letting things happen, if my tinyMCE (here the orange div) is in active state. And it is set to active state only 400ms after it was clicked.</p>
<p>Now here's the result:</p>
<p> </p>
<p> </p>
// 
<br />foo
<br />bar
<br />bar
<br />bar
<br style="clear: both;" />
<p> </p>
<p>And here's the Javascript code of my example:</p>
<p> </p>
$(document).ready(function(){<br />    $('#test,.ctrl').click(function(){<br />        if ($('#test').hasClass('active')) {<br />            $('#test').removeClass('active');<br />            window.setTimeout(function(){ $('#test').addClass('active');},400);<br />        } else {<br />            $('#test').css('background','red');<br />            window.setTimeout(function(){ $('#test').addClass('active');},400);<br />        }<br />    });    <br />    $('body').click(function() {<br />        if ($('#test').hasClass('active')) {<br />            $('#test').css('background-color','orange');<br />            $('#test').removeClass('active');<br />        }<br />    });<br />});<br id="__mce" />]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[[de] Updates]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090720_[de]_Seitenupdate.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[
Heute habe ich ein größeres Update am Alternate-Framework gefahren. Um den neuen Editor den ich dabei verbaut habe zu testen, habe ich direkt mal e...]]></description>
			    <content><![CDATA[
<p>Heute habe ich ein größeres Update am Alternate-Framework gefahren. Um den neuen Editor den ich dabei verbaut habe zu testen, habe ich direkt mal einige Seiten und Bereiche dieser Seite fertig gemacht oder überarbeitet. Nun sind noch mehr Seiten frei zugänglich, als früher, so zum Beispiel "Die Philosophie eines Programmierers" und Teile der Projekte.</p>
<p> </p>
<p>Außerdem unterstütze ich seit gestern das Projekt IRREPRESSIBLE von Amnesty International mit einem Banner Link auf der Startseite sowie einigen Unterseiten. Wer sich mit Zensur im Internet und Cyber-Kriminalisierung beschäftigt wird sicher verstehen warum und sich vielleicht mit dieser Aufforderung animieren lassen mitzumachen. Ich würde mich auch über Tipps zu weiteren Projekte freuen.</p>
<p> </p>
<p>Im echten Leben gibt es derweil natürlich auch so einige Neuigkeiten seit meinem letzten Eintrag (der ja schon zwei Monate alt ist wie ich heute schockiert bemerkt habe). Ich erspare euch alle bis auf eine:</p>
<p> </p>
<p> </p>
<p>Neue Espressomaschine </p>
<p>Endlich habe ich mir einen Traum erfüllt und zwar in weiß: eine Gaggia Classic Coffee. In weiß wird diese schon lange nicht mehr hergestellt, und ich habe sie dementsprechend gebraucht gekauft.</p>
<p> </p>
<p>Nicht nur, dass die Maschine trotz ihres Alters (geschätzte 15 Jahre) einwandfrei funktioniert und gut in Schuß ist. Sie macht auch noch einen erstklassigen Espresso!</p>
<p> </p>
<p>Als nächstes muss ich mir dringend eine gute Mühle, einen Abschlagbehälter und einigen Kleinkram kaufen.</p>
<p> </p>
<p>Nur der Schlaf kommt seit diesem Einkauf etwas kurz (kein Wunder, bei dem Koffein-Spiegel).</p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[Thoughts about programming paradigms]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090512_Thoughts_about_programming_paradigms.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[Yesterday our CEO confronted me with his idea of solving search engine troubles. Hope he's not angry to be cited: "Maybe my idea of solving this comes...]]></description>
			    <content><![CDATA[<p id="__mce">Yesterday our CEO confronted me with his idea of solving search engine troubles. Hope he's not angry to be cited: "Maybe my idea of solving this comes from a more procedural point of view". This made me think a bit about object-orientation and procedural programming. My first idea was: There's no task in this world where procedural paradigm is <span style="font-style: italic;">better</span>. But when thinking of the project I did and the software I wrote I shifted to a more willing to compromise position.</p>
<p> </p>
<p>Like explained in my (not finished/not public) article "The philosophy of a programmer" my basic idea of technical programming is the manipulation of information, which is in most cases the duplication of information. The information I talk about is often referred to as data, while the underlying structure - presenting, manipulating, extracting - the data might be referred to as functional objects. These parse or process the data and also generate outputs (but do not necessarily, don't mix this up).</p>
<p> </p>
<p><span style="font-weight: bold; padding: 0px; margin: 0px;">Premise A</span> : <span style="font-style: italic;">Programming means manipulation of data</span>.</p>
<p> </p>
<p> </p>
<p>So we have a structure (the controller in MVC model), the data (model) and view - which will become important here. I think there cannot be argued about, that the controlling core of each result of programming is best to be written following the object orientated paradigm, because it will in the best case never get in touch with data, so wouldn't need to <span style="font-style: italic;">know</span> which of what kind of data is to be processed. Otherwise the core cannot be reusable in every given situation and thus would betray the virtue of reusability.</p>
<p> </p>
<p><span style="font-weight: bold;">Premise B</span> : <span style="font-style: italic;">Reusability is a virtue</span></p>
<p>and</p>
<p><span style="font-weight: bold;">Premise C </span>: <span style="font-style: italic;">can only be achieved, iff the controlling entitiy does not know what kind of data is manipulated.</span></p>
<p> </p>
<p>This leads to the simple conclusion, that only object-orientated paradigm can comply with.</p>
<p> </p>
<p>But there's more to it. As stated above we still have a view in the MVC model. And at least <span style="font-style: italic;">most</span> software (which is the typical product of programming work done) has at least <span style="font-style: italic;">some</span> parts, that require interaction with a user, and thus a User-Interface (UI). Reaching this point, the software will have to display information or react on arbitrary information. The data that comes into play here is well defined (might even have to be for security reasons when we look at web-apps) and thus named, type-defined and underlying <span style="font-style: italic;">specific</span> rules. Let's use an example from maths here to clarify things:</p>
<p> </p>
<p>Take a formula as simple as </p>
x + y = z
<p>The parts highlighted here are syntactic rules, that apply all over, with no difference if x is 4 or x is 1.5 or x is 1/2. The data won't influence the model, we're talking about the core.</p>
<p>But If we change x's contents from f.e. 4 to 4/2 or 4², the rules for handling our variables change. we will need to know certain rules to complete the calculation (f.e. that 4/2 is 2 and 4² is 16). Maybe my example is a bit lame, since these are also syntactic rules which might not be called "more specific" by a mathematician. But I think you get the point. A better example might be if you insert needed computations for the variables, like in a geographical search engine. One might accept, that the algorithm to calculate distances between latitude/longitude value pairs are not core functions anymore (at least not as core-close as a string function like PHPs substr).</p>
<p> </p>
<p>At this point we know that,</p>
<p><span style="font-weight: bold;">Premise D </span>: Adding an UI will force usage of non-core components</p>
<p>and </p>
<p><span style="font-weight: bold;">Premise E </span>: these components cannot be OOP if we assumed {A,B,C} are right.</p>
<p> </p>
<p>Now we can start to argue which paradigm is best to use from here on. We can use objects for the last mentions algorithm, too, maybe ones that extend the Maths object. But at some point (and that is the case in all projects I did) the UI requires you to write "dirty" functions, that are not encapsulated and reusable And even code that isn't structured in functions at all. At least one line of code will not be a object defining code, which is the code that initialized the object.</p>
<p>In reality there's much more than this line. Small snippets of code that observe different input-valves (in HTTP we have GET and POST as examples), an access layer for databases always contains database specific informations (at least a hostname or address) and so on.</p>
<p>The poor reality shows: we cannot even use a paradigm, looser than the OO-paradigm, like the procedural one for everything needed at this point. If we manage to halfway-encapsulate every code by defining it in functions, we still need function calls outside functions (at least one again), which react.</p>
<p>Returning to the HTTP example, we can imagine one function that is always called which checks the mentions valves for input and delegates further work to other functions and so on. But does it make sense to have a function like the following:</p>
 function checkInput() {<br />   if ($_GET["login"]) { <br />     react('login'); <br />   } elseif ($_GET["logout"]) { <br />     react('logout'); <br />   } else { <br />     //... <br />   } <br /> } 
<p>How flexible and thus maintainable would such a system be?</p>
<p> </p>
<p>Since this log entry is calls "Thoughts about..." I'll leave the answers to the question which paradigm is now best to the reader. But I'll be glad to read your thoughts in the comments.</p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[Connecting via TOR from localhost]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090506_Connecting_via_TOR_from_localhost.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[Today I thought about the possibility to connect to some URLs via a proxy server by using PHP. The solution is very easy:

Install Vidalia or the TO...]]></description>
			    <content><![CDATA[<p>Today I thought about the possibility to connect to some URLs via a proxy server by using PHP. The solution is very easy:</p>

Install Vidalia or the TOR software of your choice
Enable cURL extension in you XAMPP or local apache server of choice
Use some small TOR wrapping script via cURL

<p>... and there you are. Try to connect to one of the following pages to check wether you are really protected:</p>

http://www.wieistmeineip.de
http://www.meineip.de

<p>It works fine for me and only took about 20 minutes to figure the whole thing out. Of course this is no great invention, but maybe you'll find the information useful.</p>
<p> </p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[phpAES runtime measurements]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090430_phpAES_runtime_measurements.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[
Yesterday I did some tests on the phpAES cyphering library. Since I need it for a project I wanted to know more about its' performance and worte a sh...]]></description>
			    <content><![CDATA[
<p>Yesterday I did some tests on the phpAES cyphering library. Since I need it for a project I wanted to know more about its' performance and worte a short testing script.</p>
<p> </p>
<p>I won't publish the script, since its just only a quick and dirty solution, but I'll publish the results:</p>
<p> </p>
<p> </p>
<p></p>
<p>This first image shows the performance relation between the different encryption modes. Since your CPU will differ from mine please don't take the effective times for granted.</p>
<p> </p>
<p> </p>
<p> </p>
<p></p>
<p>What seems interesting is, that pure numbers seem to encrypt/decrypt slightly faster than pure letters. I've repeated this test several times, always with the same result.</p>
<p> </p>
<p> </p>
<p></p>
<p>But what is even more interesting (and maybe a hint to all those who want to use this library in their projects) is, that the CPU seems to "get warm" with working on these calculations: the average execution time seems to be related to the number of iterations.</p>
<p>I did this test very often and played with iterations, strings and others. The result sustained. When one looks at the single execution times for enc-/decryption one can see, that the first ~3 to 6 cryptions take slightly longer than all the following. Interesting.</p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[[de] Spam und Gegenmaßnahmen]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090419_Spam_prevention_in_my_blog.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[Es war ja auch nicht anders zu erwarten: Mein Blog wird vollgespamt. Die Spammer nutzebn dafür die Trackback-Funktion der Einträge, vor allem des Ei...]]></description>
			    <content><![CDATA[<p>Es war ja auch nicht anders zu erwarten: Mein Blog wird vollgespamt. Die Spammer nutzebn dafür die Trackback-Funktion der Einträge, vor allem des Eintrags zum Qbowl.</p>
<p> </p>
<p>Anfangs dachte ich: "lass sie mal machen", denn es blieb lange Zeit (naja, einige Tage lang) nur ein einziger Spam-Eintrag. Kurz danach stieg (erwartungsgemäß) das Spam-Aufkommen rasant an. Während der letzten Woche (ich war im Kurzurlaub in Berlin) gab es dann fast 600 Trackbacks zum Qbowl Artikel.</p>
<p> </p>
<p>Nachdem ich ein wenig nachgelesen habe (den Wikipedia Artikel zu Blog-Spamming) habe ich mich entschlossen den Spam mithilfe eines Wortfilters zu bekämpfen. Ich werde hier über den Erfolg oder Misserfolg dieser Maßnahme berichten.</p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[Die Philosophie eines Programmierers]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090325_Code_Philosophie.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[Was ist Programmierung?
Die Philosophische Tradition verlangt sich erst einmal Klarheit zu verschaffen über den Gegenstand einer Untersuchung. Der Ge...]]></description>
			    <content><![CDATA[<h2>Was ist Programmierung?</h2>
<p>Die Philosophische Tradition verlangt sich erst einmal Klarheit zu verschaffen über den Gegenstand einer Untersuchung. Der Gegenstand hier, den ich so flapsig "Programmierung" getauft habe ist recht komplex in seiner Ausführung, aber vielleicht viel weniger komplex in seiner Definition. Michel Houellebecq erwähnt in seinem Buch "Ausweitung der Kampfzone", dass die Informatik seiner Meinung nach zum Ziel hätte Information zu vervielfältigen (was er sodann als unmoralisch einstuft).</p>
<p> </p>
<p>Die meisten Aufgaben in der Programmierung bestehen darin, Daten in äquivalente Daten anderer Form umzuwandeln. Also macht ein Programm oft eine Kopie, oder besser eine veränderte Kopie der vorhandenen Daten, verdoppelt also streng genommen die Information in dieser Welt - hier hat Houellebecq also recht, ob auch seine Bewertung korrekt ist sei dahingestellt.</p>
<p> </p>
<p>Nicht immer passiert im eigentlichen Sinne eine Kopie, aber bei den meisten Prozessen schon. Zum Beispiel beim Verschicken von Nachrichten, wo eine lokale Kopie erhalten bleibt und der Empfänger eine weitere erhält. Bei fast jedem verfügbar Machen von Information wird die Information vervielfältigt, mindestens aber ihr Auftauchen.</p>
<p> </p>
<p>Die Programmierung tut also mindestens drei Dinge:</p>

Verändern von Information
Vervielfältigen von Information
Bereitstellen von Information

<p>Der Interessanteste dieser Punkte ist das Verändern von Information - nicht nur aber auch aus der Sicht die ich oben umrissen habe. Nur dieser Punkt stellt uns bei der Idee, dass Information vervielfältigt wird vor einige Probleme.</p>
<h2>Probleme?<br /></h2>
<p><br /></p>
<p>Ein Beispiel: Wir haben einen Satz Daten, z.B. den textlichen Inhalt von 500 verschiedenen Blogs aus den letzten zwei Jahren. Das ist eine ziemliche Menge Text. Nun schreiben wir ein Programm, dass versucht anhand bestimmter Formulierungen die Stimmungen der Autoren zu erraten und dieses statistisch ausgewertet und sodann grafisch auswertet. Wir erhalten anstelle der vielleicht 15.000 Textseiten nun eine einzige Grafik. Kann man hier von vervielfältigen sprechen? Natürlich ist der Informationsgehalt der Welt um die Einheit "1 Grafik" gestiegen, oder, wenn wir die Grafik verbreiten sogar um n Grafiken (hier gibt es einige Beispiele für solche Art Informationsaufbereitung). Ein weiteres einfaches Beispiel hierfür sind Tagclouds.</p>
<p><br /></p>
<p>Ein anderes Problem ist das Generieren von Information. Nehmen wir etwa einen Zufallsgenerator für Würfelergebnisse an. Zwar ist der Algorhytmus, der die Zahlen generiert immer der gleiche, aber die Zahlen selbst sind doch wohl als neue Information einzustufen, die vorher gar nicht vorhanden war? Oder doch eine veränderte Information?</p>
<p><br /></p>
<p>Noch ein Beispiel: Ich schreibe ein Programm, welches Audiodaten umkehrt, genau so, als würde man die Joe Cocker CD falsch herum abspielen. Was dabei herauskommt ist zwar nur eine veränderte Kopie von Mr. Cocker, aber wenn man diese schrecklichen Geräusche hört, denkt man dann wirklich noch an "You are so beautiful"?</p>
<p><br /></p>
<p>Man sieht, es gibt Veränderungen von Information, die vielleicht auf anderen Informationen basieren, aber doch "irgendwie" etwas Eigenständiges darstellen.<br /></p>
<h2>Warum Programmierung?</h2>
<p>Und darum Programmierung. Die reine Kopie ist verfehlt, unnütz und oft sogar lästig (man denke an Spam). Sinnvolle Programmierung hat ein gewisses - zugegeben schwer definierbares - Alleinstellungsmerkmal, und das nicht (zwangsläufig) im Quellcode des Programms, sondern dem Ergebnis des Programms.</p>
<p><br /></p>
<p>Hier sieht man, dass die Programmierung, oder besser, dass ein Programm eng verknüpft ist mit der Idee die dahinter steht.  Ich will sogar noch weiter gehen und sagen: beide Teile des ganzen Bildes beeinflussen sich gegenseitig. Denken wir nochmal an die Visualisierungen, die ich oben beschrieben habe: ohne ein fortschreiten der Programmierung an sich und der Computerleistung wäre niemand auf die Idee gekommen, so etwas zu machen. Und wenn hätte er oder sie es für nicht durchführbar gehalten. Andererseits wäre ohne die Idee nicht solch eine Programmierung entstanden.</p>
<p><br /></p>
<p>Hier nähern wir uns dem einzigen Zweck, den ich der Programmierung anerkenne (was meinen Sie, herr Houellebecq?) : <br /></p>
<p>Die Verlängerung der menschlichen Sinne.</p>
<p><br /></p>
<p>Zugegeben, das klingt etwas hoch gegriffen, ist aber gar nicht so gemeint. Mein Punkt war: ich halte Programmierung um ihrer Selbst willen, um der reinen Vervielfältigung der Information willen, für völlig verfehlt. Aber eine neue Information zu erschaffen, viele Informationen auf eine Art zu bündeln, die sie zu etwas Anderem werden lässt, was uns die Welt anders verstehen lässt, das halte ich für tugendhaft.<br /></p>
<p><br /></p>
<p>Ein Beispiel hierfür, dass nicht aus der Programmierung kommt, aber aus der Technik, die für mich etwas verwandtes ist, ist folgendes das Bild "Earth At Night", welches wir der Raumfahrt verdanken. Das Foto zeigt die Erde bei Nacht, aus dem Weltraum aufgenommen. Das Interessante daran sind die künstlichen Lichter der Städte; auf einen Blick erschließen sich viele Informationen, die alle nich neu sind, aber doch vieles deutlicher werden lassen: Küsten sind besiedelter als das Binnenland, Europa, Amerika und Japan sind im Vergleich sehr dicht besiedelt, der Mensch verändert das Antlitz der Erde stark, der das Nildelta ist sehr stark besiedelt, Indien auch...</p>
<p><br /></p>
<p>Alle diese Fakten kennen wir auch so, und doch: hier ist es auf den Punkt gebracht, klar und beweiskräftig, unstrittig und überdeutlich. Aus dem Betrachten des Bildes können wir etwas Neues mitnehmen, nämlich Überblick. Kombinieren wir verschiedene dieser Überblicke, sehen wir vielleicht die Welt mit anderen Augen. Z.B. könnte man sich nach dem künstlichen Licht den Internetverkehr auf einer Weltkarte anschauen und würde feststellen, das es Parallelen aber auch Unterschiede gibt.</p>
<p><br /></p>
<p><br /></p>
<p><br /></p>
<p>[to be continued...]<br /></p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[PHP Encryption and decryption]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090323_PHP_encryption_and_decryption.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[The idea
Today I worked on encryping and decrypting sensitive data with PHP. The fact that I've used PHP is minor important, but may help understandi...]]></description>
			    <content><![CDATA[<h2>The idea</h2>
<p>Today I worked on encryping and decrypting sensitive data with PHP. The fact that I've used PHP is minor important, but may help understanding code snippets.</p>
<p> </p>
<p>The idea was, to have some data always available for a customer to change, but anyways securely encrypted. Maybe you've read man pages or PHP doc on crypt(). It can encrypt data very secure, but there seems to be no way of decrypting the data ever again. So, if you want to check if a password is correct, you can just encrypt a given password and compare it with the encrypted one stored somewhere, to see if both match, and thus if the given pass is correct.</p>
<p> </p>
<p>But consider the following case: You give your credit card number to some online shop. They might have a good procedure for storing the data (maybe by making a local copy every day cut that one from the internet or something different). You as a customer usually cannot see your own data, since there is no decryptable online copy of it (bad thing if there was anyways).</p>
<h2>Encryption</h2>
<p>Every single encryption algorhytm is crackable. Period. But still there seems to be a good way to manage encrypted online data:</p>
<p> </p>
<p>Take data package XXXZZZ to be the sensitive data you want to store.</p>
<p>Customer X has a password which is 12aa23.</p>
<p> </p>
<p>We want make the data available only to the customer (not even to ourselves).</p>
<p> </p>
<p>Now we encrypt the data as following:</p>
<p> </p>

split the data with str_split() and <br /> 

gain data[0] = X, data[0] = X ... data[5] = Z ...


split the password with str_split() and <br /> 

gain pass[0] = 1, pass[1] = 2, pass[3] = a ...


apply ord() to each data token.              

and have data[0] = 88, data[5] = 90...


apply ord() to each password token.              

results in pass[0] = 49, pass[1] = 50, pass[3] = 97...


now concat the integer-string as follows, and let x be pass[0] and y be data[0] and z be the resulting string:              

for (i=0; i<x; i++) { z .= rand(0,9); } 
z .= y;



<p> </p>
<p>..and repeat this for all tokens of data (during that you can start pass-data array over again if it ends).</p>
<p>What you get from this is a integer number with a huge number of digits and no visible seperators in it. Here is an example:</p>
<p> </p>
 Data   : AABB3 <br /> Encoded: 60347648309693947577993400514585894716969001914806 [many more digits] <br /> Decoded: AABB3
<p> </p>
<p>I am not yet sure, if this is really secure, I just figured it out today. I hope for some responses and suggestions.</p>
<h2>Decryption</h2>
<p>Okay, now let's have a look at the decryption of this monster: What we need is the password and our encrypted string. And here's what we do:</p>

split the password with str_split()
foreach token get ord(token)
take a = substr(encrypted_data,ord(token))
the ord() of the real letter/digit we want is the next two or next three digits, if the first letter of a is 1, we take the next three digits (this is because letter d-z have ord() values of 100 - 122)
so for data[0] (X) our next two digits would be 88. apply chr() to it and gain X.

<p>When repeating this our result will be the orginal data string.</p>
<p>Please note that by now I've only worked with a-z, A-Z and 0-9 in the data string. Including special characters will need some modifications.</p>
<p> </p>
<h2>Possible Problems</h2>

When trying another method earlier I hacked the data string by using reverse engineering. This might also be possible here. <br /><br />I especially had problems with passwords like "11111" (users love those), which led to annoyingly visible seperators in the encrypted string. I took password tokens as salt and separator in that method and multiplied the salt by itself twice, to gain longer integers that were not mistakenly built by the real data.<br /><br />Here I've tried to avoid this by converting the salts to random-length numbers. But their length is not really random but for example 88 digits long if the password letter is "X". I am not sure if one can attack the method by that way, but I feel like: no, you cannot.
Guessing the length: Maybe one could estimate the length of the data encrypted here. An example: we have a three digit password XXX and a three digit data AAA. The encrypted string will thus have a length of: 88 + 2 + 88 + 2 + 88 + 2 digits (that's 270, folks). On th other hand you can also gain this length with the combination 22222(=250)/kkkkk(=20).

<h2>The code</h2>
<p>Last thing to post, the underlying PHP code. It's not documented at all, but quiet simple to understand I hope. It has three examples built in:</p>
<p> </p>
function encrypt($str,$salt) {<br /><br />    // compute salt<br />    $salt = str_split($salt);<br />    foreach ($salt as $t) {<br />        $salts[] = ord($t);<br />    }<br /><br />    // encrypt tokens<br />    $str = str_split($str);<br />    $i   = 0;<br />    $encrypted = "";<br />    foreach ($str as $t) {<br />        $o  = ord($t);<br />        $cs = $salts[$i];<br />        <br />        $e = "";<br />        for ($j=0;$j<$cs;$j++) {        <br />            $e .= rand(0,9);<br />        }<br />        <br />        $encrypted .= $e;<br />        $encrypted .= $o;<br />        <br />        $p[] = $e;<br />        $p[] = $o;<br />        <br />        $i++;<br />        if (!isset($salts[$i])) {<br />            $i = 0;<br />        }<br />    }<br />    return ($encrypted);<br />}<br /><br />function decrypt($str,$salt) {<br />    <br />    // compute salt<br />    $salt = str_split($salt);<br />    foreach ($salt as $t) {<br />        $salts[] = ord($t);<br />    }<br />        <br />    // decrypt tokens<br />    $i   = 0; $nn = 0;<br />    $break = false;<br />    while ($break != true) { <br />        <br />        if (empty($str) || $nn > 20) {<br />            $break = true;<br />            break;<br />        }<br />        <br />        $l   = $salts[$i];<br />        $str = substr($str,$l);<br /><br />        if (substr($str,0,1) == 1) {<br />            $p[] = substr($str,0,3);<br />            $str = substr($str,3);<br />        } else {<br />            $p[] = substr($str,0,2);<br />            $str = substr($str,2);<br />        }<br />        <br />        $i++;<br />        if (!isset($salts[$i])) {<br />            $i = 0;<br />        }<br />        $nn++;<br />    }<br /><br />    $decrypted = "";<br />    foreach ($p as $tok) {<br />        $decrypted .= chr($tok);<br />    }    <br /><br />    return $decrypted;<br />}<br /><br /><br />$sensitive[] = "AABB3";<br />$sensitive[] = "300953AA";<br />$sensitive[] = "548372222";<br />$password[]  = "123123123123";<br />$password[]  = "asdddd";<br />$password[]  = "43f7711";<br /><br /><br /><br />echo "Encrypt:<br/>";<br />$numTests = 3;<br />for ($i = 0; $i < $numTests; $i++) {<br />    $sens = $sensitive[$i];<br />    $pass = $password[$i];<br />    $enc  = encrypt($sens,$pass);<br />    $dec  = decrypt($enc,$pass);<br />      <br />    if ($sens != $dec) {<br />        echo "Enc and Decryption failed!";<br />        echo "SEN: $sens / DEC: $dec";<br />    } else {<br />        echo "DATA: $dec " .<br />            "Encoded: ".substr($enc,0,50)." [...] " .<br />            "Decoded: $dec";<br />    }<br /><br />    $hackme[] = $enc;<br />}]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[[de] Surferboy]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090320_Surferboy.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[Als ich heute meine E-mails nach FTP Zugangsdaten für ein altes Projekt durchstöbert habe, bin ich über einen alten Youtube Link gestolpert, den ic...]]></description>
			    <content><![CDATA[<p>Als ich heute meine E-mails nach FTP Zugangsdaten für ein altes Projekt durchstöbert habe, bin ich über einen alten Youtube Link gestolpert, den ich niemandem vorenthalten will. Sowas dreistes habe ich wahrscheinlich noch nie gesehen:</p>
<p> </p>







<p>Da kriegt man direkt Lust auf Surfen, oder aber eine Grupe für Aktionskunst zu gründen und ähnlichen Unfug zu machen.</p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[[de] Dies ist kein Frucht-Blog]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090316_Dies_ist_kein_Frucht-Blog.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[
Aber ein sehr fruchtiger Blogeintrag:
 
Mangos schälen
Ich habe nun versucht mit Hilfe eines Korkenziehers eine Mango geschickter zu schälen. Leid...]]></description>
			    <content><![CDATA[
<p>Aber ein sehr fruchtiger Blogeintrag:</p>
<p> </p>
<h2>Mangos schälen</h2>
<p>Ich habe nun versucht mit Hilfe eines Korkenziehers eine Mango geschickter zu schälen. Leider ist der Versuch fehlgeschlagen: Der Korkenzieher war einfach nicht fest oder stabil im Kern, sondern liess sich - einmal reingedreht - einfach herausziehen, bot also keine stabile Halterung zum Schälen.</p>
<p> </p>
<h2>Die Kiwano</h2>
<p>Auch mein zweites fruchtiges Ereignis an diesem Wochenende war eher enttäuschend. Ich war am Freitag Abend in dem Delikatessenmarkt im Karstadt (ich glaube er heißt "Perfetto") über eine Frucht gestolpert die mir vorher noch nicht unter den Löffel geraten war: eine Kiwano. Der Wikipedia Eintrag verspricht eine Geschmacksmischung aus Banane, Passionsfrucht und Zitrone; leider traf dies nicht auf meine Kiwano zu. Diese schmeckte in etwa nach gar nichts, nur mit viel Fantasie konnte man etwas Banane erahnen. Da hätte man sich statt der 1,99&euro; teuren Kiwano aber lieber eine 30 Cent Banane leisten können.</p>
<p> </p>
<p>Optisch allerdings ist die Frucht sehr schön, und ich glaube - nach der Wikipedia Lektüre - sagen zu können, dass mein Geschmackserlebnis nicht mit mangelnder Reife zu erklären ist. Links ein Bildchen meiner Kiwano.</p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[[de] Braun ist das neue Schwarz]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090313_Braun_ist_das_neue_Schwarz.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA["Braun ist das neue schwarz". Mit diesem Slogan stellt ASUS sein neues (braunes) Netbook EeePC S101 vor. Und wie recht sie haben! Nachdem ich mir scho...]]></description>
			    <content><![CDATA[<p>"Braun ist das neue schwarz". Mit diesem Slogan stellt ASUS sein neues (braunes) Netbook EeePC S101 vor. Und wie recht sie haben! Nachdem ich mir schon vor sicherlich zwei oder drei Jahren angewöhnt habe, keine schwarzen Schuhe mehr zu kaufen, kann ich nun endlich auch bei den Gadgets meinen Prinzipien treu sein.</p>
<p> </p>
<p>



 

Noch habe ich mir das Gerät nicht im Laden angesehen (ja, auch ein Geek wie ich weiß wie man einen Laden benutzt und tut dies manchmal), also steht die finale Entscheidung noch aus. </p>
<p> </p>
<p>Auch ist es mindestens eine Überlegung wert zu sehen was Apple im Herbst auf den Markt schmeisst. Aber will ich so lange warten?</p>
<p> </p>
<p>Nachdem mir mein DELL Inspiron 6400 bis Juni 2008 gute Dienste geleistet hatte (dabei aber nicht so gut aussah), habe ich mir wieder einen Desktop angeschafft (und nicht den schlechtesten). Dieses Tier von einem Computer leistet zwar noch besseren Dienst als das DELL Notebook (sollte es mit seinem Kampfgewicht von 19kg auch), ist aber leider nicht sehr portable, nicht sehr gadget, nicht sehr vorzeigbar.</p>
<p> </p>
<p>Da ich nun viel unterwegs bin, wurde bald klar, dass auch mein equipment es wieder werden muss. Zuerst spielte ich mit dem Gedanken mir Apples MacBook Air zu kaufen. Allerdings ist es mir eigentlich zu groß. Beinahe hätte ich für den halben Preis bei einem Tablet PC zugeschlagen, aber brauche ich sowas wirklich? Nein.</p>
<p> </p>
<p>Es sieht fast aus, als wäre ein Netbook wie für mich gemacht. Leider ist der Markt - nun ja - noch nicht gerade überschwemmt was das angeht. Aber nachdem ich erst das Samsung NC10 im Auge hatte, scheint meine Wahl nun fest zu stehen.</p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[Timelining - exploring your own life]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090307_Timelining_-_exploring_your_own_life.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[Today I've added my timelining library in the projects section. This blog entry is the place to ask questions and make suggestions.
 
To see what tim...]]></description>
			    <content><![CDATA[<p>Today I've added my timelining library in the projects section. This blog entry is the place to ask questions and make suggestions.</p>
<p> </p>
<p>To see what timelining is and what it can do, visit the link above.</p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[[de] Samsung Qbowl]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090302_Samsung_Qbowl.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA["Mir Platzt der Kragen" ist vielleicht zuviel gesagt: immerhin bin ich selbst Schuld an meiner Misere: Ich habe leider leider das Samsung Qbowl gekauf...]]></description>
			    <content><![CDATA[<p>"Mir Platzt der Kragen" ist vielleicht zuviel gesagt: immerhin bin ich selbst Schuld an meiner Misere: Ich habe leider leider das Samsung Qbowl gekauft.</p>
<p> </p>
<p>Das war nicht erst gestern. Als Vodafone mit dem Qbowl an den Markt ging und T-Mobile etwa zeitgleich das iPhone gebrandet verkaufte entschied ich mich - unwissend war ich - für das Qbowl. Ausschlaggebend war Vodafones echte Flatrate, die Tatsache das ich seit fast 10 Jahren Vodafone Kunde bin und das Versprechen, dass das Qbowl eher ein Business Handy ist als das iPhone. Hätte ich doch mehr gewusst.</p>
<p> </p>
<p>Heute war wieder einer dieser Tage: einer der Tage an denen ich versuchte Handy und Outlook auf den gleichen Stand zu bringen. Nicht so leicht, da verschiedene Faktoren dafür Sorgen, dass das Handy sich mit einem "PIM Sync - Netzfehler" verabschiedet. Ich habe schon ganze Tage mit dem Versuch dieses Problem endgültig zu lösen verschwendet. Seitens Samsung wie auch Vodafone ist die Unterstützung gleich NULL. Keiner weiß was, will was wissen, kennt sich aus.</p>
<p> </p>
<p>Die Nutzer in den Samsung Support Foren kennen sich mit den zahlreichen BUGS dieses sog. Handys besser aus als die Company, hier schlummert der Beweis.</p>
<p> </p>
<p>Wie - und das WIE schreibe ich ganz bewußt nochmals uppercase - WIE kann es sein, dass man - um seine Kontakte zu synchronisieren - bei einem 400 Euro teueren Business Handy (und der Preis steht TROTZ Vertrag!!!) erstmal alle Kalendereinträge löschen muss????? Man kann nicht genug Fragezeichen machen, auch mit Ausrufezeichen spare ich hier entgegen meinen Gewohnheiten nicht.</p>
<p> </p>
<p>Von den anderen Mängeln dieses Apparates will ich gar nicht weiter sprechen, bei Interesse hilft Google. Kurz angesprochen sei nur das mangelhaft angepasste Touchdisplay: macht keinen Spaß.</p>
<p> </p>
<p>MEIN SAMSUNG QBOWL IST TECHNIK-MÜLL.</p>
<p> </p>
<p>Wie kam es dazu? Die Geschichte ist nicht traurig, sondern nur ein Armutszeugnis einer freien Marktwirtschaft: Qbowl wie auch iPhone waren anscheinend Spielzeuge der Gewalten, in diesem Fall der Mobilfunkkonzerne. Vodafone trat gegen T-Mobile an. Letzere hatten für viel Geld das heiß ersehnte iPhone exklusiv für sich beansprucht. Vodafone musste nachziehen. Samsung war am weitesten gediehen in den Entwicklung eines Smartphone Kandidaten der es mit dem iPhone aufnehmen sollte. Man kaufte ein.</p>
<p> </p>
<p>Doch der Erfolg blieb aus. Das iPhone und damit T-Mobile machten das Rennen (obwohl die Vertragsstruktur von Vodafone besser war). Analysten hatten es sicher schon gewusst, bevor das erste iPhone über die Ladentheke ging. Das Rennen war nicht mehr zu gewinnen. Schadenbegrenzung war angesagt. Seitens Vodafone hieß das, nichts zu tun, seitens Samsung hieß es schnell konkurrenzfähige Smartphones zu entwickeln.</p>
<p>Was dabei auf der Strecke blieb war die Weiterentwicklung - oder sagen wir besser: das Bugfixing - des bereits vorhandenen Verlierers, des Qbowl. Alle Entwickler wurden schnellstmöglich abgezogen, und es gab kein einziges Firmware-Update, welches aber dringend nötig gewesen wäre.</p>
<p> </p>
<p>Der Support für den genervten Kunden war simpel, auf Verlangen ein Qbowl nach dem anderen durch ein neues Qbowl zu ersetzen, dass sich nicht im geringsten vom Anderen unterschied und sowieso sehr schnell zum Ladenhüter - oder besser: Lagermüll - geworden war.</p>
<p> </p>
<p>Wer hat Schuld? Sollte Samsung nicht - trotz des Drucks eines Schadensbegrenzenden Mobilfunkkonzerns - Sorge dafür tragen, dass Kunden nicht zu enttäuscht von Ihren Produkten sind?</p>
<p>Oder sollte der besagte Konzern nicht seinen Kunden eine Entschädigung bieten?</p>
<p> </p>
<p>Für mich jedenfalls steht fest: Mein nächster Mobilfunkanbieter heißt nicht Vodafone. Und das nach zehnjähriger Markentreue. Wie lange es wohl dauern wird, wo anders Goldkunde zu werden?</p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[Security - Captchas]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090220_Captchas.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[
Captchas
Eine der Herausforderungen der Webentwicklung in Sachen Sicherheit ist, zu verhindern, dass sog. Bots automatisch bestimmte Dinge tun, die n...]]></description>
			    <content><![CDATA[
<h2>Captchas</h2>
<p>Eine der Herausforderungen der Webentwicklung in Sachen Sicherheit ist, zu verhindern, dass sog. Bots automatisch bestimmte Dinge tun, die nur Menschen tun sollten. Ein Beispiel ist das anlegen von E-Mail Accounts (z.B. bei Google Mail), mit denen dann Spam versendet werden kann.</p>
<p>Die meisten Webservices verlassen sich derzeit noch auf sog. CAPTCHA Grafiken. Ein zumeist stark verzerrter Text, der maschinell schwer zu lesen ist, wird dabei automatisiert "gemalt" und muss entziffert werden, um einen bestimmten Vorgang abzuschliessen. Hier ein Beispiel:</p>
<p> </p>
<p></p>
<p> </p>
<p>Dabei gibt es ein Kopf-an-Kopf Rennen zwischen Entwicklern und Hackern in dem es darum geht, diese Captcha Grafiken automatisiert auszulesen, bzw. Captchas zu entwickeln, die sich nicht auslesen lassen.</p>
<p>Alte Captchas waren sehr einfach zu knacken, neuere Captchas sind da schon schwieriger:</p>
<p> </p>
<p>   </p>
<p class="clear"> </p>
<p>Aber auch die neueste Generation Captchas sind ständig unter Beschuss und machen bald schon der nächsten Generation Platz.</p>
<p>Wie man am allerletzten Captcha erkennt, versuchen die Entwickler mitlerweile alles auszureizen, was gerde eben noch lesbar ist, um der Maschine das lesen schwerer zu machen. Aber es ist ein Frage der Zeit, bis auch diese Captchas kapitulieren müssen.</p>
<p>Mittlerweile werden einige Captchas entwickelt, die versuchen, die Lösung auf andere kognitive Ebenen zu verschieben. Zum visuellen kommt nun auch noch eine semantische hinzu. Aber auch darauf gibt es schon Antworten.</p>
<p> </p>
<p>Die Forschung und Entwicklung in diesem Gebiet der Computersicherheit bleibt also ein spannendes Thema.</p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[[de] Neues Design]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090219_Neues_Design.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[Das hat ja lang gehalten: Das "alte neue" Design war glatte 9 Tage online. Aber hey: Es gibt immer was cooleres, geekigeres! Here you are.
 
Faszinie...]]></description>
			    <content><![CDATA[<p>Das hat ja lang gehalten: Das "alte neue" Design war glatte 9 Tage online. Aber hey: Es gibt immer was cooleres, geekigeres! Here you are.</p>
<p> </p>
<p>Faszinierendes (nutzloses) Hintergrundwissen:</p>

Dieses Layout wurde nie für den IE in egal welcher Version optimiert. Funktioniert aber trotzdem :)
Beim Machen habe ich die meiste Zeit Popmusik, später dann Salsa gehört. Kann jedem passieren.
Das umsteigen von "alt" auf neu hat abgesehen vom CSS programmieren etwa 2 Minuten gedauert. 
Das CSS Design hat etwa 45 Minuten gedauert.
Das Photoshop designen hat etwa 8 Stunden gedauert.
Von dem Schuh im Logo habe ich schon seit zwei Wochen geträumt.

<p>Soweit so gut. Was bleibt ist zu schauen, wie es ankommt. Nachrichten sind willkommen.</p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[[de] Mangos schälen]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090217_Mangos_schaelen.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[Bei meiner Suche im Web nach der richtigen (oder besser: "besten") Methode eine Mango zu schälen, bin ich über einen lustigen Beweis der exponentiel...]]></description>
			    <content><![CDATA[<p>Bei meiner Suche im Web nach der richtigen (oder besser: "besten") Methode eine Mango zu schälen, bin ich über einen lustigen Beweis der exponentiellen Differenzierung menschlichen Wissens gestoßen: den MangoMax.</p>
<p> </p>
<p>Zwar mache ich mit diesem OffPage Link zur Website Werbung dafür, allerdings ist das keineswegs mein Anliegen. Schon vor ein paar Tagen, als ich mal wieder über die Funktionalität meines Käseschneiders staunte, ist mir aufgefallen, dass die moderne westeuropäische Küche um einen ziemlich großen Faktor X mehr Teile hat, als die moderne Küche vor 50 Jahren.</p>
<p> </p>
<p>Damals kam man wohl gut aus mit geschätzten 50 Teilen Besteck, oder auch nur 20, wenn man nicht oft Gäste hat. Heute muss das komplette Gedeck für Sushi anders aussehen als für Italienisch, als für Fisch, als für Früchteteller.</p>
<p> </p>
<p>Natürlich gehen verrückte Erfindungen, wie der Mango Schäler, wahrscheinlich irgendwann wieder unter, oder werden zumindest nie der Standard, aber trotzdem bemerke ich in meiner Küche jedesmal, dass irgend etwas fehlt, wenn wir wieder mal zu acht bei mir Kochen, und jemand eine gute (besser: "ausgefallene") Idee für einen Hauptgang hatte.</p>
<p> </p>
<p>Wie viele teile braucht die moderne Küche? Schätzungen sind sehr willkommen.</p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[[de] Erster Post im neuen Blog]]></title>
			    <link>http://www.patrickalbertini.de/blog/20090210_erster_post.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[Man sollte alles mal ausprobieren!
Naja, fast alles. Einen neuen Blog allerdings ganz sicher. Vor kurzem habe ich meinen ersten Blog bei blogspot.com ...]]></description>
			    <content><![CDATA[<p>Man sollte alles mal ausprobieren!</p>
<p>Naja, fast alles. Einen neuen Blog allerdings ganz sicher. Vor kurzem habe ich meinen ersten Blog bei blogspot.com eingerichtet. Allerdings war ich aus mehreren Gründen nicht ganz zufrieden:</p>

Das Editieren des Layouts erfolgt über eine Blog-Eigene Syntax. Wozu soll das bitte gut sein? Soll der überforderte Softwareentwickler nun noch eine Sprache lernen, die er obendrein nur bei blogspot verwenden kann? Nun ja, eine simple Sprache wie HTML, aber trotzdem, Sinn kann ich nicht erkennen.
Es gibt kaum Addons, bzw. ist schwer Skripte - etwa zum Codehighlighting - einzubinden.
Der Host ist sehr langsam. Teilweise hatte mein Blog Antwortzeiten über 2 Sekunden (!).

<p>Naja, Zum Glück bin ich nicht darauf angewiesen, aber ich kann mir vorstellen, dass ein normaler User, der mit dieser Blog-Welt konfrontiert wird, echte Probleme kriegt, bzw. deprimiert ist, wenn er herausfindet, dass die Syntax die er extra gelernt hat nirgendwo anders einsetzbar ist.</p>
<p> </p>
<p>Schade. Mir gefällt der Gedanke "mal schnell eine Webseite hochzuziehen". Aber hey: Dafür gibt es ja mein Alternate Framework :)</p>
<p> </p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
			<item>
				<title><![CDATA[Percentage of individual letters in german language]]></title>
			    <link>http://www.patrickalbertini.de/blog/20081222_percentage-of-individual-letters-in.html</link>
			    <dc:creator>Patrick Albertini</dc:creator>
			    <description><![CDATA[Today I wrote a brief php script to measure the percentage of single letters in german language. I downloaded some short word lists from the web (curr...]]></description>
			    <content><![CDATA[<p>Today I wrote a brief php script to measure the percentage of single letters in german language. I downloaded some short word lists from the web (currently lack an URL), and used file_get_contents() to retreive wikipedia contents on that topics.<br /><br />Here's some examples from the 105 words/articles:<br />Beule, Liste, Zerfall, Wetter, Diplomatie, Religion, Sprache ....<br /><br />Overall I got a data of 1,699,802 letters. These are the results:</p>
<p> </p>
lowercase<br />
[e] => 15.97<br />[n] => 9.4<br />[i] => 8.12<br />[r] => 7.18<br />[t] => 6.16<br />[s] => 5.72<br />[a] => 5.18<br />[d] => 4.17<br />[h] => 4.01<br />[u] => 3.94<br />[l] => 3.79<br />[o] => 2.94<br />[g] => 2.78<br />[c] => 2.66<br />[m] => 2.15<br />[b] => 1.63<br />[f] => 1.45<br />[k] => 1.34<br />[z] => 1.1<br />[w] => 1.06<br />[p] => 0.98<br />[v] => 0.68<br />[y] => 0.21<br />[x] => 0.09<br />[j] => 0.09<br />[q] => 0.02<br />

uppercase
[S] => 0.77<br />[B] => 0.54<br />[A] => 0.51<br />[D] => 0.49<br />[M] => 0.4<br />[E] => 0.37<br />[F] => 0.35<br />[P] => 0.34<br />[G] => 0.34<br />[K] => 0.32<br />[W] => 0.31<br />[H] => 0.28<br />[L] => 0.27<br />[V] => 0.27<br />[I] => 0.26<br />[R] => 0.25<br />[T] => 0.23<br />[N] => 0.21<br />[Z] => 0.16<br />[J] => 0.15<br />[C] => 0.13<br />[U] => 0.12<br />[O] => 0.09<br />[Q] => 0.02<br />[X] => 0.01<br />[Y] => 0.01<br />

<p style="clear: both;"> </p>
<p> </p>]]></content>
			    <pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
			</item>
		</channel>
		</rss>
