<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://www.pludoni.de" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Devs on Coffee - Der pludoni-Entwicklerblog</title>
 <link>http://www.pludoni.de/devs-on-coffee/rss</link>
 <description></description>
 <language>de</language>
<item>
 <title>Stabile SSH-Verbindung von unterwegs</title>
 <link>http://www.pludoni.de/node/1088</link>
 <description>	&lt;p&gt;Dank moderner Kommunikationsmittel ist eine &lt;span class=&quot;caps&quot;&gt;ICE&lt;/span&gt;-Fahrt heutzutage kein Grund mehr mit der Arbeit aufzuhören :). Insbesondere falls es Probleme am Server gibt, ist es wünschenswert, auf &lt;span class=&quot;caps&quot;&gt;SSH&lt;/span&gt;-Ebene mit den Servern stabil zu kommunizieren.&lt;/p&gt;

	&lt;p&gt;Leider führt eine solche Fahrt auch mal durch ländliches Gebiet ohne gute Netzabdeckung, und eine stabile &lt;span class=&quot;caps&quot;&gt;SSH&lt;/span&gt;-Verbindung ist dann nicht gegeben. Als Ergebnis friert die Shell ein, und man muss eine neue aufmachen. Ärgerlich, wenn man die soeben geöffnete Datei noch nicht gespeichert hat.&lt;/p&gt;

	&lt;p&gt;Allerdings gibt es da einige Tipps, die auf unixoiden Betriebssystemen (Linux, MacOS) leicht umzusetzen sind. Zum einen gibt es eine Einstellung in der &lt;span class=&quot;caps&quot;&gt;SSH&lt;/span&gt;-Verbindung und zum anderen einige Punkte in der Arbeitsweise, die man beachten kann, um so trotzdem sinnvoll zu arbeiten.&lt;/p&gt;

	&lt;h3&gt;Einstellungen&lt;/h3&gt;

	&lt;p&gt;Falls man noch keine ssh-Konfigurationsdatei hat, so kann man diese in seinem Homeverzeichnis unter &lt;strong&gt;~/.ssh/config&lt;/strong&gt; anlegen. Eine Konfiguration sieht z.B. so aus:&lt;/p&gt;

&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-bash&quot;&gt;Host pl
  User xxxx
  Hostname pludoni.de
  ServerAliveInterval &lt;span class=&quot;nu0&quot;&gt;60&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Setzt z.B. einen Alias &amp;#8220;pl&amp;#8221; für den angegeben Nutzer zum Server. Wichtig ist die letzte Option. Sollte nun unser &lt;span class=&quot;caps&quot;&gt;SSH&lt;/span&gt;-Client die Verbindung verlieren, so probiert er in 60 Sekunden einen Reconnect. Aufrufen dieser Einstellung und verbinden können wir uns dann mittels &lt;strong&gt;ssh pl&lt;/strong&gt;.&lt;/p&gt;

	&lt;h3&gt;Arbeitsweise&lt;/h3&gt;

	&lt;p&gt;Um bei einem Verlust der Verbindung die noch nicht gespeicherten Daten zu behalten, sollte man einen Terminal Multiplexer, wie &lt;strong&gt;screen&lt;/strong&gt;, oder besser &lt;strong&gt;tmux&lt;/strong&gt; verwenden. Diese ermöglichen es, die Shell von der aktuellen Verbindung zu entkoppeln. Zusätzlich ermöglichen beide auch ein simultanes Login mehrer Nutzer und &lt;span class=&quot;caps&quot;&gt;TMUX&lt;/span&gt; ist damit eines der Standardtools beim &lt;strong&gt;Remote Pair Programming&lt;/strong&gt;. &lt;br /&gt;
Nach einer gewissen Einarbeitungszeit gewöhnt man sich daran nach dem Login auf dem Server immer eine tmux-Sitzung zu öffnen, bzw. fortzusetzen. Da die Tmux Konfiguration leider nicht immer ganz einfach ist, gibt es z.B. den sehr eleganten Wrapper &lt;strong&gt;tmuxinator&lt;/strong&gt; dafür.&lt;/p&gt;

	&lt;p&gt;Falls man nun beim Arbeiten mit Tmux einen Verbindungsabbruch erlebt, kann man nach einem Relogin sofort mittels &amp;#8220;attach&amp;#8221; die Sitzung fortsetzen.&lt;/p&gt;

	&lt;p&gt;Falls die &lt;span class=&quot;caps&quot;&gt;SHH&lt;/span&gt;-Verbindung einfriert, kann man sich mittels spezieller Tastenkombinationen befreien: &amp;lt;Enter&amp;gt; ~. &amp;lt;Enter&amp;gt; beendet z.B. die aktuelle Sitzung.&lt;/p&gt;

	&lt;p&gt;(geschrieben aus einem &lt;span class=&quot;caps&quot;&gt;ICE&lt;/span&gt;)&lt;/p&gt;</description>
 <pubDate>Thu, 16 Feb 2012 11:11:52 +0100</pubDate>
 <dc:creator>stefanw</dc:creator>
 <guid isPermaLink="false">1088 at http://www.pludoni.de</guid>
</item>
<item>
 <title>Frameworkunabhängige Fehlerberichtung mit PHP und Redmine</title>
 <link>http://www.pludoni.de/node/1086</link>
 <description>	&lt;p&gt;Webanwendungen sind Software, und damit prinzipbedingt fehlerbehaftet. Wenn nun ein Fehler bei einem Nutzer bzw. Kunden auftritt, wäre es wünschenswert, wenn wir als Entwickler zumindest davon erfahren. Für unsere &lt;strong&gt;Ruby on Rails&lt;/strong&gt;-Anwendungen (z.B. &lt;a href=&quot;http://www.empfehlungsbund.de&quot;&gt;Empfehlungsbund.de&lt;/a&gt;) nutzen wir seit einiger Zeit den Service von &lt;strong&gt;Airbrake&lt;/strong&gt;, die ein leicht zu installierendes Plugin anbieten. Nun suchten wir für &lt;strong&gt;&lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;&lt;/strong&gt; etwas ähnliches. Da wir aber mittlerweile sehr viele &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;-Anwendungen hatten, kam die Motivation auf:&lt;/p&gt;

	&lt;ul&gt;
		&lt;li&gt;Ähnliches auch für &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; umzusetzen&lt;/li&gt;
		&lt;li&gt;die Fehler an unser eigenes System zu melden, um unabhängig von externen Dienstleistern zu sein.&lt;/li&gt;
		&lt;li&gt;Das Ganze in einen Workflow zu bringen, sodass Fehler nicht vergessen werden&lt;/li&gt;
	&lt;/ul&gt;

	&lt;h3&gt;Nutzung von Redmine als Bug-&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;-Server&lt;/h3&gt;

	&lt;p&gt;&lt;img src=&quot;http://www.pludoni.de/files/upload/devsoncoffee/redmine.png&quot; class=&quot;presslogo&quot; alt=&quot;Redmine Logo&quot;/&gt;&lt;br /&gt;
Intern nutzen wir bereits den Bugtracker &lt;a href=&quot;http://www.redmine.org/&quot;&gt;&lt;strong&gt;Redmine&lt;/strong&gt;&lt;/a&gt; (der übrigens auch auf Ruby on Rails basiert), der uns durch die vielen Features, inklusive z.B. einer Zeiterfassung, einer &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; zum automatischen Anlegen von Tickets und Android Apps (RedMinerDroid) überzeugt hat.&lt;/p&gt;

	&lt;p&gt;Glücklicherweise gibt es bereits ein &lt;a href=&quot;https://github.com/milgner/redmine_airbrake_server&quot;&gt;Plugin für Redmine &amp;ndash; Redmine Airbrake Server&lt;/a&gt;, dass aus dem Bugtracker auch einen Airbrake-Bug-Server macht. Letztendlich sieht es so aus, dass ein Fehler ein Ticket im Bugtracker erzeugt, bzw. ein bestehendes aktualisiert, wenn ein Fehler wieder aufgetreten ist. Das ganze funktioniert sehr gut, auch wenn man natürlich Abstriche beim Informationsgehalt und der Aufbereitung machen muss, der bei kommerziellen Services wie Airbrake oder Newrelic natürlich besser ist. Nichtsdestotrotz bleibt man über den Status der Anwendung auf dem Laufenden, und erhält die notwendigen Informationen (Stacktrace, Fehlerdokument, &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; und Session-Parameter)&lt;/p&gt;

	&lt;h3&gt;Umbau der Client-Bibliotheken&lt;/h3&gt;

	&lt;p&gt;Da dieses Plugin die Airbrake-&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; emuliert, lassen sich die dafür geeigneten Plugins meist relativ leicht so umbauen, dass sie nun stattdessen zum Bugtracker funken. Für das Rails-Plugin ist dies bereits auf der Githubseite des Airbrake Redmine Plugins dokumentiert. Für &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; haben wir das so gelöst:&lt;/p&gt;

	&lt;ul&gt;
		&lt;li&gt;Download der &lt;a href=&quot;https://github.com/geoloqi/php-airbrake-notifier&quot;&gt;Airbrake-Notifer-&lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;-Bibliothek&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;ca. Zeile 190 in der Services/Airbrake.php die &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; anpassen:&lt;/li&gt;
	&lt;/ul&gt;

&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$url&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;http://mybugtracker.domain.de/notifier_api/v2/notices&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;

	&lt;ul&gt;
		&lt;li&gt;an geeigneter Stelle im Programmcode (z.B. neues Modul, Klasse etc.) wiefolgt aufrufen:&lt;/li&gt;
	&lt;/ul&gt;

&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-php&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;require_once&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;#8216;php-airbrake-notifier/Services/Airbrake.php&amp;#8217;&lt;/span&gt;;
&lt;span class=&quot;re0&quot;&gt;$api_key&lt;/span&gt; = &amp;lt;&amp;lt;&amp;lt;&lt;span class=&quot;caps&quot;&gt;DOC&lt;/span&gt;
&amp;#8212;-
:project: bugs
:tracker: Fehler
:api_key:            &lt;span class=&quot;co2&quot;&gt;# Hier den E-Mail &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; Key aus dem Redmine&lt;/span&gt;
:assigned_to: admin  &lt;span class=&quot;co2&quot;&gt;# Nutzer an den das zugewiesen wird&lt;/span&gt;
:login: api          &lt;span class=&quot;co2&quot;&gt;# Nutzer, von dem das Ticket kommt&lt;/span&gt;
:reopen_strategy: production
&lt;span class=&quot;caps&quot;&gt;DOC&lt;/span&gt;;
Services_Airbrake::&lt;span class=&quot;me2&quot;&gt;installHandlers&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$api_key&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;#8216;production&amp;#8217;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;#8216;curl&amp;#8217;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Fertig :) Ab nun trudeln alle Mails als Tickets ein. Wenn Redmine richtig konfiguriert ist, dann bekommen alle Projektbeobachter Mails, sobald neue Tickets angelegt werden, bzw. Fehler auftraten.&lt;/p&gt;</description>
 <pubDate>Wed, 08 Feb 2012 12:07:20 +0100</pubDate>
 <dc:creator>stefanw</dc:creator>
 <guid isPermaLink="false">1086 at http://www.pludoni.de</guid>
</item>
<item>
 <title>Code-Qualität durch Testgetriebene Entwicklung nachhaltig erhöhen</title>
 <link>http://www.pludoni.de/node/1062</link>
 <description>&lt;p&gt;Im letzten Jahr schrieb ich meine Diplomarbeit bei der pludoni GmbH. Dabei stand die Entwicklungsmethode &quot;Testgetriebene Softwareentwicklung (TDD)&quot; im Vordergrund und wurde auf die Tauglichkeit zum Einsatz in der Firma untersucht. Insbesondere hatten wir die Vermutung, dass sie eine effektive Möglichkeit zur Steigerung unserer (internen) Qualität, d.h. der Code-Qualität und langfristig effizientere Entwicklung sei.&lt;/p&gt;
&lt;h2&gt;Ergebnisse&lt;/h2&gt;
&lt;p&gt;Im Rahmen der Arbeit habe ich einen Prototypen eines Stellenportals in Ruby on Rails (3) testgetrieben entwickelt. Am Ende stellten wir dann fest, dass die qualitativen Kennzahlen, z.B. Komplexität, Anzahl der Codesmells, Testabdeckung deutlich gegenüber früheren Rails-Projekten verbessert wurden.&lt;/p&gt;
&lt;p&gt;Ein Großteil der Arbeit konnte in das neue, gemeinsame Portal &lt;a href=&quot;http://www.empfehlungsbund.de/&quot;&gt;Empfehlungsbund.de&lt;/a&gt; übernommen werden und befindet sich damit in Produktion. Somit war die Arbeit ein Erfolg. Dem stimmten auch meine Prüfer zu :).&lt;/p&gt;
&lt;p&gt;Details sind in der Arbeit zu finden: &lt;a href=&quot;https://github.com/zealot128/Diplomarbeit---Testgetriebene-Softwareentwicklung-von-...-Ruby-on-Rails/blob/master/pdf/current.pdf&quot;&gt;current.pdf&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Als Literatur zu empfehlen sind die Bücher:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Test-Driven-Development by example, von Kent Beck,&lt;/li&gt;
&lt;li&gt;Rails Test Prescription, von Noel Rappin,&lt;/li&gt;
&lt;li&gt;RSpec Book, von David Chelimsky,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jamesshore.com/Agile-Book/&quot;&gt;Agile Book, James Shore&lt;/a&gt;, das sogar größtenteils online verfügbar ist.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;sowie zahlloser, exzellenter Internetquellen.&lt;/p&gt;
&lt;h2&gt;Ausblick&lt;/h2&gt;
&lt;p&gt;Durch die prototypische Entwicklung konnten wir viel Wissen über verschiedene Testmethoden, insb. Rails, Cucumber, Selenium und Capybara, aber auch über unterschiedliche Rubygems und 3rd-Party-Librarys (thinking Sphinx, Geo-Suche, Javascript, Rails 3.1) in die Firma bringen.&lt;/p&gt;
&lt;p&gt;Nach der Arbeit und damit dem Ende meines Studiums habe ich nun meine Vollzeittätigkeit bei der pludoni GmbH als Entwickler begonnen.&lt;/p&gt;
</description>
 <pubDate>Mon, 09 Jan 2012 19:57:46 +0100</pubDate>
 <dc:creator>stefanw</dc:creator>
 <guid isPermaLink="false">1062 at http://www.pludoni.de</guid>
</item>
<item>
 <title>Wir begrüßen unseren neuen Werkstudenten-Web-Designer: Florian</title>
 <link>http://www.pludoni.de/node/1063</link>
 <description>&lt;p&gt;Florian stieß vor kurzem zu uns, mit einem konkreten Redesign-Vorschlag für unsere Communityportale. Damit hat er uns so beeindruckt, dass er sofort die Stelle als Designer bekam.&lt;/p&gt;
&lt;p&gt;Er wird hinter den Kulissen eine komplett neue Nutzerschnittstelle ausarbeiten und zusammen mit dem Entwicklerteam implementieren. Außerdem schätzen wir seine vielen, kreativen Ideen und den frischen Wind, den der ins Team bringt!&lt;/p&gt;
</description>
 <pubDate>Mon, 02 Jan 2012 20:28:11 +0100</pubDate>
 <dc:creator>stefanw</dc:creator>
 <guid isPermaLink="false">1063 at http://www.pludoni.de</guid>
</item>
<item>
 <title>Auf der Überholspur</title>
 <link>http://www.pludoni.de/node/1055</link>
 <description>&lt;p&gt;Im Rahmen meiner Bachelorarbeit konnte ich mich ausführlich mit den aktuell gängigen Web-Performance Problemen beschäftigen.&lt;/p&gt;
&lt;h3&gt;Thema war: &lt;q&gt;Leistungsuntersuchung von Webserveranwendungen und Optimierung auf Basis von Drupal 5(am Beispiel von ITsax.de)&lt;/q&gt;&lt;/h3&gt;
&lt;p&gt;Dabei konnte ich vielfältige Erkenntnisse gewinnen und unsere Webseiten erheblich beschleunigen. Das Ziel war es, die Usability zu verbessern und natürlich eine angenehme User-Experience zu ermöglichen. Ein positiver Nebeneffekt ist, dass seit 2010 die Webseitengeschwindigkeit Einfluss auf das Google Ranking hat.&lt;/p&gt;
&lt;p&gt;Die wichtigsten Erfahrungen waren:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Das Messen von Internetseiten ist nicht trivial. Genutzt wurde am Ende &lt;a href=&quot;http://webpagetest.org/&quot; title=&quot;webpagetest&quot;&gt;WebPageTest&lt;/a&gt;, welches sich als sehr effektiv herausstellte.&lt;/li&gt;
&lt;li&gt;Der Internetausbau ist in Deutschland leider noch nicht so rosig wie die Politik es gern hätte, daher muss auf die übertragene Datenmengen geachtet werden!&lt;/li&gt;
&lt;li&gt;Wenn Drupal beschleunigt werden soll, gibt es nur ein credo: Caching wo es nur geht!&lt;/li&gt;
&lt;li&gt;Aktuelle Techniken zur Reduzierung der Anzahl an HTTP-Anfragen verwenden(JS-,CSS-Aggregation, CSS-Sprites...).&lt;/li&gt;
&lt;li&gt;Bilder optimieren mit Programmen wie OptiPNG und JpegOptim, sowie das richtige Format wählen.&lt;/li&gt;
&lt;li&gt;Unwichtige oder ressourcenintensive Inhalte dereferenzieren, d.h. mit Ajax nachladen.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So konnte ich die Webseitenladezeiten um ca. 60% verbessern und ich denke, dass es in Zukunft weitere spannende Projekte in dem Bereich Performance geben wird.&lt;/p&gt;
&lt;p&gt;Wenn Sie sich ein Bild dieser Maßnahmen machen wollen, besuchen sie einfach unsere Communitys :)&lt;/p&gt;
</description>
 <pubDate>Mon, 10 Oct 2011 14:49:18 +0200</pubDate>
 <dc:creator>martins</dc:creator>
 <guid isPermaLink="false">1055 at http://www.pludoni.de</guid>
</item>
<item>
 <title>&quot;Webservice&quot; für automatisierte Screenshots von Webseiten mit PHP und Webkit</title>
 <link>http://www.pludoni.de/node/1052</link>
 <description>&lt;p&gt;Kürzlich kam das Problem auf, von bestimmten Websites automatisiert auf einem Server Bildschirmfotos anzufertigen. Die Gründe dafür sind vielfältig:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Effiziente Vorbereitung für Tests einer gesamten Website&lt;/li&gt;
&lt;li&gt;Vorschau-Bilder für hinterlegte Links erstellen (wie bei Facebook oder Google+ bekannt)&lt;/li&gt;
&lt;li&gt;Screenshots von Social-Plugins (Facebook etc), um datenschutzkonform zu werden. Der User bekommt nur ein Bild vom Social-Plugin angezeigt, es wird keine Anfrage zum Server ausgeführt, und damit ist man datenschutzrechtlich auf der sicheren Seite. Alle Hinweise im Disclaimer sind eigentlich zu spät (&lt;a href=&quot;http://dejure.org/gesetze/TMG/13.html&quot; title=&quot;http://dejure.org/gesetze/TMG/13.html&quot;&gt;http://dejure.org/gesetze/TMG/13.html&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Eine bekannte Methode wäre, Firefox und einen X-Server zu installieren, um dann einen Screenshot des Desktops zu machen. Allerdings empfand ich diese Methode als unkomfortabel und instabil, weshalb ich mich nach einer anderen umsah.&lt;/p&gt;
&lt;p&gt;Gefunden habe ich &lt;a href=&#039;https://github.com/AdamN/python-webkit2png&#039;&gt;Webkit2png&lt;/a&gt;, ein in Python geschriebenes Skript zum automatisierten Aufruf des Webkit-Browsers, der bekanntermaßen der Unterbau des Google Chrome und Apple Safaris ist. Neben ein paar Installationsschwierigkeiten läuft das ganze nun aber ausgezeichnet, wenn auch etwas langsam.&lt;/p&gt;
&lt;h3&gt;Installation&lt;/h3&gt;
&lt;p&gt;Die Installation kurz beschrieben (für ein Debian-basiertes System)&lt;/p&gt;
&lt;pre&gt;
apt-get install python-qt4 libqt4-webkit git-core xvfb
git clone &lt;a href=&quot;https://github.com/AdamN/python-webkit2png&quot; title=&quot;https://github.com/AdamN/python-webkit2png&quot;&gt;https://github.com/AdamN/python-webkit2png&lt;/a&gt;
cd python-webkit2png
&lt;/pre&gt;&lt;p&gt;
Das Tool kann nun von der Kommandozeile wie folgt gestartet werden:&lt;/p&gt;
&lt;pre&gt;
./webkit2png.py -x 1024 768 -g 0 0 URL &gt; AUSGABE.png
&lt;/pre&gt;&lt;p&gt;Die Parameter 1024 768 beziehen sich auf die Größe des simulierten Graphikservers. Die Zahlen &quot;-g 0 0&quot; beziffern die Höhe und Breite des Browser-Fensters. &quot;0&quot; bedeutet hier Auto.&lt;/p&gt;
&lt;h3&gt;Micro Webservice mit PHP&lt;/h3&gt;
&lt;p&gt;Nun will man das ganze vielleicht noch mit einem PHP-Skript einwickeln, um es einfach abzurufen zu machen.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Man muss die Datei webkit2png.py in ein Verzeichnis mit dem zu schreibendem Skript legen&lt;/li&gt;
&lt;li&gt; Die Datei &quot;webkit2png.log&quot; muss für den Webserver schreibbar sein:&lt;br /&gt;
&lt;pre&gt;
touch webkit2png.log
chown www-data webkit2png.log
&lt;/pre&gt;&lt;li&gt;Nun kann das PHP Skript erstellt werden:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?php
  if ($_GET[&quot;url&quot;]) {
    $width = (int)$_GET[&quot;width&quot;];
    $height = (int)$_GET[&quot;height&quot;];
    $url = escapeshellarg($_GET[&quot;url&quot;]);
    $cmd = &quot;./webkit2png.py -x 1450 768 -g $width $height $url 2&gt;&amp;1&quot;;
    header(&#039;Content-Type: image/png&#039;);
    passthru($cmd);
} else {  ?&gt;
  &amp;lt;h2&gt;Nutzung&amp;lt;/h2&gt;
  &amp;lt;form method=&quot;get&quot;&gt;
   URL: &amp;lt;input type=&#039;text&#039; name=&#039;url&#039;/&gt;&amp;lt;br/&gt;
   Breite des Browser Frames (0 = Auto): &amp;lt;input type=&#039;text&#039; name=&#039;width&#039; value=&#039;0&#039;/&gt;&amp;lt;br/&gt;
   Hoehe des Browser Frames (0 = Auto): &amp;lt;input type=&#039;text&#039; name=&#039;width&#039; value=&#039;0&#039;/&gt;&amp;lt;br/&gt;
   &amp;lt;input type=&#039;submit&#039;/&gt;
   Be patient, may take a while :)
  &amp;lt;/form&gt;
&amp;lt;?php } ?&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voila, ein einfach anzusprechender Webservice, der uns Screenshots generiert und direkt anzeigt.&lt;/p&gt;
</description>
 <pubDate>Thu, 25 Aug 2011 19:48:37 +0200</pubDate>
 <dc:creator>stefanw</dc:creator>
 <guid isPermaLink="false">1052 at http://www.pludoni.de</guid>
</item>
<item>
 <title>Ein Grund sich schick zu machen - Liveschaltung von MINTsax.de</title>
 <link>http://www.pludoni.de/node/1044</link>
 <description>&lt;p&gt;Früh aufstehen hieß es am Liveschaltungstag von MINTsax.de. Ich hatte noch Glück und wurde &quot;erst&quot; um 8 abgeholt. Stefan, Kristof und v.a. Jörg mussten da etwas früher ran. Aber schließlich mussten wir auch schon um 9 Uhr bei der 3D Micromac in Chemnitz sein.&lt;br /&gt;
Angekommen waren wir erst einmal damit beschäftigt, die Fertigungshalle im MINTsax.de Style zu verschönern. Kristof positionierte seine Kamera. Und das nicht nur einmal...&lt;br /&gt;
Allmählich füllte sich dann auch der Veranstaltungsort mit Vertretern der Presse und natürlich mit den Gründerpartnern von MINTsax.de. Nach der offiziellen Eröffnung mit einigen Worten von Jörg und den Vertretern der Partner hatten die Journalisten die Möglichkeit Fragen zu stellen und zu filmen. Sehr interessant war es, dem Sachsenspiegel beim Filmen zu beobachten...&lt;/p&gt;
&lt;p&gt;Ich hatte die Ehre, an diesem Tag den Paparazzi spielen zu dürfen. Hier ein paar Backstage Bilder: &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.pludoni.de/files/pictures/MINT_1.JPG&quot; alt=&quot;Liveschaltung MINTsax.de&quot;/&gt; &lt;img src= &quot;http://www.pludoni.de/files/pictures/MINT_2.JPG&quot; alt=&quot;Liveschaltung MINTsax.de&quot;/&gt; &lt;img src=&quot;http://www.pludoni.de/files/pictures/MINT_3.JPG&quot; alt=&quot;Liveschaltung MINTsax.de&quot;/&gt; &lt;img src=&quot;http://www.pludoni.de/files/pictures/MINT_4.JPG&quot; alt=&quot;Liveschaltung MINTsax.de&quot;/&gt; &lt;img src=&quot;http://www.pludoni.de/files/pictures/MINT_5.JPG&quot; alt=&quot;Liveschaltung MINTsax.de&quot;/&gt; &lt;img src=&quot;http://www.pludoni.de/files/pictures/MINT_6.JPG&quot; alt=&quot;Liveschaltung MINTsax.de&quot;/&gt; &lt;img src=&quot;http://www.pludoni.de/files/pictures/MINT_9.JPG&quot; alt=&quot;Liveschaltung MINTsax.de&quot;/&gt; &lt;img src=&quot;http://www.pludoni.de/files/pictures/MINT_8.JPG&quot; alt=&quot;Liveschaltung MINTsax.de&quot;/&gt;&lt;/p&gt;
</description>
 <pubDate>Fri, 03 Jun 2011 16:22:31 +0200</pubDate>
 <dc:creator>stephanied</dc:creator>
 <guid isPermaLink="false">1044 at http://www.pludoni.de</guid>
</item>
<item>
 <title>Making-of für 3D Video ITsax.de Trailer für Mitschnitt-Festival, dem Abschlussfest der HTW-Dresden Informatik/Medieninformatik</title>
 <link>http://www.pludoni.de/node/1040</link>
 <description>&lt;p&gt;3D Film mit zwei Kameras auf einem Spezialstativ. Erinnerte mich ein bisschen an &quot;Nummer 5 lebt&quot; oder &quot;Wally&quot;. Wir hatten Glück. In Bautzen und Dresden sonniges Wetter. Pech hatten wir mit etwa 7 Catering-Fahrern. Deren schöne Autos wollten nicht so richtig ins Bild passen. Kaum war einer Weg, kam der nächste, der sich vor den zu filmenden Eingang stellte. Natürlich hatte der keine Zeit und somit auch kein Verständnis irgendwo anders zu parken. Das warten hat sich aber gelohnt - die Sonne kam raus und machte das Scenario noch schöner.&lt;/p&gt;
&lt;p&gt;Wir drehten zwei Tage bei der Bautzen IT.Group in Bautzen und bei der Salt Solutions in Dresden, das Erklärvideo zum ITsax.de-Prinzip. Dieses wird im Rahmen des Mitschnitt-Festivals der HTW-Dresden im Juli im 3D-Kino Ufa-Palast in Dresden gezeigt. Mehr unter &lt;a href=&quot;http://www2.htw-dresden.de/mitschnitt/&quot; title=&quot;http://www2.htw-dresden.de/mitschnitt/&quot;&gt;http://www2.htw-dresden.de/mitschnitt/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;pressimage&quot; src=&quot;http://www.pludoni.de/files/pictures/news/mitschnitt2011/itsax3d1.jpg&quot; alt=&quot;Making-of 3D Video Mitschnitt2011&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;pressimage&quot; src=&quot;http://www.pludoni.de/files/pictures/news/mitschnitt2011/itsax3d2.jpg&quot; alt=&quot;Making-of 3D Video Mitschnitt2011&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;pressimage&quot; src=&quot;http://www.pludoni.de/files/pictures/news/mitschnitt2011/itsax3d3.jpg&quot; alt=&quot;Making-of 3D Video Mitschnitt2011&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;pressimage&quot; src=&quot;http://www.pludoni.de/files/pictures/news/mitschnitt2011/itsax3d4.jpg&quot; alt=&quot;Making-of 3D Video Mitschnitt2011&quot; /&gt;&lt;/p&gt;
</description>
 <pubDate>Fri, 01 Apr 2011 19:37:37 +0200</pubDate>
 <dc:creator>jklukas</dc:creator>
 <guid isPermaLink="false">1040 at http://www.pludoni.de</guid>
</item>
<item>
 <title>Codeanalyse mit dem PHP Messdetector (phpmd)</title>
 <link>http://www.pludoni.de/node/1036</link>
 <description>&lt;p&gt;Um einen groben Überblick über die Codequalität zu erhalten, verwenden wir den PHP Messdetector. Dieser lässt sich per PHP PEAR recht leicht installieren, wie &lt;a href=&quot;http://phpmd.org/download/index.html&quot;&gt;hier&lt;/a&gt; beschrieben.&lt;/p&gt;
&lt;p&gt;Von der Kommandozeile lässt sich dieser nun recht leicht ausführen (Hier am Beispiel des Usermoduls von Drupal 5). Als erstes die Länge des Codes (&quot;codesize&quot;)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
// USAGE: phpmd files (text|xml|html) (unused|codesize|design|naming)&lt;br /&gt;
#  phpmd modules/user/user.module text codesize&lt;br /&gt;
modules/user/user.module:141 The function user_load() has a Cyclomatic Complexity of 10.&lt;br /&gt;
modules/user/user.module:210 The function user_save() has a Cyclomatic Complexity of 54.&lt;br /&gt;
modules/user/user.module:210 The function user_save() has an NPath complexity of 164166.&lt;br /&gt;
modules/user/user.module:210 Avoid really long methods.&lt;br /&gt;
modules/user/user.module:617 The function user_user() has a Cyclomatic Complexity of 13.&lt;br /&gt;
modules/user/user.module:690 Avoid really long methods.&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Hieran sieht man schön, dass die user_save Funktion alles andere als leicht wartbarer Code ist. Die Cyclomatischen Komplexität von 11, also der Anzahl an möglichen Entscheidungspunkten (if, while, for) innerhalb dieser Funktion ist eindeutig zu hoch.&lt;/p&gt;
&lt;p&gt;Neben &quot;codesize&quot; gibt es noch &quot;design&quot;, &quot;naming&quot; und &quot;unused&quot; innerhalb des Standard-Regelsatzes. Diese sind &lt;a href=&quot;http://phpmd.org/rules/index.html&quot;&gt;auf der PHPMD-Seite&lt;/a&gt; sehr gut beschrieben.&lt;/p&gt;
&lt;p&gt;Die Tests können natürlich keine exakte Aussage machen, ob die Qualität des Codes nun &quot;gut&quot; oder &quot;schlecht&quot; ist, aber sie geben einen sehr guten Anhaltspunkt für mögliche Refaktorisierungen.&lt;/p&gt;
</description>
 <pubDate>Mon, 21 Mar 2011 13:10:42 +0100</pubDate>
 <dc:creator>stefanw</dc:creator>
 <guid isPermaLink="false">1036 at http://www.pludoni.de</guid>
</item>
<item>
 <title>Entwicklerteam wächst: Wir begrüßen Martin</title>
 <link>http://www.pludoni.de/node/1034</link>
 <description>&lt;p&gt;Vor kurzem ist Martin zu uns gestoßen. Er wird Akos und Stefan beim Weiterentwickeln der pludoni Produktpalette unterstützen.&lt;br /&gt;
Martin studiert Informatik in Dresden und wird sein Praktikum und Bachelorarbeit bei uns absolvieren. Er hat Erfahrung mit PHP und dem Dojo-Framework und ist begeistert von den bisherigen Ruby-on-Rails-Entwicklungen in der Firma.&lt;/p&gt;
&lt;p&gt;Wir sind alle sehr gespannt, welche neuen Impulse er dem Team geben wird!&lt;/p&gt;
</description>
 <pubDate>Fri, 18 Mar 2011 10:53:57 +0100</pubDate>
 <dc:creator>stefanw</dc:creator>
 <guid isPermaLink="false">1034 at http://www.pludoni.de</guid>
</item>
</channel>
</rss>

