<?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 GEBHARDT</title>
	<atom:link href="http://www.davidgebhardt.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.davidgebhardt.de</link>
	<description></description>
	<lastBuildDate>Mon, 30 Apr 2012 12:14:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Fotografie</title>
		<link>http://www.davidgebhardt.de/2012/04/fotografie-2/</link>
		<comments>http://www.davidgebhardt.de/2012/04/fotografie-2/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 12:14:58 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Fotografie]]></category>

		<guid isPermaLink="false">http://www.davidgebhardt.de/?p=859</guid>
		<description><![CDATA[Da das Thema Webentwicklung gerade bei mir pausiert, könnt ihr auf Google+ oder bei Flickr gern nachsehen, was ich in der Zwischenzeit mache.]]></description>
			<content:encoded><![CDATA[<p>Da das Thema Webentwicklung gerade bei mir pausiert, könnt ihr auf <a title="Google+" href="https://plus.google.com/109148239386532754650/posts" target="_blank">Google+</a> oder bei <a title="Flickr Fotostream" href="http://www.flickr.com/photos/david-gebhardt-photography/" target="_blank">Flickr</a> gern nachsehen, was ich in der Zwischenzeit mache.</p>
<div style="padding: 0; overflow: hidden; margin: 0; width: 500px;"><a style="text-decoration: none;" title="Old Mansion" href="http://www.flickr.com/photos/david-gebhardt-photography/7127729515/in/photostream/"><img style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;" src="http://farm8.staticflickr.com/7235/7127729515_e2b9c108fb_s.jpg" alt="Old Mansion" /></a><a style="text-decoration: none;" title="Berlin in the morning" href="http://www.flickr.com/photos/david-gebhardt-photography/6981571388/in/photostream/"><img style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;" src="http://farm8.staticflickr.com/7187/6981571388_33b02387d2_s.jpg" alt="Berlin in the morning" /></a></div>
<div style="font-size: 0.8em; margin-top: 0px; margin-bottom: 5px;"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.davidgebhardt.de/2012/04/fotografie-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL: GROUP_CONCAT() &#8211; Mächtige Funktion zum Auslesen von unbestimmt vielen Werten</title>
		<link>http://www.davidgebhardt.de/2011/10/mysql-group_concat-machtige-funktion-zum-auslesen-von-unbestimmt-vielen-werten/</link>
		<comments>http://www.davidgebhardt.de/2011/10/mysql-group_concat-machtige-funktion-zum-auslesen-von-unbestimmt-vielen-werten/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 18:37:40 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.davidgebhardt.de/?p=833</guid>
		<description><![CDATA[In einigen Situationen muss auf gegebenen Datenquellen aufgebaut werden. Dabei hat man nicht immer die Crème de la Crème der normalisierten, standardisierten und durchdachten Datenaufbewahrung vor sich, sondern zweifelsohne auch deutlich andere Geschichten zu erzählen. Erst kürzlich ist mir wieder &#8230; <a href="http://www.davidgebhardt.de/2011/10/mysql-group_concat-machtige-funktion-zum-auslesen-von-unbestimmt-vielen-werten/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In einigen Situationen muss auf gegebenen Datenquellen aufgebaut werden. Dabei hat man nicht immer die Crème de la Crème der normalisierten, standardisierten und durchdachten Datenaufbewahrung vor sich, sondern zweifelsohne auch deutlich andere Geschichten zu erzählen. Erst kürzlich ist mir wieder ein Fall untergekommen, bei dem ich einen neuen Helfer entdeckte, der in dieser Situation Gold wert war.</p>
<p><span id="more-833"></span>Die Daten, die ich vor mir hatten, waren automatisch erzeugt und äußerst ungünstig in der Datenbank abgelegt. Die erste Abbildung zeigt schematisch wie die Daten aufbereitet waren.</p>
<p><a href="http://www.davidgebhardt.de/wp-content/uploads/2011/10/table.jpg"><img class="aligncenter size-full wp-image-835" title="Tabelle" src="http://www.davidgebhardt.de/wp-content/uploads/2011/10/table.jpg" alt="Ausgangstabelle" width="261" height="303" /></a>Die Tabelle enthält Daten zu Veranstalungen (Beispiel ist fiktiv). Das erste Element (ID=1) hat zwei Einträge zu component_ID=1. Dies sind die Redner. Hier Peter und Hans. Die Komponente 2 beinhaltet die Information, ob eine Kostenübernahme stattfindet, die Komponente 3 die Veranstaltungsorte/den Veranstaltungsort und die Komponente 4 die Anzahl der möglichen Gäste.</p>
<p>Das &#8220;Problem&#8221; liegt auf der Hand: Zu einzelnen Komponenten liegen mehrere Werte/Einträge vor. Will man diese Daten unkompliziert auslesen mit Hilfe von MySQL und dabei folgende Darstellungsform erreichen, ist eine kreative Lösung oder eine gute Funktion gefragt.</p>
<p><a href="http://www.davidgebhardt.de/wp-content/uploads/2011/10/zieltabelle.jpg"><img class="aligncenter size-full wp-image-836" title="Zieltabelle" src="http://www.davidgebhardt.de/wp-content/uploads/2011/10/zieltabelle.jpg" alt="Zieltabelle" width="583" height="82" /></a>Um dies zu erreichen, habe ich die MySQL-Funktion GROUP_CONCAT() genutzt und in meinen PHP-Code zum Auslesen der Daten eingebaut.</p>
<pre class="brush: sql; title: ; notranslate">

SELECT

`parent`.`id` AS `id`,

(SELECT GROUP_CONCAT(content) FROM `events` `child` WHERE `child`.`id` = `parent`.`id` AND component_ID = 1) AS &quot;Redner&quot;,
(SELECT GROUP_CONCAT(content) FROM `events` `child` WHERE `child`.`id` = `parent`.`id` AND component_ID = 2) AS &quot;Kostenuebernahme&quot;,
(SELECT GROUP_CONCAT(content) FROM `events` `child` WHERE `child`.`id` = `parent`.`id` AND component_ID = 3) AS &quot;Kostenuebernahme&quot;,
(SELECT GROUP_CONCAT(content) FROM `events` `child` WHERE `child`.`id` = `parent`.`id` AND component_ID = 4) AS &quot;Anzahl&quot;

FROM events `parent`
group by id
</pre>
<p>Mehr Informationen und Beispiele zu den Funktion befinden sich in der <a title="MySQL Hilfe" href="http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat">MySQL Hilfe</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.davidgebhardt.de/2011/10/mysql-group_concat-machtige-funktion-zum-auslesen-von-unbestimmt-vielen-werten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lang ist es her</title>
		<link>http://www.davidgebhardt.de/2011/09/lang-ist-es-her/</link>
		<comments>http://www.davidgebhardt.de/2011/09/lang-ist-es-her/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 08:17:15 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Generelles]]></category>
		<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[Ankündigung]]></category>

		<guid isPermaLink="false">http://www.davidgebhardt.de/?p=829</guid>
		<description><![CDATA[Hallo liebe Leser, seit geraumer Zeit gab es hier keine neuen Beiträge mehr. Doch das soll nicht auf Ewig so bleiben. Ich bin bemüht wieder Zeit zu finden, um diese Seite wieder lesenswert zu machen und neue Inhalte zur Verfügung &#8230; <a href="http://www.davidgebhardt.de/2011/09/lang-ist-es-her/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hallo liebe Leser,</p>
<p>seit geraumer Zeit gab es hier keine neuen Beiträge mehr. Doch das soll nicht auf Ewig so bleiben. Ich bin bemüht wieder Zeit zu finden, um diese Seite wieder lesenswert zu machen und neue Inhalte zur Verfügung zu stellen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.davidgebhardt.de/2011/09/lang-ist-es-her/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS3 Ribbon Generator</title>
		<link>http://www.davidgebhardt.de/2011/04/css3-ribbon-generator/</link>
		<comments>http://www.davidgebhardt.de/2011/04/css3-ribbon-generator/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 15:04:19 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Ribbons]]></category>

		<guid isPermaLink="false">http://www.davidgebhardt.de/?p=817</guid>
		<description><![CDATA[Ribbons sind in Mode. Auf einer Vielzahl von Webseiten werden sie als gestalterisches, als auch als strukturierendes Element verwendet. Bisher wurden dazu Bilder verwendet, die den Effekt erzielten. Mit CSS3 ist dies jedoch auch ohne zur Hilfenahme von Bildern möglich. &#8230; <a href="http://www.davidgebhardt.de/2011/04/css3-ribbon-generator/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="attachment_818" class="wp-caption alignnone" style="width: 514px"><a href="http://www.davidgebhardt.de/wp-content/uploads/2011/04/CSS_Ribbons.jpg"><img class="size-full wp-image-818  " title="CSS Ribbons" src="http://www.davidgebhardt.de/wp-content/uploads/2011/04/CSS_Ribbons.jpg" alt="CSS Ribbons" width="504" height="125" /></a><p class="wp-caption-text">Ribbons, generiert ohne Verwendung von Bildern. Möglich mit CSS3.</p></div>
<p>Ribbons sind in Mode. Auf einer Vielzahl von Webseiten werden sie als gestalterisches, als auch als strukturierendes Element verwendet. Bisher wurden dazu Bilder verwendet, die den Effekt erzielten. Mit CSS3 ist dies jedoch auch ohne zur Hilfenahme von Bildern möglich. Eure eigenen Ribbons könnt ihr Euch im <a title="3D Ribbon Generator" href="http://www.css3d.net/ribbon-generator/">3D Ribbon Generator</a> erzeugen lassen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.davidgebhardt.de/2011/04/css3-ribbon-generator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Geo Location Java Script: Mit Java Script Ortung mobiler Endgeräte durchführen</title>
		<link>http://www.davidgebhardt.de/2011/04/geo-location-java-script-mit-java-script-ortung-mobiler-endgerate-durchfuhren/</link>
		<comments>http://www.davidgebhardt.de/2011/04/geo-location-java-script-mit-java-script-ortung-mobiler-endgerate-durchfuhren/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 21:27:11 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Demo]]></category>
		<category><![CDATA[Java Script]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[gears]]></category>
		<category><![CDATA[geojs]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Smartphones]]></category>

		<guid isPermaLink="false">http://www.davidgebhardt.de/?p=807</guid>
		<description><![CDATA[Mobile Endgeräte werden immer wichtiger bei der Konzeption von Internetseiten und -anwendungen. Ebenso die damit einhergehende Möglichkeit die Geräte über GPS oder über das GSM Netz zu orten um ortbasierte Dienste anbieten zu können. Dabei muss jedoch nicht in jedem &#8230; <a href="http://www.davidgebhardt.de/2011/04/geo-location-java-script-mit-java-script-ortung-mobiler-endgerate-durchfuhren/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="attachment_808" class="wp-caption alignleft" style="width: 160px"><a href="http://www.davidgebhardt.de/wp-content/uploads/2011/04/google-latitude-map-view.jpg"><img class="size-thumbnail wp-image-808" title="Google Latitude" src="http://www.davidgebhardt.de/wp-content/uploads/2011/04/google-latitude-map-view-150x150.jpg" alt="Google Latitude" width="150" height="150" /></a><p class="wp-caption-text">Ortung für mobile Endgeräte nur mit Java Script</p></div>
<p>Mobile Endgeräte werden immer wichtiger bei der Konzeption von Internetseiten und -anwendungen. Ebenso die damit einhergehende Möglichkeit die Geräte über GPS oder über das GSM Netz zu orten um ortbasierte Dienste anbieten zu können.</p>
<p>Dabei muss jedoch nicht in jedem Fall eine App auf dem Handy installiert werden, die auf den eingebauten GPS Sensor zugreift, für viele Geräte genügt schon die Java Script Library <a title="Geo Location JavaScript" href="http://code.google.com/p/geo-location-javascript/">Geo Location Java Script</a> in Verbindung mit <a title="Google Gears" href="http://gears.google.com/">Google Gears</a>. Dies lässt eine Ortung über moderne Browser von normalen Computern zu, aber auch auf mobilen Endgeräten.</p>
<p><span id="more-807"></span>Ich habe für die Nutzung von geoJS ein Beispiel implementiert, das den Längen- und Breitengrad ausliest und ausgibt. Die Genauigkeit ist dabei auf zwei Kommastellen begrenzt. Ich habe während der Umsetzung bemerkt, dass die Genauigkeit bei mobilen Endgeräten (Testgerät war ein Blackberry Bold 9000) erst nach etwa drei Durchläufen besser wird, weil zu Beginn der Sensor (GPS) teilweise nicht bereit ist. Deshalb werden im Beispiel fünf aufeinanderfolgende Abfragen durchgeführt.</p>
<p>Um geoJS nutzen zu können, muss vorerst die Gears Library und das geoJS initialisiert werden.</p>
<pre class="brush: xml; title: ; notranslate">

&lt;script src=&quot;http://code.google.com/apis/gears/gears_init.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;lib/geo.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js&quot;&gt;&lt;/script&gt;
</pre>
<p>Mit <em>geo_position_js.init()</em> kann die Verfügbarkeit der Unterstützung von geoJS geprüft werden. Mit der Funktion <em>geo_position_js.getCurrentPosition()</em> kann dann die Position abgerufen werden. Callback-Funktionen für den erfolgreichen und fehlerhaften Abruf können definiert werden. Weiterhin können viele andere Parameter für die Bestimmung der Koordinaten gesetzt werden. Diese Parameter orientieren sich an den <a title="W3C Geo Api Specs" href="http://dev.w3.org/geo/api/spec-source.html">Vorgaben des W3C</a>.</p>
<pre class="brush: jscript; title: ; notranslate">
	&lt;script type=&quot;text/javascript&quot;&gt;
		&lt;!--
		$(document).ready(function(){
			var num = 0;

			if(geo_position_js.init()){
				$(&quot;#response&quot;).html(&quot;getting the data...&quot;);
				updateLoop();
			}
			else{
				alert(&quot;Functionality not available&quot;);
			}

			function updateLoop(){
				num++;
				geo_position_js.getCurrentPosition(success_callback,error_callback,{enableHighAccuracy:true, maximumAge:0, responseTime:20});
				if(num&lt;5){
					setTimeout(updateLoop, 2500);
				}
			};

			function success_callback(p){
				$(&quot;#response&quot;).html('lat='+p.coords.latitude.toFixed(2)+';lon='+p.coords.longitude.toFixed(2));
				$(&quot;#updateElement&quot;).append('lat='+p.coords.latitude.toFixed(2)+';lon='+p.coords.longitude.toFixed(2)+&quot;&lt;br /&gt;&quot;);
			}

			function error_callback(p){
				$(&quot;#response&quot;).html('error='+p.code);
				$(&quot;#updateElement&quot;).append('error='+p.code+'/message='+p.message);
			}
		});

		--&gt;
	&lt;/script&gt;
</pre>
<p>Offiziell werden durch das Java Script folgende Plattformen unterstützt: iOS, Android, Blackberry OS, Browsers with Google Gears support (Android, Windows Mobile), Nokia Web Run-Time (Nokia N97,&#8230;), webOS Application Platform (Palm Pre), Torch Mobile Iris Browser, Mozilla Geode. Negativ ist, dass in fast allen Smartphones muss das Geo Location Java Script explizit in den Browsereinstellungen erlaubt werden. Desweiteren lässt die maximale Genauigkeit von zwei Stellen nach dem Komma eine maximale Ortung auf eine Gegend im Umkreis von etwa 500m zu.</p>
<p>[<a title="Beispiel Geo Location Java Script" href="/wp-content/beispiele/geojs/">Beispiel ansehen</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.davidgebhardt.de/2011/04/geo-location-java-script-mit-java-script-ortung-mobiler-endgerate-durchfuhren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quellcode Metriken für die Qualitätsbestimmung in der Softwareentwicklung</title>
		<link>http://www.davidgebhardt.de/2011/04/quellcode-metriken-fur-die-qualitatsbestimmung-in-der-softwareentwicklung/</link>
		<comments>http://www.davidgebhardt.de/2011/04/quellcode-metriken-fur-die-qualitatsbestimmung-in-der-softwareentwicklung/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 10:11:43 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Wirtschaftsinformatik]]></category>
		<category><![CDATA[CMMI]]></category>
		<category><![CDATA[ISO9001]]></category>
		<category><![CDATA[Metriken]]></category>
		<category><![CDATA[Quellcodequalität]]></category>

		<guid isPermaLink="false">http://www.davidgebhardt.de/?p=790</guid>
		<description><![CDATA[&#8220;Obwohl die Vorteile von Maßen bestechend sind, nutzen nur ein Drittel aller Softwarefirmen Techniken, um ihre Produkte und Projekte systematisch zu messen und zu steuern.&#8221; (Balzert) Metriken können wichtige Instrumente zur Bestimmung von Softwarequalität sein. Sie sind in der Lage &#8230; <a href="http://www.davidgebhardt.de/2011/04/quellcode-metriken-fur-die-qualitatsbestimmung-in-der-softwareentwicklung/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>&#8220;Obwohl die Vorteile von Maßen bestechend sind, nutzen nur ein Drittel aller Softwarefirmen Techniken, um ihre Produkte und Projekte systematisch zu messen und zu steuern.&#8221; (Balzert)</p></blockquote>
<p style="text-align: left;">Metriken können wichtige Instrumente zur Bestimmung von Softwarequalität sein. Sie sind in der Lage dem Auftraggeber bei der Abnahme Indizien zu liefern und für die Softwarehersteller in Hinblick auf <a title="CMMI" href="http://www.sei.cmu.edu/cmmi/">CMMI</a> und <a title="ISO9001:2008" href="http://de.wikipedia.org/wiki/Qualit%C3%A4tsmanagementnorm">ISO9001</a> Anforderungen von hoher Bedeutung.</p>
<p style="text-align: left;"><span id="more-790"></span></p>
<p style="text-align: left;">Die folgende Tabelle stellt eine Auswahl an möglichen Kriterien zur Bestimmung von Softwarequalität dar:</p>
<table style="font-size: 11px;" border="1" cellspacing="0" cellpadding="0" width="620">
<tbody>
<tr>
<td width="127">Zyklomatische Komplexität</td>
<td width="228">Die zyklomatische Komplexität (McCabe Metrik)  ist ein Maß für die  Komplexität eines Moduls. Es beruht auf einem  Kontrollflussgraphen und gibt   Aufschluss über die Komplexität einer Funktion.</td>
<td width="168">V(G) &lt; 20</td>
</tr>
<tr>
<td width="127">Länge von Anweisungen</td>
<td width="228">Die <em>Länge von Anweisungen</em> sollte   auf Grund der Lesbarkeit und Wartbarkeit nicht zu lang sein.</td>
<td width="168">Länge einer Anweisung &lt; 80 Zeichen</td>
</tr>
<tr>
<td width="127">Kommentaranteil im Quelltext</td>
<td width="228">Um die Lesbarkeit des Quelltextes   sicherzustellen, sollte der Quelltext kommentiert sein.</td>
<td width="168">Anteil der Kommentare am Quelltext &gt;   10% des Quelltextes</td>
</tr>
<tr>
<td width="127">Anzahl Richtlinienverstöße</td>
<td width="228">Richtlinien (<em>Codingguidelines</em>), wie   z.B. die Benennung von Variablen und Funktionen müssen eingehalten sein.</td>
<td width="168">Anzahl der Verstöße gegen Codingguidelines   = 0 Verstöße</td>
</tr>
<tr>
<td width="127">Lesbarkeit</td>
<td width="228">Der Quelltext sollte eine gewisse Anzahl   an <em>WhiteSpaces</em> (Leerzeilen) enthalten</td>
<td width="168">Anteil der Whitespaces im Quelltext &gt;   10% des Quelltextes</td>
</tr>
<tr>
<td width="127">Anzahl eLoC (Effective Lines of Code) pro   Funktion</td>
<td width="228">Die Anzahl der <em>effektiven Lines of Code</em> sollte nicht zu groß werden. Dies würde für eine schlechte modulare Aufteilung   sprechen und macht den Code unnötig unübersichtlich.</td>
<td width="168">Anzahl eLoC in einer Funktion &lt; 200   eLoCs</td>
</tr>
<tr>
<td width="127">Anzahl der Funktionen pro Klasse</td>
<td width="228">Eine Klasse sollte sich in der Anzahl   ihrer Methoden beschränken. Dies ist bei guter Modularität gegeben.</td>
<td width="168">Anzahl der Funktionen pro Klasse &lt; 25   Funktionen (ausgeschlossen getter und setter)</td>
</tr>
<tr>
<td width="127">Kommentare zu Funktionen</td>
<td width="228">Jede Funktion sollte mit einem <em>Kommentar</em> vor sich beschrieben werden.</td>
<td width="168">Anzahl der Funktionen ohne Kommentar = 0   Funktionen</td>
</tr>
</tbody>
</table>
<p>Um diese Metriken zu ermitteln muss jedoch nicht viel Aufwand entstehen. Durch Tools wie <a title="Standard Ressource Metrics" href="http://msquaredtechnologies.com/">Standard Ressource Metrics</a> kann dies für viele Programmiersprachen (wie hier Java und C) automatisiert werden.</p>
<div id="attachment_794" class="wp-caption alignnone" style="width: 310px"><a href="http://www.davidgebhardt.de/wp-content/uploads/2011/04/SRM.png"><img class="size-medium wp-image-794 " title="Standard Ressource Metrics Tool" src="http://www.davidgebhardt.de/wp-content/uploads/2011/04/SRM-300x215.png" alt="Standard Ressource Metrics Tool" width="300" height="215" /></a><p class="wp-caption-text">Standard Ressource Metrics Tool</p></div>
<p>Das Programm Ressource Standard Metrics bietet dem Nutzer auf einfache Weise die Möglichkeit Quellcodes nach verschiedenen Kriterien und Metriken zu untersuchen.</p>
<p>Nachdem die Projektdateien initial eingelesen wurden kann eine Analyse des Projektes gestartet werden.</p>
<p>Eine Beispielhafte Auswertung ist in der folgenden Abbildung dargestellt.</p>
<div id="attachment_795" class="wp-caption alignnone" style="width: 310px"><a href="http://www.davidgebhardt.de/wp-content/uploads/2011/04/SRM_Ergebnis.png"><img class="size-medium wp-image-795 " title="Standard Ressource Metrics Auswertung" src="http://www.davidgebhardt.de/wp-content/uploads/2011/04/SRM_Ergebnis-300x274.png" alt="Standard Ressource Metrics Auswertung" width="300" height="274" /></a><p class="wp-caption-text">Standard Ressource Metrics Auswertung</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.davidgebhardt.de/2011/04/quellcode-metriken-fur-die-qualitatsbestimmung-in-der-softwareentwicklung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Translate API per Javascript nutzen um Inhalt in verschiedenen Sprachen darzustellen</title>
		<link>http://www.davidgebhardt.de/2011/04/google-translate-api-per-javascript-nutzen-um-inhalt-in-verschiedenen-sprachen-darzustellen/</link>
		<comments>http://www.davidgebhardt.de/2011/04/google-translate-api-per-javascript-nutzen-um-inhalt-in-verschiedenen-sprachen-darzustellen/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 18:41:52 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Demo]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Translation API]]></category>

		<guid isPermaLink="false">http://www.davidgebhardt.de/?p=783</guid>
		<description><![CDATA[David Walsh hat in seinem Blog vor kurzem einen interessanten Artikel verfasst. Dabei hat er gezeigt, wie mit Hilfe von Java Script auf die Ressourcen der Google Translate API zurückgegriffen werden kann. Da ich an dieser Möglichkeit gefallen gefunden habe, &#8230; <a href="http://www.davidgebhardt.de/2011/04/google-translate-api-per-javascript-nutzen-um-inhalt-in-verschiedenen-sprachen-darzustellen/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.davidgebhardt.de/wp-content/uploads/2011/04/gt.jpg"><img class="alignright size-full wp-image-785" title="Google Translate" src="http://www.davidgebhardt.de/wp-content/uploads/2011/04/gt.jpg" alt="Google Translate" width="295" height="122" /></a><a title="David Walsh" href="http://davidwalsh.name/google-translate-api">David Walsh</a> hat in seinem Blog vor kurzem einen interessanten Artikel verfasst. Dabei hat er gezeigt, wie mit Hilfe von Java Script auf die Ressourcen der Google Translate API zurückgegriffen werden kann. Da ich an dieser Möglichkeit gefallen gefunden habe, stelle ich hier die jQuery basierte Lösung vor.</p>
<p><span id="more-783"></span>Ich habe dabei die Lösung von David Walsh nur auf jQuery umgestellt und auf die Ausgangssprache Deutsch umgestellt. Hier der Code und die Demo:</p>
<pre class="brush: xml; title: ; notranslate">

		&lt;p&gt;
			&lt;a class=&quot;languages&quot; rel=&quot;en&quot;&gt;English&lt;/a&gt; / &lt;a class=&quot;languages&quot; rel=&quot;es&quot;&gt;Spanish&lt;/a&gt; / &lt;a class=&quot;languages&quot; rel=&quot;it&quot;&gt;Italian&lt;/a&gt; / &lt;a class=&quot;languages&quot; rel=&quot;fr&quot;&gt;French&lt;/a&gt; / &lt;a class=&quot;languages&quot; rel=&quot;de&quot;&gt;German&lt;/a&gt;
		&lt;/p&gt;

		&lt;p id=&quot;test&quot;&gt;&lt;/p&gt;

		&lt;div id=&quot;languageBlock&quot;&gt;
			&lt;p&gt;Frühling läßt sein blaues Band &lt;br /&gt;
			Wieder flattern durch die Lüfte&lt;br /&gt;
			Süße, wohlbekannte Düfte&lt;br /&gt;
			Streifen ahnungsvoll das Land&lt;br /&gt;
			Veilchen träumen schon,&lt;br /&gt;
			Wollen balde kommen&lt;br /&gt;
			Horch, von fern ein leiser Harfenton!&lt;br /&gt;
			Frühling, ja du bist's!&lt;br /&gt;
			Dich hab ich vernommen!&lt;/p&gt;
		&lt;/div&gt;
</pre>
<p>Dies ist der HTML Code, der die Links für die unterschiedlichen Sprachen zeigt und den zu übersetzenden und zu ersetzenden Text.</p>
<pre class="brush: jscript; title: ; notranslate">

		&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js&quot;&gt;&lt;/script&gt;
		&lt;script src=&quot;https://www.google.com/jsapi?key=ABQIAAAAM293J-z6EiutYYyYCdbDjxTFpJys8Ug36oseIKLaQsYgrdpSIRRjkkqoMFBNQDs5nSMkWyg1tZy5NQ&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot;&gt;
			// Set the original/default language
			var lang = &quot;de&quot;;
			var currentClass = &quot;currentLang&quot;;

			// Load the language lib
			google.load(&quot;language&quot;, &quot;1&quot;);

			$(function() {
				$(&quot;.languages&quot;).css(&quot;cursor&quot;, &quot;pointer&quot;);
				// Retrieve the DIV to be translated.
				var translateDiv = $(&quot;#languageBlock&quot;);
				// Define a function to switch from the currentlanguage to another
				var callback = function(result) {
					if(result.translation) {
						translateDiv.html(result.translation);
					}
				};
				// Add a click listener to update the DIV
				$(&quot;.languages&quot;).click(function(){
					// Get the &quot;to&quot; language
					var toLang = $(this).attr(&quot;rel&quot;);
					// Set the translation into motion
					google.language.translate(translateDiv.html(), lang, toLang, callback);
					// Set the new language
					lang = toLang;
					// Add class to current
					$(this).siblings().removeClass(currentClass);
					$(this).addClass(currentClass);
				});
			});
		&lt;/script&gt;
</pre>
<p>In dem zweiten Listing ist der modifizierte Java Script Code zu sehen.</p>
<p>[<a title="Google Translation API Demo" href="http://www.davidgebhardt.de/wp-content/beispiele/Google-Translation-API/index.html">Zur Demo</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.davidgebhardt.de/2011/04/google-translate-api-per-javascript-nutzen-um-inhalt-in-verschiedenen-sprachen-darzustellen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GMail Motion: Steuerung durch Körpersprache</title>
		<link>http://www.davidgebhardt.de/2011/04/gmail-motion-steuerung-durch-korpersprache/</link>
		<comments>http://www.davidgebhardt.de/2011/04/gmail-motion-steuerung-durch-korpersprache/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 09:49:54 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Generelles]]></category>
		<category><![CDATA[GMail]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Motion]]></category>

		<guid isPermaLink="false">http://www.davidgebhardt.de/?p=779</guid>
		<description><![CDATA[Google hat wieder ein grandioses Projekt zum Abschluss gebracht: GMail Motion. Damit ist es möglich durch Körperbewegungen die E-Mail Bearbeitung zu steuern. Ich bin beeindruckt. April, April! Danke an Google für diesen Aufwand.]]></description>
			<content:encoded><![CDATA[<p>Google hat wieder ein grandioses Projekt zum Abschluss gebracht: <a title="GMail Motion" href="http://mail.google.com/mail/help/motion.html">GMail Motion</a>. Damit ist es möglich durch Körperbewegungen die E-Mail Bearbeitung zu steuern. Ich bin beeindruckt.</p>
<p><object width="550" height="370"><param name="movie" value="http://www.youtube.com/v/Bu927_ul_X0&amp;rel=0&amp;hl=en_US&amp;feature=player_embedded&amp;version=3" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed type="application/x-shockwave-flash" width="550" height="370" src="http://www.youtube.com/v/Bu927_ul_X0&amp;rel=0&amp;hl=en_US&amp;feature=player_embedded&amp;version=3" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p><span id="more-779"></span>April, April! Danke an Google für diesen Aufwand.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.davidgebhardt.de/2011/04/gmail-motion-steuerung-durch-korpersprache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: Funktion zum Anzeigen von Textunterschieden (PHP diff Funktion)</title>
		<link>http://www.davidgebhardt.de/2011/03/php-funktion-zum-anzeigen-von-textunterschieden-php-diff-funktion/</link>
		<comments>http://www.davidgebhardt.de/2011/03/php-funktion-zum-anzeigen-von-textunterschieden-php-diff-funktion/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 11:03:25 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Compare Texts]]></category>
		<category><![CDATA[Diff]]></category>
		<category><![CDATA[Textvergleich]]></category>

		<guid isPermaLink="false">http://www.davidgebhardt.de/?p=774</guid>
		<description><![CDATA[In einem meiner aktuellen Projekten bin ich auf den simpleDiff Algorithmus von Paul Butler gestoßen. Die Funktionalität ist ähnlich der diff Funktion bei Linux Betriebssystemen und zeigt hinzugefügte und gelöschte Textpassagen beim Vergleich zweier Versionen. Ich möchte an dieser Stelle &#8230; <a href="http://www.davidgebhardt.de/2011/03/php-funktion-zum-anzeigen-von-textunterschieden-php-diff-funktion/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In einem meiner aktuellen Projekten bin ich auf den simpleDiff Algorithmus von <a title="Paul Butler simpleDiff PHP Algorithmus" href="http://paulbutler.org/archives/a-simple-diff-algorithm-in-php/">Paul Butler</a> gestoßen. Die Funktionalität ist ähnlich der <a title="Wikipedia Linux diff Funktion" href="http://de.wikipedia.org/wiki/Diff">diff Funktion bei Linux Betriebssystemen</a> und zeigt hinzugefügte und gelöschte Textpassagen beim Vergleich zweier Versionen.</p>
<p><span id="more-774"></span>Ich möchte an dieser Stelle den Code vorstellen, der aus nur 18 Zeilen PHP besteht. Paul Butler hat daran eine ganze Weile gepfeilt, aber es hat sich gelohnt. Die Anwendung der Funktion ist recht einfach und die Ausgabe ich sofort in HTML und verwendet für die Auszeichnung der Änderungen die Tags &lt;del&gt; (gelöscht) und &lt;ins&gt; (hinzugefügt).</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

function diff($old, $new){
	foreach($old as $oindex =&gt; $ovalue){
		$nkeys = array_keys($new, $ovalue);
			foreach($nkeys as $nindex){
			$matrix[$oindex][$nindex] = isset($matrix[$oindex - 1][$nindex - 1]) ?
			$matrix[$oindex - 1][$nindex - 1] + 1 : 1;
			if($matrix[$oindex][$nindex] &gt; $maxlen){
				$maxlen = $matrix[$oindex][$nindex];
				$omax = $oindex + 1 - $maxlen;
				$nmax = $nindex + 1 - $maxlen;
			}
		}
	}
	if($maxlen == 0) return array(array('d'=&gt;$old, 'i'=&gt;$new));
		return array_merge(
			diff(array_slice($old, 0, $omax), array_slice($new, 0, $nmax)),
			array_slice($new, $nmax, $maxlen),
			diff(array_slice($old, $omax + $maxlen), array_slice($new, $nmax + $maxlen)));
}

function htmlDiff($old, $new){
	$diff = diff(explode(' ', $old), explode(' ', $new));
	foreach($diff as $k){
		if(is_array($k))
			$ret .= (!empty($k['d'])?&quot;&lt;del&gt;&quot;.implode(' ',$k['d']).&quot;&lt;/del&gt; &quot;:'').
			(!empty($k['i'])?&quot;&lt;ins&gt;&quot;.implode(' ',$k['i']).&quot;&lt;/ins&gt; &quot;:'');
		else $ret .= $k . ' ';
	}
	return $ret;
}

$text_orginal = &quot;Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.&quot;;

$text_diktat = &quot;Lorem ipsum dolor sit amet, sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo dolores duo dolores et ea rebum. Stet clita gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur dolores sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.&quot;;

echo htmlDiff($text_orginal,$text_diktat);

?&gt;
</pre>
<p>Dabei entsteht folgende Ausgabe:</p>
<div id="attachment_776" class="wp-caption aligncenter" style="width: 628px"><a href="http://www.davidgebhardt.de/wp-content/uploads/2011/03/simpleDiff.jps_.jpg"><img class="size-full wp-image-776" title="Ausgabe der PHP Diff Funktion" src="http://www.davidgebhardt.de/wp-content/uploads/2011/03/simpleDiff.jps_.jpg" alt="Ausgabe der PHP Diff Funktion" width="618" height="225" /></a><p class="wp-caption-text">Ausgabe der PHP Diff Funktion</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.davidgebhardt.de/2011/03/php-funktion-zum-anzeigen-von-textunterschieden-php-diff-funktion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Übersicht SAP Tabellen und Felder</title>
		<link>http://www.davidgebhardt.de/2011/02/ubersicht-sap-tabellen-und-felder/</link>
		<comments>http://www.davidgebhardt.de/2011/02/ubersicht-sap-tabellen-und-felder/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 11:27:44 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Wirtschaftsinformatik]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[BKPF]]></category>
		<category><![CDATA[BSEG]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP Tabellen]]></category>

		<guid isPermaLink="false">http://www.davidgebhardt.de/?p=763</guid>
		<description><![CDATA[Wiedermal möchte ich ein SAP-Thema vorstellen. Dabei handelt es sich diesmal nicht um die Programmierung mit Hilfe von ABAP, sondern um eine sehr gute Übersicht über die wichtigsten SAP Tabellen. Diese eignet sich vor allem, wenn Daten mit ABAP abgefragt &#8230; <a href="http://www.davidgebhardt.de/2011/02/ubersicht-sap-tabellen-und-felder/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.davidgebhardt.de/wp-content/uploads/2011/02/SAP_TABELLEN.jpg"><img class="alignleft size-thumbnail wp-image-764" title="SAP_TABELLEN" src="http://www.davidgebhardt.de/wp-content/uploads/2011/02/SAP_TABELLEN-150x150.jpg" alt="SAP Tabellen" width="150" height="150" /></a>Wiedermal möchte ich ein SAP-Thema vorstellen. Dabei handelt es sich diesmal nicht um die Programmierung mit Hilfe von ABAP, sondern um eine sehr gute Übersicht über die wichtigsten SAP Tabellen. Diese eignet sich vor allem, wenn Daten mit ABAP abgefragt und verarbeitet werden sollen und nicht genau bekannt ist welche Felder relevant sind, welche Datentypen vorliegen oder aus welchen Ursprungstabellen sich von SAP generierte logische Tabellen zusammensetzen.</p>
<p><span id="more-763"></span></p>
<p>Möchte man beispielsweise mit ABAP die Abfrageergebnisse der Tabellen BKPF (Belegköpfe) und BSEG (Belegsegmente) miteinander kombinieren (JOIN), wird ein Fehler bei der Ausführung des ABAP Programms zurückgegeben. Bei der Tabelle BSEG handelt es sich um eine von SAP generierte logische Tabelle &#8211; sie ist physisch nicht vorhanden. Auf der Suche nach einer Lösung für dieses Problem bin ich auf eine <a title="SAP Tabellen Übersicht" href="http://www.eberstein.de/SAPTabellen/Export/">sehr gute Übersichtsseite</a> zu den Tabellen gestoßen und konnte so die einzelnen Bestandteile, aus der die logische Tabelle BSEG besteht schnell ausmachen und mit einem UNION schnell selbst verbinden.</p>
<p>Desweiteren sind Informationen zu den einzelnen Datenfeldern in Tabellen vorhanden &#8211; diese helfen natürlich auch die Inhalte besser zu verstehen.</p>
<p style="text-align: center;">
<div id="attachment_765" class="wp-caption aligncenter" style="width: 559px"><a href="http://www.davidgebhardt.de/wp-content/uploads/2011/02/BKPF.jpg"><img class="size-full wp-image-765 " title="BKPF" src="http://www.davidgebhardt.de/wp-content/uploads/2011/02/BKPF.jpg" alt="Beispiel der Tabellendarstellung BKPF" width="549" height="265" /></a><p class="wp-caption-text">Tabelleninformationen BKPF</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.davidgebhardt.de/2011/02/ubersicht-sap-tabellen-und-felder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

