About bjoerne

Keine
So far bjoerne has created 35 blog entries.

Best Practise: Routing in CodeIgniter

Routing ist in MVC-Frameworks wie CodeIgniter das Mapping von Serveranfragen auf Controller-Methoden. Eine Serveranfrage ist dabei charakterisiert durch die URL sowie die Anfragemethode (GET, POST, PUT, DELETE). CodeIgniter bringt ein umfangreiches Routing-Konzept mit. Dieses besteht aus einem einfachen Default-Verhalten (dokumentiert im Zusammenhang mit Controllern: https://codeigniter.com/user_guide/general/controllers.html) sowie einem erweitertem Routing (https://codeigniter.com/user_guide/general/routing.html). Ich möchte zeigen, dass der erweiterte, explizite Ansatz der bessere ist. Einfache Beispielanwendung Um die unterschiedlichen Ansätze zeigen zu können, erstelle ich eine einfache CodeIgniter-Anwendung, die Items verwalten kann. Ein Item soll nur eine einzige Eigenschaft haben, nämlich name. Einfache Itemverwaltung mit CRUD-Aktionen [...]

2018-01-12T18:11:24+00:00 12.01.2018|Tags: , , |0 Kommentare

Messaging mit Ruby on Rails: Auf E-Mails direkt antworten

Nachrichtenfunktion in Webanwendungen Wenn Nutzer einer Software anderen Nutzern Nachrichten schreiben können, spricht man von Messaging. Das kann primär der Kommunikation dienen wie in Chats, Foren oder Dating-Plattformen, aber auch der Koordination wie bei Kleinanzeigen-, Buchungs- oder Verkaufsportalen. Häufig findet sich das folgende Muster: Nachrichten werden innerhalb der Anwendung in einem Postfach verwaltet, jedoch zusätzlich per E-Mail versendet, um den Empfänger auf neue Post hinzuweisen. Nutzer lesen dann zunächst die E-Mail, da das einfach schneller geht. Beim Antworten wird es dann schwieriger. In der Vergangenheit entstand hier meist ein Bruch. Nutzer mussten [...]

2017-07-16T09:58:40+00:00 16.07.2017|Tags: , , , , , |0 Kommentare

Sichere WordPress-Updates mit einem Staging-System

WordPress-Update im Livebetrieb: Wie aus dem Segen ein Fluch werden kann Zugegeben, es ist schon sehr komfortabel, WordPress und seine Plugins upzudaten. Man wird informiert, welche Updates verfügbar sind, ein Klick und schon ist man wieder auf dem neuesten Stand. Probleme gibt es dabei selten. Was aber, wenn doch? Gerade wenn viele Plugins im Einsatz sind oder Plugins, die etwas in die Jahre gekommen sind, ist die Gefahr von Inkompatibilitäten nach einem Update gegeben. Dann ist das Layout zerschossen, es erscheinen Fehlermeldungen auf der Seite oder die Seite ist gar komplett [...]

2017-02-09T14:26:37+00:00 30.01.2017|Tags: , , , , |3 Comments

3 WordPress-Plugins zum Erstellen von Custom Content Types im Vergleich

Was sind Custom Content Types? Die Standard Content Types in WordPress sind Seiten und Beiträge. Das deckt nicht immer den Bedarf ab, wie Inhalte eingepflegt, strukturiert und dargestellt werden. Custom Content Types sind weitere Content-Typen. Auch ohne diesen Begriff zu kennen, kommen viele WordPress-Nutzer damit in Berührung, dann nämlich, wenn nach der Installation und Aktivierung eines Plugins oder Themes neue Menüpunkte erscheinen. Portfolio, FAQ, Galerien, Projekte ... falls ein WordPress-Backend diese Menüpunkte enthält, dann ist die Wahrscheinlichkeit groß, dass dahinter Custom Content Types stecken. Custom Content Type selbst entwickeln WordPress bietet Funktionen zur Registrierung [...]

2017-01-28T14:17:16+00:00 04.10.2016|Tags: , |0 Kommentare

Snippets im Ruby on Rails CMS Refinery am Beispiel von decidre.com

Vor einiger Zeit haben ich die Webanwendung decidre entwickelt. decidre ist ein Zufallsgenerator, der aus einer Liste von Optionen, die der Benutzer eingibt, eine auswählt. Super einfach eigentlich, aber eine große Hilfe für Entscheidungsunfreudige. decidre kann in jeglichen Lebenslagen hilfreich sein, sei es bei der Essens- oder Getränkewahl, bei Fragen rund um die Liebe oder bei der Wahl des nächsten Jobs, Urlaubziels, Autos, Fahrrad ... Deshalb gibt es außerdem noch einen Mini-Blog mit kurzen Geschichten. decidre ist in Ruby on Rails umgesetzt, allerdings eingebettet in das CMS Refinery. Das bedeutet, dass mein [...]

2017-01-28T13:52:37+00:00 28.08.2016|Tags: , |0 Kommentare

Tutorial: Erste Schritte mit dem Ruby on Rails CMS "ComfortableMexicanSofa"

Ruby on Rails ist ein Web Application Framework, das die technische Grundlage legt für Webanwendungen. Es besteht aus vielen hilfreichen Bausteinen, die Entwickler unterstützen, von der Gestaltung der Benutzeroberfläche bis hin zur Datenhaltung. Ein CMS (= Content-Management-System) ist ein System zur Erstellung, Verwaltung und Darstellung von (Web)inhalten. CMS kommen meist als fertige Lösung mit unzähligen Features. Diese beziehen sich sowohl auf die Darstellung der Seite für den End-User als auch auf die Arbeit von Administratoren und Autoren. Über ein Plugin-System sind CMS meist flexibel erweiterbar. Was, wenn ich beides gleichzeitig haben [...]

2017-01-30T15:06:44+00:00 12.08.2016|Tags: , |0 Kommentare

WPML und qTranslate X im Vergleich

Aktuell habe ich in zwei Projekten mit Mehrsprachigkeit zu tun. In einem gibt es bereits eine Lizenz für WPML, in dem anderen Erfahrungen mit qTranslate X. Da stellt sich die Frage, wo ist genau der Unterschied? Wo liegen Vor- und Nachteile? In welchen Fällen ist was die bessere Wahl? Anforderungen In beiden Projekten wird es eine mehrsprachige Seite geben, die fast identisch ist. Das heißt, dass es zu jeder Seite und zu jedem Artikel, zu jedem Menüpunkt und zu jedem Sidebar-Widget eine Entsprechung in allen Sprachen gibt. Am Ende wird es wahrscheinlich Ausnahmen von [...]

2017-01-28T14:21:12+00:00 26.04.2016|Tags: , |16 Comments

bjoerne.com unterstützt die Get Engaged Konferenz in Berlin

Am Sonntag, den 21.02.2016 findet in Berlin die Konferenz Get Engaged statt. Unter dem Motto SPACES & POSSIBILITIES soll der Frage nachgegangen werden, wie Lebens-, Geschäfts- und virtuelle Räume gestaltet werden sollten, damit Toleranz, Akzeptanz sowie die Entfaltung des Individuums und ebenso des Kollektivs gefördert wird. Get Engaged will nicht nur reden, sondern machen. Ich bin Sponsor, aber auch Teilnehmer und freue mich sehr auf den kommenden Sonntag. Hier gibt's mehr Infos: http://www.getengaged.de/conference. Kommt vorbei! Kleiner Nachtrag (24.02.2016): Die Konferenz ist vorbei und hat richtig Spaß gemacht. Interessante Vorträge und Workshops, nette Besucher, [...]

2017-01-28T14:21:28+00:00 15.02.2016|Tags: |0 Kommentare

Update zu Git vs. WordPress: Deployment mit Revisr

Bisheriges Vorgehen und Umschwenken auf Revisr Vor einiger Zeit habe ich im Artikel PHP- bzw. WordPress-Projekte mit Git verwalten und deployen beschrieben, wie ich meine Webprojekte in Git pflege und auf meinen produktiven Webservern deploye. Scheinbar hat mein Hoster etwas geändert und plötzlich lief dieses Vorgehen nicht mehr sauber. Es kam häufig zu Timeouts beim Zugriff auf das Git-Repository. Aus diesem Grund habe ich dem Wordpress-Plugin Revisr eine Chance gegeben und mittlerweile viele meiner Projekte umgestellt. Revisr ist ein WordPress-Plugin, aber auch ein Git-Client. Voraussetzung ist, dass der Kommandozeilenbefehl git auf [...]

2017-01-28T14:21:55+00:00 23.03.2015|Tags: , , |5 Comments

Instagram-Bilder mit IFTTT in den eigenen WordPress-Blog einbinden

Was ist IFTTT? Instagram war für mich der Auslöser, mich mit der Plattform IFTTT zu beschäftigen. Ich wollte Instagram-Bilder auf meiner Facebook-Seite veröffentlichen und fand die eingebaute Share-Funktion der Instagram-App nicht mächtig genug. Auf der Suche nach einer besseren Lösung stieß ich mehrfach auf IFTTT. IFTTT steht für "If this then that". Auf IFTTT kann man eigene Wenn-Dann-Regeln defineren, die sich auf duzende sogenannte Channels beziehen. Channels entsprechen all unseren geliebten Internetdiensten wie Facebook, Instagram, Evernote, LinkedIn, Flickr, WordPress bis hin zu Wetterdiensten und Heimautomatisierung. Diese Kanäle werden in den Regeln [...]

2017-01-28T14:22:46+00:00 16.08.2014|Tags: , , , |13 Comments

Event-Handling in AngularJS und ein potentielles Memory Leak

Event-Handling in AngularJS In vielen Sprachen, Frameworks oder APIs gibt es Konstrukte, die dem Observer-Pattern (Beobachter) entsprechen. Ein Listener wird an einem Subjekt registriert und aufgerufen, sobald ein bestimmtes Event (Ereignis) auftritt. Damit das Subjekt den Listener aufrufen kann, muss dieser eine vorgegebene Schnittstelle implementieren. Abgesehen von dieser Schnittstelle besitzt das Subjekt keinerlei Wissen über den Listener, so dass eine recht lose Kopplung zwischen den Objekten besteht. Hierin liegt der Vorteil dieses Entwurfsmusters. In AngularJS wird dieses Konzept umgesetzt, in dem die Scopes die Funktion eines Event-Bus einnehmen. Listener können [...]

2017-01-28T13:52:41+00:00 01.03.2014|Tags: , , , |0 Kommentare

Bildverarbeitung mit der Javascript File API und Data-URLs - im Browser und ohne Server

Vor einiger Zeit habe ich mich mit den Möglichkeiten auseinandergesetzt, Bilddateien ohne Kommunikation mit dem Server mit Javascript zu verarbeiten. Herausgekommen ist ein kleiner Prototyp, den ich hier vorstellen möchte. Idee Der Prototyp stellt mehrere Tabs dar. Im ersten wählt man die Ursprungsbilddatei aus. In den weiteren Tabs wird das transformierte Bild sowie die Data-URL (dazu später mehr) dargestellt. Prototyp in Github und Livedemo Der Sourcecode ist verfügbar unter: https://github.com/bjoerne2/js-image-prototype/ Den Prototypen habe ich auf meinem Webspace deployt: https://www.bjoerne.com/development/js-image-prototype/ Verwendete Bibliotheken Der Prototyp ist mit AngularJS umgesetzt. Damit das ganze [...]

2017-01-28T14:23:26+00:00 25.12.2013|Tags: , , , |0 Kommentare

Alte Computerzeitschriften upcyclen: Geek-Boxen

Mal ein etwas anderer Artikel. Ich habe vor kurzem meine Sammlung von Computerzeitschriften ausgemistet. Keine große Sammlung, nur ein paar Hefte, doch das Schicksal, was diese Hefte ereilte, kennt wahrscheinlich jeder: veraltet! Technologien, die mittlerweile nicht mehr State of the Art sind, Bibliotheken, die schon zwei Major-Updates erfahren haben: in der IT geht es ziemlich rasant zur Sache. Ich habe großen Respekt vor den Computermagazinen. Blogartikel oder Forenbeiträge können nicht ersetzen was die journalistische Zunft uns beschert. Daher konnte ich die Zeitungen nicht einfach wegwerfen. Stattdessen habe ich sie zu [...]

2017-01-28T14:26:15+00:00 01.12.2013|0 Kommentare

WordPress Dropdown-Menü für mobile Geräte optimieren

Mobile Geräte kennen kein Mouseover Jahrelang haben Webdesigner und -programmierer mit den anschaulichsten und praktischsten Mouseover-Effekten um sich geworfen. Mit dem mobilen Internet erleidet dieses Vorgehen allerdings eine Vollbremsung. Denn mobile Geräte kennen üblicherweise kein Mouseover und die erste Geste, die das Device mitbekommt, ist bereits der Klick oder der Touch. Leidtragender ist von diesem Umdenken auch das Dropdown-Menü der Standard-WordPress-Themes, zumindest in bestimmten Fällen. Konflikt zwischen Link und Aufklappen Als Beispiel möchte ich meinen Reiseblog http://travel.bjoerne.com/ heranziehen. Dort setze ich ein hierarchisches Menü mit mehreren Ebenen ein. Um das [...]

2017-01-28T13:52:43+00:00 04.11.2013|Tags: , , , , |16 Comments

WordPress: Konflikt zwischen Updates und eigenen Änderungen auflösen

Wer in WordPress Änderungen an Plugins oder Themes vornimmt, kann anschließend deren Updates nicht mehr durchführen, ohne seine Änderungen zu verlieren. Mit ein bisschen Know-How ist aber auch das kein Problem und ein einfacher Prozess hilft, dass man nicht alle Änderungen erneut manuell eingeben muss. Voraussetzung: Das Projekt sollte in einer Versionsverwaltung gehalten werden. Ich empfehle Git und ein Vorgehen wie in diesem Artikel beschrieben. Aus aktuellem Anlass durchlaufe ich selbst nun diesen Prozess: Ich habe Änderungen am twentythirteen Theme vorgenommen und mit dem neuesten WordPress-Update wurde dieses Theme überarbeitet. [...]

2017-01-28T13:52:44+00:00 01.11.2013|Tags: , , , , |0 Kommentare

Wie performant ist jQuery.proxy()?

Immer wieder liest man im Netz, dass der Einsatz von jQuery.proxy() auf die Performance geht von Javascript-Anwendungen geht. Nachdem ich in meinem Artikel zu Javascript und Clean Code den exzessiven Einsatz von jQuery.proxy() quasi propagiert habe, wollte ich wissen, was an dieser Aussage wirklich dran ist. Ich habe ein bisschen mit JSFiddle herumgespielt und wollte mit einem Skript einen allgemeingültigen Vergleich von jQuery.proxy mit einer einfachen anonymen Javascript-Funktion durchführen. Das war mir allerdings nicht möglich. Denn es gibt zu viele Faktoren, die Einfluss nehmen: Anzahl erzeugter Proxies Anzahl von Proxy-Aufrufen [...]

2017-01-28T14:27:39+00:00 13.10.2013|Tags: , , , |0 Kommentare

Einen lokalen ZendServer unter OSX installieren und konfigurieren

Vor kurzem habe ich einem Freund geholfen, einen lokalen ZendServer zu installieren. Der Freund ist kein Softwareentwickler, arbeitet aber viel mit WordPress, so dass ein lokaler Server sinnvoll ist. Es fiel aber auf, dass die Installation hier und da ein bisschen Expertenwissen erfordert. Zwar lässt sich der Server zunächst mit einem Wizard installieren, aber ganz ohne Kommandozeile lässt sich nicht auskommen. Daher habe ich mich entschieden, eine Installationsanleitung zu schreiben, auch wenn es schon ein paar gibt (s.u.). Die Anleitung richtet sich an den durchschnittlichen OSX-Benutzer und nicht ausschließlich an [...]

2017-01-28T13:52:45+00:00 11.10.2013|Tags: , , , |2 Comments

In WordPress Excerpts die drei Punkte [...] auf Artikel verlinken

Auf meinem Reiseblog setze ich das Standard-Theme twentytwelve ein. Die hier vorgestellte Lösung lässt sich aber sicherlich auch auf andere Themes anwenden. Mir fiel auf, dass am Ende von Excerpts (= verkürzte Artikeldarstellung auf der Übersicht oder in Suchergebnissen) zwar drei Punkte [...] erscheinen, diese aber nicht verlinkt sind. Die drei Punkte sind übrigens in HTML …. Mit ein bisschen Aufwand lässt sich das leicht ändern. In der Datei functions.php des Themes habe ich dazu einfach den folgenden Code-Block eingefügt. Fertig! function twentytwelve_link_hellip_in_excerpt( $content ) {     return str_replace( '[…]', [...]

2017-01-28T14:27:54+00:00 11.10.2013|Tags: , , , |0 Kommentare

WordPress SEO für Einsteiger: Meta Description und Google+ Profil einstellen

Wer sich mit WordPress und SEO auskennt, dem erzähle ich hier wahrscheinlich nichts neues. Allen anderen, die sich mit SEO noch nicht oder nur ein bisschen auseinandergesetzt haben, möchte ich hier einen kleinen Einblick in das WordPress SEO Plugin von yoast geben. Dabei will ich nur zwei Funktionen vorstellen. Für mehr Details empfehle ich die offizielle Webseite von yoast, auf der umfangreich erklärt wird, was bei der Optimierung für Suchmaschinen zu bedenken ist und wie das Plugin dabei unterstützt. Meta Description für Seiten und Artikel einstellen Die sogenannte Meta Description [...]

2017-01-28T13:52:46+00:00 08.10.2013|Tags: , , , , , , |11 Comments

AngularJS Patterns: Resolver als eigenständige Klasse

Als ich die ersten Schritte mit AngularJS gegangen bin, war ich total geflasht. Die Entwickler von AngularJS haben's einfach drauf, die Konzepte stimmen, alles läuft wie geschmiert. An einer Stelle bin ich aber ins Stocken geraten, teils weil dies nicht gut dokumentiert war und teils, weil das Konzept den Entwickler nicht gut unterstützt. Es geht um die den $routeProvider und die resolve-Eigenschaft. Den Nutzen von resolve stellt John Lindquist in einem Youtube-Video recht gut dar. Mit resolve lässt sich bewirken, dass ein Seitenwechsel in AngularJS erst dann stattfindet, wenn bestimmte [...]

Javascript und Clean Code

Für die Online-Tagebuchplattform monkkee habe ich viel Javascript geschrieben. Beruflich habe ich mehrere Jahre JavaEE-Anwendungen mitentwickelt. Während ich in der Java-Welt eine Begeisterung für Clean Code und das [amazon asin=0132350882&text=gleichnamige Buch von Robert C. Martin] entwickelt habe, war ich in der Javascript-Welt eher erschrocken, wie wenig Wert auf sauberen Code gelegt wird. Wie komme ich zu dieser Einschätzung? Anonyme Funktionen wohin man schaut Wenn ich mir Javascript-Codebeispiele ansehe, dann werden im großen Stil anonyme Funktionen (meistens als sogenannte Callbacks) eingesetzt. Das betrifft zum einen sehr einfache Beispiele, in denen dieses [...]

2017-01-28T14:28:41+00:00 26.09.2013|Tags: , , , , |2 Comments

Mit einfachen Mitteln eine mehrsprachige WordPress-Site aufsetzen

Eine einfache WordPress-Installation unterstützt Mehrsprachigkeit nicht wirklich und entspricht üblicherweise genau einer Sprache. Beim Aufsetzen der Webseite von monkkee.com standen wir deshalb zunächst vor einer Herausforderung, denn die Seite wollten wir in Englisch und Deutsch anbieten. Wie macht man das? Eine wichtige Ressource ist der offizielle WordPress-Artikel hierzu. Außerdem gibt es hilfreiche Blog-Artikel, die das Thema adressieren (siehe unten). Eigene WordPress-Seite je Sprache Wir haben uns dazu entschieden, für jede Sprache eine eigene WordPress-Seite aufzusetzen. Diese Option wird auch im WordPress-Artikel unter der Überschrift "Each language in its own WordPress [...]

2017-01-28T13:52:48+00:00 22.09.2013|Tags: , , , , , |11 Comments

Update WordPress-Plugin "Navigation Du Lapin Blanc"

Gestern habe ich eine neue Version meines WordPress-Plugins mit dem schönen Namen Navigation Du Lapin Blanc herausgebracht. Inhaltlich ist dieses Update von Version 1.0.4 auf 1.0.5 nicht der Rede wert, lediglich die Art, wie Kategorie-Links erzeugt werden, habe ich angepasst. Ich will dieses Ereignis aber trotzdem zum Anlass nehmen, ein paar Dinge über das Plugin zu verlieren Zum Plugin Das Plugin "berechnet" aus den bestehenden Seiten eines WordPress-Projektes eine hierarchische Menüstruktur. Mit PHP-Funktionen, die das Plugin mitbringt (= API), lassen sich Teile dieser Struktur komfortabel auswerten und einzelne Navigationsebenen auf [...]

2017-01-28T13:52:49+00:00 17.09.2013|Tags: , , , , , |0 Kommentare

Unterschiede zwischen Hosting auf wordpress.com und eigener Installation

Ich habe bei WordPress einen Blog, der gratis auf wordpress.com gehostet wird: http://bjoerne.wordpress.com/. Bevor ich diesen Blog hier (https://www.bjoerne.com) eingerichtet habe, hatte ich kurz überlegt, ob ich den Blog nicht auf obiger Adresse schreibe, mich dann aber dagegen entschieden. Gleiches gilt für meinen Reiseblog auf http://travel.bjoerne.com. Warum eigentlich? Themes Über wordpress.com stehen viele Themes zur Verfügung (aktuell sind das 231). Allerdings sind nicht alle gratis. Viele davon sind Premium Themes, die man erst kaufen muss. Es ist nicht möglich, sein selbstentwickeltes oder woanders gekauftes Theme zu verwenden. Auch ist es [...]

2017-01-28T13:52:49+00:00 13.09.2013|Tags: , , , , |0 Kommentare

Benutzerdefinierte Felder in WordPress selber nutzen

Benutzerdefinierte Felder bieten in WordPress die Möglichkeit, Seiten und Artikel mit zusätzlichen Informationen anzureichen. Wenn Plugins oder Themes diese Informationen auswerten, können so auf einfache Art beliebige Dinge konfiguriert werden. Beispiel: Sidebar auf Impressumsseite ausblenden Als Beispiel möchte ich auf meiner eigenen Seite die Sidebar auf der Seite Impressum ausblenden. Ich möchte das über ein benutzerdefiniertes Feld hide_sidebar machen. Ich öffne zunächst im WordPress-Adminbereich die Seite Impressum. Fall der Bereich Benutzerdefinierte Felder noch nicht sichtbar ist, muss dieser erst über Optionen eingeblendet werden. Weiter unten befindet sich nun der Bereich. [...]

2017-01-28T14:29:31+00:00 13.09.2013|Tags: , , |0 Kommentare