<?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/"
	>

<channel>
	<title>FlipStorm &#187; development</title>
	<atom:link href="http://flipstorm.co.uk/tag/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://flipstorm.co.uk</link>
	<description>web development masters</description>
	<lastBuildDate>Wed, 01 Sep 2010 13:47:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<atom:link rel='hub' href='http://flipstorm.co.uk/?pushpress=hub'/>
		<item>
		<title>A Busy, Warm April</title>
		<link>http://flipstorm.co.uk/2010/04/a-busy-warm-april/</link>
		<comments>http://flipstorm.co.uk/2010/04/a-busy-warm-april/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 18:56:30 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[advice]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://flipstorm.co.uk/?p=221</guid>
		<description><![CDATA[
			
				
			
		
April has been one hectic month! Between launching WhatGrowersUse.com, pre-launch marketing Optimise and fixing PlantConnection, I&#8217;ve barely had a moment to stop and think!
Add to this the fact that I&#8217;ve been swotting up on all things dev. I love coding in PHP and today I managed to hack out a super slender piece of functionality...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fflipstorm.co.uk%2F2010%2F04%2Fa-busy-warm-april%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fflipstorm.co.uk%2F2010%2F04%2Fa-busy-warm-april%2F&amp;source=flipstorm&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>April has been one hectic month! Between launching <a href="http://www.whatgrowersuse.com/">WhatGrowersUse.com</a>, pre-launch marketing <a href="http://optimiseapp.com/">Optimise</a> and fixing <a href="http://www.plantconnection.co.uk/">PlantConnection</a>, I&#8217;ve barely had a moment to stop and think!</p>
<p>Add to this the fact that I&#8217;ve been swotting up on all things dev. I love coding in PHP and today I managed to hack out a super slender piece of functionality for an awesome *top secret* project I&#8217;m working on!</p>
<p>I basically need to pull a massive XML feed (think &gt;10MB) and process the contents into a database. So this is grand-scale processing of huge wads of XML data &#8211; something I&#8217;ve never really had to do before.</p>
<p>This may seem a bit backwards, but moving away from the XML is imperative. This project needs to be fast and agile. I don&#8217;t want to have to allocate huge chunks of memory to my whole PHP layer just to deal with a few records in various, disparate XML files.</p>
<h3>Starting with SimpleXML</h3>
<p>SimpleXML is a fantastic XML parser. Being able to turn XML into native PHP objects, arrays and variables is supremely handy. However, &#8220;Simple&#8221; is definitely the operative word! When it comes to huge amounts of XML data, <a href="http://sydphp.org/2009/05/03/consuming-xml-fast-with-php-and-xmlreader/">SimpleXML just doesn&#8217;t cut it</a>!</p>
<p>So in my search for an alternative, I came across something I&#8217;ve never used before: a little-known &#8211; and it seems little-used &#8211; PHP extension called XMLReader. My hero.</p>
<h3>XMLReader saves the day</h3>
<p>XMLReader is what is known as a pull parser&#8230; you grab what you need as the parser races through the XML at lightning speed. It streams the file into context too: reading, caching, splurging&#8230; so you can deal with the XML before the whole file is loaded into memory.</p>
<p>This is a huge advantage for massive files. As long as the XML is valid, you can run away processing elements and attributes at a blistering pace.</p>
<p>Something to remember though is that doing it this way is no good if you then try to process all of this data in memory intensive variables or objects (which is the problem with SimpleXML). You either face increasing the memory allocation to PHP (which is limited by how much RAM you have) or you find a quick way to deal with the data and move on.</p>
<p>It&#8217;s grab-and-release&#8230; no time for processing here. Any kind of re-assignment of data where volumes exceed 30,000 reps of a while-loop will suck your memory dry. So no massive strings, no huge arrays and definitely no objects!</p>
<h3>Execution Time</h3>
<p>The only issue left is execution time. Between parsing the XML file  and saving it to a local MySQL db, your script could take a lot longer than your default execution time.</p>
<p>XMLReader is pretty darn snappy and there&#8217;s really no way to improve that with digging into some C code and rebuilding the extension. The code that actually does stuff with the data from the XML is very minimal. The biggest challenge is time writing to the database.</p>
<p>I&#8217;m using MySQL. The <a href="http://chrisjohnson.blogsite.org/tag/mysqli/#mysqli_prepared">quickest method</a> of writing to a database (save reformatting the data into some kind delimited text file and using load_data_infile) is <strong>mysqli prepared statements</strong>. This greatly reduces database load and running thousands (or hundreds of thousands) of queries can be done in mere seconds.</p>
<p>However, even this will be too slow if your max_execution time is 30 seconds. But the only real way to speed MySQL up is a faster processor and improved disk-write speed (think SSDs). Those are expensive options.</p>
<p>The simplest option? Increase script execution time. If this isn&#8217;t a user page, you can be a little more relaxed on timeouts. You should be able to use the <em>set_time_limit() </em>function to increase execution time. In fact this function has a handy habit of simply extending your current execution time by the limit you set.</p>
<p><code> </code></p>
<pre>&lt;php
  while ( $xmlReader-&gt;read() ) {
    set_time_limit(2);
    // ... get data, save to DB etc ...
  }
?&gt;
</pre>
<p>This will give <em>each loop</em> an <strong>extra</strong> two seconds to execute, which should be more than enough time to parse an extra few XML nodes and execute a prepared statement one more time.</p>
<p><em>So there it is. If you&#8217;d like to see the full code or have any questions, just ask, I&#8217;d be happy to share it. A huge thanks goes to Chad Fennell for his <a href="http://blog.lib.umn.edu/fenne035/academe2.0/2007/04/speed_reading_xml_with_php_xml.html">excellent post</a> on XMLReader<br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://flipstorm.co.uk/2010/04/a-busy-warm-april/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Wouldn&#8217;t It Be Great If All APIs Followed RESTful Principles?</title>
		<link>http://flipstorm.co.uk/2009/12/wouldnt-it-be-great-if-all-apis-followed-restful-principles/</link>
		<comments>http://flipstorm.co.uk/2009/12/wouldnt-it-be-great-if-all-apis-followed-restful-principles/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 17:35:00 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://erika.flipstorm.co.uk/flipstorm/2009/12/wouldnt-it-be-great-if-all-apis-followed-restful-principles/</guid>
		<description><![CDATA[
			
				
			
		
APIs and connecting web applications together is going to be the next challenge of the evolution of the web. The next decade should see easier-to-implement, yet more secure methods for connecting the various web applications that we use.

We&#8217;re already seeing this in simple ways: RSS, Atom Publishing, Web Hooks. But these are generally insecure. They...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fflipstorm.co.uk%2F2009%2F12%2Fwouldnt-it-be-great-if-all-apis-followed-restful-principles%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fflipstorm.co.uk%2F2009%2F12%2Fwouldnt-it-be-great-if-all-apis-followed-restful-principles%2F&amp;source=flipstorm&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>APIs and connecting web applications together is going to be the next challenge of the evolution of the web. The next decade should see easier-to-implement, yet more secure methods for connecting the various web applications that we use.<br />
<span id="more-49"></span><br />
We&#8217;re already seeing this in simple ways: RSS, Atom Publishing, Web Hooks. But these are generally insecure. They have been built/conceived with a set of specific goals in mind and then adapted – shoe-horned – to fit a variety of other purposes.</p>
<p>We are making progress: APIs have flooded the web. Mashups threaten to implode the universe in their brilliance. But there are still hurdles. There are still no standards.</p>
<p>REST is just a set of principles (for many things, not just web app APIs). HTTP-REST for Web Service APIs is no definition of a standard method for implementation. It doesn&#8217;t even begin to address the need for documenting or versioning APIs.</p>
<p>SOAP is better, but this is so wrapped up in corporate boggling and debate that real developers are reluctant to use it (as evidenced by <a href="http://www.programmableweb.com/apis">the fact</a> that 68% of APIs are built on RESTful principles vs 19% on SOAP) or simply want a more open standard.</p>
<p>Even if all web service APIs were RESTful, we still need a better method of standardisation and documentation (and implementation could be a lot easier with some other common features set down in stone).</p>
<p>What we need isn&#8217;t another working group to start <i>thinking</i>&nbsp;about how to solve these problems, but rather, someone to stick their neck out and <i>do something </i>to tackle these challenges.</p>
<p>We are at a turning point. The languages and processes are in place. The standards that need to be ratified have been. The scalability challenges are fading away. The core building blocks of something brilliant are there.</p>
<p>This is why I am building <b>reactor</b>. It&#8217;s aim isn&#8217;t to create a formal standard that all others must obey, but rather to encapsulate existing and future systems, boil them down to their basic standards and provide a single, simple point of entry into every API out there.</p>
<p>My vision is to make it easier for API implementers (provider developers) to standardise and document their APIs and easier for integrators (consumer developers) to consume those APIs in a standard way.<br />
<blockquote><span style="font-size: x-large;">&#8220;One API to rule them all&#8221;</span></p></blockquote>
<p>Does this sound like something you&#8217;d be interested in getting involved in? If &#8220;HELL YEAH!!&#8221; is your answer, then <a href="http://reactorapp.com/">sign up for the mailing list</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://flipstorm.co.uk/2009/12/wouldnt-it-be-great-if-all-apis-followed-restful-principles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcing &#8220;reactor&#8221;</title>
		<link>http://flipstorm.co.uk/2009/11/announcing-reactor/</link>
		<comments>http://flipstorm.co.uk/2009/11/announcing-reactor/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 23:41:00 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[preview]]></category>

		<guid isPermaLink="false">http://erika.flipstorm.co.uk/flipstorm/2009/11/announcing-reactor/</guid>
		<description><![CDATA[
			
				
			
		
Ok, so it&#8217;s not a big announcement because the app hasn&#8217;t actually launched yet. But I&#8217;ve launched the holding site.

So what&#8217;s reactor?
Well it&#8217;s a really exciting idea for a web app that I&#8217;ve had for ages. Now I&#8217;m moving forward with it. If you want more information, sign up to the mailing list. If you...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fflipstorm.co.uk%2F2009%2F11%2Fannouncing-reactor%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fflipstorm.co.uk%2F2009%2F11%2Fannouncing-reactor%2F&amp;source=flipstorm&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Ok, so it&#8217;s not a big announcement because the app hasn&#8217;t actually launched yet. But I&#8217;ve launched the holding site.<br />
<span id="more-53"></span></p>
<h4>So what&#8217;s <em>reactor</em>?</h4>
<p>Well it&#8217;s a really exciting idea for a web app that I&#8217;ve had for ages. Now I&#8217;m moving forward with it. If you want more information, <a href="http://reactorapp.com/">sign up to the mailing list</a>. If you really want a lot more information, email me or something. I&#8217;ll send you out an NDA and whatnot (yes it&#8217;s that official!).</p>
<p>w00t! My first proper big web app! <img src='http://flipstorm.co.uk/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Hope you&#8217;ll join me (*cough* developers)</p>
]]></content:encoded>
			<wfw:commentRss>http://flipstorm.co.uk/2009/11/announcing-reactor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Putting My DBA Hat On&#8230; Again</title>
		<link>http://flipstorm.co.uk/2009/10/putting-my-dba-hat-on-again/</link>
		<comments>http://flipstorm.co.uk/2009/10/putting-my-dba-hat-on-again/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 12:04:00 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[advice]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rants]]></category>

		<guid isPermaLink="false">http://erika.flipstorm.co.uk/flipstorm/2009/10/putting-my-dba-hat-on-again/</guid>
		<description><![CDATA[
			
				
			
		
It&#8217;s not often I have to worry too much about the minutia of database administration&#8230; well, I try not to. But this question on StackOverflow got me intrigued, so I put on my trilby.

labratmatt was having a bit of a problem with inserting data into a MySQL table with field defined as DECIMAL(3,2). Can you...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fflipstorm.co.uk%2F2009%2F10%2Fputting-my-dba-hat-on-again%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fflipstorm.co.uk%2F2009%2F10%2Fputting-my-dba-hat-on-again%2F&amp;source=flipstorm&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>It&#8217;s not often I have to worry too much about the minutia of database administration&#8230; well, I try not to. But this question on <a href="http://stackoverflow.com/questions/1523173">StackOverflow</a> got me intrigued, so I put on my trilby.
<div></div>
<div><a href="http://stackoverflow.com/users/24643/labratmatt">labratmatt</a> was having a bit of a problem with inserting data into a MySQL table with field defined as DECIMAL(3,2). Can you guess what his problem was? That&#8217;s right&#8230;. 9.99! How did you guess?</div>
<div></div>
<div>This has got to be one of the most popular MySQL-related Google searches. The initial problem is easy to solve&#8230; correct the presumptuous field definition.</div>
<div></div>
<div>However, the underlying problem is really why his data was being truncated, even inserted incorrectly. You may notice the same if you run MySQL (v5.0+) from a default setup on other field types: VARCHAR for example, where you set a maximum field length. When you INSERT data that is too long it simply gets truncated.</div>
<div></div>
<div>Not hugely worrying you may think, especially in development and testing phases. True. But this wasn&#8217;t enough for me, so I went on a hunt.</div>
<div></div>
<div>I found this <a href="http://dev.mysql.com/tech-resources/articles/mysql-data-integrity.html">interesting article</a> by Robin Schumacher on <span style="font-style: italic;">MySQL Data Integrity</span>.</div>
<div></div>
<div>It seems that there is a configuration variable in MySQL (v5.0+) called &#8217;sql_mode&#8217; that determines exactly how strict MySQL should be when writing data to tables. The problem is that, by default, it&#8217;s unset, which means MySQL uses its standard mode&#8230; fudged SQL.</div>
<div></div>
<div>It has a vast array of options, so <a href="http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html">read through and choose wisely</a>.</div>
<div></div>
<div>The default MySQL setup essentially turns all of your INSERT and UPDATE statements into INSERT/UPDATE IGNORE statements.  It is an unexpected &#8220;gotcha&#8221; for many&#8230; any self-respecting software developer would want the INSERT query to fail and for the DBMS to tell you why it failed, not automatically munge the data for you.</div>
<div></div>
<div>To achieve this, the general option to use for &#8217;sql_mode&#8217; is STRICT_ALL_TABLES&#8230; but even this has some gotchas (VARCHAR and TEXT expect only string values etc&#8230;) and may need to be combined with other options.</div>
<div></div>
<div>Of course, if you write your programs to send MySQL the correct datatypes, changing this option shouldn&#8217;t cause any problems <img src='http://flipstorm.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </div>
<div></div>
<div>The annoying thing is that I&#8217;ve only just found about this now after nearly 6 years of database development.</div>
]]></content:encoded>
			<wfw:commentRss>http://flipstorm.co.uk/2009/10/putting-my-dba-hat-on-again/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HTML 5, XHTML 2 &#8211; Web 2.5</title>
		<link>http://flipstorm.co.uk/2008/12/html-5-xhtml-2-web-2-5/</link>
		<comments>http://flipstorm.co.uk/2008/12/html-5-xhtml-2-web-2-5/#comments</comments>
		<pubDate>Sun, 28 Dec 2008 19:09:00 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[preview]]></category>

		<guid isPermaLink="false">http://erika.flipstorm.co.uk/flipstorm/2008/12/html-5-xhtml-2-web-2-5/</guid>
		<description><![CDATA[
			
				
			
		
I&#8217;ve been doing a lot of reading up on HTML5 and XHTML2. I know neither of these technologies are anywhere near well-supported enough to start using in production. However, we should all be starting to get our heads around the changes &#8211; if not only to be ready for the shift, but also the benefits...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fflipstorm.co.uk%2F2008%2F12%2Fhtml-5-xhtml-2-web-2-5%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fflipstorm.co.uk%2F2008%2F12%2Fhtml-5-xhtml-2-web-2-5%2F&amp;source=flipstorm&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;ve been doing <span style="font-weight: bold;">a lot</span> of reading up on HTML5 and XHTML2. I know neither of these technologies are anywhere near well-supported enough to start using in production. However, we should all be starting to get our heads around the changes &#8211; if not only to be ready for the shift, but also the benefits it will bring.
<div></div>
<div>There has been a lot of hype in design and developer circles for a good few years surrounding all of this, especially for proponents of the so-called semantic web &#8211; the supposed natural evolution of the web.</div>
<div></div>
<div>However, Tim Berners-Lee (seen by many as the father of the web as we know it today) has already suggested that this semantic web will only make up part of what we will come to call Web 3.0. How much of it will be the semantic web is yet to be seen (if much at all given it&#8217;s progress!)&#8230; more to the point, how much of an impact these impending technologies will have on the semantic web is a little hard to judge.</div>
<div></div>
<div>It strikes me that whenever we reach this next phase in syntactical changes for the web as we know it &#8211; in terms of it being an officially approved and ratified recommendation by the powers that be (some time around 2012) &#8211; and the point in time when it can be considered as globally adopted &#8211; probably within 4-to-5 years following that recommendation, similar to that of XHTML1.0 &#8211; will be half an evolutionary cycle.</div>
<div></div>
<div>If it does bring us anywhere close to the intended semantic nature of the web, it will, at best, be only half way there. So I&#8217;m going to go out on a limb and predict that <span class="Apple-style-span" style="font-weight: bold;">sometime in 2015</span> we will confidently say we have reached <span class="Apple-style-span" style="font-weight: bold;">Web 2.5</span>.</div>
<div></div>
<div>Of course this is assuming we&#8217;re still here in a fashion. And that this stuff moves on apace. With the current fairly good awareness of standards and best practice, I believe that a small nudge from some big players may impact things for the better. Say Google adjusts various search algorithms to favour HTML5 sites in search listings&#8230; we all know that clients will notice and designers and developers will have to pay heed!</div>
<div></div>
<div>So it really is best to start now. Most of the changes (particularly towards HTML5) aren&#8217;t major. In fact, as can be seen, they should simplify our lives an awful lot! The problem is that there&#8217;s a lot of web out there to change. You can&#8217;t just change tags and roll &#8211; the implications are far greater: you have to consider CSS, the impact on any server side scripting used, browser rendering and their differences (especially for the new controls)&#8230;</div>
<div></div>
<div>This all sounds a little painful. For those using any kind of Web App platform with a good templating structure, this should be fairly easy: set up a new HTML5 template. The only complication to consider then is script-generated mark-up. And that should be tackled by the vendor.</div>
<div></div>
<div>Of course this is somewhat subjective as browser support is sketchy at best, so it&#8217;s hard to test any development in this area. Looking forward, we should be seeing greater support of these technologies in coming months. For now it&#8217;s probably best to <a href="http://whatwg.org">glean what you can from the WHATWG</a> and if you&#8217;re a developer building a CMS or other Web App you can probably start writing some test cases and replacement libraries just to stay ahead of the curve.<span class="Apple-tab-span" style="white-space:pre"> </span></div>
]]></content:encoded>
			<wfw:commentRss>http://flipstorm.co.uk/2008/12/html-5-xhtml-2-web-2-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CMSs != Web Apps? WTF?</title>
		<link>http://flipstorm.co.uk/2008/12/cmss-web-apps-wtf/</link>
		<comments>http://flipstorm.co.uk/2008/12/cmss-web-apps-wtf/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 23:00:00 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[rambling]]></category>

		<guid isPermaLink="false">http://erika.flipstorm.co.uk/flipstorm/2008/12/cmss-web-apps-wtf/</guid>
		<description><![CDATA[
			
				
			
		
Well it&#8217;s coming to the end of 2008 and there&#8217;s nothing left to say, but:

Why Are CMSs Not Included In The &#8220;Web Apps&#8221; Balloon?
There was a time when going up into the sky was every boys (and some girls) dream. To be like a bird, fluttering at high altitudes in the cold, thin air&#8230; so...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fflipstorm.co.uk%2F2008%2F12%2Fcmss-web-apps-wtf%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fflipstorm.co.uk%2F2008%2F12%2Fcmss-web-apps-wtf%2F&amp;source=flipstorm&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/commons/thumb/8/8a/2006_Ojiya_balloon_festival_011.jpg/398px-2006_Ojiya_balloon_festival_011.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 398px; height: 599px;" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/8a/2006_Ojiya_balloon_festival_011.jpg/398px-2006_Ojiya_balloon_festival_011.jpg" border="0" alt="" /></a><br />Well it&#8217;s coming to the end of 2008 and there&#8217;s nothing left to say, but:
<div></div>
<h2>Why Are CMSs Not Included In The &#8220;Web Apps&#8221; Balloon?</h2>
<div>There was a time when going up into the sky was every boys (and some girls) dream. To be like a bird, fluttering at high altitudes in the cold, thin air&#8230; so naive&#8230;</div>
<div></div>
<div>Sorry&#8230; rambling again. My point is that mankind poured decades of research into flight, spanning many centuries. IMO, one of the greatest achievements in the field is the hot air balloon (although I&#8217;ve never been in one).</div>
<div></div>
<div>As I see it, the hot air balloon is a brilliant and exhilarating contraption. But to ride one with any sense of control (and I am a control freak) takes an awful lot of know how. You have to be a pretty cool kid to guide a hot air balloon with any safety.</div>
<div></div>
<div>The same is true with web apps. They&#8217;re a wild giant canvas filled with the piping hot air of incidence and popularity, warily directed by the most aimless sense of direction conceived (in some cases). But it seems the basket is too full for you, you and you!</div>
<div></div>
<div>That&#8217;s right, you&#8217;re not a web app, soaring among the hilltops, if you&#8217;re a CMS or other such ilk. However, I contest this. A CMS and a web app are interchangeable. Henceforth, I will no longer think in terms of a CMS. All such things will be called web applications &#8211; plus I think CMS is really formal and business-y and I don&#8217;t like that, not one bit.</div>
<div></div>
<div>So let us all jump aboard the web app balloon and bring it swiftly earthward!</div>
<div></div>
<div>On a slightly less diabolical note: <a href="http://24ways.org/">24ways</a> has been brilliant this year. There have been some terrific advancements this year and I can&#8217;t wait to see what 2009 brings! Let&#8217;s go together.</div>
<div></div>
<div>END;</div>
]]></content:encoded>
			<wfw:commentRss>http://flipstorm.co.uk/2008/12/cmss-web-apps-wtf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>__get, __set, __construct and MySQL_Result::fetch_object()</title>
		<link>http://flipstorm.co.uk/2008/12/__get-__set-__construct-and-mysql_resultfetch_object/</link>
		<comments>http://flipstorm.co.uk/2008/12/__get-__set-__construct-and-mysql_resultfetch_object/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 11:28:00 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://erika.flipstorm.co.uk/flipstorm/2008/12/__get-__set-__construct-and-mysql_resultfetch_object/</guid>
		<description><![CDATA[
			
				
			
		
I realise this is my first blog post in a long while. Despite the fact that I want to make it interesting, I am terribly busy. However I needed to get this off my chest as it has been bugging me for ages (hopefully it will help some of you!).
While researching faster methods for data...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fflipstorm.co.uk%2F2008%2F12%2F__get-__set-__construct-and-mysql_resultfetch_object%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fflipstorm.co.uk%2F2008%2F12%2F__get-__set-__construct-and-mysql_resultfetch_object%2F&amp;source=flipstorm&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>I realise this is my first blog post in a long while. Despite the fact that I want to make it interesting, I am terribly busy. However I needed to get this off my chest as it has been bugging me for ages (hopefully it will help some of you!).</p>
<p>While researching faster methods for data retrieval and manipulation for my *<span style="font-weight: bold;">TOP SECRET PROJECT</span>* I found that, as of a very recent version of PHP, the MySQL_Result class&#8217; method &#8216;fetch_object&#8217; allows you to specify a class to dump the object into.</p>
<p>My first thoughts were: fantastic! What a better method than what I was doing previously. I can instantiate an object and set all the properties all of the back of the query &#8211; dynamic properties while still inheriting all methods and hard-coded properties&#8230; <span style="font-weight: bold;">excellent</span>!</p>
<p>As I continued down this route I found some unusual behaviour though. First of all, it appears that a call to $result->fetch_object(&#8216;Class&#8217;) makes use of the magic method __set() *<span style="font-weight: bold;">EVEN WITHOUT __set() BEING DEFINED IN THE CLASS</span>*. Now there&#8217;s no note of that in the docs!</p>
<p>So what happens when I do define a __set() method? Interestingly $result->fetch_object(&#8216;Class&#8217;) then uses the __set() method I define. Good, it behaves. But then I found something else. A little irritating &#8220;bug&#8221; is that, upon calling $result->fetch_object(&#8216;Class&#8217;), it constructs the object in an unusual order.</p>
<p>Perhaps it&#8217;s just me and my thought process, but I would&#8217;ve gone for:
<ul>
<li>Check if __construct() is defined</li>
<li>Instantiate object</li>
<li>Check if __set() is defined</li>
<li>Set properties</li>
</ul>
<p>However the actual process order is:
<ul>
<li>Check if __set() is defined</li>
<li>Set properties</li>
<li>Check if __construct() is defined</li>
<li>Instantiate object</li>
</ul>
<p>This threw me a little, especially as there&#8217;s little documentation detailing the behaviour of MySQL_Result::fetch_object() when overloading with a class name. It does make some sense, but it&#8217;s not the human way of doing it (if my way is human <img src='http://flipstorm.co.uk/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ). I tend to think like &#8216;build box, put toys in&#8217;, rather than &#8216;pile toys up, build box around toys,&#8217; but that&#8217;s me.</p>
<p>But now I&#8217;ve sorted it and it&#8217;s out there! Let me know if that helps you.</p>
]]></content:encoded>
			<wfw:commentRss>http://flipstorm.co.uk/2008/12/__get-__set-__construct-and-mysql_resultfetch_object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Whine, whine, whine&#8230; That&#8217;s all you do!</title>
		<link>http://flipstorm.co.uk/2008/11/whine-whine-whine-thats-all-you-do/</link>
		<comments>http://flipstorm.co.uk/2008/11/whine-whine-whine-thats-all-you-do/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 23:18:00 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://erika.flipstorm.co.uk/flipstorm/2008/11/whine-whine-whine-thats-all-you-do/</guid>
		<description><![CDATA[
			
				
			
		
We (and by we I mean the company I work for) launched one of the most interesting web sites we&#8217;ve produced to date.

ComplaintCommunity™ is a brilliant brain-child of Neil Gleeson (our client), that has finally been realised by the support of a very talented developer, Ben Gilkes, along with a smart design by Elaine Haywood...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fflipstorm.co.uk%2F2008%2F11%2Fwhine-whine-whine-thats-all-you-do%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fflipstorm.co.uk%2F2008%2F11%2Fwhine-whine-whine-thats-all-you-do%2F&amp;source=flipstorm&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>We (and by we I mean the company I work for) launched one of the most interesting web sites we&#8217;ve produced to date.
<div></div>
<div>ComplaintCommunity™ is a brilliant brain-child of Neil Gleeson (our client), that has finally been realised by the support of a very talented developer, Ben Gilkes, along with a smart design by Elaine Haywood &#8211; our superb in-house designer.</div>
<div></div>
<div>ComplaintCommunity is set to turn social networking back into community spirit and ultimately consumer power. Neil is an expert on these things and has given so much thought into the project; he knew what he wanted to get, and Ben knew how to deliver. A superb client &#8211; plus he always brought us blueberry AND chocolate muffins!</div>
<div></div>
<div>This brings to mind Paul Boag&#8217;s recent post about <a href="http://boagworld.com/business_strategy/a_partnership_of_cooperation/">client relationships</a>. I can&#8217;t say that any relationship is perfect, but it looks like this was a fairly good example. Evidence of this is how much behind-the-project Neil is and how excited our team is to hear about its growth.</div>
<div></div>
<div><a href="http://www.complaintcommunity.com/">Check out ComplaintCommunity.com</a>, it is still developing so as it grows expect improvements and developments. Also, check out <a href="http://wilkesdesign.com/">where I work</a>: we made ComplaintCommunity.com.</div>
]]></content:encoded>
			<wfw:commentRss>http://flipstorm.co.uk/2008/11/whine-whine-whine-thats-all-you-do/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Progressive Ehancement, Graceful Degradation and Legacy Support</title>
		<link>http://flipstorm.co.uk/2008/10/progressive-ehancement-graceful-degradation-and-legacy-support/</link>
		<comments>http://flipstorm.co.uk/2008/10/progressive-ehancement-graceful-degradation-and-legacy-support/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 15:12:00 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[rants]]></category>

		<guid isPermaLink="false">http://erika.flipstorm.co.uk/flipstorm/2008/10/progressive-ehancement-graceful-degradation-and-legacy-support/</guid>
		<description><![CDATA[
			
				
			
		
Are we still supporting browsers that have had their day? It seems the simple answer is &#8220;hell yes!&#8221; I ask why&#8230;

I stumbled across a website today consisting of one page prompting users to upgrade their browser. It offers the hope of a better user experience, but also notes that it would make developers&#8217; and designers&#8217;...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fflipstorm.co.uk%2F2008%2F10%2Fprogressive-ehancement-graceful-degradation-and-legacy-support%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fflipstorm.co.uk%2F2008%2F10%2Fprogressive-ehancement-graceful-degradation-and-legacy-support%2F&amp;source=flipstorm&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Are we <span style="font-style: italic;">still</span> supporting browsers that have had their day? It seems the simple answer is &#8220;hell yes!&#8221; I ask why&#8230;<br />
<span id="more-86"></span><br />
I stumbled across a website today consisting of one page prompting users to upgrade their browser. It offers the hope of a better user experience, but also notes that it would make developers&#8217; and designers&#8217; lives easier.</p>
<p>I know there are many arguments that exist for supporting all possible browsers on all possible platforms. I know there are services around (such as Litmus) that provide cross-browser, cross-platform testing. I know there are still a bevy of users out running older browsers.</p>
<p>However, my argument is that there are few enough of those that we as designers/developers can actually start to make them feel outcast. Not that we are trying to bully anyone into upgrading their browser &#8211; heck we&#8217;ve been so subservient up till now, our bluff would be called and we&#8217;d probably cry and run off.</p>
<p>The thing is that most users who are still sporting legacy software are running a machine too old to cope with a newer browser. That, or they&#8217;re insistent on using old, comfy browsers. In either case, supporting them is a burden we need not bear and definitely not a necessity.</p>
<p>I put forward that web sites (and other modern software) should be built to work on the latest and greatest&#8230; to a point. I concede that there is an acceptable grace period while we wait for the majority of users to upgrade, but if we make it clear that they should, then this process wouldn&#8217;t be quite so long. If the content doesn&#8217;t render quite right, then that&#8217;s their fault.</p>
<p>I appreciate that&#8217;s a little harsh. I would therefore like to put forward a proposal: an introduction of META tags for various user agents. Once you are happy that a site works well in a minimum browser version, insert the tag for that browser.</p>
<p>Browser vendors could then check for their User Agent meta tag and compare the version data and use this to perhaps prompt the user that they need to upgrade. I guess this is a bit like Adobe AIR and Microsoft&#8217;s proposals in IE8 (except none of this conditional comments crap).</p>
]]></content:encoded>
			<wfw:commentRss>http://flipstorm.co.uk/2008/10/progressive-ehancement-graceful-degradation-and-legacy-support/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Zend Studio 6.1, TinyMCE, and Scotland</title>
		<link>http://flipstorm.co.uk/2008/09/zend-studio-6-1-tinymce-and-scotland/</link>
		<comments>http://flipstorm.co.uk/2008/09/zend-studio-6-1-tinymce-and-scotland/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 22:38:00 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[rambling]]></category>
		<category><![CDATA[resources]]></category>

		<guid isPermaLink="false">http://erika.flipstorm.co.uk/flipstorm/2008/09/zend-studio-6-1-tinymce-and-scotland/</guid>
		<description><![CDATA[
			
				
			
		
Again I find my blog post titles not really resembling any coherence&#8230; if you follow the TWiT podcast you&#8217;ll notice my titles are starting to follow the ethos: it&#8217;s more a summary of what&#8217;s covered than an introduction&#8230; Still it works for now.

I haven&#8217;t posted in an age and three-quarters because I went away to...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fflipstorm.co.uk%2F2008%2F09%2Fzend-studio-6-1-tinymce-and-scotland%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fflipstorm.co.uk%2F2008%2F09%2Fzend-studio-6-1-tinymce-and-scotland%2F&amp;source=flipstorm&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Again I find my blog post titles not really resembling any coherence&#8230; if you follow the TWiT podcast you&#8217;ll notice my titles are starting to follow the ethos: it&#8217;s more a summary of what&#8217;s covered than an introduction&#8230; Still it works for now.
<div></div>
<div>I haven&#8217;t posted in an age and three-quarters because I went away to Scotland for a week during September. I&#8217;ve had difficulty keeping up with all the stuff that&#8217;s happening in the world of late. It seems that financial markets are going to pot. So for the time being I will be keeping my head down trying to secure my very bleak future. I suggest you do the same.</div>
<div></div>
<div>In slightly lighter news, Zend released Framework 1.6 and Studio 6.1. Also I noticed that my favourite, open-source, JavaScript-based WYSIWYG editor, TinyMCE, has recently been updated.</div>
<div></div>
<div>Back to work!</div>
]]></content:encoded>
			<wfw:commentRss>http://flipstorm.co.uk/2008/09/zend-studio-6-1-tinymce-and-scotland/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
