<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>David Müller: Webarchitektur</title>
	<atom:link href="https://d-mueller.de/blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://d-mueller.de/blog</link>
	<description>jeden Tag ein bisschen besser</description>
	<lastBuildDate>Sun, 21 Feb 2021 19:33:58 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Meine ultimativen Buchempfehlungen</title>
		<link>https://d-mueller.de/blog/meine-ultimativen-buchempfehlungen/</link>
					<comments>https://d-mueller.de/blog/meine-ultimativen-buchempfehlungen/#comments</comments>
		
		<dc:creator><![CDATA[david]]></dc:creator>
		<pubDate>Sun, 21 Feb 2021 12:28:01 +0000</pubDate>
				<category><![CDATA[Persönlich]]></category>
		<guid isPermaLink="false">https://d-mueller.de/blog/?p=1080</guid>

					<description><![CDATA[<p>Im Verlaufe der letzten 5 Jahre habe ich Audible reich gemacht und dabei ausgiebig trainiert, Hörbücher auf x2.5 zu hören &#8211; Lesen ist nämlich nicht so mein Ding. Da ich häufiger mal gefragt werde, welche Buchempfehlungen ich habe sind hier meine aktuellen Favourites zusammengestellt. Viel wichtiger, als die Bücher zu hören/lesen ist, sich daraus auch etwas mitzunehmen und tatsächlich anzuwenden. Wie ich da vorgehe ist dann Stoff für einen weiteren Blogpost.</p>
<h1>Ultimative Empfehlung</h1>
<ul>
<li><b>The 7 Habits of Highly Effective People</b> (Deutsch: Die 7 Wege zur Effektivität) &#8211; der ultimative Klassiker. Wenn du nur ein Buch lesen willst, lese das hier. Es ist erstaunlich, wie viele andere Bücher auf dem Klassiker von Stephen Covey aufbauen.</li></ul>&#8230; <a href="https://d-mueller.de/blog/meine-ultimativen-buchempfehlungen/" class="read-more">Den ganzen Post lesen </a>]]></description>
										<content:encoded><![CDATA[<p>Im Verlaufe der letzten 5 Jahre habe ich Audible reich gemacht und dabei ausgiebig trainiert, Hörbücher auf x2.5 zu hören &#8211; Lesen ist nämlich nicht so mein Ding. Da ich häufiger mal gefragt werde, welche Buchempfehlungen ich habe sind hier meine aktuellen Favourites zusammengestellt. Viel wichtiger, als die Bücher zu hören/lesen ist, sich daraus auch etwas mitzunehmen und tatsächlich anzuwenden. Wie ich da vorgehe ist dann Stoff für einen weiteren Blogpost.</p>
<h1>Ultimative Empfehlung</h1>
<ul>
<li><b>The 7 Habits of Highly Effective People</b> (Deutsch: Die 7 Wege zur Effektivität) &#8211; der ultimative Klassiker. Wenn du nur ein Buch lesen willst, lese das hier. Es ist erstaunlich, wie viele andere Bücher auf dem Klassiker von Stephen Covey aufbauen.</li></ul>&hellip; <a href="https://d-mueller.de/blog/meine-ultimativen-buchempfehlungen/" class="read-more">Den ganzen Post lesen </a>]]></content:encoded>
					
					<wfw:commentRss>https://d-mueller.de/blog/meine-ultimativen-buchempfehlungen/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Passiert hier noch was?</title>
		<link>https://d-mueller.de/blog/passiert-hier-noch-was/</link>
					<comments>https://d-mueller.de/blog/passiert-hier-noch-was/#comments</comments>
		
		<dc:creator><![CDATA[david]]></dc:creator>
		<pubDate>Sat, 25 Jul 2020 10:35:19 +0000</pubDate>
				<category><![CDATA[Persönlich]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Incloud]]></category>
		<category><![CDATA[QSC]]></category>
		<guid isPermaLink="false">https://d-mueller.de/blog/?p=1041</guid>

					<description><![CDATA[<p>Zwischen den Jahren 2009 und 2016 sind hier 133 Beiträge entstanden, die allermeisten mit dem Themenschwerpunkt &#8222;Webentwicklung&#8220;. Und das aus gutem Grund. Warum ist in den letzten Jahren hier kein Artikel mehr erschienen? Und warum wird das voraussichtlich auch so bleiben? Was folgt, ist eine ziemlich persönliche Beschreibung meines Werdegangs. <b>Nimm&#8216; dir einen Kaffee, atme tief durch und los geht&#8217;s.</b></p>
<p>Etwa 2006 mit zarten 17 Jahren startete ich als Freelance Webdev, damals noch parallel zum Abitur am <a href="https://de.wikipedia.org/wiki/Berufliche_Schulen_Gelnhausen" target="_blank" rel="noopener noreferrer">Beruflichen Gymnasium Gelnhausen</a>, Fachbereich Datentechnik. 2009 bin ich dann zum Studieren aus dem beschaulichen <a href="https://www.citypopulation.de/de/germany/settlements/hessen/main_kinzig_kreis/06435029x0DHY__hesseldorf/" target="_blank" rel="noopener noreferrer">Wächtersbach-Hesseldorf</a> in Mittelhessen mit ~700 Einwohnern ins etwa 80km entfernte Darmstadt gezogen &#8211; zum Informatik studieren an der <a href="https://de.wikipedia.org/wiki/Hochschule_Darmstadt" target="_blank" rel="noopener noreferrer">Hochschule Darmstadt</a>.&#8230; <a href="https://d-mueller.de/blog/passiert-hier-noch-was/" class="read-more">Den ganzen Post lesen </a></p>]]></description>
										<content:encoded><![CDATA[<p>Zwischen den Jahren 2009 und 2016 sind hier 133 Beiträge entstanden, die allermeisten mit dem Themenschwerpunkt &#8222;Webentwicklung&#8220;. Und das aus gutem Grund. Warum ist in den letzten Jahren hier kein Artikel mehr erschienen? Und warum wird das voraussichtlich auch so bleiben? Was folgt, ist eine ziemlich persönliche Beschreibung meines Werdegangs. <b>Nimm&#8216; dir einen Kaffee, atme tief durch und los geht&#8217;s.</b></p>
<p>Etwa 2006 mit zarten 17 Jahren startete ich als Freelance Webdev, damals noch parallel zum Abitur am <a href="https://de.wikipedia.org/wiki/Berufliche_Schulen_Gelnhausen" target="_blank" rel="noopener noreferrer">Beruflichen Gymnasium Gelnhausen</a>, Fachbereich Datentechnik. 2009 bin ich dann zum Studieren aus dem beschaulichen <a href="https://www.citypopulation.de/de/germany/settlements/hessen/main_kinzig_kreis/06435029x0DHY__hesseldorf/" target="_blank" rel="noopener noreferrer">Wächtersbach-Hesseldorf</a> in Mittelhessen mit ~700 Einwohnern ins etwa 80km entfernte Darmstadt gezogen &#8211; zum Informatik studieren an der <a href="https://de.wikipedia.org/wiki/Hochschule_Darmstadt" target="_blank" rel="noopener noreferrer">Hochschule Darmstadt</a>.&hellip; <a href="https://d-mueller.de/blog/passiert-hier-noch-was/" class="read-more">Den ganzen Post lesen </a></p>]]></content:encoded>
					
					<wfw:commentRss>https://d-mueller.de/blog/passiert-hier-noch-was/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Best-of-the-Web 13</title>
		<link>https://d-mueller.de/blog/best-of-the-web-13/</link>
					<comments>https://d-mueller.de/blog/best-of-the-web-13/#respond</comments>
		
		<dc:creator><![CDATA[david]]></dc:creator>
		<pubDate>Sun, 24 Jan 2016 19:38:36 +0000</pubDate>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Best of the Web]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">https://d-mueller.de/blog/?p=767</guid>

					<description><![CDATA[<p>Nach längerer Downtime wieder eine Reihe an lesenswerten Materialien querbeet. Durch meine neuen Aufgaben im Job wird das Spektrum etwas breiter und entfernt sich perspektivisch vom Fokus der reinen Webentwicklung. Aber dazu später noch mehr.</p>
<ul>
<li><a href="https://webkit.org/blog/5610/more-responsive-tapping-on-ios/">More Responsive Tapping on iOS</a> &#8211; Aktuelle Entwicklungen im Safari bezogen auf das Click-Delay. Auf Arbeit verwenden wir übrigens bei geeigneten Projekten zur großen Zufriedenheit <a href="https://crosswalk-project.org/">Crosswalk</a> zusammen mit Cordova. Crosswalk bringt die Blink Engine von Chrome/Chromium mit und integriert diese gewissermaßen in die App. Das führt auf Android Geräten dazu, dass auf allen Geräten die gleiche, moderne Rendering-Engine zum Einsatz kommt. Und das auch, wenn bspw.</li></ul>&#8230; <a href="https://d-mueller.de/blog/best-of-the-web-13/" class="read-more">Den ganzen Post lesen </a>]]></description>
										<content:encoded><![CDATA[<p>Nach längerer Downtime wieder eine Reihe an lesenswerten Materialien querbeet. Durch meine neuen Aufgaben im Job wird das Spektrum etwas breiter und entfernt sich perspektivisch vom Fokus der reinen Webentwicklung. Aber dazu später noch mehr.</p>
<ul>
<li><a href="https://webkit.org/blog/5610/more-responsive-tapping-on-ios/">More Responsive Tapping on iOS</a> &#8211; Aktuelle Entwicklungen im Safari bezogen auf das Click-Delay. Auf Arbeit verwenden wir übrigens bei geeigneten Projekten zur großen Zufriedenheit <a href="https://crosswalk-project.org/">Crosswalk</a> zusammen mit Cordova. Crosswalk bringt die Blink Engine von Chrome/Chromium mit und integriert diese gewissermaßen in die App. Das führt auf Android Geräten dazu, dass auf allen Geräten die gleiche, moderne Rendering-Engine zum Einsatz kommt. Und das auch, wenn bspw.</li></ul>&hellip; <a href="https://d-mueller.de/blog/best-of-the-web-13/" class="read-more">Den ganzen Post lesen </a>]]></content:encoded>
					
					<wfw:commentRss>https://d-mueller.de/blog/best-of-the-web-13/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PHP Hashes und ihre Probleme</title>
		<link>https://d-mueller.de/blog/php-hashes-und-ihre-probleme/</link>
					<comments>https://d-mueller.de/blog/php-hashes-und-ihre-probleme/#comments</comments>
		
		<dc:creator><![CDATA[david]]></dc:creator>
		<pubDate>Sun, 17 Jan 2016 21:58:39 +0000</pubDate>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Quicktips]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">https://d-mueller.de/blog/?p=765</guid>

					<description><![CDATA[<p>Ein schon ein etwas älteres Phänomen, welches mir demletzt erneut über den Weg gelaufen ist und ich es deswegen für &#8222;verbloggenswert&#8220; halte:</p>
<pre data-enlighter-language="php" class="EnlighterJSRAW">
if (md5(&#039;240610708&#039;) == md5(&#039;QNKCDZO&#039;))
{
echo &#34;yep equal&#34;;
}
</pre>
<p>Ups? Eine <a href="https://d-mueller.de/blog/hashverfahren-und-sicherheit/">MD5-Kollision</a>? Nein. Eine Eigenart von PHP.</p>
<pre data-enlighter-language="php" class="EnlighterJSRAW">
var_dump(md5(&#039;240610708&#039;)); //string(32) &#34;0e462097431906509019562988736854&#34;
var_dump(md5(&#039;QNKCDZO&#039;));   //string(32) &#34;0e830400451993494058024219903391&#34;
</pre>
<p>2 verschiedene Strings, die aber laut PHP-Vergleich identisch sein sollen? Genau da liegt der Knackpunkt: Die Strings sind <b>gleich</b>, aber nicht <b>identisch</b>. Da beide mit <i>0e</i> anfangen, werden sie als Exponentialdarstellung einer Zahl aufgefasst. Und da 0<sup>irgendwas</sup> immer 0 ergibt, sind die beiden Hashes im Vergleich auch gleich.</p>
<p>Das &#8222;Problem&#8220; lässt sich einfach lösen, indem mit <i>===</i> verglichen wird.&#8230; <a href="https://d-mueller.de/blog/php-hashes-und-ihre-probleme/" class="read-more">Den ganzen Post lesen </a></p>]]></description>
										<content:encoded><![CDATA[<p>Ein schon ein etwas älteres Phänomen, welches mir demletzt erneut über den Weg gelaufen ist und ich es deswegen für &#8222;verbloggenswert&#8220; halte:</p>
<pre data-enlighter-language="php" class="EnlighterJSRAW">
if (md5(&#039;240610708&#039;) == md5(&#039;QNKCDZO&#039;))
{
echo &quot;yep equal&quot;;
}
</pre>
<p>Ups? Eine <a href="https://d-mueller.de/blog/hashverfahren-und-sicherheit/">MD5-Kollision</a>? Nein. Eine Eigenart von PHP.</p>
<pre data-enlighter-language="php" class="EnlighterJSRAW">
var_dump(md5(&#039;240610708&#039;)); //string(32) &quot;0e462097431906509019562988736854&quot;
var_dump(md5(&#039;QNKCDZO&#039;));   //string(32) &quot;0e830400451993494058024219903391&quot;
</pre>
<p>2 verschiedene Strings, die aber laut PHP-Vergleich identisch sein sollen? Genau da liegt der Knackpunkt: Die Strings sind <b>gleich</b>, aber nicht <b>identisch</b>. Da beide mit <i>0e</i> anfangen, werden sie als Exponentialdarstellung einer Zahl aufgefasst. Und da 0<sup>irgendwas</sup> immer 0 ergibt, sind die beiden Hashes im Vergleich auch gleich.</p>
<p>Das &#8222;Problem&#8220; lässt sich einfach lösen, indem mit <i>===</i> verglichen wird.&hellip; <a href="https://d-mueller.de/blog/php-hashes-und-ihre-probleme/" class="read-more">Den ganzen Post lesen </a></p>]]></content:encoded>
					
					<wfw:commentRss>https://d-mueller.de/blog/php-hashes-und-ihre-probleme/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>PHP 7 Migration</title>
		<link>https://d-mueller.de/blog/php-7-migration/</link>
					<comments>https://d-mueller.de/blog/php-7-migration/#respond</comments>
		
		<dc:creator><![CDATA[david]]></dc:creator>
		<pubDate>Sat, 02 Jan 2016 11:22:13 +0000</pubDate>
				<category><![CDATA[php]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">https://d-mueller.de/blog/?p=743</guid>

					<description><![CDATA[<p>Nun war es also Zeit, diesen beschaulichen Server auf PHP7 zu heben.</p>
<h2>Die Installation</h2>
<p>&#8230; lief straight forward, wie man es gewohnt ist. Hier läuft ein Apache 2 mit mod_php auf (aktuell) Ubuntu 15.04, also das absolute Standardsetup. Da PHP7 standardmäßig noch nicht in ubuntu enthalten ist, müssen wir vom <a href="https://launchpad.net/~ondrej/+archive/ubuntu/php-7.0">ppa von ondrej</a> Gebrauch machen, welches sowohl PHP5.6 als auch PHP7 beinhaltet und regelmäßig aktualisiert wird.</p>
<pre data-enlighter-language="enlighter" class="EnlighterJSRAW">
apt-get -y purge php5 libapache2-mod-php5 php5 php5-cli php5-common
apt-get --purge autoremove
apt-get update
apt-get install python-software-properties
add-apt-repository ppa:ondrej/php-7.0
sudo apt-get install php7.0 php7.0-dev php7.0-mysql php7.0-gd php7.0-curl php7.0-sqlite php7.0-intl
php -v
service apache2 restart
</pre>
<p>Läuft, bei mir folgende Ausgabe:</p>
<pre data-enlighter-language="enlighter" class="EnlighterJSRAW">
PHP 7.0.1-4+deb.sury.org~vivid+1</pre>&#8230; <a href="https://d-mueller.de/blog/php-7-migration/" class="read-more">Den ganzen Post lesen </a>]]></description>
										<content:encoded><![CDATA[<p>Nun war es also Zeit, diesen beschaulichen Server auf PHP7 zu heben.</p>
<h2>Die Installation</h2>
<p>&#8230; lief straight forward, wie man es gewohnt ist. Hier läuft ein Apache 2 mit mod_php auf (aktuell) Ubuntu 15.04, also das absolute Standardsetup. Da PHP7 standardmäßig noch nicht in ubuntu enthalten ist, müssen wir vom <a href="https://launchpad.net/~ondrej/+archive/ubuntu/php-7.0">ppa von ondrej</a> Gebrauch machen, welches sowohl PHP5.6 als auch PHP7 beinhaltet und regelmäßig aktualisiert wird.</p>
<pre data-enlighter-language="enlighter" class="EnlighterJSRAW">
apt-get -y purge php5 libapache2-mod-php5 php5 php5-cli php5-common
apt-get --purge autoremove
apt-get update
apt-get install python-software-properties
add-apt-repository ppa:ondrej/php-7.0
sudo apt-get install php7.0 php7.0-dev php7.0-mysql php7.0-gd php7.0-curl php7.0-sqlite php7.0-intl
php -v
service apache2 restart
</pre>
<p>Läuft, bei mir folgende Ausgabe:</p>
<pre data-enlighter-language="enlighter" class="EnlighterJSRAW">
PHP 7.0.1-4+deb.sury.org~vivid+1</pre>&hellip; <a href="https://d-mueller.de/blog/php-7-migration/" class="read-more">Den ganzen Post lesen </a>]]></content:encoded>
					
					<wfw:commentRss>https://d-mueller.de/blog/php-7-migration/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>IE11 kommt getarnt daher</title>
		<link>https://d-mueller.de/blog/ie11-kommt-getarnt-daher/</link>
					<comments>https://d-mueller.de/blog/ie11-kommt-getarnt-daher/#comments</comments>
		
		<dc:creator><![CDATA[david]]></dc:creator>
		<pubDate>Wed, 27 Mar 2013 11:25:45 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Quicktips]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">https://d-mueller.de/blog/?p=724</guid>

					<description><![CDATA[<p>Browser melden sich traditionell und historisch bedingt mit ziemlich kryptischen Namen. Mein aktueller Chrome z.B.:</p>
<pre data-enlighter-language="enlighter" class="EnlighterJSRAW">
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22
</pre>
<p>Der Brauch, so viel wie möglich Buzzwords in den String <b>navigator.userAgent</b> zu packen entspringt dem Browsersniffing. Sollte ein Webentwickler nach <i>Gecko</i> (Rendering-Engine von Firefox) suchen und dann einen gewissen Inhalt ausliefern, wären andere Browser benachteiligt. Und deshalb finden sich eben in jedem Browsername alle Bezeichnungen wieder.</p>
<p>Im neuen IE11 aus der geleakten <a href="http://www.heise.de/newsticker/meldung/Windows-Blue-Vorabversion-des-Nachfolgers-von-Windows-8-im-Netz-1829094.html">Windows Blue</a>-Version springt jetzt auch Microsoft auf den Zug auf:</p>
<pre data-enlighter-language="enlighter" class="EnlighterJSRAW">
Mozilla/5.0 (IE 11.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko
</pre>
<p>Die 4 Buchstaben <b>MSIE</b>, nach denen gerne geflitert wurde, sind verschwunden.&#8230; <a href="https://d-mueller.de/blog/ie11-kommt-getarnt-daher/" class="read-more">Den ganzen Post lesen </a></p>]]></description>
										<content:encoded><![CDATA[<p>Browser melden sich traditionell und historisch bedingt mit ziemlich kryptischen Namen. Mein aktueller Chrome z.B.:</p>
<pre data-enlighter-language="enlighter" class="EnlighterJSRAW">
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22
</pre>
<p>Der Brauch, so viel wie möglich Buzzwords in den String <b>navigator.userAgent</b> zu packen entspringt dem Browsersniffing. Sollte ein Webentwickler nach <i>Gecko</i> (Rendering-Engine von Firefox) suchen und dann einen gewissen Inhalt ausliefern, wären andere Browser benachteiligt. Und deshalb finden sich eben in jedem Browsername alle Bezeichnungen wieder.</p>
<p>Im neuen IE11 aus der geleakten <a href="http://www.heise.de/newsticker/meldung/Windows-Blue-Vorabversion-des-Nachfolgers-von-Windows-8-im-Netz-1829094.html">Windows Blue</a>-Version springt jetzt auch Microsoft auf den Zug auf:</p>
<pre data-enlighter-language="enlighter" class="EnlighterJSRAW">
Mozilla/5.0 (IE 11.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko
</pre>
<p>Die 4 Buchstaben <b>MSIE</b>, nach denen gerne geflitert wurde, sind verschwunden.&hellip; <a href="https://d-mueller.de/blog/ie11-kommt-getarnt-daher/" class="read-more">Den ganzen Post lesen </a></p>]]></content:encoded>
					
					<wfw:commentRss>https://d-mueller.de/blog/ie11-kommt-getarnt-daher/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Browserscope</title>
		<link>https://d-mueller.de/blog/browserscope/</link>
					<comments>https://d-mueller.de/blog/browserscope/#respond</comments>
		
		<dc:creator><![CDATA[david]]></dc:creator>
		<pubDate>Mon, 21 Jan 2013 09:00:27 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">https://d-mueller.de/blog/?p=694</guid>

					<description><![CDATA[<blockquote><p>Browserscope is a community-driven project for profiling web browsers. The goals are to foster innovation by tracking browser functionality and to be a resource for web developers.</p></blockquote>
<p>So zumindest der Hersteller. Im Grunde geht&#8217;s darum: Ich packe mir ein kleines Script von Browserscope auf die Webseite und kann diesem dann verschiedene Parameter übergeben, die typischerweise etwa A/B-Tests sind oder Browser-Feature-Prüfungen der Benutzer meiner Webseite. Die Informationen werden dann an Browserscope übertragen und schön übersichtlich dargestellt. Super, wenn ich etwa testen will, wann ich ein Feature für alle Besucher meiner Webseite freischalten kann.</p>
<h2>Wie funktionierts?</h2>
<p><a href="http://www.browserscope.org/">Sign In</a> rechts oben mit dem Google-Account.&#8230; <a href="https://d-mueller.de/blog/browserscope/" class="read-more">Den ganzen Post lesen </a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Browserscope is a community-driven project for profiling web browsers. The goals are to foster innovation by tracking browser functionality and to be a resource for web developers.</p></blockquote>
<p>So zumindest der Hersteller. Im Grunde geht&#8217;s darum: Ich packe mir ein kleines Script von Browserscope auf die Webseite und kann diesem dann verschiedene Parameter übergeben, die typischerweise etwa A/B-Tests sind oder Browser-Feature-Prüfungen der Benutzer meiner Webseite. Die Informationen werden dann an Browserscope übertragen und schön übersichtlich dargestellt. Super, wenn ich etwa testen will, wann ich ein Feature für alle Besucher meiner Webseite freischalten kann.</p>
<h2>Wie funktionierts?</h2>
<p><a href="http://www.browserscope.org/">Sign In</a> rechts oben mit dem Google-Account.&hellip; <a href="https://d-mueller.de/blog/browserscope/" class="read-more">Den ganzen Post lesen </a></p>]]></content:encoded>
					
					<wfw:commentRss>https://d-mueller.de/blog/browserscope/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Best-of-the-Web 12</title>
		<link>https://d-mueller.de/blog/best-of-the-web-12/</link>
					<comments>https://d-mueller.de/blog/best-of-the-web-12/#respond</comments>
		
		<dc:creator><![CDATA[david]]></dc:creator>
		<pubDate>Mon, 24 Dec 2012 09:59:06 +0000</pubDate>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Best of the Web]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">https://d-mueller.de/blog/?p=719</guid>

					<description><![CDATA[<p>Neue Linkwelle, gab ja so einige spannende Sachen seit der letzten&#8230;</p>
<ul>
<li><a href="http://phpmaster.com/authenticate-users-with-mozilla-persona/">Authenticate Users with Mozilla Persona</a> &#8211; Insights in Mozilla Personas, dem Login-Konzept mit einigem Potenzial.</li>
<li><a href="http://usrportage.de/archives/938-The-state-of-meta-programming-in-PHP.html">The state of meta programming in PHP</a> &#8211; Reflection ist ja bekannt, hier gehts um Low-Level-Mechanismen auf Basis von Grammatiken und Syntaxbäumen.</li>
<li><a href="http://blog.mayflower.de/1944-ACLs-and-Symfony2.html">ACLs and Symfony2</a> &#8211; Nicht nur für Verwender von Symfony 2 interessant: Ganz schöner Einblick in die Funktionsweise von Access Control Lists generell.</li>
<li><a href="http://css-tricks.com/how-to-use-the-webshims-polyfill/">How to Use the Webshims Polyfill</a> &#8211; Eine Suite an Polyfills (= JavaScript Fallbacks für Browser, die noch nicht nativ mit HTML5-Elementen klarkommen).</li>
<li><a href="http://zaemis.blogspot.de/2012/10/php-assertions.html">PHP Assertions</a> &#8211; Wann und warum man PHP Assertions (nicht) benutzen sollte.</li></ul>&#8230; <a href="https://d-mueller.de/blog/best-of-the-web-12/" class="read-more">Den ganzen Post lesen </a>]]></description>
										<content:encoded><![CDATA[<p>Neue Linkwelle, gab ja so einige spannende Sachen seit der letzten&#8230;</p>
<ul>
<li><a href="http://phpmaster.com/authenticate-users-with-mozilla-persona/">Authenticate Users with Mozilla Persona</a> &#8211; Insights in Mozilla Personas, dem Login-Konzept mit einigem Potenzial.</li>
<li><a href="http://usrportage.de/archives/938-The-state-of-meta-programming-in-PHP.html">The state of meta programming in PHP</a> &#8211; Reflection ist ja bekannt, hier gehts um Low-Level-Mechanismen auf Basis von Grammatiken und Syntaxbäumen.</li>
<li><a href="http://blog.mayflower.de/1944-ACLs-and-Symfony2.html">ACLs and Symfony2</a> &#8211; Nicht nur für Verwender von Symfony 2 interessant: Ganz schöner Einblick in die Funktionsweise von Access Control Lists generell.</li>
<li><a href="http://css-tricks.com/how-to-use-the-webshims-polyfill/">How to Use the Webshims Polyfill</a> &#8211; Eine Suite an Polyfills (= JavaScript Fallbacks für Browser, die noch nicht nativ mit HTML5-Elementen klarkommen).</li>
<li><a href="http://zaemis.blogspot.de/2012/10/php-assertions.html">PHP Assertions</a> &#8211; Wann und warum man PHP Assertions (nicht) benutzen sollte.</li></ul>&hellip; <a href="https://d-mueller.de/blog/best-of-the-web-12/" class="read-more">Den ganzen Post lesen </a>]]></content:encoded>
					
					<wfw:commentRss>https://d-mueller.de/blog/best-of-the-web-12/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Quicktip: Mehrere Attribute auf einmal anlegen</title>
		<link>https://d-mueller.de/blog/quicktip-mehrere-attribute-auf-einmal-anlegen/</link>
					<comments>https://d-mueller.de/blog/quicktip-mehrere-attribute-auf-einmal-anlegen/#comments</comments>
		
		<dc:creator><![CDATA[david]]></dc:creator>
		<pubDate>Mon, 17 Dec 2012 08:30:44 +0000</pubDate>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Quicktips]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">https://d-mueller.de/blog/?p=678</guid>

					<description><![CDATA[<p>Erspähte ich neulich im Quellcode von Symfony 2 &#8211; mir war vorher nicht bewusst, dass das möglich ist.</p>
<pre data-enlighter-language="php" class="EnlighterJSRAW">
class Foo
{
	protected $var1 = &#34;1234&#34;, 
			  $var2 = &#34;4567&#34;, 
			  $var3;
			  
	public $var4, 
		   $var5 = false;
		   
	private $var6;
}
</pre>
<p>Gefällt mir besser als die mehrfache, wiederkehrende Verwendung des gleichen Schlüsselworts. Nur unpraktisch bezogen auf Docblocks.<strong>Weitere Posts:</strong></p>
<ul class="similar-posts">
<li><a href="https://d-mueller.de/blog/reflection-teil-1-reflectionclass/" rel="bookmark" title="20. November 2010">Reflection &#8211; Teil 1: ReflectionClass</a></li>
<li><a href="https://d-mueller.de/blog/5-php-patterns-im-schnelldurchlauf-factory-iterator-observer-singleton-strategy/" rel="bookmark" title="1. Dezember 2010">5 PHP Patterns im Schnelldurchlauf: Factory, Iterator, Observer, Singleton, Strategy</a></li>
<li><a href="https://d-mueller.de/blog/php-wtf-5/" rel="bookmark" title="23. Februar 2011">PHP WTF #5</a></li>
<li><a href="https://d-mueller.de/blog/javascript-in-php-mit-der-v8-engine/" rel="bookmark" title="19. August 2012">Javascript in PHP mit der V8-Engine</a></li>
<li><a href="https://d-mueller.de/blog/grundprinzipien-der-objektorientierten-programmierung/" rel="bookmark" title="23. November 2010">Grundprinzipien der objektorientierten Programmierung</a></li>
</ul>
<p><!-- Similar Posts took 8.768 ms -->&#8230; <a href="https://d-mueller.de/blog/quicktip-mehrere-attribute-auf-einmal-anlegen/" class="read-more">Den ganzen Post lesen </a></p>]]></description>
										<content:encoded><![CDATA[<p>Erspähte ich neulich im Quellcode von Symfony 2 &#8211; mir war vorher nicht bewusst, dass das möglich ist.</p>
<pre data-enlighter-language="php" class="EnlighterJSRAW">
class Foo
{
	protected $var1 = &quot;1234&quot;, 
			  $var2 = &quot;4567&quot;, 
			  $var3;
			  
	public $var4, 
		   $var5 = false;
		   
	private $var6;
}
</pre>
<p>Gefällt mir besser als die mehrfache, wiederkehrende Verwendung des gleichen Schlüsselworts. Nur unpraktisch bezogen auf Docblocks.<strong>Weitere Posts:</strong></p>
<ul class="similar-posts">
<li><a href="https://d-mueller.de/blog/reflection-teil-1-reflectionclass/" rel="bookmark" title="20. November 2010">Reflection &#8211; Teil 1: ReflectionClass</a></li>
<li><a href="https://d-mueller.de/blog/5-php-patterns-im-schnelldurchlauf-factory-iterator-observer-singleton-strategy/" rel="bookmark" title="1. Dezember 2010">5 PHP Patterns im Schnelldurchlauf: Factory, Iterator, Observer, Singleton, Strategy</a></li>
<li><a href="https://d-mueller.de/blog/php-wtf-5/" rel="bookmark" title="23. Februar 2011">PHP WTF #5</a></li>
<li><a href="https://d-mueller.de/blog/javascript-in-php-mit-der-v8-engine/" rel="bookmark" title="19. August 2012">Javascript in PHP mit der V8-Engine</a></li>
<li><a href="https://d-mueller.de/blog/grundprinzipien-der-objektorientierten-programmierung/" rel="bookmark" title="23. November 2010">Grundprinzipien der objektorientierten Programmierung</a></li>
</ul>
<p><!-- Similar Posts took 7.497 ms -->&hellip; <a href="https://d-mueller.de/blog/quicktip-mehrere-attribute-auf-einmal-anlegen/" class="read-more">Den ganzen Post lesen </a></p>]]></content:encoded>
					
					<wfw:commentRss>https://d-mueller.de/blog/quicktip-mehrere-attribute-auf-einmal-anlegen/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Cross Domain AJAX Guide</title>
		<link>https://d-mueller.de/blog/cross-domain-ajax-guide/</link>
					<comments>https://d-mueller.de/blog/cross-domain-ajax-guide/#comments</comments>
		
		<dc:creator><![CDATA[david]]></dc:creator>
		<pubDate>Mon, 10 Dec 2012 08:30:11 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">https://d-mueller.de/blog/?p=713</guid>

					<description><![CDATA[<p>As it is widely known, AJAX Requests are only possible if <b>port, protocol and domain</b> of sender and receiver are equal. This means, that the following requests <b>generally won&#8217;t work</b>:</p>
<ul>
<li>Requesting <span style="background:#FFCCCC"><i>http<b>s</b>://foo.bar/target.php</i></span> from <span style="background:#CCFFCC"><i>http://foo.bar/source.php</i></span></li>
<li>Requesting <span style="background:#FFCCCC"><i>http://<b>sub.</b>foo.bar</i></span> from <span style="background:#CCFFCC"><i>http://foo.bar</i></span></li>
<li>Requesting <span style="background:#FFCCCC"><i>http://foo.bar<b>:5000</b></i></span> from <span style="background:#CCFFCC"><i>http://foo.bar</i></span></li>
</ul>
<p>Having this cleared out, we will cover ways around this restriction.</p>
<h2>CORS</h2>
<p>CORS stands for <i>Cross-origin resource sharing</i> and has to be supported on the server side. If we take jQuery, the <b>requesting side</b> will look like this:</p>
<pre data-enlighter-language="js" class="EnlighterJSRAW">
$.ajax({
    type: &#039;POST&#039;,
    url: &#039;http://d1303.de/remote/cors.php&#039;,
    crossDomain: true,
    data: &#34;my_request_is=foo&#34;,
    dataType: &#039;json&#039;,
    success: function(responseData, textStatus, jqXHR) 
	{
        console.log(responseData);</pre>&#8230; <a href="https://d-mueller.de/blog/cross-domain-ajax-guide/" class="read-more">Den ganzen Post lesen </a>]]></description>
										<content:encoded><![CDATA[<p>As it is widely known, AJAX Requests are only possible if <b>port, protocol and domain</b> of sender and receiver are equal. This means, that the following requests <b>generally won&#8217;t work</b>:</p>
<ul>
<li>Requesting <span style="background:#FFCCCC"><i>http<b>s</b>://foo.bar/target.php</i></span> from <span style="background:#CCFFCC"><i>http://foo.bar/source.php</i></span></li>
<li>Requesting <span style="background:#FFCCCC"><i>http://<b>sub.</b>foo.bar</i></span> from <span style="background:#CCFFCC"><i>http://foo.bar</i></span></li>
<li>Requesting <span style="background:#FFCCCC"><i>http://foo.bar<b>:5000</b></i></span> from <span style="background:#CCFFCC"><i>http://foo.bar</i></span></li>
</ul>
<p>Having this cleared out, we will cover ways around this restriction.</p>
<h2>CORS</h2>
<p>CORS stands for <i>Cross-origin resource sharing</i> and has to be supported on the server side. If we take jQuery, the <b>requesting side</b> will look like this:</p>
<pre data-enlighter-language="js" class="EnlighterJSRAW">
$.ajax({
    type: &#039;POST&#039;,
    url: &#039;http://d1303.de/remote/cors.php&#039;,
    crossDomain: true,
    data: &quot;my_request_is=foo&quot;,
    dataType: &#039;json&#039;,
    success: function(responseData, textStatus, jqXHR) 
	{
        console.log(responseData);</pre>&hellip; <a href="https://d-mueller.de/blog/cross-domain-ajax-guide/" class="read-more">Den ganzen Post lesen </a>]]></content:encoded>
					
					<wfw:commentRss>https://d-mueller.de/blog/cross-domain-ajax-guide/feed/</wfw:commentRss>
			<slash:comments>18</slash:comments>
		
		
			</item>
	</channel>
</rss>
