<?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>Martin Specht</title>
	<atom:link href="http://www.martin-specht.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.martin-specht.com</link>
	<description>Multimedia-Producer</description>
	<lastBuildDate>Sun, 09 Oct 2011 21:35:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Deniz Gencler &#8211; JQuery at it&#8217;s best</title>
		<link>http://www.martin-specht.com/2011/10/09/deniz-gencler-jquery-at-its-best/</link>
		<comments>http://www.martin-specht.com/2011/10/09/deniz-gencler-jquery-at-its-best/#comments</comments>
		<pubDate>Sun, 09 Oct 2011 21:27:33 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Technik]]></category>
		<category><![CDATA[Webseite]]></category>
		<category><![CDATA[Akkordion]]></category>
		<category><![CDATA[Audio Player]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JPlayer]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[JQuery Tools]]></category>
		<category><![CDATA[JQuery UI]]></category>
		<category><![CDATA[Overlay]]></category>
		<category><![CDATA[Plug Ins]]></category>
		<category><![CDATA[Skalierter Hintergrund]]></category>

		<guid isPermaLink="false">http://www.martin-specht.com/?p=153</guid>
		<description><![CDATA[Heute ist endlich mal wieder ein Projekt fertig geworden, bei dem man sehen kann, dass f&#252;r Dynamik nicht zwingend Flash notwendig ist. JQuery wird immer beliebter und so stehen f&#252;r alle m&#246;glichen Probleme auch mehr oder weniger qualifizierte Plug-Ins zur Verf&#252;gung.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.martin-specht.com/wp-content/uploads/2011/10/logo_deniz_gencler.png"><img class="size-medium wp-image-156 alignnone" title="logo_deniz_gencler" src="http://www.martin-specht.com/wp-content/uploads/2011/10/logo_deniz_gencler-300x31.png" alt="Logo Deniz Gencler" width="300" height="31" /></a></p>
<p>Heute ist endlich mal wieder ein Projekt fertig geworden, bei dem man sehen kann, dass f&#252;r Dynamik nicht zwingend Flash notwendig ist. JQuery wird immer beliebter und so stehen f&#252;r alle m&#246;glichen Probleme auch mehr oder weniger qualifizierte Plug-Ins zur Verf&#252;gung.</p>
<h3>Skalierende Hintergrundbilder</h3>
<p>Nach ein paar Anfangsschwierigkeiten lie&#223; sich das JQuery-Plug-In Supersized durchaus dazu bewegen, Bilder auf volle Viewport-Gr&#246;&#223;e zu skalieren. Weiterhin hat dieses Plug-In einige nette Zusatzfeatures, beispielsweise eine Galeriefunktion, so dass man skalierte Bilder mit Effekten tauschen kann. Das Plug-in ist verf&#252;gbar unter</p>
<p><a title="www.buildinternet.com/project/supersized" href="http://www.buildinternet.com/project/supersized" target="_blank">www.buildinternet.com/project/supersized</a></p>
<h3>Audio/Videoplayer</h3>
<p>F&#252;r den Audioplayer hat sich bereits im Projekt MaxxTone der JPlayer bew&#228;hrt. &#220;ber seine Skins l&#228;sst sich der doch erst sehr dr&#246;ge daherkommende Player komplett umstylen, so dass eine Anpassung auf das Design einer jeden Webseite m&#246;glich ist. Der Player nutzt HTML5- und Flash-Techniken zur Wiedergabe, so dass auch moderne Ger&#228;te in der Lage sind, ohne Flash Medien wiederzugeben. Im Gegensatz zu vielen anderen L&#246;sungen ist der JPlayer mit der MIT-Lizenz ausgestattet und daher rechtlich unproblematisch einzubetten.</p>
<p><a title="www.jplayer.org" href="http://www.jplayer.org/" target="_blank">www.jplayer.org</a></p>
<h3>Inpage-Popups und Akkordion</h3>
<p>F&#252;r diese Elemente kamen die beiden gr&#246;&#223;ten JQuery-Plugin-Bibliotheken zum Einsatz. Das Inpage-Popup entstammt in der Basis dem Overlay aus den JQuery-Tools. Das Akkordion ist ohne Anpassung aus dem JQuery-UI entnommen. Die Plug-Ins sind verf&#252;gbar unter</p>
<p><a title="flowplayer.org/tools/overlay" href="http://flowplayer.org/tools/overlay/index.html" target="_blank">www.flowplayer.org/tools/overlay/index.html</a></p>
<p><a title="jqueryui.com" href="http://jqueryui.com/" target="_blank">www.jqueryui.com</a></p>
<h3>Good Luck Deniz</h3>
<p>Das Projekt ist gestartet und nun bleibt mir nur noch, Deniz viel Erfolg zu w&#252;nschen. Wer sich das Projekt ansehen m&#246;chte, kann unter <a title="www.deniz-gencler.de" href="http://www.deniz-gencler.de" target="_blank">www.deniz-gencler.de</a> den einen oder anderen Blick riskieren.</p>
<p><a title="www.deniz-gencler.de" href="http://www.deniz-gencler.de" target="_blank">www.deniz-gencler.de</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.martin-specht.com/2011/10/09/deniz-gencler-jquery-at-its-best/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Projekt &#8220;Maxx Tone&#8221;</title>
		<link>http://www.martin-specht.com/2011/07/13/projekt-maxxtone/</link>
		<comments>http://www.martin-specht.com/2011/07/13/projekt-maxxtone/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 10:51:42 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Webseite]]></category>
		<category><![CDATA[Frankfurt am Main]]></category>
		<category><![CDATA[JPlayer]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Karussell]]></category>
		<category><![CDATA[Maxx Tone]]></category>
		<category><![CDATA[Projekt]]></category>
		<category><![CDATA[Tonstudio]]></category>

		<guid isPermaLink="false">http://www.martin-specht.com/?p=136</guid>
		<description><![CDATA[P&#252;nktlich zur aktuellen Media Analyse II/2011 geht das Projekt Maxx Tone online. Maxx Tone ist ein Sounddesign- und Tonstudio im FFH-Haus in Bad Vilbel. Viele der bekannten Radiospots stammen aus der Soundfeder von Maxx Tone.]]></description>
			<content:encoded><![CDATA[<p>P&#252;nktlich zur aktuellen Media Analyse II/2011 geht das Projekt Maxx Tone online. Maxx Tone ist ein Sounddesign- und Tonstudio im FFH-Haus in Bad Vilbel. Viele der bekannten Radiospots stammen aus der Soundfeder von Maxx Tone.</p>
<div id="attachment_138" class="wp-caption alignleft" style="width: 310px"><a href="http://www.martin-specht.com/wp-content/uploads/2011/07/maxxtone.jpg"><img class="size-medium wp-image-138" title="Maxx Tone" src="http://www.martin-specht.com/wp-content/uploads/2011/07/maxxtone-300x194.jpg" alt="Maxx Tone Startseite" width="300" height="194" /></a><p class="wp-caption-text">Maxx Tone Startseite</p></div>
<p>Neben den defacto-Standards meiner Webprojekte (960-Grid System, jQuery und jQuery-Plug-Ins) ist dieses Projekt nat&#252;rlich XHTML-konform. Besondere Herausforderungen war das Karussell mit integrierten MP3-Player, mit welchem die Referenzbeispiele des Tonstudios gezeigt und abgespielt werden sollen.</p>
<p>Zum Einsatz kamen hierf&#252;r das jQuery-PlugIn CloudCarousel (<a title="CloudCarousel" href="http://plugins.jquery.com/project/CloudCarousel" target="_blank">http://plugins.jquery.com/project/CloudCarousel</a>) von „Professor Cloud“ sowie das jPlayer-Plug-In (<a title="jPlayer" href="http://www.jplayer.org/" target="_blank">http://www.jplayer.org/</a>) zur Wiedergabe der MP3-Dateien.</p>
<p>Lediglich 3 Zeilen Codever&#228;nderung waren notwendig, um die Interaktion des Karussells mit dem jPlayer zu gew&#228;hrleisten, da das CloudCarousel leider noch nicht auf Events ausgelegt ist.</p>
<p>Im Testing liefen dies Seiten auf IE8, Firefox 3/4/5 sowie Safari problemlos. F&#252;r iPad, iPhone und Browser ohne Flash-Unterst&#252;tzung wurden ad&#228;quate Alternativen integriert, um die Anzeige gleichwertig zu gew&#228;hrleisten.</p>
<p>Zu betrachten ist das Projekt unter <a title="Maxx Tone" href="http://www.maxxtone.de" target="_blank">www.maxxtone.de</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martin-specht.com/2011/07/13/projekt-maxxtone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Projekt &#8220;kulturgeleit&#8221;</title>
		<link>http://www.martin-specht.com/2011/04/02/projekt-kulturgeleit/</link>
		<comments>http://www.martin-specht.com/2011/04/02/projekt-kulturgeleit/#comments</comments>
		<pubDate>Sat, 02 Apr 2011 16:40:09 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Leitartikel]]></category>

		<guid isPermaLink="false">http://www.martin-specht.com/?p=126</guid>
		<description><![CDATA[P&#252;nktlich zum ersten April startete die Webseite kulturgeleit – ein Projekt von Stephanie Brodel. Hierbei geht es um hochwertige kulturelle Begleitungen in Berlin. Man kann mit kulturgeleit Berliner Museen entdecken oder auch Werkst&#228;tten verschiedener K&#252;nstler entdecken.]]></description>
			<content:encoded><![CDATA[<p>P&#252;nktlich zum ersten April startete die Webseite kulturgeleit – ein Projekt von Stephanie Brodel. Hierbei geht es um hochwertige kulturelle Begleitungen in Berlin. Man kann mit kulturgeleit Berliner Museen und auch Werkst&#228;tten entdecken.</p>
<p>Technisch war im Webprojekt Platz f&#252;r neue jQuery-Plugins und, wie mittlerweile fast in jedem Projekt, ebenso f&#252;r Cufon. W&#228;hrend Cufon wie immer f&#252;r den gelungenen Level an Corporate Identity sorgt, sind in diesem Projekt jquery-tools und ein Scrollable-Plugin verbaut.</p>
<p>Die jQuery-tools (<a title="jQuery Tools" href="http://flowplayer.org/tools/index.html" target="_blank">http://flowplayer.org/tools/index.html</a>) sind in diesem Projekt mit den Komponenten Scrollable (Bildwechsel) sowie Overlay (Kontaktformularpopup) verbaut. Besonders interessant ist die L&#246;sung des Overlays. Hierbei bieten die jQuery-Tools nur eine Basis, um Overlay-Popups zu erstellen. Mit einer geschickten Kombination ist es jedoch m&#246;glich, wie mit jedem anderen Overlay-Popup zu arbeiten. Hier der passende Quellcode:</p>
<p><code><br />
$(document).ready(function() {<br />
$("a[rel]").overlay({ mask: '#928959', onBeforeLoad:<br />
function() {<br />
var wrap = this.getOverlay().find(".contentWrap");<br />
wrap.html('&lt;iframe frameborder="0" style="width: '+(this.getOverlay().innerWidth())+'px; height:'+<br />
(this.getOverlay().innerHeight())+'px; border: none; margin: none;" src="'+<br />
htmlencode(this.getTrigger().attr("href"), true)+'"&gt;&lt;/iframe&gt;')<br />
}<br />
});<br />
});</code></p>
<p>Hinzu kommt die Funktion htmlencode, welche dem htmlentities in PHP entspricht.</p>
<p><code><br />
function htmlencode(s, quotes){<br />
if ( !quotes )<br />
return $("&lt;div/&gt;").text(s).html();<br />
else<br />
return $("&lt;div/&gt;").text(s).html().replace(/"/g, '&amp;quot;').replace(/'/, '&amp;#039;');<br />
}</code></p>
<p>Damit ist das Overlay entsprechend umger&#252;stet und kann als browser-kompatibles InPage-Popup genutzt werden.</p>
<p>Ebenso neu eingesetzt ist das Plugin jScrollPane von Kelvin Luck (<a title="jScrollPane" href="http://www.kelvinluck.com/projects/jscrollpane-custom-cross-browser-scrollbars/" target="_blank">http://www.kelvinluck.com</a>), welches in Version 2.0 erschienen ist. Es bietet hervorragende M&#246;glichkeiten, Scrollbars zu skinnen bzw. die Browser-Scrollbars zu ersetzen. Einzige Unzul&#228;nglichkeit, man kann die Scrollbars nicht vom Inhalt separieren.</p>
<p>Bleibt nur noch, dem Projekt kulturgeleit gutes Gelingen zu w&#252;nschen!</p>
<p><a title="kulturgeleit.de" href="http://www.kulturgeleit.de" target="_blank">kulturgeleit.de</a> / <a title="kulturgeleit (englisch)" href="http://www.kulturgeleit.com" target="_blank">kulturgeleit.com</a></p>
<p><a title="jQuery-Tools" href="http://flowplayer.org/tools/documentation/index.html" target="_blank">jQuery tools</a></p>
<p><a title="jScrollPAne" href="http://www.kelvinluck.com/projects/jscrollpane-custom-cross-browser-scrollbars/" target="_blank">jScrollPane</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.martin-specht.com/2011/04/02/projekt-kulturgeleit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PLESK 10 und Dr. Web</title>
		<link>http://www.martin-specht.com/2011/02/04/plesk-10-und-dr-web/</link>
		<comments>http://www.martin-specht.com/2011/02/04/plesk-10-und-dr-web/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 14:19:10 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.martin-specht.com/?p=122</guid>
		<description><![CDATA[Seit PLESK 9.5 ist PLESK recht mitteilungsbed&#252;rftig geworden. Zu dumm nur, dass einige Mitteilungen den Server-Admin nur &#252;ber Umwege erreichen. Der Dr. Web-Updater  sendet seine Informationen immer an drweb@&#60;hostname&#62;. Zu dumm nur, dass es zumindest auf Debian f&#252;r diese E-Mailadresse weder ein Postfach noch einen E-Mail-Alias gibt, welcher wirksam wird. So erreichen die Nachrichten den [...]]]></description>
			<content:encoded><![CDATA[<p>Seit PLESK 9.5 ist PLESK recht mitteilungsbed&#252;rftig geworden. Zu dumm nur, dass einige Mitteilungen den Server-Admin nur &#252;ber Umwege erreichen. Der Dr. Web-Updater  sendet seine Informationen immer an drweb@&lt;hostname&gt;. Zu dumm nur, dass es zumindest auf Debian f&#252;r diese E-Mailadresse weder ein Postfach noch einen E-Mail-Alias gibt, welcher wirksam wird. So erreichen die Nachrichten den Server-Administrator nur als  &#8220;failure notice&#8221;.</p>
<p><code>Hi. This is the qmail-send program at &lt;HOST&gt;.(none).<br />
I'm afraid I wasn't able to deliver your message to the following addresses.<br />
This is a permanent error; I've given up. Sorry it didn't work out.<br />
&lt;root@&lt;HOST&gt;&gt;:<br />
Sorry, I couldn't find any host named &lt;HOST&gt; (#5.1.2)</code></p>
<p><code>--- Below this line is a copy of the message.<br />
Return-Path: &lt;anonymous@&lt;HOST&gt;&gt;<br />
Received: (qmail 23991 invoked by uid 107); 3 Feb 2011 16:00:09 +0100<br />
Delivered-To: drweb@&lt;HOST&gt;<br />
Received: (qmail 23986 invoked by uid 107); 3 Feb 2011 16:00:09 +0100<br />
Date: 3 Feb 2011 16:00:03 +0100<br />
Message-ID: &lt;20110203150003.23972.qmail@&lt;HOST&gt;&gt;<br />
From: root@&lt;HOST&gt; (Cron Daemon)<br />
To: drweb@&lt;HOST&gt;<br />
Subject: Cron &lt;drweb@&lt;HOST&gt;&gt; /opt/drweb/update.pl<br />
Content-Type: text/plain; charset=UTF-8<br />
X-Cron-Env: &lt;SHELL=/bin/sh&gt;<br />
X-Cron-Env: &lt;HOME=/var/drweb&gt;<br />
X-Cron-Env: &lt;PATH=/usr/bin:/bin&gt;<br />
X-Cron-Env: &lt;LOGNAME=drweb&gt;<br />
...<br />
</code></p>
<p>So ist die Abhilfe nat&#252;rlich so einfach und simpel wie die Ursache. Ein Eintrag in die Alias-Tabelle reicht aus, um alle E-Mails an root weiterzuleiten:</p>
<p><code><br />
# /etc/aliases<br />
mailer-daemon: postmaster<br />
postmaster: root<br />
nobody: root<br />
hostmaster: root<br />
usenet: root<br />
news: root<br />
webmaster: root<br />
www: root<br />
ftp: root<br />
abuse: root<br />
noc: root<br />
security: root<br />
<strong>drweb: root</strong><br />
</code></p>
<p>Danach noch schnell den Mailserver neu gestartet und schon erreichen den Server-Administrator die E-Mails auf regul&#228;rem Weg.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martin-specht.com/2011/02/04/plesk-10-und-dr-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webseite: HOLE MAGAZINE</title>
		<link>http://www.martin-specht.com/2011/01/14/webseite-hole-magazine/</link>
		<comments>http://www.martin-specht.com/2011/01/14/webseite-hole-magazine/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 17:51:04 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[PHP-Projekte]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Webseite]]></category>

		<guid isPermaLink="false">http://www.martin-specht.com/?p=116</guid>
		<description><![CDATA[... oder wie Projekte &#252;blicherweise beginnen.

Kurz vor Weihnachten erhielt ich den Anruf meines Frankfurter Grafikers, ob ich ihm einmal kurz helfen k&#246;nne, er bekommt ein Flash nicht mittig auf die Seite zentriert. Als ordentlicher Webprogrammierer ist dies nat&#252;rlich kein Problem und so sch&#252;ttelte ich kurz mit dem linken Arm und siehe da ... die &#252;bliche Zentrierung fiel wie von Geisterhand in das offene Skype-Fenster und funktionierte.]]></description>
			<content:encoded><![CDATA[<h2>&#8230; oder wie Projekte &#252;blicherweise beginnen.</h2>
<p>Kurz vor Weihnachten erhielt ich den Anruf meines Frankfurter Grafikers, ob ich ihm einmal kurz helfen k&#246;nne, er bekommt ein Flash nicht mittig auf die Seite zentriert. Als ordentlicher Webprogrammierer ist dies nat&#252;rlich kein Problem und so sch&#252;ttelte ich kurz mit dem linken Arm und siehe da &#8230; die &#252;bliche Zentrierung fiel wie von Geisterhand in das offene Skype-Fenster und funktionierte.</p>
<h2>Wie ein Projekt entsteht &#8230;</h2>
<p>Das Thema hatte sich nahezu erledigt und war mir auch schon aus dem Sinn, als kurz vor Weihnachten ein weiterer Hilfeschrei kam: &#8220;Martin, kannst du mir einen Facebook-Button einbauen?&#8221; Nat&#252;rlich w&#252;rde das gehen, allerdings begann jetzt die Phase, &#252;ber das Gesamtk0nzept nachzudenken und kurz dar&#252;ber nachzudenken, ob der Weg eigentlich richtig ist. Also wieder drei Schritte zur&#252;ck und nachgeschaut, was passieren soll und was die eigentlichen Anforderungen sind. Und wie dies mit Wespennestern so ist, man sticht sehr schnell rein und &#8230; das Projekt war geboren.</p>
<h2>Das Hole Magazine</h2>
<p>Julian Laidig hat als Fotograf mit einem kleinen Projekt ein ganzes Magazin voller Themen rund um das Thema Modelling, Styling und Fotografie gestartet. Dabei entstanden neben sehr schicken Fotos auch Produktionsvideos und das Online-Magazin.</p>
<p>Dank moderner Techniken ist das Magazin mit Hilfe von <a title="Link zu Issue" href="http://www.issue.com" target="_blank">issue.com</a> im Internet anzeigbar, enth&#228;lt realistische Bl&#228;tterfunktionen und zur Erh&#246;hung der Lesbarkeit auch eine Skalierung. Dabei musste kein Qualit&#228;tsverlust hingenommen werden, sowohl Bilder als auch Texte blieben in der Online-Version gestochen scharf.</p>
<p>Nach und nach ergaben sich im Gespr&#228;ch weitere Anforderungen:</p>
<ol>
<li>Das bl&#228;tterbare Magazin stellt die Hauptseite des Auftritts dar.</li>
<li>Sowohl <a title="Link zum Fotografen Julian Laidig" href="http://www.julianlaidig.com/" target="_blank">Julian Laidig</a> als Fotograf als auch <a title="Link zum Grafiker Ondrej Navratil" href="http://www.beqiu.com/" target="_blank">Ondrej Navratil</a> als Grafiker sollten verlinkt werden</li>
<li>Eine Kontaktm&#246;glichkeit via E-Mail sollte m&#246;glich sein, allerdings ohne die Preisgabe f&#252;r SPAM-Robots</li>
<li>Das Making-Of-Video sollte sich in einem In-Frame-Popup &#252;ber dem bl&#228;tterbaren Magazin &#246;ffnen</li>
<li>Es muss ein Impressum geben, das auch ohne Flash und andere Script-Technologien zu &#246;ffnen ist</li>
<li>&#8220;Gef&#228;llt mir&#8221; darf nicht fehlen &#8211; die Verkn&#252;pfung mit Social Media soll erstellt werden.</li>
</ol>
<h2>Verdammt viel Holz f&#252;r eine kleine zentrierte Seite &#8230;</h2>
<p>F&#252;r jede dieser Einzelanforderungen ist eine L&#246;sung verf&#252;gbar, diese zusammenzubringen und insgesamt funktional zu machen war die Schwierigkeit:</p>
<p>1. Das Flash von Issue.com wird mittels IFrame eingebettet.</p>
<p>2. F&#252;r die Darstellung der externen Seiten wird eine Verlinkung in einem neuem Fenster angestrebt.</p>
<p>3. F&#252;r die dynamischen Funktionen wird JQuery als performantes und einfaches Framework genutzt. F&#252;r die SPAM-Vermeidung dient ein einfaches, eigen erstelltes Script, welches die E-Mail-Adressen nachtr&#228;glich korrigiert. Die In-Frame-Popups werden mit Hilfe von Fancy Box &#8211; einer Erweiterung f&#252;r JQuery &#8211; dargestellt. Optisch f&#252;gen sich diese Popups hervorragend in den Stil des Magazins ein.</p>
<p>Nat&#252;rlich klingt dies alles nach Baukasten-System, aber leider passt nicht immer alles zusammen und so musste das Fancy-Popup tats&#228;chlich noch um eine Option erweitert werden: IFrame ausblenden, wenn sich das Popup &#246;ffnet. Warum? Das Flash auf Issue.com leuchtete nat&#252;rlich durch, ein Problem, was sich noch &#252;ber Jahre nicht aufl&#246;sen wird, obwohl es bereits L&#246;sungen gibt.</p>
<h2>Was ist, was wird?</h2>
<p>Entstanden ist eine optisch repr&#228;sentative Landing-Page- welche verschiedene Webkomponenten zusammen f&#252;hrt und das HOLE MAGAZINE repr&#228;sentiert.Das Magazin ist mittlerweile sogar durch das &#246;sterreichische Boulevard-Fernsehen gegangen und es sind in jedem Fall sehr sch&#246;ne Bilder und Videos entstanden</p>
<p>Sofern es eine Fortsetzung des Low-Budget-Projekts gibt, stehen insbesondere hier folgende Themen aus:</p>
<ul>
<li>Wie werden Archivierungen alter Magazine durchgef&#252;hrt</li>
<li>Wie k&#246;nnen die Magazintexte von Google indiziert werden</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.martin-specht.com/2011/01/14/webseite-hole-magazine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Einfaches Firewall-Script f&#252;r Debian</title>
		<link>http://www.martin-specht.com/2011/01/14/einfaches-firewall-script-fuer-debian/</link>
		<comments>http://www.martin-specht.com/2011/01/14/einfaches-firewall-script-fuer-debian/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 16:40:46 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Leitartikel]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Technik]]></category>

		<guid isPermaLink="false">http://www.martin-specht.com/?p=98</guid>
		<description><![CDATA[F&#252;r alle Debian-Serverneulinge stellt Aptitude eine einfache Konfigurationsm&#246;glichkeit f&#252;r eine "Desktop-Firewall" zur Verf&#252;gung. Das Script l&#228;sst sich einfach konfigurieren und ist sowohl f&#252;r Neulinge als auch f&#252;r Profis eine einfache M&#246;glichkeit, die Konfiguration von IPTables vorzunehmen.]]></description>
			<content:encoded><![CDATA[<p>F&#252;r alle Debian-Serverneulinge stellt Aptitude eine einfache Installations- und Konfigurationsm&#246;glichkeit f&#252;r eine &#8220;Desktop-Firewall&#8221; zur Verf&#252;gung. Das Script l&#228;sst sich einfach konfigurieren und ist sowohl f&#252;r Neulinge als auch f&#252;r Profis eine einfache M&#246;glichkeit, die Konfiguration von IPTables vorzunehmen.</p>
<p>Das entsprechende Paket hei&#223;t arno-iptables-firewall. Die Projektseiten hierf&#252;r sind bei <a title="Freameat Prject Page" href="http://freshmeat.net/projects/iptables-firewall/?topic_id=151" target="_blank">Freshmeat</a> oder auf der <a title="Arno's Prjects" href="http://rocky.eld.leidenuniv.nl/joomla/index.php?option=com_content&amp;view=article&amp;id=45&amp;Itemid=63" target="_blank">Autorenseite</a> zu finden.</p>
<h2>Notwendiges Wissen f&#252;r die Installation</h2>
<p>Vorausgesetzt wird grundlegendes Wissen in Netzwerk-Technik (IP-Adressen, Ports, internes und externes Netz) sowie Basisinformationen von der Installation auf Debian mit Hilfe von Aptitude. Dar&#252;ber hinaus sollte bekannt sein, welche Netzwerkschnittstellen auf dem System genutzt werden und ob diese intern oder extern genutzt werden.</p>
<h2>Installationsschritte</h2>
<p>Alle angegebenen Befehle sind f&#252;r Debian Lenny beispielhaft hinterlegt. F&#252;r &#228;ltere Systeme kann jedoch mit kleinen Anpassungen analog verfahren werden.</p>
<p>1. Update der Paketlisten und eventuell Update des Systems</p>
<pre>aptitude update
aptitude safe-upgrade
</pre>
<p>2. Installation der Firewall</p>
<p>Die Installtion mittels aptitude f&#252;hrt die entsprechenden Paketinstallationen durch.</p>
<pre>aptitude install arno-iptables-firewall</pre>
<p>Direkt im Anschluss erfolgt die Abfrage nach der Einrichtung der Firewall. F&#252;r die erste Konfiguration wird die Einrichtung mittels Debconf empfohlen. Diese Option kann sp&#228;ter noch ver&#228;ndert werden, jedoch ist dies erst einmal ein nahezu sicherer Weg zu einer m&#246;glichen funktionalen Konfiguration.</p>
<p><a href="http://www.martin-specht.com/wp-content/uploads/2011/01/screen1.png"><img class="size-full wp-image-102 alignnone" title="screen1" src="http://www.martin-specht.com/wp-content/uploads/2011/01/screen1.png" alt="Deb-Conf-Abfrage" width="600" height="378" /></a></p>
<p>Danach erfolgt die Angabe der externen Netzwerkschnittstellen, also all jene Schnittstellen, welche mit dem Internet kommunizieren. &#220;blicherweise ist dies eth0 oder eeth1. Virtuelle Schnittstellen sind hier jedoch nicht anzugeben!</p>
<p><a href="http://www.martin-specht.com/wp-content/uploads/2011/01/screen2.png"><img class="alignnone size-full wp-image-103" title="screen2" src="http://www.martin-specht.com/wp-content/uploads/2011/01/screen2.png" alt="Auswahl der externen Netzwerkschnittstellen" width="600" height="378" /></a></p>
<p>Es erfolgt die Abfrage, ob der Rechner seine IP-Adresse auf der  externen Netzwerkschnittstelle per DHCP erh&#228;lt.</p>
<p><a href="http://www.martin-specht.com/wp-content/uploads/2011/01/screen3.png"><img class="alignnone size-full wp-image-104" title="screen3" src="http://www.martin-specht.com/wp-content/uploads/2011/01/screen3.png" alt="Auswahl, ob mit oder ohne DHCP" width="600" height="378" /></a></p>
<p>Danach erfolgt eine wichtigsten Abfragen, die Abfrage der zu &#246;ffnenden Ports. Diese sollten entsprechend der Nutzung des Servers eingetragen werden.</p>
<p><a href="http://www.martin-specht.com/wp-content/uploads/2011/01/screen4.png"><img class="alignnone size-full wp-image-105" title="screen4" src="http://www.martin-specht.com/wp-content/uploads/2011/01/screen4.png" alt="Auswahl der TCP-Ports" width="600" height="378" /></a></p>
<p>Dieser Schritt erfolgt sowohl f&#252;r TCP- als auch f&#252;r UDP-Ports.</p>
<p><a href="http://www.martin-specht.com/wp-content/uploads/2011/01/screen5.png"><img class="alignnone size-full wp-image-106" title="screen5" src="http://www.martin-specht.com/wp-content/uploads/2011/01/screen5.png" alt="Auswahl der UDP-Ports" width="600" height="378" /></a></p>
<p>Anschlie&#223;end erfolgt die Angabe der internen Netzwerkschnittstellen. Auf diesen Netzwerk-Interfaces wird die Firewall keine Einschr&#228;nkung installieren. Sofern es interne Netzwerkschnittstellen gibt, m&#252;ssen diese hier eingetragen werden, anderenfalls bleibt das Feld leer.</p>
<p>Nach diesem Schritt ist die Basis-Konfiguration von IP-Tables durchgef&#252;hrt und die Einstellungen k&#246;nnen geladen werden. Sofern sicher ist, dass die Eingaben korrekt sind, kann der Neustart der Firewall durchgef&#252;hrt werden. sofern -Profis hier der Automatisierung nicht trauen, kann dieser Schritt mit &#8220;nein&#8221; beendet werden. In diesem Fall wird die Firewall erst beim n&#228;chsten Server-Neustart geladen.</p>
<p><a href="http://www.martin-specht.com/wp-content/uploads/2011/01/screen6.png"><img class="alignnone size-full wp-image-101" title="screen6" src="http://www.martin-specht.com/wp-content/uploads/2011/01/screen6.png" alt="Neustart der Firewall" width="600" height="378" /></a></p>
<p>Nun sollte die Firewall aktiv sein. Am einfachsten l&#228;sst sich dies testen, wenn man einen Ping auf das System durchf&#252;hrt. Da die Firewall Pings auf der externen Schnittstelle zun&#228;chst blockiert, sollten diese nun ins Leere f&#252;hren.</p>
<p>3. Reaktiveren der Pings (optional)</p>
<p>F&#252;r einige Systeme ist es notwendig, dass Pings eine Antwort senden. Daher sollte man in diesem Fall ICMP-Requests zulassen, so dass das System auch wieder antwortet. Hierf&#252;r muss die Datei /etc/arno-iptables-firewall/debconf.cfg editiert werden</p>
<pre>nano /etc/arno-iptables-firewall/</pre>
<p>in dieser Datei muss die Variable DC_OPEN_ICMP auf 1 gesetzt werden. Sollte es diese Option nicht geben, kann sie manuell hinzugef&#252;gt werden. Ob diese dann ber&#252;cksichtigt wird, ist jedoch abh&#228;ngig von der Version des installierten Scripts.</p>
<pre>DC_OPEN_ICMP=1</pre>
<p>4.  Rekonfigurieren der Firewall / &#220;bernahme von &#196;nderungen in der Datei debconf.cfg (optional)</p>
<p>dpkg-reconfigure arno-iptables-firewall</p>
<p>Dies f&#252;hrt dazu, dass die bei der Installation durchgef&#252;hrten Schritte erneut abgefragt werden. Vorher konfigurierte Variablen werden &#252;bernommen und vorgeschlagen.</p>
<h2>Genutzte Paket-Versionen</h2>
<pre>arno-iptables-firewall 1.8.8.0-2</pre>
<pre>iptables 1.4.2-6</pre>
<pre>nano 2.0.7.5
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.martin-specht.com/2011/01/14/einfaches-firewall-script-fuer-debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Development: Browserflut</title>
		<link>http://www.martin-specht.com/2009/10/26/development-browserflut/</link>
		<comments>http://www.martin-specht.com/2009/10/26/development-browserflut/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 14:23:44 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.martin-specht.com/?p=40</guid>
		<description><![CDATA[Webentwickler kennen das Problem: T&#228;glich kommen neue, schnellere, bessere Browser auf den Markt und je nach Anwenderkreis werden diese auch genutzt. Was jedoch des Anwenders Freud, ist des Entwicklers leid, denn nicht jeder nutzt die immer neuen Features neuerer Browserversionen. Mittelst&#228;ndler und Gro&#223;unternehmen rangieren teilweise noch mit dem Internet Explorer 6 im Internet, die Updates sind auch so schnell nicht geplant. Also bleibt Webentwicklern nichts weiter &#252;brig, als seine Systeme abw&#228;rtskompatibel zu produzieren. Doch woher nimmt man altes Softwareequipment, wenn der Standard schon weit fortgeschritten ist?]]></description>
			<content:encoded><![CDATA[<h2>Das Problem</h2>
<p>Webentwickler kennen das Problem: T&#228;glich kommen neue, schnellere, bessere Browser auf den Markt und je nach Anwenderkreis werden diese auch genutzt. Was jedoch des Anwenders Freud, ist des Entwicklers Leid, denn nicht jeder nutzt die immer neuen Features neuerer Browserversionen. Mittelst&#228;ndler und Gro&#223;unternehmen rangieren teilweise noch mit dem Internet Explorer 6 im Internet, die Updates sind auch so schnell nicht geplant. Also bleibt Webentwicklern nichts weiter &#252;brig, als seine Systeme abw&#228;rtskompatibel zu produzieren. Doch woher nimmt man altes Softwareequipment, wenn der Standard schon weit fortgeschritten ist?</p>
<h2>Eine L&#246;sung</h2>
<p>Microsoft hat es hier einmal geschafft, sich durch besonderen Service hervor zu heben, denn der Betriebssystem-Spezialist liefert nicht nur die Virtualisierungssoftware f&#252;r alte Systeme, sondern bringt auch gleich seinen Browser auf verschiedenen Plattformen mit.</p>
<p>Mit Microsoft Virtual PC und den entsprechenden Images stehen einem Internet Explorer 6 &#8211; 8 in den XP und Vista-Umgebungen zur Verf&#252;gung. Sofern der Entwicklungsrechner mit einigerma&#223;en aktueller Hardware ausgestattet ist, l&#228;sst diese Kombination ein doch recht komfortables Entwickeln zu, das Beste: das ganze kostet bis auf die vorhandene Internet-Verbindung keinen Cent!</p>
<p>Unter <a title="Microsoft Virtual PC Homepage" href="http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx" target="_blank">http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx</a> stellt Microsoft den Virtual PC zur Verf&#252;gung, die entsprechenden Images sind unter <a title="Microsoft Virtual Images" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=21eabb90-958f-4b64-b5f1-73d0a413c8ef&amp;displaylang=en#filelist" target="_blank">http://www.microsoft.com/downloads/details.aspx?FamilyID=21eabb90-958f-4b64-b5f1-73d0a413c8ef&amp;displaylang=en#filelist</a> verf&#252;gbar.</p>
<p>Nat&#252;rlich geht nichts ohne pers&#246;nliche Anpassung und daher sollte man in der virtuellen Umgebung die Region doch auf die eigenen Bed&#252;rfnisse umstellen. &#220;ber Start &gt; Control Panel &gt; Regional and Language Options die Auswahl German (Germany) stellt schon einmal die deutschen Zahlen- und Datumsformate ein. Im gleichen Fenster im Register Languages im Abschnitt  Text services and input languages verbirgt sich unter dem Button Details die M&#246;glichkeit, das deutsche Eingabeschema hinzuzuf&#252;gen. Damit lassen sich dann auch die deutschen Umlaute nutzen.</p>
<p>Aufgrund des englischen Tastaturschemas hat Microsoft die AltGr-Taste als Hosttaste verwendet. Leider ben&#246;tigt man die Taste AltGr im deutshcen Sprachschema recht h&#228;ufig, so dass es doch recht hilfreich ist, eine Umbelegung auf die rechte StrG-taste vorzunehmen. ie l&#228;sst sich im Virtual PC Konsolenfenster &#252;ber Datei &gt; Optionen &gt; Tastatur erledigen. Einfach im Fenster in das Feld &#8220;Aktuelle Hosttaste&#8221; klciken und die rechte Strg-Taste dr&#252;cken. Ein Klick auf Ok best&#228;tigt die neue Einstellung.</p>
<h2>Non-IE-Browser</h2>
<p>Die L&#246;sung f&#252;r Internet Explorer ist nun klar. Allerdings gibt es mehr als nur die Microsoft-Welt und so m&#252;ssen nat&#252;rlich auch Opera und Co dran glauben. Allerdings ist Microsoft auch hier bereits so nett, uns die Basis zu liefern, denn in die virtuellen Umgebungen lassen sich Alternativbrowser installieren und so kann man in eine neue virtuelle Maschine einen Download von Firefox oder Opera installieren und hat ohne M&#252;he die neue Testumgebung parat. Wo bekommt man die alten Browser her? Auch hier gibt es Spezialisten und so hat man unter <a title="Directory of old Browsers" href="http://browsers.evolt.org/" target="_blank">http://browsers.evolt.org/</a> eine ganze Sammlung &#228;lterer und neuerer Browser zusammengestellt, welche sich recht m&#252;helos downloaden und installieren lassen.</p>
<h2>Nachteile</h2>
<p>Nat&#252;rlich gibt es auch hier Kehrseiten und man sollte diese kennen, bevor man zu einem produktiven Einsatz des Systems kommt:</p>
<ol>
<li>Die aktuellen Microsoft-Images arbeiten nur bis zum Januar 2010, dann schalten sich die Betriebssysteme tot. Sofern man hier also viel Konfigurationsaufwand in die Images stecken muss, um seine virtuelle Umgebung zu erhalten, sollte man &#252;berlegen, ob es dann nicht sinnvoller ist, in einer virtuellen Umgebung das System selbst aufzusetzen. Hierbei entstehen dann jedoch auf legalem Wege Kosten f&#252;r die entsprechenden Betriebssysteme.</li>
<li>Die virtuelle Umgebung ben&#246;tigt Festplattenkapazit&#228;t. Pro Installation muss mit circa dreifacher Gr&#246;&#223;e f&#252;r die Installation sowie mit circa doppelter Gr&#246;&#223;e der Original-Images f&#252;r den Betrieb einer virtuellen Umgebung gerechnet werden.</li>
<li>Parallelbetrieb von virtuellen Umgebungen ist m&#246;glich, jedoch ben&#246;tigt jede einzelne Umgebung entsprechenden Arbeitsspreicher sowie CPU-Kapazit&#228;t. Muss man also &#252;ber mehrere Umgebungen gleichzeitig testen, kann es hilfreich sien, trotzdem mehrere Rechner zu nutzen, auf denen dann die einzelnen Umgebungen laufen</li>
</ol>
<p>Fazit</p>
<p>Mit der gezeigten L&#246;sung gibt es einen stabilen Weg, verschiedene Umgebungen abzubilden und mit diesen zu entwickeln. Tests und Verhalten sind mit diesen Mitteln aussagekr&#228;ftiger als m&#246;gliche Hacks f&#252;r Parallelinstallationen, ebenso sind Entwicklungsumgebung und Testsystem voneinander getrennt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martin-specht.com/2009/10/26/development-browserflut/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone W-LAN und NETGEAR ProSafe-Ger&#228;te</title>
		<link>http://www.martin-specht.com/2009/09/04/iphone-w-lan-netgear/</link>
		<comments>http://www.martin-specht.com/2009/09/04/iphone-w-lan-netgear/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 12:32:21 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Leitartikel]]></category>

		<guid isPermaLink="false">http://www.martin-specht.com/?p=86</guid>
		<description><![CDATA[Apples iPhone hat &#8211; wie mittlerweile hoffentlich alle modernen Mobiltelefone &#8211; eine eingebaute W-LAN-Netzwerkschnittstelle. Allerdings hat Apple auch hier auf ein unkompliziertes Benutzerinterface gesetzt, so dass Fehlermeldungen, sofern es welche gibt, doch eher sp&#228;rlich ausfallen. So ist es nicht verwunderlich, dass es einem Schwei&#223;perlen auf die Stirn treibt, wenn man versucht, verzweifelt eine Verbindung einzurichten [...]]]></description>
			<content:encoded><![CDATA[<p>Apples iPhone hat &#8211; wie mittlerweile hoffentlich alle modernen Mobiltelefone &#8211; eine eingebaute W-LAN-Netzwerkschnittstelle. Allerdings hat Apple auch hier auf ein unkompliziertes Benutzerinterface gesetzt, so dass Fehlermeldungen, sofern es welche gibt, doch eher sp&#228;rlich ausfallen.</p>
<p>So ist es nicht verwunderlich, dass es einem Schwei&#223;perlen auf die Stirn treibt, wenn man versucht, verzweifelt eine Verbindung einzurichten und das W-LAN mit der Meldung &#8220;Die Verbindung konnte nicht hergestellt werden&#8221; den Dienst quittiert, obwohl man vorher noch den Netzwerkschl&#252;ssel eingeben durfte.</p>
<p>Nat&#252;rlich ist der erste Schritt, den Schl&#252;ssel zu pr&#252;fen, aber nach einigen weiteren Versuchen d&#252;rfte klar sein, dass man sich nicht vertippt hat und die L&#246;sung (hoffentlich) nicht am eigenen Tippverm&#246;gen scheitert.</p>
<p>Erste Hilfe scheint nach einer gr&#252;ndlichen Google-Suche das Zur&#252;cksetzen der Netzwerkverbindungen im iPhone zu sein, eine Option, die man nicht so ohne weiteres findet. &#220;ber Einstellungen &#8211; Allgemein &#8211; Zur&#252;cksetzen kann man einzelne oder alle Komponenten des iPhones resetten. Nach einem Neustart des Telefons sollten nun alle W-LAN-Netzwerke verschwunden sein und man kann den EInwahlversuch erneut starten.</p>
<p>Leider hilft bei einigen W-LAN-Routern trotz WPA- und WPA2-Verschl&#252;sselung auch dieser Neustart nicht. Schuld ist, wie bei meinem Beispiel mit dem NETGEAR ProSafe VPN Wireless ADSL Gateway DGFV338, der Verschl&#252;sselungsalgorithmus, denn w&#228;hrend einigen Ger&#228;ten AES256 ausreicht, ben&#246;tigen andere TKIP, so offensichtlich auch das iPhone.</p>
<p>In so einem Fall hilft dann nur, die Firmware der Router zu upgraden, in der Hoffnung, die Hersteller haben nachgebessert. NETGEAR hat dies getan und &#8211; nach einem nochmaligen Zur&#252;cksetzen der iPhone-Netzwerkeinstellungen &#8211; war das Problem behoben und das Ger&#228;t konnte sich problemlos in das W-LAN-Netzwerk einw&#228;hlen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martin-specht.com/2009/09/04/iphone-w-lan-netgear/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rettungsversuch? CMS webEdition wird Open Source</title>
		<link>http://www.martin-specht.com/2008/11/04/rettungsversuch-cms-webedition-wird-open-source/</link>
		<comments>http://www.martin-specht.com/2008/11/04/rettungsversuch-cms-webedition-wird-open-source/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 14:08:24 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[webEdition]]></category>

		<guid isPermaLink="false">http://www.martin-specht.com/?p=75</guid>
		<description><![CDATA[Open Source ist eine feine Sache, vor allem dann, wenn man die Vorteile von Open Source zu sch&#228;tzen wei&#223;. So, oder vermutlich so &#228;hnlich, muss sich die Living-e AG das Konzept erdacht haben, nach welchem sie entschied, webEdition als Open Source anzubinden. In meiner Vergangenheit bin ich dem System mehrfach begegnet und bis auf ein [...]]]></description>
			<content:encoded><![CDATA[<p>Open Source ist eine feine Sache, vor allem dann, wenn man die Vorteile von Open Source zu sch&#228;tzen wei&#223;. So, oder vermutlich so &#228;hnlich, muss sich die Living-e AG das Konzept erdacht haben, nach welchem sie entschied, webEdition als Open Source anzubinden.</p>
<p>In meiner Vergangenheit bin ich dem System mehrfach begegnet und bis auf ein paar kleine, aber feine Codeschnipsel konnte ich dem System nahezu nichts abgewinnen. In der uns von der Living-e AG &#252;bermittelten Version waren offensichtlich alte PHP4-Codefetzen zusammen mit neuen Funktionen in PHP5 ausgeliefert worden. Die Projektstruktur war dadurch mehr als un&#252;bersichtlich und das gesamte Projekt war logisch nicht ganz nachvollziehbar aufgebaut. Es handelte sich dabei um ein Stable-Release, welches wir niemals zum Projekteinsatz brachten.</p>
<p>Das gesamte System machte den Eindruck, als sei es mit altem und neuem Code geflickt worden. Etliche Features lie&#223;en sich auch nicht quer verbinden. Ein Austausch von Funktionen gestaltete sich daher ebenso schwierig wie die Anpassung der Templates an eigene Bed&#252;rfnisse, welche das System erweiterten.</p>
<p>Aus diesem Grund l&#228;&#223;t hier der EIndruck nicht los, dass Living-e versucht, die in die Jahre gekommenen Kinder kurz vor dem Sterben mit Hilfe der Open Source-Gemeinde zu retten. Bleibt Living-e nur zu w&#252;nschen, dass ihnen dies trotz vielfach besserer Konkurrenz mit der Open Source-Version 6 gelingt.</p>
<p><a title="CMS webEdition wird Open Source" href="http://www.heise.de/newsticker/CMS-webEdition-wird-Open-Source--/meldung/118326" target="_blank">Zur Meldung auf Heise.de</a></p>
<p><a title="CMS Webedition jetzt Open Source" href="http://createordie.de/cod/news/CMS-Webedition-jetzt-Open-Source-045852.html" target="_blank">Zur Meldung aus dem Software &amp; Support Verlag</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.martin-specht.com/2008/11/04/rettungsversuch-cms-webedition-wird-open-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Progressbars in PHP-Projekten</title>
		<link>http://www.martin-specht.com/2008/10/14/progressbars-in-php-projekten/</link>
		<comments>http://www.martin-specht.com/2008/10/14/progressbars-in-php-projekten/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 12:45:58 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[APC]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[MooTools]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Progressbar]]></category>
		<category><![CDATA[Status]]></category>
		<category><![CDATA[Statusanzeige]]></category>
		<category><![CDATA[Upload]]></category>

		<guid isPermaLink="false">http://www.martin-specht.com/?p=63</guid>
		<description><![CDATA[Progressbars sind mittlerweile ein g&#228;ngiges Mittel, um Statusanzeigen zu realisieren. Seit 2003 nutze ich diese in verschiedenen Projekten, jedoch waren die Mittel, diese zu regeln, in der Vergangenheit eher holperig, unkomfortabel oder instabil gel&#246;st. Musste in Projekt umziehen oder gab es neue Browser oder auch Flash-Versionen, begann die Konfiguration und das R&#228;tselraten von neuem. CGI und Flash oder per Output-Buffer gesteuerte Javascript-Bars waren immer instabil und hielten selten l&#228;nger als ein Jahr in einem Projekt aus.]]></description>
			<content:encoded><![CDATA[<h2>Einf&#252;hrung</h2>
<p>Progressbars sind mittlerweile ein g&#228;ngiges Mittel, um Statusanzeigen zu realisieren. Seit 2003 nutze ich diese in verschiedenen Projekten, jedoch waren die Mittel, diese zu regeln, in der Vergangenheit eher holperig, unkomfortabel oder instabil gel&#246;st. Musste in Projekt umziehen oder gab es neue Browser oder auch Flash-Versionen, begann die Konfiguration und das R&#228;tselraten von neuem. CGI und Flash oder per Output-Buffer gesteuerte Javascript-Bars waren immer instabil und hielten selten l&#228;nger als ein Jahr in einem Projekt aus.</p>
<p>Dank der &#8220;Erfindung&#8221; von Ajax war man daraufhin in der Lage, f&#252;r Prozesse, die nach einem Request durchgef&#252;hrt wurden, bereits gute und fl&#252;ssige Prozessanzeigen zu realisieren. In verschiedenen Projekten habe ich beispielsweise Datensammlungen oder das Erstellen von ZIP-Archiven visuell dargestellt.</p>
<p>Mit der PHP-Version 5.2 l&#228;sst sich nun auch &#252;ber die Extension APC ein Upload mit einer Progress-Anzeige sinnvoll l&#246;sen, denn im Wesentlichen ver&#228;ndert sich nichts. Um dieses Feature zu nutzen, sind jedoch ein paar Vorbereitungen n&#246;tig:</p>
<h2>1. Installation von APC</h2>
<p>Ben&#246;tigt werden:</p>
<ul>
<li>Root-Zugriff auf die Kommandozeile</li>
<li>ein installiertes und auf Kommandozeilenebene funktionsf&#228;higes PEAR bzw. PECL</li>
<li>Internet-Zugriff</li>
</ul>
<p>Zun&#228;chst einmal wird APC mittels PECL installiert:</p>
<blockquote><p>testserver:~# pecl install apc</p></blockquote>
<p>Bei der darauffolgenden Frage die Option APCX &#228;ndern auf &#8220;NO&#8221;</p>
<blockquote><p>Use apxs to set compile flags (if using APC with Apache)? [yes] : no</p></blockquote>
<p>Nun folgen etliche Zeilen Kompilierung und Installation. Abh&#228;ngig vom System (in meiner Debian-Testumgebung ist es zwingend notwendig) muss in die php.ini bzw. im Debian in eine separate Datei</p>
<blockquote><p>extension=apc.so</p></blockquote>
<p>eingetragen werden.</p>
<div id="attachment_64" class="wp-caption alignleft" style="width: 310px"><a href="http://www.martin-specht.com/wp-content/uploads/2008/10/apc.gif"><img class="size-medium wp-image-64" title="APC-Eintrag" src="http://www.martin-specht.com/wp-content/uploads/2008/10/apc-300x100.gif" alt="AUsschnitt aus der PHP-Info zum APC-Eintrag" width="300" height="100" /></a><p class="wp-caption-text">Ausschnitt aus der PHP-Info zum APC-Eintrag</p></div>
<p>Ein Neustart des Webservers sollte nun &#8211; oh Wunder &#8211; die Extension geladen haben. Dies l&#228;sst sich am einfachsten &#220;ber eine Ausgabe der phpinfo(); pr&#252;fen, hier sollte es einen neuen Eintrag zu APC geben. Sofern APC-Support &#8220;enabled&#8221; ist, kann es weitergehen mit dem PHP-Teil der Installation. Sollte das Modul noch nicht aktiviert sein, hilft in der Regel ein Basiseintrag in der php.ini:</p>
<blockquote><p>[APC]<br />
apc.enable_cli=0<br />
apc.enabled=1<br />
apc.num_files_hint=1024<br />
apc.optimization=0<br />
apc.rfc1867=1<br />
apc.shm_segments=1<br />
apc.shm_size=128<br />
apc.ttl=7200<br />
apc.user_ttl=7200</p></blockquote>
<h2>2. PHP-Dateien und deren Funktionsweise</h2>
<p>Grunds&#228;tzlich funktioniert das Uploaden nun in der Weise, dass PHP in der Lage ist, einen weiteren Request aus der gleichen Quelle parallel zum laufenden Request zu beantworten. Dies bedeutet, dass man eigentlich nur daf&#252;r sorgen muss, dass PHP w&#228;hrend des Uploads brav antwortet, wieviel Upload statt fand. Hierf&#252;r sind folgende Codeschnipsel notwendig:</p>
<h3>Das Formular in der HTML-Datei:</h3>
<p><code>&lt;form action="upload.php" method="post" target="uploadFrame" enctype="multipart/form-data"&gt;<br />
</code></p>
<p><code> &lt;input type="file" name="upload" /&gt;<br />
&lt;input type="hidden" name="APC_UPLOAD_PROGRESS" value="&lt;?php echo </code><code> md5(uniqid(rand(), true)); ?&gt;" /&gt;</code><code><br />
&lt;button type="submit" onclick="this.disabled=true;   setTimeout('requestStatus(\''+this.form.APC_UPLOAD_PROGRESS.value+'\')', 1000);"&gt;Abschicken&lt;/button&gt;<br />
&lt;/form&gt;</code></p>
<p>Zu beachten ist, dass APC mit dem versteckten Feld APC_UPLOAD_PROGRESS mitgeteilt wird, wie die eindeutige Id f&#252;r diesen Upload lautet. Der Bezeichner muss mit der Angabe apc.rfc1867_name in der PHP-Konfiguration &#252;berein stimmen.</p>
<p>Zus&#228;tzlich muss in den HTML-Code ein IFrame eingebaut werden, an welches die Upload-Datei geschickt wird. Dies wird notwendig, weil alle g&#228;ngigen Browser durch das Abschicken des Formulars im gleichen Fenster die Seite blockieren w&#252;rde und &#196;nderungen im HTML-Code dann nicht mehr m&#246;glich sind.</p>
<p><code>&lt;iframe src="blank.html" name="uploadFrame" style="display:none"&gt;&lt;/iframe&gt;</code></p>
<p>Zus&#228;tzlich sollte fehlt nat&#252;rlich noch ein Platz, um den Upload-Status anzuzeigen. Hier sind mehrere Varianten denkbar, f&#252;r einen ersten Test reicht zun&#228;chst erst einmal ein leeres DIV.</p>
<p><code>&lt;div id="divStatus"&gt;&lt;/div&gt;</code></p>
<h3>Die Datei f&#252;r den Empfang des Uploads (upload.php)</h3>
<p>An dieser simplen Funktion &#228;ndert sich genau nichts, der Upload funktioniert hier genau gleich:</p>
<p><code><br />
&lt;?php<br />
if (isset($_FILES['upload'])) {<br />
move_uploaded_file($_FILES['upload']['tmp_name'], 'upload/'.$_FILES['upload']['name']);<br />
}<br />
?&gt;<br />
</code></p>
<p>Nat&#252;rlich muss man hier selbst f&#252;r Sicherheit etc. sorgen, aber im Grundsatz ist der Upload identisch.</p>
<h3>Die Datei f&#252;r die Statusmeldung (status.php)</h3>
<p>Ihre einzige Aufgabe ist es, den Upload anhand der eindeutigen Id zu identifizieren und mit Hilfe der Funktion apc_fetch() den aktuellen Status auszulesen. Dieser muss dann nur noch entsprechend aufbereitet werden, um im richtigen Format an die HTML-Seite &#252;bermittelt zu werden:</p>
<p><code>&lt;?php<br />
$arr_status = apc_fetch('upload_'.$_GET['</code><code>str_apcId</code><code>']);<br />
printf("&lt;pre&gt;%s&lt;/pre&gt;", print_r($arr_status, true));<br />
?&gt;</code></p>
<h3>Der Javascript-Teil</h3>
<p><code>function requestStatus(str_apcId)' {</code></p>
<p>var request = new Request({<br />
url: &#8216;/status.php?apcId=&#8217;+str_apcId,<br />
onComplete: function(responseText) {<br />
$(&#8216;uploadStatus&#8217;).innerHTML = responseText;<br />
}<br />
}).send();<br />
}</p>
<p>Der Javascript-Part sollte hier sehr individuell ausfallen, dies ist insbesondere abh&#228;ngig vom genutzten Javascript-Framework, von der Art, den Status anzuzeigen sowie den technischen M&#246;glichkeiten. Das gezeigte Beispiel w&#228;re eine M&#246;glichkeit in MooTools, aber auch hier gilt, dass sowohl die Schnittstelle zum Server als auch das Javascript abgesichter sein sollten gegen einen Fremdzugriff.</p>
<p>Quellen:</p>
<p><a title="Debian BLOG" href="http://www.debianblogs.com/debian_apc_alternative_php_cache" target="_blank">http://www.debianblogs.com/debian_apc_alternative_php_cache</a></p>
<p><a title="Coder Wiki" href="http://www.coder-wiki.de/HowTos/PHP-AJAX-Upload-Fortschritt" target="_blank">http://www.coder-wiki.de/HowTos/PHP-AJAX-Upload-Fortschritt</a></p>
<p><a title="MooTools Request-Objekt" href="http://mootools.net/docs/Request/Request" target="_blank">http://mootools.net/docs/Request/Request</a></p>
<h2>Update:</h2>
<p>Wer Probleme bei der Installation mit PECL bekommt, sollte &#252;berpr&#252;fen, ob folgende Pakete installiert und verf&#252;gbar sind:<br />
<code>php5-dev<br />
apache2-dev<br />
build-essentials</code></p>
<p>Die Namen der Pakete sind zwischen den Distributionen unterschiedlich, wichtig ist, dass sowohl von PHP als auch vom installierten Apache die Development-Pakete zur Verf&#252;gung stehen und alle notwendigen Bibliotheken installiert sind.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martin-specht.com/2008/10/14/progressbars-in-php-projekten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

