<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2germanfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-4097639809240086703</atom:id><lastBuildDate>Thu, 18 Oct 2012 09:42:02 +0000</lastBuildDate><category>windows live</category><category>mobile</category><category>Zend_Pdf</category><category>zend server</category><category>Wordpress</category><category>Allgemein</category><category>encoding</category><category>Studium</category><category>ICQ</category><category>firebug</category><category>Zend_Db</category><category>Lazarus</category><category>Zend Framework</category><category>AJAX</category><category>Artikel</category><category>flattr</category><category>CodeIgniter</category><category>Tutorial</category><category>webEdition</category><category>tinyMCE</category><category>Skype</category><category>Iron</category><category>Trillian</category><category>Doctrine</category><category>Support</category><category>excel</category><category>Chrome</category><category>typolight</category><category>browser</category><category>Delphi</category><category>handy</category><category>ci</category><category>code smells</category><category>eclipse</category><category>Apache</category><category>JSON</category><category>Dropbox</category><category>SuMa</category><category>phpcs</category><category>Programme</category><category>CakePHP</category><category>snippet</category><category>jQuery</category><category>office</category><category>dechk</category><category>MySQL</category><category>CSS</category><category>PDF</category><category>refactoring</category><category>continous integration</category><category>codesniffer</category><category>Opera</category><category>putty</category><category>XML</category><category>utf-8</category><category>bada</category><category>zend studio</category><category>Datentypen</category><category>NetBeans</category><category>Java</category><category>Blogger</category><category>offtopic</category><category>Google</category><category>CouchDB</category><category>PHP</category><category>editor</category><category>Firefox</category><category>Symphony</category><category>SEO</category><category>smarty</category><category>clean code</category><category>soziales</category><category>HTML</category><category>Bücher</category><category>art of code</category><category>Hardware</category><category>IE</category><category>Datenbanken</category><category>JavaScript</category><category>zend</category><category>SVN</category><category>ide</category><title>Software-Entwickler Blog</title><description>PHP, MySQL, Zend Framework, jQuery, Java, C#, Windows und Heavy Metal</description><link>http://softwareentwickler.blogspot.com/</link><managingEditor>noreply@blogger.com (Sascha Presnac)</managingEditor><generator>Blogger</generator><openSearch:totalResults>151</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/softwareentwicklerblog" /><feedburner:info uri="softwareentwicklerblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>softwareentwicklerblog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=de&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://us.i1.yimg.com/us.yimg.com/i/de/my/addtomyyahoo4.gif">Subscribe with Mein Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/softwareentwicklerblog" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fsoftwareentwicklerblog" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-184295191878285771</guid><pubDate>Wed, 03 Oct 2012 19:32:00 +0000</pubDate><atom:updated>2012-10-03T21:32:49.014+02:00</atom:updated><title>Blogumzug</title><description>Mein Blog zieht um, von blogger zu&amp;nbsp;&lt;a href="http://www.codemercenary.de/" target="_blank"&gt;http://www.codemercenary.de&lt;/a&gt;.&lt;br /&gt;
Bitte aktualisiert eure Bookmarks entsprechend!&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=fv6XedDSVDE:XGlzIYRpLB8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/fv6XedDSVDE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/fv6XedDSVDE/blogumzug.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>0</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/10/blogumzug.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-1303115054164202406</guid><pubDate>Mon, 24 Sep 2012 07:03:00 +0000</pubDate><atom:updated>2012-09-24T19:47:56.227+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Skype</category><title>Skype Fenster blinkt nicht mehr</title><description>Du hast einen Skype Kontakt und bekommst keine Anzeige mehr, wenn der dir was schreibt? Und bisher ging das immer? Löschen des Kontaktes und ein erneutes hinzufügen hat auch nicht funktioniert? Bei allen anderen Kontakten funktioniert es, nur bei einem nicht?&lt;br /&gt;
&lt;br /&gt;
Dann willkommen in der Welt der "Hidden Features" von Skype.&lt;br /&gt;
Wahrscheinlich ist die "Alert"-Funktion für diesen einen Kontakt auf "off" ... wie, du weist nicht, dass das geht? Klar, das kannst du aber weder in den Optionen noch beim Kontakt sehen. Das funktioniert nur per Konsole.&lt;br /&gt;
&lt;br /&gt;
Jetzt keinen Schreck bekommen, mach das Chatfenster des Kontaktes auf und gib das hier ein:&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;code&gt;/alertson&lt;/code&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;br /&gt;
Und ab jetzt bekommst du auch wieder einen Hinweis, dass dich dieser Kontakt angeschrieben hat.&lt;br /&gt;
&lt;br /&gt;
Es ist eines der "hidden features" von Skype, hier sind noch ein paar:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;/me irgendwas&lt;br /&gt;
z.B. /me mag Kaffee zeigt im Fenster "Sascha mag Kaffee" an (good old IRC style [nicht IRQ, wie zuerst behauptet])&lt;/li&gt;
&lt;li&gt;/find Text&lt;br /&gt;
Sucht den Text&lt;/li&gt;
&lt;li&gt;/alertsoff&lt;br /&gt;
stellt die Alert-Funktion für diesen Kontakt/diesen Chat ab&lt;/li&gt;
&lt;li&gt;/alertson&lt;/li&gt;
&lt;li&gt;stellt den Alert wieder an&lt;/li&gt;
&lt;li&gt;/alertson Text&lt;br /&gt;
Benachrichtigen, wenn der Text eingegeben wird (hilfreich bei Chats)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Noch mehr Kommandos und sogar ein paar "hidden smilys" gibt es hier:&lt;br /&gt;
&lt;a href="http://www.candy-college.com/tipps-tricks/geheime-skype-befehle-versteckte-funktionen-in-skype/"&gt;http://www.candy-college.com/tipps-tricks/geheime-skype-befehle-versteckte-funktionen-in-skype/&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=XdLsUg3Tk9k:VBJEX3S-lPs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/XdLsUg3Tk9k" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/XdLsUg3Tk9k/skype-fenster-blinkt-nicht-mehr.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>0</thr:total><georss:featurename>Kaulsdorf, Deutschland</georss:featurename><georss:point>50.6197794 11.4307364</georss:point><georss:box>50.5794819 11.351772400000002 50.6600769 11.5097004</georss:box><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/09/skype-fenster-blinkt-nicht-mehr.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-937203705245973707</guid><pubDate>Wed, 12 Sep 2012 09:49:00 +0000</pubDate><atom:updated>2012-09-12T11:49:31.533+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">continous integration</category><category domain="http://www.blogger.com/atom/ns#">ci</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">clean code</category><category domain="http://www.blogger.com/atom/ns#">codesniffer</category><category domain="http://www.blogger.com/atom/ns#">phpcs</category><title>php Codesniffer und CI , Zeilenlänge und Windows Zeilenumbruch setzen</title><description>Windows, Continous Integration, 16:10 Bildschirme und phpcs.&lt;br /&gt;
&lt;br /&gt;
Dies alles passt im Standard nicht zusammen, zumindest nicht mit unseren internen Regeln, daher hier die notwendigen Anpassungen, um zumindest die Zeilenlänge auf ein erträgliches Maß von 120 zu 160 zu bekommen (nicht mit dem Blutdruck verwechseln) und den Codesniffer an Windows-like Zeilenumbrüche von \r\n zu gewöhnen.&lt;br /&gt;
&lt;br /&gt;
Meine phpcs.xml sieht dann in etwa so aus (den XML Header musste ich rausnehmen, da mein Formater hier das ganze gar nicht mehr anzeigen will, ansonsten: die &amp;lt;exclude&amp;gt; Zeilen hören jeweils mit einem /&amp;gt; auf, das &amp;lt;/exclude&amp;gt; könnt ihr löschen, Zeile 8 hört ebenfalls mit /&amp;gt; auf, entsprechend in 20 das &amp;lt;/rule&amp;gt; löschen).&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&lt;ruleset name="PHPCS Rules"&gt;
 &lt;description&gt;Using Zend Rules&lt;/description&gt;
 &lt;rule ref="Zend"&gt;
  &lt;exclude name="Generic.WhiteSpace.DisallowTabIndent"&gt;
  &lt;exclude name="Generic.Functions.OpeningFunctionBraceBsdAllman"&gt;
        &lt;exclude name="Generic.PHP.DisallowShortOpenTag"&gt;
 &lt;/exclude&gt;&lt;/exclude&gt;&lt;/exclude&gt;&lt;/rule&gt;
 &lt;rule ref="Generic.Functions.OpeningFunctionBraceKernighanRitchie"&gt;
 &lt;rule ref="Generic.Files.LineLength"&gt;
  &lt;properties&gt;
   &lt;property name="lineLimit" value="120"&gt;
      &lt;property name="absoluteLineLimit" value="160"&gt;
  &lt;/property&gt;&lt;/property&gt;&lt;/properties&gt;
 &lt;/rule&gt;
 &lt;rule ref="Generic.Files.LineEndings"&gt;
  &lt;properties&gt;
   &lt;property name="eolChar" value="\r\n"&gt;
  &lt;/property&gt;&lt;/properties&gt;
 &lt;/rule&gt;
&lt;/rule&gt;&lt;/ruleset&gt;
&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=BGXPTz3SvSc:3MgBDEgrJtY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/BGXPTz3SvSc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/BGXPTz3SvSc/php-codesniffer-und-ci-zeilenlange-und.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>0</thr:total><georss:featurename>Kaulsdorf, Deutschland</georss:featurename><georss:point>50.6197794 11.4307364</georss:point><georss:box>50.5794819 11.351772400000002 50.6600769 11.5097004</georss:box><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/09/php-codesniffer-und-ci-zeilenlange-und.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-5614910121329907010</guid><pubDate>Wed, 05 Sep 2012 08:50:00 +0000</pubDate><atom:updated>2012-09-05T10:50:58.077+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">XML</category><title>PHP XML Daten in einer Session speichern</title><description>Beim Versuch, &lt;a target="_blank" href="http://de.php.net/manual/de/book.simplexml.php"&gt;SimpleXML Objekte&lt;/a&gt; in eine Session zu speichern solltet ihr folgendes Wissen.&lt;br /&gt;
&lt;br /&gt;
Ein trivialer Ansatz wie&lt;br /&gt;
&lt;br /&gt;
&lt;pre name="code" class="php"&gt;if (!isset($_SESSION['xml'])) {
&amp;nbsp; $xml = simplexml_load_string($myxmlstring);
&amp;nbsp; $_SESSION['xml'] = $xml-&amp;gt;someNode;
}
var_dump($_SESSION['xml']);
&lt;/pre&gt;&lt;br /&gt;
wird fehlschlagen. Im ersten Moment sind die Daten in der Session offenbar gespeichert, beim nächsten Aufruf der Seite werden allerdings alle values verschwunden sein, d.h. der xml-Key der $_SESSION ist zwar vorhanden (weshalb auch das Neuladen übersprungen wird), aber $_SESSION['xml'] = null.&lt;br /&gt;
&lt;br /&gt;
Ihr umgeht das Problem, in dem ihr jeden Wert, den ihr speichern wollt, vorher explizit Typkastet und dann erst in die Session einbringt:&lt;br /&gt;
&lt;br /&gt;
&lt;pre name="code" class="php"&gt;if (!isset($_SESSION['xml'])) {
&amp;nbsp; $xml = simplexml_load_string($myxmlstring);
&amp;nbsp; $_SESSION['xml'] = array(
&amp;nbsp; &amp;nbsp; 'someNode' =&amp;gt; (int)$xml-&amp;gt;someNode,
&amp;nbsp; &amp;nbsp;&amp;nbsp;'otherNode' =&amp;gt; (string)$xml-&amp;gt;other-&amp;gt;node[0]-&amp;gt;attribName,
}
var_dump($_SESSION['xml']);
&lt;/pre&gt;&lt;br /&gt;
Nun erhaltet ihr die Werte bei jedem Aufruf und könnt die eingelesenen Werte in der Session transportieren.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=tSDSmzEn5FY:U9IEaSTZPRc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/tSDSmzEn5FY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/tSDSmzEn5FY/php-xml-daten-in-einer-session-speichern.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>0</thr:total><georss:featurename>Kaulsdorf, Deutschland</georss:featurename><georss:point>50.6197794 11.4307364</georss:point><georss:box>50.5794819 11.351772400000002 50.6600769 11.5097004</georss:box><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/09/php-xml-daten-in-einer-session-speichern.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-1671112259371238215</guid><pubDate>Thu, 23 Aug 2012 11:05:00 +0000</pubDate><atom:updated>2012-08-23T13:05:40.145+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Zend Framework</category><category domain="http://www.blogger.com/atom/ns#">zend server</category><title>Zend Framework im Zend Server CE updaten</title><description>Der aktuelle ZendServer 5.6 kommt mit vorinstalliertem ZendFramework 1.11.11.&lt;br /&gt;
Dies ist aber veraltet, eine automatische Aktualisierung gibt es leider nicht; allerdings ist der Update-Vorgang nicht so schwer.&lt;br /&gt;
&lt;br /&gt;
Von der &lt;a href="http://framework.zend.com/download/current/" target="_blank"&gt;Zend Framework Download Seite&lt;/a&gt; holt ihr euch das aktuelle Zend Framework (bei mir 1.11.13 minimal) und entpackt dieses irgendwohin. Von diesen entpackten Dateien braucht ihr nun das Verzeichnis&amp;nbsp;"&lt;i&gt;Zend&lt;/i&gt;", welches ihr in "&lt;i&gt;/library&lt;/i&gt;" findet.&lt;br /&gt;
&lt;br /&gt;
Das kopiert ihr euch in den Pfad "&lt;i&gt;ZendServer\share\ZendFramework\library&lt;/i&gt;" eures ZendServers, bei mir ist das "&lt;i&gt;C:\zend\ZendServer\share\ZendFramework\library&lt;/i&gt;" (yep, immer noch Windows).&lt;br /&gt;
&lt;br /&gt;
Der Server benötigt keinen Neustart und ihr könnt nun direkt die neue Version benutzen. &lt;br /&gt;Viel Erfolg!&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=zUJ3qS2oYrU:9bw73aI8oeM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/zUJ3qS2oYrU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/zUJ3qS2oYrU/zend-framework-im-zend-server-ce-updaten.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>0</thr:total><georss:featurename>Kaulsdorf, Deutschland</georss:featurename><georss:point>50.6197794 11.4307364</georss:point><georss:box>50.5794819 11.351772400000002 50.6600769 11.5097004</georss:box><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/08/zend-framework-im-zend-server-ce-updaten.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-7125650489498257174</guid><pubDate>Fri, 17 Aug 2012 08:12:00 +0000</pubDate><atom:updated>2012-08-17T10:12:35.280+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">zend studio</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">eclipse</category><title>Failed to create Java Virtual Maschine</title><description>Beim starten des ZendStudio oder von eclipse kann euch diese Meldung begegnen:&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-XRRPfT5KQck/UC362tk4IUI/AAAAAAAAAXM/id2DeIcD1Gs/s1600/zendfailed1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-XRRPfT5KQck/UC362tk4IUI/AAAAAAAAAXM/id2DeIcD1Gs/s1600/zendfailed1.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Fehlermeldung in ZendStudio 9.0.3 und kein arbeiten mehr möglich :(&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
und dann geht erst mal gar nichts mehr.&lt;br /&gt;
&lt;br /&gt;
Um wieder arbeiten zu können öffnet ihr eure ZendStudio.ini bzw. eure eclipse.ini, je nach Version. Die Datei findet ihr im Programmverzeichnis der ausführbaren Datei, bei Windows ist dies zum Beispiel bei mir &amp;nbsp;unter&amp;nbsp;"&lt;i&gt;C:\Program Files (x86)\Zend\Zend Studio 9.0.0&lt;/i&gt;"&amp;nbsp;zu finden.&lt;br /&gt;
&lt;br /&gt;
Die .ini ändert ihr dann wie folgt, dass ihr die Einträge mit "maxPermSize" löscht.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-NSo_zpjyVhY/UC37sxqfvSI/AAAAAAAAAXU/DjUGp15VJpI/s1600/zendfailed2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-NSo_zpjyVhY/UC37sxqfvSI/AAAAAAAAAXU/DjUGp15VJpI/s1600/zendfailed2.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Das sind die bösen Zeilen ;)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Dann speichern und dann läuft - zumindest bei mir - das ZendStudio wieder zuverlässig.&lt;br /&gt;
Dank update auf Java7 benutzt das Studio nun ausreichend RAM für seine Ausführung und ist nun gefühlt flüssiger Unterwegs.&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=AXPeLjWoJ3k:lFQGVAHcgxw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/AXPeLjWoJ3k" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/AXPeLjWoJ3k/failed-to-create-java-virtual-maschine.html</link><author>noreply@blogger.com (Sascha Presnac)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-XRRPfT5KQck/UC362tk4IUI/AAAAAAAAAXM/id2DeIcD1Gs/s72-c/zendfailed1.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Kaulsdorf, Deutschland</georss:featurename><georss:point>50.6197794 11.4307364</georss:point><georss:box>50.5794819 11.351772400000002 50.6600769 11.5097004</georss:box><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/08/failed-to-create-java-virtual-maschine.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-7021334687064912730</guid><pubDate>Tue, 14 Aug 2012 11:32:00 +0000</pubDate><atom:updated>2012-08-14T13:32:52.347+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MySQL</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>Vorsicht bei mysql_connect und Vielfachverbindungen</title><description>Eine der automatischen "Goodies" bei mysql_connect (wen man es denn schon nutzen muss, warum auch immer), ist, dass, wenn man mysql_connect mit den gleichen Informationen bestückt, diese Funktion die gleiche Verbindungsid zurückgibt wie beim ersten mal ... es wird also keine zweite Verbindung aufgebaut.&lt;br /&gt;
&lt;br /&gt;
Das Problem ist nun leider, dass der, der die zweite Verbindung öffnen möchte, diese Informationen _ganz genau_ braucht, denn sonst erhält man unter Umständen trotzdem eine zweite Verbindung, obwohl man die vermeindlich gleichen, aber nicht selben Parameter benutzt.&lt;br /&gt;
&lt;br /&gt;
Beispielcode:&lt;br /&gt;
&lt;pre name="code" class="php"&gt;$dbserver1 = '127.0.0.1';
$dbserver2 = 'localhost';

$dbuser1 = 'root';
$dbuser2 = 'Root';
$dbpass = '';

$db1 = mysql_connect($dbserver1, $dbuser1, $dbpass);
$db2 = mysql_connect($dbserver2, $dbuser2, $dbpass);
$db3 = mysql_connect($dbserver1, $dbuser2, $dbpass);
$db4 = mysql_connect($dbserver2, $dbuser1, $dbpass);
$db5 = mysql_connect($dbserver1, $dbuser1, $dbpass);

var_dump($db1, $db2, $db3, $db4, $db5);
&lt;/pre&gt;&lt;br /&gt;
Ausgabe:&lt;br /&gt;
&lt;br /&gt;
&lt;pre name="code" class="php"&gt;resource(7) of type (mysql link)
resource(9) of type (mysql link)
resource(11) of type (mysql link)
resource(13) of type (mysql link)
resource(7) of type (mysql link)
&lt;/pre&gt;&lt;br /&gt;
Hier zeigt sich, dass insg. 4 verschiedene Connection-Ids zurück gegeben wurden, $db5 ist zur Kontrolle und zeigt, dass nur die exakt selben Parameter zum gewünschten Ergebnis kommen, nämlich die selbe ID zu benutzen, die schon bei $db1 erzeugt wurde.&lt;br /&gt;
Im Realfall würde dies nun 4 Prozesse bedeuten, von denen 3 überflüssig sind und nur den Server belasten ... pro Aufruf im schlimmsten Fall.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=qMFU-Fxh0oY:CbvGTBul1DM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/qMFU-Fxh0oY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/qMFU-Fxh0oY/vorsicht-bei-mysqlconnect-und.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>2</thr:total><georss:featurename>Kaulsdorf, Deutschland</georss:featurename><georss:point>50.6197794 11.4307364</georss:point><georss:box>50.5794819 11.351772400000002 50.6600769 11.5097004</georss:box><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/08/vorsicht-bei-mysqlconnect-und.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-7588517007061459845</guid><pubDate>Tue, 14 Aug 2012 07:13:00 +0000</pubDate><atom:updated>2012-08-14T09:13:34.930+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MySQL</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">webEdition</category><title>webEdition: Bestehende Datenbankverbindung nutzen</title><description>In &lt;a href="http://webedition.org/" target="_blank"&gt;webEdition&lt;/a&gt; kann man viel machen, es ermöglicht einem wirklich sehr große Freiheit. Der große Vorteil diese Freiheit hat aber auch einen großen Nachteil: Man muss sich im System auskennen, um damit wirklich gute Seiten bauen zu können; ganz schnell kann man auch sehr langsame Seiten erstellen, die dann nicht nur den Besucher, sondern vor allem den Kunden verärgern.&lt;br /&gt;
&lt;br /&gt;
Aus einem aktuellen Projekt stelle ich eine wirklich böse Fehlerquelle vor: Die mehrfache Datenbank Verbindung. Im Template ist es recht einfach, eine neue DB-Verbindung mit der bekannten (und veralteten) Funktion&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code"&gt;$db = mysql_connect(...);
&lt;/pre&gt;
&lt;br /&gt;
zu erstellen. Aber warum sollte man das machen? Wohl nur aus&amp;nbsp;Unwissenheit, dass webEdition bereits eine Datenbankverbindung eröffnet hat und diese auch dem Entwickler bereitstellt.&lt;br /&gt;
&lt;br /&gt;
Also, liebe webEdition-Entwickler, die bestehende, persistente und performantere DB-Verbindung könnt ihr recht einfach für eigene Zwecke benutzen:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code"&gt;$db = $GLOBALS['DB_WE'];
$stmt = $db-&amp;gt;query('SELECT * FROM tblUser');
while ($data = mysql_fetch_assoc($stmt)) {
  Zend_Debug::dump($data); 
}
&lt;/pre&gt;
&lt;br /&gt;
Muss man dann doch mal eine zweite Verbindung aufbauen - was im Einzelfall manchmal wirklich sein muss - dann ist dem Entwickler ja meist bewusst, was er da macht und ich hoffe, er benutzt dann dafür nicht die alten, langsamen MySQL-Funktionen, sondern entweder die MySQLi-Pendants oder eine PDO-Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
Leider stellt webEdition keine Instanz von Zend_Db bereit, so dass zwar die Generierung des Querys OOP stattfindet, aber es dannach mit den bekannten mysql-Funktinen weitergeht. Das ist ein recht großer Nachteil, da es die Möglichkeit nimmt, auf einem modernen (aktuellen) Niveau zu arbeiten und ich hoffe, dass dieses Manko bald durch ein aktuelles Release behoben wird.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=sEAWCOkGSzI:kTdG60UAfvc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/sEAWCOkGSzI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/sEAWCOkGSzI/webedition-bestehende.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>4</thr:total><georss:featurename>Kaulsdorf, Deutschland</georss:featurename><georss:point>50.6197794 11.4307364</georss:point><georss:box>50.5794819 11.351772400000002 50.6600769 11.5097004</georss:box><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/08/webedition-bestehende.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-6346420412992062660</guid><pubDate>Wed, 13 Jun 2012 08:31:00 +0000</pubDate><atom:updated>2012-06-13T10:31:50.027+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MySQL</category><title>Zeilenumbrüche in MySQL Text ersetzen</title><description>Lästige Zeilenumbrüche können direkt via SQL ersetzt werden, allerdings benutzt MySQL dazu intern zwei Stellen, nicht nur eine. Ein simples suchen nach "\n" hilft wenig, hier die Lösung:&lt;br /&gt;
&lt;pre name="code" class="sql"&gt;REPLACE(table.fieldname, CHAR(13,10), ' ') AS newfieldname&lt;/pre&gt;Viel Erfolg!&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=-wRhqtwGhlY:vIBi7LPAxgE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/-wRhqtwGhlY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/-wRhqtwGhlY/zeilenumbruche-in-mysql-text-ersetzen.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>0</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/06/zeilenumbruche-in-mysql-text-ersetzen.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-7084520491744853577</guid><pubDate>Tue, 08 May 2012 20:55:00 +0000</pubDate><atom:updated>2012-05-08T22:55:32.625+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">art of code</category><category domain="http://www.blogger.com/atom/ns#">code smells</category><title>include oder require?</title><description>Was soll der PHP-Entwickler benutzen, &lt;a href="http://de.php.net/include" target="_blank"&gt;include&lt;/a&gt; oder &lt;a href="http://de.php.net/require" target="_blank"&gt;require&lt;/a&gt; bzw. &lt;a href="http://de.php.net/include_once" target="_blank"&gt;include_once&lt;/a&gt; oder &lt;a href="http://de.php.net/require_once" target="_blank"&gt;require_once&lt;/a&gt;?&lt;br /&gt;
Und wo liegt da eigentlich der Unterschied?&lt;br /&gt;
&lt;br /&gt;
Die Frage kommt oft, deshalb an dieser Stelle mal ganz klipp und klar und kurz:&lt;br /&gt;
&lt;br /&gt;
require bzw. &lt;b&gt;require_once benutzen&lt;/b&gt;, denn: Sowohl include wie auch require binden eine Datei ein, aber, sollte ein Fehler in der includierten Dateie sein, so bricht require mit einem &lt;a href="http://www.php.net/manual/en/errorfunc.constants.php" target="_blank"&gt;E_COMPILE_ERROR&lt;/a&gt; ab, während include fröhlich mit einer WARNING weitermacht.&lt;br /&gt;
&lt;br /&gt;
Im Sinne der Vermeidung von &lt;a href="http://de.wikipedia.org/wiki/Code_smells" target="_blank"&gt;code-smells&lt;/a&gt; fällt eure Wahl also auf require bzw. require_once.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=PyFL1rXlgHo:cTFWurDFu-8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/PyFL1rXlgHo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/PyFL1rXlgHo/include-oder-require.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>5</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/05/include-oder-require.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-5618397973922723964</guid><pubDate>Wed, 25 Apr 2012 15:00:00 +0000</pubDate><atom:updated>2012-04-25T17:00:07.916+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MySQL</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">code smells</category><title>Schneller in PHP und MySQL mit JOIN</title><description>Mittels einfacher Kentnisse seiner Datenbank kann der Entwickler auch aus &lt;a href="http://de.wikipedia.org/wiki/Legacy" target="_blank"&gt;Legacy&lt;/a&gt;-Anwendungen sehr viel mehr Geschwindigkeit herausholen, als er vielleicht weiß.&lt;br /&gt;
Der Grund ist simpel: Meist bleibt der Code gleich, aber die Server Software wird aktualisiert. Während die Erstellung noch im guten alten PHP4 + MySQL4 von Statten ging, rennt der Code heute mit PHP5 + MySQL5 zwar immer noch, könnte aber dank kleiner Kniffe sehr viel schneller sein.&lt;br /&gt;
Ich möchte euch einen Weg dazu zeigen, die &lt;a href="http://dev.mysql.com/doc/refman/5.1/de/join.html" target="_blank"&gt;JOINs in MySQL&lt;/a&gt;. Es gibt sicherlich noch mehr Möglichkeiten, aber das sind auch andere Themen. Fangen wir heute mal mit alten Querys an.&lt;br /&gt;
&lt;br /&gt;
Zunächst versuchen wir eine Stelle zu finden, an der wir ansetzen. Bei den meisten Legacy Codes wurde mit solch einem oder einem ähnlichen Konstrukt die Daten für "Zeige neue Blogbeiträge mit Namen des Autors" abgerufen, wobei "autor" und "blog" zwei verschiedene Tabellen sind.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code"&gt;$_res = mysql_query("SELECT * FROM blog ORDER BY datum DESC");
while ($row = mysql_fetch_array($_res)) {

&amp;nbsp; $_resAutor = mysql_query("SELECT * FROM autor WHERE autorid = ".$row['autorid']);
&amp;nbsp; $autor = mysql_fetch_array($_resAutor);
&amp;nbsp; // Stelle Blogbeitrag mit Autor dar
}
&lt;/pre&gt;
&lt;br /&gt;
Das ist nicht nur in der Hinsicht des Datenabrufes schlechter Code und vor lauter "code-smells" könnte einem glatt schlecht werden. Trotzdem gibt es sowas "da draussen" und dummerweise funktioniert das leider immer noch.&lt;br /&gt;
&lt;br /&gt;
Was kann man verbessern? Zum einen fällt auf, dass es zwei Querys sind. Das muss nicht nur nicht sein, dass ist auch noch ganz schlecht, denn jede Verbindung zur Datenbank braucht Zeit und die sollten wir uns sparen. Argumente wie "&lt;a href="http://de.php.net/mysqli" target="_blank"&gt;mysqli&lt;/a&gt; / &lt;a href="http://de.php.net/manual/en/book.pdo.php" target="_blank"&gt;PDO&lt;/a&gt; benutzen" lasse ich ganz bewusst aussen vor, es soll um Prinzip gehen (sicher wäre die Verwendung eines PDO oder &lt;a href="http://de.wikipedia.org/wiki/Objektrelationale_Abbildung" target="_blank"&gt;ORM&lt;/a&gt;&amp;nbsp;wie &lt;a href="http://www.doctrine-project.org/" target="_blank"&gt;Doctrine&lt;/a&gt; besser, ganz klar).&lt;br /&gt;
&lt;br /&gt;
Sparen wir uns also den zusätzlichen Query:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code"&gt;$_res = mysql_query("SELECT b.*, a.* FROM blog b, autor a WHERE b.autorid = a.autorid ORDER BY b.datum DESC");
while ($row = mysql_fetch_array($_res)) {
&amp;nbsp; // Stelle Blogbeitrag mit Autor dar
}
&lt;/pre&gt;
&lt;br /&gt;
Schon viel besser, aber noch nicht gut genug. Was passiert, wenn ein Blogbeitrag existiert, aber der Autor nicht? Bei so einer Legacy-Anwendung fast schon der Normalfall.&amp;nbsp;Der ganze Beitrag fehlt. Doof, also brauchen wir eine Mechanik, die trotz fehlendem Autor den Blog Beitrag noch anzeigt.&lt;br /&gt;
Ganz kurz: Das machen JOINs - und ehe ich nun von vielen gesteinigt werde: JOINs machen noch viel mehr, aber das würde hier den Rahmen sprengen und außerdem möchte ich dazu noch mehr schreiben.&lt;br /&gt;
&lt;br /&gt;
Das ganze nun mit einem LEFT JOIN:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code"&gt;$_res = mysql_query("SELECT b.*, a.* FROM blog b LEFT JOIN autor a ON (b.autorid = a.autorid) ORDER BY b.datum DESC");
while ($row = mysql_fetch_array($_res)) {
&amp;nbsp; // Stelle Blogbeitrag mit Autor dar
}
&lt;/pre&gt;
&lt;br /&gt;
Es ändert sich nicht viel, aber nun erscheinen auch alle Blogbeiträge ohne Autor und als kleines Extra arbeitet der letzte Query auch noch etwas schneller als der zweite; super für Legacy-Code, der schon ähnlich wie in Beispiel Zwei aufgebaut ist, denn dort muss man nicht - oder nur wenig - an den PHP Code ran und kann sich auf die reine SQL-Optimierung konzentrieren.&lt;br /&gt;
&lt;br /&gt;
Diese Art der Optimierung alter Legacy-Anwendungen macht relativ wenig Arbeit und bringt dafür recht viel. Vor allem im Bereich von SQL-Code, wo Beispiel eins mehrfach vorkommt (Grundquery, dannach werden viele Querys gestartet die Detaildaten zum Grundquery abrufen, dannach wird gerechnet und wieder neue Querys abgerufen usw.) und damit die Anwendung an dieser Stelle nur sehr langsam ist, kann ein Umstieg auf JOINs und u.a. Verlagerung von Arbeit von PHP in den Query sehr viel Geschwindigkeit herausholen.&lt;br /&gt;
&lt;br /&gt;
Allerdings - und das sollte ganz klar sein - kann dies keine schlechte Architektur ersetzen. Legacy Code kommt irgendwann an den Punkt, an dem ein Optimieren keinen Sinn mehr macht und man sich lieber auf die Neukonzeption konzentrieren sollte. Als Hilfsmittel, um z.B. langsame Bereiche zu beschleunigen, sollte man die Kentnisse allerdings auffrischen. Vor allem, da bei modernen Methoden (PDO, OML, ...) die JOINs eine zentrale Rolle spielen.&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=am4YnAxlPcc:LOTnHe5x0D4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/am4YnAxlPcc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/am4YnAxlPcc/schneller-in-php-und-mysql-mit-join.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>1</thr:total><georss:featurename>Neukirchen-Vluyn, Deutschland</georss:featurename><georss:point>51.4423827 6.5537259</georss:point><georss:box>51.4027942 6.4747619 51.481971200000004 6.6326899</georss:box><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/04/schneller-in-php-und-mysql-mit-join.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-4010942625249565987</guid><pubDate>Sun, 15 Apr 2012 12:10:00 +0000</pubDate><atom:updated>2012-04-15T14:11:22.012+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">dechk</category><category domain="http://www.blogger.com/atom/ns#">Programme</category><title>deCHK 2.1 ist da</title><description>deCHK Version 2.1 ist erschienen.&lt;br /&gt;
&lt;br /&gt;
Ein kritischer Fehler konnte eine Wiederherstellung bekannter Dateitypen verhindern. Dies ist nun behoben, darüberhinaus wurden nur interne Verbesserungen durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Zur Homepage und zum Download:&amp;nbsp;&lt;a href="http://www.techcrawler.de/dechk/" target="_blank"&gt;http://www.techcrawler.de/dechk/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=dNCuXCmXElY:oVBAxKu9hag:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/dNCuXCmXElY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/dNCuXCmXElY/dechk-21-ist-da.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>0</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/04/dechk-21-ist-da.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-8327614203384377538</guid><pubDate>Mon, 05 Mar 2012 16:30:00 +0000</pubDate><atom:updated>2012-03-05T17:30:00.757+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Zend Framework</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">Zend_Db</category><title>No reference from table X to table Y</title><description>Referenzen der Datenbank im Zend Framework über das Model abzubilden ist ja eine gute Idee. Schnell ist das entsprechende Skelett des Model erstellt und die &lt;a href="http://framework.zend.com/manual/en/zend.db.table.relationships.html" target="_blank"&gt;Doku&lt;/a&gt; lehrt uns: "Definier die $_referenceMap und alles wird gut.". Dachte ich auch ... aber&lt;br /&gt;
&lt;br /&gt;
Wer das schon einmal ausprobiert hat, der weiß: Im aber steckt der Wurm im Apfel bzw. die Titelmeldung auf dem Schirm. Aber langsam und zum mitmachen:&lt;br /&gt;
&lt;br /&gt;
Gegeben sind 2 Datenbanktabellen "news" und "author", news hat u.a. ein Feld authorId. Den Rest könnt ihr euch vorstellen.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code"&gt;class myApp_Model_News extends Zend_Db_Table_Abstract {

 protected $_name  = 'news';
 protected $_primary = 'id';

 protected $_referenceMap = array(

  'TrouperId' =&amp;gt; array(

   'columns' =&amp;gt; array('author_id'),
   'refTableClass' =&amp;gt; 'author',
   'refColumns' =&amp;gt; array('id')

  )

 );

}
&lt;/pre&gt;
&lt;br /&gt;
Instinktiv benutzt man das und hier meldet sich auch gleich eine Fehlermeldung:&lt;br /&gt;
"&lt;b&gt;&lt;i&gt;No reference from table myApp_Model_News to table myApp_Model_Author&lt;/i&gt;&lt;/b&gt;"&lt;br /&gt;
Aber warum? Wir haben doch alles richtig gemacht.&lt;br /&gt;
&lt;br /&gt;
Prinzipiell ja, laut Doku, aber nicht laut programmiertem Code, dafür muss man nämlich &lt;u&gt;&lt;b&gt;nicht&lt;/b&gt;&lt;/u&gt; den Tabellennamen in die $_referenceMap eintragen, sondern &lt;b&gt;den Namen des Models&lt;/b&gt;!!!&lt;br /&gt;
Also so:&lt;br /&gt;
&lt;pre class="php" name="code"&gt;class myApp_Model_News extends Zend_Db_Table_Abstract {

 protected $_name  = 'news';
 protected $_primary = 'id';

 protected $_referenceMap = array(

  'TrouperId' =&amp;gt; array(

   'columns' =&amp;gt; array('author_id'),
   'refTableClass' =&amp;gt; 'myApp_Model_Author',
   'refColumns' =&amp;gt; array('id')

  )

 );

}
&lt;/pre&gt;
Besonders mal auf "refTableClass" sehen, dort steht nun nicht mehr der Tabellenname wie er in der Datenbank steht, sondern der Name des Models, dass für diese Tabelle zuständig ist.&lt;br /&gt;
Und nun funktioniert das ganze auch mit&lt;br /&gt;
&lt;pre class="php" name="code"&gt;$news = new myApp_Model_News();
$myNews = $news-&amp;gt;fetchRow();
$newsauthor = $myNews-&amp;gt;findDependentRowset('myApp_Model_Author');
&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=QYyIofhRFr4:KLdIvv99c0M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/QYyIofhRFr4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/QYyIofhRFr4/no-reference-from-table-x-to-table-y.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>3</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/03/no-reference-from-table-x-to-table-y.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-4246735098806408134</guid><pubDate>Sun, 29 Jan 2012 19:47:00 +0000</pubDate><atom:updated>2012-01-29T20:47:26.334+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">dechk</category><title>deCHK 2.0.1 ist erschienen</title><description>deCHK Version 2.0.1 ist erschienen.&lt;br /&gt;
&lt;br /&gt;
deCHK beherrscht nun die beiden &lt;a href="http://www.uniplot.de/" target="_blank"&gt;Uniplot&lt;/a&gt; Dateitypen .nc und .ipw. Damit beherrscht das Tool nun 50 Dateitypen, nachlesbar auf der Homepage.&lt;br /&gt;
&lt;br /&gt;
Zur Homepage und zum Download:&amp;nbsp;&lt;a href="http://www.techcrawler.de/dechk/" target="_blank"&gt;http://www.techcrawler.de/dechk/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=9NnUjcBAPw0:MPpHkEoOtF4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/9NnUjcBAPw0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/9NnUjcBAPw0/dechk-201-ist-erschienen.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>0</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/01/dechk-201-ist-erschienen.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-1517530085748641176</guid><pubDate>Thu, 12 Jan 2012 10:40:00 +0000</pubDate><atom:updated>2012-01-12T11:40:01.346+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">windows live</category><category domain="http://www.blogger.com/atom/ns#">mobile</category><category domain="http://www.blogger.com/atom/ns#">bada</category><category domain="http://www.blogger.com/atom/ns#">handy</category><title>Samsung Wave s8500 (BadaOS) mit Windows Live synchronisieren</title><description>Wer auch immer wie ich ein Samsung Wave 8500 mit BadaOS und ein Windows Live Mailkonto (früher Hotmail) hat und gern die Mails mobil lesen möchte, seine Termine usw. auch im Handy haben will usw. kann das sehr komfortabel machen. Am Ende hat es was von einem Blackberry "Lite", aber der Reihe nach:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Die App "Meine Konten" öffnen&lt;/li&gt;
&lt;li&gt;Dort "Konto hinzufügen"&lt;/li&gt;
&lt;li&gt;"Exchange ActiveSync"&lt;/li&gt;
&lt;li&gt;"Mailadresse" eingeben, z.B. "xyz@live.de"&lt;/li&gt;
&lt;li&gt;"Benutzername" ist ebenfalls die Mailadresse&lt;/li&gt;
&lt;li&gt;"Passwort" solltet ihr natürlich auch wissen&lt;/li&gt;
&lt;li&gt;"Domäne" leer lassen&lt;/li&gt;
&lt;li&gt;"Weiter"&lt;/li&gt;
&lt;li&gt;"Server-URL" ist "m.hotmail.com"&lt;/li&gt;
&lt;li&gt;"SSL verwenden" -&amp;gt; Ja&lt;/li&gt;
&lt;li&gt;Fertig.&lt;/li&gt;
&lt;li&gt;Die restlichen Einstellungen nehmt ihr nach euren persönlichen Vorlieben vor.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Nun könnt ihr mobil Mails lesen, antworten, verschieben, löschen usw. Ebenso die Kontakte und Termine synchronisieren und vieles mehr. Der neue Live-Dienst von Microsoft ist wirklich nicht schlecht und leistet vergleichbar mehr wie z.B. GMX und konsorten (dort muss ich meist für IMAP-ähnliche Funktionen Geld bezahlen).&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=M2fntmEkevw:r9Tudszv4WU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/M2fntmEkevw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/M2fntmEkevw/samsung-wave-s8500-badaos-mit-windows.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>1</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2012/01/samsung-wave-s8500-badaos-mit-windows.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-8497197298932534875</guid><pubDate>Thu, 22 Dec 2011 16:30:00 +0000</pubDate><atom:updated>2011-12-22T21:28:38.072+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CodeIgniter</category><title>$_GET in Codeigniter nutzen</title><description>&lt;p&gt;Ganz kurz: Bei Codeigniter auf URL-Parameter mit $_GET zugreifen:&lt;/p&gt;

&lt;pre class="php" name="code"&gt;
parse_str(substr($_SERVER['REQUEST_URI'],strpos($_SERVER['REQUEST_URI'],'?')+1,strlen($_SERVER['REQUEST_URI'])-strpos($_SERVER['REQUEST_URI'],'?')),$_GET);
&lt;/pre&gt;

&lt;p&gt;Dann kann auch $_GET benutzt werden&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=nIiLCAn6xew:0rk7185W7wY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/nIiLCAn6xew" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/nIiLCAn6xew/get-in-codeigniter-nutzen.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>0</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2011/12/get-in-codeigniter-nutzen.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-6406155923125480661</guid><pubDate>Tue, 22 Nov 2011 16:30:00 +0000</pubDate><atom:updated>2011-11-22T17:30:01.878+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">zend studio</category><category domain="http://www.blogger.com/atom/ns#">ide</category><category domain="http://www.blogger.com/atom/ns#">eclipse</category><category domain="http://www.blogger.com/atom/ns#">zend</category><category domain="http://www.blogger.com/atom/ns#">SVN</category><title>SVN 1.7 mit Zend Studio 9</title><description>Zend Studio 9 (und meines Wissen die Version 8 auch) beherrscht das noch recht neue SVN 1.7 als einziges nicht. Netbeans und PHPStorm unterstützen das ganze bereits ... eclipse, auf dem das Zend Studio basiert, bekommt den offiziellen Support wohl nicht mehr dieses Jahr.&lt;br /&gt;
&lt;br /&gt;
Dass wir Entwickler nicht so lange warten können und wollen liegt auf der Hand, hier also meine Schritt-für-Schritt Anleitung für SVN 1.7+ und Zend Studio 9:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Welcome Screen öffnen ("Help" -&amp;gt; "Welcome")&lt;/li&gt;
&lt;li&gt;Dort dann rechts "SVN" abwählen, IDE neu starten lassen&lt;/li&gt;
&lt;li&gt;"Help" -&amp;gt; "Install new Software"&lt;/li&gt;
&lt;li&gt;"Work with:" eintragen "http://subclipse.tigris.org/update_1.8.x"&lt;/li&gt;
&lt;li&gt;Mindestens die "required" markierten anhaken&lt;/li&gt;
&lt;li&gt;Mit "Finish" installieren, den Lizenzen entsprechend zustimmen, usw.&lt;/li&gt;
&lt;li&gt;IDE neustarten&lt;/li&gt;
&lt;li&gt;Fertig&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Nun habt ihr volle SVN 1.7+ Support in Zend Studio und könnt wieder mit den Repos arbeiten wie gewohnt.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Viel Erfolg...&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=faUReGwGvnw:BIb1uw8YBqc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/faUReGwGvnw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/faUReGwGvnw/svn-17-mit-zend-studio-9.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>3</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2011/11/svn-17-mit-zend-studio-9.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-4326060391311106722</guid><pubDate>Fri, 18 Nov 2011 16:30:00 +0000</pubDate><atom:updated>2011-11-18T17:30:01.121+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Zend Framework</category><category domain="http://www.blogger.com/atom/ns#">PDF</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">Zend_Pdf</category><title>Mehrzeiliger Text mit Zend_Pdf</title><description>Mehrzeiligen Text erstellen muss man auch mit &lt;a href="http://framework.zend.com/manual/de/zend.pdf.html" target="_blank"&gt;Zend_Pdf&lt;/a&gt; noch manuell ... leider&lt;br /&gt;
Ich möchte an dieser Stelle allen, die mehrzeiligen Text in einem PDF mit Hilfe von Zend_Pdf ausgeben wollen, einen Denkanstoß geben.&lt;br /&gt;
&lt;br /&gt;
Ich habe das Problem wie folgt gelöst:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Verfügbare Breite ermitteln. Diese Breite in einer Variable merken.&lt;/li&gt;
&lt;li&gt;Verfügbare Zeilen ermitteln.&amp;nbsp;Diese Info auch speichern, da das für den späteren Seitenumbruch nötig wird. Nicht, dass euer Text plötzlich endet, nur weil die Seite zu Ende ist.&lt;/li&gt;
&lt;li&gt;Den Text mittels &lt;a href="http://de.php.net/wordwrap" target="_blank"&gt;wordwrap&lt;/a&gt; umbrechen.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Diesen dann per &lt;a href="http://de.php.net/explode" target="_blank"&gt;explode&lt;/a&gt; in ein array bekommen.&lt;/li&gt;
&lt;li&gt;Das dann per foreach und &lt;a href="http://de.php.net/array_shift" target="_blank"&gt;array_shift&lt;/a&gt; solange ausgelesen wird, bis das Seitenende erreicht ist.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Dannach &lt;a href="http://framework.zend.com/manual/de/zend.pdf.pages.html" target="_blank"&gt;eine neue Seite&lt;/a&gt; beginnen und den Rest des arrays abarbeiten.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Ich hoffe, ich kann euch zumindest auf die richtige Spur bringen, dass das ganze gar nicht schwer ist. Am Ende könnt ihr beliebig großen Text in einem PDF darstellen und das sogar über mehrere Seiten.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Viel Erfolg.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=dd2MMU59XlM:yeASvHboPPQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/dd2MMU59XlM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/dd2MMU59XlM/mehrzeiliger-text-mit-zendpdf.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>4</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2011/11/mehrzeiliger-text-mit-zendpdf.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-378803376166716445</guid><pubDate>Sun, 30 Oct 2011 18:12:00 +0000</pubDate><atom:updated>2011-10-30T19:12:44.860+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">dechk</category><category domain="http://www.blogger.com/atom/ns#">Programme</category><title>deCHK Version 2 ist da</title><description>Endlich. Ich freue mich, euch &lt;a href="http://www.techcrawler.de/dechk/" target="_blank"&gt;deCHK&lt;/a&gt;2 endlich doch noch vorstellen zu können.&lt;br /&gt;
&lt;br /&gt;
Nachdem ich lange kein Delphi zur&amp;nbsp;Verfügung&amp;nbsp;hatte konnte ich leider nicht an dem Projekt weiter arbeiten, so dass viele Wünsche liegen bleiben mussten.&lt;br /&gt;
&lt;br /&gt;
Letztlich habe ich mich dann doch daran gemacht, deCHK komplett in Lazarus neu zu schreiben. Lazarus ist eine freie IDE für Free-Pascal, ganz ähnlich Delphi. Da es kostenfrei ist kann ich auch deCHK weiterhin kostenfrei anbieten.&lt;br /&gt;
&lt;br /&gt;
Wer deCHK noch nicht kennt: deCHK versucht, aus den CHK-Dateien von scandisk unter Windows wieder lesbare Dateien zu machen. Bei mir konnte ich meinen ganzen Familienfotos nach einem Festplattencrash wieder herstellen, dazu noch viele weitere Dateien, die andere Tools nicht wieder herstellen konnten. deCHK könnt ihr kostenfrei benutzen - über eine kleine Spende oder so würde ich mich natürlich trotzdem freuen, kommt alles der Familienkasse zugute ;-)&lt;br /&gt;
&lt;br /&gt;
In der Version 2 ist nun der Support für Office 2007/2010 Dateien dabei sowie die lange gewünschte Unterstützung für mp4 Dateien. Insgesamt beherrscht deCHK nun 48 Dateitypen, diese sind:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: Tahoma; font-size: 12px;"&gt;3gp 7z ace avi bdsproj bmp cab chm class clp db dcu dfm (dll*) doc dsk dsm eps (exe*) fpx gif htm java jpg mid mp3 ocx odt pas pdf png ppt psd psp rar rtf tif ttf wav wri wpg xls zip&lt;/span&gt;&lt;/blockquote&gt;
&amp;nbsp;Ich finde, deCHK sollte auf keinem USB Stick fehlen (die entpacke .exe nimmt nur 860kb ein).&lt;br /&gt;
&lt;br /&gt;
Zur deCHK Homepage:&amp;nbsp;&lt;a href="http://www.techcrawler.de/dechk/" target="_blank"&gt;http://www.techcrawler.de/dechk/&lt;/a&gt;&lt;br /&gt;
English Homepage:&amp;nbsp;&lt;a href="http://www.techcrawler.de/dechk/index_en.html" target="_blank"&gt;http://www.techcrawler.de/dechk/index_en.html&lt;/a&gt;&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=7ogEynB3vxg:KgKOM9GvJ9I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/7ogEynB3vxg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/7ogEynB3vxg/dechk-version-2-ist-da.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>0</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2011/10/dechk-version-2-ist-da.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-5283010793973166934</guid><pubDate>Wed, 19 Oct 2011 12:38:00 +0000</pubDate><atom:updated>2011-10-19T14:38:11.860+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SVN</category><category domain="http://www.blogger.com/atom/ns#">NetBeans</category><title>Netbeans und Subversion 1.7 zusammenarbeiten lassen</title><description>Du benutzt &lt;a href="http://netbeans.org/" target="_blank"&gt;Netbeans&lt;/a&gt; mit SVN und erhälst die Fehlermeldung&lt;br /&gt;
&lt;i&gt;"Please upgrade your Subversion client to use this working copy."&lt;/i&gt;&lt;br /&gt;
und nun kannst du nichts mehr mit dem SVN machen.&lt;br /&gt;
&lt;br /&gt;
Kein Thema, besorg dir die aktuellen 1.7 command-line Clients (z.b. &lt;a href="http://www.open.collab.net/products/subversion/getit.html" target="_blank"&gt;von Collab.net hier&lt;/a&gt;), stell Netbeans darauf ein ("Extras"-&amp;gt;"Optionen"-&amp;gt;"Verschiedenes"-&amp;gt;"Versionsverwaltung"-&amp;gt;"Subversion"-&amp;gt;"Pfad zu SVN:")&lt;br /&gt;
Dann Netbeans schließen und mit folgenden Startparametern starten:&lt;br /&gt;
&lt;i&gt;"&amp;nbsp;-J-DsvnClientAdapterFactory=commandline"&lt;/i&gt;&lt;br /&gt;
also zum Beispiel:&lt;br /&gt;
&lt;i&gt;"C:\Program Files\NetBeans 7.0.1\bin\netbeans.exe" -J-DsvnClientAdapterFactory=commandline&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Dannach funktioniert wieder alles und wir hoffen auf baldiges update von Netbeans ;)&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=gohxChBnqno:XHwlGR5Ig4s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/gohxChBnqno" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/gohxChBnqno/netbeans-und-subversion-17.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>2</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2011/10/netbeans-und-subversion-17.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-1723077991810324413</guid><pubDate>Wed, 21 Sep 2011 17:38:00 +0000</pubDate><atom:updated>2011-09-21T19:40:03.239+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">flattr</category><title>Flattr Shirts werden verlost</title><description>Bei&amp;nbsp;&lt;a href="http://skaverat.net/" target="_blank"&gt;Skaverat&lt;/a&gt; könnt ihr &lt;a href="http://skaverat.net/allgemein/verlosung-tausche-flattr-t-shirts-gegen-meinung-zu-flattr.html" target="_blank"&gt;T-Shirts von flattr gewinnen&lt;/a&gt; ... ihr müsst nur Eure Meinung zu dem &lt;a href="https://flattr.com/profile/Paladin" target="_blank"&gt;Micropayment-Dienst&lt;/a&gt; loswerden und schon landet ihr in der Lostrommel.&lt;br /&gt;
&lt;br /&gt;
Die Aktion geht noch knapp 2 Tage und es machen derzeit noch viel zu wenig Leute mit. Ich denke, ihr könnt mit wenig Aufwand einen wirklich "alltagstauglichen" Preis gewinnen, der auch offline und im "Real-Life" benutzbar ist ... worauf wartet ihr noch?&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://skaverat.net/allgemein/verlosung-tausche-flattr-t-shirts-gegen-meinung-zu-flattr.html" target="_blank"&gt;http://skaverat.net/allgemein/verlosung-tausche-flattr-t-shirts-gegen-meinung-zu-flattr.html&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=8FvBxF6VmLs:LiQ2p9PYvm8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/8FvBxF6VmLs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/8FvBxF6VmLs/flattr-shirts-werden-verlost.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>0</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2011/09/flattr-shirts-werden-verlost.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-4880544862710421939</guid><pubDate>Mon, 19 Sep 2011 13:26:00 +0000</pubDate><atom:updated>2011-09-20T21:26:28.418+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">snippet</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>PHP-Snippet: stripArrayKey</title><description>&lt;p&gt;Aus einem QueryString (z.B. dem $_GET) nicht gewollte Parameter löschen:&lt;/p&gt;
&lt;pre class="php" name="code"&gt;
	function stripArrayKey($sInput, $arrKeysToStrip = array()) {

		if (count($arrKeysToStrip)&lt;=0) {
			return $sInput;
		}

		$arrResult = array();
		parse_str($sInput, $arrResult);

		foreach ($arrKeysToStrip AS $keyName) {
			if (array_key_exists($keyName, $arrResult)) {
				unset($arrResult[$keyName]);
			}
		}

		return http_build_query($arrResult);
	}
&lt;/pre&gt;
&lt;p&gt;Vorher:&lt;/p&gt;
&lt;p&gt;param1=value&amp;amp;param2=otherValue&amp;amp;myParam=unwanted&amp;amp;param3=moreValue&lt;/p&gt;

&lt;pre class="php" name="code"&gt;
return stripArrayKey($sQuerystring, array('myParam','param2'));
&lt;/pre&gt;

&lt;p&gt;Nachher:&lt;/p&gt;
&lt;p&gt;param1=value&amp;amp;param3=moreValue&lt;/p&gt;

&lt;p&gt;Wahlweise auch gleich viele Parameter auf einen Rutsch.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=l7znP-h0wk8:lhIKBC0dp9k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/l7znP-h0wk8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/l7znP-h0wk8/php-snippet-striparraykey.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>3</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2011/09/php-snippet-striparraykey.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-5401124943637900959</guid><pubDate>Tue, 30 Aug 2011 21:02:00 +0000</pubDate><atom:updated>2011-08-31T09:07:33.030+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Zend Framework</category><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">CodeIgniter</category><category domain="http://www.blogger.com/atom/ns#">Doctrine</category><category domain="http://www.blogger.com/atom/ns#">Symphony</category><title>Das Framework updaten</title><description>&lt;p&gt;Wer kennt das nicht? Man betreut eine Vielzahl unterschiedlicher Projekte. Im Idealfall betreut man nur wenige und kennt diese fast auswendig ... aber wer von uns lebt schon im Idealfall? Eben ...&lt;/p&gt;

&lt;p&gt;So ein PHP-Projekt ist eine komplizierte Sache und auch die "kleinen" bestehen aus einer Vielzahl unterschiedlicher Technologien. Zum einen (meist) ein Framework als Basis, sei es das Zend Framework oder Symphony oder CakePHP oder CodeIgniter oder oder oder, dann - bei den neueren und "cooleren" Projekten - eine Datenbankabtraktionsschicht (ich kenne das z.B. Doctrine, aber es gibt da auch ein paar mehr) und dann kommt die Schicht Code, die uns dann die grauen Haare machen, die Anwendungsschicht, so nenne ich nun mal den Teil des Codes, den man bei einem Projekt mit Framework-Basis selbst schreibt.&lt;/p&gt;

&lt;p&gt;Nach vielen Tagen ist der Code fertig, alle Tests zeigen "Grün", das Deployment war (außnahmsweise mal) angenehm einfach und alles ist perfekt. Der Kunde ist zufrieden, der Zeit- und Projektplan eingehalten, der Chef spendiert ne Pizza und nach vielen Wochen hat man endlich mal wieder einen der wenigen "Geschafft"-Momente, die einem wieder Rückenwind geben. Toll.&lt;/p&gt;

&lt;p&gt;Nach ein paar Wochen kommt dann aber schon die erste Verbesserung, der erste Bugfix, der erste neue Kundenwunsch. Die perfekte Anwendung muss aktualisiert werden. Im Bereich der Anwendungsschicht meist ein leichtes. Käfer erschlagen, Feature eincoden, Test, VCS, Deploy, "der nächste bitte"; das war einfach.&lt;/p&gt;

&lt;p&gt;Allerdings kommt es irgendwann und du kannst dich nicht davor verstecken. "You can run, but you can't hide!" (gibt es so ein YCRBYCH-Prinzip eigentlich irgendwo? Ich habe da nichts finden können.). Das Framework, die Basis der Anwendung wird (meist von extern) aktualisiert. Und nun?&lt;/p&gt;

&lt;p&gt;Meistens hält man sich ja auf dem Laufenden und schaut nach, was es denn neues gibt. "Ah ja, Aha, soso, benutzen wir ja gar nicht, brauchen wir nicht updaten." Okay, kann passieren, aber, wie schon gesagt, YCRBYCH - das Changelog zeigt nun sehr viele Änderungen, Bugfixes, Performance-Improvements usw. genau in den Klassen und Bereichen an, die in der Kundenanwendung benutzt werden. Und nun der Worst-Case: Bugfixes zu Exploits sind auch dabei. Es heißt also: &lt;b&gt;Das Framework updaten&lt;/b&gt;!&lt;/p&gt;

&lt;p&gt;Und nun? Nun, sicher, Framework auf dem lokalen System updaten, testen, Testsystem updaten, testen usw. Aber eines musst du zugeben: Du hast ein mulmiges Gefühl dabei! Es könnte was schiefgehen. Klar, eigentlich &lt;i&gt;kann&lt;/i&gt; nichts schiefgehen, aber es &lt;i&gt;könnte&lt;/i&gt; doch sein ... und dann?&lt;/p&gt;

&lt;p&gt;An dem Punkt dachte ich dann über folgendes nach: Warum können wir mit einem Framework nicht machen, was ein Browser heute schon kann (und andere  Software eigentlich auch können sollte): Silent-Update! Also, ein Update installieren ohne dass was schiefgeht? Ganz einfach: Weil dann etwas schiefgehen &lt;u&gt;wird&lt;/u&gt;, Murphy's Law, kennt jeder.&lt;/p&gt;

&lt;p&gt;Nach tausend "ja, aber..." Gedanken machte es dann bei mir *klick* (ich möchte jetzt keinen "Schnellmerker" Kommentar hören!) ... sowas wie "Silent-Updates" machen wir doch ... nur eben nicht wir Entwickler bei uns selbst, sondern wir Entwickler beim Kunden. Sobald die Anwendung getestet und für gut befunden ist wird diese meist auch deployed (und ich hoffe mal, dass die Anwendung dann immer noch funktioniert) und dies in der Regel ohne das der Kunden nochmal dazu extra ein "Ja, updaten" Knopf drücken muss.&lt;/p&gt;

&lt;p&gt;Aber kann man einen PHP-Code nicht auch so schreiben, dass man das zugrunde liegende Framework jederzeit gegen eine neuere Version eintauschen könnte? Ich setze vorraus, dass keine Architektonischen Änderungen am Framework vorgenommen werden, dass also das Framework "manual-compatible" ist. Wie ist deine Meinung dazu? Wie müsste der Code dazu aussehen? Kann man solchen Code überhaupt schreiben? Oder ist das Utopie?&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=E5_FfOMX0cg:o32ejrR10hw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/E5_FfOMX0cg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/E5_FfOMX0cg/das-framework-updaten.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>4</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2011/08/das-framework-updaten.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-7096704146836276182</guid><pubDate>Thu, 14 Jul 2011 18:43:00 +0000</pubDate><atom:updated>2011-07-14T23:27:14.043+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Programme</category><category domain="http://www.blogger.com/atom/ns#">Allgemein</category><title>Werkzeugkasten 2011</title><description>Nils von &lt;a href="http://www.phphatesme.com/blog/tools/mein-werkzeugkasten-2011/"&gt;phphatesme.com&lt;/a&gt; hatte eine tolle Idee: Warum schreiben wir nicht jährlich unsere Tools und Programme auf, die wir so verwenden und können uns dann im Rückblick über uns selbst freuen, was wir vor x Jahren doch alles für Steinwerkzeuge benutzt haben und dass es ja früher alles ja eh entweder viel besser war (wenn es mal wieder schlecht läuft) oder viel härter war (wenn dem Kollegen die Loorbeeren zu schnell zufallen).&lt;br /&gt;
&lt;br /&gt;
Und weil ich das auch für eine gute Idee halte und Selbstironie nie verkehrt ist, mache ich da mit. Hier also die Tools, Programme, Helferlein die ich 2011 benutze, allerdings ohne spezielle Reihenfolge, dafür bin ich derzeit einfach zu faul.&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Jahr: &lt;b&gt;PHP &lt;/b&gt;und &lt;b&gt;MySQL&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Zend Studio&lt;/b&gt;&lt;br /&gt;Meine IDE für PHP und alles, was damit einhergeht. Besonders den Debugger und den Profiler möchte ich nicht mehr missen. Die IDE kann alles, was ich täglich brauche und es gibt immer noch Dinge und Features, die ich noch entdecken kann. Dieses Jahr trübt ein kleiner (aber für mich umso schwerer wiegender) Encoding-Bug das Erlebnis, aber lt. Zend Support wird diesem im nächsten Release (wieder) gefixed.&lt;br /&gt;Einziger Zusatz ist die SVN Unterstützung von CollabNet; die&amp;nbsp;standardmäßige&amp;nbsp;SVN Unterstützung ist wirklich nicht so toll ;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Zend Server&lt;/b&gt; (Community Edition)&lt;br /&gt;Apache, PHP und MySQL "out-of-the-box" und absolut&amp;nbsp;update-fähig&amp;nbsp;auf Knopfdruck, so stelle ich mir einen modernen Webserver vor. Ebenso positiv: Die Administration via Webinterface. Kostenlos und als PHP 5.2 und PHP 5.3 Version, derzeit schwerpunktmäßig im Einsatz: PHP 5.2&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SVN &lt;/b&gt;und &lt;b&gt;Vercue &lt;/b&gt;(SVN Monitor)&lt;br /&gt;Ohne kommt man nicht mehr hin. Versionskontrollsysteme (VCS) sollten in keinem professionellen Umfeld fehlen und bei der Menge an verschiedenen Kundensystemen und -seiten brauche ich auch eine schnelle Übersicht über alle SVN Projekte auf dem Server (wer hat was wann eingecheckt in der Systray) und bekomme bei ganz wichtigen Projekten sogar eine Mail, sobald eine Änderung eingeht. Sehr nützliches Werkzeug. Derzeit beim Test von &lt;b&gt;SubversionEdge&lt;/b&gt;, mal sehen...&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FileZilla&lt;/b&gt;&lt;br /&gt;Irgendwie müssen die neuen Daten ja auf den Kundenserver, oder? Und die Auftritte der Neukunden müssen auch zu mir kommen. Filezilla macht das alles und zur Not sogar gleichzeitig auf mehreren Kundenservern. Dank Filterlisten, Serververwaltung und Warteschlange.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Outlook&lt;/b&gt; (ja, &lt;b&gt;MS Office&lt;/b&gt;)&lt;br /&gt;Outlook hilft mir, meine Mails, meine Termine usw. zu organisieren, so dass ich den Kopf frei habe, mich um die Programmierprobleme zu kümmern. Ich weiß, es gibt andere &lt;strike&gt;Götter &lt;/strike&gt;Mailprogramme, aber ich komme im "Buisness" am besten mit Outlook klar.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Firefox&lt;/b&gt; mit &lt;b&gt;Firebug&lt;/b&gt;&lt;br /&gt;Muss ich dazu noch irgendwas sagen?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Zend Toolbar&lt;/b&gt;&lt;br /&gt;Nützliches AddOn, für Firefox, für Chrome und IE&lt;/li&gt;
&lt;li&gt;&lt;b&gt;WebDeveloperTools&lt;/b&gt;&lt;br /&gt;Sehr nützliche Erweiterung für den Firefox.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Chrome&lt;/b&gt;, &lt;b&gt;Opera&lt;/b&gt;, &lt;b&gt;IE9&lt;/b&gt;&lt;br /&gt;Alle nennenswerten Browser zum testen der Seiten; ich favorisiere eigentlich keinen, aber Chrome läuft gefühlt am flüssigsten, gefolgt von IE9. Opera nehme ich nur zum testen.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;devart MySQL Studio&lt;/b&gt;&lt;br /&gt;DAS Tool für MySQL und die erstellung an Analyse komplexer Querys. Irgendwann schreibe ich mal einen längeren Beitrag dazu. Auf jeden Fall solltet ihr euch das Programm mal ansehen, wenn ihr vorhabt, komplexe Querys zu erstellen oder vorhandene Querys zu optimieren. Die Express Version ist kostenlos zum reinschnuppern ;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Notepad2&lt;/b&gt;&lt;br /&gt;So schnell wie das original, aber zusätzlich noch Sytax Coloring und Zeilennummern. Für schnelle Sachen ("kannste-mal-eben-...") super.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Notepad++&lt;/b&gt;&lt;br /&gt;Sollte mittlerweile auch jeder auf dem System haben, also keine weiteren Worte.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Sysinternals Suite&lt;/b&gt; (WSCC - Windows System Control Center)&lt;br /&gt;Aus der Sysinternals Suite nutze ich vor allem den Process Explorer und "autoruns", das WSCC hält mir dabei alles up-to-date, ohne dass ich immer nachsehen muss.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;VirtualBox&lt;/b&gt;&lt;br /&gt;Einmal Linux blau, einmal Windows 98, einmal MacOS in der Dose ... Virtualisierung ist toll.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;KeePass&lt;/b&gt;&lt;br /&gt;Passwörter sollte man gut wählen. Dabei werden die so komplex, dass die sich kein normaler Mensch merken kann. Aber dazu gibt es ja KeePass. Keine Angst vor 30-stelligen Kundenpasswörtern ;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Screenpresso&lt;/b&gt;&lt;br /&gt;Klein, nützlich und im SysTray, so könnte man Screenpresso bei 99% seiner Zeit beschreiben. Das restliche Prozent hat es in sich. Screenshots kennt jeder, muss jeder ab und zu mal machen, der Druck zur "Druck" Taste ist nicht weit ... und dann? Bildbearbeitung auf (dauert gefühlte 2 Tassen Kaffee) nur um ein paar lästige kanten und den Desktop zu entfernen. Screenpresso nimmt nur einen Teil des Bildschirms auf. "Druck" drücken, Bereich entweder auswählen (Programm-Box Wahl) oder per Bereichsauswahl markieren, LMT drücken und schon kann man den Screenshot sogar nochmal - grob -&amp;nbsp;Nachbearbeiten&amp;nbsp;und speichern. Wer oft Screenshots machen muss, der wird begeistert sein.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Launchy&lt;/b&gt;&lt;br /&gt;Kennt jeder Windows User: Start-Programme und das große Suchen, wo denn nun der Shortcut ist. Den Desktop mit allen Verknüpfungen auf alle Programme voll zu pflastern kann es aber auch nicht sein. Mit Lanchy kein Thema, das Tool scannt das Programme Menü (und auch Verzeichnisse eurer Wahl) und legt einen Index an. Dann startet man das Tool per Tastatur-Shortcut (STRG+ALT+BACKSPACE bei mir) und gibt z.B. "wor" ein und schon erscheint im Auswahlmenü "Word 2007", einmal ENTER und das Programm startet. Launchy lernt sogar hinzu. Wenn du W7 eingibt und Word aus der Liste suchst, wird beim nächsten mal schon Word vorgeschlagen. Die restliche Zeit verbringt Launchy nur im RAM und taucht sonst nirgends auf.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;iTunes&amp;nbsp;&lt;/b&gt;&lt;br /&gt;#Uuaaaa, und schon schreien wieder alle: Apple-Fanboy, ist was mit Windows... Nein, iTunes ist aus 2 Gründen drauf: SongBird schmiert mir ständig ab und ruiniert unter Windows7 mein Theme (will immer auf das sehr schnörkellose Theme wechseln) und zum anderen läuft es flüssig und spielt ab, was ich ihm serviere, vor allem Podcasts kommen automatisch. Einkaufen würde ich aber im Apple Store nicht ;)&lt;br /&gt;Ach ja: Falls irgendwann mal SongBird mit Windows7 Unterstützung da ist, bitte einen Hinweis an mich.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TweetDeck&lt;/b&gt;&lt;br /&gt;Zum Twittern und "Twitter-Übersicht-behalten" reicht es mir völlig.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Windows7&lt;/b&gt;&lt;br /&gt;Kein konfigurieren, kein "apt-get irgendwas", kein "sudo kramp config --install-doch-bitte-endlich", kein "man warumgehtdasnicht" ... einfach problemlos arbeiten!&lt;br /&gt;Man merkt schon: Ich komme mit Windows einfach besser klar. Zum arbeiten ungeschlagen, der Rest ist gut für Webserver und Pinselschwinger ;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Selenium&lt;/b&gt;&lt;br /&gt;Steht mit Absicht unten. Das Tool ist mir bekannt, habe es bisher aber nur selten eingesetzt, da der Suppport für moderne Firefox Versionen nicht da war. Mit der neuen 2.0 ist das Ding nun wieder in der Gegenwart und ich plane, es häufiger einzusetzen.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
So, ich hoffe, ich habe nichts vergessen.&lt;br /&gt;
Und wie sieht deine Entwickler-Werkzeugkiste für 2011 aus?&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=mVFjlyyF6C4:tqJQzEWNoYc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/mVFjlyyF6C4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/mVFjlyyF6C4/werkzeugkasten-2011.html</link><author>noreply@blogger.com (Sascha Presnac)</author><thr:total>9</thr:total><feedburner:origLink>http://softwareentwickler.blogspot.com/2011/07/werkzeugkasten-2011.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4097639809240086703.post-4036809384151281964</guid><pubDate>Tue, 12 Jul 2011 14:45:00 +0000</pubDate><atom:updated>2011-07-12T16:45:01.643+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">zend</category><category domain="http://www.blogger.com/atom/ns#">Firefox</category><title>Zend Toolbar 2.5 für Firefox 5</title><description>&lt;div style="font-family: inherit;"&gt;
Kurz notiert: Es ist zwar noch nicht ganz offiziell, aber für alle, die auf die Zend Toolbar für Zend Studio angewiesen sind oder nicht mehr ohne dieses tolle AddOn arbeiten können gibt es &lt;a href="http://forums.zend.com/viewtopic.php?f=59&amp;amp;t=15403" target="_blank"&gt;im Zendforum die Toolbar 2.5 als Betaversion zum download&lt;/a&gt;.&lt;/div&gt;
Bei mir funktioniert diese ohne Probleme:&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-zuXtjDI9XcY/ThwHHAj93bI/AAAAAAAAAQ4/yMnL8qQ4-OI/s1600/firefox5-zendtoolbar2-5.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="356" src="http://2.bp.blogspot.com/-zuXtjDI9XcY/ThwHHAj93bI/AAAAAAAAAQ4/yMnL8qQ4-OI/s400/firefox5-zendtoolbar2-5.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;Die Zend Toolbar 2.5 im Firefox 5&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/softwareentwicklerblog?a=eRxLjPdFiMM:WHRpPccMsc8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/softwareentwicklerblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/softwareentwicklerblog/~4/eRxLjPdFiMM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/softwareentwicklerblog/~3/eRxLjPdFiMM/zend-toolbar-25-fur-firefox-5.html</link><author>noreply@blogger.com (Sascha Presnac)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-zuXtjDI9XcY/ThwHHAj93bI/AAAAAAAAAQ4/yMnL8qQ4-OI/s72-c/firefox5-zendtoolbar2-5.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Unbekannter Ort.</georss:featurename><georss:point>51.43517639096306 6.529526710510254</georss:point><georss:box>51.43270189096306 6.524591210510254 51.437650890963056 6.534462210510254</georss:box><feedburner:origLink>http://softwareentwickler.blogspot.com/2011/07/zend-toolbar-25-fur-firefox-5.html</feedburner:origLink></item></channel></rss>
