<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Urbans Blog</title>
	<atom:link href="http://www.urbans-blog.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.urbans-blog.de</link>
	<description>Der alltägliche Wahnsinn und mein Senf dazu</description>
	<lastBuildDate>Sun, 03 Apr 2011 13:18:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>anzido GmbH &#8211; Einstellung des Geschäftsbetriebes zum 31.07.2011</title>
		<link>http://www.urbans-blog.de/2011/04/03/anzido-gmbh-einstellung-des-geschaftsbetriebes-zum-31-07-2011/</link>
		<comments>http://www.urbans-blog.de/2011/04/03/anzido-gmbh-einstellung-des-geschaftsbetriebes-zum-31-07-2011/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 13:18:47 +0000</pubDate>
		<dc:creator>urban</dc:creator>
				<category><![CDATA[business]]></category>

		<guid isPermaLink="false">http://www.urbans-blog.de/?p=281</guid>
		<description><![CDATA[Liebe Kunden, liebe Partner, liebe Geschäftsfreunde, es war ein langer und nicht gerade einfacher Prozess &#8211; aber nun ist die Entscheidung gefallen: Die anzido GmbH wird zum 31. Juli diesen Jahres ihren Geschäftsbetrieb einstellen. Für die meisten von Ihnen wird diese Nachricht vermutlich sehr überraschend kommen. Bevor ich erkläre, wie es zu dieser Entscheidung gekommen [...]]]></description>
			<content:encoded><![CDATA[<p>Liebe  Kunden,<br />
liebe Partner,<br />
liebe Geschäftsfreunde,</p>
<p>es  war ein langer und nicht gerade einfacher Prozess &#8211; aber nun ist die  Entscheidung gefallen:</p>
<p><strong>Die anzido GmbH wird zum 31. Juli diesen  Jahres ihren Geschäftsbetrieb einstellen.</strong></p>
<p>Für die meisten von  Ihnen wird diese Nachricht vermutlich sehr überraschend kommen. Bevor ich  erkläre, wie es zu dieser Entscheidung gekommen ist, möchte ich zunächst einige  wichtige Informationen geben bzgl. der nächsten Wochen und  Monate.</p>
<p><strong>Wichtige Informationen für unsere  Kunden:</strong></p>
<p>Als sich die jetzige Entscheidung abzuzeichnen begann,  war mir persönlich sehr wichtig, dass es sowohl für unsere Mitarbeiter als auch  für unsere Kunden klare Perspektiven gibt, wie es nach der Einstellung unseres  Geschäftsbetriebes weitergeht.<br />
Was die Mitarbeiter betrifft, so haben sich  hier zwischenzeitlich Lösungen gefunden. Was die Kunden betrifft, so habe ich in  den letzten Wochen bereits etliche Gespräche mit anderen OXID-Partnern geführt,  um eine saubere Übergabe von einzelnen Kundenprojekten vorzubereiten. Angesichts  der mittlerweile doch recht großen Anzahl der von uns betreuten Kunden, war es  nicht möglich, dies bereits für alle Kunden zu organisieren. Ich möchte Ihnen  hier aber einige Agenturen empfehlen, mit denen wir seit längerer Zeit zum Teil  eng zusammenarbeiten und bei denen ich überzeugt bin, dass Sie dort genau so  kompentent betreut werden, wie dies &#8211; hoffentlich &#8211; bei uns der Fall  war.</p>
<p>Die folgenden Agenturen haben mir signalisiert, dass sie sowohl die  Bereitschaft als auch die Kapazitäten haben, einzelne Projekte von uns zu  übernehmen:</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p><strong>digidesk  media solutions</strong><br />
Inh. Marco Müller<br />
Fontanewg 4<br />
33415  Verl</p>
<p>Tel.: 05246 &#8211; 909910<br />
Fax.: 05246 &#8211; 9099122<br />
<a href="http://www.digidesk.de">http://www.digidesk.de</a><br />
<a href="mailto:info@digidesk.de">info@digidesk.de</a></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p><strong>FATCHIP  GmbH</strong><br />
Geschäftsführer: Dipl.-Ing. Hendrik Bahr<br />
Helmholtzstrasse  2-9<br />
10587 Berlin</p>
<p>Tel.: 030 &#8211; 39 88 93 51<br />
Fax.: 030 &#8211; 39 88 93  52<br />
<a href="http://www.fatchip.de">http://www.fatchip.de</a><br />
<a href="mailto:kontakt@fatchip.de">kontakt@fatchip.de</a></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p><strong>D³  Data Development</strong><br />
Inhaber: Thomas Dartsch<br />
Stollberger Straße  23<br />
09380 Thalheim</p>
<p>Tel.: 03721 – 268090<br />
Fax.: 03721 –  265234<br />
<a href="http://www.shopmodule.com">http://www.shopmodule.com</a><br />
<a href="mailto:info@shopmodule.com">info@shopmodule.com</a></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Diese  Agenturen sind alle langjährig als OXID-Partner tätig, unterscheiden sich aber  z. T. hinsichtlich ihrer Größe und Ausrichtung. Bitte nehmen Sie selbst Kontakt  mit einer Agentur auf, die Ihnen für Ihren Shop geeignet erscheint. Und bitte  tun Sie dies so bald wie möglich. Es wird zwar noch 4 Monate dauern, bis wir  unseren Geschäftsbetrieb einstellen, mir ist aber sehr daran gelegen, Ihren  neuen Partnern noch alle notwendige Unterstützung bei der Übergabe Ihrer  Projekte geben zu können.</p>
<p>Selbstverständlich erhalten Ihre neuen Partner  von uns alle vorgenommenen Programmierungen im Quellcode. Gerne werden wir &#8211; wo  nötig &#8211; auch Termine vereinbaren, um zum einen oder anderen Projekt helfende  Hinweise zu geben, damit ein neuer Partner sich möglichst reibungslos in Ihr  Projekt einarbeiten kann.<br />
Für diesen Prozess wäre es sehr hilfreich, wenn Sie  uns unmittelbar verständigen, sobald Sie sich für einen neuen Partner  entschieden haben. Zu einer sauberen Übergabe gehört dann auch, dass ein  Zeitpunkt vereinbart wird, zu dem die uns überlassenen Zugangsdaten zu Servern  etc. geändert werden, damit Zuständigkeiten und Verantwortlichkeiten klar  getrennt sind.</p>
<p><strong>Was wird mit den anzido  Modulen?</strong></p>
<p>Genau wie bei unseren Kunden-Projekten bin ich seit  geraumer Zeit bemüht, dass auch die von uns entwickelten Kaufmodule und  Schnittstellen von einem anderen OXID-Partner übernommen und somit  weiterentwickelt und gepflegt werden. Wir werden dazu im Laufe der nächsten  Wochen an alle Modulkunden noch einen gesonderten Newsletter verschicken, indem  die zukünftigen Ansprechpartner für die diversen Module bekannt gegeben  werden.</p>
<p><strong>Wie konnte es nun dazu kommen?</strong></p>
<p>Vorab:  der anzido GmbH geht es wirtschaftlich betrachtet hervorragend und von daher  gesehen kann ich gut nachvollziehen, dass einige vertraute Menschen, mit denen  ich schon etwas früher über meine Entscheidung gesprochen habe, mich zunächst  völlig irritiert angeschaut haben &#8230; &#8211; Bei einigen fielen spontan Aussagen wie:  &#8220;Du bist ja bekloppt &#8230;&#8221;<br />
Ich kann dieses anfängliche Unverständnis gut  nachvollziehen und habe mich um so mehr über jeden gefreut, der nach einiger  Zeit dann doch auch mich verstehen konnte.<br />
Wie also ist es zu dieser  Entscheidung gekommen?</p>
<p>Vor gut 2 Jahren hatte ich ehrgeizige Pläne und  Ziele mit der anzido GmbH &#8211; und auch mit der damals gegründeten anzido Akademie.  Leider wurden diese Ziele bis zum heutigen Tage nicht erreicht. Die Gründe dafür  sind vielfältig &#8211; den allergrößten Teil macht dabei aber schlicht und einfach  fehlendes Personal aus.<br />
Mein Hauptanliegen in den letzten zwei Jahren war es,  unser Team auszubauen, weitere Entwickler einzustellen, um dann irgendwann auch  bzgl. des Managements eine Zwischenebene aufbauen zu können &#8211; z. B. in Form  eines Projektmanagers &#8211; so dass es für mich persönlich langfristig zu einer  spürbaren Entlastung kommt.</p>
<p>Ich arbeite seit vielen Jahren am Anschlag.  Organisation und Administration der Firma, Akquise, Kundenbetreuung,  Controlling, Support und immer wieder auch die Programmierung gehörten zu meinen  Aufgaben. Daneben dann noch Schulungen und Consulting, ständiges Bemühen um  Verbesserungen an unseren internen Strukturen, Pflege der Beziehungen zu  Partnern, Konzeption und Marketing bzgl. unserer Module &#8230; &#8211; um nur die  wesentlichen Bereiche zu nennen.<br />
Das alles hat Spuren hinterlassen, Vieles  ist während dieser Zeit erheblich zu kurz gekommen: Familie, Freunde und  letztlich auch die Gesundheit.</p>
<p>Nun ist all das noch nicht in einem  wirklich kritischen Stadium. Aber soweit möchte ich es eben auch gar nicht erst  kommen lassen. Ich habe speziell im letzten Jahr mehrfach deutlich gespürt, dass  ich mich in meiner Situation nicht wirklich wohl fühle. Und je deutlicher es  wurde, dass die gesteckten Ziele nicht erreicht werden, umso stärker wurde die  Frage: Wie lange soll das so noch weitergehen?<br />
Wenn man dann im engeren und  weiteren Bekanntenkreis mitbekommt, dass hier jemand für längere Zeit  ausgefallen ist wegen eines &#8220;Burnouts&#8221; &#8211; oder dass dort jemand in meinem Alter  plötzlich eine Herzattacke erleidet &#8211; dann bekommt eine solche Frage umso mehr  Gewicht.</p>
<p>Als nun Anfang diesen Jahres mein langjährigster Mitarbeiter,  Herr Rother, seine Kündigung vorlegte, war ein Punkt erreicht, an dem mir klar  wurde, dass nun entweder alle Anstrengungen erneut wesentlich hätten verstärkt  und die Stressspirale damit erneut deutlich hochgeschraubt hätte werden müssen &#8211;  oder aber ein alternativer Weg gefunden werden musste.</p>
<p>In dieser  Situation erinnerte ich mich daran, dass mir von einer Firma, mit der wir seit  längerer Zeit zusammenarbeiten, immer wieder mal signalisiert worden war, dass  man mich sehr gerne als Mitarbeiter gewinnen würde. Also führte ich ab ca. Ende  Januar entsprechende Gespräche und es kristallisierte sich heraus, dass man mir  dort Aufgabenbereiche anbot, die so ziemlich genau das abdeckten, was mir  bereits in meiner jetzigen Rolle immer schon am meisten Spaß machte.</p>
<p>Als  sich dann relativ schnell sowohl bzgl. meiner übrigen Mitarbeiter als auch bzgl.  unserer Kundenprojekte konkrete Perspektiven abzeichneten und mir klar wurde,  dass ein Ausstieg möglich sein würde, ohne irgendjemanden &#8220;im Regen&#8221; stehen zu  lassen &#8211; fiel mir die Entscheidung relativ leicht.</p>
<p>Natürlich ist bei  alledem ein lachendes und ein weinendes Auge dabei &#8230; &#8211; in der anzido GmbH  stecken inklusive der Zeit meiner Einzelfirma nun rund 11 Jahre Schweiß und  Herzblut. Dennoch habe ich inzwischen ein gutes Gefühl bei meiner Entscheidung.  Ich freue mich auf die Zusammenarbeit in einem neuen &#8211; aus meiner Sicht extrem  spannenden &#8211; Team und auf neue Herausforderungen.<br />
Und es gibt in meinem neuen  Tätigkeitsbereich die begründete Hoffnung, die Arbeitsbelastung auf ein  verträgliches Maß zu reduzieren und mich so auch wieder einigen Bereichen  außerhalb der Arbeit stärker widmen zu können.</p>
<p><strong>Ab 01. August  2011 werde ich als Schulungsleiter und Partnermanager für die <a href="http://greyhound-software.com/" target="_blank">Fa. digital guru  (<em>GREYHOUND</em>)</a> tätig sein. </strong>Manche unserer Kunden werde ich also  durchaus in der ein oder anderen Weise weiter betreuen &#8211; allerdings unter  anderer Flagge.<br />
Ich werde somit auch weiterhin im Bereich &#8220;Ecommerce&#8221; direkt  oder indirekt tätig sein. Und auch mein in vielen Jahren erworbenes  OXID-Know-How gedenke ich nicht in der Schublade verstauben zu lassen. In  begrenztem Maße werde ich weiterhin für Schulung und Consulting rund um die  OXID-Software zur Verfügung stehen und werde das OXID-Geschehen sicherlich auch  in den nächsten Jahren aufmerksam weiter mit verfolgen und mich ggf. hier und da  auch mal &#8220;einmischen&#8221;.</p>
<p>Ich möchte mich abschließend bei allen  Kunden, Partnern und Geschäftsfreunden ausdrücklich für die z. T. langjährige,  in der Regel sehr angenehme und vertrauensvolle Zusammenarbeit bedanken! Ich  hoffe und wünsche mir für Sie, dass Sie Ihre jeweiligen Projekte erfolgreich  weiterführen können! Wo es sich anbietet und ergibt freue ich mich, mit dem  einen oder der anderen von Ihnen vielleicht auch in Zukunft unter anderen  Vorzeichen zusammenzuarbeiten.</p>
<p>Herzlichen Dank und liebe  Grüße!</p>
<p><em><strong>Andreas Ziethen</strong></em><br />
Geschäftsführer der  anzido GmbH</p>
]]></content:encoded>
			<wfw:commentRss>http://www.urbans-blog.de/2011/04/03/anzido-gmbh-einstellung-des-geschaftsbetriebes-zum-31-07-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iTunes träge &#8211; unterbrechungsfreie Wiedergabe</title>
		<link>http://www.urbans-blog.de/2011/03/05/itunes-trage-unterbrechungsfreie-wiedergabe/</link>
		<comments>http://www.urbans-blog.de/2011/03/05/itunes-trage-unterbrechungsfreie-wiedergabe/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 11:23:29 +0000</pubDate>
		<dc:creator>urban</dc:creator>
				<category><![CDATA[musik]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[träge]]></category>

		<guid isPermaLink="false">http://www.urbans-blog.de/?p=274</guid>
		<description><![CDATA[Ich hatte kürzlich das Problem, dass iTunes bei mir extrem träge wurde &#8211; nach jedem Start (auf einem PC) dauerte es 2-3 min. bevor man überhaupt irgendeine Aktion ausführen konnte. Und dann ratterte nach jedem Start das &#8220;Sammeln der Informationen für die unterbrechungsfreie Wiedergabe&#8221; los, was das Programm erneut für bis zu 5 min. komplett [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte kürzlich das Problem, dass iTunes bei mir extrem träge wurde &#8211; nach jedem Start (auf einem PC) dauerte es 2-3 min. bevor man überhaupt irgendeine Aktion ausführen konnte. Und dann ratterte nach jedem Start das &#8220;Sammeln der Informationen für die unterbrechungsfreie Wiedergabe&#8221; los, was das Programm erneut für bis zu 5 min. komplett lahmlegte.</p>
<p>Meine Recherche im Netz zeigte, dass ich mit diesem Problem nicht alleine bin. Ich habe zahlreiche Forenbeiträge gefunden, wo Leute nach einer Lösung dafür gefragt hatten &#8211; leider konnte ich nirgendwo eine wirklich hilfreiche Antwort finden.</p>
<p>Heute bin ich nun der Sache nochmals auf den Grund gegangen und habe das Problem bzgl. der unterbrechungsfreien Wiedergabe genauer analysiert:<br />
Wenn iTunes startet, dann wurden bei mir immer genau 8 Titel erneut untersucht. Diese Titel erscheinen dann ja auch oben in der Info-Zeile. Und genau diese Titel habe ich mir heute dann mal notiert und mir anschließend die Files genauer angesehen. Und siehe da: die waren alle auf igendeine Art defekt &#8211; und ließen sich auch z. B. mit Winamp nicht sauber abspielen.</p>
<p>Also hab ich die Files aus der iTunes Bibliothek entfernt und gelöscht. Seitem läuft iTunes wieder rund! <img src='http://www.urbans-blog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Vielleicht hilft das ja dem ein oder anderen auch weiter.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.urbans-blog.de/2011/03/05/itunes-trage-unterbrechungsfreie-wiedergabe/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Artikel über Core-Klassen Erweiterungen im aktuellen PHPmagazin</title>
		<link>http://www.urbans-blog.de/2010/05/10/artikel-uber-core-klassen-erweiterungen-im-aktuelln-phpmagazin/</link>
		<comments>http://www.urbans-blog.de/2010/05/10/artikel-uber-core-klassen-erweiterungen-im-aktuelln-phpmagazin/#comments</comments>
		<pubDate>Mon, 10 May 2010 07:47:05 +0000</pubDate>
		<dc:creator>urban</dc:creator>
				<category><![CDATA[OXID eShop]]></category>
		<category><![CDATA[artikel]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[oxid]]></category>
		<category><![CDATA[oxid4all]]></category>
		<category><![CDATA[oxid4project]]></category>
		<category><![CDATA[oxidforge]]></category>
		<category><![CDATA[phpmagazin]]></category>
		<category><![CDATA[projekterfassung]]></category>
		<category><![CDATA[shop]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://www.urbans-blog.de/?p=264</guid>
		<description><![CDATA[Als Ergänzung zu meinem 3-teiligen Workshop &#8220;OXID4ALL &#8211; Es muss ja nicht immer ein Shop sein &#8230;&#8221; möchte ich heute noch auf die aktuelle Ausgabe (4.10) des PHPmagazins hinweisen. Dort ist unter dem Titel &#8220;Kernig&#8221; nun ein Artikel von mir erschienen, in dem es um Core-Klassen Erweiterungen im OXID eShop geht. Diese Thematik bietet die [...]]]></description>
			<content:encoded><![CDATA[<p>Als Ergänzung zu meinem 3-teiligen Workshop <a title="OXID4All - Es muss ja nicht immer ein Shop sein" href="http://www.urbans-blog.de/2010/05/07/oxid4all-es-muss-ja-nicht-immer-ein-shop-sein-teil-1/" target="_blank">&#8220;OXID4ALL &#8211; Es muss ja nicht immer ein Shop sein &#8230;&#8221;</a> möchte ich heute noch auf die aktuelle Ausgabe (4.10) des <a title="PHPmagazin" href="http://it-republik.de/php/" target="_blank">PHPmagazins</a> hinweisen. Dort ist unter dem Titel &#8220;Kernig&#8221; nun ein Artikel von mir erschienen, in dem es um Core-Klassen Erweiterungen im OXID eShop geht.</p>
<p>Diese Thematik bietet die Basis für die in meinem <a title="Workshop zu Projekterfassungs-Tool auf Basis von OXID eShop CE" href="http://www.urbans-blog.de/2010/05/07/oxid4all-es-muss-ja-nicht-immer-ein-shop-sein-teil-1/" target="_self">Workshop </a>beschriebenen Schritte, um das OXID Framework (OF) auch für eigene Anwendungen &#8211; fern der Ecommerce-Welt &#8211; nutzen zu können.</p>
<p>Der Artikel im <a title="PHPmagazin" href="http://it-republik.de/php/" target="_blank">PHPmagazin</a> nimmt Bezug auf meinen ursprünglich geplanten Vortrag bei den <a title="OXID Commons 2010" href="http://www.oxid-esales.com/de/news/oxid-commons-2010" target="_blank">OXID Commons</a>. Natürlich musste der Artikel schon im April abgegeben werden, als ich noch nicht ahnen konnte, dass ich meine Commons-Teilnahme krankheitsbedingt würde absagen müssen. Der Inhalt des dort ausgefallenen Vortrags ist ja nun hier im Blog verfügbar.</p>
<p>Fragen zum Artikel und/oder zum Workshop beantworte ich gerne hier im Blog. Nutzt die Kommentarfunktion.</p>
<p>Bzgl. des Projekterfassungs-Toos erhielt ich bereits gestern zwei Rückmeldungen von interessierten PHP-Entwicklern, die sich vorstellen können, daran mitzuarbeiten, dieses Projekt weiter auszubauen. Ich werde also versuchen, so schnell wie möglich dafür zu sorgen, dass das Ganze kollaborationsfähig als OXIDforge-Projekt zur Verfügung steht!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.urbans-blog.de/2010/05/10/artikel-uber-core-klassen-erweiterungen-im-aktuelln-phpmagazin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OXID4ALL – Es muss ja nicht immer ein Shop sein … – Teil 3</title>
		<link>http://www.urbans-blog.de/2010/05/09/oxid4all-%e2%80%93-es-muss-ja-nicht-immer-ein-shop-sein-%e2%80%a6-%e2%80%93-teil-3/</link>
		<comments>http://www.urbans-blog.de/2010/05/09/oxid4all-%e2%80%93-es-muss-ja-nicht-immer-ein-shop-sein-%e2%80%a6-%e2%80%93-teil-3/#comments</comments>
		<pubDate>Sun, 09 May 2010 17:06:59 +0000</pubDate>
		<dc:creator>urban</dc:creator>
				<category><![CDATA[OXID eShop]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[oxid]]></category>
		<category><![CDATA[oxid ce]]></category>
		<category><![CDATA[projekt]]></category>
		<category><![CDATA[projekterfassung]]></category>

		<guid isPermaLink="false">http://www.urbans-blog.de/?p=233</guid>
		<description><![CDATA[Nun denn &#8211; auf zum Endspurt &#8211; und damit zum Kern des Projektes &#8220;oxid4project &#8211; Ein Projekterfassungs-Tool auf Basis von OXID CE&#8221;. In diesem dritten und letzten Teil meines kleinen Workshops werde ich die Implementierung eigener Datenbanktabellen und damit verknüpfter core-Objekte demonstrieren. Dies bildet die Grundlage für die weitere Anwendungsentwicklung. Am Ende des Beitrages steht [...]]]></description>
			<content:encoded><![CDATA[<p>Nun denn &#8211; auf zum Endspurt &#8211; und damit zum Kern des Projektes <strong>&#8220;oxid4project &#8211; Ein Projekterfassungs-Tool auf Basis von OXID CE&#8221;</strong>.</p>
<p>In diesem dritten und letzten Teil meines kleinen Workshops werde ich die Implementierung eigener Datenbanktabellen und damit verknüpfter core-Objekte demonstrieren. Dies bildet die Grundlage für die weitere Anwendungsentwicklung.</p>
<p>Am Ende des Beitrages steht dann der komplette Quellcode zum Download zur Verfügung.</p>
<div id="attachment_236" class="wp-caption aligncenter" style="width: 584px"><a href="http://www.urbans-blog.de/wp-content/anz_uploads/2010/05/oxid4project_screen_02_main.png"><img class="size-full wp-image-236" title="oxid4project Projektdatenerfassung" src="http://www.urbans-blog.de/wp-content/anz_uploads/2010/05/oxid4project_screen_02_main.png" alt="oxid4project Projektdatenerfassung" width="574" height="274" /></a><p class="wp-caption-text">oxid4project Projektdatenerfassung</p></div>
<p>Bisher hatten wir lediglich eine Login-Seite und eine noch ziemlich leere Startseite für das Projekterfassungs-Tool erstellt. Bevor wir das Ganze nun mit nützlicher Funktionalität füllen, wollen wir uns zunächst an die notwendigen core-Objekte machen.</p>
<p>Wie schon in Teil 1 beschrieben, benötigen wir folgende Objekte:</p>
<p>- Mitarbeiter / User: hier nutzen wir OXID Standardfunktionalität<br />
- Projekte: dafür wird eine eigene core-Klasse benötigt<br />
- Zeit- und Texterfassung: auch hierfür mache eine eigene core-Klasse Sinn<br />
- Auswertungen: ebenfalls eine eigene core-Klasse</p>
<p>Um den Bereich &#8220;Mitarbeiter&#8221; kümmern wir uns im Moment überhaupt nicht &#8211; das erledigen wir komplett mit OXID-Standards. Für die Projektstammdaten sieht das anders aus:</p>
<div>&nbsp;</div>
<p><strong>Neues Objekt: Projekt(e) &#8211; Datenfelder</strong></p>
<p>Um die Projektstammdaten zu erfassen, benötigen wir zunächst eine eigene Tabelle:<br />
<pre><code>
CREATE TABLE `azprojects` (
`OXID` varchar(32)&nbsp;&nbsp;NOT NULL,
`AZTITLE` varchar(150) NOT NULL,
`AZPRICEPERHOUR` double NOT NULL,
PRIMARY KEY (`OXID`)
);
</code></pre></p>
<p>Wir beschränken uns hier auf eine eindeutige ID, einen Titel und den Stundensatz. Um nicht mit OXID-eigenen Konventionen in Konflikt zu geraten, sollten eigene Tabellen und Tabellenfelder grundsätzlich ein eigenes Prefix bekommen &#8211; ich nutze stets &#8220;AZ&#8221; dafür. Eine Ausnahme bildet in unserer neu angelegten Tabelle allerdings das Feld <em>OXID</em>.</p>
<p>Im OXID Framework (OF) hat die sog. OX-ID eine besondere Stellung. Diese ID ist in allen Tabellen der primary key und somit immer die eindeutige ID für jeden Datensatz. Anhand dieser ID laden die OF-Basisklassen Inhalte in die Objekte hinein. Damit wir diesen sehr komfortablen Mechanismus nutzen können, müssen wir unserer Tabelle ebenfalls eine <em>OX-ID</em> geben.</p>
<p>Nun brauchen wir noch die zugehörige core-Klasse, die als Minimalversion so aussieht:<br />
<pre><code>
class azproject extends oxI18n
{
&nbsp;&nbsp;&nbsp;&nbsp;protected $_sCoreTbl = &#039;azprojects&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;protected $_sClassName = &#039;azprojcect&#039;;

&nbsp;&nbsp;&nbsp;&nbsp;public function __construct()
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::__construct();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;init( &#039;azprojects&#039; );
&nbsp;&nbsp;&nbsp;&nbsp;}
}
</code></pre></p>
<p><span style="text-decoration: underline;"> Erläuterung:<br />
</span>Wir deklarieren die Klasse <em>azproject</em> als Extension von <em>oxI18n</em>. Diese Klasse wiederum ist Extension der Klasse <em>oxBase</em> &#8211; und die wiederum ist Extension von <em>oxSuperCfg</em>. Von dieser Vererbungskette profitieren wir in mehrfacher Hinsicht:</p>
<ul>
<li><em>oxSuperCfg:</em> stellt uns mit Session- und Config-Objektgettern das Fundament des OF zur Verfügung</li>
<li><em>oxBase:</em> enthält alle Kernfunktionen für Datenobjekte, inkl. der notwendigen Methoden, um Daten aus Tabellen in Objekteigenschaften zu überführen und umgekehrt</li>
<li><em>oxI18n:</em> ist die sog. &#8220;Internationalization&#8221; Klasse, in der diverse Mechanismen hinterlegt sind, die es recht einfach machen, die Datenobjekte auch mehrsprachig zu pflegen. (Wir werden das im aktuellen Projekt nicht nutzen, aber um das Projekt möglichst universell nutzen zu können, macht es Sinn, diese Option hier zumindest mit einzubinden.)</li>
</ul>
<p>Dieser OF-Komfort sorgt dafür, dass unsere eigene core-Klasse ziemlich bescheiden bleiben kann. Im Grunde definieren wir dort nur den Namen unseres Objektes <em>($_sClassName)</em> und den Namen der Tabelle, aus der die Daten kommen <em>($_sCoreTbl)</em>. Das reicht bereits, um das grundlegende Handling unserer Projektstammdaten zu erledigen.</p>
<p>Wie das Ganze ins Template eingebunden wird, entnehmt ihr bitte dem Quellcode, der ja zum Download bereitliegt. Ich will hier nur kurz noch zeigen, wie nun das besagte Handling der Daten in die entsprechende View-Klasse <em>azprojectsstart</em> eingebunden wird.</p>
<p>Zuvor brauchen wir aber noch eine weitere core-Klasse &#8211; und zwar für ein Listenobjekt der Projektstammdaten. Warum das? &#8211; Nun, das OF enthält für nahezu alle Daten(core-)objekte jeweils eine Klasse für das Einzelobjekt und eine Klasse für das entsprechende Listenobjekt (z. B.: <em>oxarticle / oxarticlelist, oxcategory / oxcategorylist, oxuser / oxuserlist etc.</em>). Während die Klassen der Einzelobjekte wie oben beschrieben Extensions von <em>oxBase </em>oder <em>oxI18n</em> sind, sind die Listenklassen Extensions von<em>oxList</em>. Die Klasse <em>oxList </em>implementiert einige vordefinierte Interfaces (<em>ArrayAccess, Iterator, Countable</em>) und bietet damit komfortable Möglichkeiten für den Umgang mit Objekten. Viel interessanter sind aber einige Standardmethoden dieser Klasse &#8211; wie z. B. <em>selectString()</em> &#8211; die einem das Leben extrem leicht machen können. Wir werden gleich sehen, was das konkret bedeutet. Zunächst aber legen wir unsere Listenklasse <em>azprojectlist</em> an wie folgt:<br />
<pre><code>
class azProjectList extends oxList
{
&nbsp;&nbsp;&nbsp;&nbsp;public function __construct( $sObjectsInListName = &#039;azproject&#039;)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return parent::__construct( &#039;azproject&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;}
}
</code></pre><br />
Ziemlich übersichtlich &#8211; nicht wahr? <img src='http://www.urbans-blog.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  &#8211; Aber genau dafür nutzen wir ja schließlich Frameworks, um nicht alles ständig komplett neu machen zu müssen. Diese sieben Codezeilen werden uns gleich das Leben extrem vereinfachen.</p>
<div>&nbsp;</div>
<p><strong>Core-Objekt für Projektstammdaten in View-Klasse nutzen</strong></p>
<p>Auf der Startseite für unser Tool soll die komplette Datenerfassung erfolgen. Hier sollen auch neue Projekte mit ihrem aktuellen Stundensatz angelegt werden können. Die vorhandenen Projekte sollen über ein Dropdown-Menü ausgewählt werden können:</p>
<div id="attachment_244" class="wp-caption aligncenter" style="width: 524px"><a href="http://www.urbans-blog.de/wp-content/anz_uploads/2010/05/oxid4project_screen_03_projectdata.png"><img class="size-full wp-image-244" title="oxid4project - Projektdatenerfassung" src="http://www.urbans-blog.de/wp-content/anz_uploads/2010/05/oxid4project_screen_03_projectdata.png" alt="oxid4project - Projektdatenerfassung" width="514" height="36" /></a><p class="wp-caption-text">oxid4project - Projektdatenerfassung</p></div>
<p>Die Befüllung des Dropdown-Menüs erfolgt, indem wir in der View-Klasse <em>azprojectsstart</em> einen entsprechenden Getter implementieren:<br />
<pre><code>
public function getProjects()
{
&nbsp;&nbsp;$oProjectList = oxNew(&quot;azprojectlist&quot;);
&nbsp;&nbsp;$oProjectList-&gt;selectString(&quot;select oxid, aztitle from azprojects order by aztitle&quot;);

&nbsp;&nbsp;return $oProjectList-&gt;getArray();
}
</code></pre><br />
Im Template sieht das dann folgendermaßen aus:<br />
<pre><code>
&lt;select name=&quot;azdata[azjobs__azprojectid]&quot;&gt;
&nbsp;&nbsp;&lt;option value=&quot;&quot;&gt; -- Projekt auswählen -- &lt;/option&gt;
&nbsp;&nbsp;[{foreach from=$oView-&gt;getProjects() item=oProject}]
&nbsp;&nbsp;&nbsp;&nbsp;&lt;option value=&quot;[{$oProject-&gt;azprojects__oxid-&gt;value}]&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[{if $actProject == $oProject-&gt;azprojects__oxid-&gt;value}]selected[{/if}]&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[{$oProject-&gt;azprojects__aztitle-&gt;value}]
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/option&gt;
&nbsp;&nbsp;[{/foreach}]
&lt;/select&gt;
</code></pre></p>
<p>Auch hier eine kurze Erläuterung:<br />
Der Getter <em>azprojectstart::getProjects()</em> instanziiert ein neues Objekt der Listeklasse <em>azprojectlist</em>. Dies erfolgt mittels der (Factory-)Funktion <em>oxNew()</em>. Auch hier steckt wieder viel Komfort und Know How des OF&#8217;s drin: Die Funktion <em>oxNew()</em> sorgt z. B. dafür, dass &#8211; falls vorhanden &#8211; Module für die instanziierten Klassen berücksichtigt werden.</p>
<p>Auf dem Listenklassenobjekt können wir nun die Methode <em>selectString()</em> ausführen, die als Parameter ein simples Datenbankquery bekommt. Diese Methode sorgt nun dafür, dass das Listenobjekt <em>$oProjectList</em> als protected property ein Array enthält, welches die Einzelobjekte sämtlicher Datensätze enthält, die über das Query gefunden wurden. Über die (public) Methode <em>getArray()</em> auf dem Listenobjekt können wir diese Liste nun abrufen und darüber iterieren (siehe Template).</p>
<div>&nbsp;</div>
<p><strong>Neue Stammdaten via Core-Objekt in der Datenbank speichern</strong></p>
<p>Nun fehlt noch das Speichern von neuen Projektstammdaten in der Datenbank. Um auch das ohne viel Aufwand erledigen zu können, kommt es darauf an, die Daten in einer speziellen Struktur zu erfassen, die der OF-eigenen Struktur bei Datenobjekten entspricht:</p>
<p><em>[Objektname]-&gt;[Tabellenname]__[Feldname]-&gt;value</em></p>
<p>Dementsprechend erhält unsere View-Klasse <em>azprojectsstart</em> nun folgende (protected) Methode:<br />
<pre><code>
protected function _createNewProject($title, $dPricePerHour)
{
&nbsp;&nbsp;$id = oxDb::getDb()-&gt;GetOne(&quot;select oxid from azprojects where aztitle = &#039;$title&#039;&quot;);
&nbsp;&nbsp;if(!empty($id)) {
&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_aErrorMsg[] = &quot;Projekt schon vorhanden!&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;return &quot;error&quot;;
&nbsp;&nbsp;}

&nbsp;&nbsp;$oProject = oxNew(&quot;azproject&quot;);
&nbsp;&nbsp;$oProject-&gt;azprojects__aztitle-&gt;value = $title;
&nbsp;&nbsp;$oProject-&gt;azprojects__azpriceperhour-&gt;value = $dPricePerHour;
&nbsp;&nbsp;$oProject-&gt;save();

&nbsp;&nbsp;return $oProject-&gt;getId();
}
</code></pre><br />
Die Methode wird innerhalb der (public) Methode <em>saveProjectData()</em> aufgerufen und erhält als Parameter die Inhalte der beiden Formularfelder für Projekttitel und Stundensatz. Die genaue Struktur bitte im Quellcode nachvollziehen.</p>
<p>Zunächst überprüfen wir, ob evtl. schon ein Projekt mit demselben Namen existiert und übergeben ggf. eine entsprechende Fehlermeldung. Konnte das neue Projekt erfolgreich angelegt werden, so wird die (OX-)ID des neuen Datensatzes zurückgeliefert.</p>
<div>&nbsp;</div>
<p><strong>Die Erfassung der Projekt- bzw. &#8220;Job&#8221;-Daten</strong></p>
<p>Wenn wir zuvor einige Beispielprojekte mit Stundensätzen angelegt haben, so können wir nun an die eigentliche Erfassung der Daten der einzelnen Jobs gehen. &#8220;Job&#8221; meint hier eine Arbeitseinheit eines Entwicklers an einem bestimmten Projekt.</p>
<p>Vom Grundprinzip her funktioniert das auf dieselbe Weise wie oben bei den Projektstammdaten beschrieben: Wir benötigen zwei core-Klassen <em>azjob </em>und <em>azjoblist</em>, dazu natürlich eine entsprechende Datenbanktabelle und noch die Einbindung in die View-Klasse <em>azprojectsstart</em>. Und da das Ganze hier ja ein <em>Workshop</em> sein soll (bzw. auf der Commons sein sollte &#8230;), kann das nun jeder für sich ausprobieren &#8211; oder aber sich im mitgelieferten Quellcode einfach anschauen, wie ich es gelöst habe. <img src='http://www.urbans-blog.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div>&nbsp;</div>
<p><strong>Ein paar hilfreiche Hinweise zum Schluss</strong></p>
<p>Da der gesamte Beitrag hier nun bereits deutlich länger geworden ist, als gedacht, möchte ich für den Rest der Anwendung auf den überlassenen Quellcode verweisen. Auf ein paar Dinge möchte ich aber noch hinweisen, weil sie ohne tiefergehende OXID-Kenntnis nicht sofort selbsterklärend sind:</p>
<p><em><span style="text-decoration: underline;">functions.php<br />
</span></em>Innerhalb des <em>modules</em>-Verzeichnisses gibt es eine Datei <em>functions.php</em>, die standardmässig leer ist (abgesehen von einigen Kommentaren). Diese Datei ist dafür gedacht, eigene Funktionen anzulegen, die dann in allen übrigen PHP-Klassen genutzt werden können.<br />
Kleiner Praxistipp: Es empfiehlt sich, die eigenen Funktionen in eine extra Datei auszulagern und in der Datei <em>functions.php</em> über includes einzubinden. Grund: Sollten einmal externe Module in die Anwendung eingebunden werden, die ebenfalls eigene Funktionen mitbringen, so müssen diese nicht jedes Mal in der <em>functions.php</em> zusammengeführt werden sondern es reicht dann das Hinzufügen einer weiteren include-Zeile.</p>
<p>Da es sich hier um <em>Funktionen</em> handelt und nicht um in Klassen gekapselte <em>Methoden</em>, sollten diese von vornherein eindeutig benannt werden, indem z. B. ein eindeutiges Prefix vorangestellt wird (in meinem Falle &#8220;az&#8221;).</p>
<p>Ich habe hier 2 Funktionen untergebracht, die für die Dropdowns <em>Datum</em> und <em>Zeitaufwand</em> benutzt werden, um hier sämtliche Daten der letzten 180 Tage sowie Zeitabschnitte in Viertelstundenschritten anzeigen zu lassen.</p>
<p>Für die restliche Funktionalität verzichte ich hier auf weitere Erläuterungen. Jeder kann sich diese anhand des mitglieferten Quellcodes selbst erschließen.</p>
<div>&nbsp;</div>
<p><strong>Abschließende Hinweise zu einer möglichen Weiterentwicklung des Projektes</strong></p>
<p>Wer das Gesamtpaket einmal installiert und testet, wird schnell feststellen, dass hier noch etliche Wünsche offen bleiben. Speziell im Bereich der Auswertung könnte man sich noch viele nützliche Funktionen vorstellen. Gerade deshalb möchte ich das Projekt nun der Community zur Verfügung stellen, damit jeder, der Lust und Zeit hat, am Ausbau und an einer Verbesserung des Tools mitwirken kann. Wie schon gesagt werde ich versuchen, das Ganze schnellstmöglich als Projekt auf OXIDforge anzulegen, damit dann über diese Plattform eine gordnete Weiterentwicklung für Interessierte möglich wird.</p>
<p>Ein interessanter Aspekt der Weiterentwicklung könnte z. B. die Vereinfachung bei der Rechnungsstellung sein. Schließlich werkelt im Hintergrund ja ein <strong>Shop</strong>-Framework &#8211; es läge von daher nahe, aus abgerechneten Jobs Bestellungen zu generieren und hier dann entweder das Rechnungs-PDF des Shops zu nutzen oder aber die Daten über eine Schnittstelle in ein ERP-System zu überführen und dort dann automatisiert Rechnungen zu erstellen. Dafür müssten dann natürlich noch die Projektstammdaten mit Kundenstammdaten verknüpft werden, um einen vollständigen Bestelldatensatz generieren zu können. Das sollte sich aber durchaus machen lassen.</p>
<p>Jeder, der hier weiterführende Ideen beisteuern kann, ist herzlich eingeladen, sich an der Weiterentwicklung zu beteiligen! Sobald vorhanden, werde ich hier die entsprechenden Daten und Links bzgl. OXIDforge veröffentlichen.</p>
<div>&nbsp;</div>
<p><strong>Schlussbetrachtung im Kontext der zurückliegenden OXID Commons</strong></p>
<p>Nachdem ich vorgestern den ersten Teil des Workshops hier veröffentlicht hatte, erhielt ich im Blick auf meine krankheitsbedingte Absage für die Commons kurz darauf einen Tweet von Roland Fesenmayr, den ich hier kurz zitieren möchte:</p>
<blockquote><p>Wenn ich das lese, noch mehr schade, daß Du krank warst &#8230; hätte perfekt gepasst!</p></blockquote>
<p>Tja, das habe ich auch mehrfach gedacht, als ich die Live-Streams der Commons aus dem Krankenbett heraus mitverfolgte. Da war ja mehrfach die Rede von einem &#8220;Ecommerce Betriebssystem&#8221; welches modular aufgebaut sein soll und bei dem sich der Shopbetreiber passend zu seinem individuellen Geschäftsmodell genau <strong>die</strong> Komponenten auswählen kann, die ihm hilfreich erscheinen.</p>
<p>Nun ist ein Projekterfassungs-Tool nicht gerade ein &#8220;Geschäftsmodell&#8221; im Rahmen des Ecommerce. Dennoch zeigt mein Beispiel, wozu das OXID-Framework prinzipiell bereits jetzt fähig ist. Wir haben hier eben kein total starres System, das ausschließlich auf fest definierte Ecommerce-Szenarien abgestellt ist &#8211; sondern wir haben hier bereits heute einen Baukasten vor uns, der &#8211; richtig genutzt &#8211; an so ziemlich jedes Geschäftsmodell angepasst werden kann.</p>
<p>Nicht erst seit der Commons ist klar, dass aktuell ein frischer Wind durch die Ecommerce-Landschaft bläst. Noch ist das eher ein laues Lüftchen, das aber &#8211; nicht zuletzt durch die Verbreitung des iPads &#8211; spürbar an Fahrt aufnimmt. Einkaufen im Internet ist nicht mehr bloß die Besorgung von Dingen, für die man früher in ein Ladengeschäft stiefelte &#8211; Einkaufen im Internet bekommt mehr und mehr eine eigenständige Erlebnisqualität. Während Onlineshops lange Zeit versuchten, das Einkaufen im Ladengeschäft möglichst originalgetreu nachzubilden, gibt es mehr und mehr Features, die dem Onlinekauf einen echten Mehrwert geben. Das sind so Dinge wie z. B. die Möglichkeit von Preisvergleichen, der Austausch in sozialen Netzwerken &#8211; das sind aber auch neue technische Möglichkeiten. Ich freue mich schon darauf, wenn ich zum ersten Mal ein Bild meines Wohnzimmers in mein (hoffentlich bald verfügbares) iPad einlesen kann und die Möbel aus dem Onlineshop mit den Fingern in meinem Wohnzimmer hin und herschieben kann.</p>
<p>Alles, was da auf uns zukommt, wird um so spannender werden, je flexibler die Softwarekomponenten sind, die zur Umsetzung der verschiedensten Ideen zur Verfügung stehen &#8211; und je offener die Schnittstellen dieser Komponenten untereinander sind. Möglicherweise läuft ein Onlineshop dann auf Basis von 10 verschiedenen Komponenten, die auf 10 verschiedenen Webservern (oder in 10 verschiedenen Clouds?) laufen.</p>
<p>Mit meinem Beispiel eines Projekterfassungs-Tools wollte ich demonstrieren, dass das OXID Framework m. E. schon jetzt die Flexibilität und Offenheit bietet, um darauf (fast) alles Mögliche zu bauen. Zumindest ist OXID hier auf einem guten Weg.</p>
<div>&nbsp;</div>
<p><strong>Hinweise zum Download</strong></p>
<p>Der Download, der hier angeboten wird, ist ein Vorabangebot. Die Benutzung erfolgt komplett auf eigene Gefahr. Voraussetzung für die Nutzung der hier zur Verfügung gestellten Dateien ist eine frisch installierte OXID Community Edition 4.3.</p>
<p><a href="http://www.urbans-blog.de/wp-content/anz_uploads/2010/05/oxid4project.zip">oxid4project Sourcen</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.urbans-blog.de/2010/05/09/oxid4all-%e2%80%93-es-muss-ja-nicht-immer-ein-shop-sein-%e2%80%a6-%e2%80%93-teil-3/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>OXID4ALL – Es muss ja nicht immer ein Shop sein … – Teil 2</title>
		<link>http://www.urbans-blog.de/2010/05/08/oxid4all-%e2%80%93-es-muss-ja-nicht-immer-ein-shop-sein-%e2%80%a6-%e2%80%93-teil-2/</link>
		<comments>http://www.urbans-blog.de/2010/05/08/oxid4all-%e2%80%93-es-muss-ja-nicht-immer-ein-shop-sein-%e2%80%a6-%e2%80%93-teil-2/#comments</comments>
		<pubDate>Sat, 08 May 2010 19:18:12 +0000</pubDate>
		<dc:creator>urban</dc:creator>
				<category><![CDATA[OXID eShop]]></category>
		<category><![CDATA[commons]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[oxid]]></category>
		<category><![CDATA[oxid ce]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[projekt]]></category>
		<category><![CDATA[projekterfassung]]></category>
		<category><![CDATA[shop]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://www.urbans-blog.de/?p=183</guid>
		<description><![CDATA[Die Entscheidung war nun also gefallen: Ich wollte versuchen, auf Basis einer OXID CE ein brauchbares Projekterfassungs-Tool für uns zu programmieren. Die ersten Schritte dorthin hätte ich gerne im Rahmen der OXID Commons 2010 mit euch im Rahmen eines Workshops nachvollzogen. Nun versuche ich, das Ganze hier lesbar aufzubereiten. Der Beitrag insgesamt verfolgt damit folgende [...]]]></description>
			<content:encoded><![CDATA[<p>Die Entscheidung war nun also gefallen: Ich wollte versuchen, auf Basis einer OXID CE ein brauchbares Projekterfassungs-Tool für uns zu programmieren. Die ersten Schritte dorthin hätte ich gerne im Rahmen der OXID Commons 2010 mit euch im Rahmen eines Workshops nachvollzogen. Nun versuche ich, das Ganze hier lesbar aufzubereiten.</p>
<div id="attachment_196" class="wp-caption aligncenter" style="width: 368px"><a href="http://www.urbans-blog.de/wp-content/anz_uploads/2010/05/oxid4project_screen_01_login.png"><img class="size-full wp-image-196" title="oxid4project Login Screen" src="http://www.urbans-blog.de/wp-content/anz_uploads/2010/05/oxid4project_screen_01_login.png" alt="oxid4project Login Screen" width="358" height="287" /></a><p class="wp-caption-text">oxid4project Login Screen</p></div>
<p>Der Beitrag insgesamt verfolgt damit folgende Ziele:</p>
<ol>
<li>einen generellen Einblick in das OXID Framework (OF) geben</li>
<li>zeigen, dass man damit nicht nur Onlineshops programmieren kann</li>
<li>hilfreiche Tipps geben für den Umgang mit dem OF, die auch im Rahmen von Shops sehr nützlich sind. <img src='http://www.urbans-blog.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
</ol>
<div>&nbsp;</div>
<p><strong>Am Anfang steht das Konzept: Welche Grundelemente werden benötigt?</strong></p>
<p>Es macht so gut wie nie Sinn, einfach drauf los zu coden &#8211; vor allem dann nicht, wenn man ein vorhandenes Framework nutzen will. Um herauszufinden, welche Teile des Frameworks sich am sinnvollsten für die eigene Applikation nutzen lassen, sollte man zunächst die benötigten Grundelemente definieren. Diese Definition soll dabei so erfolgen, dass jedes der genannten Grundelemente sich nach Möglichkeit bereits als Objekt denken lässt. Oder anders gesagt: Wir suchen nach klar abgrenzbaren Sach- und Funktionsbereichen in unserer geplanten Anwendung, die sinnvoll im Rahmen einzelner Klassen gekapselt werden können.</p>
<p>Für unsere Projekterfassung benötigen wir folgende Bereiche / Elemente:</p>
<ul>
<li>Projekte: Projekt anlegen, löschen, editieren, auflisten &#8230;</li>
<li>Mitarbeiter: anlegen, löschen, editieren, Login &#8230; =&gt; OXID Userverwaltung</li>
<li>Erfassung von Arbeitseinheiten: Zeit- und Texterfassung, Bearbeitung von Einträgen, Löschen &#8230;</li>
<li>Auswertungen: nur für Admin sicht- und nutzbar, über Frontend erreichbar (also nicht im Shop-Admin)</li>
</ul>
<p>Aus dieser Definition ergibt sich ein Konzept für die benötigten Views und Templates sowie für sinnvolle Core-Objekte. Fangen wir pragmatisch mit den Views und Templates an:</p>
<div>&nbsp;</div>
<p><strong>Konzeption der Views und Templates</strong></p>
<p>Die gesamte Anwendung soll im Endeffekt ja auf einem Webserver im Netz laufen, damit jeder Mitarbeiter das Tool nutzen kann, wo immer er sich auch gerade befindet. Also brauchen wir zunächst einmal einen Login-Bereich. Wie oben schon angedeutet, können wir hier komplett die OXID Standardfunktionalität der Benutzerverwaltung nutzen.<br />
Als nächstes brauchen wir eine Zeit- und Texterfassungsmaske, in der die Mitarbeiter ein Projekt auswählen und eintragen können, wie lange sie daran gearbeitet haben und was genau sie in dieser Zeit gemacht haben.<br />
Für die eigentliche Datenerfassung ist das schon alles. Allerdings will ich als Admin ja auch ein paar Auswertungsmöglichkeiten haben. Also fehlen noch folgende Views / Templates:</p>
<ul>
<li>Listenseite(n) für Auswertungen (z. B.: alle noch nicht abgerechneten Projekte im Monat &#8220;X&#8221; etc.)</li>
<li>Detailseite für Auswertungen (z. B.: alle noch nicht abgerechneten Arbeitseinheiten von Projekt &#8220;Y&#8221; im Monat &#8220;X&#8221; etc.)</li>
<li>Detailseite für Bearbeitung von Einzeleinträgen, z. B. wegen Korrekturen, Abzug von nicht abrechenbaren Zeiten etc.</li>
</ul>
<div>&nbsp;</div>
<p><strong>Let&#8217;s code! &#8211; Login-Seite</strong></p>
<p>Die Login-Seite ist im Grunde der einfachste Teil der gesamten Übung, weil wir hier zu nahezu 100% auf OXID Standardfunktionalität zurückgreifen können. Dennoch kann man bereits hier den ein oder anderen hilfreichen Tipp für den generellen Umgang mit dem OXID Framework unterbringen. Daher das Ganze nun etwas ausführlicher:</p>
<p>Wir brauchen eine View-Klasse und ein zugehöriges Template. Die View-Klasse gestaltet sich dabei ausgesprochen simpel:<br />
<pre><code>
class azprojectsLogin extends oxUbase
{
&nbsp;&nbsp;/**
&nbsp;&nbsp; * name of template file
&nbsp;&nbsp; * @var str
&nbsp;&nbsp; */
&nbsp;&nbsp;protected $_sThisTemplate = &quot;azprojectslogin.tpl&quot;;

&nbsp;&nbsp;/**
&nbsp;&nbsp; * calls parent (oxUbase) render and returns name of tpl file
&nbsp;&nbsp; * @return str $this-&gt;_sThisTemplate
&nbsp;&nbsp; *
&nbsp;&nbsp; */
&nbsp;&nbsp;public function render() {
&nbsp;&nbsp;&nbsp;&nbsp;parent::render();

&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;_sThisTemplate;
&nbsp;&nbsp;}
}
</code></pre></p>
<p>Jede View-Klasse im OF ist Extension der Klasse oxUbase. Wir verwenden diese Vererbung, um gewisse Grundmechanismen im OF automatisch mitnutzen zu können. Dabei ist zu beachten, dass eine View-Klasse dann auch immer eine public function render() besitzen muss, die a.) die parent::render() aufruft und b.) als return-Wert den Namen der Template-Datei zurückliefert.<br />
Damit sind die Mindestanforderungen für eine eigene View-Klasse bereits erfüllt. Gesagt sei noch, dass der Dateiname der Klasse sinnvollerweise mit dem Klassennamen identisch sein &#8211; allerdings komplett in Kleinbuchstaben gehalten sein sollte. So vermeidet man Probleme beim Switch zwischen verschiedenen Betriebssystemen (z. B. Windows / Mac / BSD / Linux etc.).</p>
<p>Als nächstes machen wir uns nun an das Template heran. Dieses sollte am Ende in etwa so aussehen wie der Screenshot am Anfang dieses Beitrags (<a title="oxid4project Login Screen" href="http://www.urbans-blog.de/wp-content/anz_uploads/2010/05/oxid4project_screen_01_login.png" target="_blank">oxid4project Login-Screen</a>).</p>
<p>Hier kommt es natürlich nicht auf das konkrete Layout an &#8211; das möge sich jeder so gestalten, wie es ihm gefällt. Ich möchte  lediglich auf ein paar <strong>Grundzüge bei der Templategestaltung</strong> hinweisen.</p>
<p>Im OXID eShop besteht nahezu jede im Frontend sichtbare Seite aus mind. 6 Einzeltemplates, die in Form von includes eingebunden werden:</p>
<ol>
<li><em>something.tpl</em> &#8211; Die Template-Datei, die von der aktuell aufgerufenen View-Klasse als return-Wert der render() function zurückgeliefert wird. Name ist natürlich für jede Seite anders. Hier erscheint der eigentliche Content der jeweiligen Seite.</li>
<li><em>_header.tpl</em> &#8211; Der Kopfbereich der Seite; wird innerhalb von <em>something.tpl</em> inkludiert.</li>
<li><em>_footer.tpl</em> &#8211; Der Fußbereich der Seite; wird innerhalb von <em>something.tpl</em> inkludiert.</li>
<li><em>_path.tpl</em> &#8211; Anzeige der Breadcrumb-Navigation.</li>
<li><em>_left.tpl</em> &#8211; Navigationsbereich auf der linken Seite; wird innerhalb von <em>_header.tpl</em> inkludiert.</li>
<li><em>_right.tpl</em> &#8211; Bereich für Aktionsboxen auf der rechten Seite; wird innerhalb von <em>_header.tpl</em> inkludiert.</li>
</ol>
<p>Den größten Teil der Inhalte dieser OXID-Standardtemplatedateien benötigen wir für unser Projekt nicht. Also bauen wir uns stark vereinfachte eigene include-Dateien. Die generelle Nutzung des Grundschemas mit includes macht Sinn, da wir für unser kleines Tool ja auch eine ansprechende Optik wünschen und sich im Kopfbereich z. B. gut einige administrative Navigationspunkte unterbringen lassen, die damit dann automatisch auf jeder Seite sichtbar sind.</p>
<p>Einen speziellen Bereich auf der linken oder rechten Seite brauchen wir nicht, weshalb die entsprechenden includes komplett entfallen können. Dasselbe gilt für die Breadcrumb Navigation, die im Shop vor allem den Kategoriepfad nachbildet, den wir in unserer Anwendung überhaupt nicht benutzen.</p>
<p>Wie die Templates im einzelnen aussehen, kann sich jeder anhand der Beispieldateien selbst ansehen. <em>(In Kürze möchte ich das Ganze als Projekt auf  OXIDforge anlegen. Leider kann ich dort zur Zeit keinen Account erstellen &#8230; daher gibt&#8217;s die Dateien zunächst mal als Download hier im Blog. -&gt; siehe Ende des Beitrags)</em></p>
<p>Hier sei nur erwähnt, dass ich mich für die aktuelle Anwendung entschieden habe, zwei eigene include-Dateien <em>azprojectsheader.tpl </em>und <em>azprojectsfooter.tpl</em> zu erstellen. In beiden Dateien ist nur das Nötigste enthalten. Auf ein paar Dinge möchte ich aber hinweisen:</p>
<p><span style="text-decoration: underline;">dynamischer Seitentitel<br />
</span>Im Grunde soll jeder selbst entscheiden ob und welchen Seitentitel er für dieses Tool benutzen möchte. Ich habe mich daher dafür entschieden, den Shopnamen hier als dynamischen Wert einzusetzen, da dieser über den Shop-Adminbereich leicht änderbar ist. Die Einbindung sieht aus wie folgt:<br />
<pre><code>
Projekterfassung - [{$oxcmp_shop-&gt;oxshops__oxname-&gt;value}]
</code></pre><br />
Das Objekt <em>$oxcmp_shop</em> ist dabei ein sog. <em>Komponenten-Objekt</em>. Die <em>Komponenten</em> sind besondere View-Klassen im OF, die in Form des Decorator Patterns bei jeder View-Klassen Instanziierung mitinstanziiert werden. Somit stehen Komponentenobjekte shop- bzw. applikationsübergreifend überall zur Verfügung. Das ist sehr nützlich und ich kann nur empfehlen, sich mit den OF Komponenten ein wenig genauer zu beschäftigen. Die entsprechenden Klassendateien finden sich alle im Verzeichnis <em>views</em> und die Dateinamen beginnen alle mit <em>oxcmp_&#8230;<br />
</em>Es ist sogar relativ einfach möglich, beliebig viele eigene Komponenten in das OF einzubinden. Es würde den Rahmen dieses Beitrages sprengen, dies hier im Detail zu erläutern. Den erfahrenen OXID&#8217;lern sei ein Blick View-Klasse <em>oxUbase</em> empfohlen. Dort findet ihr unter den protected properties u. a. auch das Array namens <em>$_aComponentNames</em>. Direkt darunter findet sich ein leeres Array namens <em>$_aUserComponentNames</em> &#8211; hier können eigene Komponenten eingehängt werden &#8211; eine der vielfältigen Erweiterungsmöglichkeiten, die das OF von Haus aus anbietet.</p>
<p><span style="text-decoration: underline;">Einbindung von Bildern<br />
</span>Bilder, die im Rahmen des Layouts benötigt werden, liegen im OF immer im Verzeichnis <em>/out/basic/img.</em> Dieser Pfad ist innerhalb der Templates abrufbar mittels der Methode <em>$oViewConf->getImageUrl()</em>. Es empfiehlt sich, diese Systematik beizubehalten, weil so auch später das Verlagern der Grafiken in einen anderen Pfad oder auf einen anderen Server sehr einfach zu realisieren ist, ohne gleich alle Templates ändern zu müssen.</p>
<p><span style="text-decoration: underline;">HomeLink<br />
</span>Auf dem Logo oben links liegt &#8211; wie gemeinhin üblich &#8211; der Link zur Startseite unserer Anwendung. Im OF gibt es auch dafür eine eigene Methode, die innerhalb der Templates genutzt werden kann: <em>$oViewConf->getHomeLink()</em>.</p>
<p><span style="text-decoration: underline;">Sonstige Links<br />
</span>In der Templatedatei <em>azprojectsheader.tpl</em> finden sich einige Navigationslinks, die weitere (eigene) View-Klassen aufrufen sollen. Dies erfolgt innerhalb des OF generell via:<br />
<pre><code>
&lt;a href=&quot;[{ $oViewConf-&gt;getSelfLink() }]cl=myclassname&quot;&gt;Linktext&lt;/a&gt;
</code></pre><br />
wobei <em>myclassname</em> der Name der aufzurufenden View-Klasse ist.</p>
<p><span style="text-decoration: underline;">Navigation nur für eingloggte User anzeigen</span></p>
<p>Die Navigation im Kopfbereich (Erfassung, Auswertung, Logout) sollte natürlich nur für eingeloggte User zu sehen sein. Dies erreichen wir sehr einfach über die folgende Abfrage im Template <em>/out/basic/tpl/azprojectsheader.tpl</em>:<br />
<pre><code>
[{ if $oxcmp_user-&gt;oxuser__oxpassword-&gt;value }]
...
[{ /if }]
</code></pre></p>
<div>&nbsp;</div>
<p><strong>Login-Funktionalität</strong></p>
<p>Für die eigentliche Login-Funktionalität nutzen wir zu 100% OXID-Bordmittel. Das Login / Logout-Formular können wir komplett aus dem include-Template <em>/out/basic/tpl/inc/cmp_login.tpl</em> übernehmen. Der Klassenparameter, der in diesem Formular als hidden field &#8220;cl&#8221; übergeben wird, wird hier dynamisch mit der aktuell aufgerufenen View-Klasse gefüllt. Außerdem finden wir in dem Formular noch ein hidden field mit <em>name=&#8221;fnc&#8221;</em> &#8211; dieses dient dazu, eine spezielle Methode auf der View-Klasse auszuführen. Der Name dieser Methode ist &#8211; je nach Zustand &#8211; <em>login_noredirect</em> oder <em>logout</em>.</p>
<p>In unserer View-Klasse <em>azprojectslogin </em>gibt es aber weder die eine noch die andere Methode. Das macht aber nichts &#8211; denn beide Methoden gehören zum Komponentenobjekt <em>oxcmp_user</em> und &#8211; wie oben schon erwähnt &#8211; stehen die Komponentenobjekte überall zur Verfügung. Und deshalb können wir auch die Methoden dieser Objekte an beliebiger Stelle aufrufen.</p>
<div>&nbsp;</div>
<p><strong>Umleitung der Startseite</strong><br />
Eine Kleinigkeit fehlt noch: Bisher bekommen wir noch immer die Startseite des Shops zu sehen, wenn wir unsere Anwendung ohne weitere Parameter aufrufen. Um das zu ändern legen wir ein kleines Modul der View-Klasse <em>start</em> an. Dazu erstellen wir eine Moduldatei mit dem Namen <em>azstart.php </em>mit folgendem Inhalt:<br />
<pre><code>
class azStart extends azStart_parent
{
&nbsp;&nbsp;public function init()
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header(&quot;location: index.php?cl=azprojectsstart&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;}

}
</code></pre><br />
Diese Datei speichern wir nun unter: <em>/modules/azstart/azstart.php</em>. Anschließend rufen wir den Shop-Adminbereich auf (http://[Shopadresse]/admin/). Hier muss da Modul nun noch registriert werden: <em>Admin &#8211;&gt; Stammdaten &#8211;&gt; Grundeinstellungen &#8211;&gt; System &#8211;&gt; Module</em>. Dort bitte folgenden Eintrag tätigen:<br />
<em>start =&gt; azstart/azstart</em><br />
und speichern. Nun wird jeder Aufruf der Shopstartseite auf die View-Klasse <em>azprojectsstart</em> umgeleitet. Diese existiert aber noch nicht und wird auch erst im dritten Teil dieses Workshops erläutert werden. Sie liegt aber dem Downloadpaket bereits &#8211; in abgespeckter Form &#8211; bei. Dort könnt ihr sehen, dass es auch in dieser Klasse innerhalb der Methode <em>init()</em> eine header-Weiterleitung auf die Login-Klasse gibt für den Fall, dass der User noch nicht eingeloggt ist.<br />
Die Methode <em>init()</em> wird &#8211; nach einem evtl. vorhandenen constructor &#8211; immer als erste in einer View-Klasse ausgeführt.</p>
<div>&nbsp;</div>
<p><strong>Die Grundlage ist geschaffen</strong></p>
<p>Bis hierher haben wir nun also die Grundlage für das geplante Tool geschaffen. Es fehlt noch die eigentliche Funktionalität &#8211; die ich in Teil 3 dieses Workshops präsentieren möchte. Aber ich denke, man konnte bis hier her bereits eine Ahnung dafür entwickeln, dass das OF viele Möglichkeiten für eigene Entwicklungen bietet. Diesem Beitrag hängt nun auch der erste Teil des Quellcodes des Projektes an, so dass die oben beschriebenen Punkte direkt nachvollzogen werden können.</p>
<p>Mit dem dritten Teil werde ich dann den kompletten Quellcode des Projektes liefern &#8211; vielleicht dann ja schon als OXIDforge-Projekt. Hier schon einmal ein Vorab-Happen: <a href="http://www.urbans-blog.de/wp-content/anz_uploads/2010/05/oxid4project_source_part_1.zip">oxid4project_source_part_1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.urbans-blog.de/2010/05/08/oxid4all-%e2%80%93-es-muss-ja-nicht-immer-ein-shop-sein-%e2%80%a6-%e2%80%93-teil-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OXID4ALL &#8211; Es muss ja nicht immer ein Shop sein &#8230; &#8211; Teil 1</title>
		<link>http://www.urbans-blog.de/2010/05/07/oxid4all-es-muss-ja-nicht-immer-ein-shop-sein-teil-1/</link>
		<comments>http://www.urbans-blog.de/2010/05/07/oxid4all-es-muss-ja-nicht-immer-ein-shop-sein-teil-1/#comments</comments>
		<pubDate>Fri, 07 May 2010 17:25:07 +0000</pubDate>
		<dc:creator>urban</dc:creator>
				<category><![CDATA[OXID eShop]]></category>

		<guid isPermaLink="false">http://www.urbans-blog.de/?p=167</guid>
		<description><![CDATA[Eigentlich hätte ich gestern im Rahmen der OXID Commons einen Workshop halten sollen. Ich hatte mich schon sehr darauf gefreut, aber bereits am Dienstagabend zeichnete sich ab, dass irgendein grippaler Infekt drauf und dran war, die Oberhand über meinen Körper zu gewinnen. Also sah ich mich gezwungen, meine Teilnahme an den Commons schweren Herzens abzusagen. [...]]]></description>
			<content:encoded><![CDATA[<p>Eigentlich hätte ich gestern im Rahmen der <a title="OXID Commons 2010" href="http://www.oxid-esales.com/de/news/oxid-commons-2010" target="_blank">OXID Commons</a> einen Workshop halten sollen. Ich hatte mich schon sehr darauf gefreut, aber bereits am Dienstagabend zeichnete sich ab, dass irgendein grippaler Infekt drauf und dran war, die Oberhand über meinen Körper zu gewinnen. Also sah ich mich gezwungen, meine Teilnahme an den Commons schweren Herzens abzusagen.</p>
<p>Da ich die letzten 3 Tage zeitweise fiebernd überwiegend im Bett verbracht habe, war diese Entscheidung aber rückblickend wohl die richtige. Ich hätte den Donnerstag vermutlich nicht durchgestanden.</p>
<p>Ich bedanke mich auf diesem Wege für die vielen Genesungswünsche, die mich in den letzten Tagen speziell aus den Reihen der Commons erreicht haben. Mehrfach schrieb man mir: &#8220;Schade &#8211; ich hatte mich so auf deinen Workshop gefreut &#8230;&#8221;<br />
Den Workshop an sich kann ich nun nicht wirklich nachliefern &#8211; aber ich möchte hier nun zumindest grob erläutern, worum es in dem Workshop gegangen wäre. Am Ende des letzten Teiles werde ich auch den entsprechenden Quellcode zur Verfügung stellen.</p>
<div id="attachment_168" class="wp-caption alignright" style="width: 310px"><a href="http://www.urbans-blog.de/wp-content/anz_uploads/2010/05/oxid-werkzeugkasten.jpg"><img class="size-medium wp-image-168" title="OXID eShop als Werkzeugkasten für eigene Anwendungen" src="http://www.urbans-blog.de/wp-content/anz_uploads/2010/05/oxid-werkzeugkasten-300x207.jpg" alt="OXID eShop als Werkzeugkasten für eigene Anwendungen" width="300" height="207" /></a><p class="wp-caption-text">OXID eShop als Werkzeugkasten für eigene Anwendungen</p></div>
<p><strong>OXID4ALL &#8211; Es muss ja nicht immer ein Shop sein &#8230;</strong></p>
<p><em>Das OXID eShop Framework als Werzkeugkasten für eigene Anwendungen</em></p>
<p>Hauptziel des Workshops sollte sein, einmal an einem praktischen Beispiel zu zeigen, vie vielseitig man das OXID eShop Framework einsetzen kann &#8211; und dass es dabei eben nicht immer nur um Shop-Projekte gehen muss. &#8220;OXID4ALL&#8221; ist daher nicht nur gemeint im Sinne von: &#8220;OXID für alle!&#8221; &#8211; sondern eben auch im Sinne von: &#8220;OXID für alles?&#8221; &#8211; Das Fragezeichen ist hier bewusst gewählt, weil man die Art und Weise wie das OXID-Framework im folgenden Beispiel verwendet wird, sicher auch kritisch betrachten kann. Trotzdem denke ich, kann man auf diese Weise recht gut demonstrieren, wie viel Potential in diesem Framework steckt.</p>
<p><strong>Wie alles begann: Auf der Suche nach einer einfachen Projekterfassungssoftware</strong></p>
<p>Vor etwa 1 1/2 Jahren war ich auf der Suche nach einer Software, mit der unsere Entwickler schnell und einfach erfassen konnten, was sie an welchem Projekt gerade gearbeitet hatten. Die Software sollte preiswert sein, leicht zu handhaben, netzwerkfähig und nach eigenen Bedürfnissen anpassbar. Folgende Anforderungen stellte ich anfangs an die gesuchte Software:</p>
<ul>
<li>Login für Mitarbeiter</li>
<li>Eintragen von Projekten mit jeweiligem Stundensatz</li>
<li>Erfassung der Zeiten: <strong>wann</strong> wurde <strong>von wem wie lange</strong> an <strong>welchem Projekt was </strong>gearbeitet?</li>
<li>Vereinfachung der monatlichen Rechnungsstellung</li>
<li>Platz für interne Anmerkungen</li>
<li>Möglichkeit von diversen Auswertungen</li>
</ul>
<p>Nach einigen Tagen des Suchens und Ausprobierens stellte ich ernüchtert fest, dass alle Lösungen, die ich gefunden hatte</p>
<p>- zu komplex und/oder<br />
- zu teuer und/oder<br />
- zu unflexibel und nur schwierig oder gar nicht anpassbar und/oder<br />
- zu unhandlich</p>
<p>waren. Da ich aber schnell eine Lösung benötigte und nicht länger weitersuchen wollte, bot sich als einzige Alternative: seber machen!</p>
<p><strong>Ein Framework muss her!</strong></p>
<p>Wenn man &#8220;mal eben schnell&#8221; eine kleine Applikation schreiben will, greift der PHP-Entwickler ja gemeinhin zum &#8220;Framework&#8221;. Da ich mich bis zu diesem Zeitpunkt noch nie so richtig intensiv mit dem ZEND-Framework (ZF) beschäftigt hatte, witterte ich die Chance, hier gleich 2 Fliegen mit einer Klappe zu erschlagen und dachte mir: Prima &#8211; nutze ich diesen Anlass, um mich da mal einzuarbeiten.</p>
<p>Nach rund zwei Tagen Kampf mit dem ZF musste ich allerdings feststellen: Wir zwei werden keine Freunde. <img src='http://www.urbans-blog.de/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
Vielleicht fehlte mir einfach die Zeit und die Ruhe, vielleicht auch die richtige Anleitung &#8230; &#8211; vielleicht bin ich auch einfach irgendwie inkompatibel mit dem ZF &#8211; jedenfalls erschien mir das alles extrem umständlich und langwierig. Und ich wollte ja schnell zum Ziel kommen.<br />
Um ehrlich zu sein: ich habe in diesen 2 Tagen das ZF hassen gelernt. Das spricht nun nicht zwangsläufig gegen das ZF &#8211; vielleicht spricht es eher gegen mich. Jedenfalls scheint mir das ZF nichts für Ungeduldige zu sein, die gerne schnell ein Ergebnis sehen möchten.</p>
<p>Nachdem ich das Thema &#8220;Zend Framework&#8221; für mich zunächst abgehakt hatte, blieb nur noch der Weg, etwas komplett Eigenes zu versuchen. Ich hatte schon früher einmal ein eigenes kleines PHP-Framework erstellt, warum nicht das nutzen, ein bißchen Refactoring betreiben und es weiter ausbauen?<br />
Als ich dann damit begann stellte ich irgendwann plötzlich fest: Das sieht verdammt noch mal sehr nach OXID aus &#8230;</p>
<p>Und genau <strong>da </strong>machte es &#8220;Klick&#8221; und ich fragte mich: Warum also nicht gleich OXID nehmen?!<br />
Der OXID eShop bringt ja schon vieles mit, was ich mir für meine Projekterfassung wünschte:</p>
<ul>
<li>User-Login</li>
<li>Session-Verwaltung</li>
<li>Rechte-System (Admin / normaler User)</li>
<li>und vieles mehr &#8230;</li>
</ul>
<p>Ganz entscheidend war natürlich die Tatsache: Mit OXID kenne ich mich aus &#8211; damit kennen sich unsere Entwickler aus! Ein Ausbau und die Anpassung einer Anwendung auf OXID-Basis sollte für uns also ein Kinderspiel sein.</p>
<p><strong>OXID statt Zend Framework??</strong></p>
<p>Moooment! Kann das denn angehen? Eine Anwendung, die gar nichts mit einem Shop zu tun hat, soll auf Basis einer Shop-Software programmiert werden? Schließlich wird ja seit einiger Zeit werbewirksam (und konkurrenzorientiert) diskutiert, ob man den OXID eShop nicht stärker an das Zend Framework anbinden solle. Und nun kommt der Ziethen daher und will eine Anwendung statt auf dem ZF auf dem OXID Framework aufsetzen? &#8211; Heißt das nicht den Bock zum Gärtner machen?</p>
<p>Wie schon oben angedeutet: Das Ganze hier soll ein Anstoss sein &#8211; zum Nachdenken, zum Ausprobieren und zur eigenen Kreativität. Ich behaupte nicht, dass man nun sinnvollerweise alle möglichen Anwendungen auf OXID aufbauen könnte &#8211; aber ich möchte aufzeigen, was dieses Framework alles kann und von Haus aus mitbringt:</p>
<ul>
<li>MVC Architektur</li>
<li>vollständige Objektorientierung</li>
<li>gute Kapselung und Atomisierung der einzelnen Funktionen</li>
<li>Exception-Handling</li>
<li>Modul-Schnittstelle</li>
<li>Komponenten-Modell</li>
<li>Template-Engine</li>
<li>Datenbankabstratktionslayer</li>
<li>Benutzerverwaltung</li>
<li>Session-Handling</li>
<li>Config-Objekt</li>
<li>Mehrsprachitkeit</li>
<li>zahlreiche Utilities</li>
<li>uvm.</li>
</ul>
<p>Wenn man genau hinschaut, dann kann man im OXID-Framework einen sehr vielfältigen Werkzeugkasten sehen, der einem eine solide Basis für eigene Anwendungen bietet. Und wie das konkret aussehen kann, das werde ich im zweiten Teil dieses Beitrages an dem schon erwähnten Beispiel einer Projekterfassungssoftware demonstrieren.<br />
Ich werde versuchen, den zweiten Teil noch an diesem Wochenende fertigzustellen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.urbans-blog.de/2010/05/07/oxid4all-es-muss-ja-nicht-immer-ein-shop-sein-teil-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Auf den Hund gekommen &#8230; &#8211; Outlook war gestern, die Zukunft heißt: GREYHOUND!</title>
		<link>http://www.urbans-blog.de/2010/03/02/auf-den-hund-gekommen-outlook-war-gestern-die-zukunft-heisst-greyhound/</link>
		<comments>http://www.urbans-blog.de/2010/03/02/auf-den-hund-gekommen-outlook-war-gestern-die-zukunft-heisst-greyhound/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 21:54:53 +0000</pubDate>
		<dc:creator>urban</dc:creator>
				<category><![CDATA[computer kram]]></category>
		<category><![CDATA[Aufgaben]]></category>
		<category><![CDATA[digitalguru]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[GREYHOUND]]></category>
		<category><![CDATA[Groupware]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[Termine]]></category>

		<guid isPermaLink="false">http://www.urbans-blog.de/?p=155</guid>
		<description><![CDATA[Morgen soll er offiziell released werden &#8211; wir setzen bereits seit Oktober 09 die gut funktionierende Beta-Version ein: Es geht um den GREYHOUND, die brandneue Wunderwaffe aus der Softwareschmiede digitalguru. Der GREYHOUND tritt an, um z. B. Outlook und andere Groupware-Produkte nicht nur abzulösen sondern weit hinter sich zu lassen. Papierloses Büro, Mail-Client mit umfassenden [...]]]></description>
			<content:encoded><![CDATA[<p>Morgen soll er offiziell released werden &#8211; wir setzen bereits seit Oktober 09 die gut funktionierende Beta-Version ein: Es geht um den <a href="http://greyhound-software.com/produkt/" target="_blank">GREYHOUND</a>, die brandneue Wunderwaffe aus der Softwareschmiede <a href="http://feedbackmanager.de/company" target="_blank">digitalguru</a>.</p>
<p><a title="GREYHOUND Software" href="http://greyhound-software.com" target="_blank"><img class="size-full wp-image-157  alignleft" style="margin: 6px;" src="http://www.urbans-blog.de/wp-content/anz_uploads/2010/03/bg_header.png" alt="GREYHOUND Software" width="178" height="89" /></a></p>
<p>Der GREYHOUND tritt an, um z. B. Outlook und andere Groupware-Produkte nicht nur abzulösen sondern weit hinter sich zu lassen. Papierloses Büro, Mail-Client mit umfassenden Teamfunktionen, Textverabeitung, Faxprogramm, Dokumentenmanagement, Terminplanung, Aufgabenverwaltung, Softphone, Notzisammlung und und und &#8230;. Es ist unmöglich, die Funktionsvielfalt dieses Meisterstücks auch nur ansatzweise in einem einzigen Blogbeitrag vorzustellen. Ich kann aber jedem, der nach einer effizienten Teamsoftware sucht, nur empfehlen, sich den GREYHOUND mal eine Weile genauer anzuschauen.</p>
<p>Wir nutzen wie gesagt seit Oktober letzten Jahres die Betaversion und haben uns inzwischen so an den Hund gewöhnt, dass wir dieses treue Haustier nicht mehr missen möchten. Ich will mal mit ein paar Beispielen versuchen, zumindest den Hauch einer Ahnung zu vermitteln, was der Hund so zu bieten hat:</p>
<p><strong>Universale Elemente</strong><br />
Der GREYHOUND kümmert sich um Emails, Briefe, Faxe, Notizen, Aufgaben, Termine, Telefonanrufe, Telefonnotizen, Dokumente und Kontakte. Das ist eine ganze Menge. Aber das Besondere daran: hinter den Kulissen ist jeder Eintrag &#8211; egal ob Brief, ob Fax, ob Email, Aufgabe, Termin oder sontwas &#8211; einfach nur ein &#8220;Element&#8221;. Und alle diese Elemente sind vom Prinzip her gleich. Sie haben unterschiedliche Eigenschaften, aber das Grundmuster ist immer dasselbe. Der Vorteil: Alles kann in alles verwandelt werden. So kann man z. B. eine Email mit einem Mausklick als Aufgabe oder auch Termin duplizieren. Man kann auf eine Email auch per Fax oder Brief antworten. Klingt banal &#8211; ist in der Praxis aber genial.</p>
<p><strong>Anmerkungen und Historien</strong><br />
Wenn man in leitender Funktion hin und wieder auch mal mit verärgerten Kunden zu tun hat, ist das Anmerkungsfeature von unschätzbarem Wert &#8211; vor allem in Verbindung mit der Historie. Wenn ich selbst keine Ahnung habe, was bei dem betreffenden Projekt zuletzt überhaupt Sache war, dann reicht ein Klick auf die Kundenhistorie und schon habe ich alle Vorgänge, die mit dem betroffenen Kunden zu tun haben, auf dem Schirm. Egal ob Telefonanrufe, Emails, Faxe &#8211; alles ist sofort einsehbar. Wenn nun die Mitarbeiter auch fleißig von der Kommentarfunktion Gebrauch gemacht haben, dann lese ich da z. B. zu einer Kundenmail: &#8220;Kunde wurde telefonisch darauf hingewiesen, dass die von ihm installierte Forensoftware veraltet ist und ein Sicherheitsrisiko bedeutet. Kunde hielt dieses Risiko für tragbar.&#8221;<br />
Wenn mich nun der Kunde anruft, und mir erbost mitteilt, dass sein Server gehackt wurde, dann kann ich entsprechend reagieren und ihm mitteilen, dass das bedauerlich ist, dass er aber früh genug gewarnt wurde.<br />
Bei uns hat mittlerweile jede zweite Mail solche Anmerkungen. Sie machen bestimmte Vorgänge besser nachvollziehbar und ermöglichen es jedem Teammitglied, schnell zu erfassen, was aktuell angesagt ist &#8211; auch wenn man selbst mit dem Vorgang bisher nicht befasst war.</p>
<p><strong>Benutzerdefinierte Felder</strong><br />
Jedem Element lassen sich beliebig viele benutzerdefinierte Felder zuweisen. So kann man z. B. dem Element &#8220;Email&#8221; ein Feld &#8220;Aufwand&#8221; zuweisen. Support-Mitarbeiter können dann dort unmittelbar eintragen, wie lange die Bearbeitung des Problems gedauert hat. Solche Felder lassen sich problemlos über Regeln auswerten und über Filter als CSV-Datei exportieren. Einem Import in eine Warenwirtschaft, ein ERP-System oder sonstige Systeme steht somit nichts im Wege.</p>
<p>Ich will das mal an einem kleinen Beispiel deutlicher machen:<br />
Wer selbständig und viel unterwegs ist, der kennt das Problem, am Monatsende eine Aufstellung anlegen zu müssen, in der die &#8220;Zeiten der Abwesenheit&#8221; aufgeführt sind für Buchhaltung und Steuer. Je nach Dauer der Abwesenheit können diverse Erstattungssätze geltend gemacht werden. Da sitzt man dann, durchforstet seinen Kalender und tippert mühsam in eine Excelliste: Datum von &#8211; Uhrzeit von &#8211; Datum bis &#8211; Uhrzeit bis &#8211; Ort &#8211; Zweck der Reise, ggf. Adresse des Kunden etc.  Und man muss vor allem bei jedem Termin ausrechnen, wie viele Stunden man abwesend war.<br />
Ich habe nun im GREYHOUND folgendes gemacht: Meine Termine, die diesbezüglich relevant sind, erhalten eine spezielle Kennzeichnung. Dann habe ich einen Filter angelegt, der mir alle Termine mit dieser Kennzeichnung als Liste anzeigt. Für die Termine habe ich außerdem ein benutzerdefiniertes Feld &#8220;Dauer&#8221; angelegt. Dann habe ich noch eine Regel definiert, die aus den Feldern &#8220;Datum von&#8221; und &#8220;Datum bis&#8221; die Dauer als Float-Wert mit 2 Kommastellen ermittelt (die Uhrzeit ist bei diesen Feldern inbegriffen). Außerdem habe ich einen Export definiert, der sich auf den genannten Filter bezieht und mir die Terminliste mit Datum von, Datum bis, Ort, Zweck, Projektname und Dauer exportiert.<br />
Am Monatsende brauche ich nun nur noch diesen Export auszuführen &#8211; und schon habe ich meine gewünschte Liste.</p>
<p><strong>Faxe bearbeiten und beantworten</strong><br />
Ich hatte mir ein Angebot für neue Rechner für&#8217;s Büro schicken lassen. Das Angebot kam als Email mit PDF-Anhang. Der Lieferant schrieb dazu: &#8220;Wenn Ihnen das Angebot zusagt, faxen Sie es mir bitte unterschrieben und gestempelt zurück.&#8221; &#8211; Früher hätte das bedeutet:<br />
1. Emailanhang öffnen.<br />
2. PDF ausdrucken.<br />
3. Ausdruck stempeln und unterschreiben.<br />
4. Ausdruck auf&#8217;s Fax legen und zurückschicken.</p>
<p>Heute sieht das so aus:<br />
1. PDF öffnen und mittels <a href="http://www.gotomaxx.com/landing/pdfmailer_client.php" target="_blank">gotomaxx PDF-Mailer</a> and den GREYHOUND Briefeingang schicken.<br />
2. Dokument im GH-Briefeingang öffnen und als Telefax beantworten.<br />
3. Die Antwort bearbeiten und eingescannten Stempel und Unterschrift einfügen.<br />
4.. Abschicken.</p>
<p>Der zweite beschriebene Weg benötigt einen Bruchteil der Zeit von Weg Nr. 1.</p>
<p><strong>Alle Dokumente überall dabei und durchsuchbar</strong><br />
Seit 2 Wochen habe ich begonnen, alle möglichen Belege, Verträge uns sonstigen Schriftverkehr zu scannen und in den GREYHOUND zu schieben. Das geht super-einfach mittels des miteglieferten &#8220;Transporters&#8221;. Der Transporter überwacht eines oder mehrere frei definierbare lokale Verzeichnisse und schickt alles, was er darin findet in regelmäßigen Abständen an eine frei wählbare Email-Adresse. Wenn das eine als Briefeingang definierte Adresse im GH ist, so kommen diese Dokumente dort an wie ein Fax. Der Clou dabei: alles wird sofort OCR-texterkannt und ist somit auch Volltext-durchsuchbar.<br />
Der Steuerberater will den Leasingvertrag für den Dienstwagen sehen? Kein Problem: Eine Suche nach &#8220;Opel Leasing&#8221; bringt in Sekundenbruchteilen den Leasing-Vertrag für den Dienstwagen auf den Schirm. Nun nur noch &#8220;weiterleiten als Fax&#8221;, die ersten Buchstaben des Namens des Steuerberaters eingetippt (die der GH automatisch vervollständigt) &#8211; abschicken &#8211; fertig.</p>
<p>Ich will&#8217;s für heute mal bei diesen Beispielen belassen. Vielleicht werde ich in der nächsten Zeit immer wieder mal kleine GREYHOUND-Bonbons hier präsentieren. Ich kann nur sagen: es macht nicht nur Spaß mit dieser Software (und mit der dahinterstehenden Firma) zu arbeiten &#8211; sondern es steigert auch enorm die Effektivität und bringt Ordnung in die oftmals so chaotische Büro-Kommunikation.<br />
Abschließend sei noch gesagt, dass der GREYHOUND eine serverbasierte Software ist. Der GH-Server kann entweder lokal im Büro laufen und dann via VPN auch von außen zugänglich gemacht werden &#8211; oder aber man entscheidet sich für ein externes Hosting. Bezahlt wird monatlich je nach gebuchter Anzahl von gleichzeitigen Nutzern. Es gibt aber auch eine Kaufvariante.<br />
Der Server ist über eine RPC-Schnittstelle von außen ansprechbar. Somit kann jede andere Software (Warenwirtschaft, Auftragssoftware, Projektmanagement, Onlineshop &#8230;) mit dem GH kommunizieren. Hier verbergen sich ungeahnte Möglichkeiten, die wir zur Zeit im Blick auf den Bereich Ecommerce ausloten und demnächst auch unseren Kunden zugänglich machen werden.</p>
<p>Ein starkes Stück haben die &#8220;digitalen gurus&#8221; da abgeliefert!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.urbans-blog.de/2010/03/02/auf-den-hund-gekommen-outlook-war-gestern-die-zukunft-heisst-greyhound/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>So kompetent ist unsere Kanzlerin</title>
		<link>http://www.urbans-blog.de/2009/10/25/so-kompetent-ist-unsere-kanzlerin/</link>
		<comments>http://www.urbans-blog.de/2009/10/25/so-kompetent-ist-unsere-kanzlerin/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 18:28:37 +0000</pubDate>
		<dc:creator>urban</dc:creator>
				<category><![CDATA[dies und das]]></category>
		<category><![CDATA[geld regiert die welt]]></category>
		<category><![CDATA[kompetemz]]></category>
		<category><![CDATA[merkel]]></category>
		<category><![CDATA[regierung]]></category>
		<category><![CDATA[schäuble]]></category>

		<guid isPermaLink="false">http://www.urbans-blog.de/?p=147</guid>
		<description><![CDATA[- Kein Kommentar -]]></description>
			<content:encoded><![CDATA[<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/XaWE8K2nRVs&#038;hl=de&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/XaWE8K2nRVs&#038;hl=de&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></p>
<p>- Kein Kommentar -</p>
]]></content:encoded>
			<wfw:commentRss>http://www.urbans-blog.de/2009/10/25/so-kompetent-ist-unsere-kanzlerin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Einladung zur Radio Confusion Hörerparty</title>
		<link>http://www.urbans-blog.de/2009/09/13/einladung-zur-radio-confusion-horerparty/</link>
		<comments>http://www.urbans-blog.de/2009/09/13/einladung-zur-radio-confusion-horerparty/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 17:51:22 +0000</pubDate>
		<dc:creator>urban</dc:creator>
				<category><![CDATA[dies und das]]></category>
		<category><![CDATA[radio]]></category>
		<category><![CDATA[radio confusion]]></category>

		<guid isPermaLink="false">http://www.urbans-blog.de/?p=145</guid>
		<description><![CDATA[Da hier ja auch der eine oder die andere mitliest, der/die mir manchmal freitags zuhört, wenn ich mit meiner Sendung &#8220;Voices&#8221; bei Radio Confusion zu hören bin, will ich doch auch hier mal die offizielle Radio Confusion Einladung bekannt machen: &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Hallo liebe Hörerinnen Hallo liebe Hörer &#8211; von Radio-Confusion, es ist soweit ! &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Da hier ja auch der eine oder die andere mitliest, der/die mir manchmal freitags zuhört, wenn ich mit meiner Sendung &#8220;<a title="Voices - auf Radio Confusion" href="http://www.radio-confusion.de/sendeplan/?action=show_details&amp;show=17&amp;mod=13" target="_blank">Voices</a>&#8221; bei <a title="Radio Confusion" href="http://www.radio-confusion.de/" target="_self">Radio Confusion</a> zu hören bin, will ich doch auch hier mal die offizielle <a title="Radio Confusion Hörerparty" href="http://forum.radio-confusion.de/viewtopic.php?f=27&amp;t=827&amp;start=10#p5105" target="_blank">Radio Confusion Einladung</a> bekannt machen:</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Hallo liebe Hörerinnen<br />
Hallo liebe Hörer &#8211; von Radio-Confusion,</p>
<p>es ist soweit ! &#8211; Am 17. Oktober 2009 findet die lange angekündigte 1. Hörerparty von Radio-Confusion statt.<br />
Der Austragungsort des Treffens ist Dortmund, wo uns dank des Kollegen URBAN passende Räumlichkeiten zur Verfügung stehen.<br />
Die Anbindung und die damit verbundene Erreichbarkeit durch Bahn, Auto oder Bus sind Dank der zentralen Lage von überall her gut zu erreichen.</p>
<p>Alle weiteren Informationen zu dieser Party findet Ihr im Laufe der nächsten Tage auf der Radio-Confusion-Homepage.</p>
<p>Wir freuen uns auf Euch !</p>
<p>Die Arbeitsgruppe Hörerparty</p>
]]></content:encoded>
			<wfw:commentRss>http://www.urbans-blog.de/2009/09/13/einladung-zur-radio-confusion-horerparty/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Piraten-Special auf Radio Confusion</title>
		<link>http://www.urbans-blog.de/2009/08/14/piraten-special-auf-radio-confusion/</link>
		<comments>http://www.urbans-blog.de/2009/08/14/piraten-special-auf-radio-confusion/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 13:15:02 +0000</pubDate>
		<dc:creator>urban</dc:creator>
				<category><![CDATA[dies und das]]></category>
		<category><![CDATA[musik]]></category>
		<category><![CDATA[piraten]]></category>
		<category><![CDATA[piratenpartei]]></category>
		<category><![CDATA[radio confusion]]></category>
		<category><![CDATA[sendung]]></category>
		<category><![CDATA[toby]]></category>

		<guid isPermaLink="false">http://www.urbans-blog.de/?p=141</guid>
		<description><![CDATA[Heute (14. August 2009) gibt es im Rahmen meiner Sendung &#8220;Voices&#8221; auf Radio Confusion ein &#8220;Piraten-Special&#8221;. Da man in letzter Zeit ja immer häufiger von der Piraten-Partei hört und liest, habe ich mir gedacht, es könnte interessant sein, sich mal näher mit dem Thema zu beschäftigen und mal ein paar Infos aus erster Hand zu [...]]]></description>
			<content:encoded><![CDATA[<p>Heute (14. August 2009) gibt es im Rahmen meiner Sendung &#8220;Voices&#8221; auf <a href="http://www.radio-confusion.de" target="_blank">Radio Confusion</a> ein <a href="http://www.radio-confusion.de/cms/news/news.html" target="_blank">&#8220;Piraten-Special&#8221;</a>.<br />
Da man in letzter Zeit ja immer häufiger von der <a href="http://www.piratenpartei.de/" target="_blank">Piraten-Partei</a> hört und liest, habe ich mir gedacht, es könnte interessant sein, sich mal näher mit dem Thema zu beschäftigen und mal ein paar Infos aus erster Hand zu bekommen. Daher habe ich mir <a href="http://schlitt.info/" target="_blank">Toby</a> ins Studio eingeladen, der selbst bei den Piraten aktiv ist. Mit ihm werde ich heute abend zwischen den Musikstücken ein wenig darüber plaudern, was es mit den Piraten auf sich hat, was ihre Ziele sind, welche Perspektiven sie sich für die Bundestagswahl ausmalen etc. etc. &#8211; Auch in <a href="http://schlitt.info/private/blog/0712_piraten_entern_radio_confusion.html" target="_blank">Tobys Blog</a> ist darüber bereits etwas zu lesen.</p>
<p>Natürlich wird auch &#8211; wie gewohnt &#8211; die Musik nicht zu kurz kommen. Und auch Musikwünsche werden wie immer ihren Platz haben.</p>
<p>Wer interaktiv dabei sein will, sollte sich bei <a href="http://www.ximig.de" target="_blank">Ximig (http://www.ximig.de)</a> registrieren und dort den Chat aufrufen &#8211; und das &#8220;Land of Confusion&#8221; betreten. Dort sind die meisten Hörerinnen und Hörer so wie auch ich selbst während der Sendung anwesend. Ihr könnt dort auch Fragen an Toby stellen und/oder eure Musikwünsche äußern.</p>
<p>Also: klar machen zum ändern &#8230; &#8211; Radio Confusion einschalten! <img src='http://www.urbans-blog.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Auf unserer Homepage www.radio-confusion.de findet ihr rechts oben die Links zum Abspielen des Streams in den jeweiligen Playern.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.urbans-blog.de/2009/08/14/piraten-special-auf-radio-confusion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

