<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>*} CodeBloke &#187; user experience</title>
	<atom:link href="http://codebloke.wordpress.com/category/user-experience/feed/" rel="self" type="application/rss+xml" />
	<link>http://codebloke.wordpress.com</link>
	<description>Programming. Human effort to imitate, supplement, alter, or counteract the work of nature.</description>
	<lastBuildDate>Mon, 10 Mar 2008 21:27:36 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='codebloke.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/8be7713909b0917f792e59e45af29903?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>*} CodeBloke &#187; user experience</title>
		<link>http://codebloke.wordpress.com</link>
	</image>
			<item>
		<title>Snapshots of a PHP enterprise developer &#8217;s life ( How I needed CCTV&#8230; )</title>
		<link>http://codebloke.wordpress.com/2007/07/11/snapshots-of-a-php-enterprise-developer-s-life-how-i-needed-cctv/</link>
		<comments>http://codebloke.wordpress.com/2007/07/11/snapshots-of-a-php-enterprise-developer-s-life-how-i-needed-cctv/#comments</comments>
		<pubDate>Wed, 11 Jul 2007 16:42:58 +0000</pubDate>
		<dc:creator>codebloke</dc:creator>
				<category><![CDATA[Application Architecture]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Design and Implementation]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[codebloke]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[http debugger]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[komodo]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://codebloke.wordpress.com/2007/07/11/snapshots-of-a-php-enterprise-developer-s-life-how-i-needed-cctv/</guid>
		<description><![CDATA[This article is actually meant to be praise for Komodo 4.1 IDE (a reasonably priced PHP IDE with HTTP debugging features), but when I started to write the post I realised that the whole story must be told from different angle. Not that the Komodo is not worth praising, it is and that&#8217;s for sure. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codebloke.wordpress.com&blog=552405&post=27&subd=codebloke&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This article is actually meant to be praise for <a href="http://www.activestate.com/Products/komodo_ide/">Komodo 4.1 IDE</a> (a reasonably priced PHP <a href="http://en.wikipedia.org/wiki/Integrated_development_environment">IDE</a> with HTTP debugging features), but when I started to write the post I realised that the whole story must be told from different angle. Not that the Komodo is not worth praising, it is and that&#8217;s for sure. However, since the story evolved I&#8217;ve taken decision to post a link to community version (<a href="http://www.activestate.com/store/productdetail.aspx?prdGuid=20f4ed15-6684-4118-a78b-d37ff4058c5f">Komodo Edit</a>) and make a point regarding much more complicated matter. And so it happens a bit more important if you pay your bills <a href="http://en.wikipedia.org/wiki/Business_logic">implementing business logic</a> with the PHP5 and <a href="http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29">LAMP</a> like I do.</p>
<p>Story in brief is about knowing and not guessing, but let me start with some memories of the past.</p>
<p><strong>History</strong></p>
<p>While working for a UK email marketing company some time ago (I am still thinking if I should mention them in this article…) I was developing a couple of new features. Long ago this company decided to use very complicated application stack. It&#8217;s enough to say that Postgres, PHP4 and <a href="http://en.wikipedia.org/wiki/XSLT">XSLT</a> were running under one roof (sometimes) delivering… <a href="http://en.wikipedia.org/wiki/Html#HTML_versions">transitional HTML</a>.<br />
So, every time a helpdesk ticket was initiated by the fault report <strong>I heard the same mantra being sung to clients &#8220;we cannot replicate the error&#8221;</strong>.</p>
<p>From the very beginning <strong>I felt it wasn&#8217;t right to do bullshit talking to the clients that pay your bills</strong>. I knew how to make web-based system fully monitored. Problem was that with this company (for the first time in my life) I plunged a bit with my own projects, system was undocumented and the other senior developer acted simply like a jerk. As you see it&#8217;s wasn&#8217;t the perfect positions to address my bright vision of a fully self-aware web-based application server. Especially that this &#8220;dotcom&#8221; company, located in the countryside had a huge problem with equipping developers with a new dev server, we also suffered electricity shortages from time to time and the internet uplink was down pretty often… However I liked the rural setup (see video below).</p>
<p><span style="text-align:center; display: block;"><a href="http://codebloke.wordpress.com/2007/07/11/snapshots-of-a-php-enterprise-developer-s-life-how-i-needed-cctv/"><img src="http://img.youtube.com/vi/WAYeTxb8ZOI/2.jpg" alt="" /></a></span></p>
<p>So, I started to develop that solution on my own and ended up with a very efficient piece of code that I called CCTV, which allows:</p>
<ul>
<li>Remote side profiling</li>
<li>Login / logoff based on database-stored sessions</li>
<li>Real-time application input and output logging</li>
<li>Detecting users opening application with multiple browser windows</li>
</ul>
<p>System creates &#8220;remote side&#8221; profiles based on <a href="http://en.wikipedia.org/wiki/Ip_address">ip</a>/<a href="http://en.wikipedia.org/wiki/Proxy_server">proxy</a>/network block/country/<a href="http://en.wikipedia.org/wiki/User_agent">browser</a> and you can compare these profiles with all logged HTTP requests, i.e. searching for fraudsters (without laborious strings digging).</p>
<p>I don&#8217;t need to explain that unlike file-based PHP sessions this system can be distributed across <a href="http://en.wikipedia.org/wiki/MySQL_Cluster">database cluster</a> without even breaking the sessions. Also, you can use multiple web and database servers. In terms of uptime, mixed with stuff like i.e. round robin (internet) or hiding web server <a href="http://en.wikipedia.org/wiki/Load_balancing_%28computing%29">behind a load balancer</a> (in LAN) it makes your application virtually invincible (with &#8220;virtually&#8221; stressed). Another benefit here is that you can centralize session&#8217;s management and logoff one or all users even though the session (or <a href="http://en.wikipedia.org/wiki/HTTP_cookie">cookie</a>) has not expired yet.</p>
<p>Real time output logging makes sense only in the development phase (UX &#8211; User Experience, cross-browser functionality checks, etc.). One of the features I like is that when you forced user&#8217;s logoff having output logging turned on, you can rebuild his &#8220;last seen&#8221; application state when he logs back.<br />
I don&#8217;t need to explain significance of that… it simply undermines the <a href="http://en.wikipedia.org/wiki/Http_protocol">dogma of HTTP</a> being a <a href="http://en.wikipedia.org/wiki/Stateless_server">stateless protocol</a>. Not anymore…</p>
<p>So, I started to think of all this looking at <a href="http://www.activestate.com/">Komodo</a> which has <a href="http://www.google.co.uk/search?q=http+debugger">HTTP debugger</a> built-in and having that tool I probably would never start my <a href="http://en.wikipedia.org/wiki/Closed-circuit_television">CCTV</a> project&#8230;</p>
<p><strong>Today</strong></p>
<p>I am now senior developer at <a href="http://www.worldfirst.com/importing_why_use_world_first_foreign_exchange.html?ID=155">World First in London</a> a foreign exchange company with yearly turnover of approx. 3 billion GBP (roughly $6,000,000,000.00).</p>
<p>Part of my job is development of the dealing application in the Intranet that runs on LAMP and CCTV is a part of it. Just looked at the stats… so, running PHP5 and MySQL 5.20 <strong>we serve over 180,000 HTTP requests daily</strong> (which means apporx. <strong>80,000 database transactions a day</strong>) and <strong>I can restore every second of the system&#8217;s life, as easy as if I had a rewind button</strong>.</p>
<p><font color="#999999"><strong>Future?</strong></font></p>
<p>When you deliver a platform (and PHP5 surely is a platform), you must deliver a coherent application framework. Not for internet, blogging, CMS, etc., but for the enterprise. Otherwise you force the developers like me to do your job.</p>
<p>Now, assuming that MySQL 5.2 is now really a database&#8230; then maybe it&#8217;s a good time to stop playing funny guys and together with <a href="http://www.mysql.com/">MySQL AB</a> you deliver a unified application platform with all features mentioned above with the C-implemented sessions functionality?</p>
<p>I wonder if guys at <a href="http://www.zend.com/">Zend</a> realize already that even <a href="http://www.ibm.com/developerworks/db2/library/techarticle/scott/0614_scott.html">support of IBM&#8217;s DB2</a>, or projects like OPAL (trick with <a href="http://www.oracle.com/technology/tech/php/index.html">Oracle&#8217;s support for PHP</a>), these are simply jokes <strong>when the only thing decent with PHP is so far the language syntax</strong> &#8211; inherited anyway.</p>
<p>Don&#8217;t get me wrong. I am a big PHP fan and I wait for a situation update&#8230; but seems to me like they decide to make money on <a href="http://www.zend.com/store/zend_php_conference?hpb=zendcon-0710">events and that type of crap, rather than software</a>.</p>
<p>Martin</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/codebloke.wordpress.com/27/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/codebloke.wordpress.com/27/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codebloke.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codebloke.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codebloke.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codebloke.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codebloke.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codebloke.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codebloke.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codebloke.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codebloke.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codebloke.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codebloke.wordpress.com&blog=552405&post=27&subd=codebloke&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://codebloke.wordpress.com/2007/07/11/snapshots-of-a-php-enterprise-developer-s-life-how-i-needed-cctv/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9b2ed8f4d63ffda0285b456dee3f8a03?s=96&#38;d=identicon" medium="image">
			<media:title type="html">codebloke</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/WAYeTxb8ZOI/2.jpg" medium="image" />
	</item>
	</channel>
</rss>