<?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"
	>

<channel>
	<title>PHP Blogger</title>
	<atom:link href="http://www.phpblogger.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phpblogger.net</link>
	<description>Ein PHP Blog mit aktuellen PHP Informationen und Tricks für Entwickler.</description>
	<pubDate>Fri, 18 Dec 2009 09:00:46 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>de</language>
			<item>
		<title>SVN: Via Shell vergleichen</title>
		<link>http://www.phpblogger.net/2009/12/18/svn-via-shell-vergleichen/</link>
		<comments>http://www.phpblogger.net/2009/12/18/svn-via-shell-vergleichen/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 09:00:46 +0000</pubDate>
		<dc:creator>timi</dc:creator>
		
		<category><![CDATA[Quick Hacks]]></category>

		<category><![CDATA[Server]]></category>

		<category><![CDATA[SVN]]></category>

		<category><![CDATA[tipp]]></category>

		<category><![CDATA[versionierung]]></category>

		<guid isPermaLink="false">http://www.phpblogger.net/?p=537</guid>
		<description><![CDATA[Wer eine ausgecheckte Version mit einer Revisionierten vergleichen m&#246;chte, kann das mit svn diff -r {rev_nr} lokale_datei.php tun.]]></description>
			<content:encoded><![CDATA[<p>Auch wieder ein simple Sache, die sich ohne weiteres im SVN Handbuch oder der manpage nachlesen l&#228;sst. In schicken SVN Tools bereits integriert - auf der Shell muss das Feature manuell gewusst werden.</p>
<p>Wer eine ausgecheckte Version mit einer Revisionierten vergleichen m&#246;chte, kann das mit</p>
<pre>svn diff -r {rev_nr} lokale_datei.php</pre>
<p>tun. {rev_nr} muss die Nummer einer Revision sein, in der die Datei ver&#228;ndert wurde, sonst wird schlicht nichts ausgegeben.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://www.phpblogger.net/2007/11/28/php-handbuch-ueber-die-shell/' rel='bookmark' title='Permanent Link: PHP Handbuch &#252;ber die Shell'>PHP Handbuch &#252;ber die Shell</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblogger.net/2009/12/18/svn-via-shell-vergleichen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Port-Fetischismus oder dirty Games mit Ports</title>
		<link>http://www.phpblogger.net/2009/12/17/port-fetischismus-oder-dirty-games-mit-ports/</link>
		<comments>http://www.phpblogger.net/2009/12/17/port-fetischismus-oder-dirty-games-mit-ports/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 09:00:57 +0000</pubDate>
		<dc:creator>timi</dc:creator>
		
		<category><![CDATA[Server]]></category>

		<category><![CDATA[Sicherheit]]></category>

		<category><![CDATA[Usability]]></category>

		<category><![CDATA[$_SERVER]]></category>

		<category><![CDATA[https]]></category>

		<category><![CDATA[ip]]></category>

		<category><![CDATA[lesbar]]></category>

		<category><![CDATA[Optimierung]]></category>

		<category><![CDATA[Port]]></category>

		<category><![CDATA[SSL]]></category>

		<category><![CDATA[subdomain]]></category>

		<category><![CDATA[vhost]]></category>

		<category><![CDATA[webroot]]></category>

		<category><![CDATA[webservice]]></category>

		<guid isPermaLink="false">http://www.phpblogger.net/?p=529</guid>
		<description><![CDATA[Um das klar zustellen: Sch&#246;ne Portangaben, sind nicht vorhandene Portangaben. Aber wie ein aufmerksamer Leser im Artikel zu HTTPS und SSL richtig angemerkt hat, kann man &#252;ber verschiedene Ports unter ein und derselben IP mehrere SSL-Zertifikate betreiben.]]></description>
			<content:encoded><![CDATA[<p>Haach, wie herrlich kann bloggen sein! Grad l&#228;uft&#8217;s mal wieder: Ein Kommentar zum letzten Artikel bringt mich auf eine Idee zum N&#228;chsten. Ihr habt&#8217;s bestimmt schon bemerkt - ich versuche mich immer mal wieder in sch&#246;nen unsachlichen Ausdrucksweisen, die trotzdem die Sache auf den Punkt bringen. Oder auch nicht. Naja. Aber weiter im Text:</p>
<p>Was k&#246;nnte man nur mit Port-Fetischismus meinen? Ich liebe <a title="PHP Blogger: Lesbaren Code schreiben" href="http://www.phpblogger.net/2008/02/11/lesbaren-code-schreiben/" target="_self">Code-Usability</a>. Ein super Thema, &#252;ber das ich ja schon &#246;fter referiert habe. Es ist so sch&#246;n wie zeitlos&#8230; Was dabei bis lang unter den Tisch gefallen ist, sind lesbare URLs (Vielleicht mal in einem anderen Artikel) und Portangaben. Also sch&#246;ne Portangaben.</p>
<p>Nur so zur Erinnerung: http://www.phpblogger.net:80/ ist eine M&#246;glichkeit, einen Port zu erzwingen. Klar, das Du das schon wusstest. Welcher Port macht denn im Browser noch Sinn? Naja 443 f&#252;r SSL zum Beispiel. Aber statt das zu erzwingen, wird einfach das Protokoll auf HTTPS ge&#228;ndert, was implizit auf Port 443 verweist.</p>
<p>Um das klar zustellen: Sch&#246;ne Portangaben, sind nicht vorhandene Portangaben. Aber wie ein aufmerksamer Leser im <a title="PHP Blogger: Wissenwertes &#252;ber SSL und HTTPS" href="http://www.phpblogger.net/2009/12/14/wissenswertes-ueber-ssl-und-https/" target="_blank">Artikel zu HTTPS und SSL</a> richtig angemerkt hat, kann man &#252;ber verschiedene Ports unter ein und derselben IP mehrere SSL-Zertifikate betreiben. Und jetzt geht es mit den dreckigen Spielchen weiter, die man mit Portangaben in der URL machen kann:</p>
<p><span id="more-529"></span>Nat&#252;rlich gibt es sinnvolle M&#246;glichkeiten, die das <a title="URL Tutorial" href="http://www.webreference.com/html/tutorial2/2.html" target="_blank">Web-Protokoll</a> erlaubt, um Webseiten abzurufen und Web-Applikationen anzusteuern:</p>
<ul>
<li>Mehrere SSL-Zertifikate &#252;ber eine einzige IP betreiben</li>
<li>Den PHP-Interpreter switchen (z.B. Port 80 = PHP 5, Port 8080 = PHP 4)</li>
<li>Den Webroot wechseln</li>
<li>Allgemein die Webserver-Konfiguration switchen (z.B. zwischen Entwicklungs- und Live-Modus einer Web-Applikation umschalten)</li>
<li>Mehrere Webserver gleichzeitig betreiben</li>
<li>Prinzipiell eine andere Server-Applikation oder einen Webservice ansteuern</li>
<li>Durch einen Reverse-Proxy einen Blackbox-Server in einer <a title="Wikipedia: DMZ" href="http://de.wikipedia.org/wiki/Demilitarized_Zone" target="_blank">DMZ</a> ansprechen</li>
</ul>
<p>Okay, wer es gemerkt hat, wurde eigentlich in allen F&#228;llen die Serverconfig geswitched. Ich wollte aber ja eigentlich auch nur die Vielzahl an M&#246;glichkeiten aufzeigen, die es unter Umst&#228;nden rechtfertigen, mit Port-basierten zu arbeiten.</p>
<p>Wie bereits erw&#228;hnt - ich finde Port-Angaben in der URL grunds&#228;tzlich h&#228;sslich. In den meisten F&#228;llen kann man alles, was &#252;ber <a title="Apache: Port based vhost" href="http://httpd.apache.org/docs/1.3/vhosts/examples.html#port" target="_blank">Port-Basierte-VirtualHosts</a> gel&#246;st wird, auch mit <a title="Apache: Name based vhost" href="http://httpd.apache.org/docs/1.3/vhosts/examples.html#name" target="_blank">Subdomains</a> l&#246;sen. Im Falle eines SSL-Betriebes m&#252;sste nat&#252;rlich unter Umst&#228;nden auf eine separate IP-Adresse in Verbindung mit einem Zertifikat zur&#252;ckgegriffen werden.</p>
<p>Aber auch dort gibt es die M&#246;glichkeit mit kostenlosen <a title="Schokokeks: Eigenes SSL-Zertifikat generieren" href="http://wiki.schokokeks.org/Eigenes_SSL-Zertifikat" target="_blank">selbst ausgestellten Zertifikaten</a> zu arbeiten und eine zus&#228;tzliche IP ist im lokalen Netz auch schnell und kostenlos organisiert. Sogar <a title="Setting up IP Aliasing on A Linux Machine Mini-HOWTO" href="http://www.faqs.org/docs/Linux-mini/IP-Alias.html" target="_blank">eine einzige Netzwerkkarte kann mit verschiedenen IPs betrieben werden</a>, falls kein weiterer freier Netzwerkport zur Verf&#252;gung steht.</p>
<p>Du stehst trotzdem auf &#8220;dreckige Spielchen&#8221; mit Ports? Sinn macht die Verwendung von unterschiedlichen Ports aus meiner Sicht vor allem auf Staging- oder Entwicklungs-Servern.</p>
<p>Aber auch um seine Applikation besonders abzusichern, kann man mit verschiedenen Ports oder Subdomains arbeiten. Sicherheit ergibt sich dadurch, das eine eventuelle Admin-Oberfl&#228;che nur auf solchen besonderen Vhosts zur Verf&#252;gung steht oder gleichzeitig noch eine IP-Sperre eingebaut ist.</p>
<p>Auch die Applikation kann mit Hilfe von $_SERVER["SERVER_PORT"] auf einen anderen Port reagieren, Deiner Phantasie sind keine Grenzen gesetzt - ob das dann sch&#246;n oder praktisch ist, ist eine andere Frage ;)</p>
<p><strong>Fazit</strong></p>
<p>Mit portbasierten Vhosts sind sch&#246;ne Spielereien m&#246;glich. Ich w&#252;rde solche Dinge allerdings nur auf Entwicklungs- oder Stagingservern umsetzen. Maschinen im Livebetrieb freuen sich &#252;ber die Verwendung von Subdomains.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://www.phpblogger.net/2009/02/06/ssh-server-absichern-port-salat/' rel='bookmark' title='Permanent Link: SSH Server absichern: Port-Salat'>SSH Server absichern: Port-Salat</a></li><li><a href='http://www.phpblogger.net/2009/12/14/wissenswertes-ueber-ssl-und-https/' rel='bookmark' title='Permanent Link: Wissenswertes &#252;ber SSL und HTTPS'>Wissenswertes &#252;ber SSL und HTTPS</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblogger.net/2009/12/17/port-fetischismus-oder-dirty-games-mit-ports/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Der ultimative Kreativit&#228;ts-Guide</title>
		<link>http://www.phpblogger.net/2009/12/16/der-ultimative-kreativitaets-guide/</link>
		<comments>http://www.phpblogger.net/2009/12/16/der-ultimative-kreativitaets-guide/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 09:00:20 +0000</pubDate>
		<dc:creator>timi</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<category><![CDATA[Gestaltung]]></category>

		<category><![CDATA[diskutieren]]></category>

		<category><![CDATA[entspannen]]></category>

		<category><![CDATA[erfindung]]></category>

		<category><![CDATA[inspiration]]></category>

		<category><![CDATA[konzentrieren]]></category>

		<category><![CDATA[kreativität]]></category>

		<category><![CDATA[lösung]]></category>

		<category><![CDATA[problem]]></category>

		<category><![CDATA[schlafen]]></category>

		<guid isPermaLink="false">http://www.phpblogger.net/?p=511</guid>
		<description><![CDATA[Mit der Kreativit&#228;t ist es wie mit der Milch aus dem Beutel: Wenn keine Milch mehr rauskommt, ist sie leer. Aber wo kriegt man Kreativit&#228;t her, wenn man gerade welche braucht und keine hat?]]></description>
			<content:encoded><![CDATA[<p>Leere. G&#228;hnende Leere. So leer, das ich wirklich g&#228;hnen muss. *g&#228;&#228;&#228;&#228;&#228;&#228;&#228;&#228;&#228;&#228;&#228;hn* Tschuldigung, aber ich hab mir extra die Hand vor den Mund gehalten ;)</p>
<p>Eigentlich m&#252;sste ich vor Kreativit&#228;t und Innovationslust explodieren. Als Entwickler, als Gestalter, als Mensch. Schicken PHP Code schreiben. Elegante Men&#252;s entwerfen. Morgens mit Élan aus dem Bett springen, beim Br&#246;tchen holen alten Omis &#252;ber die Stra&#223;e helfen, andere Menschen mit wahllosen Heldentaten beeindrucken. <strong>Hui.</strong> Wenn ich so dr&#252;ber nachdenke, kann Kreativit&#228;t ganz sch&#246;n anstrengend sein.</p>
<p><strong>Ich leg mich dann mal wieder ins Bett.</strong> Oder bin ich doch so motiviert, dass ich diesen Artikel weiterschreibe? Ja ich bin. Los gehts.</p>
<p>Woher also blo&#223; Kreativit&#228;t nehmen, wenn keine mehr da ist?</p>
<p><span id="more-511"></span>Mit der Kreativit&#228;t ist es wie mit der Milch aus dem Beutel: Wenn keine Milch mehr rauskommt, ist sie leer. Wie beim Backpulver im Papiert&#252;tchen. Benzin im Tank. Okay, okay ich drifte ab. <strong>Festzustellen ist: Kreativit&#228;t kann man sich nicht einfach im Supermarkt kaufen, wenn man gerade unkreativ ist.</strong> Eine unkreative, lustlose Phase ist so schlimm wie die Pest: Wenn man nix dagegen macht, wirds immer schlimmer. Sie geht nicht einfach vorbei. Ich wette, es sind schon Leute an Lustlosigkeit gestorben. Mist. Schon wieder die falsche Richtung.</p>
<p>Jetzt also mal meine medizinischen Kompetenzen bei Seite gelassen: Wo kriegt man Kreativit&#228;t her, wenn man gerade welche braucht und keine hat?</p>
<p>Timo Off hat sich in seinem erstaunlich krativen Werk &#8220;<a title="Timo Off: Best Off" href="http://www.geistesblitz.de/2009/best-off-als-pdf-kostenlos/" target="_blank">Best Off</a>&#8221; dazu ausf&#252;hrlich ge&#228;u&#223;ert. Das Buch ist mittlerweile als kostenlose PDF Version erh&#228;ltlich und schwankt zwischen Poesi, Wortspielereien von einem kreativen Akt zum n&#228;chsten. Er verpackt die Kreativit&#228;tssuche in dem sch&#246;nen Wort &#8220;Ideenfindung&#8221;. Tats&#228;chlich verbirgt sich dahinter wesentlich mehr.</p>
<p>Beruhigend kann er auf den letzten Seiten feststellen, das &#8220;die M&#246;glichkeiten kreativen Lebens mit dem Tod enden. Nicht fr&#252;her.&#8221; Na dann machen wir uns doch mal auf die Suche nach dem kreativen Leben: Und daf&#252;r m&#246;chte ich nochmal auf die Milch aus dem Beutel nebst Backpulver zur&#252;ckkommen.</p>
<p>F&#252;r mich bedeutet kreativ sein, zu backen. Nach Rezept. Ich denke, jeder hat da sein eigenes Rezept, um gedanklich wieder auf die Spr&#252;nge zu kommen. Ich zeig&#8217; Euch mal, wie ich das mache:</p>
<p><strong>Der Basisteig</strong></p>
<p>Die Grundlage einer guten Idee sind viele Teilideen in Summe. Beeindruckende und inspirierende Momente, die von aussen aufgesaugt und im Hirn abgespeichert werden. Das bedeutet: Die Umwelt aufmerksam betrachten. Lesen.</p>
<p>Ich habe jeden Tag einen Blick auf meine RSS Feeds. Schnappe manchmal nur Titel auf, lese ganze Artikel. Ich teile mit Euch ;) Die meisten Feeds, Blogs bzw. Sites werdet ihr sicherlich kennen. Die Reihenfolge hat &#252;brigens nichts mit Favoriten oder besonderer G&#252;te zu tun.</p>
<ul>
<li><a title="Der Brettspiele-Blog" href="http://www.brettspiel-blog.de/" target="_blank">Der Brettspiel-Blog</a>: Ich liebe es, zu spielen, frische Infos gibts hier.</li>
<li><a title="Mandolux" href="http://www.mandolux.com/" target="_blank">Mandolux Dual-Screen Backgrounds</a>: Immer wieder neue Wallpaper. Anspruchsvoll.</li>
<li><a title="Neuerdings: Das Gadget Blog" href="http://neuerdings.com/" target="_blank">Neuerdings, das Gadget Blog</a>: Elektronische Spielsachen f&#252;r den Herrn von heute.</li>
<li><a title="Photoshop Disasters" href="http://photoshopdisasters.blogspot.com/" target="_blank">Photoshop Disasters</a>: Immer f&#252;r einen Lacher gut&#8230;</li>
<li><a title="Smashing Magazine" href="http://www.smashingmagazine.com/" target="_self">Smashing Magazine</a>: Vielseitige Infos rund ums Web und Gestaltung.</li>
<li><a title="Francesco Mugnai" href="http://blogof.francescomugnai.com/" target="_blank">Francesco Mugnai</a>: Noch mehr Gestaltung</li>
</ul>
<p>Aber auch B&#252;cher und Zeitschriften sind mir wichtig. Neben dem ganzen digitalen Abklatsch, mit dem ich jeden Tag zu tun habe, freue ich mehr sehr &#252;ber haptische Erlebnisse wie das Umbl&#228;ttern einer Buchseite aus Papier *freu* Eine kleine Auswahl:</p>
<ul>
<li><a title="Wie man im Schach gewinnt: 10 goldene Regeln" href="http://www.amazon.de/gp/product/3888052866?ie=UTF8&amp;tag=phbl-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=3888052866" target="_blank">Wie man im Schach gewinnt</a>: Klingt banal, ist es aber nicht.</li>
<li><a title="Ben &amp; Jerry's Homemade Ice Cream" href="http://www.amazon.de/gp/product/0894803123?ie=UTF8&amp;tag=phbl-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=0894803123" target="_blank">Ben &amp; Jerry&#8217;s Homemade Ice Cream</a>: Ein sehr am&#252;santer Einblick in die Welt des Speiseeises *schmatz* Echt lecker!</li>
<li><a title="Spielbox" href="http://www.spielbox-online.de/" target="_blank">Die Spielbox</a>: Ein Magazin rund um Brett- und Kartenspiele.</li>
<li>Der <a href="http://www.amazon.de/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.de%2Fs%3Fie%3DUTF8%26x%3D0%26ref_%3Dnb%255Fss%26y%3D0%26field-keywords%3Dweb%2520design%2520index%26url%3Dsearch-alias%253Daps&amp;site-redirect=de&amp;tag=phbl-21&amp;linkCode=ur2&amp;camp=1638&amp;creative=19454">Web Design Index</a>: Die besten Webseiten in Druckform</li>
</ul>
<p><strong>Alles sch&#246;n verkneten</strong></p>
<p>Jetzt muss der ganze Ideen-Teig im Kopf sch&#246;n verknetet werden. Ach egal, ob sch&#246;n oder nicht. Hauptsache es wird. M&#252;rbe wird man am Tagesende sowieso - muss man aktiv kneten?</p>
<p>Ich behaupte: Nein. Das geht gar nicht. Ideenverknetung oder Ideenfindung (wie das die Profis nennen) kann man nicht provozieren. Das passiert l&#228;ssig nebenbei. Wer es erzwingt, macht eigentlich direkt einen Griff ins Klo. Mann kennt das: Auf der intensiven Suche nach der Frau des Lebens begegnet sie einem einfach ums Verrecken nicht. Aber dann. Ganz pl&#246;tzlich, unverhofft, einfach so, ist der Partner f&#252;rs Leben gefunden. Und man hat gar nicht damit gerechnet.</p>
<p>Faszinierend. Auch l&#228;ssig sein l&#228;sst sich provozieren. Oh Verzeihung: Trainieren nat&#252;rlich. Manche nennen es <a title="Yoga &#220;bungen" href="http://www.yoga-vidya.de/de/asana/index.html" target="_blank">Yoga</a>. Andere <a title="Entspannungs&#252;bungen nach Jacobson f&#252;r ein besseres Wohlbefinden" href="http://www.vitanet.de/fitness-gesundheit/entspannungsuebungen/" target="_blank">Muskelrelaxation</a>. Ich nennen es Musik h&#246;ren, sich an einen belebten Platz setzen und Leute beobachten, ein Getr&#228;nk ganz bewusst zu trinken, jeden Geschmacksnerv sp&#252;ren, laangsam eeiin- und aauusaaaaatmen, gaaaaanz ruhig, entspannt&#8230;</p>
<p>*schnarch* *schreckauf*</p>
<p>Hui, jetzt war ich von meinem Geschreibe so entspannt, das ich doch glatt eingeschlafen bin. *lach* Aber weiter. Spazieren gehen, die Umwelt beobachten. Nichts machen. Ein Konsolenspiel anfangen und nicht beenden. Einen Blogartikel schreiben, der nie fertig wird.</p>
<p><a title="Programmierer m&#252;ssen mehr schlafen" href="http://www.phpblogger.net/2008/04/15/programmierer-muessen-mehr-schlafen/" target="_blank">Ausschlafen</a>. Oh, das Geheimrezept &#252;berhaupt. Die ganze Kreativit&#228;t eines Menschen offenbart sich im Schlaf: Der K&#246;rper entspannt sich, Muskeln werden weich, Gedanken werden verarbeitet und einsortiert.</p>
<p>Aber noch mal zur&#252;ck zum Menschen beobachten - es ist unglaublich witzig und gleichzeitig faszinierend zu sehen, wie unterschiedlich sich Menschen bewegen. Die K&#246;rpersprache: individuell. Der Klamotten-Mix: meist individuell und auch wenn von der Stange - die selbe Klamotte wirkt an jedem Menschen anders.</p>
<p>Ich am&#252;siere mich gerne &#252;ber andere Menschen. Obwohl ich wei&#223;, das ich auch ein Freak bin, &#252;ber den sich andere am&#252;sieren, kann ich dabei herrlich abschalten. Und weil ich mich aufs Beobachten nicht konzentrieren muss, hat mein Gehirn noch gen&#252;gend Ressourcen, um ein Problem im Hintergrund zu bearbeiten oder einen neuen Zusammenhang pl&#246;tzlich zu entdecken.</p>
<p>Auch die Natur gibt viel her. Nicht umsonst sind die meisten <a title="Bionik" href="http://www.abendblatt.de/ratgeber/wissen/forschung/article827113/Vom-Fisch-zum-Auto.html" target="_blank">Erfindungen der Natur oder Lebewesen nachempfunden</a>. Selten sind biologische Mechanismen durch Effizienz zu toppen.</p>
<p>Aber auch bestehende nicht-biologische Mechanismen k&#246;nnen inspirieren: Die Hebelwirkung beim Flaschen&#246;ffner kann eine spontane Idee liefern. Ein Klappmechanismus an einer T&#252;r ein lange vermisstes Bindeglied sein. Das Ablaufmuster eines Brettspieles die L&#246;sung f&#252;r ein ganz anderes Problem sein, das man mit sich herumtr&#228;gt.</p>
<p><strong>Sch&#246;n ziehen lassen</strong></p>
<p>Viele, die aktiv an einem Problem sitzen, versuchen sich von der Au&#223;enwelt zu isolieren, um sich ganz auf ein Problem zu konzentrieren: Treffen mit Freuden? Muss ausfallen. Ein spontanes Bierchen mit dem besten Kumpel? Auf keinen Fall. Ein Kinobesuch mit der Clique? Ne ne.</p>
<p>FALSCH! Ich verspreche Euch: Genau, wenn man das macht, was man eigentlich nicht machen sollte, kommen einem die besten Ideen. Man entspannt sich, lacht und genie&#223;t die M&#246;glichkeit einfach mal anderen zuzuh&#246;ren, statt dauernd in sich hinein.</p>
<p>Nutzt die M&#246;glichkeit, Probleme mit anderen zu diskutieren, die nicht auf dem gleichen fachlichen Level sind und vielleicht gar kein Verst&#228;ndnis f&#252;r Euer Problem haben. Warum? Klingt sinnlos? Na, ist doch klar: Wenn man sein Problem jemandem schildert, der keine Ahnung vom Thema hat, muss man es fantasievoll formulieren. Vielleicht veranschaulichen, vergleichen. Und schwups! Ist die L&#246;sung da.</p>
<p>Ideen kriegen Kinder! Das einzige, das nicht weniger wird, wenn man es benutzt, ist Wissen. Das gilt es auszunutzen.</p>
<p><strong>Rezeptbuch f&#252;hren</strong></p>
<p>Schreibe Ideen und L&#246;sungen direkt auf, sonst sind sie weg. Ein Notizbuch im Nachttisch. Ein <a title="Moleskine" href="http://www.moleskine.com/" target="_blank">Moleskine</a> in der Jackentasche. Ein Post-It am Bildschirm. Ein Schmierzettel im Schwimmbad. Alles ist m&#246;glich.</p>
<p><strong>Ab in den Ofen</strong></p>
<p>Ausprobieren ist alles. Oft stellt man bei einem Real-World-Versuch fest, das die L&#246;sung nicht funktioniert oder irgendwas zum Finalisieren fehlt. Lass Dich nicht entmutigen! Mach weiter. Verfeinere Deine Idee. Forme Sie aus. Fang vielleicht noch mal von vorne an.</p>
<p>Vielleicht fehlt der Mut, eine waaghalsige Idee auszuprobieren. Aber es ist wie mit dem M&#228;del, das man nie angesprochen hat: Mein wei&#223; einfach nicht, ob es geklappt h&#228;tte.</p>
<p>Au&#223;erdem kann ich Dir eines versichern: Fehlschl&#228;ge sind meist die Grundpfeiler ein super L&#246;sung. Vielleicht unmittelbar im Jetzt, vielleicht braucht die Idee noch einige Zeit zum Reifen und es wird ein paar Jahre sp&#228;ter.</p>
<p><strong>Alles ganz easy</strong></p>
<p>Ideenfindung funktioniert von alleine. Das Gehirn braucht Dich dazu eigentlich nicht. Nur Impulse. Und die kannst Du ganz einfach beisteuern.</p>
<p>Lies ein Buch, trink Dein Lieblingsgetr&#228;nk, lehne Dich zur&#252;ck und h&#246;re f&#252;r einen Moment mit dem Analysieren auf. Und</p>
<p><strong>z z Z Z A C K K<br />
</strong></p>
<p>sie wird Kommen: Die Inspiration. Die Idee, die L&#246;sung.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://www.phpblogger.net/2008/01/15/der-ultimative-guide-fuer-fehlerbeschreibungen/' rel='bookmark' title='Permanent Link: Der ultimative Guide f&#252;r Fehlerbeschreibungen'>Der ultimative Guide f&#252;r Fehlerbeschreibungen</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblogger.net/2009/12/16/der-ultimative-kreativitaets-guide/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Code-Optimierung: R&#252;ckgabewerte, Fabriken, 0, NULL, false und 1</title>
		<link>http://www.phpblogger.net/2009/12/15/code-optimierung-rueckgabewerte-fabriken-0-null-false-und-1/</link>
		<comments>http://www.phpblogger.net/2009/12/15/code-optimierung-rueckgabewerte-fabriken-0-null-false-und-1/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 09:00:39 +0000</pubDate>
		<dc:creator>timi</dc:creator>
		
		<category><![CDATA[Design Pattern]]></category>

		<category><![CDATA[OOP]]></category>

		<category><![CDATA[Usability]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[fabrik]]></category>

		<category><![CDATA[false]]></category>

		<category><![CDATA[null]]></category>

		<category><![CDATA[Optimierung]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[rückgabewerte]]></category>

		<category><![CDATA[true]]></category>

		<guid isPermaLink="false">http://www.phpblogger.net/?p=524</guid>
		<description><![CDATA[Es geht um die Wert-Range von false. Was wird eigentlich alles als false im weitesten Sinne interpretiert?]]></description>
			<content:encoded><![CDATA[<p>Oh wie kryptisch. Heute nur ein kurzer Beitrag rund ums Thema R&#252;ckgabewerte und Code-Optimierung was Lesbarkeit betrifft. Bin letzte Woche eher zuf&#228;llig mit einem Kollegen &#252;ber das Thema gestolpert und obwohl es so trivial ist, hat es mich nicht losgelassen. Und zwar geht es um die Wert-Range von false. Was wird eigentlich alles als false im weitesten Sinne interpretiert?</p>
<p>PHP nimmt es bei Wertvergleichen standardm&#228;&#223;ig nicht so genau. Die Vergleichs-Operatoren gleich bzw. ungleich (== und !=, oh jetzt kratze ich wirklich an den <a title="PHP Manual: Vergleichsoperatoren" href="http://www.php.net/manual/de/language.operators.comparison.php" target="_blank">Basics</a>) sind zun&#228;chst ja nicht Typen beeindruckt. Weniger was Lederjacken-Tr&#228;ger angeht, als die Werte von Variablen.</p>
<p>F&#252;r ganz Genaue m&#252;ssen da schon die Operatoren === (Identisch) und !== (Nicht identisch) herhalten. Mit welchen Operatoren man Variablen vergleichen sollte, ist wieder mal Geschmackssache. Ich halte das in der Regel wie folgt: Geht es um einen wichtigen Vergleich - eine Typ-Validierung in einer Setter-Methode beispielsweise - nutze ich die strengen Operatoren. Bei einer unkritischen Abfrage von R&#252;ckgabewerten (wie gesagt, sie muss unkritisch sein) bediene ich mich oft bei den Standard-Operatoren.</p>
<p><span id="more-524"></span>Und genau bei R&#252;ckgabewerten will ich mich einhaken. Es geht um das Thema Lesbarkeit. Wir holen uns mal schnell ein Objekt aus einer Fabrik:</p>
<pre class="php">$objekt= $fabrik-&gt;neueInstanz();</pre>
<p>Nehmen wir mal an, unserer Fabrik gelingt es nicht ein neues Objekt produzieren zu k&#246;nnen. Wer &#252;bernimmt die Fehlerbehandlung und wirft z.B. eine Exception? Die Fabrik selbst? Denkbar. Meiner Meinung nach (ich denke, das ist fallabh&#228;ngig zu betrachten) sollten Fabriken recht dumm und simpel sein und sich auf das konzentrieren, was sie k&#246;nnen: Neue ObjektInstanzen. Wenn &#252;berhaupt sollte ein Exception geschmissen werden.</p>
<p>Was wenn nicht? Was, wenn man auf einen R&#252;ckgabewert wie null testen m&#246;chte? Man k&#246;nnte schreiben:</p>
<pre class="php">if($objekt == null) { ... }</pre>
<p>oder</p>
<pre class="php">if($objekt == false) { ... }</pre>
<p>Letzteres funktioniert, weil null im Normalfall als false interpretiert wird. Hm. Was noch? Als false wird sonst noch 0 (numerische Null) gewertet. Zahlen gr&#246;&#223;er oder kleiner Null werden als true gewertet, ebenfalls Variablen, die mit g&#252;ltigen Objekten besetzt sind.</p>
<p>Einer meiner Lieblings-Operatoren ist &#252;brigens NOT. Man k&#246;nnte also auch schreiben:</p>
<pre class="php">if(!$objekt) { ... }</pre>
<p>Ach, wie herrlich kurz und pr&#228;zise das ist. Und zugleich super lesbar - Ich sprech es mal laut nach:</p>
<p>&#8220;If not objekt then &#8230;&#8221;</p>
<p>Dagegen klingen die ausgesprochenen ersten beiden Versuche richtig sperrig: Also ich liebe das. Kurz und knackig - aber wer die Lesbarkeit noch weiter verbessern m&#246;chte, kann auch auf eine Wrapper-Variable zur&#252;ckgreifen:</p>
<pre class="php">$objekt_nicht_verfuegbar= (!$objekt);
if($objekt_nicht_verfuegbar) { ... }</pre>
<p>Auch sehr gut. Der Vollst&#228;ndigkeit will ich noch erw&#228;hnen, das man das nat&#252;rlich auch mit einer Exception abfangen kann. Was besser ist, muss jeder Entwickler selbst entscheiden, wenn er vor dem Problem sitzt - denn Exceptions m&#252;ssen nicht zwangsweise sicherer sein als Bedingungs-Abfragen.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://www.phpblogger.net/2008/02/11/lesbaren-code-schreiben/' rel='bookmark' title='Permanent Link: Lesbaren Code schreiben'>Lesbaren Code schreiben</a></li><li><a href='http://www.phpblogger.net/2007/04/07/die-mutter-aller-objekte/' rel='bookmark' title='Permanent Link: Die Mutter aller Objekte'>Die Mutter aller Objekte</a></li><li><a href='http://www.phpblogger.net/2008/10/17/hook-und-callback-funktionen-teil-3/' rel='bookmark' title='Permanent Link: Hook- und Callback-Funktionen (Teil 3)'>Hook- und Callback-Funktionen (Teil 3)</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblogger.net/2009/12/15/code-optimierung-rueckgabewerte-fabriken-0-null-false-und-1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wissenswertes &#252;ber SSL und HTTPS</title>
		<link>http://www.phpblogger.net/2009/12/14/wissenswertes-ueber-ssl-und-https/</link>
		<comments>http://www.phpblogger.net/2009/12/14/wissenswertes-ueber-ssl-und-https/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 09:00:34 +0000</pubDate>
		<dc:creator>timi</dc:creator>
		
		<category><![CDATA[Server]]></category>

		<category><![CDATA[Sicherheit]]></category>

		<category><![CDATA[ca]]></category>

		<category><![CDATA[crt]]></category>

		<category><![CDATA[csr]]></category>

		<category><![CDATA[DNS]]></category>

		<category><![CDATA[handshake]]></category>

		<category><![CDATA[https]]></category>

		<category><![CDATA[key]]></category>

		<category><![CDATA[passphrase]]></category>

		<category><![CDATA[SSL]]></category>

		<category><![CDATA[ssl_error_rx_record_too_long]]></category>

		<guid isPermaLink="false">http://www.phpblogger.net/?p=493</guid>
		<description><![CDATA[Herzlich Willkommen also zur Nachhilfestunde zum Thema SSL und HTTPS. (Du musst ja keinem davon erz&#228;hlen, das Du diesen Artikel gelesen hast ;). Und man weiss ja nie, vielleicht erf&#228;hrt man ja doch was Neues.]]></description>
			<content:encoded><![CDATA[<p>*g&#228;&#228;&#228;&#228;&#228;&#228;&#228;&#228;&#228;&#228;hn* Was f&#252;r ein langweiliges Thema. Ich schlafe ja selbst beim Schreiben des Titels ein ;) Aber genau das Richtige f&#252;r einen Freitag mittag, verregnet, d&#252;ster und langweilig.</p>
<p>Immer wieder passiert es, das ich mit Kollegen diskutieren muss, wie nun SSL funktioniert und was man dar&#252;ber wissen sollte, wenn man es konfiguriert. Selbst eingefleischte Entwicker und Adminprofis tun sich manchmal bei eigentlich trivialen Dingen schwer.</p>
<p>Herzlich Willkommen also zur Nachhilfestunde zum Thema SSL und HTTPS. (Du musst ja keinem davon erz&#228;hlen, das Du diesen Artikel gelesen hast ;). Und man weiss ja nie, vielleicht erf&#228;hrt man ja doch was Neues.</p>
<p><span id="more-493"></span></p>
<p>&#8212; Sendung mit der Maus AN &#8212;</p>
<p><em>Buh, sticknormales HTTP kann ja jeder.</em></p>
<p>Ja stimmt. Aber wof&#252;r braucht man denn &#252;berhaupt HTTPS, bzw. SSL? Naja das Grund&#252;bel ist eingentlich, das HTTP grunds&#228;tzlich unverschl&#252;sselt &#252;bertragen wird: Jeder kann mitlesen. Ein paar Menschen hat abgeh&#228;rtet, das es bei E-Mail und FTP auch so ist; ein paar andere fanden das Scheisse und haben sich &#252;berlegt, das was Sicheres her muss.</p>
<p>Um zu beweisen, das man einen sicheren Service anbietet, gibt es Zertifikate. Wenn man mit einem Texteditor reinguckt, sehen die Dinger verschl&#252;sselt aus. Und sind es auch. Damit gew&#228;hrleistet ist, das es sich um ein echtes Zertifikat handel (Ja es gibt auch unechte), werden die Teile von einer Zertifizierungsstelle ausgestellt (CA), die selbst wieder zertifiziert ist (CA-Zertifikat). Damit nicht jedes Zertifikat installiert werden muss, werden die Zertifikate der gr&#246;&#223;ten Zertifizierungsstellen schon im Browser vorinstalliert ausgeliefert.</p>
<p>Ein eigenes Zertifikat kostet mindestens 80-100 Euro pro Jahr und muss verl&#228;ngert werden. Bei einem niedrigeren Preis sollte man die Dienstleitung bzw. Zertifizierungsstelle mal kritischer be&#228;ugen. Das Zertifikat (und damit die Verschl&#252;sselung) ist um so sicherer, je h&#246;her die Bit-St&#228;rke ist, mit der verschl&#252;sselt wird. Beispiel: Ein 128 Bit verschl&#252;sseltes Zertifikat ist nicht so sicher wie eines, das mit 256 Bit verschl&#252;sselt wurde. Genauer will ich da jetzt nicht drauf eingehen, die Tatsache z&#228;hlt.</p>
<p>Das Prinzip ist eigentlich ganz einfach: Man speichert das eigene Zertifikat auf dem eigenen Server. Bei einer SSL-Anfrage &#252;ber HTTPS wird das Zertifikat ausgeliefert und vom Browser auf Echtheit gepr&#252;ft. Wenn alles in Ordnung geht, steht die sichere Verbindung.</p>
<p>&#8212; Sendung mit der Maus AUS &#8212;</p>
<p>Die T&#252;cken stecken allerdings wie immer im Detail:</p>
<ul>
<li><strong>Ein SSL-Zertifikat ist immer an einen Hostnamen gebunden.</strong> www.phpblogger.net ist dabei ein anderer Hostname als phpblogger.net (ohne www.) - man sollte sich also vorher gut &#252;berlegen, f&#252;r welchen Hostnamen man ein Zertifikat ben&#246;tigt. Es gibt auch Wildcard-Zertifikate, die verschiedene Subdomains zulassen. Wildcard-Zertifikate sind allerdings recht teuer.</li>
<li><strong>Pro Zertifikat wird eine IP-Adresse ben&#246;tigt. </strong>F&#252;r ein Zertifikat ben&#246;tigt man eine IP-Adresse (die auch mit nicht SSL-gesch&#252;tzten Seiten geteilt werden kann), f&#252;r jedes weitere Zertifikat eine weitere IP-Adresse. <em>Warum?</em> Weil der SSL-Handshake auf IP-Basis stattfindet. Die Domain wird via DNS zur IP aufgel&#246;st und dort wird direkt auf Port 443 der Handshake gestartet - ein Hostname wird dabei nicht &#252;bermittelt. Technisch ist es also nicht m&#246;glich mehrere Zertifikate unter einer IP laufen zu lassen, weil der Webserver nicht ermitteln kann, welches Zertifikat zu welcher Domain geh&#246;rt.</li>
<li><strong>Um ein Zertifikat zu beantragen ben&#246;tigt man einen Certificate Signing Request (CSR).</strong> Diese Datei wird auf dem Webserver generiert, der das SSL Zertifikat einsetzen m&#246;chte. Im Zuge der Generierung wird in der Regel gleich noch ein Key mit erzeugt. Der CSR wird an die ausstellende Beh&#246;rde (CA) &#252;bermittelt, die daraus dann das Zertifikat (CRT) generiert.</li>
<li><strong>Wichtig: Die Key-Datei muss geheim bleiben und wird nicht an die CA &#252;bermittelt.</strong> SSL verwendet eine asynchrone Verschl&#252;sselung. Die Key-Datei ist der private Key, w&#228;hrend das Zertifikat der public Key ist, der f&#252;r die Entschl&#252;sselung (und umgekehrt) vom Browser verwendet wird.</li>
<li><strong>Beim Erstellen der CSR-Datei <em>kann</em> man ein Passwort (Passphrase) angeben</strong> - das muss dann jedes Mal beim Start des Webservers eingegeben werden. Mann muss aber nicht und spart sich dann den Act, ein Post-It an den Monitor zu kleben. *zwinker* Ist nat&#252;rlich ne schlechte Idee.</li>
<li><strong>Zertifikat und Key muss man bei der SSL-Konfiguration angeben.</strong> Das CSR jedoch nicht. Je nach Server-Distribution kann es sein, das auch das CA-Zertifikat besorgt werden muss. Das bekommt man dann bei der ausstellenden Zertifizierungsstelle zum Download.</li>
<li><strong>Die Domains muss via DNS auf die selbe IP aufgel&#246;st werden, unter der das Zertifikat ausgeliefert wird.</strong> Eigentlich eine Selbstverst&#228;ndlichkeit, wird aber trotzdem oft vergessen. Der Fehler, der dadurch unter anderem entstehen kann, hei&#223;t &#8220;(Fehlercode: ssl_error_rx_record_too_long)&#8221;</li>
<li><strong>Die Zertifikate sind Textdateien.</strong> Meist bekommt man die Zertifikate von der Zertifizierungsstelle oft inline in einer Textmail zugesendet. Um eine CRT-Datei daraus zu machen, erstellt man eine leere ASCII Text-Datei, kopiert alles von &#8212;&#8211;BEGIN CERTIFICATE&#8212;&#8211; bis &#8212;&#8211;END CERTIFICATE&#8212;&#8211; (die beiden BEGIN bzw. END Zeilen werden mitkopiert) und f&#252;gt das ganze in die leere Textdatei ein. Speichern, Hochladen fertig!</li>
<li><strong>Root bzw. CA-Zertifikate k&#246;nnen ablaufen.</strong> Das war z.B. bei <a title="Verisign CA-Zertifikat abgelaufen" href="http://www.heise.de/security/meldung/Verisign-Zertifikate-abgelaufen-91263.html" target="_blank">Verisign im Jahr 2004</a> mal so. Ich kann mich noch bestens daran erinnern: Dann wird das eigene SSL Zertifikat f&#252;r ung&#252;ltig erkl&#228;rt, weil die Beweiskette durch das abgelaufene CA-Zertifikat unterbrochen wurde. Die Zertifikatshierarchie kann man sich &#252;brigens in jedem Browser angucken. Im Firefox unter &#8220;Seiteninformationen&#8221; / &#8220;Sicherheit&#8221; / &#8220;Zertifikat anzeigen&#8221; / &#8220;Details&#8221;. Das CA-Zertifikat muss zum Bugfix auf dem Server gegen ein Neues ausgetauscht werden.</li>
</ul>
<p>Zum Schluss noch ein paar n&#252;tzliche Code-Schnipsel und Links, wenn man mit SSL-Zertifikaten arbeiten will oder muss:</p>
<p><strong>Das Generieren eines CSR (Certificate Signing Request) mit OpenSSL:</strong></p>
<pre>openssl req -new -keyout my-domain_de.key -out my-domain_de.csr</pre>
<p><strong>Die SSL-Konfiguration testen mit dem <a title="OpenSSL: s_client" href="http://www.openssl.org/docs/apps/s_client.html" target="_blank">s_client</a> (geh&#246;rt zu OpenSSL):</strong></p>
<pre>openssl s_client -connect my-domain_de:443</pre>
<p><strong>CA- bzw. Root-Zertifikate gibts hier:</strong></p>
<p>z.B. von <a title="Verisign CA-Zertifikate" href="https://www.verisign.com/support/verisign-intermediate-ca/index.html" target="_blank">VeriSign</a>, <a title="thawte root bzw. CA Zertifikate" href="http://www.thawte.com/roots/index.html" target="_blank">thawte</a> (bekannt durch die g&#252;nstigen 1-2-3 Zertifikate), <a title="GeoTrust Root-Zertifikate" href="http://www.geotrust.com/resources/root-certificates/index.html" target="_blank">GeoTrust</a> und <a title="GlobalSign Root CA Zertifikate" href="http://www.globalsign.com/support/root-certificate/serversign.html" target="_blank">GlobalSign</a>.</p>
<p><strong>Auf dem Server vorinstallierte (CA-)Zertifikate:</strong></p>
<ul>
<li><em>Debian:</em> /etc/ssl/certs</li>
<li><em>Fedora bzw. RedHat:</em> /etc/httpd/conf/ssl.*</li>
<li><em>SuSE / SLES:</em> /etc/apache2/ssl.*</li>
</ul>
<p><strong>SSL-Pflichtlekt&#252;re in gedruckter Form:<br />
</strong></p>
<p>Wer einen Apache mit SSL konfigurieren m&#246;chte, dem sei das <a href="http://www.amazon.de/gp/product/3897213710?ie=UTF8&amp;tag=phbl-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=3897213710">Apache Kochbuch.</a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.de/e/ir?t=phbl-21&amp;l=as2&amp;o=3&amp;a=3897213710" border="0" alt="" width="1" height="1" /> empfohlen. Ohnehin eine Pflichtlekt&#252;re f&#252;r Admins, die viel mit dem Apache machen (m&#246;chten).</p>
<p><strong>Wer gerne <a title="SSL Zertifikate selbst signieren und ausstellen" href="http://www.werthmoeller.de/doc/microhowtos/openssl/" target="_blank">seine eigene Zertifizierungsstelle</a> w&#228;re</strong>, erf&#228;hrt bei Werthm&#246;ller (wer das auch immer ist) recht anschaulich, wie es funktioniert.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://www.phpblogger.net/2009/12/17/port-fetischismus-oder-dirty-games-mit-ports/' rel='bookmark' title='Permanent Link: Port-Fetischismus oder dirty Games mit Ports'>Port-Fetischismus oder dirty Games mit Ports</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblogger.net/2009/12/14/wissenswertes-ueber-ssl-und-https/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Linktipps: Performance und Produktivit&#228;t</title>
		<link>http://www.phpblogger.net/2009/12/11/linktipps-performance-und-produktivitaet/</link>
		<comments>http://www.phpblogger.net/2009/12/11/linktipps-performance-und-produktivitaet/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 14:33:17 +0000</pubDate>
		<dc:creator>timi</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<category><![CDATA[Performance]]></category>

		<category><![CDATA[bluelounge]]></category>

		<category><![CDATA[cablebox]]></category>

		<category><![CDATA[cabledrop]]></category>

		<category><![CDATA[Cache]]></category>

		<category><![CDATA[caching]]></category>

		<category><![CDATA[datenhaltung]]></category>

		<category><![CDATA[extensions]]></category>

		<category><![CDATA[gadgets]]></category>

		<category><![CDATA[memcached]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[produktivität]]></category>

		<category><![CDATA[thesanctuary]]></category>

		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.phpblogger.net/?p=516</guid>
		<description><![CDATA[Ich habe ja einiges aufzuholen und deshalb m&#246;chte sich so nach und nach meine gesammelten Linktipps mit Euch teilen]]></description>
			<content:encoded><![CDATA[<p>Ich habe ja einiges aufzuholen und deshalb m&#246;chte sich so nach und nach meine gesammelten Linktipps mit Euch teilen. Die Links sind zwar schon ein paar Tage alt, aber es ist nie zu sp&#228;t zum posten derselben. Die G&#252;ltigkeit bleibt wohl erhalten.</p>
<p>Fangen wir mal an - mit dem <strong>Thema Performance</strong>. Ein alter Hut sozusagen. Aber welche Applikation ben&#246;tigt nicht mal den einen oder andren Performance-Boost? Die alten Hasen unter Euch freuen sich bestimmt &#252;ber eine kleine Auffrischung mit Hilfe der Tipps, PHP-Anf&#228;nger wahrscheinlich allein &#252;ber die Existenz derselben.</p>
<p>&#220;ber die <a title="Zend Developer Zone" href="http://devzone.zend.com/article/4840-PHP-Performance-Tips-from-Stas-Malyshev" target="_blank">Zend Developer Zone (engl.)</a> bin ich auf den Beitrag von <a title="PHP 10.0 Blog" href="http://php100.wordpress.com/" target="_blank">Stas Malyshev</a> aufmerksam geworden. Bei seinem Beitrag mit dem schicken Titel &#8220;<a title="More on PHP Performance" href="http://php100.wordpress.com/2009/07/13/php-performance/" target="_blank">more on PHP performance</a>&#8221; versucht er in einer Art &#220;bersicht aufzuzeigen, worauf man achten kann bzw. sollte, wenn man seiner Applikation etwas Gutes in Form von Performance tun m&#246;chte. Wirklich ausf&#252;hrlich ist das nat&#252;rlich nicht, daf&#252;r spricht er vielf&#228;ltige Themen an.</p>
<p><span id="more-516"></span>Ich m&#246;chte Euch vor allem auf folgende Dinge aufmerksam machen:</p>
<ul>
<li><strong>Arbeitet mit Caches.</strong> Alles was sich nicht st&#228;ndig ver&#228;ndert, will gecacht werden. Es schreit f&#246;rmlich nach Caching! Erweitert Eure Caches durch sinnvolle Aktualisierungs-Routinen. Ein gecachtes Objekt &#228;ndert sich? Dann sollte der Controller oder der Applikationsteil, der die &#196;nderung veranlasst, auch den Cache aktualisieren oder neu berechnen lassen.</li>
<li><strong>Optimiert Eure Datenhaltung und vor allem den Zugriff darauf.</strong> Versucht, nicht nur alles in 1000 Objekte zu kapseln, sondern Zugriffsmethoden logisch zu gruppieren. Dann ben&#246;tigt ihr weniger Instanzen von Zugriffsobjekten. Werden immer wieder die selben Daten abgefragt? Auch dann kann man die Zugriffsroutinen mit Caches ausstatten. Vom billigen Query-Caching bis hin zu ganzen Cache-Tabellen kann alles m&#246;gliche Sinn machen.</li>
<li><strong>Sortiert PHP-Extensions aus.</strong> Gerade auf Produktivmaschinen, die nicht mehr als 1, 2 Projekte hosten, werden oft nicht alle Extensions ben&#246;tigt. Deaktiviert alles, was ihr nicht braucht.</li>
<li><strong>Reduziert die Dateisystemaufrufe.</strong> Das kann vor allem bei virtualisierten Maschinen einen extremen Performance-Schub bringen&#8230; Wenn ihr bestimmte Daten oft braucht, solltet ihr mal &#252;ber den Einsatz von <a title="Memcached" href="http://memcached.org/" target="_blank">memcached</a> nachdenken. Memcached speichert Daten direkt im Arbeitsspeicher - schneller geht&#8217;s oft nicht.</li>
</ul>
<p><strong>Der zweite Part ist die Produktivit&#228;t. </strong>Kann man immer verbessern. Das ist sch&#246;n und vor allem sch&#246;n vielseitig. <a title="PHP Blogger: Mit 2 Monitoren produktiver entwickeln" href="http://www.phpblogger.net/2008/06/11/produktiver-entwickeln-mit-2-monitoren/" target="_self">Mit 2 Monitoren arbeitet man oft richtig sch&#246;n produktiv</a>. Aber vor allem, wenn man sich auf das konzentrieren kann, was man gerade tut. Ordnung auf dem Schreibtisch kann da Wunder wirken. Mein Schreibtisch quillt gerade wieder &#252;ber vor Kabelsalat von Lade- und USB-Ger&#228;ten. Unterm Schreibtisch h&#228;ufen sich auch wieder die Ansammlungen von Kabelstrecken. Aber was k&#246;nnte man dagegen tun?</p>
<p>Ein Besuch bei <a title="Bluelounge" href="http://www.bluelounge.com/" target="_blank">Bluelounge</a> gibt Aufschluss: Neben einem s&#252;ndhaft teuren Tisch gibts dort massenweise Produkte gegen Kabelsalat. Ich muss zugeben, ich war fasziniert von den Bluelounge-Produkten und habe gleich mal eingekauft:</p>
<ul>
<li><strong><a title="Bluelounge: CableDrop" href="http://www.bluelounge.com/cabledrop.php" target="_blank">Cable-Drop</a> Halter.</strong> Damit fallen keine Kabel mehr von der Tischkaten. Die Ohrst&#246;psel schnell mal am Monitor eingeh&#228;ngt? Kein Problem. Leitungen unterm Tisch verlegen? H&#228;lt.</li>
<li><strong>Eine <a title="Bluelounge: CableBox" href="http://www.bluelounge.com/cablebox.php" target="_blank">Cable-Box</a>. Steckdosenleisten sind Pfui! </strong>die Dinger sehen h&#228;sslich aus und mit Ordnung hat das Steckerdurcheinander meist nix zu tun. Also ab damit in die Cable-Box!</li>
<li><strong><a title="Bluelounge: TheSanctuary" href="http://www.bluelounge.com/thesanctuary.php" target="_blank">The Sanctuary</a>: Der heilige Platz f&#252;r Gadgets.</strong> Ein Multiladeger&#228;t als Ablage-Platte getarnt. Enthalten sind f&#252;r die g&#228;ngigsten Handy- und Gadget-Adapterkabel. Damit landen alle Gadgets &#252;bersichtlich an einem Platz und werden gleichzeitig ohne gro&#223;e Kabelaction aufgeladen.</li>
</ul>
<p>Guckt Euch auf den Bluelounge-Seiten mal in aller Ruhe um. Da gibts auch vorher-nachher-Bildchen zu bestaunen, damit man gleich sieht, was man sich Gutes tut.</p>
<p>Jetzt muss ich mir nur noch was gegen den Bl&#228;tterwust einfallen lassen, der meinen Schreibtisch bedeckt. Ablagef&#228;cher sind doch viel zu offensichtlich.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://www.phpblogger.net/2009/02/05/objektorientierung-vs-performance/' rel='bookmark' title='Permanent Link: Objektorientierung vs. Performance'>Objektorientierung vs. Performance</a></li><li><a href='http://www.phpblogger.net/2007/12/07/mysql-performance-steigern/' rel='bookmark' title='Permanent Link: MySql Performance steigern'>MySql Performance steigern</a></li><li><a href='http://www.phpblogger.net/2007/12/04/performance-durch-php-benchmarks/' rel='bookmark' title='Permanent Link: Performance durch PHP Benchmarks'>Performance durch PHP Benchmarks</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblogger.net/2009/12/11/linktipps-performance-und-produktivitaet/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SVN: Alle neuen Dateien hinzuf&#252;gen</title>
		<link>http://www.phpblogger.net/2009/12/10/svn-alle-neuen-dateien-hinzufuegen/</link>
		<comments>http://www.phpblogger.net/2009/12/10/svn-alle-neuen-dateien-hinzufuegen/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 07:47:08 +0000</pubDate>
		<dc:creator>timi</dc:creator>
		
		<category><![CDATA[Quick Hacks]]></category>

		<category><![CDATA[Add all new Files]]></category>

		<category><![CDATA[Alias]]></category>

		<category><![CDATA[bash]]></category>

		<category><![CDATA[Quick Tipp]]></category>

		<category><![CDATA[Repository]]></category>

		<category><![CDATA[shell]]></category>

		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://www.phpblogger.net/?p=512</guid>
		<description><![CDATA[Mit einem simplen Alias k&#246;nnen kurz und knackig alle neuen Dateien in Unterverzeichnissen zu einem SVN Repository hinzugef&#252;gt werden.]]></description>
			<content:encoded><![CDATA[<p>Ein Lebenszeichen ;) Wer viel mit der Shell arbeitet, wird diesen Tipp vielleicht lieben. Mit einem simplen Alias k&#246;nnen kurz und knackig alle neuen Dateien in Unterverzeichnissen zu einem SVN Repository hinzugef&#252;gt werden:</p>
<pre>svn st|grep ^?|sed s/?//|xargs svn add $1</pre>
<p>Die ganz Faulen unter uns machen es sich sogar noch einfacher mit einem Alias:</p>
<pre>alias svn-add-all-new-files=
'svn st|grep ^?|sed s/?//|xargs svn add $1'</pre>
<p>Funktioniert pr&#228;chtig</p>


<p>Ähnliche Artikel:<ol><li><a href='http://www.phpblogger.net/2007/08/17/argument-list-too-long/' rel='bookmark' title='Permanent Link: Argument list too long'>Argument list too long</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblogger.net/2009/12/10/svn-alle-neuen-dateien-hinzufuegen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Twitter: Totale Verdummung oder n&#252;tzlich?</title>
		<link>http://www.phpblogger.net/2009/04/29/twitter-totale-verdummung-oder-nuetzlich/</link>
		<comments>http://www.phpblogger.net/2009/04/29/twitter-totale-verdummung-oder-nuetzlich/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 08:00:11 +0000</pubDate>
		<dc:creator>timi</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<category><![CDATA[abo]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[client]]></category>

		<category><![CDATA[communties]]></category>

		<category><![CDATA[freundschaften]]></category>

		<category><![CDATA[informationen]]></category>

		<category><![CDATA[Newsletter]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[privat]]></category>

		<category><![CDATA[pwitter]]></category>

		<category><![CDATA[rss]]></category>

		<category><![CDATA[tweetbots]]></category>

		<category><![CDATA[tweets]]></category>

		<category><![CDATA[twitter]]></category>

		<category><![CDATA[twittern]]></category>

		<guid isPermaLink="false">http://www.phpblogger.net/?p=501</guid>
		<description><![CDATA[Ich trete jetzt mal einen Schritt zur&#252;ck und schaue mir Twitter aus einiger Entfernung und m&#246;glichst neutral an, um Features und ggf. Schwachstellen und dieser Technik zu beleuchten. Und Du bist eingeladen! ]]></description>
			<content:encoded><![CDATA[<p><img title="Twitter Logo" src="http://www.phpblogger.net/wp-content/uploads/2009/04/twitter_logo_header.png" alt="" width="155" height="36" align="right" />Gleich zu Beginn: Ich halte nichts davon, mich dar&#252;ber zu informieren, wessen Haufen wann wie gro&#223; und schwer war, nach dem er sich Erleichterung auf dem Stillen &#214;rtchen verschafft hat.</p>
<p>Das war hoffentlich nur die Ausgeburt meine grenzenlosen Fantasie, denn wer ver&#246;ffentlicht schon freiwillig Details seiner Klositzung in aller &#214;ffentlichkeit? Puh, das w&#228;re echt dumm und ekelhaft. Aber ich bin mir sicher, einer hats schon mal getwittert *lach*</p>
<p>Aber ich tippe darauf, das die breite Masse genau diese Themen von Twitterern erwartet und/oder hat. Zugegeben, die M&#246;glichkeit, kostenlose RSS-SMS im Internet via Rechner und mobilen Endger&#228;ten zu verschicken, ist f&#252;r j&#252;ngere PC (okay auch Mac)-Besitzer verlockend.</p>
<p>Ich trete jetzt mal einen Schritt zur&#252;ck und schaue mir <a title="Twitter" href="http://twitter.com/" target="_blank">Twitter</a> aus einiger Entfernung und m&#246;glichst neutral an, um Features und ggf. Schwachstellen und dieser Technik zu beleuchten. <strong>Und Du bist eingeladen!</strong> Scheinbar ist es ja ansteckend, denn wer sich <a title="Nielsen Wire: Twitters Tweet smell of Success" href="http://blog.nielsen.com/nielsenwire/online_mobile/twitters-tweet-smell-of-success/" target="_blank">das Wachstum von Twitter</a> auschaut, sollte beeindruckt sein. 1000% Wachstum w&#252;rden sich viele Web-Applikationen w&#252;nschen - da hinkt sogar Facebook hinterher&#8230;</p>
<p><span id="more-501"></span>Jeder Hype in Ehren, aber was ist nun wirklich dran?</p>
<p><strong>Die Grundlagen</strong></p>
<p>Schon mal getwittert? Dann kannst Du diesen Abschnitt &#252;berspringen ;)</p>
<p>Twitter wird mit allerhand verglichen: Mit kurzen RSS-Feeds oder zum Beispiel SMS. In der Tat kann man zusammenfassen feststellen: Twitter ist ein Mix der beiden Technologien. Die Textmitteilungen, die man Absetzen kann, sind auf 140 Zeichen beschr&#228;nkt - meist verlinken diese &#252;ber einen <a title="Kurz-URL Service TinyURL" href="http://tinyurl.com/" target="_blank">Kurz-URL Service</a> auf eine ausf&#252;hrliche Nachricht im Web. Diese Beschr&#228;nkung ist k&#252;nstlich und gewollt.</p>
<p>Zus&#228;tzlich ist eine Community-Funktion verbaut: Twitter-Mitglieder k&#246;nnen unter einander Tweets (also die Mitteilungen eines Users) abbonieren. Bei Twitter heisst das &#8220;Follow&#8221; (engl. f&#252;r &#8220;folgen&#8221;). Alle Tweets (eigene und jene, denen man folgt), werden zu einem Gesamt-Tweet zusammen gefasst.</p>
<p>&#220;ber Clients im Web oder auf dem eigenen Rechner kann man seinen Tweet (im Prinzip seine eigene Newszusammenstellung) abrufen. Der wird aktualisert, sobald man selbst oder jemand dem man folgt, etwas twittert. Die Darstellungsweise des getwitterten Inhaltes ist von Client zu Client verschieden. Manche bereiten die Inhalt analog zu einem Instant-Messenger in Gespr&#228;chsform auf (das Antworten auf Tweets ist durch eine bestimmte Syntax auch m&#246;glich) oder bilden den Twitter-Inhalt einfach in Protokollform ab. Nat&#252;rlich gibt es auch Multiprotokoll-Clients, die mehrere Protokolle und Communities wie Facebook im Blick haben.</p>
<p>&#196;hnlich wie bei RSS-Feeds funktioniert auch der Abruf von Tweets via HTTP. Das Applikationsprotokoll ist offen und &#252;ber eine <a title="Twitter API" href="http://apiwiki.twitter.com/" target="_blank">API</a> von verschiedenen Programmiersprachen aus nutzbar.</p>
<p>Bin&#228;rdateien werden &#252;brigens wie bei RSS-Feeds nicht direkt &#252;bertragen, sondern k&#246;nnen lediglich verlinkt werden.</p>
<p><strong>Sinnlosigkeit vs. Nutzen</strong></p>
<p>Die Entwickler von Twitter fordern tats&#228;chlich Ihre Nutzer auf: &#8220;Sagt uns, was Ihr gerade macht&#8230;&#8221; Nat&#252;rlich hat die Gruppe von Teens, Kids und verspielten sonstigen Usern diesen Ansatz dankbar aufgegriffen und unmissverst&#228;ndlich begonnen, ihr Privatleben schriftlich auf Twitter zu dokumentieren. In aller &#214;ffentlichkeit, versteht sich. Die Party-Pics liegen bei StudiVZ und Wer-kenn-wen (bewusst nicht verlinkt), der Lebenslauf bei <a title="Xing" href="https://www.xing.com/" target="_blank">Xing</a> (bewusst verlinkt), die beliebtesten Freizeitziele bei <a title="Qype" href="http://www.qype.com/" target="_blank">Qype</a> (&#228;tsch, auch verlinkt).</p>
<p><a title="Eine Community Bilanz" href="http://www.phpblogger.net/2008/03/16/eine-community-bilanz/" target="_blank">&#220;ber Communities</a> hatte ich mich ja bereits vor einem Jahr schon mal ausgelassen&#8230; Mir ist nach wie vor unverst&#228;ndlich, wieso viele ihr komplettes Privatleben in die &#214;ffentlichkeit tranferrieren - freiwillig.</p>
<p>Wie kann man Twitter aber sonst noch verstehen? Als einfache, schnelle Methode, Nachrichten zu verbreiten. Ein gutes Beispiel sind TweetBots. TweetBots werden z.B. dazu verwendet, Informationen im Internet zusammeln und als Tweet rauszublasen.</p>
<p>Ich habe gleich 3 TweetBots abboniert:</p>
<ul>
<li>Neuigkeiten aus meiner Stadt von Qype</li>
<li>Neuigkeiten aus der lokalen Presse</li>
<li>Infos lokaler Gastronomien</li>
</ul>
<p>Gepaart mit einem schlanken und unauff&#228;lligen Client (<a title="Pwitter - Mac Twitter Client" href="http://wiki.github.com/koroshiya1/pwitter" target="_blank">Pwitter</a>; Das Vogelei h&#228;ngt nur als Menulet neben meiner Mac-Uhr und postet &#252;ber Growl) wei&#223; ich also &#252;ber alles aus meiner Stadt bescheid. Informationen, die mich nicht interessieren, sehe ich, aber ignoriere sie.</p>
<p>Ich nutze Twitter also als Schnell-RSS - f&#252;r kurze Informationen, die mir kein RSS-Feed-Abo wert sind. Ausserdem kann man mit Twitter Newsletter oder Notification Mails ersetzen. Applikationen k&#246;nnen also Informationen automatisiert in einen Tweet schieben.</p>
<p>Nat&#252;rlich ist wichtig, das man sich bewusst ist, das alle Informationen auf Twitter gefunden und von jedem gelesen werden k&#246;nnen. Zwar k&#246;nnen viele Clients Direkt-Antworten, die nicht an den Leser direkt sind ausblenden, geladen und gespeichert werden sie jedoch trotzdem.</p>
<p><strong>Praktische Anwendungf&#228;lle</strong></p>
<p>F&#252;r Applikationen bietet sich Twitter an, um unsensible Daten an Clients zu posten. Da muss man aber mit offenen Augen durch die Welt gehen: Wer z.B. seine <a title="PHP Blogger: Updatebenachrichtung f&#252;r Server" href="http://www.phpblogger.net/2009/02/11/automatische-update-benachrichtung-fuer-rootserver/" target="_blank">Serverupdates</a> quer durch die halbe Welt twittert, verr&#228;t Angreifern schnell ein m&#246;gliches Ziel und Schwachstellen wie nicht installierte Pakete gleich mit dazu.</p>
<p>Gerade bei Applikationen sollte man vorsichtig sein: Was auf den ersten Blick sinnvoll erscheint, muss nicht unbedingt jeden erfreuen. Vielleicht m&#246;chte ja ein Benutzer der Applikation gar nicht, das seine CMS-Internen Nachrichten in Twitter gepostet werden? Kann er das Feature dann abschalten?</p>
<p>Twitter als kommerzielle PR-Maschine funktioniert nur so lange, bis Nutzer mit Informationen zugesch&#252;ttet werden und die &#220;bersichtlichkeit verlieren. Immerhin hat man die M&#246;glichkeit, gezielt ausw&#228;hlen zu k&#246;nnen, was interessant ist. Als Mechanimus f&#252;r private PR taugt Twitter grunds&#228;tzlich nur als Sprungbrett. Gute PR ist von schlechter PR so gut trennbar, wie eine Apfelsortet von der N&#228;chsten = eine Geschmacksfrage und deshalb untrennbar.</p>
<p><strong>Fazit</strong></p>
<p>Twitter ist eine feine &#220;bertragungsm&#246;glichkeit unsensibler Daten und Informationen und eine prima Alternative bzw. Erg&#228;nzung zu RSS-Feeds und Newslettern.</p>
<p>Ein gro&#223;es Problem f&#252;r eine professionelle Nutzung sehe ich in der Mitlesbarkeit von Tweets. Man kann zwar geschlossene Gruppen definieren (Die Folgenden muss man zun&#228;chst akzeptieren) - trotzdem sollte man sich bewusst sein, das alle Informationen nicht auf dem eigenen Server liegen (wie etwa RSS-Feeds), sondern bei einem Provider gespeichert sind, auf dessen Wohlwollen man angewiesen ist.</p>
<p>Wenn man wissen will, welche Per&#252;cke sich der Nachbar heute aufgesetzt hat und welche Farbe das H&#246;schen von der Dame gegen&#252;ber hat, KANN das via Twitter erfahren. MUSS aber nicht - Gezwungen wird n&#228;mlich keiner.</p>
<p>Ich nutze Twitter gerne: Die Tweets denen ich folgen m&#246;chte, suche ich sorgsam aus. So, dass es nicht zu viele werden. Im Gegenzug habe ich Newsletter abbestellt und RSS Feed aussortiert - durch meine schlanken und unauff&#228;lligen Twitter-Client kann ich Uninteressantes vorbeiziehen lassen und beachte nur f&#252;r mich wesentliche Mitteilungen.</p>
<p>&#220;brigens: Die 140 Zeichen empfinge ich als angenehm &#252;bersichtlich. Wer nur wenige Zeichen zum Texten zur Verf&#252;gung hat, macht sich um so mehr Gedanken &#252;ber den Inhalt. So kann ich schon auf einen Blick einsch&#228;tzen, ob eine Information f&#252;r mich wirklich wichtig ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpblogger.net/2009/04/29/twitter-totale-verdummung-oder-nuetzlich/feed/</wfw:commentRss>
		</item>
		<item>
		<title>iCal-Dateien generieren mit PHP</title>
		<link>http://www.phpblogger.net/2009/04/28/ical-dateien-generieren-mit-php/</link>
		<comments>http://www.phpblogger.net/2009/04/28/ical-dateien-generieren-mit-php/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 10:48:19 +0000</pubDate>
		<dc:creator>timi</dc:creator>
		
		<category><![CDATA[PHP (Allgemein)]]></category>

		<category><![CDATA[Usability]]></category>

		<category><![CDATA[creator]]></category>

		<category><![CDATA[erstellen]]></category>

		<category><![CDATA[generator]]></category>

		<category><![CDATA[generieren]]></category>

		<category><![CDATA[ical]]></category>

		<category><![CDATA[klasse]]></category>

		<category><![CDATA[objekt]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.phpblogger.net/?p=499</guid>
		<description><![CDATA[Eine M&#246;glichkeit, seinen Benutzern die Usability zu erleichten, kann bedeuten, Events aus einem Terminkalender downloadbar zu machen. So ziemlich jedes aktive Unternehmen, das sich zeitgem&#228;&#223; im Internet pr&#228;sentiert, stellt seinen Benutzern eine Terminliste bereit.]]></description>
			<content:encoded><![CDATA[<p>Komfort bemerkt man nicht. Er ist einfach da oder eben nicht. Wenn man Ihn nicht mehr hat, vermisst man ihn schmerzlich - <a title="Wikipedia: Komfort" href="http://de.wikipedia.org/wiki/Komfort" target="_blank">Wikipedia definiert Komfort</a> unter anderem damit, das bestimmte Ger&#228;te oder Funktionen die Arbeit vereinfachen&#8230;</p>
<p>Alles nix neues? Genau - obwohl jeder wei&#223;, was Komfort ist, werden viel zu wenig Websites komfortabel gestaltet oder mit schlanken, schnellen und vor allem komfortabelen Funktionen ausgestattet. Schnell werden feine Funktionen als Luxus deklariert und ins dunkle Entwickler-K&#228;mmerlein eingesperrt: Die Usability leidet.</p>
<p>Eine M&#246;glichkeit, seinen Benutzern die Usability zu erleichten, kann bedeuten, Events aus einem Terminkalender downloadbar zu machen. So ziemlich jedes aktive Unternehmen, das sich zeitgem&#228;&#223; im Internet pr&#228;sentiert, stellt seinen Benutzern eine Terminliste bereit.</p>
<p><span id="more-499"></span>Was k&#246;nnte man dort Sinnvolles reinpacken?</p>
<ul>
<li>Messetermine mit Standposition</li>
<li>Termine von Weiterbildungsseminaren</li>
<li>Sonstige Events / Veranstaltungen</li>
<li>Happy-Hours (z.B. bei Gastronomien)</li>
<li>Betriebsferien</li>
</ul>
<p>Jede beliebige Newsliste mit einem downloadbaren Event auszustatten, w&#228;re sicherlich etwas &#252;bertrieben. Mal kurz &#252;berlegen schadet hier also nicht.</p>
<p>Welches Format w&#228;re wohl das Richtige? Okay, wer kurz in den Titel schaut, hat es schnell raus - <a title="iCal-Format Beschreibung (engl.)" href="http://www.kanzaki.com/docs/ical/" target="_blank">iCal</a> w&#228;re das Format der Wahl, wenn es um downloadbare Dateien gehen soll. So ziemlich jeder Kalender kann es (Outlook, iCal, Gmail und viele weitere) - gute Voraussetzungen also, oder?</p>
<p>Prinzipiell gibt es zwei M&#246;glichkeiten:</p>
<ol>
<li>Man exportiert eine statische Datei aus seinem Kalender und verlinkt sie mit dem Event auf der Website oder</li>
<li>Man generiert aus seiner CMS-Datenbank eben mal schnell eine iCal-Datei.</li>
</ol>
<p>Auch hier hilft der Titel weiter ;) Wir schauen uns mal einen Generator f&#252;r PHP an: die Klasse <a title="iCalcreator: iCal Dateien mit PHP generieren" href="http://www.kigkonsult.se/iCalcreator/" target="_blank">iCalcreator</a> hilft uns weiter. Die Webseite sieht zwar ziemlich beschissen aus und die Dokumentation ist auch etwas sp&#228;rlich - trotzdem er&#246;ffnet uns das Tool viele M&#246;glichkeiten. Denn es ist ziemlich flexibel, was die Ausgabe und Formatierung angeht.</p>
<p>Mit einigen wenigen Zeilen hat man das Objekt initialisiert:</p>
<pre class="php">$v = new vcalendar();
$v-&gt;setConfig('unique_id', 'phpblogger.net');
$v-&gt;setProperty('method', 'PUBLISH' );</pre>
<p>Neue Events werden auch ziemlich easy erzeugt:</p>
<pre class="php">$vevent = new vevent();
$vevent-&gt;setProperty('DTSTART;VALUE=DATE', date("Ymd", $ts));
$vevent-&gt;setProperty('DTEND;VALUE=DATE', date("Ymd", $ts));
$vevent-&gt;setProperty('SUMMARY', $title);</pre>
<p>Mit&#8230;</p>
<pre class="php">$v-&gt;setComponent($vevent);</pre>
<p>&#8230;wird der Decorator best&#252;ckt und via&#8230;</p>
<pre class="php">$v-&gt;returnCalendar();</pre>
<p>&#8230;an den Browser weitergeleitet. Das obige Beispiel zeigt gleich, wie man einen mehrt&#228;gigen Event ohne Uhrzeit generiert (Was im Howto der Klasse leider fehlt).</p>
<p>Nat&#252;rlich sind auch Events m&#246;glich, die nur wenige Stunden oder Minuten dauern, Wiederholungen aller Art und ganze Sammelkalender (Wer mehr als einen Termin in eine Kalenderdatei packen m&#246;chte.</p>
<p>Wer Applikationen baut, kann sicher jede Menge Anwendungsf&#228;lle entdecken, den generierte iCal-Files lassen sich auch an Mails anh&#228;ngen oder twittern.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://www.phpblogger.net/2008/02/11/zufalls-passworte-zu-generieren/' rel='bookmark' title='Permanent Link: Zufalls-Passworte zu generieren'>Zufalls-Passworte zu generieren</a></li><li><a href='http://www.phpblogger.net/2008/02/08/jquery-update/' rel='bookmark' title='Permanent Link: jQuery Update'>jQuery Update</a></li><li><a href='http://www.phpblogger.net/2007/10/09/rss-feeds-mit-php-generieren/' rel='bookmark' title='Permanent Link: RSS Feeds mit PHP generieren'>RSS Feeds mit PHP generieren</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblogger.net/2009/04/28/ical-dateien-generieren-mit-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP hasst mich</title>
		<link>http://www.phpblogger.net/2009/03/02/php-hasst-mich/</link>
		<comments>http://www.phpblogger.net/2009/03/02/php-hasst-mich/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 13:35:41 +0000</pubDate>
		<dc:creator>timi</dc:creator>
		
		<category><![CDATA[PHP (Allgemein)]]></category>

		<category><![CDATA[Usability]]></category>

		<category><![CDATA[Funktion]]></category>

		<category><![CDATA[Grossbuchstaben]]></category>

		<category><![CDATA[Namen]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[ucfirst]]></category>

		<category><![CDATA[ucwords]]></category>

		<guid isPermaLink="false">http://www.phpblogger.net/?p=494</guid>
		<description><![CDATA[Es handelt sich um die PHP-Funktion "ucwords": Die soll (eigentlich) in einzelnen Worten in einem String den Anfangsbuchstaben in Grossbuchstaben und alle restlichen Buchstaben in Kleinbuchstaben umwandeln. Funktioniert prima, so lange es sich um einen String in Kleinbuchstaben handelt.]]></description>
			<content:encoded><![CDATA[<p>;) Okay, kleines <a title="PHP hates me" href="http://www.phphatesme.com/" target="_blank">Wortspiel</a>. Nils verzeiht mir hoffentlich, dass ich seinen Blog-Namen missbrauche. Aber eigentlich bin ich ganz im Sinn der Sache unterwegs. Gerade wurde mir ein Bug reported, von dem ich dachte &#8220;Sowas gibts doch gar nicht!&#8221;. Oh doch, gibt es.</p>
<p>Es handelt sich um die PHP-Funktion &#8220;<a title="PHP Funktion: ucwords" href="http://de.php.net/ucwords">ucwords</a>&#8220;: Die soll (eigentlich) in einzelnen Worten in einem String den Anfangsbuchstaben in Grossbuchstaben und alle restlichen Buchstaben in Kleinbuchstaben umwandeln. Funktioniert prima, so lange es sich um einen String in Kleinbuchstaben handelt. Wer einen String mit Grossbuchstaben &#252;bergibt, wird entt&#228;uscht: Nix passiert.</p>
<p><span id="more-494"></span>Das gleiche &#252;brigens bei &#8220;<a title="PHP Funktion: ucfirst" href="http://de.php.net/manual/de/function.ucfirst.php" target="_blank">ucfirst</a>&#8220;. Dieses Verhalten ist zwar in einem Beispiel dokumentiert, aber nicht begr&#252;ndet. Wer macht so eine Scheisse bitte? Selbst wenn es einen Grund gibt, solche impliziten Verhaltensweisen zu implementieren, sollten Sie aus dem Namen der Funktion hervorgehen oder mit einem Flag deaktivierbar sein.</p>
<p>Also nur so als Tipp: Wenn eine Funktion etwas macht, was nicht direkt aus ihrem Namen hervorgeht, sollte</p>
<ul>
<li>entweder die Funktion umbenannt werden,</li>
<li>um ein Flag zum Deaktivieren erweitert werden,</li>
<li>oder am Besten: so umgebaut werden, das sie das tut, was man von ihr erwartet&#8230;</li>
</ul>
<p>Achso: Mit Unit-Tests w&#228;re das nicht passiert ;)</p>


<p>Ähnliche Artikel:<ol><li><a href='http://www.phpblogger.net/2007/07/25/aufwaertkompatibel-zu-php-6/' rel='bookmark' title='Permanent Link: Aufw&#228;rtkompatibel zu PHP 6'>Aufw&#228;rtkompatibel zu PHP 6</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblogger.net/2009/03/02/php-hasst-mich/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

