Kategorien
Diverses Web Frontend

Google Adsense zeigt keine Werbung an Bad Request 400

Ich hatte auf meiner Verdienst-Webseite das Problem, dass ich 5 Adsense Werbebanner in verschiedenen Formaten eingefügt habe. Davon haben 2 Werbebanner nicht funktioniert und auf dem Firefox konnte man sehen, dass die BannerJavascripte mit Fehlercode 400 Bad Request geladen wurden.

Adsense Bad Request 400 mit Firebug-Plugin

Um das Problem zu lösen, habe ich alle nicht angezeigten Banner entfernt aus der Webseite und einzeln wieder eingefügt. Das Ergebnis war, dass ein Skyscraper-Banner nicht funktioniert hat, weil es teilweise unter einem anderen angezeigt wurde und deswegen nicht geladen wurde.

Die Lösung ist also das böse Banner zu finden und alle anderen funktionieren nach dem Entfernen des Übeltäters.

Kategorien
HTML5 JavaScript Web Frontend WebGL

HTML5 Canvas Text auf Canvas schreiben richtiger Zeilenumbruch

Wenn man einen bestimmten Text auf einen Canvas schreiben will und dafür bestimmen will, wann ein Text umgebrochen werden muss, kann man die folgende Funktion benutzen, die aus einem Text in Array macht in Abhängigkeit des Canvas.

Bsp:

var canvas = document.createElement("canvas");
var context = canvas.getContext("2d");
//vorher muss Schriftgröße des Canvas gesetzt werden
context.font = "30px arial";
textArr  = textToArray ("Wordpress eigene Farben und CSS Klassen in den Editor einbauen", 300, context);
//textArr enhält ["Wordpress Plugin"] und ["selber erstellen Tutorial"]
textToArray = function(text, maxWidth, context){
    var textArr = new Array();
    var fragment = "";
    var lastCutPostion = 0;
    var lastPossibleCutPosition = 0;
    var charCounter = 0;
    var position = 0;
    $j.each(text, function(index, char) {
        if(char == " " && charCounter != 0)
        {
            fragment  = text.substring (lastCutPostion, position);
            //console.log(fragment);
            textWidth = context.measureText(fragment).width;
            //console.log(textWidth);
            if(textWidth > maxWidth)
            {
                //console.log("max width reched");
                fragment  = text.substring (lastCutPostion, lastPossibleCutPosition);
                //console.log(fragment);
                textArr.push(fragment);
                charCounter = -1 + (position - lastPossibleCutPosition);
                lastCutPostion = lastPossibleCutPosition + 1;
            }
            lastPossibleCutPosition = position;
        }
        position++;
        charCounter++;
    });
    //do not forget the last Word
    if(charCounter > 0)
    {
        fragment  = text.substring(lastCutPostion, text.length);
        textWidth = context.measureText(fragment).width;
        //console.log(textWidth);
        if(textWidth > maxWidth)
        {
            fragment  = text.substring (lastCutPostion, lastPossibleCutPosition);
            lastCutPostion = lastPossibleCutPosition + 1;
            textArr.push(fragment);
            fragment  = text.substring(lastCutPostion, text.length);
        }
        textArr.push(fragment);
    }
    return textArr;
}
Kategorien
HTML5 Web Frontend WebGL

Canvas rotieren um 180 Grad

Zum rotieren eines Canvas um den Mittelpunkt um 180 oder 90 Grad, kann man folgende Funktion benutzen.

90 Grad = nach rechts drehen

180 Grad = auf den Kopf stellen

270 Grad/ -90 Grad = nach Links drehen

 

var x = document.createElement("canvas");
 var context = x.getContext("2d");
 rotateCanvas(180, context)

 

rotateCanvas= function(degree, context)
{
    context.translate( canvasWidth, canvasHeight);
    context.rotate(degree* Math.PI / 180);
    context.translate(0, 0);
    return context;
}
Kategorien
JavaScript Web Frontend

Javascript Text spliten in Array nach maximaler Zeichenlänge

Wenn man einen Text mit Javascript so teilen will, dass man eine bestimmte Zeichenlänge nicht überschreitet, kann man die folgende Funktion verwenden, die aus einem Text und einer Zeichenlänge ein Array zurückgibt:

Bsp:

textArr  = textToArray ("Wordpress eigene Farben und CSS Klassen in den Editor einbauen", 20);
//textArr enhält ["Wordpress Plugin"] und ["selber erstellen Tutorial"]
     textToArray = function(text, maxLineCharactersCount){
    var textArr = new Array();
    var fragment = "";
    var lastCutPostion = 0;
    var lastPossibleCutPosition = 0;
    var charCounter = 0;
    var position = 0;
    $j.each(text, function(index, char) {
        if(char == " " && charCounter != 0)
        {
            if(charCounter > maxLineCharactersCount)
            {
                //console.log(charCounter- (position - lastPossibleCutPosition));
                fragment  = text.substring (lastCutPostion, lastPossibleCutPosition);
                //console.log(fragment);
                textArr.push(fragment);
                charCounter = -1 + (position - lastPossibleCutPosition);
                lastCutPostion = lastPossibleCutPosition + 1;
            }
            lastPossibleCutPosition = position;
        }
        position++;
        charCounter++;
    });
    //do not forget the last Word
   if(charCounter > 0)
   {
       fragment  = text.substring(lastCutPostion, text.length);
       //console.log(textWidth);
       if(charCounter > maxLineCharactersCount)
       {
           fragment  = text.substring (lastCutPostion, lastPossibleCutPosition);
           lastCutPostion = lastPossibleCutPosition + 1;
           textArr.push(fragment);
           fragment  = text.substring(lastCutPostion, text.length);
       }
       textArr.push(fragment);
   }   
    return textArr;
}
Kategorien
HTML5 JavaScript WebGL

Three.js Camerasteuerung mit der Tastatur

Um mit der Tastatur (a,w,s,d und q,e und t,g,f,h) in einem three.js 3D-Projekt die Kamera zu bewegen, sind ein paar einfach Schritte nötig.

in der init-Methode

document.addEventListener( 'keypress', onDocumentKeyPress, false );

und eine einfache Methode

Kategorien
WebGL

Anordnen von WebGl 3D Objekten mit three.js

var pageRotation = 0.9; 
var pageHeight = 300; 
var pageWidth = 200; 
var pageLength = 20; 

bookPageContainer = new THREE.Object3D(); 
bookPageContainer.rotation.x = pageRotation;

//linkes Buchhälfte
 leftPageContainer = new THREE.Object3D();
 leftPageContainer.position.set( -pageLength/2, 0, 0 );
 leftPageContainer.rotation.z = -Math.PI * 0.5;
 leftPageCon = new THREE.CubeGeometry( pageWidth, pageLength, pageHeight, 1,1,1, loadLeftPageTextures());
 leftPage = new THREE.Mesh(leftPageCon, new THREE.MeshFaceMaterial());
 leftPage.position.set( -100, 0, 0 );
 leftPageContainer.add( leftPage );
 bookPageContainer.add( leftPageContainer );

//Buchrücken
 bookSideCon = new THREE.CubeGeometry( pageHeight, 1, 2* pageLength, 1,1,1, getBookSideTextureWithText("Buchrücken"));
 bookSide = new THREE.Mesh(bookSideCon, new THREE.MeshFaceMaterial());
 bookSide.position.set( 0, -pageLength/2 , 0 );
 bookSide.rotation.y = -Math.PI/2;
 bookPageContainer.add( bookSide );

//rechte Buchhälfte
 rightPageContainer = new THREE.Object3D();
 rightPageContainer.position.set( pageLength/2, 0, 0 );
 rightPageContainer.rotation.z = Math.PI * 0.5;
 rightPageCon = new THREE.CubeGeometry( pageWidth, pageLength, pageHeight, 1, 1, 1 , new THREE.MeshLambertMaterial( { color: 0x00ff00, wireframe: false, needsUpdate: true } )) ;
 rightPage = new THREE.Mesh(rightPageCon, new THREE.MeshFaceMaterial());
 rightPage.position.set( 100, 0, 0 );
 rightPageContainer.add( rightPage );
 bookPageContainer.add( rightPageContainer );

scene.add(bookPageContainer);

Ergebnis (Perspektive ist geändert worden):

Kategorien
HTML5 Web Frontend WebGL

WebGL Tutorial mit three.js

Mit Hilfe von WebGL lassen sich 3D Animation, Spiele und Webseiten komplett in 3D ohne Plugin (wie bei Flash) realisieren. WebGL wird erst von wenigen Browser unterstützt, was der Hauptnachteil ist:

  • Firefox ab 4.0
  • Chrome ab 9.0
  • Safari (OS X) ab 5.1 (ist aber standardmäßig deaktiviert)
  • Opera, nur Beta-Builds
  • Internet Explorer, aus „Sicherheitsgründen“ wahrscheinlich nie
  • Android Standard Browser, sehr viele
  • iOS, theoretisch ja ab iOS5.0, aber praktisch nur für iAds für schicke Werbung (typisch Apple, Hauptsache Geld verdienen)

Als Testbrowser zur Entwicklung empfiehlt sich Chrome aufgrund der Geschwindigkeit und der sehr guten Unterstützung. Google ist sehr bemüht WebGL voranzutreiben und bietet auf einer eignen Webseite eine sehr gute Übersicht über interessante Projekte.

Vom Standard her basiert WebGL auf OpenGL ES2.0, optimiert für mobil Anwendungen und deren niedrige Leistungsfähigkeit.

WebGL mit three.js

Zur 3D Programmierung im Browser mit WebGL sollten man auf jeden Fall ein leistungsstarkes Framework benutzen. Ich habe mich für three.js entschieden, da es das z.Z. populärste mit den meisten Tutorials und Erweiterungen ist. Laut Aussage der Entwickler ist es auch das einfachste Framework:

„The aim of the project is to create a lightweight 3D library with a very low level of complexity — in other words, for dummies.“

Alle Feature gibt es hier.

Ein paar sehr intreressante Demos: Skin, Terrain, Text, Sammlung alles Demos.

Lizenz: MIT License

Dokumentation (Version 49): Doku, allgemein ist die Doku noch ausbaufähig und enthält nur Todos und keine richtige Hilfe. Ein dicker Nachteil. Es wird oft empfohlen sich anhand der mitgelieferten Samples in die benötigten Methoden und Objekte einzuarbeiten, was auch gut funktioniert.

Eine Übersicht über alle WebGL Frameworks findet man hier (z.Z. ca. 30 Stück). Der Hoster dieser Seite Khronos ist übrigends der Entwickler des WebGL Standards.

Kategorien
JavaScript Web Frontend

Objektorientierte Programmierung in JavaScript OOP

In der letzten Zeit erfreut sich JavaScript wieder größerer Beliebtheit. Für Freunde der objektorientierten Programmierung ist JavaScript allerdings etwas umständlich. Es gibt keine Klassen, keine Vererbung und keine privaten Attribute. Dennoch ist es möglich, in JavaScript objektorientiert zu programmieren.

Hierzu wird anstelle einer Klasse einfach eine Funktion definiert, die alle Attribute und Methoden enthält. Diese Funktion nennt sich Konstruktorfunktion. Man kann allerdings auch etwas tricksen, in dem man den Attributen das Schlüsselwort ‚var‘ voran stellt. Damit sind sie nur innerhalb der Klasse sichtbar (private statt public).

Um eine ganz allgemeine geometrische Figur darzustellen, kann der folgenden Programmcode verwendet werden:

function Figur() {}

Figur.prototype = {
 getBreite: function() {
 return this.breite;
 },
setBreite: function(b) {
 this.breite = b;
 },
getHoehe: function() {
 return this.hoehe;
 },
setHoehe: function(h) {
 this.hoehe = h;
 }
 }

Da gibt es zum einen den Konstruktor ganz oben. Wie auch in jeder Programmiersprache kann man in JavaScript beliebige Parameter angeben. Um die Attribute einer Klasse muss man sich an dieser Stelle nicht kümmern. Diese werden, wie in diesem Beispiel, über den Prototypen automatisch mit angelegt. Desweiteren werden direkt im Prototypen die Funktionen implementiert, die die Klasse bereitstellen soll. In diesem Beispiel sind das nur die Getter und Setter für die Breite und Höhe der Figur. Wie schon erwähnt, werden jetzt auch die Attribute mit angelegt. Zum Beispiel bei getBreite, wird mit dem Zugriff auf this.breite, die Variable angelegt und ist innerhalb der Klasse verfügbar.

Weiterhin ist auffällig, dass die Funktionen jeweils per Komma getrennt werden. Es ist also soetwa, wie eine Aufzählung der Funktionen.

Das Instanziieren der Klasse würde dann wie folgt aussehen:

meineFigur = new Figur();
meineFigur.setBreite(4);
meineFigur.setHoehe(6);

Vererbung

Will man jetzt eine ganz spezielle geometrische Figur, wie zum Beispiel ein Viereck anlegen, kann die Klasse Figur verwendet und erweitert werden. So kann eine Funktion hinzugefügt werden, um die Fläche der Figur zurück zu geben:

function Viereck() {}

Viereck.prototype = new Figur();
Viereck.prototype.constructor = Viereck;
Viereck.prototype.getFlaeche = function() {
 return this.getBreite() * this.getHoehe();
 }

Auch hier beginnt die Klasse mit dem Konstruktor. interessanter ist jetzt allerdings, dass die neue Funkton getFlaeche() zwar auch im Prototypen definiert wird, jetzt aber einen eigenen Eintrag erhält. Dem Prototypen der Klasse wird jetzt ein Objekt der Eltern-Klasse zugewiesen. Und den Konstruktor kann man auch nochmal explizit angeben, was aber optional ist.

Artikel von Tobias Spiesecke

Kategorien
PHP SEO WordPress

WordPress SEO: Meta Description Tag einbauen

WordPress ist sehr sparsam mit Meta-Tags, um das Description Tag einzubauen, muss man folgenden Code in die header.php einbauen:

<meta name="description" content="<?php if ( is_single() ) {
        single_post_title('', true);
    } else {
        bloginfo('name'); echo " - "; bloginfo('description');
    }
    ?>" />

 

Kategorien
SEO WordPress

SEO: Google Autoren Foto anzeigen

Wenn man sein Foto in den Suchergebnissen neben seinen Google Suchtreffern anzeigen will, muss folgende Schritte unternehmen:

  1. Anmeldung bei Google+, im Profil unter macht mit bei die eigene Webseite angeben (Achtung bei mit www und ohne)
  2. den Namen des Autors taggen auf der eigenen Webseite, Bsp: <a href=“https://plus.google.com/107751823415469819633?rel=author“>Sebastian  Viereck</a>
  3. Urheberschaft bei Google verifizieren mit einer Adresse der Domain z.B: seo-google@sebastianviereck.de
  4. Anschließend sollte mit dem Rich Snippets Testing Tool von Google noch einmal verifiziert werden, ob alle Informationen vorhanden sind. Bei mir musste das Google+ Profile nochmals verknüpft werden, siehe Screenshot
Are you the author? If you have an email with sebastianviereck.de and verified it with Google+, please enter your G+ profile to verify your authorship here: