Fotografie

Neben Programmierung und Webdesign ist die Fotografie ein großes Hobby von mir. klein0r.de ist meine zweite Homepage die sich ausschließlich mit der Fotografie auseinander setzt.

klein0r.de

Portfolio

In der Fotografie habe ich mich auf den Bereich People-Fotografie spezialisiert. Auf kleine-photo.com präsentiere ich einige Ergebnisse von diversen Shootings.

kleine-photo.com

Da ich mich in Zukunft etwas tiefer in die eCommerce-Materie einarbeiten möchte, muss ich natürlich auch wissen welche Produkte am Markt sind und wie sie sich unterscheiden. In diesem Artikel versuche ich die verschiedenen Plattformen zu analysieren und zu vergleichen um so einen ersten Überblick zu verschaffen.

Da ich selbst komplett neu in der Materie bin kann es natürlich sein das sich Fehler einschleichen. Ich versuche natürlich alles so gewissenhaft wie möglich zu recherchieren. Dennoch gebe ich für die Richtigkeit keine Garantie!

Als erstes – die Kandidaten:

  • Magento
  • Oxid
  • Gambio
  • Mage+

Magento

Magento ist eine Open-Source eCommerce-Plattform (Open Software Licence 3.0) aus den USA (Kalifornien) und kann mittlerweile auf eine grandiose Liste an Referenzen blicken. Erstmals veröffentlich wurde sie Anfang 2008 und wird von der gleichnamigen Firma entwickelt (eine Tochtergesellschaft von eBay). Magento basiert auf PHP (plus Zend-Framework) und setzt unterstützt als DBMS standardmäßig mySQL. Die Konfiguration erfolgt zudem weitestgehend über XML.

Im Standardumfang kann Magento mehrere Shops mit eigenständigen Katalogen und Kundenstämmen auf unterschiedlichen Domains verwalten. Weiterhin zeichnet es sich durch ein sehr flexibles Produkt- und Attribut-System aus. Um es erweitern zu können ist die Installation von Magento-Connect nötig. Mittlweile gibt es mehrere tausend Erweiterungen um den Standardumfang zu ergänzen (beispielsweise durch Zahlungs- oder Versandmodule).

Programmiert ist Magento komplett objektorientiert und sehr modular aufgebaut. So können eigene Funktionalitäten leicht eingebaut werden ohne bestehende Dateien ändern zu müssen. Durch Vererbung und überschriebene Methoden kann die Software also ganz einfach aktualisiert werden ohne die eigenen Änderungen zu verwerfen.

Weiterhin ist die Datenbank nach dem EAV-Modell aufgebaut. So lassen sich weitere Attribute ohne Datenbankänderungen hinzufügen. Diese dynamische Gestaltung geht dabei auf Kosten der Performance, da mehr Datenbankabfragen pro Seitenaufbau durchgeführt werden müssen um die nötigen Informationen zu sammeln. Wie man diesem Performanceverlust entgegen wirken kann wird im nächsten Abschnitt beschrieben.

In der Basisinstallation ist Magento nicht für den Deutschen Markt nutzbar, da vorgeschriebene Bestandteile wie eine Widerrufsbelehrung fehlen. Um Magento für den Gebrauch in Deutschland vorzubereiten gibt es aber ein Modul namens “Market Ready Germany”.

Oxid

Oxid ist ebenfalls eine Open-Source eCommerce-Lösung. Entwickelt wird sie in Freiburg und basiert ebenfalls auf PHP und mySQL. Mittlweile hat die Oxid-Community über 12.000 Mitglieder weltweit. Dadurch dass das System in Deutschland entwickelt wird hat man den Vorteil von Deutschem Support und dass das System direkt für den Deutschen Markt nutzbar ist.

Oxid ist ebenfalls komplett objektorientiert programmiert. Im Gegensatz zu Magento setzt Oxid auf ein flaches Datenbanklayout. Bei Erweiterungen muss also die Datenbankstruktur geändert werden. Bis auf die verwendete Smarty-Template-Engine handelt es sich bei OXID um eine komplette Eigenentwicklung. Smarty wird zum Rendern des Frontends verwendet.

Neue Funktionalitäten werden ebenfalls in Module gekapselt um keine bestehenden Dateien überschreiben zu müssen.

Gambio

Gambio ist ebenfalls eine Deutsche Shopsoftware. Entwickelt wird sie in Bremen und ist nur in einer kostenpflichtigen Version verfügbar.

Mage+

Mage+ ist eine von der Community vorangetriebene Version von Magento (basierend auf Version 1.7) und kann über GitHub bezogen werden. Er beruht auf der quelloffenen Community Edition der Software und soll eine direktere Beteiligung sowie die schnellere Weiterentwicklung des Webshops ermöglichen. Ins Leben gerufen wurde diese Version durch die Community da teilweise zu spät auf Fehler reagiert wurde und nach der Übernahme durch eBay die Roadmap wohl etwas unklar sei. eBay wurde weiterhin vorgeworfen, dass es keine klare Vorstellung von OpenSource habe.

Ob die Entwicklungsarbeiten von Mage+ jemals zurück in Magento fließen ist unklar. Es bleibt abzuwarten in wie fern sich das System entwickelt.

Kosten

Magento

Kostenfrei ist nur die Community-Edition (CE). Daneben bestehen die Magento Enterprise und Magento Enterprise Premium Versionen (hier zum Vergleich). Je nach Version wird dabei unterschiedlicher Support geboten. Gezahlt wird jährlich.

Scheinbar wurde die Aufstellung der verschiedenen Versionen in letzter Zeit geändert. Zumindest finde ich noch Informationen zu einer Professional Edition (PE) im Netz, welche man auf der Magento-Seite so nicht findet.

Oxid

Anfangs wurde das System nur kommerziell vertrieben. Seit Herbst 2008 wird ebenfalls eine Community-Edition (CE) angeboten welche mit der GPLv3 lizensiert wurde. Scheinbar wurde der Druck seitens Magento zu groß und man hatte Angst gegen eine Open-Source-Plattform Land zu verlieren. Gut für die Community!

Vom Funktionsumfang ist diese mit der Professional Edition (PE) identisch – hier zahlt man also nur für den Support. Weiterhin gibt es eine Enterprise Edition (EE) welche einige Funktionen mehr besitzt.

Performance

Magento

Durch die Verwendung des EAV-Modells in der Datenbank bricht die Performance stark ein. Um dem entgegen zu wirken ist der Einsatz einer Caching-Lösung unbedingt zu empfehlen.

Auf dieser Seite werden einige richtig coole Scroll-Effekte vorgestellt. Ich finde es richtig cool und werde es im Hinterkopf behalten falls man so etwas einmal braucht!

Mir sind immer wieder diese coolen Social Icons auf verschiedenen Seiten aufgefallen – diese zersplitterten oder zerbrochenen. Wie man es auch nennen mag, man findet sie hier. Veröffentlicht wurde das ganze sogar unter der Creative Commons-Lizenz. Ich bin begeistert! Leider nur für non-commercial use. Aber das sollte den meisten in privaten Blogs egal sein!

Heute bin ich im Web über ein interessantes Projekt gestolpert. Dabei geht es darum mit CSS Animationen auf der eigenen Website zu nutzen. Wirklich genial muss ich sagen. Ich werde es unbedingt in den nächsten Tagen (in meinem Blog?) ausprobieren – auch wenn ich eigentlich kein Fan von Animationen bin.

Obwohl dieses Blog nichtmal eine Woche alt ist habe ich schon etwas Zeit investiert und einige PlugIns ausprobiert. Diese möchte ich euch natürlich nicht vorenthalten und daher gibt es nun eine kleine Übersicht. Ich habe den exakten PlugIn-Namen kopiert und als Titel genutzt. So könnt ihr ganz einfach das selbe PlugIn finden und installieren!

AddThis Social Bookmarking Widget

Super nützliches Plugin von AddThis – sicher bekannt. Erlaubt das Teilen von Beiträgen und anderen Inhalten auf bekannten Plattformen wie Facebook, Twitter und anderen. Kann beliebig konfiguriert werden und funktioniert perfekt.

All in One SEO Pack

Out-Of-the-Box Suchmaschinenoptimierung. Leider gibt es in dem Bereich hunderte von PlugIns und so ist es sehr schwer eins zu finden was alles kann. Zumal es auch schwer zu kontrollieren ist ob alles funktioniert.

Google XML Sitemaps

Ein weiteres Plugin um Suchmaschinen zu unterstützten. Dieses soll helfen den gesamten Content im Blog zu listen indem eine Sitemap erstellt wird. Dabei kann in den Einstellungen angegeben werden welche Priorität die einzelnen Seiten haben und wie oft diese erneut besucht werden sollen. Ich finde es klasse – wie gut es am Ende hilft weiß ich nicht. Das wird die Zeit zeigen.

WP Code Highlight

Wie der Name schon sagt kann mit diesem PlugIn verschiedener Code lesbarer gemacht werden. Leider ist die Homepage nicht ganz so hilfreich.

Yet Another Related Posts Plugin

Wahnsinnig einfaches PlugIn welches unter jeden Post eine Liste von ähnlichen Posts anbietet. In 30 Sekunden installiert und konfiguriert. Super hilfreich!

Also habe ich mich daran gemacht ein neues Theme für WordPress zu schreiben. Soweit war das noch einfacher als für Joomla! – wirklich gut und einfach gehalten. Mein Template ist natürlich sehr statisch gehalten und erlaubt (noch) keinerlei Konfigurationen. Aber das wird sich mit der Zeit hoffentlich ändern.

Basis des Templates ist jedenfalls YAML. Mittlerweile habe ich das CSS-Framework wirklich lieb gewonnen. Man erzielt viel schneller Ergebnisse und muss sich nicht ständig mit Browser-Bugs und Workarounds rumschlagen. Es macht wirklich viel mehr Spaß so zu Arbeiten. Nach ganz kurzer Einarbeitungszeit geht wirklich alles super easy von der Hand! Ich kann jedem nur wärmstens empfehlen sich näher mit diesem genialen Framework auseinander zu setzen. Natürlich gibt es jede Menge Alternativen – doch die habe ich alle noch nicht ausprobiert. Ich vermisse wirklich nichts.

Nun die Frage: Wie gefällt das neue Theme?

Ich bin ja wirklich noch etwas unbeholfen wenn es um WordPress und die Einstellmöglichkeiten geht. Ich glaube ich versuche viel zu oft in einem PlugIn die Lösung zu finden anstatt erstmal die Boardmittel richtig kennen zu lernen. So habe ich folgende Optionen gerade vermisst:

  • Menüeinträge auf eine neue Seite verlinken lassen (neues Fenster im Browser)
  • Kommentare auf bestimmten Seiten verbergen/abschalten

Beides lässt sich im Administrations-Bereich auf der jeweiligen Seite einstellen. Leider ist es nicht sofort ersichtlich und so muss man die Optionen erstmal einblenden. Dazu gibt es im oberen Bereich auf jeder Seite einen Button mit der Aufschrift “Optionen einblenden”. Klickt man darauf hat man einige Möglichkeiten die aktuelle Seite mit weiteren Optionen zu füllen. Hier ist standardmäßig vieles deaktiviert. Wahrscheinlich um Platz zu sparen und ein wenig die Übersichtlichtkeit zu wahren. Leider hat mich genau das nun schon zweimal erwischt und ich habe etliche Minuten Google bemüht bevor ich dort geschaut habe.

Beim nächsten Mal schaue ich direkt dort rein ob sich da meine Lösung versteckt. Andernfalls verbringe ich doch noch mehr Zeit auf Google als auf anderen Seiten glaube ich…

Auf fast allen meinen Seiten setze ich bisher das PHP-Framework phpFlickr ein. Leider bietet es nicht alle Funktionalitäten die von mir genutzt werden. Um den bestehenden Code nicht verändern zu müssen habe ich also auf Vererbung zurückgegriffen und einige Methoden einfach überschrieben. Insbesondere im Bezug auf Caching habe ich einiges geändert.

Folgendes habe ich verändert:

  • Man kann angeben für welche Art von Requests der Cache nicht genutzt werden soll (um immer aktuell zu bleiben).
  • Man kann für verschiedene Methodenaufrufe die Ablaufzeit vom Cache angeben.
  • Es ist möglich eine Übersicht aller ausgeführten Request zu bekommen (inkl. Zeitbeanspruchung) – gerade für die Optimierung ist das sehr hilfreich.

Hier die Klasse:


define("MYFLICKR_ONEDAY_CACHE_EXP", 86400);

if (class_exists('phpFlickr')) {

	class myFlickr extends phpFlickr {
		/*
			The following request types shouldn't be cached
		*/
		var $dontcacherequests = array(
			'flickr.photos.comments.getList',
			'flickr.contacts.getList',
			'flickr.favorites.getList'
		);

		var $changedCacheTimes = array (
			'flickr.photos.getInfo' => MYFLICKR_ONEDAY_CACHE_EXP,
			'flickr.people.findByUsername' => MYFLICKR_ONEDAY_CACHE_EXP,
			'flickr.people.getPublicPhotos' => 7200,
			'flickr.urls.getUserPhotos' => MYFLICKR_ONEDAY_CACHE_EXP
		);

		/*
			This array will hold statistics about the different request types
		*/
		var $requestStatistics = array();

		/*
			This array holds time statistics for each query
		*/
		var $requestTimeStatistics = array();

		/*
			This variable holds the total time which has been taken by the several requests
		*/
		var $totalRequestTime = 0;

		/*

		*/
		var $default_cache_expiration = 600;

		/*
			Constructor will call base class
		*/
		function __construct($api_key, $secret = NULL, $die_on_error = false) {
			parent::__construct($api_key, $secret, $die_on_error);
		}

		/*
			Overwritten
		*/
		function enableCache($type, $connection) {
			parent::enableCache($type, $connection, MYFLICKR_ONEDAY_CACHE_EXP * 2); // Default cache expiration
		}

		/*
			Overwritten
		*/
		function getCached($request) {
			if (!isset($this->requestStatistics[$request['method']])) {
				$this->requestStatistics[$request['method']] = 1;
			}
			else {
				$this->requestStatistics[$request['method']] += 1;
			}

			if (in_array($request['method'], $this->dontcacherequests)) {
				return false;
			}
			else {

				// Overwrite cache time
				if (array_key_exists($request['method'], $this->changedCacheTimes)) {
					$this->cache_expire = $this->changedCacheTimes[$request['method']];
				}
				else {
					$this->cache_expire = $this->default_cache_expiration;
				}

				return parent::getCached($request);
			}
		}

		/*
			Overwritten
		*/
		function request($command, $args = array(), $nocache = false) {
			$startTime = microtime(true);

			$result = parent::request($command, $args, $nocache);

			$requiredTime = microtime(true) - $startTime;
			$this->totalRequestTime += $requiredTime;
			array_push($this->requestTimeStatistics, array($command, $requiredTime));

			return $result;
		}

		function getRequestStatistics() {
			return $this->requestStatistics;
		}

		function getRequestTimeStatistics() {
			return $this->requestTimeStatistics;
		}

		function getTotalRequestTime() {
			return $this->totalRequestTime;
		}
	}
}

Das Blog ist ja immer noch im Aufbau. Ich habe mir also einige PlugIns angesehen welche die Integration von Facebook, Google Plus und den anderen Plattformen erlauben. Natürlich gibt es PlugIns die eben NUR Facebook integrieren – aber das war mir persönlich nicht genug (wenigstens Google+ musste dazu).

Nach einiger Zeit kam mir wieder AddThis in den Sinn. Diesen Dienst hatte ich vor einiger Zeit schon im Einsatz und ich nutze ihn ebenfalls bei Blogspot (wobei da mein Blog schon etwas einschläft und ich lange nichts gepostetet habe). Ich habe mir gedacht: Es wäre blöd wenn es da kein WordPress-PlugIn gäbe. Und siehe da – es gibt tatsächlich eins. Installiert und konfiguriert in 2min (maximal). Ich bin begeistert! Das nenn ich mal einfach.

Nun gibt`s also auch die bekannten Buttons der sozialen Netzwerke hier damit ihr meine Beitrags im Netz verbreiten könnt – super, oder?

Da ich demnächst öfter PHP-Code veröffentlichen will in dem ich beschreibe wie etwas genau funktioniert, darf ein anständiges Code-Highlighting natürlich nicht fehlen.

Hier ein Beispiel wie das Ganze dann aussieht:

define('WP_MEMORY_LIMIT', '40M');

Dazu habe ich das Plugin WP Code Highlight installiert. Leider ist die Unterstützung für den WYSIWYG-Editor nicht vorhanden und so muss man öfter mal zwischen der visuellen und der HTML-Ansicht hin und her schalten. Nervt ein wenig, aber bringt einen sicher nicht um. Eventuell finde ich in Zukunft ja noch ein besseres PlugIn. Erstmal bin ich mit der Lösung sehr zufrieden!

Da beschäftigt man sich seit gerade einmal 30 Minuten mit WordPress und schon bekommt man nach einer Plugin-Installation den ersten Fatal-Error noch bevor der erste Artikel geschrieben wurde – ich bin begeistert.

Installieren wollte ich ein Plugin welches mir einen Facebook-Like-Button unter die Artikel setzt. Klingt erstmal simpel. Leider bekam ich danach folgende Meldung

Fatal error: allowed memory size of…

Für jemanden der schon eine Weile mit PHP gearbeitet hat sicher nichts besonderes. Aber da frage ich mich: WordPress ist super leicht zu Installieren und alles geht total einfach von der Hand – selbst für jemanden der noch nie etwas mit Webservern, PHP, SQL oder anderen Komponenten Kontakt hatte, sollte die Installation in maximal 60 Minuten (wenn man sich wirklich erst komplett einlesen muss) zu schaffen sein. Und dann bekommt man nach so einer simplen PlugIn-Installation direkt so einen schwerwiegenden Fehler und der gesamte Administrationsbereich kann nicht mehr aufgerufen werden.

Nach einer extrem kurzen Suche im Netz bin ich schnell zu der Lösung gekommen: Speicherlimit muss manuell in der wp-config erhöht werden. Dazu gibt es zwei Möglichkeiten:

  • Speicherlimit direkt über ini_set erhöhen
  • Ein von WordPress bekanntes define nutzen – dann kümmert sich die Software um die Erhöhung des Speicherlimits

Also habe ich Flow gestartet (gibt es nun übrigens auch mit Mac-App-Store) und habe die wp-config geöffnet. Selbst wenn man noch nie mit WordPress kontakt hatte findet man sich schnell zu recht – die wp-config ist wirklich simpel aufgebaut und enthält nur das nötigste. Ich habe mich übrigens für Variante zwei entschieden und das Speicherlimit auf 40MB gesetzt.

define(‘WP_MEMORY_LIMIT’, ’40M’);

Und siehe da: Problem gelöst.

Eigentlich habe ich mit dieser Domain nichts weiter vor gehabt. Dennoch ist sie mir zu schade um weitere Jahre ungenutzt zu bleiben. Daher habe ich mich entschieden mal ein WordPress-Blog aufzusetzen dem ich meine persönliche Erfahrungen im Bereich Programmierung, Webdesign und anderen technischen Themen widme.

Daneben bestehen natürlich weiter folgende Websiten fort:

  • klein0r.de – alles um die Fotografie; Reviews, Tutorials, Erfahrungen, Neuigkeiten, …
  • kleine-photo.com – ein reines Portfolio was nur mit Bildern gefüllt wird und sonst keinen Inhalt bietet.

Das wars dann auch schon von mir für den Einstieg – ich hoffe ich komme dazu regelmäßig neue Inhalte zur Verfügung zu stellen. Momentan ist das Design natürlich noch nicht so ganz fertig und ich setze mich erstmal mit dem Theming in WordPress auseinander. So viel anders als bei beispielsweise Joomla! wird es schon nicht sein – hoffe ich.