2017-03-30 Update: VisaPro.com – Visitor Visas

n+1 oder eine neue Leidenschaft Das Radfahren war schon immer ein Teil von mir, aber die Vielfalt und die M√∂glichkeiten des Bezugs machen die Liebe zum Rad vielschichtiger, erlebbarer, ver√§nderbar. Daher habe ich es mal wieder getan, ein neues Rad steht in der Reihe mit anderen. Ich habe nicht zu jedem Rad bewusst berichtet, in diesem Fall gab es aber Nachfragen, so dass ich gern einige Bilder und Hinterg√ºnde darstellen m√∂chte. Nach dem Wechsel des FiveSpeed zu SingleSpeed, was ich aktuell als sehr wertvoll sch√§tze, bin ich √ºber ein Rennrad und lange Touren noch immer haupts√§chlich auf dem Tagesrad, mit dem ich t√§glich ins B√ºro fahre. Das passiert bei Wind und Wetter, wenn ich nicht unterwegs bin. Bisher immer und bewusst ohne Schutzbleche und dementsprechend markiert. Die Jahre gehen so dahin, viel Arbeit flie√üt damit auch in die R√§der, die mir Winter wie Sommer zur Verf√ºgung stehen. Ich werde √§lter, vielleicht vern√ºnfitger und so wurde die Idee reifer, mal etwas mit Schutzblechen zu fahren. Wenn schon, dann aber richtig und umf√§nglich. Es sollte mir nicht nur gefallen, es sollte auch tats√§chlich f√ºr Schmutz sch√ºtzen. Der europ√§ische Markt gibt da nicht viel her. Die lieben Franzosen bauen kaum noch sch√∂ne Bleche, die Kopien sind mangelhaft und der Standard im Radladen kann optisch und funktionell nicht mithalten. So verging Zeit und die Suche nach Teilen f√ºr das Rad kostet auch Zeit. Letztendlich habe ich alle Teile entschieden und verbaut. Das Zusammenstellen eines Rades ist wesentlich aufw√§ndiger als der Kauf, viel aufw√§ndiger und man muss selbst entscheiden, die Entscheidung tragen. Aber gerade diese Konsequenz macht mir Freude – so sind auch die anderen R√§der der letzten Jahre entstanden. Man kennt dann die Ecken und √ñsen, man lernt dazu und wie so oft auch hier: Die sch√∂nsten Sachen im Leben sind Offline. Das neue Rad sollte mich also sauber transportieren. In dem Umfeld f√§llt mit sofort Stahl, ein Randonneur ein und so habe ich in diese Richtung gedacht. Jedes Teil wurde nun sorgf√§ltig au …

Open Source verstehen, leben Aktuell konzentrieren sich viele Menschen in meinem Umfeld eher auf geschlossene Pakete, keine Transparenz und m√∂glichst wenig Mitarbeiter. Weihnachten steht vor der T√ºr und genie√üt den "Sommer". Trotzdem mal wieder Raum und Zeit f√ºr einige Zeilen dich mich pers√∂nlich umtreiben. Open Source, egal ob nur die Sicht auf Code oder andere offene Quellen, die zu Produkten f√ºhren k√∂nnen. Ich m√∂chte ein paar Gedankenanst√∂√üe los werden und vielleicht zum Nachdenken anregen. Ich bin seit vielen Jahren im Zirkus unterwegs, lebe ihn aus unterschiedlichen Richtungen und bin ebenso Nutznie√üer aus verschiedenen Welten und mit verschiedenen Sichten. Diese Punkte bewegen mich dazu, die folgenden Worte nieder zu schreiben und diese Sicht, das Gef√ºhl bzgl. Open Source zu haben. Ich schreibe diese Zeilen mit dem Bild, dass Open Source und dessen Mitarbeit vorrangig in Freizeit entsteht. Ich wei√ü, dass es diverse Projekte gibt, die mit Hilfe von Arbeitszeit im Sinne "man wird entlohnt" entstehen. Ein gro√ües Bild der Themen, die ich ansprechen m√∂chte, trifft aber eher auf die Ressource nach dem Job zu und ringt mir daher um so mehr das Lob, die Huldigung ab. Nat√ºrlich musst du nicht die gleiche Sichtweise haben, sie schildert mein Bild. Ich will auch nicht diskutieren, ich m√∂chte darstellen und anregen. Warum Open Source? Jeder f√ºr sich sollte sich diese Frage beantworten. Warum stellt man seine Idee und L√∂sung √∂ffentlich bereit. Will man dies tats√§chlich, soll es anderen nutzen und ist Mitarbeit gewollt. Sucht man nur freien Speicherplatz oder Sichtbarkeit. Will man neue Ideen, Diskussionen zulassen. Mit einem Open Source Projekt √∂ffnet man seinen Geist zu diesem einzelnen Thema, Produkt und oft auch zu vielen anderen Themen. Parallel sind Fehler sichtbar, angreifbar. Auch dies sollte in dem Umfeld nicht vergessen werden. Gleiches gilt f√ºr das Einbringen von √Ñnderungen, will man das? Hier muss jeder f√ºr sich die Regeln fest legen, sollte dies auch sichtbar dokumentieren um potenzielle M …

Die Bedeutung des Gleichgewichts

Beim Menschen ist es wie beim Velo,
er muss in Bewegung bleiben um das Gleichgewicht zu halten.

Albert Einstein am 5. Februar 1930 in einem Brief an seinen Sohn Eduard

Blue Beanie Day 2014 Heute setzen eine ganze Reihe von Webentwicklern ein Zeichen mit dem Symbol der blauen M√ºtze – Bewusstsein f√ºr Webstandard ist der kurzgefasste Hintergrund der Idee "Blue Beanie Day". Es schadet nicht, sich damit ein wenig auseinander zu setzen, egal ob man blaue M√ºtzen mag oder nicht. Seit fast einem Jahrzehnt ist die HTML5 Entwicklung aktiv und sie hat in meinen Augen viele positive Resultate erzielt. Semantik 1 – Wir haben eine Semantik, die verst√§ndlich ist, die sich an die Bed√ºrfnisse im Netz anpasst. Parallel haben wir diverse M√∂glichkeiten um die Grundsemantik header, main, footer weiter zu detaillieren. Semantik 2 – Mit den vielen neuen M√∂glichkeiten wird es aber auch komplizierter. Div-Suppen waren semantischer Unsinn, sind aber leicht verst√§ndlich beim Entwickler, der nur das sichtbare Resultat im Auge hat. Semantik 3 – Die neuen M√∂glichkeiten lassen komplexe Strukturen zu und man kann von grundauf semantisch seine Website planen, was dementsprechend zu einem erh√∂hten Aufwand f√ºhrt. Letztlich sicher ist man sich nur, wenn man ausreichend Erfahrung und entsprechende Tools zur Kontrolle mitbringt. In der Regel werden sicher diverse Vorgaben popul√§rer Systeme oder Repositories kopiert. Der Standard HTML5 ist f√ºr mich ein klares Plus, gibt mir Strukturen (Elemente und Attribute) die ich einsetzen kann und ich versuche einen Mittelweg zwischen Aufwand und "√úbersemantik" zu erreichen. Allein die bessere √úbersicht im Quellcode macht mir Freude und immer wieder gilt es den Istzustand in Frage zu stellen und zu Lernen. Fakt ist aber auch, damit wird es nicht einfacher ein Resultat zu erzielen, was uns gl√ºcklich macht und bei HTML erreichen wir den gleichen Status wie im Coding mit Programmiersprachen – der Code von gestern ist "Legacy". Es w√§re sicher hilfreich, wenn wir mehr praktische Beispiele bekommen, die ggf. auch die Wertigkeit nachgewiesen haben. Das W3C und die WHATWG bieten zwar Beispiele an, aber die Gesamtstruktur muss man sich doch im Vorfeld selbst er …

Cycling: I do
Vielen Dank Manuela .

Offline Post ist noch immer was wunderbares und die Freude war, ist groß.
Wir haben beide gemeinsame Leidenschaften, die √ºber die Online-Welt, Familie, Cycling inkl. Tandem hinaus gehen. Und es freut mich besonders, dass dies schon eine lange Zeit w√§hrt und man trotzdem immer neue Themen entdeckt. Zeit f√ºr einen gemeinsamen Kaffee …

Cycling: I do

Für alle, die ebenfalls das Motiv möchten, steht Manuelas Shop bereit. Viel Freude.

Wildcard in WP_User_Query() F√ºr nutzerbezogene Daten steht in WordPress die Klasse WP_User_Query() zur Verf√ºgung. √úblicherweise gibt man dort einen Schl√ºssel mit und bekommt die entsprechenden Werte zum User zur√ºck. Durch ein Entwicklungsthema ist mir eine Besonderheit in der Query aufgefallen, die diesen kleinen Beitrag als Folge hat. Die Klasse erlaubt das Erg√§nzen von * als Wildcard. Innerhalb der Klasse wird dieser Stern dann f√ºr die SQL Abfrage ersetzt (%). Im Codex findet man beispielsweise folgendes einfaches Beispiel zur User-Abfrage. $user_query = new WP_User_Query( array( 'search' => 'Rami' ) ); Will man vor oder nach diesem String "Rami" per Wildcard schauen, was es weiter gibt, oder flexibler suchen, dann ist lediglich das Erg√§nzen von * notwendig. Dazu finde ich aktuell nichts im Codex, so dass der Hinweis hier ggf. hilfreich ist. Im Core wird dies betrachtet: // @see wp-includes/user.php#L599 if ( $search ) { $leading_wild = ( ltrim($search, '*') != $search ); $trailing_wild = ( rtrim($search, '*') != $search ); if ( $leading_wild && $trailing_wild ) $wild = 'both'; elseif ( $leading_wild ) $wild = 'leading'; elseif ( $trailing_wild ) $wild = 'trailing'; else $wild = false; if ( $wild ) $search = trim($search, '*'); Damit kann also vor oder nach dem String ein Wildcard mitgegeben werden. $user_query = new WP_User_Query( array( 'search' => '*Rami*' ) ); //%Rami% $user_query = new WP_User_Query( array( 'search' => 'Rami*' ) ); //Rami% Zum Ende nochmal der Hinweis, die Wildcard ist nur am Anfang oder Ende des Suchstrings m√∂glich, nicht innerhalb des Strings. …

663399 ‚ù§

Die Frage nach der Lieblingsfarbe konnte ich der Tochter schon so oft nicht beantworten. Den Schmerz kann ich als Vater zweier Kinder zum Glück nicht nach empfinden. In Gedanken bin ich aber bei euch, in Gedenken an Rebecca .

It's so easy to do, there's no reason not to. Go to Twitter on 12 June and post the hashtag #663399Becca along with any additional words or pictures you feel moved to share. Or just share the hashtag. It will not be enough. Nothing will ever be enough. But it will be something.

Zeldman trifft es in seinem Artikel The Color Purple

Immer im Kreis und doch vorw√§rts Fixie fahren, da wo es nicht besser geht. Erstmalig trete ich eine Tour auf einer Bahn. Es hat mich begeistert. Das Geschenk war √ºberraschend und hat mich gl√ºcklich gemacht. Parallel kam ich so in den Genuss ein passendes Rad aus meiner Kinderzeit zu fahren – Fixie, made in GDR. Die Einfachheit auf der Bahn ist gro√üartig. Man braucht so wenig und muss doch so viel geben. Ich bin im Vorfeld mein FiveSpeed und Rennrad gefahren. Mit keinem hat es diese pure Freude gegeben. Die Einfachheit macht es. Man empfindet Schaltung und Bremse schnell als Ballast. Der Blick auf neue Fixies im Eingang der Bahn findet fast schon wieder den Blick in den Rad-Raum; n+1 – Die St√ºckzahl des Cyclisten ;). …

Entscheidungshilfe: get_post() oder WP_Query WordPress stellt oft verschieden Wege bereit um an Daten zu kommen. Im Umfeld von Inhalt – Einzelne Artikel, Kommentare, …

– beschr√§nkt sich dies im Grunde auf zwei Wege. Beide sind im Netz zigfach in Tutorials hinterlegt und oft ist die Nutzung des jeweiligen Weges nicht zu Ende gedacht. Es gibt viele Artikel um die Hintergr√ºnde zu verstehen und sich mit dem gewonnen Verst√§ndnis f√ºr die entsprechende Methode zu entscheiden. Herausragend in Bildform und verst√§ndlich ist der Eintrag #1753 im WPSE. Bitte nicht mit get_posts() verwechseln, get_posts() und get_post() sind f√ºr unterschiedliche Resultate erstellt. In kurzer Form dient get_posts() f√ºr viele Inhalte zum Type post. Die Entscheidungshilfe hier ist f√ºr die Ausgabe von einem Artikel, dessen Inhalte, dessen zugeh√∂rigen Daten. Im Grunde kann man aber von der Regel zu get_posts vs. WP_Query einiges ableiten. Ich m√∂chte nur eine kurze Entscheidungshilfe geben, die euch und mich in die Lage versetzt, aufgrund einiger weniger Punkte zu entscheiden, beim Holen einzelner Inhalte – get_post() oder WP_Query. Tests An folgendem kleinen Beispiel kann man die Unterschiede bspw. messen und an Hand der Anzahl der Queries vergleichen. Man kann wesentlich komplexere Beispiele bauen. Aber ich denke, dass gerade die Einfachheit das Verst√§ndnis f√∂rdert. Die Queries kann man entweder einfach per Ausgabe sehen $wpdb->queries oder alternativ bspw. mit Hilfe des Plugins Debug Objects ohne Aufwand einsehen. Als erster wird der Artikel mit ID 1 geholt und Title und Content ausgelesen. $post_1 = get_post( 1 ); $title = $post_1->post_title; $content = $post_1->post_content; Den gleichen Inhalt holen wir nun √ºber den WP_Query. $query_1 = new WP_Query( 'p=1' ); $title = $query_1->posts[0]->post_title; $content = $query_1->posts[0]->post_content; Welche Daten werden ben√∂tigt? Wenn Daten zum Artikel, wie Kommentare, -Anzahl, Autoren-Daten oder Benutzerdefinierte Felder ben√∂tigt werden, dann nutze WP_Query. Wenn lediglich Daten aus der Tabel …

WordCamp Europe steht bevor
Ab Freitag geht die Reise nach Leiden, Niederlande, zum WordCamp Europe , mein erstes WordCamp in dieser großen Dimension 700 Gäste werden erwartet. Ich freue mich darauf Leute zu treffen, Leute wo ich oft seit sehr langer Zeit nur das Avatar kenne. Ich freue mich ebenso einige Kollegen aus dem Inpsyde Team persönlich zu sprechen, nicht immer nur online via Tools.

Eine ganze Reihe von Sessions sind angekündigt . Ich lasse mich überraschen, wie wertvoll sie sind und wie sich mich bereichern. Ich werde sicher die eine oder andere Session besuchen.
Parallel werde auch ich ein Teil einer Session sein, da unser Thema der Mehrsprachigkeit auf großes Interesse stößt und so werden wir drei Lösungen aufzeigen. Ich denke, dass unser Multilingual Press dabei einen guten Schnitt macht die Anwender den Vorteil für ihre Projekte erkennen. Für mich persönlich wird die Session nicht leicht. Viele Zuhörer und die englische Sprache machen nervös und meine Stärke ist eher in meiner Muttersprache zu vermitteln, trotzdem werde ich die Herausvorderung annehmen und mein bestes geben auf das man mich versteht.

Ich sehe euch also am Sonntag, den 6.Oktober 2013 um 16:45 Uhr.
Kurz und gut: ich freue mich auf das Event und auf viele Gesichter.

WordCamp Themenliste In diesem Jahr werde ich vermutlich zwei Camps zum Thema WordPress besuchen -WordCamp EU und WPCamp Berlin. Es gibt eine ganze Reihe weiter toller Veranstaltungen, die ich leider nur seltem im Kalender unter bekomme und die Veranstaltungen zum Thema WordPress haben eine erh√∂hte Priorit√§t, da Leidenschaft und Job in Inpsyde zusammen flie√üen. In erster Linie besuche ich die Veranstaltungen zum Netzwerken und Leute treffen. Trotzdem empfinde ich eine gute und inhaltlcih wertvolle Session als gro√üe Bereicherung. Da spielt das Level der Session nicht die erste Priorit√§t, das Vermittlen von Inhalten und der Spa√ü am Teilen sind wichtige Aspekte. Da es immer wieder an Themen und Mut mangelt, m√∂chte ich f√ºr den ersten Punkt etwas nachhelfen. Mut kann ich dem geneigten Leser nur zu sprechen – es ist kein Meister vom Himmel gefallen, aber man sollte merken, dass man sich mit dem Thema und dem Tun als Vortragender vor Zuh√∂rern auseinandergesetzt hat. Alles andere findet sich. Nun aber zu einer willk√ºrlichen Liste von Themen, die ich spannend finde oder die mir zugetragen wurden. Vielleicht findet man sich und der eine oder andere von euch schnappt sich ein Thema oder erg√§nzt eigene W√ºnsche in den Kommentaren. Bloggen – Spa√ü oder Job (Stichpunkt Geld verdienen) Geschwindigkeit und WordPress – was geht, was ist sinnvoll, Erfahrungen Testen im Umfeld der Entwicklung Erfahrungen als Agentur, Freelencer – Tips f√ºr den Kollegen, Konkurrenten Kosten/Nutzen – Erfahrungen beim Verkauf von WP PRodukten (Themes, Plugins, Garantie, Support …

) Multiautorenlandschaft Mehrsprachigkeit mit WP, lokales und internationales Blickfeld Ethik beim Bloggen WordPress APIs WordPress im Unternehmen – Lizenz, Chancen Corporate Blogging? WP als Intranetl√∂sung Themes in der WP Multisite Welt – Vor- und Nachteile Update, Update, Update – wer pr√ºft Plugins und Themes in der zuk√ºnftigen Umgebung Pluginentwicklung – Mitentwickler, – support finden WordPress und Photografie Ungeahnte L√∂sungen mit WordPress …

HTML5 Support seit WordPress 3.6 Eines der Themen, die uns seit WordPress 3.6 neu zur Verf√ºgung stehen ist der HTML5 Support, der in Themes Unterst√ºtzung findet. Dabei k√∂nnen drei Bereiche in den Genuss kommen. Die seit Version 3.4 zur Verf√ºgung stehende Funktion add_theme_support() ist auch hier Schl√ºssel und so k√∂nnen aktuell drei Funktionalit√§ten f√ºr den Support von html5 registriert werden. Im Theme, √ºblicherweise via functions.php werden alle drei Funktionalit√§ten registriert. add_action( 'after_setup_theme', 'fb_example_setup' ); function fb_example_setup() { add_theme_support( 'html5', array( 'comment-list', 'comment-form', 'search-form' ) ); } Die Namen der Funktionen sollten f√ºr sich sprechen. 'comment-list' – Kommentarliste, wp_list_comments 'comment-form' – Kommentar-Formular, comment_form() 'search-form' – Such-Formular, get_search_form() In existierenden Themes gibt es nichts zu tun, alle Funktionen sind abw√§rtskompatibel und damit wird weiter das bekannte xhtml Markup genutzt. Attribute wie placeholder sind dann nicht genutzt. Die Funktion f√ºr den Aufruf der Kommentarliste im Template ist damit auch k√ºrzer geworden, ein Beispiel. Die Vorgaben werden in einem Array √ºbergeben und folgende Standard-Einstellungen werden genutzt. $defaults = array( 'walker' => null, 'max_depth' => ", 'style' => 'ul', 'callback' => null, 'end-callback' => null, 'type' => 'all', 'page' => ", 'per_page' => ", 'avatar_size' => 32, 'reverse_top_level' => null, 'reverse_children' => ", 'format' => current_theme_supports( 'html5', 'comment-list' ) ? 'html5' : 'xhtml', 'short_ping' => false, ); Damit ist WordPress perse nicht sauber in der Ausgabe im Hinblick auf HTML5, aber erste Zeichen sind gesetzt. Insbesondere das Markup, was zum Content erzeugt wird, macht da Schwierigkeiten, wo nur eigene Anpassungen als Plugin oder im Theme helfen k√∂nnen. …

Einfaches PHP Debugging in Browser Console Ich nutze die Console im Browser der gern um Debug-Inhalte auszugeben. Insbesondere bei Kunden-Sites kann ich so recht unscheinbar arbeiten und muss nicht die Oberfl√§che mit Debug-Meldungen zu zerst√∂ren, auch wenn man dies nat√ºrlich via Rechtabfrage filtern sollte. Im folgenden eine kleine Funktion, die mir den Inhalt in die Console schreibt, ohne Helferlein. Dies ist auch im Plugin Debug Objects untergebracht und kann beim Einsatz des Plugins direkt genutzt werden. Der Screenshot demonstriert dies an einem komplexen Objekt in der Ausgabe und dient nur dem Verst√§ndnis. Den Inhalt, den ihr ausgeben wollt, liegt nat√ºrlich in eurer Hand. Die einfache Variante, die allerdings keine Objekte verarbeiten kann – lediglich Strings und Arrays. Im weiteren Verlauf dann eine etwas aufwendigere Funktion, die Objekte zul√§sst. /** * Simple helper to debug to the console * * @param Array, String $data * @return String */ function debug_to_console( $data ) { if ( is_array( $data ) ) $output = ""; else $output = ""; echo $output; } Will man Objekte nutzen, so muss die Funktion erweitert werden. Will man Beispielsweise den Inhalt des globalen Objektes der WordPress Datenbank ausgeben, siehe folgende Zeilen global $wpdb; debug_to_console( $wpdb ); dann gen√ºgt die einfache Helferfunktion nicht, darum eine erweiterte Version, die auch Objekte ausgibt. /** * Simple helper to debug to the console * * @param Array, Object, String $data * @return String */ function debug_to_console( $data ) { $output = "; if ( is_array( $data ) ) { $output .= ""; } else if ( is_object( $data ) ) { $data = var_export( $data, TRUE ); $data = explode( "\n", $data ); foreach( $data as $line ) { if ( trim( $line ) ) { $line = addslashes( $line ); $output .= "console.log( '{$line}' );"; } } $output = ""; } else { $output .= ""; } echo $output; } Als schlanke und effiziente L√∂sung nutze ich gern folgende kleine Funktion, ohne Overhead. /** * Simple helper to debug to the console * * @param object, array, string $d …

Theme für Mantis Bugtracker

MantisBT ist eines meiner Werkzeuge zum Tracken von Bugs und Entwicklung. In dem Zusammenhang nutze ich ein eigenes Theme seit vielen Jahren um die Arbeit der Anwender zu unterstützen. Insbesondere für Nicht-Entwickler war dies ein wichtiger Schritt um sie in der Oberfläche abzuholen. Eine abgewandelte Form ist dies nun frei nutzbar, wie auch das Markdown Plugin für MantisBT.

mantibt-screenshot

Erweiterungen, Verbesserungen sind wie immer willkommen, dazu das Repo nutzen. Informationen zu Installation und den Farben für diverse Status, die in der Konfiguration gesetzt werden, sind ebenso am Repo abgelegt РColorized, a MantisBT Stylesheet .

Liste aller Blogs in WordPress Multisite WordPress Multisite ist seit der Zusammenlegung von MU und Single ab Version 3.0 popul√§rer geworden. Nicht nur die Verwaltung meherer Sites, sondern auch in diversen Szenarios findet Multisite seinen Einsatz. Als ein Beispiel sei die Mehrsprachigkeits-L√∂sung genannt. In diesem Umfeld werden des √∂fteren die Inhalte oder Daten aus allen Blogs gebraucht, wozu man ggf. alle Blogs kennen muss. Bem√ºht man eine Suche um eine L√∂sung zu finden, dann erscheinen sehr oft div. SQL Selects, die auch in vielen L√∂sungen verbaut wurden und daher zum Nachahmen aufrufen. Da ich aktuell in einem Projekt wieder damit zu tun hatte und ein Select nicht die erste Wahl sein sollte, wenn es Core Functionen gibt, hier ein kurzes Snippet, was alle Blogs im Network zur√ºck gibt. // Get all blogs of WordPress Multisite $blogs = get_blog_list( 0, 'all' ); Das Auswerten ist dann schnell getan, da die ID der Blogs im zur√ºckgegebenen Array steckt und dar√ºber alle weiteren Daten geholt werden k√∂nnen, ein Beispiel soll es verdeutlichen. foreach( (array) $blogs as $blog ) { $stylesheet = get_blog_option( $blog['blog_id'], 'stylesheet' ); $blogname = get_blog_details( $blog['blog_id'] )->blogname; } Nat√ºrlich hat diese L√∂sung einen Haken. Die Funktione wurde mit WordPress 3.0 abgek√ºndigt, womit man sie aktuell noch nutzen kann, aber irgendwann ist sie im Core weg. Sie wurde aus Gr√ºnden der Performance deaktiviert, da sie mit sehr gro√üen Netzwerken (> 1000 Blogs) Probleme macht. Alternativ ist also die Funktion bereit zu stellen. Daher im folgenden die Funktion, die ich abh√§ngig ablege. Ich werde die Funktion mit Transients erweitern, so dass mit WP Core Mitteln performanter ist. Dazu bitte in den Code auf Github schauen. Dort wird er gepflegt. Ihr seit herzlich eingeladen, den Code zu verbessern, zu erg√§nzen – die Fork-Funktion kann gern genutzt werden. if ( ! function_exists( 'get_blog_list' ) ) { /** * Returns an array of arrays containing information about each public blog hosted on this WPMU install …

10 Jahre WordPress lose Gedanken Nun denn, die Zeit vergeht und dieser Tage wurde WordPress zehn Jahre jung. Wobei im Software-Umfeld dies relativ zu sehen ist, denn hier lebt es sich schneller auf und nieder als so manchem Projekt lieb ist. Im Umfeld des Interntes kann die Lebensdauer einer Applikation noch viel relevanter sein und Vergleiche sind nur schwer anzustellen. Linux, ein wichtiger Baustein des www, ist in dem Vergleich alt, andere Tools, die sich wie WordPress um das Publizieren von Inhalten im www k√ºmmern, dagegen sind sehr jung und nicht selten nach geraumer Zeit nicht in Wartung und damit unantraktiv. Das Thema Wartung im Sinne von Tun und Ver√∂ffentlichen kann man WordPress nicht als negativen Punkt vorwerfen. Das Rad WordPress dreht sich, die Sichten der Nutzer und Entwickler ist sicher verschieden, was gut ist. Diskussionen sind wichtig, sie m√ºssen nur sachlich sein. Nicht immer erreicht man damit die Adresse, die was √§ndern kann, aber die Diskussion kann dazu f√ºhren und darum ist sie wichtig…

WordPress und ich sind schon l√§nger ein Paar, manchmal ein Team und manchmal verstrittene Freunde. Die Zeit vergeht wie im Fluge, man arangiert sich, tolleriert Ecken und Kanten oder wechselt die Freunde. Jeder ist f√ºr sich selbst verantwortlich und nur f√ºr mich muss ich schauen, was kann ich vertreten und will ich es tun. √úber die Zeit gibt es besonders sch√∂ne und besonders harte Zeiten. Zum Gl√ºck verdr√§ngt man die negativen Erinnerungen und die positiven Erlebnisse bleiben. Aus beiden Extremen lernt man und nimmt f√ºr sich relevante Themen heraus. So gibt es ebenso Themen, wo ich mich heraus genommen habe. Ich muss nicht mehr zu jedem Thema meine Meinung darlegen, die Welt aufkl√§ren, mich einbringen. Aber ich nehme mir auch heraus, es zu tun, wenn ich mag. Ich f√ºhle mich oft missverstanden. Dazu tr√§gt die Sprachbarriere die Kultur und die Sicht auf die L√∂sung seinen Beitrag. Ebenso ist das Einbringen ein Thema der Zeit. Zeit, die man sich nehmen muss und initiert man Ideen, Ver√§nderungen, …

WordPress Puls? Heartbeat API Mit WordPress 3.6 wird es eine neue API geben – Heartbeat. Am Ticket 23216 im Trac sammeln sich alle Diskussionen und Hinweise. Da Heartbeat aber auch Einfl√ºsse f√ºr Anwender haben kann, hier einige Worte und Hinweise. Heartbeat wird eingef√ºhrt um diverse Aktivit√§ten, wie Autosave, Sperren von Artikeln und An- und Abmelde-Benachrichtigungen zu h√§ndeln. Parallel kann die API auch f√ºr eigene Entwicklungen genutzt werden. Am Puls Im Standard wird Heartbeat mit einem Puls von 15 Sekunden schlagen – Arbeit die der Prozessor tun muss und so kann es sinnvoll sein, diesen Wert zu √§ndern. Dabei kann nicht beliebig ge√§ndert werden. Der Pulsschlag von Heartbeat muss zwischen 5 und 60 Sekunden liegen. Folgendes kleines Plugin √§ndert auf den maximalen Wert von 60s. Die Heartbeat API hat vielleicht im ersten Blick nicht die gro√üen Vorteile, schauen wir aber auf ein einfaches Beispiel. Deine Installation hat zehn verschieden Plugins, die einen Poll auf den Server brauchen. Dann finden diese Hits getrennt statt, 10 mal. Wenn die Plugins die Heartbeat API verwenden, dann werden die Polls geb√ºndelt, ein Hit f√ºr 10 Polls, alle 15 Sekunden im Standard. …

Post Format UI deaktivieren
WordPress Version 3.6 kommt mit neuer Oberfläche für die Post Formats, präsenter ist das Schlagwort. Die Post Format UI ist eine wunderbare Möglichkeit mit wenig Aufwand Artikel besser uns sichtbar zu deklarieren, für den Leser verschieden aufzubereiten. Trotzdem ist sie nicht immer notwendig. Im Standard kann die UI in den jeweiligen Optionen des Users deaktiviert werden, siehe Screenshot.

post-format-ui

Alternativ kann der Filter Hook enable_post_format_ui genutzt werden. Mittels dieses Hooks kann die UI global in der Installation deaktiviet werden und kein User hat die Möglichkeit die Post Formats zu nutzen. Folgende Zeilen in einer php-Datei als Plugin abgelegt und aktiviert sind daher ausreichend.

Chrome Logger ChromePHP Der Webinspector in Chromium ist mir ans Herz gewachsen, Firebug ist f√ºr mich nur notwendig, wenn ich im Firefox validieren muss. In diesem Zusammenhang habe ich auch das Debuggen im PHP Umfeld dort abgebildet. Bin ich nicht komplett in der IDE und man braucht diverse Daten im Debuggmodus, dann kann man dies √ºber die Wege var_dump() in der Applikation ausgeben oder alternativ in Chromium mit Hilfe der Erweiterung Chrome Logger und der Library ChromePHP tun. Somit wird die Oberfl√§che nicht durch die Debug-Ausgaben zerst√∂rt und kann in Systemen bei Kunden sauber in die Konsole des Webinspector √ºberf√ºhrt werden. Dazu einige Hinweise. Um die M√∂glichkeit in der PHP Welt in die Konsole des Webinspector zu debuggen, ist die Chrome Erweiterung Chrome Logger notwendig. Parallel muss eine Library ChromePHP eingebunden werden. Im einfachsten Fall ist dies via include im jeweiligen Projekt schnell erstellt. Alternativ kann, sinnvoll in Entwicklungsumgebunden, der Include in der php.ini abgelegt werden; via auto_prepend_file. Dies k√∂nnte beispielsweise wie folgt hinterlegt sein, je nachdem wo die Library abgelegt ist. auto_prepend_file = /var/www/ChromePhp.php Im WordPress Umfeld, was meine wichtigste Applikation in der Entwicklung ist, kann man es ebenfalls via Plugin rein holen. Dazu gibt es einige L√∂sungen bei Github. Ich f√ºr meinen Teil nutze das Plugin Debug Objects, was die Library inkludiert. Dies versetzt mich auch einfach in die Lage, beim Kunden auf der Plattform in die Konsole zu debuggen. Au√üerdem der Hinweis, der Chrome Logger ist ebenso im Umfeld von node.js, Ruby und Pythen nutzbar. …

√úberraschung aus dem Norden
Im Norden soll ja das Wetter härter sein, nur was für echte Männer. Markus gehört dazu, dem hat es so gut gefallen, dass er gleich dort blieb und nun sogar 2 Wikinger groß zieht. Trotzdem findet er Zeit mir eine Freude zu machen und sendet zum Frühlingsanfang ein JerseyBin . Damit ein Grund mehr auf das Bike oder in die Laufschuhe zu steigen und meine Tüte um das Smartphone links liegen zu lassen.

IMG_20130414_211505

Eine tolle Idee, nützlicher kleiner Helfer der mich nun noch öfter an den Freund im Norden erinnert und, dass ich ihn viel zu selten anrufe Рwie viele andere Freunde auch. Vielen Dank Markus Рdie Überraschung ist gelungen!

Gist via oEmbed in WordPress einbinden
WordPress hat seit geraumer Zeit die oEmbed Integration um einfach und unkompliziert Inhalte von anderen Siters und Services einzubinden. Besonders bekannt sind dabei diverse Video-Portale und seit der letzten WordPress Version Twitter. Wie so oft in WordPress kann man diese Möglichkeit nutzen und erweitern. In meinem Fall ging es darum, dass Inhalt von Github Gists einfach integriert werden können, einfach per URL in den Inhalt kopieren und gut. Dabei ist ein kleines Plugin entstanden, welches auf Github liegt und von dort genutzt werden kann und ggf. auch via Fork erweitert werden kann.
»» zum Plugin

Technisch ist es wichtig die Funktion wp_embed_register_handler anzusprechen und daher der Kern der Funktion. Alles weitere findet man im Source des Plugins. Die Funktion erlaubt es neu Handler zu definieren und diese geben dann die nötigen Inhalte zurück. In diesem Beispiel wird der String gist definiert, der die Funktione wp_embed_handler_gist als Callback nutzt und die Gist-URL als Parameter. Innerhalb der Funktion werden dann die Inhalte des Parameters ersetzt und die Rückgabe definiert.

wp_embed_register_handler(
'gist',
'#https://gist.github.com/(?:[a-z0-9-]*/)?([a-z0-9]+)(\#file_(.+))?$#i',
'wp_embed_handler_gist'
);

function wp_embed_handler_gist( $matches, $attr, $url, $rawattr ) {

$embed = sprintf(
",
esc_attr( $matches[1] ),
esc_attr( $matches[2] )
);

return apply_filters( 'embed_gist', $embed, $matches, $attr, $url, $rawattr );
}

Eiertanz
Und es geht wieder los. Nach einer Woche Pause von dem täglichen Ritt zur Arbeit habe ich mich heute morgen wieder auf den Weg gemacht. Das Rad und ich Рunterwegs.
Schön ist es, auch wenn Radwege nicht im Fokus der Gemeinden stehen und damit der Weg sehr verharscht und eisig ist. Nicht alle Wege sind so frei und mit wenig Eis versehen wie das Stück auf dem folgenden Bild. Die Technik schults, das Gemüht freut es. Daher bekommt mein Geist neue Impulse und frische Luft für den ganzen Körper, was unglaublich gut tut, wenn man recht viel Zeit im Büro am Rechenknecht verbingt. Darum freut es mich um so mehr, dass das Fahren ohne Licht zum Sehen möglich ist Рauch einige Sonnenstrahlen finden Weg zu mir und machen den Neustart in die Woche noch schöner.

IMG_20130128_075835

Responsive Table und WordPress Responsive hier und da – das Thema hat gewicht bekommen und endlich ist es popul√§rer als in den Diskussionen von Entwicklern, die dem Thema nahe stehen. Responsive ist f√ºr mich mehr als das Nutzen einiger Mediaqueries auf bestimmte Werte und das Anpassen der Optik. Aber darum soll es hier nicht gehen, dazu gibt es ausreichend Beitr√§ge auf anderen Sites und ein ausf√ºhrliches Buch "Responsive Webdesign: Reaktionsf√§hige Websites gestalten und umsetzen" in deutscher Sprache von Christoph Zillgens. F√ºr mich war in letzter Zeit ein Thema in diesem Umfeld etwas aktueller, denn ich habe diverse WordPress Instanzen laufen, die zu Dokumentationszwecken von Entwicklungen dienen. Dabei erstellen die Kunden eine ganze Reihe von tabellarischen Daten und wenn diese in Meetings und Vorstellungen via Beamer dargestellt werden, dann ging die Aufl√∂sng rapide nach untern und die 1900 Pixel-Bildschirme stehen nicht mehr zur Verf√ºgung. Daher lag es nahe, dass Tabellen mit einer L√∂sung ausgestattet werden, die trotzdem f√ºr eine sinnvolle Darstellung sorgt. Nun ist das Thema der flexiblen Tabellen auch nicht mehr neu und man kann sich auf die Suche nach L√∂sungen begeben. Die L√∂sung kann beliebig komplex ausfallen und auf unterschiedliche Anforderungen zugeschnitten werden. Sei es mit einer reinen CSS L√∂sung oder dem Eingriff via JavaScript, beliebig komplex. Sinnvoll ist hier der Beitrag von Jens, da er die Hintergr√ºnde uns seine √úberlegungen darlegt. F√ºr meine Umsetzung war eine schnelle Hilfreiche L√∂sung notwendig. Das Thema JavaScript ja/nein stand nicht zur Debatte, da es sich um die Nutzung innerhalb eines Unternehmes, im Intranet, handelt und JS aktiv ist. Trotzdem habe ich mich f√ºr eine eine Umstrukturierung der Tabelle entschieden und stelle die Tabelle von links nach rechts, beginnend mit den Kopfdaten dar. Der Grund war in erster Linie, dass die Leute einfache Tabellen in die Artikel werfen. F√ºr eine weitere L√∂sung – Scrollende Tabellen mit fester 1. Spalte, die mir gef√§llt, m√ºss …

Git Autokorrektur
Git ist mindestens seit der Popularität von Github für viele Leute ein Thema. Damit rückt auch das Terminal und das Eintippen von Befehlen wieder in den Fokus der Entwickler. Ja. es gibt auch Tools und Integration, die Arbeit mit dem Terminal ist trotzdem oft schneller und flexibler. Dabei ist es natürlich auch möglich, dass ein Vertipper auftritt. In diesem Zusammenhang ein kleiner Tipp, wie Vertipper von Git automatisch korrigiert werden und der Befehl trotzdem ausgeführt wird.

Im standard für ein falsches git Kommando, wie $ git statud zu folgender Antwort.

git: 'statud' is not a git command. See 'git –help'.

Did you mean this?
status

Setzt man den Konfigurationswert der Autokorrektur auf 1, folgende Syntax für das Terminal:
$ git config –global help.autocorrect 1

so führt die Eingabe mit der Vertipper des Status $ git statud zu:

WARNING: You called a Git command named 'statud', which does not exist.
Continuing under the assumption that you meant 'status'
in 0.1 seconds automatically…

Ab und an sinnvoll, ein Nachteil konnte ich noch nicht bemerken. Weitere Einstellungen dieser Art lassen sich in der git Dokumentation zum Thema Konfiguration zu finden.

WordPress Theme Customizer Custom Controls Puh, schwerer Titel – aber er trifft es und es ist schwer die M√∂glichkeit in deutscher Sprache zu nennen ohne die gleiche Unsicherheit zu erzeugen. Der englische Begriff ist wenigstens auf die Begriffe von WordrPress zur√ºck zu f√ºhren. Zum Verst√§ndnis daher einige Worte, die erkl√§ren, was ich sagen will und worum es geht. Der Customizer ist eine recht junge M√∂glichkeit von WordPress um Themes mit Optionen zu versorgen. Dabei ist das Visuelle besonders im Vordergrund, man gestaltet die Optionen direkt im Frontend am Theme, spielt und speichert die Einstellungen. Einige Zeilen dazu habe ich in einem √§lteren Artikel hinterlegt und ebenso die Slides zum Thema hinterlegt. Nun soll es in diesem Beitrag gehen, wie man eigene Klassen erstellt, die die Controls erweitern, da nicht alle Felder und W√ºnsche im Core hinterlegt sind. Dabei kann man auf bestehende L√∂sungen der Community zugreifen oder eigenen Klassen erstellen. Im ersten Schritt daher einen kurze Einf√ºhrung f√ºr neue Klassen und im Anschluss der Hinweis zu mir bekannten Klassen. Bitte erweitert in dem ihr mir √ºber die Kommentarfunktion Links nennt. Grundstruktur der Klasse if ( class_exists( 'WP_Customize_Control' ) ) { class Documentation_Customize_Textarea_Control extends WP_Customize_Control { // todo } } Methoden der Klasse Eine ganze Reihe von Methoden stehen bereit nd k√∂nnen √ºberschrieben werden. enqueue() – Scripte und Stylesheets zur Klasse hinzuf√ºgen value() – Holen von Einstellungen to_json() – √úbergib die Daten an ein JS; via JSON check_capabilities() – Pr√ºfe das Rechteobjekt um die Control zu nutzen maybe_render() – Pr√ºfung √ºber das Rechteobjekt, ob das Rendern erfolgen soll render() – Ausgabe des Inhalt durch Aufruf von render_content(). render_content() – Ausgabe der Controler Beispiel Erweiterung Als kleines Beispiel soll eine Klasse entstehen, die das Verwenden von textarea-Elementen im Customizer erm√∂glicht. Die wichtigste Methode daf√ºr ist render() und darin muss das Markup und alle Ausgabe-Objekte …

Share on FacebookTweet about this on TwitterShare on Google+Pin on PinterestEmail this to someone

Leave a Reply

Your email address will not be published. Required fields are marked *