<?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>PHP und  SEO Blog aus Berlin</title>
	<atom:link href="http://www.sebastianviereck.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sebastianviereck.de</link>
	<description>von Sebastian Viereck</description>
	<lastBuildDate>Tue, 15 May 2012 06:47:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>WordPress SEO: Meta Description Tag einbauen</title>
		<link>http://www.sebastianviereck.de/wordpress-seo-meta-description-tag-einbauen/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wordpress-seo-meta-description-tag-einbauen</link>
		<comments>http://www.sebastianviereck.de/wordpress-seo-meta-description-tag-einbauen/#comments</comments>
		<pubDate>Mon, 14 May 2012 13:11:25 +0000</pubDate>
		<dc:creator>Sebastian Viereck</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.sebastianviereck.de/?p=1229</guid>
		<description><![CDATA[WordPress ist sehr sparsam mit Meta-Tags, um das Description Tag einzubauen, muss man folgenden Code in die header.php einbauen: &#60;meta name="description" content="&#60;?php if ( is_single() ) { single_post_title('', true); } else { bloginfo('name'); echo " - "; bloginfo('description'); }  ?&#62;" &#8230; <a href="http://www.sebastianviereck.de/wordpress-seo-meta-description-tag-einbauen/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>WordPress ist sehr sparsam mit Meta-Tags, um das Description Tag einzubauen, muss man folgenden Code in die header.php einbauen:</p>
<pre>&lt;meta name="description" content="&lt;?php if ( is_single() ) {
        single_post_title('', true);
    } else {
        bloginfo('name'); echo " - "; bloginfo('description');
    }
    ?&gt;" /&gt;</pre>
<p>&nbsp;</p>
<div class="su-linkbox" id="post-1229-linkbox"><div class="su-linkbox-label">Verlinken Sie sich!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.sebastianviereck.de/wordpress-seo-meta-description-tag-einbauen/&quot;&gt;WordPress SEO: Meta Description Tag einbauen&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.sebastianviereck.de/wordpress-seo-meta-description-tag-einbauen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android App in den Google Play Market stellen Windows7</title>
		<link>http://www.sebastianviereck.de/android-app-den-google-play-market-stellen-windows7/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=android-app-den-google-play-market-stellen-windows7</link>
		<comments>http://www.sebastianviereck.de/android-app-den-google-play-market-stellen-windows7/#comments</comments>
		<pubDate>Wed, 09 May 2012 17:23:14 +0000</pubDate>
		<dc:creator>Sebastian Viereck</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Mobil]]></category>

		<guid isPermaLink="false">http://www.sebastianviereck.de/?p=1219</guid>
		<description><![CDATA[Wenn man seine hart ercodete App in den Google Play Market stellen will muss man ein paar einfache Schritte durchführen. Im Vergleich zum Aufnahmeprozess im Apple App Store sind diese allerdings mit wenig Aufwand verbunden. Anlegen eines Developer Accounts für &#8230; <a href="http://www.sebastianviereck.de/android-app-den-google-play-market-stellen-windows7/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Wenn man seine hart ercodete App in den Google Play Market stellen will muss man ein paar einfache Schritte durchführen. Im Vergleich zum Aufnahmeprozess im Apple App Store sind diese allerdings mit wenig Aufwand verbunden.</p>
<ol>
<li>Anlegen eines<a href="https://play.google.com/apps/publish" target="_blank"> Developer Accounts</a> für den Play Market. Es muss eine Gebühr von einmalig 25$ gezahlt werden, allerdings zwingend mit einem Google Checkout Account, den man mit einer Kreditkarte (z.B: Visa) verbinden muss.</li>
<li>Die APK-Datei muss mit einem gültigem Zertifikat versehen werden, sonst gibt es eine Fehlermeldung: <em></em></li>
</ol>
<pre><em>Google Play akzeptiert keine mit dem Debug-Zertifikat signierten APK-Dateien. Erstellen Sie ein neues Zertifikat, das mindestens 50 Jahre gültig ist.</em></pre>
<h2>Zertifizieren der App mit einem gültigem Zertifikat</h2>
<p><span id="more-1219"></span></p>
<p>Erstellen eines Zertifikats über die Windows Konsole:</p>
<pre>cd "C:\Program Files\Java\jdk1.6.0_22\bin"
keytool -genkey -v -alias myKey -keyalg RSA -keysize 2048 -validity 10000<code></code></pre>
<p>Daten eingeben, der fertige Key liegt dann unter: <em>C:\Users\YourName\.keystore</em></p>
<p>Mit diesen Daten kann dann mit Hilfe von Eclipse ganz einfach das Projekt signiert werden mit dem Key:</p>
<p><em>File-&gt;Export-&gt;Android-&gt;Export Android Application</em></p>
<p>Projektdaten eingeben und Pfad, wohin die signierte APK- Datei gespeichert werden soll und fertig. Jetzt kann die Datei hochgeladen werden ohne Fehlermeldung.</p>
<p>Danach müssen die App-Daten eingeben werden und Fotos vom Logo sowie mindestens 2 Screenshots hochgeladen werden und die App ist im Google Play Store!</p>
<div class="su-linkbox" id="post-1219-linkbox"><div class="su-linkbox-label">Verlinken Sie sich!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.sebastianviereck.de/android-app-den-google-play-market-stellen-windows7/&quot;&gt;Android App in den Google Play Market stellen Windows7&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.sebastianviereck.de/android-app-den-google-play-market-stellen-windows7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend APIs: einzelne Komponenten verwenden</title>
		<link>http://www.sebastianviereck.de/zend-api-einzelne-komponenten-verwenden/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-api-einzelne-komponenten-verwenden</link>
		<comments>http://www.sebastianviereck.de/zend-api-einzelne-komponenten-verwenden/#comments</comments>
		<pubDate>Tue, 08 May 2012 06:52:51 +0000</pubDate>
		<dc:creator>Sebastian Viereck</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://www.sebastianviereck.de/?p=1212</guid>
		<description><![CDATA[Das Zend Framework enthält viele praktische Schnittstellen zu bekannten APIs: Google Base (Zend_Gdata) Open ID (Zend_OpenId) Zend_Service mit: Zend_Service_Akismet Zend_Service_Amazon Zend_Service_Amazon_EC2 Zend_Service_Amazon_S3 Zend_Service_Audioscrobbler Zend_Service_Delicious Zend_Service_DeveloperGarden Zend_Service_Ebay Zend_Service_Ebay_Finding Zend_Service_Flickr Zend_Service_LiveDocx Zend_Service_Nirvanix Zend_Service_ReCaptcha Zend_Service_ShortUrl Zend_Service_Simpy Zend_Service_SlideShare Zend_Service_StrikeIron Zend_Service_Technorati Zend_Service_Twitter Zend_Service_WindowsAzure Zend_Service_Yahoo Eine &#8230; <a href="http://www.sebastianviereck.de/zend-api-einzelne-komponenten-verwenden/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Das Zend Framework enthält viele praktische Schnittstellen zu bekannten APIs:</p>
<ol>
<li>Google Base (Zend_Gdata)</li>
<li>Open ID (Zend_OpenId)</li>
<li>Zend_Service mit:</li>
</ol>
<ul>
<li>Zend_Service_Akismet</li>
<li>Zend_Service_Amazon</li>
<li>Zend_Service_Amazon_EC2</li>
<li>Zend_Service_Amazon_S3</li>
<li>Zend_Service_Audioscrobbler</li>
<li>Zend_Service_Delicious</li>
<li>Zend_Service_DeveloperGarden</li>
<li>Zend_Service_Ebay</li>
<li>Zend_Service_Ebay_Finding</li>
<li>Zend_Service_Flickr</li>
<li>Zend_Service_LiveDocx</li>
<li>Zend_Service_Nirvanix</li>
<li>Zend_Service_ReCaptcha</li>
<li>Zend_Service_ShortUrl</li>
<li>Zend_Service_Simpy</li>
<li>Zend_Service_SlideShare</li>
<li>Zend_Service_StrikeIron</li>
<li>Zend_Service_Technorati</li>
<li>Zend_Service_Twitter</li>
<li>Zend_Service_WindowsAzure</li>
<li>Zend_Service_Yahoo</li>
</ul>
<p>Eine komplette Liste gibt es <a href="http://framework.zend.com/manual/de/reference.html" target="_blank">hier</a>.</p>
<p>Solche APIs können folgender Maßen eingebunden werden ohne die ganze Webseite als Zend-Projekt programmieren zu müssen (am Bsp. von GBase: Google Base):</p>
<p><span id="more-1212"></span></p>
<pre>set_include_path(get_include_path()
            .':/var/www/Zend/'
            .':/var/www/'
        );
require_once '../functions.php';
require_once 'Loader/Autoloader.php';
        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader-&gt;setFallbackAutoloader(true);

class GoogleShopping {
    private $service = null;
    public function  __construct()
    {
         // Parameters for ClientAuth authentication
         $service = Zend_Gdata_Gbase::AUTH_SERVICE_NAME;
         $user = "foo";
         $pass = "doo";

         // Create an authenticated HTTP client
         $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);

         // Create an instance of the Base service
         try
         {
             $this-&gt;service = new Zend_Gdata_Gbase($client);
             $this-&gt;addProduct();
             $this-&gt;queryFeed();
         }
         catch (Exception $exception)
         {
            $this-&gt;printStacktrace($exception);
         }
    }
    private function printStacktrace($exception)
    {
        $msg = $exception-&gt;getMessage();
        $trace = $exception-&gt;getTraceAsString();
        echo "&lt;div&gt;Error: $msg&lt;p&gt;&lt;pre&gt;$trace&lt;/pre&gt;&lt;/p&gt;&lt;/div&gt;";
    }
    private function addProduct()
    {
         $newEntry = $this-&gt;service-&gt;newItemEntry();

         // Add title
         $title = "PHP Developer Handbook";
         $newEntry-&gt;title = $this-&gt;service-&gt;newTitle(trim($title));

         // Add some content
         $content = "Essential handbook for PHP developers.";
        $newEntry-&gt;content = $this-&gt;service-&gt;newContent($content);
        $newEntry-&gt;content-&gt;type = 'text';

        // Define product type
        $itemType = "Products";
        $newEntry-&gt;itemType = $itemType;

        // Add item specific attributes
        $newEntry-&gt;addGbaseAttribute("product_type", "book", "text");
        $newEntry-&gt;addGbaseAttribute("price", "12.99 USD", "floatUnit");
        $newEntry-&gt;addGbaseAttribute("quantity", "10", "int");
        $newEntry-&gt;addGbaseAttribute("weight", "2.2 lbs", "numberUnit");
        $newEntry-&gt;addGbaseAttribute("condition", "New", "text");
        $newEntry-&gt;addGbaseAttribute("author", "John Doe", "text");
        $newEntry-&gt;addGbaseAttribute("edition", "First Edition", "text");
        $newEntry-&gt;addGbaseAttribute("pages", "253", "number");
        $newEntry-&gt;addGbaseAttribute("publisher", "My Press", "text");
        $newEntry-&gt;addGbaseAttribute("year", "2007", "number");
        $newEntry-&gt;addGbaseAttribute("payment_accepted", "Google Checkout", "text");

        $dryRun = true;
        $createdEntry = $this-&gt;service-&gt;insertGbaseItem($newEntry, $dryRun);        
    }
    private function queryFeed()
    {
         $query = $this-&gt;service-&gt;newItemQuery();
         $query-&gt;setBq('[title:Programming]');
         $query-&gt;setOrderBy('modification_time');
         $query-&gt;setSortOrder('descending');
         $query-&gt;setMaxResults('5');
         $feed = $this-&gt;service-&gt;getGbaseItemFeed($query);
         $this-&gt;displayFeed($feed);
    }
    private function displayFeed($feed)
    {
         foreach ($feed-&gt;entries as $entry) {
           // Get all attributes and print out the name and text value of each
           // attribute
           $baseAttributes = $entry-&gt;getGbaseAttributes();
           foreach ($baseAttributes as $attr) {
             echo "Attribute " . $attr-&gt;name . " : " . $attr-&gt;text . "&lt;br&gt;";
           }
         }
    }

}</pre>
<div class="su-linkbox" id="post-1212-linkbox"><div class="su-linkbox-label">Verlinken Sie sich!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.sebastianviereck.de/zend-api-einzelne-komponenten-verwenden/&quot;&gt;Zend APIs: einzelne Komponenten verwenden&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.sebastianviereck.de/zend-api-einzelne-komponenten-verwenden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VBA Excel nach CSV Tutorial</title>
		<link>http://www.sebastianviereck.de/vba-csv-nach-excel-lesbar-formatieren-tutorial/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=vba-csv-nach-excel-lesbar-formatieren-tutorial</link>
		<comments>http://www.sebastianviereck.de/vba-csv-nach-excel-lesbar-formatieren-tutorial/#comments</comments>
		<pubDate>Fri, 04 May 2012 20:30:40 +0000</pubDate>
		<dc:creator>Sebastian Viereck</dc:creator>
				<category><![CDATA[VBA Excel]]></category>

		<guid isPermaLink="false">http://www.sebastianviereck.de/?p=1207</guid>
		<description><![CDATA[Ein Beispiel Skript für das Umwandeln von Excel Tabellen nach csv-Dateien: Sub csvToExcelTabelle() ExcSheetName = "yyy.xls" Csvsheet = "xxx.csv" Dim excl As Worksheet Dim csv As Worksheet Set csv = Workbooks(Csvsheet).Worksheets(1) j = 1 'csv leeren csv.Cells.Clear For Each excl &#8230; <a href="http://www.sebastianviereck.de/vba-csv-nach-excel-lesbar-formatieren-tutorial/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ein Beispiel Skript für das Umwandeln von Excel Tabellen nach csv-Dateien:</p>
<pre>Sub csvToExcelTabelle()
ExcSheetName = "yyy.xls"
Csvsheet = "xxx.csv"

Dim excl As Worksheet
Dim csv As Worksheet
Set csv = Workbooks(Csvsheet).Worksheets(1)
j = 1

'csv leeren
csv.Cells.Clear

For Each excl In Workbooks(ExcSheetName).Worksheets

    zeilen = excl.UsedRange.Rows.Count
    For i = 3 To zeilen
        'Zahlenformate anpassen
        excl.Cells(i, 13).NumberFormat = "m/d/yyyy"
        excl.Cells(i, 14).NumberFormat = "m/d/yyyy"
        excl.Cells(i, 2).NumberFormat = "h:mm;@"
        excl.Cells(i, 3).NumberFormat = "h:mm;@"

        csv.Cells(j, 1).Value = "D"

        csv.Cells(j, 2).Value = "NO"
        'DATEFROM
        DATEFROM = excl.Cells(i, 13).Value
        csv.Cells(j, 3).Value = DATEFROM

        'DAYOFPERIOD
        DAYOFPERIOD = ""
         For k = 1 To 7
            If (excl.Cells(i, 3 + k).Value = "x") Then
                DAYOFPERIOD = DAYOFPERIOD &amp; k
            End If
         Next k
         csv.Cells(j, 5).Value = DAYOFPERIOD

        'SCHEDULEDTIME
        SCHEDULEDTIME = excl.Cells(i, 2).Value
        csv.Cells(j, 6).Value = Format(SCHEDULEDTIME, "h:mm;@")

        'REMOTE_ und TONAME
        REMOTE__tmp = excl.Cells(i, 1).Value
        pos = InStr(REMOTE__tmp, " (")
        If (pos &lt;&gt; 0) Then
            REMOTE_ = Mid(REMOTE__tmp, pos + 2, Len(REMOTE__tmp) - pos - 2)
            TONAME = Left(REMOTE__tmp, pos - 1)
        Else
            REMOTE_ = ""
            TONAME = ""
        End If
        csv.Cells(j, 7).Value = REMOTE_
        csv.Cells(j, 8).Value = TONAME

        'VIA1
        VIA1 = excl.Cells(i, 12).Value
        csv.Cells(j, 9).Value = VIA1

        j = j + 1
    Next

Next excl

End Sub</pre>
<div class="su-linkbox" id="post-1207-linkbox"><div class="su-linkbox-label">Verlinken Sie sich!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.sebastianviereck.de/vba-csv-nach-excel-lesbar-formatieren-tutorial/&quot;&gt;VBA Excel nach CSV Tutorial&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.sebastianviereck.de/vba-csv-nach-excel-lesbar-formatieren-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SEO: Google Autoren Foto anzeigen</title>
		<link>http://www.sebastianviereck.de/seo-google-autor-author-foto-anzeigen/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=seo-google-autor-author-foto-anzeigen</link>
		<comments>http://www.sebastianviereck.de/seo-google-autor-author-foto-anzeigen/#comments</comments>
		<pubDate>Fri, 04 May 2012 20:16:42 +0000</pubDate>
		<dc:creator>Sebastian Viereck</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.sebastianviereck.de/?p=1203</guid>
		<description><![CDATA[Wenn man sein Foto in den Suchergebnissen neben seinen Google Suchtreffern anzeigen will, muss folgende Schritte unternehmen: Anmeldung bei Google+, im Profil unter macht mit bei die eigene Webseite angeben (Achtung bei mit www und ohne) den Namen des Autors &#8230; <a href="http://www.sebastianviereck.de/seo-google-autor-author-foto-anzeigen/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Wenn man sein Foto in den Suchergebnissen neben seinen Google Suchtreffern anzeigen will, muss folgende Schritte unternehmen:</p>
<ol>
<li><a href="https://plus.google.com/?hl=de" target="_blank">Anmeldung bei Google+</a>, im Profil unter<strong> macht mit bei</strong> die eigene Webseite angeben (Achtung bei mit www und ohne)</li>
<li>den Namen des Autors taggen auf der eigenen Webseite, Bsp: &lt;a href=&#8221;https://plus.google.com/107751823415469819633?rel=author&#8221;&gt;Sebastian  Viereck&lt;/a&gt;</li>
<li><a href="https://plus.google.com/authorship#authorship" target="_blank">Urheberschaft bei Google verifizieren</a> mit einer Adresse der Domain z.B: <script>document.write(str_rot13('frb-tbbtyr@fronfgvnaivrerpx.qr'));</script><noscript>seo-google AT sebastianviereck DOT de</noscript></li>
<li>Anschließend sollte mit dem <a href="http://www.google.com/webmasters/tools/richsnippets" target="_blank">Rich Snippets Testing Tool</a> von Google noch einmal verifiziert werden, ob alle Informationen vorhanden sind. Bei mir musste das Google+ Profile nochmals verknüpft werden, siehe Screenshot</li>
</ol>
<pre>Are you the author? If you have an email with <strong>sebastianviereck.de</strong> and verified it with Google+, please enter your G+ profile to verify your authorship here:</pre>
<p><a href="http://www.sebastianviereck.de/wp-content/uploads/2012/05/google_author_testing_tool.jpg"><img class="alignnone size-full wp-image-1225" title="google_author_testing_tool" src="http://www.sebastianviereck.de/wp-content/uploads/2012/05/google_author_testing_tool.jpg" alt="" width="903" height="888" /></a></p>
<div class="su-linkbox" id="post-1203-linkbox"><div class="su-linkbox-label">Verlinken Sie sich!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.sebastianviereck.de/seo-google-autor-author-foto-anzeigen/&quot;&gt;SEO: Google Autoren Foto anzeigen&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.sebastianviereck.de/seo-google-autor-author-foto-anzeigen/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Teil 2: Clean Code &#8211; richtige und falsche Kommentare</title>
		<link>http://www.sebastianviereck.de/clean-code-richtige-und-falsche-kommentare/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=clean-code-richtige-und-falsche-kommentare</link>
		<comments>http://www.sebastianviereck.de/clean-code-richtige-und-falsche-kommentare/#comments</comments>
		<pubDate>Fri, 04 May 2012 10:39:05 +0000</pubDate>
		<dc:creator>Sebastian Viereck</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[iPhone/iOS]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Mobil]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Frontend]]></category>

		<guid isPermaLink="false">http://www.sebastianviereck.de/?p=1175</guid>
		<description><![CDATA[Nach dem Buch (Kapitel 4):  &#8220;Clean Code &#8211; Refactoring, Patterns, Testen und Techniken für sauberen Code&#8221; von Robert C. Martin. &#8220;Kommentieren Sie schlechten Code nicht &#8211; schreiben Sie ihn um.&#8221; (Brian W. Kernighan und P.J. Plaugher) &#160; Kommentare können beides &#8230; <a href="http://www.sebastianviereck.de/clean-code-richtige-und-falsche-kommentare/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.de/gp/product/3826655486/ref=as_li_ss_il?ie=UTF8&amp;tag=sebastianvier-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=3826655486"><img class="alignleft" style="border: 0pt none;" src="http://ws.assoc-amazon.de/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=3826655486&amp;MarketPlace=DE&amp;ID=AsinImage&amp;WS=1&amp;tag=sebastianvier-21&amp;ServiceVersion=20070822" alt="" width="113" height="160" border="0" /></a>Nach dem Buch (Kapitel 4):  &#8220;<em><a href="http://www.amazon.de/gp/product/3826655486/ref=as_li_ss_tl?ie=UTF8&amp;tag=sebastianvier-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=3826655486">Clean Code &#8211; Refactoring, Patterns, Testen und Techniken für sauberen Code</a></em>&#8221; von <em>Robert C. Martin</em>.</p>
<p>&#8220;Kommentieren Sie schlechten Code nicht &#8211; schreiben Sie ihn um.&#8221;</p>
<p>(Brian W. Kernighan und P.J. Plaugher)</p>
<p>&nbsp;</p>
<p>Kommentare können beides sein, hilfreich und hinderlich:</p>
<ul>
<li>hinderlich, wenn Sie überholt sind und Fehlinformationen liefern</li>
<li>störend, wenn Sie zu lang sind und unnötig</li>
<li>hilfreich, wenn Sie wohlplatziert sind</li>
</ul>
<p>Der Einsatz von Kommentaren &#8220;soll unsere Unfähigkeit ausgleich, uns in unserem Code klar auszudrücken&#8221;(S.85). Bevor man einem Kommentar schreibt, sollte man vorher überlegen, ob der Code nicht noch ausdrucksstarker geschrieben werden könnte.</p>
<p><span id="more-1175"></span></p>
<p><strong>Kommentare sind also nicht als positiv anzusehen.</strong></p>
<p>Das liegt besonders darin, dass sich der Code zwar weiterentwickelt, aber die Kommentare auf der Strecke bleiben, weil Sie z.B. von der IDE versteckt werden.</p>
<p><strong>Die einzige Quelle für genaue und aktuelle Informationen ist der Code selbst.</strong></p>
<p><strong>Bsp: Was ist einfacher zu verstehen?</strong></p>
<pre>//Check if it is working time
if($day &lt; 6 &amp;&amp; $day &gt; 0 &amp;&amp; $time &lt;= 18 &amp;&amp; $time &gt;= 9){

//oder
if(isWorkingTime()){</pre>
<h2>Gute Kommentare</h2>
<ol>
<li><strong>Juristische Kommentare</strong>: Copyright und Autoren-Vermerke am Anfang von Quelldateien. Sie sollten keine Lizenz enthalten, sondern nur auf diese verlinken. Wird durch IDEs ausgeblendet.</li>
<li><strong>Informierende Kommentare</strong>: z.B. bei regulären Ausdrücken, die kompliziert werden können</li>
<li><strong>Absichtserklärung des Programmierers</strong>: Bei interessanten Entscheidungen und Erklärungen der Logik sind Kommentare angebracht, z.B. wenn eine Sortierung bestimmte Objekte bevorzugt</li>
<li><strong>Warnung vor Konsequenzen</strong>: z.B: wenn die Ausführung eines Test-Cases zu lange dauert, sollte dies vermerkt werden. Solche Test-Cases sollten mit <em>@ignore</em> gekennzeichnet werden.</li>
<li><strong>TODO Kommentare</strong>: sind sinnvoll, aber keine Entschuldigung für schlechten Code</li>
<li><strong>Betonung</strong>: besonders wichtige, aber unbedeutend aussehenden Zeilen, sollten kommentiert sein, damit Sie nicht entfernt werden.</li>
</ol>
<h2>Schlechte Kommentare</h2>
<ol>
<li><strong>Geraune</strong>: &#8220;Jeder Kommentar, der Sie zwingt, in anderen Modulen nach einer Bedeutung zu suchen&#8230;ist die Bits nicht wert, die er konsumiert.&#8221; (S.93)</li>
<li><strong>Redundante Kommentare/ Geschwätz</strong>: Bsp. Funktions-Kommentare, die den Code vorlesen und dabei noch Informationen weglassen sind redundant und sogar schädlich. Außerdem machen Sie den Code unübersichtlich. Der Leser wird verleitet die Kommentare zu überlesen.</li>
<li><strong>Irreführende/ falsche Kommentare</strong></li>
<li><strong>vorgeschriebene Kommentare</strong>: Wenn vorgeschrieben ist, dass jede Funktion und Variable einen Kommentar haben muss, entstehen schlechte Kommentare</li>
<li><strong>Tagebuch Kommentare</strong> <img src='http://www.sebastianviereck.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  :In Zeiten von SVN und GIT müssen Änderungen am Code nicht mehr im Head vermerkt werden tagebuchartig.</li>
<li><strong>Kommentare hinter schließenden Klammern</strong>: bei langen Funktionen macht das Sinn, wobei dies immer darauf hindeutet schlecht programmiert zu haben!</li>
<li><strong>Autorennamen von Codeteilen/Änderungen</strong>: gehören ins SVN</li>
<li><strong>Auskommentierter Code</strong>: Andere trauen sich nicht den Code zu löschen, weil er vielleicht wichtig seien könnte und so bleibt es bis zum Ende drin. Gehört in Zeiten von SVN auch nicht mehr in den Code.</li>
<li><strong>HTML-Kommentare</strong>: sind schlecht lesbar, ein Werkzeug sollte das übernehmen, z.B. Javadoc oder phpDocumentor.</li>
<li><strong>kurze Funktionen</strong>: sollten nicht kommentiert werden müssen</li>
<li><strong>Javadoc in nicht öffentlichen APIs</strong>: sind unnötig durch die hohe Formalität und durch viele überflüssige, weil <strong>vorgeschriebenen</strong>, Kommentare</li>
</ol>
<p>zurück zu <a title="Teil 1: Clean Code – Regeln für guten, sauberen Code" href="http://www.sebastianviereck.de/regeln-fur-guten-sauberen-code-clean-code/">Teil 1: Clean Code &#8211; Regeln für guten, sauberen Code</a></p>
<p>Weiterlesen?</p>
<div style=" padding: 5px; margin-bottom: 15px;">
<div style="width: 113px; float: left; margin-right: 5px;">
		<a href="http://www.amazon.de/Clean-Code-Refactoring-Patterns-Techniken/dp/3826655486%3FSubscriptionId%3DAKIAJRTSBZ2KET3GZJZA%26tag%3Dsebastianvier-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D3826655486" target="_blank"><img src="http://ecx.images-amazon.com/images/I/419d8vgWUnL._SL160_.jpg" width="113" height="160" border="0" /></a>
	</div>
<div>
<p><a href="http://www.amazon.de/Clean-Code-Refactoring-Patterns-Techniken/dp/3826655486%3FSubscriptionId%3DAKIAJRTSBZ2KET3GZJZA%26tag%3Dsebastianvier-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D3826655486" target="_blank">Clean Code &#8211; Refactoring, Patterns, Testen und Techniken für sauberen Code: Deutsche Ausgabe</a> (Taschenbuch) <img src="http://g-ecx.images-amazon.com/images/G/03/x-locale/common/customer-reviews/ratings/stars-4-0._V192558579_.gif" width="55" alt="4.0 von 5 Sternen" align="absbottom" title="4.0 von 5 Sternen" height="12" border="0" /></p>
</p></div>
<div style="clear: both;"></div>
</div>
<div class="su-linkbox" id="post-1175-linkbox"><div class="su-linkbox-label">Verlinken Sie sich!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.sebastianviereck.de/clean-code-richtige-und-falsche-kommentare/&quot;&gt;Teil 2: Clean Code &#8211; richtige und falsche Kommentare&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.sebastianviereck.de/clean-code-richtige-und-falsche-kommentare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code kopieren Zeilennummern löschen Regex</title>
		<link>http://www.sebastianviereck.de/code-kopieren-zeilennummern-loschen-regex/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=code-kopieren-zeilennummern-loschen-regex</link>
		<comments>http://www.sebastianviereck.de/code-kopieren-zeilennummern-loschen-regex/#comments</comments>
		<pubDate>Wed, 02 May 2012 18:53:47 +0000</pubDate>
		<dc:creator>Sebastian Viereck</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Mobil]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Frontend]]></category>
		<category><![CDATA[Webdeveloper Tools]]></category>

		<guid isPermaLink="false">http://www.sebastianviereck.de/?p=1171</guid>
		<description><![CDATA[Beim Kopieren von Code von Webseiten(z.B. Zend.com) kann es vorkommen, dass der Code Zeilennummern enthält, z.B. // Parameters for ClientAuth authentication $service = Zend_Gdata_Gbase::AUTH_SERVICE_NAME; $user = &#8220;document.write(str_rot13('fnzcyr.hfre@tznvy.pbz'));sample.user AT gmail DOT com&#8221;; $pass = &#8220;pa$$w0rd&#8221;; // Create an authenticated HTTP client &#8230; <a href="http://www.sebastianviereck.de/code-kopieren-zeilennummern-loschen-regex/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Beim Kopieren von Code von Webseiten(z.B. Zend.com) kann es vorkommen, dass der Code Zeilennummern enthält, z.B.</p>
<div>
<div>
<div>
<ol>
<li>
<div>// Parameters for ClientAuth authentication</div>
</li>
<li>
<div>$service = Zend_Gdata_Gbase::AUTH_SERVICE_NAME;</div>
</li>
<li>
<div>$user = &#8220;<script>document.write(str_rot13('fnzcyr.hfre@tznvy.pbz'));</script><noscript>sample.user AT gmail DOT com</noscript>&#8221;;</div>
</li>
<li>
<div>$pass = &#8220;pa$$w0rd&#8221;;</div>
</li>
<li>
<div></div>
</li>
<li>
<div>// Create an authenticated HTTP client</div>
</li>
<li>
<div>$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);</div>
</li>
<li>
<div></div>
</li>
<li>
<div>// Create an instance of the Base service</div>
</li>
<li>
<div>$service = new Zend_Gdata_Gbase($client);</div>
</li>
</ol>
</div>
<div>Um die Zeilennumern zu löschen, kann mit z.B. mit Netbeans folgenden Befehl ausführen:</div>
<div>STRG+H (SEARCH and REPLACE)</div>
</div>
<div>Find what: [0-9]{1,2}.\n</div>
<div>Replace with: (leer lassen)</div>
<div>Auswählen: Regular Expressions</div>
<div>
<div id="attachment_1172" class="wp-caption alignnone" style="width: 489px"><a href="http://www.sebastianviereck.de/wp-content/uploads/2012/05/netbeans_zeilen_nummern_entfernen.jpg"><img class="size-full wp-image-1172" title="netbeans_zeilen_nummern_entfernen" src="http://www.sebastianviereck.de/wp-content/uploads/2012/05/netbeans_zeilen_nummern_entfernen.jpg" alt="" width="479" height="225" /></a><p class="wp-caption-text">Regular Expressions Netbeans</p></div>
</div>
</div>
<div class="su-linkbox" id="post-1171-linkbox"><div class="su-linkbox-label">Verlinken Sie sich!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.sebastianviereck.de/code-kopieren-zeilennummern-loschen-regex/&quot;&gt;Code kopieren Zeilennummern löschen Regex&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.sebastianviereck.de/code-kopieren-zeilennummern-loschen-regex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP verhindern eines Email Loops  bei Mail Auto Respondern (Endlosschleife)</title>
		<link>http://www.sebastianviereck.de/php-verhindern-email-loop-bei-mail-auto-respondern/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=php-verhindern-email-loop-bei-mail-auto-respondern</link>
		<comments>http://www.sebastianviereck.de/php-verhindern-email-loop-bei-mail-auto-respondern/#comments</comments>
		<pubDate>Wed, 02 May 2012 17:44:46 +0000</pubDate>
		<dc:creator>Sebastian Viereck</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.sebastianviereck.de/?p=1156</guid>
		<description><![CDATA[Ein typisches Problem bei automatischen E-Mail Antworten (Auto Respondern) ist, dass es zu einer Endlosschleife kommen kann, wenn automatisch auf E-Mails geantwortet wird und der Empfänger auch eine automatische E-Mail z.B. eine Abwesenheits-Urlaubs E-Mail verschickt. Das Phänomen nennt man Email &#8230; <a href="http://www.sebastianviereck.de/php-verhindern-email-loop-bei-mail-auto-respondern/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ein typisches Problem bei automatischen E-Mail Antworten (Auto Respondern) ist, dass es zu einer Endlosschleife kommen kann, wenn automatisch auf E-Mails geantwortet wird und der Empfänger auch eine automatische E-Mail z.B. eine Abwesenheits-Urlaubs E-Mail verschickt. Das Phänomen nennt man <a href="http://en.wikipedia.org/wiki/Email_loop" target="_blank">Email Loop</a>.</p>
<p>Der Email Loop kann nur verhindert werden durch ein festgelegtes Limit an Nachrichten an denselben Adressaten. Man sollte z.B: festlegen, dass pro Tag nur eine E-Mail an einen Adressaten geschickt wird per Auto-Responder und dies mittels einer Datenbank checken.</p>
<p>Die Datenbank Abfrage für alle E-Mails, die nicht älter als einen Tag sind und schon beantwortet worden sind,  könnte so aussehen:</p>
<pre> $sql = "SELECT COUNT(response_sent)
         FROM autoresponder
         WHERE email='{$email}' AND date_received &gt; TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 day)) AND response_sent=1";</pre>
<p>Ein Auto-Responder in PHP besteht aus 3 Teilen:</p>
<ol>
<li>dem <a title="PHP POP3 Mails aus Postfach auslesen" href="http://www.sebastianviereck.de/php-pop3-mails-aus-postfach-auslesen/" target="_blank">Abrufen der Emails aus dem Postfach</a></li>
<li>dem Speichern in der Datenbank der Mail-Daten</li>
<li>dem Antworten auf E-Mails</li>
</ol>
<p>Wenn man einen Auto-Responder nicht gleich als solchen enttarnen will, weil sofort eine Antwort geschickt, wollte man einen Cronjob einrichten, der zufällig bestimmt mit einer bestimmten Wahrscheinlichkeit, ob eine E-Mail beantwortet wird oder nicht.</p>
<p>z.B. mit einer Wahrscheinlichkeit von 10%:</p>
<pre>if(rand(0, 1) &lt;= 0.1)
{
answerMail();
}</pre>
<div class="su-linkbox" id="post-1156-linkbox"><div class="su-linkbox-label">Verlinken Sie sich!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.sebastianviereck.de/php-verhindern-email-loop-bei-mail-auto-respondern/&quot;&gt;PHP verhindern eines Email Loops  bei Mail Auto Respondern (Endlosschleife)&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.sebastianviereck.de/php-verhindern-email-loop-bei-mail-auto-respondern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Datenbank Backend generieren Scaffolding</title>
		<link>http://www.sebastianviereck.de/php-datenbank-backend-generieren-scaffolding/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=php-datenbank-backend-generieren-scaffolding</link>
		<comments>http://www.sebastianviereck.de/php-datenbank-backend-generieren-scaffolding/#comments</comments>
		<pubDate>Wed, 02 May 2012 11:39:30 +0000</pubDate>
		<dc:creator>Sebastian Viereck</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdeveloper Tools]]></category>
		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://www.sebastianviereck.de/?p=1150</guid>
		<description><![CDATA[Um schnell eine einfache Möglichkeit für Kunden zu haben, um auf die Datenbank zuzugreifen, kann man das praktische online Tool phpScaffold nutzen. Damit lassen sich schnell Oberflächen generieren und customizen zum Ändern, Einfügen und Entfernen von Datensätzen einer Tabelle. Für &#8230; <a href="http://www.sebastianviereck.de/php-datenbank-backend-generieren-scaffolding/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Um schnell eine einfache Möglichkeit für Kunden zu haben, um auf die Datenbank zuzugreifen, kann man das praktische online Tool <a href="http://www.phpscaffold.com/" target="_blank">phpScaffold </a>nutzen.</p>
<p>Damit lassen sich schnell Oberflächen generieren und customizen zum Ändern, Einfügen und Entfernen von Datensätzen einer Tabelle.</p>
<p>Für größere Projekte sollte man allerdings ein passendes Framework nutzen, welches Scaffolding unterstützt:</p>
<ul>
<li>Cake PHP</li>
<li>Zend Framework</li>
<li>Symfony</li>
<li>Ruby on Rails</li>
</ul>
<p>Bsp Ergebnis:</p>
<p><a href="http://www.sebastianviereck.de/wp-content/uploads/2012/05/php_scaffold.jpg"><img class="alignnone size-full wp-image-1151" title="php_scaffold" src="http://www.sebastianviereck.de/wp-content/uploads/2012/05/php_scaffold.jpg" alt="" width="397" height="238" /></a></p>
<div class="su-linkbox" id="post-1150-linkbox"><div class="su-linkbox-label">Verlinken Sie sich!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.sebastianviereck.de/php-datenbank-backend-generieren-scaffolding/&quot;&gt;PHP Datenbank Backend generieren Scaffolding&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.sebastianviereck.de/php-datenbank-backend-generieren-scaffolding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Online Tool: Regex Generator RegExr &#8211; reguläre Ausdrücke finden</title>
		<link>http://www.sebastianviereck.de/online-tool-regex-generator-regexr/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=online-tool-regex-generator-regexr</link>
		<comments>http://www.sebastianviereck.de/online-tool-regex-generator-regexr/#comments</comments>
		<pubDate>Wed, 02 May 2012 09:15:25 +0000</pubDate>
		<dc:creator>Sebastian Viereck</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdeveloper Tools]]></category>

		<guid isPermaLink="false">http://www.sebastianviereck.de/?p=1141</guid>
		<description><![CDATA[Mit dem wirklich gutem online Tool RegExr lassen sich kinderleicht passende Reguläre Ausdrücke finden, die von anderen Usern erstellt worden sind sowie eigene reguläre Ausdrücke entwickeln. Mit dem PHP Regular Expression Tester lassen sich die Ergebnisse sehr gut online testen: &#8230; <a href="http://www.sebastianviereck.de/online-tool-regex-generator-regexr/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Mit dem wirklich gutem online Tool <a href="http://gskinner.com/RegExr/">RegExr</a> lassen sich kinderleicht passende Reguläre Ausdrücke finden, die von anderen Usern erstellt worden sind sowie eigene reguläre Ausdrücke entwickeln.</p>
<p>Mit dem <a href="http://www.pagecolumn.com/tool/pregtest.htm" target="_blank">PHP Regular Expression Tester</a> lassen sich die Ergebnisse sehr gut online testen:</p>
<p>Bsp: regulären Ausdruck testen auf 3-stellige Zahlen (nicht perfekt, führende Nullen werden nicht ignoriert).</p>
<p><a href="http://www.sebastianviereck.de/wp-content/uploads/2012/05/php_regex_finden.jpg"><img class="alignnone size-full wp-image-1145" title="php_regex_finden" src="http://www.sebastianviereck.de/wp-content/uploads/2012/05/php_regex_finden.jpg" alt="" width="574" height="747" /></a></p>
<div class="su-linkbox" id="post-1141-linkbox"><div class="su-linkbox-label">Verlinken Sie sich!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.sebastianviereck.de/online-tool-regex-generator-regexr/&quot;&gt;Online Tool: Regex Generator RegExr &#8211; reguläre Ausdrücke finden&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.sebastianviereck.de/online-tool-regex-generator-regexr/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: www.sebastianviereck.de @ 2012-05-20 03:35:21 -->
