<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>elance.at</title>
<link>http://blog.elance.at/</link>
<description>Top Notch web development stream from Vienna, Austria</description>
<ttl>60</ttl>
<lastBuildDate>Tue, 05 Jan 2010 16:56:39 +0100</lastBuildDate>
<generator>InTerra Blog Machine</generator>
<item><title>Using «PHP Quick Profiler» with Ajax Backends</title>
<link>http://blog.elance.at/2010/01/04/using_vphp_quick_profilerv_with_ajax_backends.html</link>
<description>&lt;a name=&quot;p25214-1&quot;&gt;&lt;/a&gt;&lt;p class=&quot;auto&quot; id=&quot;p25214-1&quot;&gt;&lt;a href=&quot;http://particletree.com/features/php-quick-profiler/&quot; class=&quot;myLink&quot; target=&quot;_blank&quot;&gt;PHP&amp;nbsp;Quick Profiler&lt;/a&gt; (PQP) is&amp;nbsp;a small and&amp;nbsp;handy script that makes code reviews easy and&amp;nbsp;painless. The&amp;nbsp;creators describe it&amp;nbsp;as&lt;/p&gt;

&lt;div class=&quot;indent&quot;&gt;Given that all&amp;nbsp;reviews check against the&amp;nbsp;same list of&amp;nbsp;requirements, we've found ourselves repeating the&amp;nbsp;same tasks over and&amp;nbsp;over again. We&amp;nbsp;spend a&amp;nbsp;lot of&amp;nbsp;time echoing queries, memory stats and&amp;nbsp;objects to&amp;nbsp;the browser just to&amp;nbsp;see how&amp;nbsp;they are&amp;nbsp;being used in&amp;nbsp;the code. To&amp;nbsp;reduce this repetition, we&amp;nbsp;invested some time creating something we've called the&amp;nbsp;PHP Quick Profiler &amp;mdash; we&amp;nbsp;call it&amp;nbsp;PQP for&amp;nbsp;short. It's a&amp;nbsp;small tool (think Firebug for&amp;nbsp;PHP) to&amp;nbsp;provide profiling and&amp;nbsp;debugging related information to&amp;nbsp;developers without needing them to&amp;nbsp;add a&amp;nbsp;lot of&amp;nbsp;programmatic overhead to&amp;nbsp;their code.&lt;/div&gt;

&lt;a name=&quot;p25214-2&quot;&gt;&lt;/a&gt;&lt;p class=&quot;auto&quot; id=&quot;p25214-2&quot;&gt;
One&amp;nbsp;thing it&amp;nbsp;fails to&amp;nbsp;do, however, is&amp;nbsp;to profile ajax-backed requests, which eat&amp;nbsp;up&amp;nbsp;more and&amp;nbsp;more system actions on&amp;nbsp;modern websites these days. A&amp;nbsp;&lt;em&gt;de facto&lt;/em&gt; standard in&amp;nbsp;debugging ajax-based applications has&amp;nbsp;always been &lt;a href=&quot;http://getfirebug.com/&quot; class=&quot;myLink&quot; target=&quot;_blank&quot;&gt;FireBug&lt;/a&gt; &amp;mdash; a&amp;nbsp;state of&amp;nbsp;the art&amp;nbsp;extension for&amp;nbsp;FireFox. Thus my&amp;nbsp;attempt to&amp;nbsp;marry the&amp;nbsp;two in&amp;nbsp;order to&amp;nbsp;produce a&amp;nbsp;perfect debugging/profiling couple.&lt;/p&gt;

&lt;span class=&quot;inTerraCut&quot;&gt;[ &lt;a href=&quot;http://blog.elance.at/2010/01/04/using_vphp_quick_profilerv_with_ajax_backends.html#cut1&quot;&gt;Read On...&lt;/a&gt; ]&lt;/span&gt;</description>
<pubDate>Mon, 04 Jan 2010 11:46:00 +0100</pubDate>
</item>
<item><title>Implementing tree-like comment structures in relational databases</title>
<link>http://blog.elance.at/2009/10/27/implementing_tree-like_comment_structures_in_relational_databases.html</link>
<description>&lt;a name=&quot;p25786-1&quot;&gt;&lt;/a&gt;&lt;p class=&quot;auto&quot; id=&quot;p25786-1&quot;&gt;Letting site visitors leave comments on&amp;nbsp;whatever content you&amp;nbsp;present on&amp;nbsp;your site seems like a&amp;nbsp;commonplace feature these days. Not&amp;nbsp;so&amp;nbsp;often, but&amp;nbsp;yet still mainstream, are&amp;nbsp;tree-based comment structures, where users can&amp;nbsp;start an&amp;nbsp;easy-to-follow online discussion. &lt;/p&gt;
&lt;a name=&quot;p25786-2&quot;&gt;&lt;/a&gt;&lt;p class=&quot;auto&quot; id=&quot;p25786-2&quot;&gt;
Over the&amp;nbsp;past 10 years I&amp;nbsp;have seen about a&amp;nbsp;dozen different implementations of&amp;nbsp;variuos comment thread engines in&amp;nbsp;relational databases, the&amp;nbsp;most popular being the&amp;nbsp;Adjacency List Model (recursive) with quite a&amp;nbsp;few mutations implementing various cache techniques. I&amp;nbsp;have also witnessed several smarter approaches, such as&amp;nbsp;the use&amp;nbsp;of&amp;nbsp;the Nested Sets model, some insane implementations of&amp;nbsp;stacks or&amp;nbsp;combinations of&amp;nbsp;the above.&lt;/p&gt;
&lt;a name=&quot;p25786-3&quot;&gt;&lt;/a&gt;&lt;p class=&quot;auto&quot; id=&quot;p25786-3&quot;&gt;
Joe&amp;nbsp;Celko, &lt;em&gt;the&lt;/em&gt; mastermind behind much of&amp;nbsp;today's SQL, prefers to&amp;nbsp;use a&amp;nbsp;model known as&amp;nbsp;the &amp;#147;Frequent Insertion Tree&amp;#148; for&amp;nbsp;forum-like structures in&amp;nbsp;his well known book &quot;&lt;a href=&quot;http://www.amazon.co.uk/gp/product/0123693799?ie=UTF8&amp;tag=elance0a-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=0123693799&quot; class=&quot;myLink&quot; target=&quot;_blank&quot;&gt;SQL&amp;nbsp;for Smarties: Advanced SQL&amp;nbsp;Programming&lt;/a&gt;&quot;, however I&amp;nbsp;do not&amp;nbsp;agree that it&amp;nbsp;is a&amp;nbsp;viable solution to&amp;nbsp;this common programming brainteaser. Joe&amp;nbsp;Celko is&amp;nbsp;suggesting a&amp;nbsp;non-trivial approach to&amp;nbsp;a rather simple problem, moreover it&amp;nbsp;is not&amp;nbsp;the most efficient way&amp;nbsp;to&amp;nbsp;solve it.&lt;/p&gt;

&lt;span class=&quot;inTerraCut&quot;&gt;[ &lt;a href=&quot;http://blog.elance.at/2009/10/27/implementing_tree-like_comment_structures_in_relational_databases.html#cut1&quot;&gt;Here is my approach...&lt;/a&gt; ]&lt;/span&gt;</description>
<pubDate>Tue, 27 Oct 2009 14:51:00 +0100</pubDate>
</item>
<item><title>Hacking the iPhone / End of Confidentiality</title>
<link>http://blog.elance.at/2009/09/15/hacking_the_iphone__end_of_confidentiality.html</link>
<description>&lt;a name=&quot;p20327-1&quot;&gt;&lt;/a&gt;&lt;p class=&quot;auto&quot; id=&quot;p20327-1&quot;&gt;Savvy iPhone users should think twice before jailbreaking their pretty iPhones. What seems like a&amp;nbsp;painless procedure is&amp;nbsp;in fact the&amp;nbsp;end of&amp;nbsp;your confidentiality, as&amp;nbsp;from that point onward &lt;strong&gt;anyone&lt;/strong&gt; sharing the&amp;nbsp;same wi-fi hot&amp;nbsp;spot as&amp;nbsp;you are&amp;nbsp;&lt;strong&gt;can read your sms&lt;/strong&gt; (email, contact data, notes et&amp;nbsp;cetera). Here is&amp;nbsp;how:&lt;/p&gt;

&lt;ol type=&quot;1&quot;&gt;&lt;li&gt; Figure out&amp;nbsp;what the&amp;nbsp;IP&amp;nbsp;Address of&amp;nbsp;the target's iPhone is&amp;nbsp;(either use&amp;nbsp;a&amp;nbsp;network scanner, or&amp;nbsp;simply look it&amp;nbsp;up in&amp;nbsp;your router)
&lt;/li&gt;&lt;li&gt; Login into the&amp;nbsp;target's iPhone via&amp;nbsp;ssh, this is&amp;nbsp;done by&amp;nbsp;issuing the&amp;nbsp;following command from the&amp;nbsp;terminal &lt;tt&gt;ssh root@ip-address&lt;/tt&gt;, when prompted for&amp;nbsp;the password type in&amp;nbsp;&lt;tt&gt;alpine&lt;/tt&gt;. Voila, you&amp;nbsp;have root (aka the&amp;nbsp;user who&amp;nbsp;can do&amp;nbsp;anything) privileges on&amp;nbsp;the target's iPhone.
&lt;/li&gt;&lt;li&gt; The&amp;nbsp;SMS Database can&amp;nbsp;be&amp;nbsp;found in&amp;nbsp;&lt;tt&gt;/private/var/mobile/Library/SMS/sms.db&lt;/tt&gt;, copy this file to&amp;nbsp;your computer.
&lt;/li&gt;&lt;li&gt; The&amp;nbsp;file is&amp;nbsp;an SQLLite Database which can&amp;nbsp;be&amp;nbsp;easily navigated with one&amp;nbsp;of&amp;nbsp;the third party tools such as&amp;nbsp;&lt;a href=&quot;http://sqlitebrowser.sourceforge.net/&quot; class=&quot;myLink&quot; target=&quot;_blank&quot;&gt;SQLLite Database Browser&lt;/a&gt;.
&lt;/li&gt;&lt;li&gt; Enjoy.&lt;/li&gt;&lt;/ol&gt; </description>
<pubDate>Tue, 15 Sep 2009 23:25:00 +0200</pubDate>
</item>
<item><title>Adding PHP Extensions under Mac OS X 10.6</title>
<link>http://blog.elance.at/2009/09/15/adding_php_extensions_under_mac_os_x_10_6.html</link>
<description>&lt;a name=&quot;p40828-1&quot;&gt;&lt;/a&gt;&lt;p class=&quot;auto&quot; id=&quot;p40828-1&quot;&gt;I&amp;nbsp;guess every mac&amp;nbsp;user was&amp;nbsp;waiting for&amp;nbsp;the release of&amp;nbsp;Mac OS&amp;nbsp;X 10.6 Leopard Snow (also known as&amp;nbsp;&amp;#147;Barsik&amp;#148; in&amp;nbsp;cold Russia), and&amp;nbsp;most of&amp;nbsp;us have upgraded the&amp;nbsp;day it&amp;nbsp;hit the&amp;nbsp;shop shelves. &lt;/p&gt;
&lt;a name=&quot;p40828-2&quot;&gt;&lt;/a&gt;&lt;p class=&quot;auto&quot; id=&quot;p40828-2&quot;&gt;
Unfortunately, for&amp;nbsp;the few&amp;nbsp;web developers using this beautiful platform for&amp;nbsp;their work the&amp;nbsp;upgrade was&amp;nbsp;not as&amp;nbsp;clean as&amp;nbsp;promised by&amp;nbsp;apple. After rebooting I've found an&amp;nbsp;unwanted upgrade to&amp;nbsp;PHP, which, I&amp;nbsp;must admit, now&amp;nbsp;has more extensions than the&amp;nbsp;one shipped with OS&amp;nbsp;X before, but&amp;nbsp;is&amp;nbsp;still lacking support for&amp;nbsp;PostgreSQL and&amp;nbsp;WDDX. &lt;/p&gt;
&lt;a name=&quot;p40828-3&quot;&gt;&lt;/a&gt;&lt;p class=&quot;auto&quot; id=&quot;p40828-3&quot;&gt;
It&amp;nbsp;was natural to&amp;nbsp;turn my&amp;nbsp;head towards &lt;a href=&quot;http://www.entropy.ch/software/macosx/php/&quot; class=&quot;myLink&quot; target=&quot;_blank&quot;&gt;entropy.ch&lt;/a&gt; which has&amp;nbsp;been a&amp;nbsp;safe harbor for&amp;nbsp;anyone working with php&amp;nbsp;on&amp;nbsp;a mac, yet&amp;nbsp;Marc has&amp;nbsp;not yet&amp;nbsp;ported any&amp;nbsp;of&amp;nbsp;his packages to&amp;nbsp;work on&amp;nbsp;10.6. Not&amp;nbsp;willing to&amp;nbsp;downgrade, I&amp;nbsp;decided to&amp;nbsp;gain control over my&amp;nbsp;system again and&amp;nbsp;walk the&amp;nbsp;path of&amp;nbsp;a real unix Jedi &amp;mdash; compile all&amp;nbsp;the necessary extensions myself.&lt;/p&gt;

&lt;span class=&quot;inTerraCut&quot;&gt;[ &lt;a href=&quot;http://blog.elance.at/2009/09/15/adding_php_extensions_under_mac_os_x_10_6.html#cut1&quot;&gt;Continue Reading...&lt;/a&gt; ]&lt;/span&gt;</description>
<pubDate>Tue, 15 Sep 2009 14:32:00 +0200</pubDate>
</item>
<item><title>InTerra Deluxe Announcement</title>
<link>http://blog.elance.at/2009/09/06/interra_deluxe_announcement.html</link>
<description>&lt;a name=&quot;p37654-1&quot;&gt;&lt;/a&gt;&lt;p class=&quot;auto&quot; id=&quot;p37654-1&quot;&gt;Every software project goes through a&amp;nbsp;certain life cycle (whatever model you&amp;nbsp;use) which consists of: planning, design, implementation, verification and&amp;nbsp;maintenance. Effective completion of&amp;nbsp;one stage ensures the&amp;nbsp;ease of&amp;nbsp;completion of&amp;nbsp;the stage to&amp;nbsp;follow. Should one&amp;nbsp;make a&amp;nbsp;small mistake somewhere early during planning or&amp;nbsp;design, its&amp;nbsp;consequences could be&amp;nbsp;catastrophic later on&amp;nbsp;during system maintenance, halting the&amp;nbsp;project's evolution and&amp;nbsp;growth.&lt;/p&gt;
&lt;a name=&quot;p37654-2&quot;&gt;&lt;/a&gt;&lt;p class=&quot;auto&quot; id=&quot;p37654-2&quot;&gt;
The&amp;nbsp;original InTerra blog engine has&amp;nbsp;some unpleasant characteristics that make its&amp;nbsp;evolution for&amp;nbsp;the public rather problematic. Unfortunately, back in&amp;nbsp;2004 I&amp;nbsp;did not&amp;nbsp;have a&amp;nbsp;vision to&amp;nbsp;create a&amp;nbsp;blog engine to&amp;nbsp;be used by&amp;nbsp;anyone but&amp;nbsp;me, thus little thought was&amp;nbsp;invested in&amp;nbsp;the design of&amp;nbsp;the engine's core. Since then, a&amp;nbsp;small weekend project has&amp;nbsp;grown, becoming one&amp;nbsp;of&amp;nbsp;the top-performing blog engines in&amp;nbsp;the world easily holding 50000+ page views on&amp;nbsp;a mediocre shared web-hosting plan. The&amp;nbsp;fan base helped create dozens of&amp;nbsp;skins and&amp;nbsp;a&amp;nbsp;set of&amp;nbsp;useful extensions, yet&amp;nbsp;plug-in developers have always fallen victim from absence of&amp;nbsp;sensible documentation and&amp;nbsp;lack of&amp;nbsp;standardised API. Today, the&amp;nbsp;development of&amp;nbsp;a sensible extension interface and&amp;nbsp;proper documentation are&amp;nbsp;tasks that make little sense, as&amp;nbsp;this would mean rewriting almost the&amp;nbsp;whole engine core, here is&amp;nbsp;why:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt; Although the&amp;nbsp;current engine core uses (to some extent) an&amp;nbsp;object oriented paradigm, one&amp;nbsp;must keep in&amp;nbsp;mind, that in&amp;nbsp;the times of&amp;nbsp;PHP 4 proper OOP&amp;nbsp;was not&amp;nbsp;around. What one&amp;nbsp;can easily achieve today, was&amp;nbsp;simply not&amp;nbsp;possible some five years ago. Thus, most of&amp;nbsp;the main components have to&amp;nbsp;be rewritten to&amp;nbsp;allow easier extension management.
&lt;/li&gt;&lt;li&gt; As&amp;nbsp;the initial blog machine was&amp;nbsp;developed for&amp;nbsp;personal use&amp;nbsp;only, I&amp;nbsp;decided to&amp;nbsp;go with Pareto's rule and&amp;nbsp;not make an&amp;nbsp;administration interfaces &amp;mdash; implementing all&amp;nbsp;admin functions inside the&amp;nbsp;client side templates. Moreover, many of&amp;nbsp;InTerras auto-processed functions have no&amp;nbsp;management interface at&amp;nbsp;all, as&amp;nbsp;there was&amp;nbsp;no&amp;nbsp;space for&amp;nbsp;them on&amp;nbsp;the client side. This has&amp;nbsp;to&amp;nbsp;be changed.
&lt;/li&gt;&lt;li&gt; The&amp;nbsp;classic engine works in&amp;nbsp;Single Author Mode only, an&amp;nbsp;admin interface shall also allow for&amp;nbsp;user/author management.
&lt;/li&gt;&lt;li&gt; My&amp;nbsp;initial attempt at&amp;nbsp;categorising content via&amp;nbsp;a&amp;nbsp;set of&amp;nbsp;categories AND&amp;nbsp;tags, made a&amp;nbsp;spaghetti-like structure difficult to&amp;nbsp;understand for&amp;nbsp;the casual user. Categories have to&amp;nbsp;be abandoned as&amp;nbsp;a whole.
&lt;/li&gt;&lt;li&gt; Lack of&amp;nbsp;centralised file management. The&amp;nbsp;current implementation of&amp;nbsp;file management is, generally, rather weak, allowing for&amp;nbsp;simple file uploads per&amp;nbsp;blog entry only. Files and&amp;nbsp;images are&amp;nbsp;a&amp;nbsp;very important part of&amp;nbsp;any web&amp;nbsp;project and&amp;nbsp;one has&amp;nbsp;to&amp;nbsp;have full control over them.&lt;/li&gt;&lt;/ul&gt;

&lt;a name=&quot;p37654-3&quot;&gt;&lt;/a&gt;&lt;p class=&quot;auto&quot; id=&quot;p37654-3&quot;&gt;
Hence, I&amp;nbsp;have decided to&amp;nbsp;totally freeze InTerra Classic in&amp;nbsp;its current state and&amp;nbsp;gradually roll out&amp;nbsp;the development of&amp;nbsp;InTerra Deluxe, which shall be&amp;nbsp;documented in&amp;nbsp;this blog to&amp;nbsp;the most complete extent.&lt;/p&gt; </description>
<pubDate>Sun, 06 Sep 2009 20:45:00 +0200</pubDate>
</item>

</channel>
</rss>