Jan
17

Mac OS als Webserver

Das arbeiten daheim, in der Firma oder gar im Zug kann durch einen lokalen Webserver sehr angenehm werden. Gerade im Zug ist es häufig sehr schwierig eine Internetverbindung aufrecht zu erhalten. Falls man es doch schaffen sollte, ist die Bandbreite so gering, dass der Spaß am Arbeiten häufig ausbleibt.

Ein lokaler Webserver würde all diese Probleme lösen und genau um so einen Webserver, soll es in diesem Blogeintrag auch gehen. Ich selbst nutze seit Jahren privat einen Mac und bin auch all diese Jahre sehr glücklich mit diesem System. Auf Arbeit jedoch musste ich bis vor kurzem noch mit Windows und Linux vorlieb nehmen.

Doch wie ihr an der Formulierung schon bemerkt haben solltet musste ich dies, d.h. mittlerweile arbeite ich auch mit einem Mac. Unter Windows greifen fast alle, die einen Webserver lokal nutzen wollen zu XAMP. Es ist sehr leicht zu installieren und leistet für die meisten Anwendungsfälle gute Dienste. Falls man wie ich gerne Bordmittel des Betriebssystems nutzt, versucht man sich unter Windows auch einmal mit IIS. Und ich muss sagen es ist besser als sein Ruf. Ich konnte unter IIS damals TYPO3 ohne Probleme installieren.

Nach meinen Windows-Exkursen bin ich auf Linux gewechselt und in Serversachen kann man mit Linux echt alles machen. Auch wenn man hier doch ein wenig Einarbeitungszeit benötigt, um mit der Shell klarzukommen. Die echten Linux-Nutzer werden zurecht behaupten, dass sie das beste System in Sachen Server haben.

Doch was machen wir nun mit einem Mac? Viele Mac Einsteiger googlen eine Minute und werden dann auf das MAMP Projekt stoßen. Die Installation wurde genauso einfach gehalten wie beim XAMP oder LAMP (auch Linux für Linux verfügbar). Einfach die DMG herrunterladen, installieren, starten und schon läuft der Webserver. Wie schon für XAMP gilt auch hier – für die meisten Anwendungsfälle genügt dies vollkommen.

Wenn man sich als Einsteiger dann an einen Fortgeschrittenen Mac-Nutzer wendet, dann wird man gesagt bekommen, dass das ganze mit MAMP nicht so schön ist und man doch MacPorts nutzen soll. Was ist nun wieder MacPorts? MacPorts ist ein OpenSource-Projekt, welches wie zum Beispiel aptitude oder apt funktioniert. Es ist sozusagen ein Paketverwaltungstool. Man kann X11 Pakete kompilieren, installieren, updaten oder upgraden.

Mit Macports kann ich also nun einfach – wie auf einem Debian Server – meine Pakete für den Webserver installieren. Ich selbst habe es auch einmal genutzt und war begeistert. Nun habe ich jedoch einen neuen Mac und wollte einmal schauen was mir Mac OS so bietet. Denn was viele vielleicht nicht wissen – Mac OS liefert euch sowie ihr euren Rechner aus dem Karton nehmt einen WEBSERVER. Und ich möchte euch nun zeigen was ihr machen müsst um diesen zu nutzen.

Um euch zu zeigen, dass man auch ohne große Anpassungen euren Mac als Webserver nutzen kann, werden wir zunächst nur Basis aktivieren und ausprobieren. Um euren “Webserver” zu aktivieren begebt ihr euch bitte in eure Systemeinstellungen und klickt auf den Menüpunkt “Freigaben” oder englisch “sharing”.

Nun setzt ihr bei Webfreigabe einen Haken und siehe da – euer Mac verkündet euch unter welcher Adresse ihr in eurem Browser auf das Home Verzeichnis zugreifen könnt. Bei mir wäre es http://172.20.10.2/~markusguenther/ Wobei man leicht sehen kann das es einfach nur meine IP + mein Homeverzeichnis ist. Denn mit der Tilde kommt ihr direkt in euer Nutzerverzeichnis.

In diesem Ordner sollte sich nun ein Ordner mit dem Namen “Sites” bzw. “Seiten” befinden. Falls dies nicht der Fall ist -  legt einfach einen an. Wenn ihr nun im Browser eure URL aufruft zeigt euch der Mac, wenn ihr keinen Sites Ordner erstellen musstet, eine Begrüßungsseite.

Das war es im Prinzip schon. Nun könnt ihr kleine Webseiten für euch lokal aufsetzen. Ihr könnt sogar schon PHP nutzen. Falls ihr wissen wollt über was ihr nun schon alles verfügt, testet dies doch mit einem phpinfo();

Hierzu erstellt ihr euch einfach eine Datei foo.php mit dem folgenden Inhalt. Ihr könnte diese Datei mit einer IDE oder einfach TextEdit erstellen.

phpinfo();

Bitte die php-Tags nicht vergessen.

Nun ruft ihr einfach http://172.20.10.2/~markusguenther/foo.php auf und schon bekommt ihr sämtliche Informationen zu eurem Apache Server.

Doch was ist nun wenn ihr ein TYPO3 betreiben wollt oder FLOW3? Wie ihr seht, habt ihr mit Mac OS Lion, PHP 5.3 zur Verfügung. Also FLOW3 und TYPO3 4.6 sind kein Problem. Doch dazu brauchen wir noch ein bisschen mehr.

Was ist also das Ziel? Zunächst wollen wir vielleicht nicht nur eine Seite Lokal betreiben. Man möchte ja entwickeln und dazu auch mal 5 oder mehr vhost besitzen. Diese sollen auch eine schöne URL haben. Zum Beispiel http://flow3.local. Wir benötigen auf jeden Fall eine Datenbank. Denn MySQL bekommt ihr mit eurem Mac leider nicht ausgeliefert.

Benötigte Downloads:

- MySQL Community Server

Empfohlene zusätzl. Downloads:

- Sequel Pro

- iTerm 2

Kurz zur Erläuterung der empfohlenen zusätzlichen Downloads. Wie ihr schon wisst möchten wir MySQL auf eurem Mac installieren. Da ich jetzt einmal davon ausgehe, dass ihr gern auch mit GUI Tools arbeitet und nicht immer alles im Terminal tippen wollt – lege ich euch das kostenlose Program Sequel Pro ans Herz. Es ist quasi euer phpmyadmin ohne Browser.

Und wo wir gerade beim Terminal waren. Ich persönlich mag das Mac-Terminal nicht und vermisse die kleinen aber feinen Dinge eines Linux-Terminals. iTerm 2 verhält sich fast wie ein Terminal von Linux und man kann eben auch mit einem Doppelklick bzw. Doppeltab Dinge kopieren und sie dann einfach wieder einfügen. Im Mac-Terminal muss ich alles mit der Mouse makieren, dann kopieren und kann es schließlich wieder einfügen. Also als Empfehlung Nummer zwei iTerm 2.

So dann wollen wir einmal MySQL installieren, einen vhost für typo3.local anlegen, einen vhost für flow3.local anlegen, eine Datenbank für TYPO3 anlegen, TYPO3 installieren und da wir auch eine FLOW3 Domain haben, FLOW3 installieren.

Schritt 1 – Webserver konfigurieren

Da viele der folgenden Befehle Root-Zugriff erfordern, verschaffen wir uns zunächst die nötigen Rechte. Alternativ könnt ihr gern auch immer sudo vor die Befehle schreiben.

sudo -i

Nun könnt ihr sämtliche Befehle ohne lästige Fragen abfeuern. Seid jedoch sorgsam mit jedem Befehl. Euer Apache Server befindet sich im Verzeichnis /etc/apache2. Nun werden wir einige Änderungen an der Konfiguration vornehmen.

vim /etc/apache2/httpd.conf

Sucht bitte mit Hilfe des Slash-Befehls nach ‘/libphp5.so’. Ihr solltet nun folgende Zeile vorfinden und falls nicht, einfach so lange ‘n’ drücken, bis ihr sie gefunden habt.

LoadModule php5_module        libexec/apache2/libphp5.so

Falls diese Zeile von einer Raute angeführt wird, kommentiert sie bitte ein. Hierfür drückt ihr die ‘i’-Taste und entfernt die Raute mit Hilfe des Cursors und Backspace. Mit der Tastenkombination CTRL + C könnt ihr den Insert-Modus wieder verlassen.

Nun haben wir in unserem Apache Server PHP aktiviert bzw. vielleicht war er es auch schon.

Als nächstes möchten wir, dass der Apache Server index.php Dateien genau wie die index.html Dateien bei Aufruf eines Verzeichnisses, die Dateien ausführt. Wir suchen also nach dem Schlüsselwort ‘DirectoryIndex’ (wieder mit Hilfe des Slashes). Wir finden nun die folgende Zeile und fügen index.php hinzu. Ergo, wieder ‘i’-Taste drücken, index.php hinzufügen und mit CTRL + C den Insert-Modus verlassen.

DirectoryIndex index.html index.php

Als nächstes suchen wir uns .

   Options FollowSymLinks
   AllowOverride All
   Order allow,deny
   Allow from all

Eines unserer Ziele waren vhosts, damit wir diese nutzen können, müssen wir noch die folgende Zeile einkommentieren.

#Include /private/etc/apache2/extra/httpd-vhosts.conf

Nachdem wir nun alles was wir benötigen in der hhtpd.conf eingerichtet haben, speichern und verlassen wir die Datei mit ‘/wq’ und drücken ENTER. Nun befinden wir uns wieder in unserem home-Verzeichnis. Unser Webserver kann nun mit vhosts umgehen, daher sollten wir unsere auch konfigurieren. Wir öffnen hierzu die von uns eben einkommentierte httpd-vhosts.conf Datei.

vim /private/etc/apache2/extra/httpd-vhosts.conf

Wie ihr nun seht existieren schon ein paar Beispiel Einträge. Diese könnt ihr alle löschen. Wir legen uns folgende vhosts an.

   ServerName flow3.local
   DocumentRoot "/Users//Sites/flow3.local"
 
   ServerName typo3.local
   DocumentRoot "/Users//Sites/typo3.local"

Ihr könnt natürlich hier jeden vhost Konfiguration vornehmen. Ich beschränke mich auf das Nötigste. Speichert diese Änderung wieder mit ‘:wq’ und drückt ENTER. Falls ihr den ersten Befehl ‘sudo -i’ nicht ausgeführt habt, werdet ihr die Datei nicht schreiben können.

Diese beiden URLs werden wir nun noch als Hosts eintragen.

vim /etc/hosts

Fügt nun die folgenden 2 Zeilen hinzu.

127.0.0.1       flow3.local
127.0.0.1       typo3.local

Noch ein Schritt dann haben wir den Webserver soweit fertig. Falls ihr diesen vergessen solltet, werdet ihr bei der Installation von TYPO3 ein Problem bekommen. Denn wir TYPO3-Jungs, nutzen liebend gern Symlinks, aber für jeden Nutzer sind diese standardmäßig deaktiviert.

vim /private/etc/apache2/users/markusguenther.conf

Also bei euch je nachdem wie euer Username ist die .conf Datei öffnen und bei den Options FollwSymLinks hinzufügen.
Es sollte dann ungefähr so aussehen:

    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all

Nun könnt ihr euch in euer Sites Verzeichnis begeben und die Ordner für diese beiden vhosts anlegen. Entweder im Finder oder mit folgenden Zeilen.

cd ~/Sites/
mkdir flow3.local typo3.local
apachectl restart

Mit dem letzten Befehl startet ihr den Apache Server neu und mit diesem Neustart werden sämtliche Änderungen aktiv. Wenn ihr nun die foo.php Datei mit dem phpinfo() Aufruf in euren flow3.local Ordner verschiebt und dann im Browser flow3.local aufruft, dann wird genau in eurem vhost die phpinfo ausgeführt. Und somit funktioniert auch alles.

Schritt 2 – PHP konfigurieren

Schritt eins ist vollbracht und es war nicht schwer, oder? Ein bisschen Befehle jonglieren und fertig war der konfigurierte Server. Wenn ihr MacPorts benutzt, müsst ihr im Prinzip alles genauso konfigurieren. Warum nicht mal die Sachen nutzen, die eh schon vorhanden sind.

Die folgenden Befehle kopieren die default-PHP-Konfiguration zu unseren php.ini, welche wir nutzen werden. Und wie immer im Leben müssen wir sie noch ein wenig anpassen.

cp /etc/php.ini.default /etc/php.ini
vim /etc/php.ini

Wichtig ist es das ihr die Pfade für MySQL richtig setzt. Diese Zeilen sind verteilt. Sucht also jeweils den einen Wert und passt die Pfade so an.

pdo_mysql.default_socket = /tmp/mysql.sock
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

Nun ein bisschen Kosmetik. Einfach wieder die einzelnen Werte suchen und dann setzen.

date.timezone = Europe/Berlin
error_reporting = E_ALL
display_errors = On

Und zum Schluss kann man sich noch PHP Module, die man gern nutzen möchte, aktivieren. Ich habe mir folgende noch einkommentiert.

extension=php_curl.dll
extension=php_xmlrpc.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
extension=php_gd2.dll
extension=php_mbstring.dll

Noch einmal den Apachen neustarten und schon haben wir auch unser PHP, wie wir es möchten. Ich bin ein Systemintegrator. Also wenn ihr das anders konfigurieren möchtet – tut es einfach.

apachectl restart

Schritt 3 – MySql installieren

Das MySQL installieren ist sehr einfach. Denn ihr müsst nur die DMG laden und den Instruktionen der README.txt Folge leisten. Was darauf hinaus läuft, dass ihr alle drei Dinge installieren werdet.

In den folgenden Screenshots sehr ihr den nun neuen Menüpunkt MySQL in den Systemeinstellungen und dort könnt ihr nun eurem Server starten und stoppen.

Nun müssen wir nur noch das root Passwort setzen und schon haben wir einen vollwertigen Webserver und können wunderbar lokal entwickeln.

mysql -uroot
UPDATE mysql.user SET Password=PASSWORD('#f00bar!') WHERE User='root';
FLUSH PRIVILEGES;
quit;

Schritt 4 – FLOW3 installieren

Nun installieren wir noch ala FLOW3 Dokumentation unser FLOW3 und dann sind wir glückliche Entwickler.

git clone --recursive git://git.typo3.org/FLOW3/Distributions/Base.git /Users/markusguenther/Sites/flow3.local/

Setzen unserer Schreibrechte für den Nutzer markusguenther und die Gruppe _www.

./flow3 core:setfilepermissions markusguenther _www _www

Und da unser flow3.local auch gleich auf Web zeigen soll passen wir noch den vhost an.

vim /private/etc/apache2/extra/httpd-vhosts.conf
   ServerName flow3.local
   DocumentRoot "/Users//Sites/flow3.local/Web"

Dann noch einmal den Apachen neustarten.

apachectl restart

Und et voila … unser lokaler Rechner präsentiert uns FLOW3.

Dez
06

TYPO3 4.5 um stdWrap.replacement erweitern

Hamburg, den 5.12.2011:

Hin und wieder stößt man in seinem Job auf Probleme, welche durch die aktuellste Version eines genutzten Systems nicht existent wären.
Wer kennt es nicht – der Kunde hat ein Problem, welches man ja ganz schnell und einfach lösen kann. Ja wenn, ja wenn da nur nicht das kleine Problem wäre das es dieses Feature, welches ich dazu benötige,  in dieser Version noch nicht verfügbar ist.

Ich glaube die FLOW3 Pioniere können davon ein Lied singen. Sie entwickeln irgendwie etwas super tolles und müssen dann wohl oder übel wieder einmal in den Alltag zurückkehren und müssen dann mit Extbase vorlieb nehmen. Und siehe da alle tollen Dinge, die sie kennen gehen nicht mehr.

Aber zurück zu meinem Problem. Der Kunde nutzte auf Grund des Long Term Supports TYPO3 4.5 und hatte nun den Wunsch das seine Seitentitel etwas von dem im Backend eingegeben Seitentitel abweichen. Natürlich wurden diese in der Navigation auch genutzt und man konnte nicht einfach sagen: “Ja OK, dann bennen wir sie eben um!”

Es blieben mir also mehrere Möglichkeiten um das Problem zu lösen.

  • Man könnte für den Seitentitel ein anderes Feld nutzen. Zum Beispiel den Subtitle. Was aber auch mehr Aufwand für die Redakteure bedeutet und vor allem muss man den Redakteuren dieses Problem dann auch erklären.
  • Ich könnte eine userFunc erstellen und mit eben dieser das Problem lösen.
  • Oder und das ist die in meinen Augen schönste Lösung ich schaue einmal was mir TYPO3 noch an zusätzlichen Mitteln bietet. Natürlich bin ich auch fündig geworden. Nur leider kann man stdWrap.replacement erst ab TYPO3 4.6 nutzen. Die in meinen Augen schönste Lösung war also ich brauche diese replacement Funktion :)

Doch wie stellt man das nun an. Ich könnte nun eine userFunc erstellen und einfach die Funktionen aus TYPO3 4.6 dann dafür nutzen. Doch ich finde ein Integrator sollte es so einfach wie möglich haben. Und da die Integratoren auch mit TYPO3 4.6 arbeiten kennen sie die stdWrap Funktion ja eh besser als ich (Entwickler).

In diesem Sinne sollen sie diese Funktion einfach nutzen als ob sie von TYPO3 kommt. Nur eben in TYPO3 4.5! Seit TYPO3 4.2 ist es möglich den stdWrap mit 4 Hooks zu erweitern.

stdWrapPreProcess
Dieser stdWrap Hook wird vor jeder anderen stdWrap funktion aufgerufen. Also auch vor jeder Funktion, die Daten holt wie field, data etc. Achtung! wird vor override aufgerufen.
stdWrapOverride
Wird direkt nach preUserFunc aufgerufen. Zu diesem ist das holen der Daten abgeschlossen, diese wurden jedoch noch nicht überprüft (ifEmpty etc) oder verarbeitet (wrap etc.).
stdWrapProcess
Wird nach der ersten Überprüfung und Vorverarbeitung der Daten (ifEmpty, trim, listNum) und direkt nach dem rekursiven Aufruf von stdWrap aufgerufen.
stdWrapPostProcess
Wird nach jeder anderen stdWrap Funktion außer der Debugausgabe aufgerufen. Auch nach prefixComment, editIcons etc!

(Quelle: TYPO3 Wiki )

Dann möchte ich euch einmal zeigen wie ihr diese Hooks nutzen könnt und somit dann auch die Änderungen aus 4.6 in Version 4.5 zur Verfügung habt.

Schritt 1:

Ihr wählt eine Extension aus in der ihr den Hook anmelden möchtet. Ich habe eine Extension namens tmpl_base. In dieser Extension befindet sich sämtliches TypoScript, CSS, JS und vieles mehr. Also eigentlich alles was das Frontend betrifft findet man in dieser Extension.

Hier habe ich nun einen Ordner classes angelegt und in diesem Ordner habe ich wiederum einen Ordner hooks angelegt. In diesem Ordner werden nun sämtliche Klassen abgelegt, die einen Hook implementieren.

Meine erstellte Datei heisst nun:

class_tx_tmplbase_stdwrap_extend.php

Schritt 2:

Öffnet nun die Datei und fügt erst einmal folgenden Code ein.

<?php
require_once(PATH_typo3.'/sysext/cms/tslib/interfaces/interface.tslib_content_stdwraphook.php');
 
class tx_tmplbase_stdwrap_extend implements tslib_content_stdWrapHook {
	function stdWrapPreProcess($content, array $configuration, tslib_cObj &amp;$parentObject) {
		return $content;
	}
 
	function stdWrapOverride($content, array $configuration, tslib_cObj &amp;$parentObject) {
		return $content;
	}
 
	function stdWrapProcess($content, array $conf, tslib_cObj &amp;$parentObject) {
		return $content;
	}
 
	function stdWrapPostProcess($content, array $configuration, tslib_cObj &amp;$parentObject) {
		return $content;
	}
 
	public function processReplacement($content, array $configuration) {
		return $content;
	}
}
if (defined('TYPO3_MODE') &amp;&amp; $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/tmpl_base/classes/hooks/class.tx_tmplbase_stdwrap_extend.php'])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/tmpl_base/classes/hooks/class.tx_tmplbase_stdwrap_extend.php']);
}
?>

Nun habt ihr Ein Grundgerüst das auf tslib_content_stdWrapHook basiert. Zur Zeit wird in diesem Hook noch rein gar nichts gemacht. Er wird noch nicht einmal gerufen. Damit wir den Hook nutzen können müssen wir ihn anmelden.

Schritt 3:

Wie schon in Schritt 2 erwähnt, um einen Hook nutzen zu können müssen wir ihn anmelden. Dafür müssen wir folgende Dinge tun:

  1. Erstellen der Datei ext_autoload.php und die Hook Klasse eintragen.
  2. Erstellen von ext_localconf.php und den Hook anmelden.

Unter Umständen gibt es diese Dateien schon. Das ist nicht weiter tragisch. In diesem Fall fügt ihr einfach das Hook spezifische hinzu.

Zu 1.

Wir öffnen die ext_autoload.php und fügen folgenden Code hinzu:

$extensionPath = t3lib_extMgm::extPath('tmpl_base');
return array(
	'tx_tmplbase_stdwrap_extend' =&gt; $extensionPath . 'classes/hooks/class_tx_tmplbase_stdwrap_extend.php'
);

Bitte die Pfade gemäß eurer Extension anpassen und lieber mehrmals prüfen. Wenn man sich sicher ist einfach die Datei speichern und schon sind wir mit der ext_autoload.php fertig.

Zu 2.

Wir öffnen die ext_localconf.php und fügen folgenden Code hinzu:

if (!defined ("TYPO3_MODE")) die ("Access denied.");
 
$TYPO3_CONF_VARS['SC_OPTIONS']['tslib/class.tslib_content.php']['stdWrap'][] = 'EXT:tmpl_base/classes/hooks/class_tx_tmplbase_stdwrap_extend.php:&amp;tx_tmplbase_stdwrap_extend';

Wie schon bei der ext_autoload.php gilt auch hier – unbedingt die Pfade prüfen bevor wir die Datei speichern und schliessen. Nun haben wir den Hook durch den Autoloader geladen und durch die localconf.php bei TYPO3 angemeldet. Das bedeutet nun kann es mit dem Hook an sich los gehen.

Schritt 4:

Dann wollen wir dem Hook einmal die gewünschte Funktion spendieren. In meinem Anwendungsfall habe ich mich für die stdWrapProcess Funktion des Hooks entschieden. Warum ich diesen genutzt habe könnt ihr weiter oben oder im TYPO3 Wiki nachlesen. Das gute ist das wir die replacement Funktion nicht selbst implementieren müssen. Wir wissen das es dieses Feature ab TYPO3 4.6 gibt. Das bedeutet wir begeben uns auf Forge und suchen uns den passenden Patch. Alles was wir benötigen könnt ihr im Issue unter Forge nachlesen und vor allem finden wir auch unseren Patch, welcher sämtlichen benötigten Code enthält, um das Feature in TYPO3 4.5 zum laufen zu bringen.

Zurück in unserem Hook ändern wir die stdWrapProcess Funktion wie folgt ab:

function stdWrapProcess($content, array $conf, tslib_cObj &amp;$parentObject) {
		// in TYPO3 version 4.6 this is not necessary anymore because the stdWrap has
		// a replacement function out of the box
	if (isset($conf['replacement.'])) {
		$content = $this-&gt;processReplacement($content, $conf['replacement.']);
	}
	return $content;
}

Wie wir sehen wird nun in unserem Hook die Funktion processReplacement gerufen. Diese können wir aus dem Patch kopieren und fügen noch den folgenden Code in unserem Hook ein.

/**
* Processes ordered replacements on content data.
*
* @param	string		$content: The content to be processed
* @param	array		$configuration: The TypoScript configuration for stdWrap.replacement
* @return	string		The processed content data
*/
public function processReplacement($content, array $configuration) {
	// Sorts actions in configuration:
	ksort($configuration);
 
	foreach ($configuration as $index =&gt; $action) {
			// Checks whether we have an valid action and a numeric key ending with a dot ("10."):
		if (is_array($action) &amp;&amp; substr($index, -1) === '.' &amp;&amp; t3lib_div::testInt(substr($index, 0, -1))) {
			$content = $this-&gt;processReplacementAction($content, $action);
		}
	}
 
	return $content;
}
 
/**
 * Processes a single search/replace on content data.
 *
 * @param	string		$content: The content to be processed
 * @param	array		$configuration: The TypoScript of the search/replace action to be processed
 * @return	string		The processed content data
 */
protected function processReplacementAction($content, array $configuration) {
	if ((isset($configuration['search']) || isset($configuration['search.']))
	&amp;&amp; (isset($configuration['replace']) || isset($configuration['replace.']))) {
 
		// Gets the search needle:
		$search = tslib_cObj::stdWrap($configuration['search'], $configuration['search.']);
		// Determines whether regular expression shall be used:
		if (isset($configuration['useRegExp']) || $configuration['useRegExp.']) {
			$useRegularExpression = tslib_cObj::stdWrap($configuration['useRegExp'], $configuration['useRegExp.']);
		}
		// Performs a replacement by preg_replace():
		if ($useRegularExpression) {
			$replace = tslib_cObj::stdWrap($configuration['replace'], $configuration['replace.']);
			$content = preg_replace($search, $replace, $content);
			// Checks whether the search needle is part of the content:
		} elseif (strpos($content, $search) !== false) {
			$replace = tslib_cObj::stdWrap($configuration['replace'], $configuration['replace.']);
			$content = str_replace($search, $replace, $content);
		}
	}
	return $content;
}

Wie man schnell sieht muss im Code des Patches $this->stdWrap() angepasst werden. Denn wir können über $this nicht auf die Funktion stdWrap zugreifen. An Stelle von $this->stdWrap greifen wir nun einfach mit tslib_cObj::stdWrap() auf die Funktion zu.

Grundsätzlich sollte es das auch gewesen sein. Nun kann man immer wenn man den stdWrap nutzen kann auch die Funktion replacement benutzen.
Das bedeutet wir können nun folgendes TypoScript benutzen:

10 = TEXT
10 {
	value = Te___st
	replacement {
		10 {
			search = _
			replace.char = 32
		}
	}
}

Und als Ausgabe erhalten wir dank unseres Hooks und des Patches für TYPO3 4.6 nicht Te___st sondern Test.

Falls ich etwas nicht zu 100% richtig beschrieben habt weist mich ruhig darauf hin. Ich bin noch Azubi und keiner ist perfekt. In diesem Sinne viel Spaß beim nachbauen des stdWrap Hooks.

Nov
15

Adobe Touch Apps

Alle kreativen Köpfe unter euch aufgepasst! Adobe hat nun die Toch Apps Family für Android veröffentlicht. Nun könnt ihr auch auf euren Tablet eure Kreativität freien Lauf lassen und von überall aus arbeiten. Es war nur eine Frage der Zeit, dass Adobe sich auch im Tablet Bereich integrieren wird. Große Bildschirme laden nun einmal zum großen ‘kreativ werden’ ein.
Vorbei ist die Zeit als man mit den Tablets nur surfen, lesen oder spielen konnte. Mit den Touch Apps von Adobe wird nun eine ganz andere Zielgruppe unter den Tablet-Nutzern angesprochen.

Die Adobe Touch Apps Family besteht aus sechs Apps, die für jeweils 7,99 € im Android Market erhältlich sind.
Und nun schnell zu den Apps, die euch erwarten:

Adobe Photoshop Touch
Adobe Proto
Adobe Ideas
Adobe Debut
Adobe Collage
Adobe Kuler

Natürlich werden die Apps nicht ganz so gut wie die Software für den PC sein aber Technologie ist ja auch schließlich da, um sie immer weiterzuentwickeln, nicht wahr?

Nov
15

BarCamp Hamburg 2011 #bchh11 #hb20

BarCamp Hamburg 2011

Und wieder einmal ist das Barcamp Hamburg erfolgreich am Wochenende in eine neue Runde gegangen. Ganz nach den Motto „eat“, „share“ and „love“ hatte auch dieses Mal das Camp  beinahe 400 Leute jeweils am Freitag und Samstag zu Otto hingezogen.
Etwas traurig war allerdings, dass die Orga in der Opening Session verkündigt hatte, dass sie in der aktuellen Zusammenstellung nächstes Jahr nicht mehr dieses Barcamp organisieren werden. Einige der Organisatoren ziehen sich leider zurück. Um diese Lücke zu schließen wird gerade nach neuen, organisier freudigen Leuten gesucht, die dieses Event nächstes Jahr auf die Füße stellen möchten. Schade wäre es nämlich, wenn wir nächstes Jahr das Barcamp nicht mehr in dieser Form in Hamburg antreffen könnten. Wer also Interesse haben sollte und sich vorstellen könnte, eins der größten Barcamps in Deutschland nächstes Jahr zu organisieren, sollte sich bei der Orga dieses Jahres melden.

Tag 1
Nach einem nahrhaften Frühstück ging es auch schon mit der Opening Session los. Neben einer kleinen Einführung für Neulinge und der Verkündung der eher traurigen Nachricht, durften wieder zahlreiche Teilnehmer ihre Sessions vorstellen. Nachdem alle abgestimmten Sessions am TimeTable hingen, konnten wir anfangen unser Tag zu planen.
Unten sind die Sessions aufgeführt, die ich an diesem Wochenende besucht hatte.

1. Secure Cloud
In der ersten Session hatten Knut und Martin ein sehr interessantes Thema aufgegriffen. Es ging hauptsächlich um unsichere Tools wie Dropbox, Skype & Co.
Fazit der Session: Es gibt unsichere Tools, die jeder benutzt und sichere Möglichkeiten in der Cloud zu arbeiten, die allerdings schwer zu nutzen sind. Eine einfache und dazu sichere Lösung muss für die Zukunft noch gefunden werden.

2. YouPorn regiert die Welt. Und keiner merkt’s.
Diese Session war auf jeden Fall sehr lustig und es wurden immer wieder Späße zwischendurch gemacht. YouPorn wurde in dieser Session von Daniela mit eingebaut, aber der Gedanke dahinter war ein Anderer.
Daniela Friedrich wollte uns nahe bringen, dass die klassischen Medien gerne die Themen Facebook, Google & Co. aufgreifen, weil wie wir aus dem gleichen Grund in die Session „You Pron regiert die Welt“ gegangen sind. Es zieht die Leute an!
Letztendlich ist diese Session aber zu einer großen Diskussionsrunde über „Datenerhebung“ ausgebrochen.

3. Der perfekte Launch
Viele Leute wussten nicht, die diese Session von Oliver Überholz besucht hatten, dass mit dem Thema „Der perfekte Launch“ nur Community Plattformen aufgegriffen werden – ich auch nicht! Trotzdem fand ich das Thema sehr interessant.
Durch seine jahrelange Erfahrung im Community Bereich hat Oliver eine Anleitung verfasst, die drei Phasen beinhaltet – Vorphase, Pre-Launch Phase und Launch Phase.
Was man alles beachten sollte, könnt ihr hier in einem umfassenden Überblick  lesen.

4. Massage Aufbau
Diese Session hatte nicht viel mit zuhören zu tun gehabt, sondern nur mit hinsetzen und 15 Minuten entspannen :)
Gesponsert wurden die Massagen von immowelt.

5. TV-Serien
In dieser Session hatte Scotty seine Lieblingsserien gezeigt.

6. Herzblatt 2.0 & PowerPoint Karaoke
Das Highlight des Abends war das Herzblatt 2.0. Dank unseres Chefs Volker Graubaum musste sogar Markus alias Kandidat Nr. 2 auf die Bühne. Er hatte sich wacker geschlagen und alle Fragen mit Bravur beantwortet. Zu seinem Glück wurde er sogar als Herzblatt von der netten Dame hinter der Wand letztendlich ausgewählt.
Danach hatte uns PowerPoint Karaoke zum lachen gebracht. Teilnehmer haben eine komplett unbekannte Präsentation bekommen und mussten dazu improvisieren. Sehr lustig!

 

Tag 2
Nach einem aufregenden Abend kam ich nur schwer aus dem Bett. Trotzdem hatte mich der interessante Vortag dazu angespornt auch den zweiten Tag auf dem Barcamp mitzuerleben.
Neben den spannenden Gesprächen zwischen den einzelnen Sessions, habe ich mir auch Samstag wieder Sessions angehört, die mich interessiert hatten.

1. O2 Einzelfälle
Moeffju hatte diese Session besonders für O2 Kunden mit Problemen bezüglich Empfang und Datenübertragung gehalten. Da dieses Problem schon längst kein Einzelfall mehr ist, sondern dauerhaft auftritt, möchte Moeffju erreichen, dass O2 endlich Stellung zu den Tatsachen nimmt.

2. Mein Leben mit einem Nerd
Diese Session von Katja über mthie war eine der Lustigen überhaupt. Sie hatte viel aus dem Nähkästchen geplaudert und uns vor Augen geführt, wie anstrengend doch so ein Leben mit einem Nerd sein kann :)
Fazit: Nerds immer eine E-Mails schreiben!

3. TV-Serien Fortsetzung
Da wir am Freitag nicht alle Serien geschafft hatten, die Scotty uns zeigen wollte, haben wir am Samstag mit einer neuen Session einfach an den Vortrag angeknüpft. Vorgestellt wurden Serien wie „Veronica Mars“ und „Castle“.

Fazit:
Genau wie letztes Jahr, hatte sich der Besuch beim Barcamp Hamburg wieder einmal mehr gelohnt. Sowohl interessante Sessions, als auch interessante Leute konnte man wieder bei Otto antreffen.
Ein dickes Lob auch von uns an das Orga-Team. Vielen lieben Dank, dass ihr das Barcamp Hamburg auch dieses Jahr wieder so gut organisiert habt.

Okt
28

myGEOS gibt Motivation, zeigt neue Wege und geht App!

Da es als Startup recht schwer ist, Bekanntheit zu erlangen, wollen wir mit diesem Beitrag auf ein neues Unternehmen aufmerksam machen.
Ich möchte noch nicht zu viel verraten, da in dieser Pressemitteilung alles Interessante und Wissenswerte zusammengefasst wurde.
Viel Spaß beim lesen!
Ulm, 01.08.2011 – mit dem Spirit der Innovationsregion Ulm geht myGEOS nun App in die Welt! Das jungen Tech-Startup XCELSO hat mit myGEOS einen neuartigen Aktivitätsbegleiter aus der Taufe gehoben. Dabei ist dem Team direkt ein guter Start gelungen, wie der bemerkenswerte 7. Platz beim CeBIT AppStar Award 2011 belegt. Die Internetgemeinde feiert die App, made in Ulm, als funktionales Tool für die individuelle Aktivitätsplanung. Ob mit dem Fahrrad zur Arbeit, zu Fuß an die Uni, beim Spaziergang mit dem Hund oder auch zur Vorbereitung zum Marathon. Jeder Nutzer kann mit Hilfe der kostenlosen Anwendung seine zurückgelegten Kilometer aufzeichnen, analysieren und zur gegenseitigen Motivation mit Freunden teilen. Dank der einfachen Bedienung und des eleganten Designs erfreut sich myGEOS immer größerer Beliebtheit.

Das einmalige an myGEOS: Unter dem Motto “gemeinsam mehr bewegen” können die Nutzer mit ihrer eigenen Leistung sprichwörtlich mehr bewegen. Denn sie sind nicht nur für sich selbst aktiv, sondern für jeden zurückgelegten Kilometer erhalten die Nutzer s.g. GEOS Punkte mit denen sie soziale Projekte unterstützen können. Diese nationalen und internationalen Hilfsprojekte werden nach Erreichen der vorgegebenen GEOS Punkte durch Patenfirmen finanziell unterstützt.
Doch auch die myGEOS Helden sollen belohnt werden: So kann jeder Nutzer seine Erfolge mit ansehnlichen Badges schmücken und sich Benefits erarbeiten. Dafür geht bereits eine beachtliche, stetig wachsende Nutzergruppe regelmäßig „app“ – und täglich kommen hunderte neue Aktivisten dazu.

Ab dem Start des Webportals myGEOS.net in dieser Woche steht den Nutzern nun auch die Plattform zum Verwalten und Austauschen ihrer Aktivitäten zur Verfügung. Weiterhin können die Nutzer ihre Aktivitäten auch ihren Freunden auf Facebook und Twitter mitteilen.

myGEOS bereits für iPhone und Android – WindowsPhone7 und BlackBerry folgen.
Neben einer iPhone App gibt es auch eine App für alle Android-Smartphones. Künftig sollen zudem noch App-Versionen für WindowsPhone7 und BlackBerry folgen. Intensiv wird bereits an einer innovativen Erweiterung gearbeitet, so dass demnächst jeder Mensch – unabhängig seiner Sportlichkeit und des persönlichen Aktivitätslevels – myGEOS im Alltag nutzen kann. “Für uns ist es der nächste logische Schritt, um myGEOS noch mehr Menschen zur Verfügung zu stellen und sie zu motivieren aktiv zu werden”, sagt Gründer und Geschäftsführer Markus Janssen (29).

Die XCELSO GmbH mit Sitz in Ulm ist ein junges Tech-Startup und ging 2010 an den Start. XCELSO versteht sich als Unternehmen für innovative Geo-Dienste. Der Leistungsfokus liegt dabei auf der Planung, Entwicklung und Vermarktung moderner, cloud-basierter und plattformunabhängiger Location-Based-Services.

Pressekontakt:
XCELSO GmbH
Frau Jana Hummel
thummel@xcelso.de
+49 (0) 731 – 28067210
Sedanstraße 14
D-89077 Ulm, Donau

 

Okt
27

Android 4.0 – Ice Cream Sandwich

Ich würde gerne an den Artikel Android – von Cupcake bis Ice Cream Sandwich, den ich gestern eingestellt habe, mit diesen Artikel über Ice Cream Sandwich anknüpfen.

Letzte Woche am 19.Oktober 2011 wurde in Hong Kong zusammen mit dem neuen Samsung Galaxy Nexus die neueste Android Version 4.0 Ice Cream Sandwich vorgestellt.
Das Warten hat sich gelohnt! Neue tolle Features und Eigenschaften wurden von Google in die neue Android Version gepackt.
Android 4.0 kombiniert das Beste von den  Android 2.x phone interface mit den Android 3.x Honeycomb tablet interface. Dabei kommt jeder auf seine Kosten: Smartphone Besitzer erwartet ein modernes Betriebssystem, während Tablets sich auf regelmäßige Updates freuen können.

 

 

Hier eine kleine Übersicht zu den neuen Features von Ice Cream Sandwich:

Roboto
Roboto ist das neue Design von Android 4.0.

Widgets
Überarbeitete Widgets, die sich in der Größe anpassen lassen und neue Animationen beim Blättern erwarten euch.

Re-Design
Die Ordner, der Kalender, das Multitaskings und die Notification Bar haben ein Re-Design bekommen.

Screenshots
Können nun sehr leicht mit einem Tastendruck erstellt werden.

Sprach- und Texteingabe
Nicht ganz so weit entwickelt wie Siri, aber dennoch sehr praktisch für Tippfaule, lassen sich die SMS-Nachrichten, E-Mails und sonstige Botschaften jetzt auch über das Smartphone diktieren. Durch antippen des Mikrofon-Symbols, wird die Spracherkennung aktiviert.
Mit einer verbesserten Rechtschreibprüfung und vereinfachter Copy & Paste-Funktion kann man die verschiedensten Textbotschaften nun auch mit Leichtigkeit via Tastatur eingeben. So oder so wird Ice Cream Sandwich uns das Texten in Zukunft noch mehr erleichtern.

Face Unlock
Ein weiteres Feature des Samsung Galaxy Nexus ist die Gesichterkennung. Mit diesem Feature kann das Smartphone entsperrt werden.

Neuer Browser
Bis zu 16 Tabs können nun gleichzeitig geöffnet werden, Request Desktop Site, Bookmarks werden automatisch synchronisiert, Seiten können gespeichert und offline gelesen werden.

Gmail
Neue Benutzeroberfläche. Durch ein Wischen kann man zwischen den einzelnen E-Mails hin- und her wechseln.
Ebenso können E-Mails der letzten 30 Tage offline durchsucht werden.

Data-Usage Android 4.0
Überblick über den Datenverbrauch.

Fotos
Zero Shutter Funktion , viele Effekte und Filter in der Foto-App, eingebauter Editor mit vielen Funktionen und Effekten, verschiedene Filter, neues Layout für die Bilderübersicht, Panorama-Shots

Video
1080p

People App
Die wichtigsten Kontakte werden im Menü mit Bild und Kontaktdaten, durch die Funktion „Quick Contacts“, angezeigt. Updates von Freunden werden in Real-Time aktualisiert. Entwickler können via API auf die App zugreifen.

Voice Mail
Entwickler können mit ‘New APIs for Visual Voicemail’ neue Apps produzieren.

Android Beam
Daten können zwischen zwei Android Geräten in Sekundenschnelle „gebeamt“ werden. Dazu benötigt man nur zwei „Near Field Communication“-fähige Geräte, die aneinander gehalten werden.

APIs
APIs für Entwickler werden zur Verfügung gestellt.

Wie ihr sehen könnt, kommen mit der neuen Android Version 4.0 einige neue nützliche Features. Die äußerst nützlichen Eigenschaften werden den Umgang mit unserem Smartphone in Zuknuft noch mehr erleichtern. Wir freuen uns schon darauf, Ice Cream Sandwich in naher Zukunft testen zu können.
Falls ihr euch selber ans Entwickeln von Ice Cream Sandwich machen wollt, dann könnt ihr bei Google das SDK herunterladen. Viel Spaß damit!

Okt
26

Android – von Cupcake bis Ice Cream Sandwich

Wer hätte 2008 gedacht, dass Googles mobiles Betriebssystem Android einmal so erfolgreich sein wird. Von der ersten Version Cupcake (Android 1.0) bis zur neuesten Version Ice Cream Sandwich (Android 4.0) hat sich Android innerhalb von 3 Jahren ordentlich an die Spitze der mobilen Betriebsysteme gekämpft.
Android ist für uns allgegenwärtig geworden und deshalb gar nicht mehr wegzudenken.

Der Erfolg lässt sich einmal durch den Open-Source-Charakter erklären und durch die diversen Handyhersteller, die die Smartphones zu den unterschiedlichsten Preisen derzeit anbieten.
In Zukunft wird noch ein größerer Marktwachstum durch Ice Cream Sandwich und durch den Erwerb von Motorola (Patente) erwartet.

Die Seite xcubelabs hat eine super Infografik zur Story von Android angefertigt. Hier habt ihr alle Daten von Releases, die Android in Laufe der Jahre durchlebt hat, auf einem Blick.

 

 

Und hier noch ein paar interessante Fakten für euch:

  • Apps: 250,000
  • der Android Market hat die höchste Anzahl an kostenlosen Apps – 57% Android vs. 28% Apple
  • 39% Einnahmen durch Apps
  • 550,000 Android Geräte werden jeden Tag in Betrieb genommen
  • Insgesamt wurden 150 Millionen Android Geräte seit September 2008 (Stand August 2011) in Betrieb genommen
  • 40% dominiert Android den US-Markt
  • Unterstützt von 231 Netzbetreibern in 123 Ländern
  • 39 industrielle Partner

 

Eines ist klar, Android ist immer noch auf einem aufsteigenden Ast und wird sich nicht mehr im mobilen Bereich verdrängen lassen.
Durch neue Versionen von Android, werden immer wieder neue Türen geöffnet. So haben Entwickler durch die Version 4.0 Ice Cream Sandwich ganz neue Möglichkeiten, mit den zur Verfügung gestellten APIs, an das Betriebssystem anzuknüpfen.

 

Okt
25

Die Welt mit iPhone-Augen sehen

Wir haben von immonet eine sehr nette Anfrage bekommen, ob wir nicht diesen Artikel bei uns reinstellen könnten. Da es sich um das Thema iPhone handelt, ist es natürlich auch in unserem Interesse, neue und interessante Sachen dazu zu veröffentlichen.
Viel Spaß wünsche ich euch jetzt mit diesen Beitrag von immonet:

Rund um die Uhr erreichbar sein – das ist die Kommunikation von heute. Egal ob im Restaurant, in der Bahn, beim Zahnarzt oder an der Supermarktkasse, überall klingeln die Mobiltelefone. Für viele Menschen ist ein Leben ohne Handy unvorstellbar, dabei gibt es diese Technik erst seit ca. 25 Jahren. Auch die Generation unserer Eltern und Großeltern können sich diesem Trend nicht entziehen und genießen die Vorzüge eines Mobiltelefons. Nur Telefonieren und SMS schreiben ist OUT, die heutigen Telefone sind deutlich weiterentwickelt als damals. IN ist, Tag und Nacht im Internet zu surfen und an jedem denkbaren Ort seine eMails zu checken, Überweisungen zu tätigen, zu spielen, Musik zu hören und Vieles mehr. All diese Errungenschaften haben zu einem Wandel in der Verständigung geführt und den heutigen Alltag um ein Vielfaches vereinfacht. Die neue Infografik von Immonet verdeutlicht diese Entwicklung.

Im Zentrum des Ganzen steht das iPhone der Marke Apple. Das aktuelle Modell, iPhone 4S, besticht dieses Mal nicht durch ein neues Design, sondern durch eine verbesserte Kamera, eine schnellere Grafik, iCloud und durch eine intelligente Assistentin, namens Siri. Sie ist eine revolutionäre rechte Hand und versucht jeden Wunsch zu erfüllen. Siri spricht deutsch, versteht Umgangssprache und kann Zusammenhänge erkennen. Durch eine banale Frage, wie z.B. „Sag meiner Frau, dass ich später komme.“, kann man mit seinem iPhone kommunizieren und es wird antworten. Sie legt Termine fest, verschickt SMS, sucht im Internet nach Lösungen oder wählt eine Rufnummer. Siri ist proaktiv und fragt nach, falls sie etwas nicht versteht. Und ehe man sich versieht, spricht man mit seinem Handy.

Doch nicht nur Siri erleichtert den Lebensalltag ungemein, sondern auch die über 50.000 angebotenen Applikationen. Heute verkürzt man sich die Wartezeit beim Arzt oder in der Bahn mit den unterschiedlichsten Spiele-Apps, findet sehr schnell das passende Restaurant oder Fastfood-Geschäft in der Nähe, oder liest die neusten Nachrichten einfach online, ohne an einem Kiosk tagesaktuelle Zeitungen kaufen zu müssen. Auch Textmarker und Zeitungen verstauben langsam, wenn man doch viel schneller und effizienter, durch z.B. das Immonet-App auf Wohnungssuche gehen kann. Neben den vielen Applikationen gibt es auch Zusatzgeräte, die das Leben komfortabler gestalten. So z.B. das Blutdruckmessgerät – es ist sehr klein, passt in jede Tasche und man kann überall, sowie jederzeit die Werte abrufen. Für die Männer dieser Welt ist der iGrill ein fabelhaftes Gadget. Dies ist ein Braten-Thermometer, welches per Bluetooth die Innentemperatur des Fleisches ermittelt und die Zubereitungszeit bestimmt. Und was gibt es besseres für Männer, als am Grill zu stehen und mit seinem Handy rumzuspielen.

Wie man sieht, verbindet das iPhone das Nützliche mit dem Angenehmen und ist gleichzeitig ein perfektes Prestigeobjekt.

Okt
24

Nerds vs. Geeks

Ihr habt euch schon immer gefragt, was der Unterschied zwischen Nerds und Geeks ist?! Hier die Antwort ^^

Okt
24

Android und Kunst. Sony Ericsson stellt auf Berliner Street-Art-Messe Android-Firguren aus

Es gibt heutzutage kaum noch etwas, dass es nicht gibt. Sony Ericsson hat nun Android-Firguren und Kunst vereint. In Berlin konnte man nun auf der Berliner Street-Art-Messe diese 9 gigantischen – aus Kunstharz gegossenen – Figuren betrachten.

 

Mehr dazu könnt ihr hier lesen. Auf Androidpit könnt ihr ebenso die Herstellung der Android-Figuren mit Hilfe eines Videos nachvollziehen, falls ihr daran Interesse habt. Viel Spaß beim ansehen!

Ältere Beiträge «