<?xml version="1.0" encoding="utf-8" ?> 
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<!--    
<rss version="2.0"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >  -->
   
<channel> 

<title>phpblogstars</title>
<link>http://www.phpblogstars.de</link>
<description>Alle wichtigen deutschsprachigen PHP-Blogs an einer Stelle</description>
<language>de-de</language>
<pubDate>Tue, 20 Oct 2009 19:00:00 +0200</pubDate>
<lastBuildDate>Tue, 07 Feb 2012 03:17:43 +0100 </lastBuildDate>
<docs>http://www.phpblogstars.de/feeds/rss.php</docs>
<generator>Rss Feed Engine</generator>
<managingEditor>mohl@mohl-informatik.de (Gabriele Mohl)</managingEditor>
<webMaster>mohl@mohl-informatik.de (Gabriele Mohl)</webMaster>
<atom:link href="http://www.phpblogstars.de/feeds/rss.php" rel="self" type="application/rss+xml" />


<item>
<title>Die Wiederbelebung der DBM Dateien</title>
<link>http://krsteski.de/php-tricks-und-tipps/die-wiederbelebung-der-dbm-dateien.html</link>




<description><![CDATA[ <p>In den Artikel von 14 Mai 2010 &#8222;<a href="http://krsteski.de/php-tricks-und-tipps/cachen-mit-dbm-dateien.html">Cahing mit DBM Dateien</a>&#8220; haben PHPGangster und ich dar&#252;ber diskutiert wie ein Caching Verfahren mit DBM Dateien etwa aussehen k&#246;nnte. Damals war das noch eine grobe Idee und nicht jeder konnte sich was darunter vorstellen, ob das gut funktionieren k&#246;nnte. Da man eben die DBA Extension in PHP neu konfigurieren muss. Sprich, das PHP musste neu Gebacken werden. Also, durch die Verwendung der Konfigurationsoption &#8211;enable-dba=shared wird ein dynamisch ladbares Modul erstellt, mit dem PHP eine grundlegende Unterst&#252;tzung von dbm-style-Datenbanken bietet. Es muss au&#223;erdem die Unterst&#252;tzung f&#252;r mindestens einen der folgenden Handler hinzugef&#252;gt werden, indem der configure-Schalter &#8211;with-[dba-handler] im PHP Konfigurationsaufruf angegeben wird. Das erschreckte mich nicht, in Gegenteil, ich nahm das als Ansporn und erstellte kurzerhand die erste Version der &#8222;CacheDba&#8220; Library. Nun, seit dann bis heute ist einiges passiert. Hier mein Update f&#252;r euch.<span id="more-744"></span></p>
<h3>DbaCache</h3>
<p>Die DbaCache-Library war die erste Entwicklung. Es ist eine unabh&#228;ngige PHP Library. Eigentlich sollte das ein Prototyp werden. Jedoch zeigte sich der Einsatz als sehr leicht und vor allem sehr schnell. Andere Entwickler und mir war wichtig ein Caching Mechanismus zu haben, das genauso schnell wie Memcache ist und nie &#252;berlaufen kann. Mittlerweile ist die DbaCache-Library auf diverse Open-Source Portale zur download bereitgestellt und wird gerne runter geladen sowie aktiv eingesetzt. Mehr freut es mich, dass es doch noch Jungs gibt die gerne bereit sind ihr PHP auf der Produktiv-Umgebung neu mit DBM zu konfigurieren bzw. umzustellen. Ich wei&#223;, dass es nicht immer ohne ist. :-)<br />
Link: <a href="https://github.com/gjerokrsteski/php-dba-cache">https://github.com/gjerokrsteski/php-dba-cache</a></p>
<h3>Zend_Cache_Backend_Dba bei ZF1</h3>
<p>Kurz danach, quasi &#252;ber Nacht, habe ich die Komponente Zend_Cache_Backend_Dba entwickelt und ebenfalls auf GitHub bereitgestellt. Es dauerte nicht lange, dann w&#252;rde der Marc Bennewitz von ZF darauf aufmerksam und bat mich die Komponente zu refaktorisieren und ein Backport auf ZF1 zu machen. An dieser Stelle &#8211; Marc vielen Dank f&#252;r das tolle Code-Review. Deine Tipps habe ich ebenfalls in der DbaCache-Library nachgezogen.<br />
Link: <a href="https://github.com/gjerokrsteski/zf1">https://github.com/gjerokrsteski/zf1</a></p>
<h3>Zend\Cache\Storage\Adapter\Dba bei ZF2</h3>
<p>Nun, wie ihr bereits wisst ist dass ZF2 komplett auf Namespaces umgestellt und bietet eine Menge an Scafolding Mechanismen, die den Alltag um einiges erleichtern. In ZF2 hat der Marc Bennewitz basierend auf ZF1 das DBA Caching als ein  Cache\Storage\Adapter implementiert. Das ganze befindet sich noch in der Entwicklung &#8211; sieht aber bereits jetzt ganz solide aus. Bitte f&#252;hlt euch frei ein ZF Contributor zu werden und diese Komponente weiter zu entwickeln.<br />
Link: <a href="https://github.com/gjerokrsteski/zf2">https://github.com/gjerokrsteski/zf2</a></p>
<p>Ja, das war&#8217;s eigentlich. Es w&#252;rde mich sehr freuen, wenn der eine oder andere die oben genannten Komponenten auf GitHub forkt und sie ebenfalls ausprobiert und mir ein Feedback gibt. Rock on!!!</p>
 ]]></description>
 
 <pubDate>
Mon, 06 Feb 2012 20:06:56 +0100</pubDate>
 
<guid isPermaLink="false">
http://krsteski.de/php-tricks-und-tipps/die-wiederbelebung-der-dbm-dateien.html</guid>

</item>


<item>
<title>Websiteoptimierung mit dynaTrace AJAX Edition - Vortrag@M&#252;nchen</title>
<link>http://www.phpugmunich.org/archives/435-Websiteoptimierung-mit-dynaTrace-AJAX-Edition-VortragMuenchen.html</link>




<description><![CDATA[ 
    Am kommenden <b>Donnerstag, den 09.02.2012</b> findet ein weiterer &#246;ffentlicher Vortrag im Mayflower-B&#252;ro in M&#252;nchen statt (Mannhardtstra&#223;e 6, S-Bahn Isartor).
<br />
Beginn ist um 18:00 Uhr, Thema des Vortrags ist "<b>Websiteoptimierung mit dynaTrace AJAX Edition</b>".
<br /><br />
Sie wollten schon immer mal wissen, was Ihre Webseite im Browser wirklich ausbremst und wo Optimierungsbedarf besteht? Dann geht es nicht nur Ihnen so, denn die Geschwindigkeit einer Webseite bekommt eine immer gr&#246;&#223;ere Bedeutung. Oft wird dabei viel Zeit investiert, um die Ausf&#252;hrung an Stellen zu beschleunigen, welche sich am Ende kaum lohnen. Dabei l&#228;sst sich gerade im Browser mit einfachen Mitteln oft sehr viel Zeit gewinnen.<br /><br />

Thomas Steur, Senior Developer bei der Mayflower GmbH am Standort W&#252;rzburg, zeigt Ihnen anhand eines Beispiels, wie Sie mit der kostenlosen Software &#8222;dynaTrace AJAX Edition&#8220; Problemstellen innerhalb einer Webseite entdecken. Die Software unterst&#252;tzt das Analysieren von Webseiten mit den Browsern Internet Explorer und Firefox.<br /><br />

Ausgewertet wird dabei das Rendering der Seite im Browser, die CPU-Auslastung, das Ausf&#252;hren von JavaScript, sowie das Cachen und Verarbeiten von Ressourcen. Dabei wird sichtbar gemacht, wie der Browser die Webseite im Detail verarbeitet. 
<br /><br />
Die "Donnerstags-Vortr&#228;ge" werden sowohl in W&#252;rzburg als auch in M&#252;nchen gehalten. Bei Interesse einfach das Blog beobachten, um auf dem Laufenden zu bleiben!
<br />
Wir freuen uns auf viele Teilnehmer!
<br /><br />
<a href="http://maps.google.de/maps?f=q&source=s_q&hl=de&geocode=&q=80538+Mannhardtstrasse+6&sll=51.151786,10.415039&sspn=9.8995,28.256836&ie=UTF8&hq=&hnear=Mannhardtstra%C3%9Fe+6,+M%C3%BCnchen+80538+M%C3%BCnchen,+Bayern&ll=48.137712,11.585426&spn=0.010281,0. 
     ]]></description>
 
 <pubDate>
Mon, 06 Feb 2012 12:04:09 +0100</pubDate>
 
<guid isPermaLink="false">
http://www.phpugmunich.org/archives/435-guid.html</guid>

</item>


<item>
<title>Protest gegen ACTA in M&#252;nchen am 11.02.2012</title>
<link>http://www.phpugmunich.org/archives/433-Protest-gegen-ACTA-in-Muenchen-am-11.02.2012.html</link>




<description><![CDATA[ 
    <p>Folgende Mail erreichte mich gestern:</p>

<p><b>Protest gegen ACTA in M&#252;nchen am 11.02.2012</b></p>

<p>Samstag, 11. Februar um 12:30<br />
Ort: Karlsplatz Stachus</p>

<p><a href="http://www.facebook.com/events/117215651734097/" target="_blank">Nimmst du teil?</a></p>





 
     ]]></description>
 
 <pubDate>
Fri, 03 Feb 2012 02:51:46 +0100</pubDate>
 
<guid isPermaLink="false">
http://www.phpugmunich.org/archives/433-guid.html</guid>

</item>


<item>
<title>Review: Virtual GIT Summit</title>
<link>http://www.phpmonkeys.de/2012/02/02/review-virtual-git-summit/</link>




<description><![CDATA[ <p>Gestern Abend fand das <a href="http://www.phparch.com/phparchitect-live-presents-the-virtual-git-summit/" target="_blank">Virtual GIT Summit</a> statt und dazu gibt es hier ein kleines Review.<br />
<span id="more-1748"></span></p>
<h2>Technik</h2>
<p>Da es &#8220;Virtual&#8221; hei&#223;t, kann man schon erraten, dass es sich nicht um eine normale Konferenz handelt. Vielmehr wurde alles &#252;ber das Netz gestreamt und somit konnte man weltweit aus dem trauten Heim der Veranstaltung folgen. Als Basis diente die Vuze Meeting Seite. &#220;ber einen Link gelangte man in den entsprechenden Raum und &#252;ber eine Skype Verbindung zu Vuze Meeting wurde die Tonspur bereitgestellt. Somit wurde eine bew&#228;hrte Technik f&#252;r den Audio-Stream genutzt, was ich recht schick finde. Es bestand auch die M&#246;glichkeit den Stream &#252;ber die Webseite zu beziehen aber laut den anderen Teilnehmern war die Skype-L&#246;sung tendenziell besser. Die Einwahl per telefon w&#228;re auch m&#246;glich gewesen, aber von Deutschland her wenig sinnvoll. Support wurde &#252;ber einen IRC-Channel im freenode-Netz geleistet. Hier&#252;ber konnte man auch Fragen an die Referenten weitergeben.</p>
<h2>Speaker</h2>
<p>Es gab 4 Referenten, die jeweils ca. eine Stunde Sprechzeit hatten. Genutzt wurde zumeist f&#252;r den Vortrag zwischen 45 und 50 Minuten. Danach gab es noch die M&#246;glichkeit Fragen zu stellen. </p>
<h4><em>David Collier</em> &#8211; &#8220;Basics of Git&#8221;</h4>
<p>Der Vortrag von David war eine sehr gute Einf&#252;hrung zu den Grundlagen von Git. Vergleiche zu Subversion wurden gezogen und die Befehle vorgestellt, die einen Entwickler bei der t&#228;glichen Arbeit begleiten. Auf der Tonspur gab es sehr viele Informationen zu den recht &#252;bersichtlichen Folien. Leider gab es beim Screensharing ein paar technische Probleme und so musste eine Alternative gefunden werden. Diese war recht suboptimal und hat die Live-Vorf&#252;hrung etwas &#252;berfl&#252;ssig gemacht. Der Bildaufbau war einfach zu langsam, oder David zu schnell. Aber die Grundlagen kann man nat&#252;rlich auch leicht selbst ausprobieren.<br />
Folien: <a href="http://speakerdeck.com/u/davidcoallier/p/git-basics" target="_blank">http://speakerdeck.com/u/davidcoallier/p/git-basics</a></p>
<h4><em>John Mertic</em> &#8211; &#8220;Subversion to Git: A Sugar Story&#8221;</h4>
<p>Hier ging es schon ein bisschen weiter und John hat einige Anekdoten aus seiner Entwickler-Zeit erz&#228;hlt. Wie man von Subversion zu Git migriert und welche Herausforderungen dadurch an ein Entwicklerteam gestellt werden. Insgesamt sehr spannend und unterhaltsam. Leider gab es einige Aussetzer im Audio Stream.<br />
Folien: <a href="http://www.slideshare.net/jmertic/the-virtual-git-summit-subversion-to-git-a-sugar-story" target="_blank">http://www.slideshare.net/jmertic/the-virtual-git-summit-subversion-to-git-a-sugar-story</a></p>
<h4><em>Chris Hartjes</em> &#8211; &#8220;You&#8217;ve Decided to Use Git as Your VCS for Your Team&#8230;So Now What?&#8221;</h4>
<p>Chris Vortrag ging noch einen Schritt weiter und das Thema war im Gro&#223;en, wie man mit Git Branches organisiert. Dabei ging es um Feature-, Bugfix-, Staging-Branches und den Master. Er hat somit aus dem Leben eines Entwicklers berichtet der <a href="http://nvie.com/posts/a-successful-git-branching-model/" target="_blank">nach diesem Muster</a> branched. Diesmal gab es keine technischen Schwierigkeiten und der Vortrag war ebenfalls sehr gut und auch recht locker gehalten.<br />
Folien: <a href="http://speakerdeck.com/u/grumpycanuck/p/youve-decided-to-use-git-as-your-vcs-for-your-teamso-now-what" target="_blank">http://speakerdeck.com/u/grumpycanuck/p/youve-decided-to-use-git-as-your-vcs-for-your-teamso-now-what</a></p>
<h4><em>Travis Swicegood</em> &#8211; &#8220;Git&#8217;s Meat Cleavers&#8221;</h4>
<p>Travis hat schon auf einer h&#246;heren Ebene begonnen und hat mich als Git Laien nach ca. 15-20 Minuten vollkommen abgeh&#228;ngt. Es ging um die Themen Rebase und Bisect. Wer mit Git arbeitet wird in den Folien sicher wertvolle Informationen finden, ich werde diese wohl erst zu einem sp&#228;teren Zeitpunkt zu sch&#228;tzen wissen. Der Vortrag an sich war sehr strukturiert und nach jedem Abschnitt gab es die M&#246;glichkeit f&#252;r das Publikum Fragen zu stellen. Die Technik spielte auch diesmal mit und somit war der Vortrag ein gelungener Abschlu&#223;.<br />
Folien: <a href="http://speakerdeck.com/u/tswicegood/p/gits-meat-cleavers" target="_blank">http://speakerdeck.com/u/tswicegood/p/gits-meat-cleavers</a></p>
<h2>Fazit</h2>
<p>Das &#8220;Virtual Git Summit&#8221; hat wirklich Spa&#223; gemacht und einen guten Motivations-Schub gegeben, sich mehr mit Git zu besch&#228;ftigen. Interessant war die Tatsache, dass die ersten 3 Referenten Github sehr gelobt haben und im Chat auch eine &#228;hnliche Meinung vorherrschte. Nicht nur wegen der Opensource-Projekte, sondern vor allem im Firmenumfeld als Ersatz f&#252;r ein Inhouse-Repository. Wenn Zeit und Themen passen, werde ich sicher bei weiteren virtuellen Summits dabei sein.  </p>
 ]]></description>
 
 <pubDate>
Thu, 02 Feb 2012 08:42:14 +0100</pubDate>
 
<guid isPermaLink="false">
http://www.phpmonkeys.de/?p=1748</guid>

</item>


<item>
<title>Gro&#223;e PHP-Arrays, SPL und Sessions</title>
<link>http://www.schmengler-se.de/gro%C3%9Fe-php-arrays-spl-und-sessions</link>




<description><![CDATA[ <p>Folgende Problemstellung: eine gro&#223;e Datenmenge wird auf einmal abgefragt, soll aber nicht direkt komplett an den Client gesendet werden, also wird sie in der Session zwischengespeichert. Vielleicht im allgemeinen nicht die geschickteste L&#246;sung, in meinem Fall fielen die Nachteile jedoch nicht ins Gewicht. "Gro&#223;" bedeutete dabei im Bereich von 10-50 MB in 50K-100K Datens&#228;tzen.</p><p>Das ist nun leider eine Menge, bei der PHP-Arrays nur noch mit Vorsicht einzusetzen sind. Der Flaschenhals war in diesem Fall <tt>array_shift()</tt>, womit Eintr&#228;ge aus dem in der Session befindlichen Arrays entnommen wurden. Was l&#228;ge da n&#228;her, als auf eine der SPL-Datenstrukturen zur&#252;ckzugreifen? Leider sind sowohl <strong>SplStack</strong> als auch <strong>SplFixedArray</strong> <em>nicht serialisierbar</em> und somit nicht ohne Weiteres mit Sessions zu gebrauchen.</p><p>Dies l&#228;sst sich nachr&#252;sten, dabei muss allerdings doch wieder auf PHP-Arrays zur&#252;ckgegriffen werden. Mit dem Performance-Verlust beim Serialisieren und Deserialisieren erkauft man sich allerdings eine deutlich effizientere Daten-Verarbeitung. In meinem Fall war SplStack bzw. SplDoublyLinkedList perfekt, da die Daten nur noch der Reihe nach abgeholt werden sollten. Die Erweiterung sieht wie folgt aus:</p><h4>Serialisierbare SPL-Datenstruktur</h4><pre class="code"><code class="php">class SerializableList extends SplDoublyLinkedList
{
    private $_data;
    
    public function __sleep()
    {
        $this->_data = array();
        
        $this->rewind();
        
        while ($this->valid()) {
            $this->_data[] = $this->current();
            $this->next();
        }
        
        return array('_data');
    }
    
    public function __wakeup()
    {
        foreach ($this->_data as $row) {
            $this->push($row);
        }
        
        $this->_data = array ();
    }
}
</code></pre><h4>Kurz erk&#228;rt</h4><p>Beim Serialisieren (<tt>__sleep()</tt>) wird die Datenstruktur in ein PHP-Array (im Attribut <tt>_data</tt>) konvertiert und mit <tt>return array('_data')</tt> festgelegt, dass genau dieses Attribut serialisiert werden soll. Beim Deserialisieren (<tt>__wakeup()</tt>) ist <tt>_data</tt> wiederhergestellt und kann zur&#252;ck konvertiert werden. Anschlie&#223;end wird mit <tt>$this->_data = array()</tt> der Speicher wieder freigegeben.</p><h4>Vorsicht</h4><p>Ob diese L&#246;sung im konkreten Fall sinnvoll ist, kann nur durch eigene Messungen ermittelt werden. Dabei sollte vor allen Dingen darauf geachtet werden, die Anzahl der Serialisierungsvorg&#228;nge so gering wie m&#246;glich zu halten, denn wie schon gesagt sind die durch die zus&#228;tzliche Konvertierung teurer als zuvor. Als Beispiel: Bei 8 Abfragen a 10000 Datens&#228;tzen war meine Anwendung mindestens 20 mal schneller als bei 80 Abfragen a 1000 Datens&#228;tzen. Und beide Varianten schlagen die Implementierung nur mit PHP-Arrays um L&#228;ngen.</p><p>Eine Herausforderung f&#252;r weitere Optimierung w&#228;re es noch, einen eigenen Serialisierer zu schreiben, der ohne PHP-Array auskommt. Das w&#228;re allerdings eher etwas f&#252;r die <a href="http://pecl.php.net/">PECL</a>, sprich direkt in C gehackt. In PHP selbst sehe ich da wenig Hoffnung in puncto Effizienz.</p> ]]></description>
 
 <pubDate>
Wed, 01 Feb 2012 23:21:32 +0100</pubDate>
 
<guid isPermaLink="false">
http://www.schmengler-se.de/gro%C3%9Fe-php-arrays-spl-und-sessions</guid>

</item>


<item>
<title>Ausfallsichere, skalierbare und sichere Hosting-L&#246;sung von maxcluster zu gewinnen!</title>
<link>http://www.phpgangsta.de/ausfallsichere-skalierbare-und-sichere-hosting-losung-von-maxcluster-zu-gewinnen</link>




<description><![CDATA[ <p><a href="http://maxcluster.de/" target="_blank"><img class="alignright  wp-image-4237" style="border: 0pt none;" title="maxcluster" src="http://www.phpgangsta.de/wp-content/uploads/maxclusterlogo.png" alt="" width="214" height="34" /></a>Mit einer spannenden Aktion m&#246;chte ich in den Februar starten. Der Anbieter <a href="http://maxcluster.de/" target="_blank">maxcluster</a> stellt zwei Produkte f&#252;r eine Laufzeit von 6 Monaten zur Verf&#252;gung mit einem Gesamtwert von &#252;ber 2300&#8364;!</p><p>Was gibt es genau zu gewinnen?</p><ol><li>Application Cluster mit einer Konfiguration von 6 CPUs, 8 GB RAM, 200 GB HDD, 20 GB Netzwerk-Storage und 500 GB Traffic</li><li>Failover Cluster mit einer Konfiguration von 2 CPUs, 4 GB RAM, 100 GB HDD , 10 GB Netzwerk-Storage und 500 GB Traffic</li></ol><p><a href="http://maxcluster.de/magento-cluster-hosting" target="_blank"><img class="size-medium wp-image-4238 alignnone" style="border: 0pt none;" title="Failover Cluster" src="http://www.phpgangsta.de/wp-content/uploads/products-failover-cluster-architecture-300x74.jpg" alt="" width="300" height="74" /></a></p><p><strong>Wie kann man einen Cluster gewinnen?</strong></p><p>Beschreibe kurz in 2-3 S&#228;tzen hier im Blog als Kommentar welches Projekt auf dem Cluster betrieben werden soll. Den Zuschlag bekommt das Projekt welches am faszinierendsten und interessantesten wirkt. Die Aktion l&#228;uft bis n&#228;chsten Dienstag Abend 23:59 (07.02.2012). <strong>Der Cluster kann gern von Start-Ups, Unternehmen oder privat genutzt werden.</strong></p><p>Vier Wochen nach der Vergabe w&#252;rde ich mich &#252;ber einen kurzen Erfahrungsbericht hier im Blog freuen, und maxcluster freut sich nat&#252;rlich auch sehr &#252;ber Verbesserungensvorschl&#228;ge und Feedback aller Art.</p><blockquote><p>Die maxcluster GmbH stellt ausfallsichere, skalierbare und sichere virtuelle Cluster zur Verf&#252;gung. Die Infrastruktur wurde f&#252;r Unternehmen mit anspruchsvollen Internetseiten und Anwendungen konzipiert und ist in Frankfurt beheimatet. Bereits ab einer monatlichen Geb&#252;hr von 59 Euro steht eine komplette Infrastruktur mit ausfallsicheren Servern, redundanten Storage, externer Firewall, t&#228;glichen Backups und Monitoring zur Verf&#252;gung, die sofort einsatzbereit ist. Neben vielen anderen Kunden und Projekten wird auch das <a href="http://wiwi.uni-paderborn.de/dep3/winfo2/forschung/projekte/paderborner-peer-instruction/" target="_blank">Paderborner Peer Instruction</a> Projekt unterst&#252;tzt.</p></blockquote><p>Ich w&#252;nsche viel Erfolg bei dem Gewinnspiel! Vielen Dank an maxcluster f&#252;r die Aktion!</p> <br/><br/><p>&#196;hnliche Artikel:</p><ol><li><a href='http://www.phpgangsta.de/php-magazin-jahresabos-zu-gewinnen' rel='bookmark' title='PHP Magazin Jahresabos zu gewinnen'>PHP Magazin Jahresabos zu gewinnen</a></li><li><a href='http://www.phpgangsta.de/weihnachtsgewinnspiel-bei-antwerpes-arduino-zu-gewinnen' rel='bookmark' title='Weihnachtsgewinnspiel bei antwerpes: Arduino zu gewinnen'>Weihnachtsgewinnspiel bei antwerpes: Arduino zu gewinnen</a></li><li><a href='http://www.phpgangsta.de/php-test-fur-fortgeschrittene-zce-tests-zu-gewinnen' rel='bookmark' title='PHP-Test f&#252;r Fortgeschrittene | ZCE Tests zu gewinnen'>PHP-Test f&#252;r Fortgeschrittene | ZCE Tests zu gewinnen</a></li></ol> ]]></description>
 
 <pubDate>
Wed, 01 Feb 2012 08:38:45 +0100</pubDate>
 
<guid isPermaLink="false">
http://www.phpgangsta.de/?p=4236</guid>

</item>


<item>
<title>Treffen 02.2012, Vortrag: SQL Tipps und Tricks Part-III</title>
<link>http://www.phpugs.de/archives/158-Treffen-02.2012,-Vortrag-SQL-Tipps-und-Tricks-Part-III.html</link>




<description><![CDATA[ 
    Wie jeden 2. Mittwoch im Monat trifft sich die PHP User Group Stuttgart auch im Februar 2012 wieder zu einem Vortrag und anschliessendem gem&#252;tlichen Beisammensein.<br />
<br />
Termin: 08.02.2012, 19:00 Uhr<br />
<br />
<h3>Vortrag: SQL Tipps und Tricks Part-III</h3><br />
Ohne SQL und Datenbanken kommt kaum ein Entwickler aus. <br />
Wie man SQL nun m&#246;glichst effektiv und performant nutzt ist diesmal der Schwerpunkt des Vortrages. <br />
Der dritte Teil in der Reihe "SQL Tipps &amp; Tricks".<br />
<br />
Themen des Vortrages sind: <br />
- Datenbank- und SQL-Performance<br />
- Erkennen warum eine SQL-Abfrage langsam ist<br />
- SQL Tipps und Tricks aus der Praxis<br />
<br />
<hr/><br />
Referent ist <a href="http://www.phpugs.de/archives/68-Thomas-Wiedmann.html">Thomas Wiedmann</a> (<a href="http://www.twiedmann.de/">www.twiedmann.de</a>), Softwareentwickler mit Schwerpunkt SQL und Datenbank.<br />
<br />
Eingeladen ist jeder Interessierte, besonders PHPler aus Stuttgart. Neue Gesichter sind herzlich willkommen!<br />
<br />
Vortrag ab 19 Uhr in den R&#228;umen des <a href="http://coworking-stuttgart.de/" target="_blank">Coworking0711</a>.<br />
<br />
<strong>Achtung, neue Adresse: </strong><br />
<a href="http://coworking-stuttgart.de/" target="_blank">Coworking0711</a><br />
Ossietzkystra&#223;e 4<br />
70174 Stuttgart <br />
<br />
Danach: gem&#252;tliche Runde, ab ca. 20:30 Uhr im Schlesinger oder einer anderen Kneipe in der Stuttgarter Innenstadt. <br />
 
     ]]></description>
 
 <pubDate>
Tue, 31 Jan 2012 18:42:26 +0100</pubDate>
 
<guid isPermaLink="false">
http://www.phpugs.de/archives/158-guid.html</guid>

</item>


<item>
<title>Real-Time-Monitoring - Vortrag@M&#252;nchen</title>
<link>http://www.phpugmunich.org/archives/432-Real-Time-Monitoring-VortragMuenchen.html</link>




<description><![CDATA[ 
    Am kommenden <b>Donnerstag, den 02.02.2012</b> findet ein weiterer &#246;ffentlicher Vortrag im Mayflower-B&#252;ro in M&#252;nchen statt (Mannhardtstra&#223;e 6, S-Bahn Isartor).
<br />
Beginn ist um 18:00 Uhr, Thema des Vortrags ist "<b>Real-Time-Monitoring</b>".
<br /><br />
Jeder kennt Aussagen wie: Haben wir es schneller gemacht? Bringt uns das
neue Feature mehr Geld oder Besucher? Haben wir es kaputt gemacht und wann?
All diese Fragen k&#246;nnen mittels Monitoring, implementiert durch nur
wenigen Zeilen Code, einfach beantwortet werden.
Anhand von Beispielen soll in  dem Vortrag aufgezeigt werden, wie einfach
man mit Graphite, StatsD, gDash und weiteren Tools ein Monitoring
aufbauen kann das den kompletten Stack der Applikation abdeckt.
<br /><br />
Die "Donnerstags-Vortr&#228;ge" werden sowohl in W&#252;rzburg als auch in M&#252;nchen gehalten. Bei Interesse einfach das Blog beobachten, um auf dem Laufenden zu bleiben!
<br />
Wir freuen uns auf viele Teilnehmer!
<br /><br />
<a href="http://maps.google.de/maps?f=q&source=s_q&hl=de&geocode=&q=80538+Mannhardtstrasse+6&sll=51.151786,10.415039&sspn=9.8995,28.256836&ie=UTF8&hq=&hnear=Mannhardtstra%C3%9Fe+6,+M%C3%BCnchen+80538+M%C3%BCnchen,+Bayern&ll=48.137712,11.585426&spn=0.010281,0. 
     ]]></description>
 
 <pubDate>
Tue, 31 Jan 2012 09:51:34 +0100</pubDate>
 
<guid isPermaLink="false">
http://www.phpugmunich.org/archives/432-guid.html</guid>

</item>


<item>
<title>Closures in PHP</title>
<link>http://blog.ebene7.com/2012/01/30/closures-in-php/</link>




<description><![CDATA[ <p>Ab der Version 5.3 bietet auch PHP, wie auch schon viele andere Sprachen, die M&#246;glichkeit mit <a href="http://www.php.net/manual/de/functions.anonymous.php" target="_blank">anonymen Funktionen</a> zu arbeiten. Dadurch k&#246;nnen z.B. Callback-Funktionen zur Filterung o.&#196;. implementiert werden, ohne dass man sich daf&#252;r tolle Namen ausdenken muss. Aber was kann man damit noch machen?</p>
<p><span id="more-3364"/>Bislang musste man Callback-Funktionen gew&#246;hnlich definieren, bevor man sie verwenden konnte.</p>
<pre>&lt;?php
function myCallback($output) {
  return '##' . $output . '##';
}

echo call_user_func('myCallback', 'Hallo Welt');

// Ausgabe:
##Hallo Welt##</pre>
<p>Als Closure geschrieben s&#228;he das dann so aus:</p>
<pre>&lt;?php
echo call_user_func(
  function($output) { return '##' . $output . '##'; },
 &#160;'Hallo Welt');

// Ausgabe:
##Hallo Welt##</pre>
<p>Zugegeben, dieses Beispiel h&#228;tte man durch einfache Stringverkettung wesentlich einfacher schreiben k&#246;nnen und eigentlich war das mit <a href="http://de2.php.net/manual/de/function.create-function.php" target="_blank">create_function()</a> auch schon unter PHP4 m&#246;glich.</p>
<p>Wir k&#246;nnen die Funktion nat&#252;rlich wie fr&#252;her auch schon in einer Variablen speichern und dann weiter verwenden.</p>
<pre>&lt;?php
$myFunction = function($output) {
&#160;&#160;return '##' . $output . '##';
};

echo call_user_func($myFunction, 'Hallo Welt') . '&lt;br/&gt;';
echo $myFunction('Hallo Welt') . '&lt;br/&gt;';

//Ausgabe:
##Hallo Welt##
##Hallo Welt##</pre>
<p>Und auch das ist ja noch nichts Neues. Mit Closures haben wir nun aber auch die M&#246;glichkeit, teile unserer &#8220;Umgebung&#8221; zum Zeitpunkt der Funktionsdefinition zu konservieren.</p>
<p>Dazu m&#252;ssen wir nur die Definition etwas erweitern.</p>
<pre>&lt;?php
$before = '&gt;';
$after = '&lt;';

$myFunction = function($output) use ($before, $after) {
&#160;&#160; &#160;return $before . $output . $after;
};

echo $myFunction('Hallo Welt') . '&lt;br/&gt;';

//Ausgabe:
&gt;Hallo Welt&lt;</pre>
<p>An dieser Stelle frieren wir mit &#8220;use&#8221; sozusagen die Werte f&#252;r $before und $after innerhalb unserer Funktion ein. Sp&#228;tere &#196;nderungen der beiden Variablen haben keine Auswirkungen auf die Funktion.</p>
<pre>$before = 'foo';
$after = 'bar';
echo $myFunction('Hallo Welt') . '&lt;br/&gt;';

//Ausgabe:
&gt;Hallo Welt&lt;</pre>
<p>In PHP wir mittlerweile sehr viel mit Standardinterfaces und -klassen (SPL) abgedeckt und so ist es auch in diesem Fall. In der Variablen $myFunction ist ein Objekt vom Typ &#8220;<a href="http://de2.php.net/manual/en/class.closure.php" target="_blank">Closure</a>&#8221; gespeichert.</p>
<pre>&lt;?php
echo '&lt;pre&gt;' . print_r($myFunction, true) . '&lt;/pre&gt;';

//Ausgabe:
Closure Object
(
  [static] =&gt; Array
    (
      [before] =&gt; &gt;
      [after] =&gt; &lt;
    )
  [parameter] =&gt; Array
    (
      [$output] =&gt;
    )
)</pre>
<p>Will man eigene Objekte wie Funktionen aufrufen, dann geht das mit der magischen Methode <a href="http://de2.php.net/manual/de/language.oop5.magic.php#language.oop5.magic.invoke" target="_blank">__invoke()</a>, die auch hier verwendet wird.</p>
<p>Anfangs erw&#228;hnte ich, dass Closure-Callbacks zur Filterung, aber auch zur Manipulation von Array verwendet werden k&#246;nnen.</p>
<p>Wenn nur der Inhalt interessant ist, dann kommen wir mit array_map() und einem Parameter aus.</p>
<pre>&lt;?php
$values = array(
  array(
&#160;&#160; &#160;'a' =&gt; array(
&#160;&#160;   &#160;'b' =&gt; 'foo'
&#160;&#160; &#160;)
&#160; ),
&#160; array(
&#160;   'a' =&gt; array(
&#160;&#160; &#160;  'b' =&gt; 'bar'
&#160;&#160; &#160;)
&#160; ),
);

$filtered = array_map(
&#160; function ($item) { return $item['a']['b']; },
&#160; $values
);
echo '&lt;pre&gt;' . print_r($filtered, true) . '&lt;/pre&gt;';

// Ausgabe:
Array
(
  [0] =&gt; foo
&#160; [1] =&gt; bar
)</pre>
<p>Wollen wir aber Werte im Array in Abh&#228;ngigkeit zum Key/Index ver&#228;ndern, dann geht das mit array_walk und einem zweiten Parameter im Callback. Bei beiden kann nat&#252;rlich auch &#8220;use&#8221; verwendet werden. Der Parameter $value wird dabei als Referenz &#252;bernommen.</p>
<pre>$values = array(
&#160; 'a' =&gt; 100,
&#160; 'b' =&gt; 200,
&#160; 'c' =&gt; 300,
);

array_walk(
&#160; $values,
&#160; function (&amp;$value, $key) {
&#160;&#160;&#160; if ('b' == $key) {
&#160;&#160; &#160;&#160; $value = 42;
&#160;&#160; &#160;}
&#160; }
);

echo '&lt;pre&gt;' . print_r($values, true) . '&lt;/pre&gt;';

// Ausgabe:
Array
(
  [a] =&gt; 100
  [b] =&gt; 42
  [c] =&gt; 300
)</pre>
<p>Ich hoffe, dass ich ein wenig Licht ins Dunkel bringen konnte und &#8220;Closure&#8221; nun kein geheimnisvolles Zauberwort mehr ist.</p>
<p>Wenn ihr noch gute Erg&#228;nzungen oder Anwendungbeispiele habt, dann immer her damit und bitte fleissig kommentieren. <img src="http://blog.ebene7.com/wp-includes/images/smilies/icon_smile.gif" alt=":-)" class="wp-smiley"/></p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-center sexy-bookmarks-bg-caring-old">
<ul class="socials"><li class="sexy-comfeed">
			<a href="http://blog.ebe&lt;/body&gt;"/></li></ul></div><p><i>Artikel gek: Lesen Sie den Rest <a href="http://blog.ebene7.com/2012/01/30/closures-in-php/">hier</a> (weitere 3132 Bytes)</i></p> ]]></description>
 
 <pubDate>
Mon, 30 Jan 2012 05:00:58 +0100</pubDate>
 
<guid isPermaLink="false">
http://blog.ebene7.com/?p=3364</guid>

</item>


<item>
<title>deCHK 2.0.1 ist erschienen</title>
<link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/9NnUjcBAPw0/dechk-201-ist-erschienen.html</link>




<description>deCHK Version 2.0.1 ist erschienen.<br />
<br />
deCHK beherrscht nun die beiden <a href="http://www.uniplot.de/" target="_blank">Uniplot</a> Dateitypen .nc und .ipw. Damit beherrscht das Tool nun 50 Dateitypen, nachlesbar auf der Homepage.<br />
<br />
Zur Homepage und zum Download:&nbsp;<a href="http://www.techcrawler.de/dechk/" target="_blank">http://www.techcrawler.de/dechk/</a><br />
<br /><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4097639809240086703-4246735098806408134?l=softwareentwickler.blogspot.com' alt='' /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=9NnUjcBAPw0:MPpHkEoOtF4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/9NnUjcBAPw0" height="1" width="1"/></description>
 
 <pubDate>
Sun, 29 Jan 2012 19:47:00 +0100</pubDate>
 
<guid isPermaLink="false">
tag:blogger.com,1999:blog-4097639809240086703.post-4246735098806408134</guid>

</item>

 


</channel>
</rss>
