<?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>just-a-blog &#187; PHP</title>
	<atom:link href="http://www.bastian.name/labels/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bastian.name</link>
	<description>Aus dem Leben eines Computer-Junkies, der sich der konspirativen Gewalt der Multi-Medien nahezu ungefiltert ausgesetzt sieht.</description>
	<lastBuildDate>Sat, 12 Jun 2010 13:25:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Online Quell-Code Editor für PHP, CSS, Javascript</title>
		<link>http://www.bastian.name/2009/12/online-quell-code-editor-fur-php-css-javascript.html</link>
		<comments>http://www.bastian.name/2009/12/online-quell-code-editor-fur-php-css-javascript.html#comments</comments>
		<pubDate>Wed, 16 Dec 2009 13:01:40 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[Weblife]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[syntaxhighlighting]]></category>
		<category><![CDATA[wysiwyg]]></category>

		<guid isPermaLink="false">http://www.bastian.name/?p=689</guid>
		<description><![CDATA[Gerade habe ich ein intressantes Tool gefunden. Mit CodeMirror ist es möglich online, direkt im Browser PHP-Quellcode zu bearbeiten. Das funktioniert im Prinzip ähnlich wie bekannte WYSIWYG-Editoren für HTML, nur dass die Textarea um Syntax-Highlighting ergänzt wird.
Es gibt eine klasse Demo in der man die unterschiedlichen Möglichkeiten direkt testen kann.
]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.bastian.name/wp-content/uploads/2009/12/people.jpg" alt="Syntaxhighlighting for the People" width="175" height="244" />Gerade habe ich ein intressantes Tool gefunden. Mit <a href="http://marijn.haverbeke.nl/codemirror/">CodeMirror</a> ist es möglich online, direkt im Browser PHP-Quellcode zu bearbeiten. Das funktioniert im Prinzip ähnlich wie bekannte WYSIWYG-Editoren für HTML, nur dass die <strong>Textarea</strong> um <strong>Syntax-Highlighting</strong> ergänzt wird.</p>
<p>Es gibt eine <a href="http://marijn.haverbeke.nl/codemirror/contrib/php/index.html" target="_blank">klasse Demo</a> in der man die unterschiedlichen Möglichkeiten direkt testen kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2009/12/online-quell-code-editor-fur-php-css-javascript.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress Memory Usage gesunken mit PHP 5.2.11</title>
		<link>http://www.bastian.name/2009/11/wordpress-memory-usage-gesunken-mit-php-5-2-11.html</link>
		<comments>http://www.bastian.name/2009/11/wordpress-memory-usage-gesunken-mit-php-5-2-11.html#comments</comments>
		<pubDate>Fri, 20 Nov 2009 06:26:00 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.bastian.name/?p=680</guid>
		<description><![CDATA[Seit ein paar Stunden sitzt mein Blog auf einem neuen Server. Nach einem Blick in das Admin-Interface, habe ich mich erstmal tierisch gefreut. Vorher hatte ich eine Speicher-Auslastung von ca. 30MB, jetzt sind es im Schnitt nur noch 22MB.
Der neue Server ist natürlich schneller, toller, besser, &#8230; aber vor allem nutzt er PHP 5.2.11 unter [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-681" title="Blog Memory Usage" src="http://www.bastian.name/wp-content/uploads/2009/11/blog-memory-usage.png" alt="Blog Memory Usage" width="279" height="232" />Seit ein paar Stunden sitzt mein Blog auf einem neuen Server. Nach einem Blick in das Admin-Interface, habe ich mich erstmal tierisch gefreut. Vorher hatte ich eine Speicher-Auslastung von ca. 30MB, jetzt sind es im Schnitt nur noch 22MB.</p>
<p>Der neue Server ist natürlich schneller, toller, besser, &#8230; aber vor allem nutzt er PHP 5.2.11 unter Debian 5 und nicht mehr 5.2.0 unter Debian 4. Da sonst die technische Basis gleich geblieben ist, gehe ich mal davon aus, dass Wordpress unter PHP 5.2.11 weniger Speicher verbraucht als unter 5.2.0.</p>
<p>Hat noch irgendwer diese Erfahrung gemacht?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2009/11/wordpress-memory-usage-gesunken-mit-php-5-2-11.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP-Quellcode-Analyse mit nWire for PHP</title>
		<link>http://www.bastian.name/2009/10/php-quellcode-analyse-nwire-php.html</link>
		<comments>http://www.bastian.name/2009/10/php-quellcode-analyse-nwire-php.html#comments</comments>
		<pubDate>Wed, 14 Oct 2009 10:18:29 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[Weblife]]></category>
		<category><![CDATA[analyse]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[quellcode]]></category>
		<category><![CDATA[Zeitersparnis]]></category>

		<guid isPermaLink="false">http://www.bastian.name/?p=668</guid>
		<description><![CDATA[Gestern habe ich über Twitter und die Zend Devzone zufällig von nWire erfahren &#8211; und bin begeistert. Was genau nWire ist und wofür man das unbedingt braucht will ich euch hier kurz erklären.
Ich habe häufig das Problem, vorhanden PHP-Quälcode anzupassen, zu optimieren und, ganz wichtig, zu entschlacken. Das ist ne echt mühsame Arbeit. Man geht [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.bastian.name/wp-content/uploads/2009/10/features-general.png" alt="nWire Logo" width="67" height="45" />Gestern habe ich über <a href="http://twitter.com/nwire/status/4812409528">Twitter</a> und die <a href="http://devzone.zend.com/article/11052-nWire-for-PHP-Released-Real-Time-PHP-Code-Visualization-and-Exploration-">Zend Devzone</a> zufällig von <a href="http://www.nwiresoftware.com/">nWire</a> erfahren &#8211; und bin begeistert. Was genau nWire ist und wofür man das unbedingt braucht will ich euch hier kurz erklären.</p>
<p>Ich habe häufig das Problem, vorhanden <strong>PHP-Quälcode</strong> anzupassen, zu optimieren und, ganz wichtig, zu entschlacken. Das ist ne echt mühsame Arbeit. Man geht die Bibliotheken durch und schaut nach ob bestimmte Klassen und Funktionen auch tatsächlich im Projekt verwendet werden, ob <strong>Deklarationen doppelt vorhanden</strong> sind, und so weiter. <strong>nWire</strong> nimmt mir dabei ab sofort wahrsinnig viel Arbeit ab, denn es Analysiert den Quellcode im Vorhinein und zeigt mir all die Infos die ich sonst immer zu Fuß erkundet habe direkt unter der bearbeiteten Datei im Eclipse an.</p>
<div class="wp-caption alignnone" style="width: 684px"><a href="http://www.nwiresoftware.com/products/nwire-php/features"><img title="Schaubild der Arbeitsweise von nWire" src="http://www.bastian.name/wp-content/uploads/2009/10/nwire-features.gif" alt="Codeanalyse mit nWire" width="674" height="274" /></a><p class="wp-caption-text">Schaubild der Arbeitsweise von nWire</p></div>
<p style="text-align: left;"><a href="http://www.nwiresoftware.com/products/nwire-php/features">nWire hat mehrere Module</a>, die perfekt Hand in Hand arbeiten. Im ersten Schritt untersucht der <strong>nWire Analyzer</strong> den kompletten Quellcode. Das ist ein Prozess der immer wieder im Hintergrund abläuft, auch bei größeren Projekten die Entwicklung also nicht stört. Diese dabei ermittelten Daten werden im <strong>nWire Repository</strong> gespeichert.</p>
<p style="text-align: left;">Jetzt gibt es zwei Komponenten mit denen man als Entwickler zu tun hat. Das wichtigste ist der <strong>nWire Navigator</strong>. Mit ihm kann man Dateien, Funktionen und Variablen untersuchen. Man findet heraus wo sie deklariert wurden, wo sie überall verwendet werden und welche Abhängigkeiten sie haben. Mit <strong>nWire Navigator Search</strong> kann man gezielt nach Elementen des Projektes suchen.</p>
<p style="text-align: left;">Mit dem <strong>nWire Visualizer</strong> sieht man in einem Netzdiagramm die vom Navigator dargestellten Abhängigkeiten und kann sich über das Netz das ganze Projekt anschauen. Hab ich jetzt noch nicht so benutzt und sehe auch nicht den größeren Sinn dahinter, aber der Navigator ist richtig super.</p>
<p>Ich werde nWire auf jeden Fall die <strong>30 Tage</strong>, die man die <strong>Trialversion</strong> laufen lassen darf ausgiebig testen und dann eventuell ein paar Lizenzen für uns holen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2009/10/php-quellcode-analyse-nwire-php.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Lücke in WordPress ermöglicht Aussperren des Admins</title>
		<link>http://www.bastian.name/2009/08/lucke-in-wordpress-ermoglicht-aussperren-des-admins.html</link>
		<comments>http://www.bastian.name/2009/08/lucke-in-wordpress-ermoglicht-aussperren-des-admins.html#comments</comments>
		<pubDate>Tue, 11 Aug 2009 11:13:39 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[Weblife]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.bastian.name/?p=606</guid>
		<description><![CDATA[Gerade eben gelesen (thx to Spreeblick): Lücke in WordPress ermöglicht Aussperren des Admins.
Also nichts wie los liebe Wordpress-Admins, schnell die wp-login.php ändern.
Genaue Infos zum Bug gibt&#8217;s von Laurent Gaffié. Der Bug wird aber nicht als kritisch eingestuft, da es einem Angreifer keinen Vorteil verschafft, aber es führt zu ein bisschen Ärger beim Admin.
Der Bug ist [...]]]></description>
			<content:encoded><![CDATA[<p>Gerade eben gelesen (thx to <a href="http://twitter.com/spreeblick/status/3243032035">Spreeblick</a>):<a href="http://www.heise.de/newsticker/Luecke-in-WordPress-ermoeglicht-Aussperren-des-Admins--/meldung/143328"> Lücke in WordPress ermöglicht Aussperren des Admins</a>.</p>
<p>Also nichts wie los liebe Wordpress-Admins, schnell die wp-login.php ändern.</p>
<p>Genaue Infos zum Bug gibt&#8217;s von <a href="http://lists.grok.org.uk/pipermail/full-disclosure/2009-August/070137.html">Laurent Gaffié</a>. Der Bug wird aber <strong>nicht als kritisch</strong> eingestuft, da es einem Angreifer keinen Vorteil verschafft, aber es führt zu ein bisschen <strong>Ärger beim Admin</strong>.</p>
<p>Der Bug ist übrigens ein sehr gutes Beispiel für <strong>unsaubere Programmierung</strong>. Ein Eingabeparameter wird lediglich mittels <em>empty($key)</em> überprüft. Sinnvoller als zu überprüfen wie ein Parameter nicht beschaffen sein soll, ist es immer zu überprüfen WIE genau der Inhalt der Variable aussehen muss.</p>
<p>Also zum Beispiel könnte man an dieser Stelle eine Stringconversion und nachträglich eine Überprüfung auf Mindestlänge und enthaltene Zeichen durchführen:</p>
<pre class="brush: php">$key = (string) $key;
if (!preg_match(&quot;~[A-Za-z0-9]{20}~&quot;, $key) ) {
return new WP_Error(&#039;invalid_key&#039;, __(&#039;Invalid key&#039;));
}</pre>
<p>Das ganze jetzt so aus der Hand geschrieben, aber sollte so in etwa funktionieren. Unter der Bedingung, dass</p>
<pre class="brush: php">$key</pre>
<p>immer 20 Zeichen lang ist, was ich jetzt nicht weiß.</p>
<p>Eine Zeile weiter oben heißt es sogar schon:</p>
<pre class="brush: php">$key = preg_replace(&#039;/[^a-z0-9]/i&#039;, &#039;&#039;, $key);</pre>
<p>Allerdings ohne vorher auf einen String oder die Länge zu überprüfen.</p>
<p>Achja, ist so ein ganz klarer &#8220;Mit Java wäre das nicht passiert&#8221;-Bug <img src='http://www.bastian.name/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Update:</p>
<p>Inzwischen ist das Problem gefixt. Und zwar so:</p>
<table border="0">
<tbody>
<tr>
<th id="L190"><a href="http://core.trac.wordpress.org/browser/trunk/wp-login.php#L190">190</a></th>
<td><span>if</span> <span>(</span> <span>empty</span><span>(</span> <span>$key</span> <span>)</span> <span>||</span> <span>!</span><span>is_string</span><span>(</span> <span>$key</span> <span>)</span> <span>)</span></td>
</tr>
<tr>
<th id="L191"><a href="http://core.trac.wordpress.org/browser/trunk/wp-login.php#L191">191</a></th>
<td><span>return</span> <span>new</span> <span>WP_Error</span><span>(</span><span>&#8216;invalid_key&#8217;</span><span>,</span> <span>__</span><span>(</span><span>&#8216;Invalid key&#8217;</span><span>));</span></td>
</tr>
<tr>
<th id="L192"><a href="http://core.trac.wordpress.org/browser/trunk/wp-login.php#L192">192</a></th>
<td></td>
</tr>
<tr>
<th id="L193"><a href="http://core.trac.wordpress.org/browser/trunk/wp-login.php#L193">193</a></th>
<td><span>if</span> <span>(</span> <span>empty</span><span>(</span><span>$login</span><span>)</span> <span>||</span> <span>!</span><span>is_string</span><span>(</span><span>$login</span><span>)</span> <span>)</span></td>
</tr>
<tr>
<th id="L194"><a href="http://core.trac.wordpress.org/browser/trunk/wp-login.php#L194">194</a></th>
<td><span>return</span> <span>new</span> <span>WP_Error</span><span>(</span><span>&#8216;invalid_key&#8217;</span><span>,</span> <span>__</span><span>(</span><span>&#8216;Invalid key&#8217;</span><span>));</span></td>
</tr>
<tr>
<th id="L195"><a href="http://core.trac.wordpress.org/browser/trunk/wp-login.php#L195">195</a></th>
<td></td>
</tr>
<tr>
<th id="L196"><a href="http://core.trac.wordpress.org/browser/trunk/wp-login.php#L196">196</a></th>
<td><span>$user</span> <span>=</span> <span>$wpdb</span><span>-&gt;</span><span>get_row</span><span>(</span><span>$wpdb</span><span>-&gt;</span><span>prepare</span><span>(</span><span>&#8220;SELECT * FROM </span><span>$wpdb-&gt;users</span><span> WHERE user_activation_key = %s AND user_login = %s&#8221;</span><span>,</span> <span>$key</span><span>,</span> <span>$login</span><span>));</span></td>
</tr>
<tr>
<th id="L197"><a href="http://core.trac.wordpress.org/browser/trunk/wp-login.php#L197">197</a></th>
<td><span>if</span> <span>(</span> <span>empty</span><span>(</span> <span>$user</span> <span>)</span> <span>)</span></td>
</tr>
<tr>
<th id="L198"><a href="http://core.trac.wordpress.org/browser/trunk/wp-login.php#L198">198</a></th>
<td><span>return</span> <span>new</span> <span>WP_Error</span><span>(</span><span>&#8216;invalid_key&#8217;</span><span>,</span> <span>__</span><span>(</span><span>&#8216;Invalid key&#8217;</span><span>));</span></td>
</tr>
</tbody>
</table>
<p>Das ist auch ok. Überprüfung ob es ein String ist. Auf jeden Fall besser als zu überprüfen ob es kein Array ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2009/08/lucke-in-wordpress-ermoglicht-aussperren-des-admins.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework: PHP-Anwendungen mit dem Zend Framework entwickeln (Gebundene Ausgabe)</title>
		<link>http://www.bastian.name/2009/04/zend-framework-php-anwendungen-mit-dem-zend-framework-entwickeln-gebundene-ausgabe.html</link>
		<comments>http://www.bastian.name/2009/04/zend-framework-php-anwendungen-mit-dem-zend-framework-entwickeln-gebundene-ausgabe.html#comments</comments>
		<pubDate>Sun, 26 Apr 2009 12:20:32 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Weblife]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.bastian.name/2009/04/zend-framework-php-anwendungen-mit-dem-zend-framework-entwickeln-gebundene-ausgabe.html</guid>
		<description><![CDATA[
      mediavalley.de, 04/2008
  Das Buch bietet einen optimalen Einstieg in ein sehr professionelles Framework.
Pressestimmen
  Empfehlung der Redaktion!
Alle
   (more&#8230;)
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.de/Zend-Framework-PHP-Anwendungen-mit-entwickeln/dp/3836210681/ref=sr_1_2/276-4174310-2247201?ie=UTF8&#038;s=books&#038;qid=1240217385&#038;sr=8-2?ie=UTF8&#038;tag=bastianname-21"><img style="float:left;width: 150px;height:150px;margin-right: 10px;" src="http://ecx.images-amazon.com/images/I/41UeqkOuADL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU03_.jpg" alt="Zend Framework: PHP-Anwendungen mit dem Zend Framework entwickeln" /></a></p>
<p>      mediavalley.de, 04/2008<br />
  Das Buch bietet einen optimalen Einstieg in ein sehr professionelles Framework.</p>
<p>Pressestimmen<br />
  Empfehlung der Redaktion!</p>
<p>Alle<br />
   <a href="http://www.amazon.de/Zend-Framework-PHP-Anwendungen-mit-entwickeln/dp/3836210681/ref=sr_1_2/276-4174310-2247201?ie=UTF8&#038;s=books&#038;qid=1240217385&#038;sr=8-2?ie=UTF8&#038;tag=bastianname-21" title="More at Amazon">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2009/04/zend-framework-php-anwendungen-mit-dem-zend-framework-entwickeln-gebundene-ausgabe.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>PHP DNS daemon &#8211; Der eigene Name-Server in PHP</title>
		<link>http://www.bastian.name/2009/04/php-dns-daemon-der-eigene-name-server-in-php.html</link>
		<comments>http://www.bastian.name/2009/04/php-dns-daemon-der-eigene-name-server-in-php.html#comments</comments>
		<pubDate>Mon, 20 Apr 2009 08:07:10 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[Weblife]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.bastian.name/?p=217</guid>
		<description><![CDATA[Gegen die Vergesslichkeit mal hier ein kurzer Artikel zum Thema pinetd und DNS-Server.
Pinetd/2 ist eine Bibliothek mit der verschiedene TCP-Dienste direkt über PHP erstellt werden können. Verschiedene Dienste sind bereits implementiert und können aus dem SVN gezogen werden.


$ cd /usr/local
$ svn co http://ookoo.org/svn/pinetd2/trunk pinetd2
(checkout lines)

Zu den nun verfügbaren Diensten gehören FTP-Server, DNS-Server, Mailserver (SMTP, POP3, [...]]]></description>
			<content:encoded><![CDATA[<p>Gegen die Vergesslichkeit mal hier ein kurzer Artikel zum Thema <a href="http://blog.magicaltux.net/2009/02/19/your-own-php-dns-daemon/">pinetd und DNS-Server</a>.</p>
<p><a href="http://www.pinetd.net/">Pinetd/2</a> ist eine Bibliothek mit der verschiedene TCP-Dienste direkt über PHP erstellt werden können. Verschiedene Dienste sind bereits implementiert und können aus dem SVN gezogen werden.<br />
<span id="more-217"></span></p>
<pre lang="sh">
$ cd /usr/local
$ svn co http://ookoo.org/svn/pinetd2/trunk pinetd2
(checkout lines)
</pre>
<p>Zu den nun verfügbaren Diensten gehören FTP-Server, DNS-Server, Mailserver (SMTP, POP3, IMAP4) sowie ein eigener HTTP-Server in PHP5. Die Bibliothek benötigt mindestens PHP5.3 damit es läuft.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2009/04/php-dns-daemon-der-eigene-name-server-in-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subversion und Trac kostenlos</title>
		<link>http://www.bastian.name/2009/03/subversion-und-trac-kostenlos.html</link>
		<comments>http://www.bastian.name/2009/03/subversion-und-trac-kostenlos.html#comments</comments>
		<pubDate>Tue, 03 Mar 2009 10:37:00 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[Weblife]]></category>
		<category><![CDATA[datenbank]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://blog.bastian.name/?p=6</guid>
		<description><![CDATA[Ein kleines Baby von uns ist mal wieder auf dem Weg. Wir werden im Q2/2009 ein kostenfreies Subversion und Trac Hosting anbieten. Zusätzlich gibt es zahlreiche Optionen wie automatisches Deploy, Nutzung einer Datenbank+PHP5.
Später, je nachdem wie der Service angenommen wird, werden wir das Angebot auf diverse andere Scriptsprachen (python, ruby), Deployprozesse (build management, externer deploy [...]]]></description>
			<content:encoded><![CDATA[<p>Ein kleines Baby von uns ist mal wieder auf dem Weg. Wir werden im Q2/2009 ein <a href="http://www.demobereich.de/">kostenfreies Subversion und Trac Hosting</a> anbieten. Zusätzlich gibt es zahlreiche Optionen wie automatisches Deploy, Nutzung einer Datenbank+PHP5.</p>
<p>Später, je nachdem wie der Service angenommen wird, werden wir das Angebot auf diverse andere Scriptsprachen (python, ruby), Deployprozesse (build management, externer deploy per scp oder ftp), Datenbanken (eXist, Xindice, postgresql, weitere SQL und <a href="http://www.xmldb-praxis.de/">XML-Datenbanken</a>) erweitern.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2009/03/subversion-und-trac-kostenlos.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>preg_replace Pattern um URLs im Text zu ersetzen</title>
		<link>http://www.bastian.name/2008/12/preg_replace-pattern-um-urls-im-text-zu-ersetzen.html</link>
		<comments>http://www.bastian.name/2008/12/preg_replace-pattern-um-urls-im-text-zu-ersetzen.html#comments</comments>
		<pubDate>Fri, 12 Dec 2008 13:57:00 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[Weblife]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.bastian.name/?p=7</guid>
		<description><![CDATA[Wieder mal was aus der Kategorie gesucht und gefunden.
Ich habe ewig lange schon das optimale Pattern für die Ersetzung von URLs innerhalb eines Textes durch einen korrekten Link gesucht. Jetzt endlich glaube ich es gefunden zu haben.
$text = preg_replace("~[^"=/]{1}((www.[a-z][a-z0-9_..-]*[a-z]{2,6})([a-zA-Z0-9\/\*_-\?&#038;%.]*))[s]?~i", " $2$3 ", $text);
$pattern = '#(^&#124;[^"=]{1})(http://&#124;ftp://&#124;mailto:&#124;news:)([^\s]+)([\s\n]&#124;$)#sm';
$text = preg_replace($pattern,"\1\3\4",$text)."\n";
return $text;
]]></description>
			<content:encoded><![CDATA[<p>Wieder mal was aus der Kategorie gesucht und gefunden.</p>
<p>Ich habe ewig lange schon das optimale Pattern für die Ersetzung von URLs innerhalb eines Textes durch einen korrekten Link gesucht. Jetzt endlich glaube ich es gefunden zu haben.<span id="more-7"></span></p>
<pre lang="php">$text = preg_replace("~[^"=/]{1}((www.[a-z][a-z0-9_..-]*[a-z]{2,6})([a-zA-Z0-9\/\*_-\?&#038;%.]*))[s]?~i", " <a>$2$3</a> ", $text);
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s]+)([\s\n]|$)#sm';
$text = preg_replace($pattern,"\1<a>\3</a>\4",$text)."\n";
return $text;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2008/12/preg_replace-pattern-um-urls-im-text-zu-ersetzen.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Schnell-Anzeigen des Tabelleninhalts in phpMyAdmin 3.0</title>
		<link>http://www.bastian.name/2008/11/schnell-anzeigen-des-tabelleninhalts-in-phpmyadmin-30.html</link>
		<comments>http://www.bastian.name/2008/11/schnell-anzeigen-des-tabelleninhalts-in-phpmyadmin-30.html#comments</comments>
		<pubDate>Tue, 04 Nov 2008 08:12:00 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.bastian.name/?p=12</guid>
		<description><![CDATA[Es gibt ja im pma dieses kleine Icon in der linken Tabellenliste. Wenn man bisher da drauf geklickt hat, dann bekam man rechts sofort den Tabelleninhalt angezeigt. Mit Version 3.0 änderte sich dieses Verhalten standardmäßig. Es wurde (wenn man die config-Dateien beim Upgrade beibehalten hat) immer nur die Struktur angezeigt.
Die Lösung ist recht einfach: Das [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt ja im <b>pma </b>dieses kleine Icon in der linken Tabellenliste. Wenn man bisher da drauf geklickt hat, dann bekam man rechts sofort den Tabelleninhalt angezeigt. Mit <b>Version 3.0</b> änderte sich dieses Verhalten standardmäßig. Es wurde (wenn man die config-Dateien beim Upgrade beibehalten hat) immer nur die Struktur angezeigt.</p>
<p>Die Lösung ist recht einfach: Das Icon und der Link sind jetzt über Konfigurationsvariablen einstellbar. Setzt man <span style='font-family: "Courier New",Courier,monospace;'>$cfg['<b>LeftDefaultTabTable</b>'] = &#8217;sql.php&#8217;;</span> (siehe <a href="http://wiki.cihar.com/pma/Config#LeftDefaultTabTable">phpMyAdminWiki</a>), dann ist das Verhalten wieder wie in den bisherigen Versionen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2008/11/schnell-anzeigen-des-tabelleninhalts-in-phpmyadmin-30.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Datenbank mit Liste Regulärer Ausdrücke Regex</title>
		<link>http://www.bastian.name/2007/09/datenbank-mit-liste-regularer-ausdrucke-regex.html</link>
		<comments>http://www.bastian.name/2007/09/datenbank-mit-liste-regularer-ausdrucke-regex.html#comments</comments>
		<pubDate>Fri, 28 Sep 2007 07:54:00 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[regex]]></category>

		<guid isPermaLink="false">http://blog.bastian.name/?p=27</guid>
		<description><![CDATA[Dr.Web gibt mal wieder gute Tipps. Diesmal über zwei gute zu Regular Expressions.
Die Regular Expression Library bietet ein recht umfangreiches Sammelsurium an fertigen Ausdrücken für jeden Anwendungsfall. Natürlich kann man seine eigenen Tüfteleien auch hinzufügen und damit der Allgemeinheit zur Verfügung stellen. Die Verfügbaren Regex werden in Kategorien wie Email, Uri, Numbers, Strings, Dates and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.drweb.de/weblog/weblog/?p=895">Dr.Web</a> gibt mal wieder gute Tipps. Diesmal über zwei gute zu Regular Expressions.</p>
<p>Die <a href="http://regexlib.com/">Regular Expression Library</a> bietet ein recht umfangreiches Sammelsurium an fertigen Ausdrücken für jeden Anwendungsfall. Natürlich kann man seine eigenen Tüfteleien auch hinzufügen und damit der Allgemeinheit zur Verfügung stellen. Die Verfügbaren Regex werden in Kategorien wie Email, Uri, Numbers, Strings, Dates and Times und Misc eingeordnet und lassen sich darüber auch gut finden. Ein Bewertungssystem, welches falsche oder unbrauchbare Regex aussortiert komplettiert die Seite.</p>
<p>Der <a href="http://www.regex-tester.de/">Regex-Tester</a> bietet dagegen einen ständig verfügbaren Online-Tester, der die eigenen Patterns gezielt gegen Beispiel-Texte matcht.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2007/09/datenbank-mit-liste-regularer-ausdrucke-regex.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Decode HTTP Chunked Transfer</title>
		<link>http://www.bastian.name/2007/09/decode-http-chunked-transfer.html</link>
		<comments>http://www.bastian.name/2007/09/decode-http-chunked-transfer.html#comments</comments>
		<pubDate>Fri, 14 Sep 2007 11:38:00 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmierung]]></category>

		<guid isPermaLink="false">http://blog.bastian.name/?p=30</guid>
		<description><![CDATA[OK, mal wieder gab es ein Problem, welches irgendwie keine im Internet auffindbare Lösung hatte. Ich habe mit PHP einen &#8216;chunked&#8217;-http-body auswerten müssen und der sieht dann in etwa so aus:
12
Dies ist ein Test!
5
Blöd!
0
Jetzt galt es also eine kleine Funktion zu schreiben, welche mir das ganze in folgendes umwandelt:
Dies ist ein Test!Blöd!
Also erstmal geschaut was [...]]]></description>
			<content:encoded><![CDATA[<p>OK, mal wieder gab es ein Problem, welches irgendwie keine im Internet auffindbare Lösung hatte. Ich habe mit PHP einen &#8216;chunked&#8217;-http-body auswerten müssen und der sieht dann in etwa so aus:</p>
<blockquote><p>12<br />
Dies ist ein Test!<br />
5<br />
Blöd!<br />
0</p></blockquote>
<p>Jetzt galt es also eine kleine Funktion zu schreiben, welche mir das ganze in folgendes umwandelt:</p>
<blockquote><p>Dies ist ein Test!Blöd!</p></blockquote>
<p>Also erstmal geschaut was die Zahlen bedeuten. Sind natürlich hex-Werte mit der Länge des folgenden Chunks. Und am Ende kommt eine 0. Also folgende Funktion tut genau das!</p>
<pre>function decode_chunked($string) {
$lines = explode("\r\n",$string);
$i=0;
$length = 999;
$content = '';
foreach($lines as $line) {
$i++;
if ($i%2 == 1) {
$length = hexdec($line);
} elseif ($length == strlen($line)) {
$content .= $line;
}
if ($length == 0)
break;
}
return $content;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2007/09/decode-http-chunked-transfer.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Kleines PHP-Tool zur Triggerverwaltung ohne phpMyAdmin</title>
		<link>http://www.bastian.name/2007/09/kleines-php-tool-zur-triggerverwaltung-ohne-phpmyadmin.html</link>
		<comments>http://www.bastian.name/2007/09/kleines-php-tool-zur-triggerverwaltung-ohne-phpmyadmin.html#comments</comments>
		<pubDate>Sun, 09 Sep 2007 08:31:00 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[datenbank]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.bastian.name/?p=32</guid>
		<description><![CDATA[Da aus verschiedenen Gründen Trigger mit dem phpMyAdmin nicht so recht laufen wollen, hat Binzy Wu ein Tool geschrieben, welches sehr einfach die Triggerverwaltung ermöglicht.
]]></description>
			<content:encoded><![CDATA[<p>Da aus verschiedenen Gründen Trigger mit dem phpMyAdmin nicht so recht laufen wollen, hat <a href="http://www.binzywu.com/blog/">Binzy Wu</a> ein Tool geschrieben, welches sehr einfach die <a href="http://www.binzywu.com/blog/2007/06/26/a-little-mysql-trigger-manage-tool/">Triggerverwaltung</a> ermöglicht.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2007/09/kleines-php-tool-zur-triggerverwaltung-ohne-phpmyadmin.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimistische Programmierung</title>
		<link>http://www.bastian.name/2007/01/optimistische-programmierung.html</link>
		<comments>http://www.bastian.name/2007/01/optimistische-programmierung.html#comments</comments>
		<pubDate>Tue, 30 Jan 2007 08:51:00 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmierung]]></category>

		<guid isPermaLink="false">http://blog.bastian.name/?p=48</guid>
		<description><![CDATA[DAS nenn ich mal optimistische Programmierung:
if(1==2){ [...] }
Wie oft diese Bedingung wohl wahr wird? Und jetzt nicht denken, dass der Ausführungsteil der Bedingung leer ist. Da sind gut und gern 1000 Zeichen Quellcode drin&#8230;
]]></description>
			<content:encoded><![CDATA[<p>DAS nenn ich mal optimistische Programmierung:
<pre>if(1==2){ [...] }</pre>
<p>Wie oft diese Bedingung wohl wahr wird? Und jetzt nicht denken, dass der Ausführungsteil der Bedingung leer ist. Da sind gut und gern 1000 Zeichen Quellcode drin&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2007/01/optimistische-programmierung.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ISBN10 zu ISBN13 Umrechnung mit PHP</title>
		<link>http://www.bastian.name/2006/11/isbn10-zu-isbn13-umrechnung-mit-php.html</link>
		<comments>http://www.bastian.name/2006/11/isbn10-zu-isbn13-umrechnung-mit-php.html#comments</comments>
		<pubDate>Wed, 29 Nov 2006 07:29:00 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[ISBN]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.bastian.name/?p=54</guid>
		<description><![CDATA[Ein kleines Problem stellte sich mir gerade&#8230; wie rechne ich eine alte ISBN-10-Nummer mit 10 Stellen (bzw. 13 mit Bindestrichen)  in eine neue, ab 1.1.2007 vorgeschriebene ISBN-13 mit 13 Stellen umzuwandeln.
function isbn10to13($isbn10){ $isbnclean = preg_replace("/([^d])/",  "",substr($isbn10,0,-1)); if (strlen($isbnclean) != 9) {  return $isbn10; } $isbn="978".$isbnclean;

 $check=0; for ($i=0;$i&#60;12;$i++) {  $check+=(($i%2)*2+1)*$isbn{$i}; } [...]]]></description>
			<content:encoded><![CDATA[<p>Ein kleines Problem stellte sich mir gerade&#8230; wie rechne ich eine alte ISBN-10-Nummer mit 10 Stellen (bzw. 13 mit Bindestrichen)  in eine neue, ab 1.1.2007 vorgeschriebene ISBN-13 mit 13 Stellen umzuwandeln.</p>
<pre>function isbn10to13($isbn10){ $isbnclean = preg_replace("/([^d])/",  "",substr($isbn10,0,-1)); if (strlen($isbnclean) != 9) {  return $isbn10; } $isbn="978".$isbnclean;

 $check=0; for ($i=0;$i&lt;12;$i++) {  $check+=(($i%2)*2+1)*$isbn{$i}; } $check=(10-($check%10))%10; return "978-".substr($isbn10,0,12).$check;}</pre>
<p>Dieses Skript tut eben genau das!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2006/11/isbn10-zu-isbn13-umrechnung-mit-php.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ich bin platziert!</title>
		<link>http://www.bastian.name/2006/04/ich-bin-platziert.html</link>
		<comments>http://www.bastian.name/2006/04/ich-bin-platziert.html#comments</comments>
		<pubDate>Sat, 01 Apr 2006 09:40:00 +0000</pubDate>
		<dc:creator>bastian</dc:creator>
				<category><![CDATA[Arbeit]]></category>
		<category><![CDATA[Privat]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.bastian.name/?p=87</guid>
		<description><![CDATA[Nachdem ich nominiert war, hab ich es nun mit der phpSkypeStatus Klasse bei phpclasses auf Platz 5 geschafft.
Vielen Dank allen Votern.
]]></description>
			<content:encoded><![CDATA[<p>Nachdem ich <a href="http://www.bastian.name/blogger/2006/03/ich-bin-nominiert.html">nominiert</a> war, hab ich es nun mit der <a href="http://beast81.users.phpclasses.org/browse/package/2897.html">phpSkypeStatus Klasse</a> bei <a href="http://beast81.users.phpclasses.org/">phpclasses</a> auf Platz 5 geschafft.</p>
<p>Vielen Dank allen Votern.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bastian.name/2006/04/ich-bin-platziert.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
