<?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>MATZE WAS HERE ...</title>
	<atom:link href="http://www.krieck.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.krieck.com</link>
	<description>und bloggte</description>
	<lastBuildDate>Thu, 19 Aug 2010 09:06:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Clean Code – Teil 1</title>
		<link>http://www.krieck.com/software-entwicklung/clean-code-names/</link>
		<comments>http://www.krieck.com/software-entwicklung/clean-code-names/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 05:08:42 +0000</pubDate>
		<dc:creator>Matze</dc:creator>
				<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>

		<guid isPermaLink="false">http://www.krieck.com/?p=169</guid>
		<description><![CDATA[Zur Zeit lese ich mit Begeisterung das Buch &#8220;Clean Code&#8221; von Robert C. Martin. Dies nehme ich zum Anlass in nächster Zeit mehrere Blogposts zu diesem Thema zu veröffentlichen. Was ist sauberer Code? Für mich hat sauberer Code folgende Eigenschaften, er ist: lesbar testbar modular nicht redundant Aussagekräftige Namen Damit der Code lesbar ist, empfiehlt [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Zur Zeit lese ich mit Begeisterung das Buch &#8220;Clean Code&#8221; von Robert C. Martin. Dies nehme ich zum Anlass in nächster Zeit mehrere Blogposts zu diesem Thema zu veröffentlichen.</p>
<p><strong><span style="text-decoration: underline;">Was ist sauberer Code?</span></strong></p>
<p>Für mich hat sauberer Code folgende Eigenschaften, er ist:</p>
<ul>
<li>lesbar</li>
<li>testbar</li>
<li>modular</li>
<li>nicht redundant</li>
</ul>
<p><strong><span style="text-decoration: underline;">Aussagekräftige Namen</span></strong></p>
<p style="text-align: justify;">Damit der Code lesbar ist, empfiehlt es sich aussagekräftige Namen zu verwenden. &#8220;Uncle Bob&#8221; (aka Robert C. Martin) widmete diesem Thema das 2. Kapitel in seinem Buch.</p>
<p style="text-align: justify;">Zu aller erst sollte man <strong><em>zweckbeschreibende Namen wählen</em></strong>. Der Name sollte also den Zweck beschreiben und dabei noch ausdrücken warum er existiert, was er macht und wie er benutzt werden soll.</p>
<p style="text-align: justify;">Um bei der Namenswahl <em><strong>Fehlinformationen vermeiden</strong></em> zu können, ist es wichtig auf irreführende Namen, aber auch z.B. auf die einzelnen Kleinbuchstaben l oder den Großbuchstaben O, zu verzichten, da dies zu Verwechslungen führen kann.</p>
<p style="text-align: justify;">Es kommt darauf an <strong><em>Unterschiede deutlich zu machen</em></strong>. Es sollte dabei vermieden werden den selben oder ähnlichen Namen für unterschiedliche Aufgaben zu benutzen und zum Beispiel &#8220;unbestimmte Leerwörter&#8221; wie Info und Data nicht als Namensanhang zu verwenden.</p>
<p style="text-align: justify;">Ein weiterer Punkt ist das <em><strong>Verwenden von aussprechbaren Namen</strong></em>. Dafür sollten &#8220;verständliche umgangs- oder fachsprachliche Wörter&#8221; benutzt und Abkürzungen vermieden werden.</p>
<p style="text-align: justify;">Wichtig für die korrekte Benamung ist es <em><strong>suchbare Namen zu verwenden</strong></em>, denn einzelne Buchstaben oder Zahlen sind bei einer Suche über den gesamten Code nur schwer zu finden. Es ist zum Beispiel einfacher MAX_TRANSFERS zu finden als die Zahl 3.</p>
<p style="text-align: justify;">Die <em><strong>Codierung zu vermeiden</strong></em> ist ebenfalls ein Punkt um aussagekräfte Namen zu erhalten. Für Robert C. Martin ist es dabei unnötig die ungarische Notation zu verwenden, Member-Präfixe sind wenn man moderne IDE&#8217;s benutzt ebenso unnötig.</p>
<p style="text-align: justify;">Der Leser sollte den Namen beim lesen nicht mental übersetzen müssen. Es ist zum Beispiel unsauber wenn im Code die Variable v verwendet wird und dabei mental in Volumen übersetzt werden muss. Daher sollte man <em><strong>mentale Mappings vermeiden</strong></em>.</p>
<p style="text-align: justify;">Für die Benamung von Klassennamen gilt, dass diese keine Verben sein sollten, sondern &#8220;ein Substantiv oder substantivischer Ausdruck&#8221;. Dabei sollte man z.B. auf Manager, Processor, Data und Info als Namen bzw. Anhang verzichten. Im Gegensatz zu den Klassennamen sollten die Methodennamen ein Verb sein bzw. aus einem Ausdruck mit einem Verb bestehen.</p>
<p style="text-align: justify;">Es macht auch <em><strong>wenig Sinn humorige Namen zu verwenden</strong></em>, da diese meist nicht den Zweck für die Verwendung wiederspiegeln. Ein Beispiel wäre hier eatMyShorts() für eine abort() Methode.</p>
<p style="text-align: justify;">Des weiteren gilt: <em><strong>ein Wort pro Konzept</strong></em>, zum Beispiel sollte eine Methode zum Datenauslesen an einer Stelle nicht fetch() heißen, wenn an anderer Stelle im Code für das selbe Konzept retrieve() als Methodenname verwendet wird.</p>
<p style="text-align: justify;">In aller Regel sollten die <em><strong>Namen der Lösungsdomän verwendet</strong></em> werden. Dabei sollte möglichst auf Fachbegriffe aus der Informatik, Algorithmennamen, Patternnamen oder mathematische Begriffe zurück gegriffen werden. Den <em><strong>Namen aus der Problemdomän zu verwenden</strong></em>, sollte man nur, wenn keine Fachbegriffe möglich sind.</p>
<p style="text-align: justify;">Zusammenfassend kann gesagt werden, wenn man sich an diese wenigen Regeln hält, sollte man als Entwickler aussagekräftige Namen erhalten. Dies führt dann zu einem lesbareren und damit sauberern Code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.krieck.com/software-entwicklung/clean-code-names/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nächstes PHP UserGroup &#8211; Treffen</title>
		<link>http://www.krieck.com/termine/php-usergroup-treffen/</link>
		<comments>http://www.krieck.com/termine/php-usergroup-treffen/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 07:19:21 +0000</pubDate>
		<dc:creator>Matze</dc:creator>
				<category><![CDATA[Termine]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Usergroup]]></category>

		<guid isPermaLink="false">http://www.krieck.com/?p=162</guid>
		<description><![CDATA[Es ist endlich wieder soweit, am 06.04.2010 um 19:30 Uhr im &#8220;Zimmer frei&#8221; in der Kohlschütterstraße 9 in Halle findet das nächste Usertreffen der PHPUG Halle statt.]]></description>
			<content:encoded><![CDATA[<p>Es ist endlich wieder soweit, am <strong>06.04.2010</strong> um <strong>19:30 Uhr</strong> im <strong>&#8220;Zimmer frei&#8221;</strong> in der Kohlschütterstraße 9 in Halle findet das nächste Usertreffen der <a href="http://www.phpug-halle.de/articles/27/naechstes-usertreffen" target="_blank">PHPUG Halle</a> statt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.krieck.com/termine/php-usergroup-treffen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GeoIP mit PHP</title>
		<link>http://www.krieck.com/php/geoip-mit-php/</link>
		<comments>http://www.krieck.com/php/geoip-mit-php/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 06:01:48 +0000</pubDate>
		<dc:creator>Matze</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[GeoIP]]></category>

		<guid isPermaLink="false">http://www.krieck.com/?p=120</guid>
		<description><![CDATA[Wie die Überschrift verrät, soll es heute um GeoIP&#8217;s gehen. Unter einer GeoIP versteht man die Zuordung einer IP-Adresse zu ihrer geographischen Herkunft, auch Geotargeting genannt. Über GeoIP-Datenbanken ist es möglich festzustellen in welchem Ort sich der Provider des Besuchers befindet. Eine freie Datenbank mit einer PHP Schnittstelle bietet MaxMind mit GeoLiteCity an. Dabei wird [...]]]></description>
			<content:encoded><![CDATA[<p>Wie die Überschrift verrät, soll es heute um GeoIP&#8217;s gehen. Unter einer GeoIP versteht man die Zuordung einer IP-Adresse zu ihrer geographischen Herkunft, auch <a href="http://de.wikipedia.org/wiki/Geotargeting" target="_blank">Geotargeting</a> genannt. Über GeoIP-Datenbanken ist es möglich festzustellen in welchem Ort sich der Provider des Besuchers befindet.</p>
<p>Eine freie Datenbank mit einer PHP Schnittstelle bietet <a href="http://www.maxmind.com/" target="_blank">MaxMind</a> mit <a href="http://www.maxmind.com/app/geolitecity" target="_blank">GeoLiteCity</a> an. Dabei wird die Datenbank in einer <a href="http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz" target="_blank">Binärversion</a> angeboten die ca 30MB groß ist und nach eigenen Angaben 99,5% Treffergenauigkeit haben soll.</p>
<p>Zugriff auf die Binärdatei erhält man über die <a href="http://www.maxmind.com/app/php" target="_blank">PHP-API</a> von MaxMind. Diese lässt sich schnell in den eigenen Code einbinden:</p>
<pre class="brush: php">

require_once &#039;geoipcity.inc&#039;;
require_once &#039;geoipregionvars.php&#039;;

$sClientIp = $_SERVER[&#039;REMOTE_ADDR&#039;];

$hGeoIp  = geoip_open( &#039;/path/to/GeoLiteCity.dat&#039;, GEOIP_STANDARD );
$oRecord = geoip_record_by_addr( $hGeoIp, $sClientIp );

geoip_close( $hGeoIp );

echo &#039;City: &#039;  . $oRecord-&gt;city;
</pre>
<p>Ein mögliches Einsatzgebiet ist, dass man durch die Verwendung von Geotargeting dem Besucher der Webseite gezielt Werbung aus dessen Region anzeigen kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.krieck.com/php/geoip-mit-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1. PHP UserGroup &#8211; Treffen</title>
		<link>http://www.krieck.com/termine/1-php-usergroup-treffen/</link>
		<comments>http://www.krieck.com/termine/1-php-usergroup-treffen/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 09:57:27 +0000</pubDate>
		<dc:creator>Matze</dc:creator>
				<category><![CDATA[Termine]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Usergroup]]></category>

		<guid isPermaLink="false">http://www.krieck.com/?p=111</guid>
		<description><![CDATA[Heute (11.11.2009) 19 Uhr findet im Halleschen Brauhaus das erste UserGroup &#8211; Treffen der PHPUG Halle statt. Link zum Termin]]></description>
			<content:encoded><![CDATA[<p>Heute (11.11.2009) 19 Uhr findet im Halleschen Brauhaus das erste UserGroup &#8211; Treffen der PHPUG Halle statt.</p>
<p><a href="http://www.phpug-halle.de/articles/5/erstes-treffen-der-phpug-halle" target="_blank">Link zum Termin</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.krieck.com/termine/1-php-usergroup-treffen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unittests mit SuperProxy</title>
		<link>http://www.krieck.com/php/unittests-mit-superproxy/</link>
		<comments>http://www.krieck.com/php/unittests-mit-superproxy/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 09:06:46 +0000</pubDate>
		<dc:creator>Matze</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[UnitTests]]></category>

		<guid isPermaLink="false">http://www.krieck.com/?p=29</guid>
		<description><![CDATA[Heute möchte ich euch jemanden vorstellen: SuperProxy Bei SuperProxy handelt es sich um eine Klasse, die es ermöglicht auf private und protected Methoden und Member zuzugreifen. Dies macht Sinn, wenn man in seinen UnitTests nicht nur das public interface testen möchte. Hierzu bindet man die SuperProxy Klasse einfach in seinen Test ein und übergibt ihr [...]]]></description>
			<content:encoded><![CDATA[<p>Heute möchte ich euch jemanden vorstellen:</p>
<p style="text-align: center;"><strong>SuperProxy</strong></p>
<p>Bei SuperProxy handelt es sich um eine Klasse, die es ermöglicht auf private und protected Methoden und Member zuzugreifen. Dies macht Sinn, wenn man in seinen UnitTests nicht nur das public interface testen möchte.</p>
<p style="text-align: left;"><span id="more-29"></span>Hierzu bindet man die SuperProxy Klasse einfach in seinen Test ein und übergibt ihr den Namen der zu testenden Klasse:</p>
<pre class="brush: php">$oProxy = SuperProxy::getProxy(  &#039;MyClass&#039; );</pre>
<p style="text-align: left;">Benötigt die zu testende Klasse Parameter für den constructor, kann man diese als 2. Parameter in einem array an den SuperProxy übergeben:</p>
<pre class="brush: php">$oProxy = SuperProxy::getProxy(  &#039;MyClass&#039;, array( $sParam1, $iParam2 ) );</pre>
<p style="text-align: left;">Nun kann man wie auf public Methoden und Member auch auf die protected und private Member und Methoden zugreifen.</p>
<pre class="brush: php">
$oProxy-&gt;_sMyProtectedMember = &#039;new protected value&#039;;
$oProxy-&gt;_myProtecedFunction();

$oProxy-&gt;_sMyPrivateMember = &#039;new private value&#039;;
$oProxy-&gt;_myPrivateFunction();</pre>
<p>Der SuperProxy ist OpenSource. Die Klasse wurde bei <a href="http://www.phpclasses.org/browse/package/5659.html" target="_blank">PHPClasses.org</a> veröffentlicht und war dort für den &#8220;Innovation Award&#8221; für den Monat September nominiert, dabei belegte die SuperProxy &#8211; Klasse den 5. Platz <img src='http://www.krieck.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<p><script src="http://www.phpclasses.org/browse/package/5659/format/badge.js">
</script></p>
<p>Natürlich steht der SuperProxy auch hier im Downloadbereich zur Verfügung.<br />
<a href="http://www.krieck.com/?page_id=12">Hier klicken</a></p>
<p>Viel Spaß beim testen!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.krieck.com/php/unittests-mit-superproxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

