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“.

Kategorien
Phonegap/Cordova

Phonegap Teil3: Basics und das erste Programm

Die Programmierung mit Phonegap erfolgt zum größten Teilin HTML(5) Javascript und CSS(3). Es wrd kein nativer Code benötigt, es kann aber per Plugin nativer Code benutzt werden.

Testen von mobilen Anwendungen

iOS: Safari, Develop->User Agent->Mobile Safari (iPhone, iPad)

Android: Firefox Addon: User Agent Switcher und fertige Listen mit User Agents.

Es wird empfohlen einen Webkit Browser (Safari oder Chrome) zum normalen Entwickeln zu benutzen, aufgrund der häufigen Verwendung auf den Zielsystemen.

Kategorien
Xbox Kinect SDK

Kinect SDK Tutorial Installation unter Windows 7

Um die Gestenerkennung der Xbox Kinect unter Windows nutzen zu können, kann man die Kinect an seinen PC anschließen und damit interagieren. Eine Kinect Quickstart Videosammlung von Microsoft gibt es hier.

Es ist zwingend Windows 7 oder Windows Embedded Standard 7 nötig für die Kinect Kamera und mindestens Dual-Core 2.66-GHz CPU und 2 GB Ram und natürlich ein USB 2.0-Steckplatz. Es läuft auf 32bit sowie 64bit Prozessoren.

Softwaretechnisch ist zwingend DirectX9.0c von Nöten, anderen Versionen sind nicht (abwärts) kompatibel.

Bei den Kinect Kameras gibt es 2 Versionen, eine normale „Xbox 360″ Version und eine „Kinect for Windows„- Profi Version (Preis aktuell: 200€ bei Amazon).

Die Vorteile der  Kinect for Windows zur Xbox Kinect

  • Nearmode„, mit dem man Daten aus einer Entfernung von min 40cm (1.3 feet)  empfangen kann, d.h. aus einer normalen PC-Arbeitsplatz-Entfernung. Die Standard Kinect arbeitet empfohlener Maßen bei einer Entfernung von um die 2m (1,8m – 3m, je nach Anzahl Personen)
  • Deutlich verbesserte Personenerkennung
  • Kontrolle, welche Person durch den Sensor getrackt werden soll
  • Zum Verwenden und Starten von kommerzieller Software (ausgenommen Xbox Spielen) benötigt man die Profi-Version, zum Entwickeln reicht jedoch die Konsolen-Variante aus.
  • unterstützt bis zu vier Kinect-Sensoren pro Computer
  • verbesserte Spracherkennung

Man kann die Versionen an dem Schriftzug auf dem Gerät unterscheiden: normal „XBOX 360“ rechts frontal, Profi-Near Version: „Kinect„.

Kinect for Windows:

normale Xbox Kinect Kauf Varianten:

Eine interessante Erweiterung für die Standard-Kinect ist die Kinect Zoom Weitwinkel-Linse. Damit können auch Entfernung von 0,8 bis 4m realisiert werden für einen niedrigen Preis. Die Qualität ist nicht besonders gut für Spiele, aber für Programme kann die Linse durchaus empfehlenswert sein.

Leider wird bei bei vor längerer Zeit gekauften Konsolen nicht unbedingt ein USB-Anschluss mitgeliefert, es muss also möglichweise erstmal ein Adapter her. Dieser kann entweder gekauft oder auf abenteuerliche Weise selber gebaut werden.

Kategorien
Webdeveloper Tools

Webseitentext in beliebiger Form erstellen

Ein schönes Online Tool zum Erstellen von beliebigen Textformen bietet csstextwrap.com an. Der Code kann direkt kopiert werden und die Browser-Kompatibilität/SEO durch die Auswahl unter 3 Implementierungsarten (CSS oder JS) sichergestellt werden.

Demo:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam pede. Donec iaculis, purus at porta tristique, pede nisi rhoncus pede, non nonummy augue nunc in tortor. Nunc gravida, nisl ac tempor rutrum, risus odio pharetra eros, eu feugiat diam nisi sit amet sem. Pellentesque habitant morbi tristique senectus et netus et malesuada fsdfsdfames ac turpis egestas. Nam quis neque at odio laoreet convallis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Cras cursus ullamcorper sapien. Morbi in velit vel mi cursus commodo. Sed hendrerit tellus eget sem. Morbi quam. Nulla auctor massa non odio. Aenean viverra faucibus lectus.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam pede. Donec iaculis, purus at porta tristique, pede nisi rhoncus pede, non nonummy augue nunc in tortor. Nunc gravida, nisl ac tempor rutrum, risus odio pharetra eros, eu feugiat diam nisi sit amet sem.