<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1219721993721227016</id><updated>2011-12-21T05:08:32.563-08:00</updated><category term='apache'/><category term='Technocrati'/><category term='zend neon eclipse'/><category term='javascript'/><category term='seagull'/><category term='mysql'/><category term='debugging'/><category term='canonical url'/><category term='php'/><category term='php seagull kml google maps'/><category term='intro'/><category term='winxp ubuntu'/><category term='Seagull Zend_Search_Lucene Zend Framework php'/><category term='netbeans'/><category term='jquery form ajax'/><category term='private'/><category term='seo'/><category term='jquery'/><category term='php framework'/><category term='elopocalypse nokia microsoft'/><category term='adwords'/><category term='jquery ajax'/><category term='seagull vote'/><category term='mod_rewrite'/><category term='symfony2'/><category term='php framework sitemap xml'/><category term='ide'/><category term='jquery tab jMap seagull'/><category term='php ide database framework'/><category term='seagull php cms publisher'/><category term='Seagull sugarcrm integration'/><title type='text'>pentarim`s spin-off</title><subtitle type='html'>Things about programming, php, and whatever</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-2464987269792972324</id><published>2011-03-07T00:01:00.000-08:00</published><updated>2011-03-07T00:44:44.155-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symfony2'/><category scheme='http://www.blogger.com/atom/ns#' term='php framework'/><title type='text'>Symfony2 (first) impressions</title><content type='html'>tldr: &lt;a href="http://symfony.com/"&gt;Symfony2&lt;/a&gt; is a good 5.3 php mvc framework which is yet to gain dev buzz&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I started using it around PR2/3, wanted to learn something new, had a side project for it, so gave it a try. The catchy &amp;amp; humble sentence “were standing on the shoulders of giants” on dev Symfony2 homepage (http://symfony-reloaded.org/, removed by now :(), which resembles the philosophy behind it, should add that those freaking giants were running at times in my case :)  Here are my impressions in a Mind\Dump() manner:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;twig, like  a lot its blocks/extensions. Overall is extendible &amp;amp; a solid template&lt;br /&gt;engine, would use it without Symfony2 as well&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;asset management is nice, powerful filters&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;once I got  used to &lt;a href="http://symfony.com/doc/2.0/book/service_container.html"&gt;Services Container&lt;/a&gt; &amp; Dependency Injection, it was much easier to develop with it (havent written a singleton since:)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Doctrine2 based model layer , upvote&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;powerful debugging features in &lt;a href="http://symfony.com/doc/2.0/book/internals/profiler.html"&gt;Profiler&lt;/a&gt; yet you will need a php debugger, easier to see what happens under the hub&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;form component: I gave it hell, implemented a multi page wizard form for a rather complicated object model (still need to finish validation tho), its insurance stuff so you can imagine. Once I figured out how it is meant to be used in complicated scenarios (sub-sub forms &amp;amp; request objects), I became a great fan of it.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://github.com/symfony/symfony-bootstrapper"&gt;symfony-bootstrap&lt;/a&gt;   should get more love / awareness&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;if you are into &lt;a href="https://github.com/mjollnir/sf2debpkg"&gt;Symfony2 on Debian/Ubuntu &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;community &amp;amp; contributors are the strong side of the project, code lives on github which provides a healthy ecosystem for open source projects.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Symfony2 console is handy for development / deployment / maintenance&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;documentation / tutorials are improving lot lately. I got an interesting browser url shortcut while it was located under http://docs.symfony-reloaded.org/master/ it was simply “master”, Symfony2 teaches you to be humble :), it can beat Google Analytics shortcut tho...&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I learned a lot from &lt;a href="https://github.com/FriendsOfSymfony/UserBundle"&gt;FOS/UserBundle&lt;/a&gt; , &lt;a href="https://github.com/ornicar/lichess"&gt;Lichess&lt;/a&gt; , &lt;a href="https://github.com/Herzult/ForumBundle"&gt;ForumBundle&lt;/a&gt;  to name a few. These bundles can be as good as any cookbook / reference.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;if you used an mvc framework ever before there wont be big surprises&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Symfony2 is a strong contender for “next generation php framework” tag. Will be interesting to  see its bundles in 6 month from now when more developers adapt it . Would definitely use it in future projects.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;p.s.Its good to see activity in php world that couldnt be made fun of on reddit/hackernews&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-2464987269792972324?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/2464987269792972324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=2464987269792972324' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/2464987269792972324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/2464987269792972324'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2011/03/symfony2-first-impressions.html' title='Symfony2 (first) impressions'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-7772061437154987167</id><published>2011-02-13T12:12:00.000-08:00</published><updated>2011-02-15T00:55:42.911-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='elopocalypse nokia microsoft'/><title type='text'>Few thoughts on #elopocalypse</title><content type='html'>It was interesting to see how Nokia partnered with Microsoft few days ago on using Windows Phone 7 on their next generation smartphones instead of their homegrown (well almost as they partnered with Intel on it, but Maemo, its foundation, is theirs) MeeGo platform. There was instant community uprising (look at #elopocalypse &amp; #feb11 tags on twitter). 1000+ Nokia devs hit the streets of Tampere (quite unusual behaviour for geeks)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Why is it a big deal?&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Microsoft buys a potentially large market share for Windows Phone 7 by knocking out a potent competitor MeeGo. With this move Nokia degrades itself to pure hardware manufacturer (with a strong patent portfolio), giving up its Ovi store and other aspirations. &lt;br /&gt;It will be rather cold out there for them (just look at competition Samsung, HTC, ZTE, LG to name a few), and we saw how successfully they coped with them earlier... I am sure Windows Phone 7 is a usable platform &amp;amp; Microsoft will do everything doable to make it even better to be able to catch up with Android. On the other hand MeeGo is a linux based OS where you could reuse the linux stack (like install a webserver on your phone if that is what you need), backed by excelent Qt, technically the most advanced stuff in mobile atm.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;How miscommunicated by Steven Elop &amp;amp; his team&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;I mean seriously, you dont mention any words that can even be even associated with "disaster" to be able push trough a deal you made. I think he is simply not competent enough to lead a company level of Nokia, regardless of how good/bad the deal itself is.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Consequences&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;The price of Nokia shares went down by 13.97% instantly (almost 5B $). Guess it will be even harder to communicate to shareholders, really hope that Mr. Elop will prepare better this time. Nokia receives a yet undisclosed amount of cash from Microsoft measured in billions of USD. Microsoft has started seriously investing in mobile, and their war chest is not small. Nokia holds lot of patents in mobile arena, is still a strong brand so from Microsofts side perfect strategic partner.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Community?!&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;When Google released Android they did everything possible to attract 3rd party developers &amp;amp; make them adapt their platform &amp;amp; write apps for it (copy-paste idea from Apple). These developers are early adopters, show their phones &amp;amp; apps to friends, they blog about it etc. &amp;amp; the whole thing will get traction soon. So in short a valuable asset.&lt;br /&gt;&lt;br /&gt;What Nokia did? They encouraged thousands of devs that MeeGo is the way to go, the guys invest serious time in it and suddenly burning platform &amp;amp; cold sea. Now if you invested &amp;amp; lost time on Nokia lie would you be early adopter in second round/any rounds. Thats just bad karma which I dont think Nokia needs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-7772061437154987167?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/7772061437154987167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=7772061437154987167' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7772061437154987167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7772061437154987167'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2011/02/few-thoughts-on-elopocalipse.html' title='Few thoughts on #elopocalypse'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-5063528627957998729</id><published>2010-10-03T23:24:00.000-07:00</published><updated>2010-10-03T23:41:29.332-07:00</updated><title type='text'>jQuery webcam plugin</title><content type='html'>&lt;p&gt;&lt;br /&gt;Because of finds like this &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; plugin is worth `wasting` so much time on &lt;a href="http://www.reddit.com/r/programming"&gt;reddit&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt; With &lt;a href="http://www.xarg.org/project/jquery-webcam-plugin/"&gt;jQuery Webcam plugin&lt;/a&gt;, a global object window.webcam is available, which provides the following methods:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;capture()&lt;/li&gt;&lt;br /&gt;&lt;li&gt;save([file])&lt;/li&gt;&lt;br /&gt;&lt;li&gt;getCameraList()&lt;/li&gt; &lt;br /&gt;&lt;li&gt;setCamera([index])&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Cant wait to test it with red5 stream capture stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-5063528627957998729?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/5063528627957998729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=5063528627957998729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/5063528627957998729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/5063528627957998729'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2010/10/jquery-webcam-module.html' title='jQuery webcam plugin'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-4044552133055549419</id><published>2010-02-24T00:38:00.000-08:00</published><updated>2010-02-24T01:01:36.210-08:00</updated><title type='text'>PHP: __get &amp;&amp; isset</title><content type='html'>&lt;p&gt;&lt;br /&gt;Encountered strange behaviour with php today. If __get is implemented in a class (to provide some properties that are calculated on the fly for example), isset returns false for mentioned calculated properties.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Check out this simple example&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class exampleA&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__get($property)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return ($property == 'calculatedProperty')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;? 42 //do some resource heavy calculation, like meaning of life&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;isset($exampleA-&gt;calculatedProperty) === false&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is not a bug but a feature &lt;a href="http://bugs.php.net/bug.php?id=29917"&gt;according to PHP staff&lt;/a&gt;. Btw there is rationality behind it, as there is a __isset in place.&lt;br /&gt;&lt;br /&gt;This should work&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class exampleB extends exampleA&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__isset($property)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return ($property == 'calculatedProperty') ? true : false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;isset($exampleB-&gt;calculatedProperty) === true&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Maybe this is obvious to everybody, it surprised me at first run, but its correct behavior.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-4044552133055549419?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/4044552133055549419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=4044552133055549419' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/4044552133055549419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/4044552133055549419'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2010/02/php-get-isset.html' title='PHP: __get &amp;&amp; isset'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-5543911654131076266</id><published>2010-02-02T02:28:00.000-08:00</published><updated>2010-02-02T02:36:19.873-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><title type='text'>Debugging PHP with NetBeans &amp; Xdebug &amp; Ubuntu</title><content type='html'>It was almost impossible with my config to get working Zend Studio debugging, I think I achieved it once over the years, but it crashed my apache often, so wasnt that good solution neither. For development environment I use ubuntu/debian, vhosts with mod_rewrite, therefore need remote debugging.&lt;br /&gt;&lt;br /&gt;Useful links info :&lt;br /&gt;&lt;br /&gt;    * &lt;a href="http://wiki.netbeans.org/HowToConfigureXDebug"&gt;Configure Xdebug in NetBeans&lt;/a&gt;&lt;br /&gt;    * &lt;a href="http://netbeans.org/kb/docs/php/debugging.html"&gt;Netbeans debugger in general&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I had Xdebug set up and NetBeans fully supports it so gave it a try.&lt;br /&gt;&lt;br /&gt;in Project Properties-&gt;Run Configuration, advanced button&lt;br /&gt;&lt;br /&gt;- added Server path/Local path mappings for project ,&lt;br /&gt;- debug Url set to "Ask every time", because I was about to debug remote mod_rewrite urls&lt;br /&gt;&lt;br /&gt;For some odd reason, it wasnt working out of the box, Xdebug and NetBeans wasnt communicating well (it probably will work for you out of the box, my machine is cursed :), nothing "easier" that debug the debugger... needed some info&lt;br /&gt;&lt;br /&gt;Edited /etc/netbeans.conf and changed php dbgp debug level:&lt;br /&gt;&lt;br /&gt;netbeans_default_options="-J-client -J-Xverify:none -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=200m -J-Dapple.laf.useScreenMenuBar=true -J-Dsun.java2d.noddraw=true -J-Dorg.netbeans.modules.php.dbgp.level=400"&lt;br /&gt;&lt;br /&gt;IDE debug log is accessible at (with output from dbgp): View-&gt;IDE log,&lt;br /&gt;&lt;br /&gt;Xdebug logs location is at xdebug.remote_log defined in your php.ini&lt;br /&gt;&lt;br /&gt;It turned out that it had something to do with my xdebug settings in php.ini. My final settings are:&lt;br /&gt;&lt;br /&gt;zend_extension="/usr/lib/php5/20060613+lfs/xdebug.so"&lt;br /&gt;&lt;br /&gt;xdebug.remote_enable=1&lt;br /&gt;xdebug.remote_handler=dbgp&lt;br /&gt;xdebug.remote_mode=req&lt;br /&gt;xdebug.remote_host=127.0.0.1&lt;br /&gt;xdebug.remote_port=9000&lt;br /&gt;xdebug.remote_log=/var/log/xdebug.log&lt;br /&gt;xdebug.extended_info=1&lt;br /&gt;&lt;br /&gt;And it finally found my break point, on custom remote url, hurray :) Long live NetBeans &amp;amp; Xdebug&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-5543911654131076266?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/5543911654131076266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=5543911654131076266' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/5543911654131076266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/5543911654131076266'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2010/02/debugging-php-with-netbeans-xdebug.html' title='Debugging PHP with NetBeans &amp; Xdebug &amp; Ubuntu'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-2103949591366321513</id><published>2010-02-02T01:02:00.000-08:00</published><updated>2010-02-02T05:34:14.936-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ide'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP IDE: NetBeans 6.8 vs Zend Studio 7.1</title><content type='html'>Little bit of background: I use &lt;a href="http://www.zend.com/products/studio/"&gt;Zend Studio&lt;/a&gt; since version 5.5 and it was released long time ago, I dont even remember the year :). Main point of sticking with Zend was that I am used to eclipse, how it works &amp;amp; its shortcuts/shortcomings. Its a good IDE although it has its dark sides.&lt;br /&gt;&lt;br /&gt;It was "interesting" from Zend that with every new major release you got a worse product, until the first minor releases fixed up the bugs (do they even have QA?). Same was with version 7. I got to the point that even autocompletition wasnt working, indexing was still slow as hell, not to mention "luxury" of debugging ... Was thinking is this really that much better than vi :)&lt;br /&gt;&lt;br /&gt;Looked around and installed &lt;a href="http://netbeans.org/features/php/"&gt;NetBeans 6.8&lt;/a&gt;, because read good things about it.   Will try to cover my impressions in order of appearance.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Marks&lt;span style="font-weight: bold;"&gt; svn changeset&lt;/span&gt; in editor : it has a green bar beside line numbers that shows changes done to working copy, usefull little feat&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Fast&lt;/span&gt; : indexing is remarkably fast (have I mentioned that I come with Zend Studio background :)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Code completition&lt;/span&gt; working: shouldnt be that big of a feat, if it was working correctly in Zend Studio 7.1, this is what differs an IDE from a really complicated text editor.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Eclipse keymapping&lt;/span&gt; as option. pleasant surprise, obviously they have encountered similar people as me :)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Search &amp;amp; Replace&lt;/span&gt;: more convenient on multiple replace runs on same selection (no direction problems like in Zend Studio), was minor but annoying, who encountered it will know what I talk about :)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Syntax checks&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; in HTML/JavaScript&lt;/span&gt; are better in Netbeans (spotted quite a few errors made in Zend Studio), especially with non standard markup (like Flexy templates)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Double clicking&lt;/span&gt; selection of strings sometimes selecting slowly/rarely not selecting/sometimes need multiple double clicks in Netbeans, &lt;span style="font-style: italic;"&gt;minor&lt;/span&gt; but this is better in Zend Studio&lt;/li&gt;&lt;li&gt;PHP &lt;span style="font-weight: bold;"&gt;source formatting&lt;/span&gt; is more customizable in Zend Studio, HTML/JS formatting was better in NetBeans&lt;/li&gt;&lt;li&gt; &lt;span style="font-weight: bold;"&gt;Working debugger in NetBeans &lt;/span&gt;&lt;span&gt;(&lt;a href="http://pentarim.blogspot.com/2010/02/debugging-php-with-netbeans-xdebug.html"&gt;details of setup&lt;/a&gt;)&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Summary&lt;/h2&gt;&lt;br /&gt;I am using &lt;span style="font-weight: bold;"&gt;Netbeans 6.8&lt;/span&gt; as my PHP IDE, have I mentioned that it is free?&lt;br /&gt;&lt;nbdir&gt;&lt;br /&gt;&lt;/nbdir&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-2103949591366321513?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/2103949591366321513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=2103949591366321513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/2103949591366321513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/2103949591366321513'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2010/02/php-ide-netbeans-68-vs-zend-studio-71.html' title='PHP IDE: NetBeans 6.8 vs Zend Studio 7.1'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-1309163581059393754</id><published>2009-08-29T23:41:00.000-07:00</published><updated>2009-08-31T01:36:10.217-07:00</updated><title type='text'>Welcome back gift for a colleague :)</title><content type='html'>My brother and some of his friends prepared a nice welcome gift for a colleague while he was at holiday. It took few hours of fun, 90m of aluminium foil and a good idea.&lt;br /&gt;&lt;br /&gt;The stage is set and a webcam is installed to record his reaction when he arrives (will post the url once it happens).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sayWkr5gsIo/SpohJCbSIcI/AAAAAAAABqU/Y7Bb_dn_5MI/s1600-h/K%C3%A9p048.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_sayWkr5gsIo/SpohJCbSIcI/AAAAAAAABqU/Y7Bb_dn_5MI/s320/K%C3%A9p048.jpg" alt="" id="BLOGGER_PHOTO_ID_5375645544373952962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sayWkr5gsIo/SpoiKsONHqI/AAAAAAAABqc/yCpHNdJ6SWE/s1600-h/K%C3%A9p049.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_sayWkr5gsIo/SpoiKsONHqI/AAAAAAAABqc/yCpHNdJ6SWE/s320/K%C3%A9p049.jpg" alt="" id="BLOGGER_PHOTO_ID_5375646672284884642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sayWkr5gsIo/SpoibS0l5iI/AAAAAAAABqk/wiI012hIIEg/s1600-h/K%C3%A9p050.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://3.bp.blogspot.com/_sayWkr5gsIo/SpoibS0l5iI/AAAAAAAABqk/wiI012hIIEg/s320/K%C3%A9p050.jpg" alt="" id="BLOGGER_PHOTO_ID_5375646957524346402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sayWkr5gsIo/SpoioRGjwsI/AAAAAAAABqs/ZWRh4WE_3DM/s1600-h/K%C3%A9p053.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_sayWkr5gsIo/SpoioRGjwsI/AAAAAAAABqs/ZWRh4WE_3DM/s320/K%C3%A9p053.jpg" alt="" id="BLOGGER_PHOTO_ID_5375647180401132226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://www.reddit.com/button.js?t=3"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-1309163581059393754?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/1309163581059393754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=1309163581059393754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/1309163581059393754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/1309163581059393754'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2009/08/welcome-back-gift-for-colleague.html' title='Welcome back gift for a colleague :)'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_sayWkr5gsIo/SpohJCbSIcI/AAAAAAAABqU/Y7Bb_dn_5MI/s72-c/K%C3%A9p048.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-2488966025088818211</id><published>2009-04-04T11:22:00.000-07:00</published><updated>2009-04-04T12:28:39.058-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='canonical url'/><category scheme='http://www.blogger.com/atom/ns#' term='seagull'/><title type='text'>Solution for content duplication</title><content type='html'>The content your site publishes are often reachable trough multiple urls. It happened to me while using Horde_Routes (which is really nice way to organize your urls with Seagull), and there weren't easy workarounds (http redirect is not a too nice solution)&lt;br /&gt;&lt;br /&gt;This could cause you problems with search engines, because "score" of that particular content are spread trough multiple urls. Your content gets lower relevance in search results which is definitely not what you want.&lt;br /&gt;&lt;br /&gt;Now there is a nice solution for this issue called : &lt;a href="http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html"&gt;cannonical URL link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Basically you just have to add&lt;br /&gt;&lt;pre class="html" style="font-family: monospace;"&gt;&amp;lt;link rel="canonical" href="http://someurl/comes/here" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;to HEAD section and you are done. It will tell the search engines which url to associate with content. All major search engines support canonical url links.&lt;br /&gt;&lt;br /&gt;With Seagull you have to modify www/yourtheme/default/header.html and add a line like&lt;br /&gt;&lt;pre class="html" style="font-family: monospace;"&gt;&lt;br /&gt;&amp;lt;link flexy:if="canonicalUrl" rel="canonical" href="{canonicalUrl}" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;which means that if you set $output-&gt;canonicalUrl in your controller it will find its way to search engines&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-2488966025088818211?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/2488966025088818211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=2488966025088818211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/2488966025088818211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/2488966025088818211'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2009/04/solution-for-content-duplication.html' title='Solution for content duplication'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-285886063752048247</id><published>2009-03-23T13:46:00.000-07:00</published><updated>2009-03-23T13:56:07.597-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>Mysql spatial extension</title><content type='html'>I must be the only one around who didnt knew that &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html"&gt;mysql spatial extension&lt;/a&gt; exists... It is a life saver if proximity based search is to be implemented. Without it you would have to calculate lat/lang ranges that are within some distance of base point (was there, you dont want to), which is rather costly operation, not to mention that this stuff allows to tell if points are inside a polygon or whatever, so good to know its out there, wont forget it next time I encounter some google maps/kml related stuff...&lt;br /&gt;&lt;br /&gt;Has anyone used it? Performance?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-285886063752048247?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/285886063752048247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=285886063752048247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/285886063752048247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/285886063752048247'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2009/03/mysql-spatial-extension.html' title='Mysql spatial extension'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-3824898901708459584</id><published>2008-10-23T04:38:00.000-07:00</published><updated>2008-10-23T05:36:19.095-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='mod_rewrite'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='seagull'/><title type='text'>Remove index.php from urls in Seagull with mod_rewrite</title><content type='html'>To make Seagulls urls even more SEO friendly, you can "remove" index.php from them. It could be done relatively easily with Apache`s mod_rewrite module.&lt;br /&gt;&lt;br /&gt;Example of functionality:&lt;br /&gt;&lt;br /&gt;http://www.example.com/index.php/default/maintenance/&lt;br /&gt;=&gt;&lt;br /&gt;http://www.example.com/default/maintenance/&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Apache configuration&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You need to enable mod_rewrite module first. Then you have to make decision where to keep your rewrite rules. Options are : global httpd.conf, virtualhost or .htaccess files. I dont suggest .htaccess files as apache should check them for every request, and with higher load you dont want it. I keep rules in virtualhost files. Lets see an example:&lt;br /&gt;&lt;br /&gt;/etc/apache2/sites-available/www.example.com&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;virtualhost *&amp;gt;&lt;br /&gt;ServerAdmin webmaster@localhost&lt;br /&gt;DocumentRoot /var/www/example.com/www&lt;br /&gt;ServerName www.example.com&lt;br /&gt;&amp;lt;Directory /var/www/example.com/www&amp;gt;&lt;br /&gt;        RewriteEngine On&lt;br /&gt;        RewriteBase /&lt;br /&gt;        RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;        RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;        RewriteRule ^(.*)$ index.php/$1 [L]&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;br /&gt;# RewriteLog /var/log/apache2/example.com-rewrite&lt;br /&gt;&lt;br /&gt;ErrorLog /var/log/apache2/example.com-error_log&lt;br /&gt;CustomLog /var/log/apache2/example.com-access_log common&lt;br /&gt;&amp;lt;/virtualhost&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The rewrite rules are set on same directory as document root.&lt;br /&gt;&lt;br /&gt;For each request:&lt;br /&gt;- check if the requested url is an existing file&lt;br /&gt;RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;&lt;br /&gt;- If its not a file, prepend index.php.&lt;br /&gt;RewriteRule ^(.*)$ index.php/$1 [L]&lt;br /&gt;&lt;br /&gt;Save config file &amp;amp; reload apache in order to use newly set up rules&lt;br /&gt;&lt;br /&gt;You can test if the rewrite rules function properly by simply typing in few in your browser without index.php.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Seagull configuration&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;Next step is to change how Seagull generates links because we dont want index.php in our links any more. You have to edit Seagull config file located in &amp;lt;install_dir&amp;gt;/var/www.example.com.conf.php , and set frontScriptName to an empty string:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$conf['site']['frontScriptName'] = '';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can find out more about this at:&lt;br /&gt;&lt;a href="http://trac.seagullproject.org/wiki/TroubleShooting/RemovingIndex.php"&gt;Seagull Wiki&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-3824898901708459584?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/3824898901708459584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=3824898901708459584' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/3824898901708459584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/3824898901708459584'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2008/10/remove-indexphp-from-urls-in-seagull.html' title='Remove index.php from urls in Seagull with mod_rewrite'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-3623328326217120788</id><published>2008-09-08T05:01:00.000-07:00</published><updated>2008-09-08T05:35:46.374-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='winxp ubuntu'/><title type='text'>Move made, Ubuntu hardy heron installed</title><content type='html'>Finally switched from Win XP to Ubuntu, and got around with it. It was a long delayed step because most of my stuff worked nicely with Win Xp, but lets admit other OS`s handle better scripting :) OS install went fine, and the core system was in place really soon. Had some hard times with downloading medibuntu packages, but mostly because of my ISP i guess.&lt;br /&gt;&lt;br /&gt;Most of my dev environment up and running, with minor fixes.&lt;br /&gt;&lt;br /&gt;ZendStudio for Eclipse produced some nice error message when it was trying to build a Seagull based project but there is a RC of editor (ZendStudioForEclipse-6_0_1_1RC1) that has fixed cause of it.&lt;br /&gt;&lt;br /&gt;Have set up apache for my existing vhosts for apache2, mysql. Made Navicat running trough wine along with Safari. Havent had problems with wine, no freezes. But firefox 3 produces really strange behaviours like 100% CPU usage, and show big apetite for memory, could be caused by firebug tho.&lt;br /&gt;&lt;br /&gt;What still remains to be done is getting IE browsers running for testing purposes, trough &lt;a href="http://www.tatanka.com.br/ies4linux/page/Main_Page"&gt;ies4linux&lt;/a&gt; . Should install some Photoshop as well, hope that there are no problems with it.&lt;br /&gt;&lt;br /&gt;More or less everything is working in order, and can use my existing data from ntfs partitions. &lt;br /&gt;&lt;br /&gt;Interested to see how we will get along :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-3623328326217120788?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/3623328326217120788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=3623328326217120788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/3623328326217120788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/3623328326217120788'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2008/09/move-made-ubuntu-hardy-heron-installed.html' title='Move made, Ubuntu hardy heron installed'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-4098035393815912283</id><published>2008-06-24T23:30:00.006-07:00</published><updated>2008-06-26T04:03:38.250-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery form ajax'/><title type='text'>jQuery form plugin data manipulation</title><content type='html'>&lt;a href="http://www.malsup.com/jquery/form/"&gt;jQuery form plugin&lt;/a&gt; is a great piece of code, and if you are working with ajax forms its your best friend. The basic usage of it is excellently explained of their site.&lt;br /&gt;&lt;br /&gt;It happens from time to time that you have to serialize/create some values into a hidden form field and extract the data on the server side. I came up with a solution to avoid this unnecessary serialization/deserialization.&lt;br /&gt;&lt;br /&gt;You can provide your custom code in beforeSubmit callback. It works like this:&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;beforeSubmit: function(formData, jqForm, options) {&lt;br /&gt;   jqForm.find('select[@name=listItems]')&lt;br /&gt;         .children()&lt;br /&gt;         .each(function(){&lt;br /&gt;             formData.push({&lt;br /&gt;                 name: 'aListItems['+$(this).attr('value')+']',&lt;br /&gt;                 value: $(this).text()&lt;br /&gt;             });&lt;br /&gt;         });&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This code snippet would find a select field named 'listItems' within the posted form and convert all of its options into an array that gets posted to server side (and there easily accessible trough $_POST from PHP).&lt;br /&gt;&lt;br /&gt;formData parameter of beforeSubmit callback is an JS array that contains all the fields of the form, and as it is passed by reference you can add your custom fields to it, and form plugin will see them as parts of the form. jqForm parameter is a reference to jQuery ajaxForm object, so you can use it to extract data.&lt;br /&gt;&lt;br /&gt;This solution should work for any type of data manipulation before the form submit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-4098035393815912283?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/4098035393815912283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=4098035393815912283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/4098035393815912283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/4098035393815912283'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2008/06/jquery-form-plugin-is-your-friend.html' title='jQuery form plugin data manipulation'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-7730475894289116558</id><published>2008-06-14T00:57:00.000-07:00</published><updated>2011-04-07T05:38:22.310-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><title type='text'>Moving select options with jQuery</title><content type='html'>I wanted to move select options up/down on a click of a button. The following jQuery snippet does exactly that, if you want to put in some moveby variable (delta) execute this stuff within a for loop&lt;br /&gt;&lt;br /&gt;#UPDATE My implementation was valid ages &amp;amp; jQueries ago, thanks to&lt;b&gt; imants.horsts&lt;/b&gt; for updated solution&lt;br /&gt;&lt;br /&gt;$.fn.moveSelectedUp = function() {&lt;br /&gt; var selectedOptions = $(this).selectedOptions();&lt;br /&gt; var prev = $(selectedOptions).first().prev();&lt;br /&gt; $(selectedOptions).insertBefore(prev);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$.fn.moveSelectedTop = function() {&lt;br /&gt; var selectedOptions = $(this).selectedOptions();&lt;br /&gt; var first = $(this).children("option").not(":selected").first();&lt;br /&gt; $(selectedOptions).insertBefore(first);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$.fn.moveSelectedBottom = function() {&lt;br /&gt; var selectedOptions = $(this).selectedOptions();&lt;br /&gt; var last = $(this).children("option").not(":selected").last();&lt;br /&gt; $(selectedOptions).insertAfter(last);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This solution is tested in FF3 &amp;amp; IE6/7, should work elsewhere as well&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-7730475894289116558?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/7730475894289116558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=7730475894289116558' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7730475894289116558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7730475894289116558'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2008/06/moving-select-options-with-jquery.html' title='Moving select options with jQuery'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-7536264125881923786</id><published>2008-06-12T13:46:00.000-07:00</published><updated>2008-06-12T14:00:17.320-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='private'/><title type='text'>My Grandmother</title><content type='html'>My Grandmother (aged 83) today gave me a call. Nothing special, from her mobile phone (she prefers large letters, and better display because she sends SMS`s daily). The interesting thing is the she saw the german army occupying Serbia from her workplace, the time when only few of them had radios and tv sets (with sometimes watchable single demo channel) were a rarity. She called to alert me on a new virus on the Internet?! I wonder about what is left for us to see&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-7536264125881923786?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/7536264125881923786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=7536264125881923786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7536264125881923786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7536264125881923786'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2008/06/my-grandmother.html' title='My Grandmother'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-7917169800015799245</id><published>2008-06-07T21:42:00.000-07:00</published><updated>2009-12-10T02:20:41.359-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>indexOf function JavaScript arrays &amp; IE6/7</title><content type='html'>Here is a hidden gem : Javascript in IE6 &amp;amp; IE7 DOESNT support Array.indexOf  function&lt;br /&gt;&lt;br /&gt;So if you are getting some "unknown property or method", open the script debugger (a joke for itself :)) and it hangs on a line with call to indexOf dont despare here is the fix (even better joke that is comes from Mozilla :)&lt;br /&gt;&lt;br /&gt;&lt;a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf#Compatibility"&gt;add Array.indexOf for IE6 &amp;amp; IE7&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-7917169800015799245?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/7917169800015799245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=7917169800015799245' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7917169800015799245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7917169800015799245'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2008/06/indexof-function-javascript-arrays.html' title='indexOf function JavaScript arrays &amp; IE6/7'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-5582275104295692436</id><published>2008-06-04T12:42:00.000-07:00</published><updated>2008-06-05T00:23:15.961-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery ajax'/><title type='text'>JSON embedded HTML in TBODY</title><content type='html'>This is a short one but really odd.&lt;br /&gt;&lt;br /&gt;Scenario:&lt;br /&gt;&lt;br /&gt;Have a table with tbody element, have an ajax provider that dynamically generates rows for this tbody, pretty simple.&lt;br /&gt;&lt;br /&gt;Ajax request (jquery), expecting JSON result with embedded HTML in an array. If there is &lt;span style="font-weight: bold;"&gt;comment&lt;/span&gt; in HTML, jQuery produces unexpected behaviour (strip some unnecessary tags like tr`s, td`s which is really really ugly). Solution is to remove comments from HTML that you plan to deliver this way.&lt;br /&gt;The optimistic programmer thinks the hidden traps are found, but IE6 produces 'unknown error on line 11' with code&lt;br /&gt;&lt;br /&gt;$('#id_of_tbody').html(ajax_response);&lt;br /&gt;&lt;br /&gt;After some desperation found out that according to msdn some elements are &lt;a href="http://ajaxian.com/archives/innerhtml-gotchas"&gt;read-only for IE&lt;/a&gt;, among them tbody (nice DYNAMIC Object Model), so .innerHTML is not usable, my guess is that jQuery`s .html() function uses it in background.&lt;br /&gt;&lt;br /&gt;The solution is&lt;br /&gt;&lt;br /&gt;$('#id_of_tbody').empty().append(ajax_response);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What a nice day to be a programmer :) My mother told me I should be a fisherman, but they have to wake up early (and protest  on the streets against high prices of fuel)...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-5582275104295692436?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/5582275104295692436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=5582275104295692436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/5582275104295692436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/5582275104295692436'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2008/06/json-embedded-html.html' title='JSON embedded HTML in TBODY'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-4346402815021421297</id><published>2008-05-26T02:37:00.000-07:00</published><updated>2008-05-26T03:01:11.712-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seagull vote'/><title type='text'>Seagull Vote module</title><content type='html'>Just a few toughts about coming Vote module for Seagull&lt;br /&gt;&lt;br /&gt;- handle various voting capabilityes of Seagull php framework.&lt;br /&gt;- support/accept votes from users || other modules&lt;br /&gt;- every voting can be executed within different context like grouping by module ('cms','publisher',... )&lt;br /&gt;- support for implentation of custom voting strategies&lt;br /&gt;- ip &amp;amp;&amp;amp; user based logging of votes&lt;br /&gt;- a basic voting algorithms (OptionSelect and Bayersian avarage ratings)&lt;br /&gt;- blocks for displaying voting results (support for jQuery)&lt;br /&gt;- voting results retrieval trough XMLHttpRequest calls (template based results)&lt;br /&gt;&lt;br /&gt;Currently I am almost finished with DAO part and Voting strategies, thinking about JSON like configuration parameters for voting strategies.  But back to work :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-4346402815021421297?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/4346402815021421297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=4346402815021421297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/4346402815021421297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/4346402815021421297'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2008/05/seagull-vote-module.html' title='Seagull Vote module'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-3331227300028995376</id><published>2008-04-29T02:48:00.000-07:00</published><updated>2008-04-30T00:58:05.103-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery tab jMap seagull'/><title type='text'>jQuery UI tabs and jMap with Seagull</title><content type='html'>&lt;span&gt;Today I came accross a weird problem while tried to put together a pimped-up profile page with jQuery tabs and a google map inside one of tabs.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jmaps.digitalspaghetti.me.uk/"&gt;jMap&lt;/a&gt; is a jQuery plugin for handling Google Maps.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ui.jquery.com/"&gt;UI&lt;/a&gt; is user interface plugin for jQuery which among others handles tabbed controlls.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Problem :&lt;/span&gt;&lt;br /&gt;If you embed a jMap map inside a UI tab the map wont be rendered correctly (it isnt centered correctly, some sections of map wont be loaded). When you place the div containing the map out of the tab it loads just fine. Obviously jQuery magic goes wrong somewhere, as the map is functioning correctly, you have controlls and if you move it around it loads some (not all visible) sections so it must be some width/height/padding/margin but I wasnt able to debug what is going on in the background, too much things happen at once.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution:&lt;/span&gt;&lt;br /&gt;It DOES matter in which order you set up jQuery objects. First you have to set up the map, then set up UI Tabs and it works like a charm.&lt;br /&gt;&lt;br /&gt;The code should be something like this (if you wander about {}  enclosed stuff which are not JSON notation, its how you can reference php variables in JS with Flexy in Seagull):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;{scriptOpen:h}&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;$('#map').jmap('init', {&lt;br /&gt;   mapCenter:[{aGeoCodes[longitude]},{aGeoCodes[latitude]}],&lt;br /&gt;   mapZoom: 15,&lt;br /&gt;   mapShowjMapIcon: false&lt;br /&gt;});&lt;br /&gt;$('#map').jmap("addMarker", {pointLatLng:[{aGeoCodes[longitude]},{aGeoCodes[latitude]}]});&lt;br /&gt;$("#tabbedProfile &gt; ul").tabs();&lt;br /&gt;});&lt;br /&gt;{scriptClose:h}&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Hope this helps to someone suffering from same (d)effect to save a bit of debugging.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-3331227300028995376?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/3331227300028995376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=3331227300028995376' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/3331227300028995376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/3331227300028995376'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2008/04/jquery-ui-tabs-with-jmap-with-seagull.html' title='jQuery UI tabs and jMap with Seagull'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-3100207028517989557</id><published>2008-04-17T02:52:00.000-07:00</published><updated>2008-04-17T03:36:18.058-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seagull php cms publisher'/><title type='text'>Seagull CMS first impression</title><content type='html'>Today I gave a &lt;a href="http://trac.seagullproject.org/wiki/Modules/Cms"&gt;Segaull CMS module&lt;/a&gt; (1.3) a try. Was interested about its features, and what benefit it has over &lt;a href="http://trac.seagullproject.org/wiki/Modules/Publisher"&gt;Publisher module&lt;/a&gt;, which is a bit aged cms solution for SGL, and is it ready for production use without any tweaking.&lt;br /&gt;&lt;br /&gt;CMS beats Publisher in almost every aspect (faster, smarter,more configurable), so it could be a solid solution if you dont need multilingual support (although it could be around the corner, but I dont know how far the corner is :). Publisher has multilingual support on the other hand.&lt;br /&gt;&lt;br /&gt;CMS supports: types &amp;amp; attributes of content (nice feature), versioning (although I couldnt figure out how can I select the version of the published content, but maybe that is my bad). Give the wiki a try for more details.&lt;br /&gt;&lt;br /&gt;Found a small bug in category management (images for TreeView are not referenced correctly) nothing serious, another one in navigation (add a page that is link to content, save and try to edit it, it doesnt fill the edit form correctly) more serious a bit, but there is workaround, fill everything again on edit :).&lt;br /&gt;&lt;br /&gt;It has some really nice AJAX interface, so things are kept simple yet usable.&lt;br /&gt;&lt;br /&gt;The next step will be to use CMS functionality to store user generated content like CV-s etc, interested in how it could be used along with other modules, but I am sure that it will perform well.&lt;br /&gt;&lt;br /&gt;Only few things are there that are making me to stick with Publisher:&lt;br /&gt;- the code comes obfuscated with community version, and sooner or later I will need some customization (though that can be done by extending cms classes),&lt;br /&gt;- multilingual support (most of sites done are not english on my side), lack of it is showstopper atm&lt;br /&gt;- still have some environments with php4 installed, and CMS requires 5.2, but if I make serious threats to root on host he will  upgrade for sure, as all such upgrades have to be done sooner or later as php4 is not supported any more, and I am the root...&lt;br /&gt;&lt;br /&gt;So Demian and Julien did a great job as CMS module is getting mature CMS solution. Cant wait to see how it develops further.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-3100207028517989557?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/3100207028517989557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=3100207028517989557' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/3100207028517989557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/3100207028517989557'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2008/04/seagull-cms-first-impression.html' title='Seagull CMS first impression'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-7684937270662412114</id><published>2008-03-28T04:07:00.000-07:00</published><updated>2008-03-28T04:18:30.640-07:00</updated><title type='text'>Milestone achieved finally...</title><content type='html'>After some heavy coding finally put together a Seagull based Feeder module`s first milestone (will publish it soon somewhere), it is working on RSS atm, but soon it will evolve to other feeds as well. It has autoUpdate where updateable feeds are ordered by bayesian rating, with limits etc. It maps discovered Items to a generic Content class, so it will be a great content provider. I am really excited about it, and cant wait to see it in production which is yet to come. Next steps include caching, and a bit refactoring, as the project evolves. It should be a news aggregator service, with some fresh ideas, but basics should be done first :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-7684937270662412114?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/7684937270662412114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=7684937270662412114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7684937270662412114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7684937270662412114'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2008/03/milestone-achieved-finally.html' title='Milestone achieved finally...'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-3198473015116173720</id><published>2008-03-28T03:34:00.000-07:00</published><updated>2008-03-28T04:04:34.168-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zend neon eclipse'/><title type='text'>Zend Neon Impressions</title><content type='html'>Hopefully found my next php IDE. I have just installed &lt;a href="http://www.zend.com/en/store/software/studio/"&gt;Zend Studio For Eclipse&lt;/a&gt;. So here are the first impressions. I wanted to move over to Eclipse for a while now, but got used to ZDE which is decent IDE, but its HTML/CSS support is bellow poor. First impressions are great, easy install, a little headache (&lt;a href="http://blog.tigeryao.com/2008/how-to-allow-zend-optimizer-and-zend-debugger-coexist.html"&gt;more about reasons&lt;/a&gt;, and thanks for help), but finally I can debug my Seagull installs from IDE directly (a bit slowly though). Now I have to get used to new keyboard shortcuts but nevermind (I delete all the time instead of duplicate, what is rather annoying :). Eclipse has rather large coding language base, and well supported plugins and together with Zend Eclipse is a great thing to have.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-3198473015116173720?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/3198473015116173720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=3198473015116173720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/3198473015116173720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/3198473015116173720'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2008/03/zend-neon-impressions.html' title='Zend Neon Impressions'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-1990016697646558202</id><published>2007-06-05T12:37:00.000-07:00</published><updated>2007-06-05T12:43:25.616-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Seagull sugarcrm integration'/><title type='text'>SugarCRM with Seagull, Chapter 3 (final)</title><content type='html'>The thing finally works &amp; is simply great. It took a little time but it is really good tradeoff because you gain all of SugarCRM functionality and development of such would take way more time.&lt;br /&gt;Experience with provided API is that it is really easy to communicate with. A little bit frustrating was the fail to use  PEAR`s SOAP_Client, but nusoap does the job just fine (if anybody have done it with mentioned package, please place a comment with a guide for providing complex datatypes).&lt;br /&gt;&lt;br /&gt;So to summarize: Christians - Lions 1:0 :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-1990016697646558202?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/1990016697646558202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=1990016697646558202' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/1990016697646558202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/1990016697646558202'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2007/06/sugarcrm-with-seagull-chapter-3-final.html' title='SugarCRM with Seagull, Chapter 3 (final)'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-8976497298397108227</id><published>2007-06-04T15:53:00.000-07:00</published><updated>2007-06-05T12:47:32.097-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technocrati'/><title type='text'>Technocrati submission</title><content type='html'>Have submitted this blog to Technocrati, will see if it drives attention, I am interested in feedback&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-8976497298397108227?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/8976497298397108227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=8976497298397108227' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/8976497298397108227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/8976497298397108227'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2007/06/technocrati.html' title='Technocrati submission'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-6017859800520911599</id><published>2007-06-04T15:05:00.000-07:00</published><updated>2007-06-04T15:18:43.190-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adwords'/><title type='text'>Adwords experiment</title><content type='html'>I have started an interesting experiment with AdWords service of Google. I have chosen a high quality  software product. Selected the right keywords, made geotargeting &amp; started advertising. Have made a campaign with 2 adgroups (one for broader keywords, another for the best matching keywords). These groups compete against each other. Its really interesting that broad keywords, with terrible CTR`s &amp;amp; with tons of impressions are performing better. The CPC is better, so the price of clicks is for astonishing 30%. lower. The purchase-quality of clicking users could be worse of course, but will continue the experiment &amp;amp; report the results.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-6017859800520911599?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/6017859800520911599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=6017859800520911599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/6017859800520911599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/6017859800520911599'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2007/06/adwords-experiment.html' title='Adwords experiment'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-7143419761248487431</id><published>2007-05-30T23:59:00.000-07:00</published><updated>2007-05-31T00:37:05.363-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Seagull sugarcrm integration'/><title type='text'>SugarCRM with Seagull, Chapter 2</title><content type='html'>Made local installation of SugarCRM, went almost smoothly (got some minor unimportant errors). Tried to connect to its API with PEAR`s SOAP_Client. The test call was made correctly but when I passed it multidimensional arrays as parameter (for login call) something odd happens. It always returns error. Tried with nusoap, everything went almost smoothly (the problem with it is using same name for a class as PHP 5`s SOAP extension, solution is disable extension or make renames in nusoap classes, I made the second option, as I dont know whether I will use PHP`s SOAP in future). Now I am able to communicate with SugarCRM, working on classes that will talk with it atm, more will come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-7143419761248487431?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/7143419761248487431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=7143419761248487431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7143419761248487431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7143419761248487431'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2007/05/sugarcrm-with-seagull-chapter-2.html' title='SugarCRM with Seagull, Chapter 2'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-2108629377953133425</id><published>2007-05-29T22:07:00.000-07:00</published><updated>2007-05-31T00:33:39.389-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Seagull sugarcrm integration'/><title type='text'>SugarCRM with Seagull, Chapter 1</title><content type='html'>Started today an interesting project, namely integration of &lt;a href="http://www.sugarcrm.com/crm/"&gt;SugarCRM&lt;/a&gt; (customer relationship management) solution with seagull. Plan to do it trough provided soap API interface, looking forward to challenges, which will surely come. Plan to make it as part of export module (maybe later a separate one), as I need only one way (SGL-&gt;Sugar) communication. If anybody has idea/proposal don`t hesitate, now is the time :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-2108629377953133425?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/2108629377953133425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=2108629377953133425' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/2108629377953133425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/2108629377953133425'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2007/05/sugarcrm-with-seagull.html' title='SugarCRM with Seagull, Chapter 1'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-8550153760860911820</id><published>2007-05-29T21:53:00.000-07:00</published><updated>2007-05-29T22:07:01.265-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Seagull Zend_Search_Lucene Zend Framework php'/><title type='text'>Play nice with Zend Framework</title><content type='html'>Glad to announce that I managed to integrate Zend_Search_Lucene with Seagull framework. I used bridge pattern to close the gap to it, and have written a little IndexBuilder class that makes use of strategies to harvest search targets. Made a strategy for articles in database so they are searchable.&lt;br /&gt;&lt;br /&gt;Was a bit concerned about performance side of the thing, just imagine that ZF uses Apache Lucene`s java based search engine &amp; I made a wrapper around a wrapper, sound pretty silly btw :) On win box I needed quite a few seconds do generate/search even small indices.  The biggest surprise came when I made it in work on linux (debian/vserver) server, its lightning fast, so slowness on win is probably a local environmental issue. The index size is really acceptable (if you design fields of documents correctly), so it scales well.&lt;br /&gt;&lt;br /&gt;Most people use LIKE SQL queries for searches, it has serious limitations (it is enough for simple cases), example: search in multiple fields, various boost factors.&lt;br /&gt;&lt;br /&gt;More still to come (release/wiki), if somebody needs it badly leave a message here&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-8550153760860911820?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/8550153760860911820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=8550153760860911820' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/8550153760860911820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/8550153760860911820'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2007/05/play-nice-with-zend-framework.html' title='Play nice with Zend Framework'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-1696692141178052342</id><published>2007-05-22T04:09:00.000-07:00</published><updated>2007-05-30T04:02:47.531-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php ide database framework'/><title type='text'>My set of development tools</title><content type='html'>I have put together this post to help readers who are thinking of what tools should they use for php/webdeveloment. I have started with notepad, continued with Macromedias Dreamweaver. So had my learning curve &amp; would like to help you make yours steeper.&lt;br /&gt;After 5 years of php/web development I am using the following tools, found them extremely useful. It is good to choose the right tool for the right job, will save you time and money. Of course everything can be done with notepad/vi but these are my favorites.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;PHP IDE`s&lt;/span&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a style="font-weight: bold;" href="http://send.onenetworkdirect.net/z/8592/CD92707/"&gt;Zend Development Environment&lt;/a&gt;: real productivity booster. Developed by a company that stands behind php language it has almost everything you can need for php development. Their code completition is rather good. What I miss here is better support for css, for html they have support, but for merely php programming it is great.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;&lt;/span&gt;: Open source IDE, the biggest +. Interesting one for those who are working with more languages &amp; want to put together their own flavour IDE (put in java,c++,php,uml support). It is great tool because you only need to know one IDE for all your languages. There are lot of high quality free plugins for it. Just to mention that Flex2 IDE also comes as eclipse plugin. So you wont regret using it. There is also &lt;a style="font-weight: bold;" href="http://www.phpeclipse.de/tiki-view_articles.php"&gt;phpeclipse&lt;/a&gt; plugin for you.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;PHP libraries&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://pear.php.net/"&gt;&lt;span style="font-weight: bold;"&gt;PEAR&lt;/span&gt;&lt;/a&gt; : the ONE but not the only. It is the real php power unleashed. You get access to quality code written by few of the best php programmers out there. It can help you with almost every issue you can face in development (templating, sessions, auth backends). Just put together your favorite selection of packages and you are almost done with project. It is well supported and documented. It helps you avoid low level php programming. There are multiple sites out there that offer php classes, but most of them arent well supported/maintained/documented. Avoid usage without deeper code inspection. After a while you will be able to differentiate between good and bad coding style.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;PHP Frameworks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are quite a few out there. They help you build reusable code. Also it makes a difference that after 6 month when you completely forgot your own code, how fast will you find your way around. Have tried a few of them like Zend Framework, CakePhp, Geeklog. My framework of choose is definitely &lt;a href="http://trac.seagullproject.org/wiki"&gt;Seagull&lt;/a&gt;. The community is great, its a light framework where you will easily find your way after 1 month. That sacrifice is worth believe me.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Database IDE`s&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fabforce.net/dbdesigner4/"&gt;&lt;span style="font-weight: bold;"&gt;DBDesigner&lt;/span&gt;&lt;/a&gt; : great tool for planing Mysql databases, you can visualize your ideas, no more papers &amp; it can synchronize the db layout with database engine&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.navicat.com/"&gt;&lt;span style="font-weight: bold;"&gt;Navicat&lt;/span&gt;&lt;/a&gt;: extremely useful for writing more complex queries, mysql5 ready, sql code completition is comming with next release, has advanced backup features, supports triggers &amp; stored procedures, I use it for remote/local access for my databases. Its not free but worth every cent of the price.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Versioning software&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;TortoiseSVN&lt;/span&gt; : I am using it all the time, even in projects when I work alone, no more lost files, untracked modifications. It has updatehooks, so the live deployment of the code could be done with a bit more advanced setup as well. If you need to choose between SVN and CVS , always go with first..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hope that somebody will find this recommendations useful, and I am interested in your used environments as well!&lt;br /&gt;&lt;br /&gt;cheers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-1696692141178052342?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/1696692141178052342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=1696692141178052342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/1696692141178052342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/1696692141178052342'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2007/05/toolsideslibraries-i-use-most-with-web.html' title='My set of development tools'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-6677702728125210025</id><published>2007-05-21T13:23:00.000-07:00</published><updated>2007-05-24T08:28:13.326-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php seagull kml google maps'/><title type='text'>KML export for Google Maps with Seagull</title><content type='html'>I have spent a little time with &lt;a href="http://pentarim.blogspot.com/2007/05/sitemap-with-seagull.html"&gt;sitemap export for Seagull&lt;/a&gt;, and this is just a variation on same theme.&lt;br /&gt;Have made a manager &amp; few library extensions for Seagull, that makes an export to KML xml format defined by google. Find out more about it &lt;a href="http://en.wikipedia.org/wiki/Keyhole_Markup_Language"&gt;here.&lt;/a&gt;&lt;br /&gt;In few words it defines a layer in xml format that can be displayed on Google Maps, you can display it on your own site.&lt;br /&gt;Advantages of using it are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;it can drive you traffic from Google Maps searches, &lt;/li&gt;&lt;li&gt;geotargets your content as well because it supports html (you can make geotargeted news engine from it). The library supports deploying your own strategies so customization/extendibility wont be a problem.&lt;/li&gt;&lt;li&gt;it is discovered/indexed/searched by Google, imagine it another type of sitemap.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;it is better solution for filtering geotargeted content than implemented in &lt;a href="http://trac.seagullproject.org/wiki/Modules/GoogleMaps"&gt;googlemaps module of seagull&lt;/a&gt;&lt;/li&gt;&lt;li&gt;provided access to &lt;a href="http://www.google.com/apis/maps/documentation/#Geocoding_Etc"&gt;Google`s geocoder service&lt;/a&gt; (the current implementation in googlemaps  module supports Yahoo`s geocoding service), but decided to write one for Google because of following reasons: did some testing for canada &amp;amp; had some problems with Yahoo (for US only they are pretty much the same),   SPOF (Single Point of Failure) because smaller number of services you depend on is better. This part of code is not clean yet, thats holding back the release, but it should support geocoding subject harvesting strategies (did I mentioned that I like &lt;a href="http://en.wikipedia.org/wiki/Strategy_pattern"&gt;strategy pattern&lt;/a&gt;? :), then it would be suitable for production use.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The database structure remained pretty much the same as in current implementation, except that I added a text field for storing KML response from Google for future use (for this reason I needed XML_Serializer package from PEAR, to be able to interpret mentioned response).&lt;br /&gt;&lt;br /&gt;Estimated Release date: I plan to make it soon, lets say 2 weeks, I am involved in other places at the moment, but will make a push.&lt;br /&gt;&lt;br /&gt;I am interested about your ideas for extending it. Also would like to mention name of Steven Stremciuc who did the original googlemaps module, who has done great job.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-6677702728125210025?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/6677702728125210025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=6677702728125210025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/6677702728125210025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/6677702728125210025'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2007/05/kml-export-for-google-maps-with-seagull.html' title='KML export for Google Maps with Seagull'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-7607987708694394466</id><published>2007-05-11T13:15:00.000-07:00</published><updated>2007-05-17T00:28:46.446-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php framework sitemap xml'/><title type='text'>Sitemaps with Seagull</title><content type='html'>Yesterday I had made a contribution to Segaull php framework project.  Check out more about it at &lt;a href="http://trac.seagullproject.org/wiki/SiteMap"&gt;seagull wiki&lt;/a&gt;. Hope it will be accepted in base framework. It generates sitemaps for Seagull, its multilingual &amp; easily extendible &amp;amp; uses caching. What is more important its working :) I am really interested in feedbacks about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-7607987708694394466?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pentarim.blogspot.com/feeds/7607987708694394466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1219721993721227016&amp;postID=7607987708694394466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7607987708694394466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/7607987708694394466'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2007/05/sitemap-with-seagull.html' title='Sitemaps with Seagull'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1219721993721227016.post-320218008367705196</id><published>2007-05-11T13:07:00.000-07:00</published><updated>2007-05-11T13:10:20.804-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='intro'/><title type='text'>First Post</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;My name is Laszlo Horvath, welcome to my unofficial blog. In few words, i am php programmer, living in serbia, studied in hungary.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1219721993721227016-320218008367705196?l=pentarim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/320218008367705196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1219721993721227016/posts/default/320218008367705196'/><link rel='alternate' type='text/html' href='http://pentarim.blogspot.com/2007/05/first-post.html' title='First Post'/><author><name>pentarim</name><uri>http://www.blogger.com/profile/06299180944270134100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_sayWkr5gsIo/SyDNUUYu9pI/AAAAAAAABxI/3GAaUThfokA/S220/19b7549.jpg'/></author></entry></feed>
