Kategorien
Android C C++ CodeIgniter Framework iPhone/iOS Java JavaScript Mobil MySQL PHP Webdeveloper Tools Zend Framework

Teil 1: Clean Code – Regeln für guten, sauberen Code

Sauberen und leicht verständlichen Code zu schreiben ist das höchste Ziel in einem guten IT-Projet. Vieles hängt davon ab:

  • Wartbarkeit
  • Einarbeitungszeit für andere Programmierer, versteht man schnell, was einzelne Funktionen erledigen
  • Robustheit bei Änderungen
  • Testbarkeit, fällt alles zusammen, bei kleinen Änderungen, können schnell stabile Updates bereitgestellt werden
  • Popularität bei anderen Programmierern z.B: bei Open Source Projekten, als negative Beispiel sei XT-Commerce genannt

Das sehr zu empfehlende Standardwerk zu dem Thema ist „Clean Code – Refactoring, Patterns, Testen und Techniken für sauberen Code“ von Robert C. Martin. In diesem Artikel werden Kapitel 1 bis 3 behandelt.

Aussagekräftige Namen

Der Namen einer Variable, Funktion oder Klasse sollte sofort erklären, warum Sie existiert, was sie tut und wie sie benutzt wird. Wenn eine Variable einen Kommentar benötigt, drückt Sie ihren Zweck nicht aus.

Bsp:

int d //Anzahl vergangener Tage
besser ist:
int daysSinceCreation;

Aussprechbare Namen verwenden

Keine Konstrukte mit unklaren Abkürzungen wie: int daSiCre anstatt von daysSinceCreation.

Suchbare Namen verwenden

Moderne IDEs machen das Suchen einfach, aber es nützt nichts, wenn man nach dem Buchstaben e einer Laufvariable suchen muss und von Ergebnissen überschwemmt wird.

Variablen Namen mit einem Buchstaben sind nur als lokale Variablen in kurzen Methoden zu verwenden.

Kategorien
PHP XT-Commerce

XT-Commerce addiert keine Mehrwertsteuer Schweiz

Bei Bestellungen aus dem EU-Ausland berechnet XT-Commerce korrekter Weise keine Mehrwersteuer von 19% auf die Preise im Shop. Die Einstufung, ob ein Kunde aus dem Ausland kommt richtet sich nach der Rechnungsadresse, nicht der Lieferadresse. Man könnte also auf de Idee kommen, als Deutscher Kunde einfach eine Schweizer Rechnungsadresse anzugeben und sich das Produkt nach Deutschland liefern zu lassen.

Wer will ,dass Nicht-EU Kunden auch die Mehrwertsteuer zahlen sollen, der muss in der Datenbank folgenden Zellen ändern:

Tabelle: tax_rates

Die passenden Einträge der Spalte tax_rate auf 19 setzen, damit gilt für alle Artikel, die mehrwertsteuerpflichtig sind, dieser Steuersatz und nicht teilweise 0%.

Kategorien
MySQL PHP Webdeveloper Tools

Installation Eclipse PHP PDT Plugin unter Windows7 Tutorial

Zur professionellen Entwicklung gehört auch eine gute IDE. Ich verwende dafür PHP Storm und davor Netbeans, aber viele Entwickler empfehlen das kostenpflichtige Zend Studio bzw. das ähnliche aber kostenlose Plugin für Eclipse von Zend: das PDT-Plugin.

Die Installation von Eclipse incl. Plugin kann sehr einfach im „All-in-one-Package“ durchgeführt werden.

Kategorien
PHP

PHP POP3 Mails aus Postfach auslesen

Um mit PHP an die E-Mails eines Postfaches zu gelangen über POP3, habe ich diese nützliche Testscript geschrieben. Damit lassen sich alle ungelesen E-Mails anzeigen mit Absender, Betreff, Datum und E-Mail-Body.

$mailserver="pop.foo.de";
$port="110/pop3";
$user="name@foode";
$pass="foo";
getEmailsImap($mailserver, $port, $user, $pass);

//open connection to mailbox, read all unread mails
function getEmailsImap($mailserver, $port, $user, $pass)
{
    $imap = imap_open( "{" . $mailserver . ":" . $port . "}INBOX", $user, $pass );
    if ($imap)
     {
        echo "Connected\n";
        $check = imap_mailboxmsginfo($imap);
        echo "Date: "     . $check->Date    . "<br />\n" ;
        echo "Driver: "   . $check->Driver  . "<br />\n" ;
        echo "Unread: "   . $check->Unread  . "<br />\n" ;
        echo "Size: "     . $check->Size    . "<br />\n" ;

        $totalrows = imap_num_msg($imap);
        //iterate through all unread mails
        for ($index = 0; $index < $totalrows; $index++)
        {
            $header = imap_header($imap, $index + 1);
             //get mail subject
            dump("<h1>".$header->subject."</h1>");
             //get mail sent date
            $prettydate = date(DateTime::ISO8601 , $header->udate);
            dump( $prettydate );
            //get email author
            $email = "{$header->from[0]->mailbox}@{$header->from[0]->host}";
            dump( $email );
            //get mail body
            dump( imap_body($imap, $index + 1));
        }
        //close connection to mailbox
        imap_close($imap);
        return true;
     }
     else
     {
         dump("Can't connect: " . imap_last_error());
         return false;
     }
}
function dump($var)
{
    echo "<pre><div align='left'>";
    print_r($var);
    echo "</div></pre>";
}
Kategorien
SEO

Google SERP Description nicht nachvollziehbar

Bei einem Kunden hatte ich das Problem, dass es unpassenden Text in der Google Suche angezeigt wird, der nicht von der Seite stammt, die ich optimieren wollte:

Verleih, An- und Verkauf von gebrauchten CDs sowie Vermietung des dazugehörigen Equipments.

Wie ich herausgefunden habe, kam dieser Text von dem dmoz.org Eintrag.

Um zu verhindern, dass der Text angezeigt  wird, muss man den folgenden Header setzen (für alle Bots):

<meta name="robots" content="NOODP" />

 

Kategorien
Amazon MWS PHP

Amazon MWS Products API Request Limit

Amazon hat ein nicht ganz einfaches Request Limit eingebaut für die ganze MWS API. Allgemein gilt, dass nicht mehr als 10000 Requests pro Stunde getätigt werden können.

Amazon hat den so genannten Leaky Bucket-Algorithmus gewählt, um den Webservice zu entlasten.

Für die MWS Products API, mit der Artikel Informationen von Amazon bezogen werden können gelten die folgenden Limits aus der MWS Products API Referenz (Stand 6.9.2012).

Operation / Maximum Request Quota / Restore Rate
ListMatchingProducts / 20 / 1 per 5 seconds

GetMatchingProduct  / 20 / 2 Items per second

GetMatchingProductForId/ 20 / 1 Item per second (neu)

GetCompetitivePricingForSKU and  GetCompetitivePricingForASIN / 20  / 10 Items per second

GetLowestOfferListingsForSKU and GetLowestOfferListingsForASIN / 20 / 10 Items per second

GetMyPriceForSKU and GetMyPriceForASIN / 20 / 10 Items per second (neu)

GetProductCategoriesForSKU and GetProductCategoriesForASIN / 20 / 1  per 5 seconds

 maximale Requests für ListMatchingProducts proStunde

Es können 20 Requests am Anfang der Stunde gemacht werden, danach müssen die Punkte wieder aufgefüllt werden. Danach muss über die Restore Rate wieder Punkte aufgefüllt werden. Wenn sich jede Sekunde ein Request wieder auffüllt, ergibt das 3600 pro Stunde, im besten Fall, wenn sich die Requests nicht am Anfang der Stunde anfallen, sondern gleichmäßig verteilt über die ganze Stunde.

Insgesamt ergeben sich für  den ListMatchingProducts Request bei einer Restore Rate von 5 Sekunden maximal 6 * 60 = 360 Requests pro Stunde damit. Pro Request können 20 Items mitgeschickt werden, was bedeutet, dass 7200 Artikel abgefragt werden können im Optimalfall.

Kategorien
Webdeveloper Tools

HTML Image Maps Online generieren

Um Image Maps sind Bilder, die in Zonen aufgeteilt werden können und mit Links oder Javascript auf Clicks von Usern reagieren können.

Es ist sehr aufwendig, die klickbaren Bereiche per Hand zu erstellen, deswegen bin ich auf das kostenlose Online Tool Online Image Map Editor gestoßen.

Damit lassen sich Image Maps, wie die folgende erstellen:.

Der generierte Code muss dann nur noch über die map id mit dem usemap-Tag des Bilder verbunden werden und fertig.

Bsp.

<map id="imgmap2012415151851">
    <area shape="rect" alt="" title="" coords="42,580,700,644" href="" target="_blank" />
    <area shape="rect" alt="" title="" coords="48,686,700,748" href="" target="_blank" />
</map>
<img usemap="#imgmap2012415151851">

zend buch, phonegap buch

Kategorien
PHP WordPress

WordPress eigene Farben und CSS Klassen in den Editor einbauen

Wenn man das Backend customizen und dem TinyMCE Editor eigene Farben und Klassen hinzufügen will, sollte man auf das WordPress Plugin Custom Class Selector zurückgreifen.

Das Plugin ist vom Ansatz her gleich mit der Lösung von WDMAC, welche aber nicht als Plugin verfügbar ist, aber genauso funktioniert und genauso aufwendig zu implementieren ist. Der Vorteil des Plugins ist, dass man auf Updates und Anpassungen  hoffen kann und es deswegen bevorzugen sollte.

Kategorien
JavaScript Web Frontend

Javascript Cookies setzen und auslesen

Die Arbeit mit Cookies in Javascript ist sehr unhandlich, deswegen sollte immer eine Bibliothek benutzt werden, die einem schwer lesbaren Code erspart, sonst muss man sich mit solchem Code anfreunden:

a = document.cookie;
cookiename = a.substr(0,a.search('='));
cookiewert = a.substr(a.search('=')+1,a.search(';'));
if(cookiewert == '')
{
cookiewert = a.substr(a.search('=')+1,a.length);
}

Es empfiehlt sich die Bibliothek Javascript Cookie Library with jQuery bindings and JSON support für das Cookie Handling zu benutzen. Diese kann mit oder ohne jQuery benutzt werden. Mit jQuery sehen die Operationen dann so aus:

$.cookies.set('foo', '0');

var foo = $.cookies.get('foo');
Kategorien
iPhone/iOS

iPhone Mail stürzt ab beim Absenden

Bei mir stürzt beim Verschicken der Mails das Programm ab, weil im Namen des Empfängers ein „|“ enthalten ist. Mit solchen Sonderzeichen kann das iPhone interne Mail Programm nichts anfangen.

Lösung: Empfänger Email löschen und von Hand eintippen, so dass kein Sonderzeichen mehr enthalten.

Beispiel: Also anstelle der gepseicherten Variante „Mutter|Papa“, hinter welche eine Emailadresse steht, einfach eintippen „mail@eltern.de“.