<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
		xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
		xmlns:dc="http://purl.org/dc/elements/1.1/"
		xmlns:content="http://purl.org/rss/1.0/modules/content/"
		xmlns="http://purl.org/rss/1.0/">

	<channel rdf:about="http://www.isolani.co.uk/blog/">
		<title>isolani: weblog</title>
		<link>http://www.isolani.co.uk/blog/</link>
		<description>isolani: blogging about web standards, accessibility, semantic web, intelligent agents, gadgets and web development</description>
		<dc:language>en-gb</dc:language>
		<dc:creator>Isofarro</dc:creator>
		<dc:date>2009-07-04T20:07:28+01:00</dc:date>
		<items>
			<rdf:Seq>
				<rdf:li rdf:resource="http://www.isolani.co.uk/blog/web/YahooOpenHackLondon2009" />
				<rdf:li rdf:resource="http://www.isolani.co.uk/blog/stuff/FromUbuntuToXubuntu" />
				<rdf:li rdf:resource="http://www.isolani.co.uk/blog/standards/TheShallownessOfCssEvangelism" />
				<rdf:li rdf:resource="http://www.isolani.co.uk/blog/reviews/RestfulPhpWebServices" />
			</rdf:Seq>
		</items>
	</channel>
	
	<item rdf:about="http://www.isolani.co.uk/blog/web/YahooOpenHackLondon2009">
		<title>Yahoo Open Hack London 2009</title>
		<link>http://www.isolani.co.uk/blog/web/YahooOpenHackLondon2009</link>
		<content:encoded><![CDATA[<p>Two years after the double <a href="http://isolani.co.uk/blog/access/LondonOpenHackDayJune2007">lightning strike on Alexandra Palace</a>, Yahoo Open Hackday came back to London with a fresh new name: Yahoo Open Hack London. A weekend hackathon of developers and geeks.</p>

<p>As sequels go, they never outdo the first. And Yahoo's first London Hackday is legend. The second, far better organised, a brilliant venue (except for their below-par networking infrastructure) and excellent food. Congratulations are very much in order for Anil Patel and Sophie Major for pulling off a remarkable and well-run geek event.</p>

<h3>The talky bits</h3>

<p>The first day started off with tech talks. Dav Glass' overview of YUI3 was particularly insightful, and a well thought-out code example topped off a useful talk (has anyone ever seen Dav without a beanie?). Christian's talk was the best, showing off the potential of YQL, and billing it as the command line version of Pipes. I found the BOSS talk lacking in real substance.</p>

<p>Rasmus Lerdorf had interesting material. He offered useful snippets of code for doing typical things: curling, parsing RSS, caching, authentication, YQL, and even OAuth. Aimed primarily at new hackers, or non-hardcore developers. These are all very useful pieces of code for a hacker's toolkit. I feel the material would be far more useful as an online website, like a Hackday Manual.</p>

<p>My memories go back to the first installment and it's interesting to see the considerable change of technology. Back then YUI was just about to start gaining mindshare, Pipes (the forerunner to YQL) hadn't arrived. Ryan Kennedy did a fascinating talk about <a href="http://www.isolani.co.uk/blog/web/LondonHackdayBbauthAndYahooMail">BBauth and the Yahoo Mail API</a>. It's clear Yahoo is starting to be a leader on the technology front. They are listening and reacting in a way that is beneficial to us hackers, Yahoo employees or not.</p>

<h3>Querying the web with YQL</h3>

<p>YQL (Yahoo Query Language) is a brilliant conception. Fundamentally sound and it taps into the web developer mind share. They already deal with SQL queries, and here's something that then has a minimal learning curve and produces remarkable results fairly quickly. It almost just converts the web into a big queryable database.</p>

<p>I saw this magic first in SPARQL last year, but YQL is going to be a much bigger deal because it taps into an existing audience and fits naturally into their existing toolset. SPARQL is tarnished by the Semantic Web mumbo-jumbo and the prevalent belief they'll reinvent the Internet in it's image. YQL just works, with and without the datasource's help.</p>

<p>One of the subtler advantages of YQL is that when enough people find an API-less website useful to scrape via YQL, the site owner is going to notice a steady stream of requests from the YQL user-agents. That leads him into figuring out why YQL is making these requests, and hopefully encourage that developer to make the content open as an API. Using YQL is almost like voting to encourage a website owner to offer API access to the data that he's already making available as part of a website.</p>

<p>It was also particularly splendid to see David Filo in attendance again. I actually believe he has been to all the Yahoo Open Hackdays across the planet. Has he even missed one? I regard Filo as the technical heart of Yahoo, more than just a leader. An inspiring presence. And in his lifetime he is a legend, and along with Jerry Yang played a crucial role in the history of the Web that we have with us today.</p>


<h3>Un-networking</h3>

<p>When 250 geeks converge into one constrained space, Internet access is going to be problematic. The one particularly significant issue of this hackday has been the wonky wifi, and perhaps more scandalous or ridiculous, a dedicated line that's significantly well below average if compared to household broadband connections.</p>

<p>A bottom range broadband connection is just nowhere near acceptable enough to satisfy the data needs of two hundred and fifty geeks armed with multiple laptops, 3G auto-connecting mobile phones and other handheld devices. Despite the phenomenal effort of the Yahoo hackday crew, who requipped the venue with enterprise level wifi routers, there was nothing they could have do to alleviate the issue of a low-bandwidth connection.</p>

<p>Just as the lightning strike at Alexandra Palace was totally out of Yahoo's control, so was the internet connection. Except, it was a man-made error, and a mistake made perhaps months or years before hosting a hackday there became a possibility.</p>

<p>It's an organisation failure of the venue owners. The connection size might just be barely adequate in an audience of 250, and only a fraction are using their laptops for web requests. 250 data hungry geeks is a completely different story. We live, breathe and die on TCP/IP. There's not enough hours in the day to satiate our appetites for information on the web.</p>

<h3>Hacking</h3>

<p>As a result, my plan of building an application on top of Twitter was doomend from the start. Trying to debug Curl was a frustrating spiral, I just couldn't tell whether there was something wrong with my Curl request, or whether it was just the lousy connection. With the majority of webpages just timing out and showing a blank screen, it was a no-win situation for me. So I opted to leave early, and bailing out on the typical overnight hackday activities.</p>

<p>I was building an application because there was a room of like-minded geeks building their applications, so it was the natural thing to do. But, I'm building the app for me, because it's something I want to exist, and something that interests me. So after a pizza-hazed hacking session, and coding storms tempered all top frequently by Twitter's hourly limit, I decided that my idea was more valuable to me than building something in 24 hours.</p>

<h3>Accessibility and Dundee University</h3>

<p>I headed back into London on the Sunday to catch the end of the hacking session and for the hack presentations. I finally got to see the much-celebrated Dundee University winning hack team. They were flown from Dundee to participate in this hackday, and again they turned in a stunning application that really pushed the boundaries and conceptions around web accessibility.</p>

<p>Out of all the hacks, I felt that the Dundee University's Intellisearch was the most polished and well-executed hack there. It was basically a predictive interface for people with motor-related disabilities. Clicking a mouse button without the mouse moving is the one major frustrating barriers this audience has to deal with. So the Dundee guys implemented a clickless interface, and worked around the imprecision of mouse positioning by clever use of zoom.</p>

<p>By hooking into Yahoo BOSS and YQL, the interface offered multiple options that could be selected just by moving the mouse nearer the preferred option. The closer the mouse to an area, the larger that area became. This neatly solves the tradeoff problem of having large selectable region against the need to have as much information on the page as usability allows.</p>

<p>It was an awesome demonstration of creativity, an ingenious idea that was well executed. It used HTML Canvas for the interface, and I felt that the award of "Best Mozilla Hack" is an understatement. All A-Grade browsers support Canvas except for Internet Explorer. So it's not just Mozilla, but the Webkits and Operas that can make use of this immensely powerful interface conception.</p>

<p>I've praised Dundee University previous for turning out such talented, gifted and accessibility aware developers. And like a broken record, well done to the Dundee crew of Chris Brett, Laurence Hole and Matthew Ross. Exceptional work. And lots of credit to the staff at Dundee University for keeping up-to-date with modern web development techniques, and teaching them.</p>

<h3>The presentations</h3>

<p>Fifty hacks were presented. Many of them took advantage of YQL, and pulled off some nifty ideas. <a href="http://eatyourgreens.org.uk/">Jim O'Donnell</a> demoed a marvellous YQL and Flickr hack on the significant number of astronomy pictures on Flickr (and won a Best YQL execute hack award). He pulled in astronomy data surfaced in Flickr machine tags into the YQL table, thus exposing it to future processing. So now it is possible to start at a picture of one region of the night sky and be able to calculate and find pictures of celestial bodies nearby.</p>

<p>The implications of surfacing such rich data is very similar to geo-location data already available for our tiny planet. Talking to Jim on Saturday he made a great point that geo-location is looking at a ball you are standing on, and what he is doing is looking from the inside of a bigger ball, the maths and logic is largely the same, and the newly-created opportunities equally so.</p>

<p>Jim has been an independent champion of YQL, and over the past few months has inadvertently demonstrated the unexpected benefits of making data easy to query. I doubt the YQL team ever imagined how beneficial their platform would be to the <a href="http://eatyourgreens.org.uk/archives/2009/04/building-a-kml-feed-with-yql-and-coldfusion.html">world of astronomy</a>. A case of build it and see we comes? Jim has been applying YQL to both astronomy and maritime information, and it's splendid to see such a cutting edge technology being so useful to long-established professions.</p>

<p>Norm, James and Richard produced an exceptional idea, a Bayesian filtered news aggregator. By filtering stories based on user preference, you can remain subscribed to more general news feeds (like Top Stories feeds) and filter out topics you are not interested in in an automated fashion. I loved the concept, and the end result was splendid. Also, there's the broader implications of Bayesian filters for building a set of user preferences; the could be applied to other things like recommendation engines of various retailers. It could be Skynet.</p>

<p>The iPhone orchestra entertained us by playing the Doctor Who theme. It was awesome, and gave the Tesla Coil interpretation a run for it's money.</p>

<p>The other hack that caught my attention was the FireEagle temporary pass, which solves the issue of letting some people know where you are, but in an easily revocable way. That way some people can know where you are when you want or need them to know.</p>

<p>It has been an awesome weekend. Again, well done to Anil and Sophie, and the endless energy from the Yahoo support crew. They did a fantastic job, and the quality of hacks from the gathered geeks was very good. Perhaps better than the initial London Open Hackday.</p>]]></content:encoded>
		<dc:subject>Web Development</dc:subject>
		<dc:creator>Isofarro</dc:creator>
		<dc:date>2009-05-10T20:19+01:00</dc:date>
	</item>
	<item rdf:about="http://www.isolani.co.uk/blog/stuff/FromUbuntuToXubuntu">
		<title>From Ubuntu to Xubuntu</title>
		<link>http://www.isolani.co.uk/blog/stuff/FromUbuntuToXubuntu</link>
		<content:encoded><![CDATA[<p>Less than a year after I <a href="http://www.isolani.co.uk/blog/stuff/MakeOrBreakWithUbuntu">ditched Windows XP in favour of Ubuntu</a>, I'm making another switch. This time to Xubuntu.</p>


<h3>Ubuntu success</h3>

<p>I consider my migration to Ubuntu a complete success. I never missed Windows XP, I never felt I was languishing. The range of software with Ubuntu is superb, and always on tap through the Synaptic Package Manager.</p>

<p>I never did find a happy solution to my chess engines problem, but it doesn't strictly matter any more. I have a few Windows machines lying around that when I am compelled to spend days staring at pixelated chess pieces and cryptic messages I can do that. I just don't need it on my main laptop any more.</p>

<p>The tipping point for me was the ease of getting up to speed with writing code. My laptop is a productive source of turning ideas into real projects. Everything I need just seems to work.</p>


<h3>Why switch?</h3>

<p>So why switch? Well, I'm not really switching. Xubuntu is essentially Ubuntu, just with a different primary window manager. I'm really just moving from GNOME to Xfce, moving towards a lighter window manager.</p>

<p>What first turned me on to Xfce is the elegance of it on the Acer Aspire One. The Lupus Linux distribution on the Aspire One is basically Fedora running Xfce. And I've been coding away with the same development tools that I'm used to. That offered me some encouragement to try Xubuntu for real.</p>


<h3>Performance</h3>

<p>GNOME is feature rich and runs on top of the GTK graphics library. Xfce also runs on the GTK library, but the interface is far lighter.</p>

<p>Over the last 6 months leaving Firefox open 24 hours a day is keeping the laptop fan working furiously. I'm not sure whether that's because of the steady stream of system updates has taken it's toll, or whether the window manager is making too many demand of the humble Gigahertz and a bit CPU.</p>

<p>But after a couple of days of Xubuntu use the fan is noticeably quieter; it does kick in, just not as frequently or as loud as before.</p>


<h3>Software choice</h3>

<p>It turns out that the software I'm using heavily are all GTK based and not dependent on GNOME. Firefox, Bluefish, Pidgin, Twitux, Transmission, Filezilla, and any decent terminal. Everything else is either a command line program, or not essential to daily use. (And mono, the open source implementation of C#, is also GTK based; so that still tweaks my curiosity)</p>

<p>Since Xubuntu is built on the same foundations as Ubuntu, I still benefit from the remarkable package management system as well as the steady stream of updates and bugfixes. I haven't lost any functionality that I need or want.</p>


<h3>Installation issues</h3>

<p>I had just two issues installing Xubuntu from scratch, and both were resolved fairly quickly thanks to the ever brilliant Ubuntu forums.</p>

<p>The first problem was <a href="http://ubuntuforums.org/archive/index.php/t-975658.html" title="workaround to setting a static IP address on Xubuntu">setting a static IP address</a> on my laptop. Changes to the Network Connections dialogue were just being forgotten after a reboot. It turns out this is a known bug when updating these settings, and the workaround is just to remove the current connection details and create a new one from scratch. For a once-off task that's acceptable.</p>

<p>The second problem was that after a few minutes of running the display started showing odd artifacts and certain text characters started to disappear. A short investigation concluded that the default acceleration settings of the Intel graphics card were causing the issue, and <a href="https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/293059">setting the acceleration configuration in xorg.conf</a> to the right value was sufficient to cure the problem.</p>

<p>Then it was just a case of getting my normal development stuff installed: bluefish, apache2, php5, mysql, git, curl, ssh, lynx, and a handful of php5 modules. My development environment is largely identical (although the text size is bigger, and I'm most certainly not complaining about that).</p>

<h3>Conclusion</h3>

<p>Ubuntu is a fantastic intermediate step away from Windows, and I would still heartily recommend it as the first step. Xubuntu is my next step towards a desktop environment that focuses more on what I need. That involves trimming out the unnecessary windowing features, getting more for my limited CPU resources, and generally being more Unixy. Xfce looks fabulous, and it succeeds on platforms just not beefy enough for Ubuntu, and be competitive on platforms that are adequate for Ubuntu's main GNOME system.</p>

<p>I made no real compromises moving to Xubuntu. I wasn't reliant on any GNOME dependencies. If there is something GNOMEish I need to run for a short period of time, it's just a few clicks away in the package manager.</p>

<p>Xubuntu is quickly becoming my distribution of preference. A modern linux distribution that still fits on a CD, that's a good sign. I'll try installing it in my kitchen sink next.</p>]]></content:encoded>
		<dc:subject>Gadgets and Stuff</dc:subject>
		<dc:creator>Isofarro</dc:creator>
		<dc:date>2009-03-14T08:29+01:00</dc:date>
	</item>
	<item rdf:about="http://www.isolani.co.uk/blog/standards/TheShallownessOfCssEvangelism">
		<title>The shallowness of CSS evangelism</title>
		<link>http://www.isolani.co.uk/blog/standards/TheShallownessOfCssEvangelism</link>
		<content:encoded><![CDATA[<p>When promoting one thing being better than the other it is highly advisable to check the validity of your arguments before making them public. At least think about your arguments.</p>

<p>I get highly annoyed at the assertion that valid markup is essential for a page to be accessible. The argument lacks both substance and real world evidence, and there's a great example of the opposite: using the invalid <code>embed</code> element allows Flash to send updates to MSAA, which directly benefits people using screenreaders; while using the valid <code>object</code> element doesn't. Here I deliberately chose the invalid markup because it is more accessible.</p>

<p>CSS versus tables is another known permathread. It's only recently that the voice in favour of tables layout has improved it's position significantly. Unfortunately the same cannot be said about the rabid pro-CSS group. They continue to spout nonsense and hope no-one looks too deeply at the arguments, and hope enough commenters reply that it couldn't have been said better. Except there is large room for improvement, or perhaps reformulating the argument into something that is backed by real world evidence.</p>

<p>Matt Jurmann of Chromatic Sites published a blog post titled <a href="http://www.chromaticsites.com/blog/13-reasons-why-css-is-superior-to-tables-in-website-design/" rel="nofollow">13 Reasons Why CSS Is Superior to [tables]</a>. How ironic, the CSS layout has prevented the full title from displaying! Even the <a href="http://www.isolani.co.uk/img/access/chromatic-1.png" title="screenshot of CSS rendering issues">abstract is horribly cropped</a>. Even more ironic is the site tagline of <q>web solutions that work</q>.</p>

<p>Lets look at all 13 arguments and evaluate whether there's any substance. Or logic. Or common sense. Or anything substantial whatsoever.</p>

<h3 id="pageLoading">1. Faster page loading</h3>

<p>Apparently CSS layouts load quicker. But only if the CSS is not in an external file. Except no-one doing webstandards does this as a rule, and the benefit of visual consistency (argument 5) is thrown completely out of the window; and that has a knock-on effect on a number of follow-up arguments.</p>

<p>No web standards expert chooses to have the CSS embedded in the HTML page, it isn't a best practice. The only one compelling argument I've ever seen for CSS embedded in the page is when the Yahoo homepage is set as your homepage in IE6 it is actually quicker because it reduces the risk of the CSS not being cached locally. But that is merely an edge case.</p>

<p>In a website authored by best practices, the tables layout will be faster loading because there are less HTTP requests crossing the wire.</p>

<p>The CromaticSites.com site actually has <em>eleven</em> separate external CSS files. That's eleven additional HTTP requests before the browser has sufficient information to render or repaint the final version of the page (even if the response is just a <q>304 Not Modified</q>). The performance overhead of a bigger HTML page for tables layout is minuscule in comparison.</p>


<h3 id="hostingCosts">2. Lowered hosting costs</h3>

<p>This argument follows on from the previous discredited argument. Less bytes equals quicker download. Except again, web standards best practice uses CSS in external files, so the overhead of making an additional HTTP request dwarfs any single page size saving. This is an accepted tradeoff for site-wide consistency.</p>

<p>CSS can offer bandwidth savings, but this is solely down to caching. This caching is done by the browser, or intermediary caching servers. If you set proper Expires headers on your CSS, then you are likely to see a better cache-ability of your CSS. Even with proper server-set HTTP headers, the chances of caching are not as rosy as expected. The Yahoo! Exceptional Performance team has some very interesting (i.e. <a href="http://yuiblog.com/blog/2007/01/04/performance-research-part-2/">substantially lower than expected</a>) statistics about caching that lead to the call of minimising HTTP requests.</p>

<p>But with 11 external CSS files the additional bandwidth costs of the extra HTTP requests and responses is going to consume more HTTP packets than the bigger HTML page size of tables layout.</p>


<h3 id="redesignsEfficient">3. Redesigns are more efficient</h3>

<p>Apparently redesigns are easier with CSS. Unfortunately this is just theory. I've watched countless webstandards savvy bloggers redesign their blogs every once in a while. A substantial number of times this has involved changing or refactoring the markup before the styles can be applied.</p>

<p>With Wordpress the typical working process is to design your new site as a theme, so you have the ability to change the markup, and then author the new CSS rules. Then finally, just switch themes when you are ready to go.</p>

<p>In this case, the redesign efficiency of CSS isn't that immediately apparent. Tables layout can still be as efficient as CSS in this typical scenario.</p>

<p>The second point is that redesigns are typically site rethinks, and sites that redesign by changing the CSS alone are rare. Most especially commercial sites. An example is the Yahoo homepage redesign, they <a href="http://yuiblog.com/blog/2008/11/11/frontpage-and-yui3/">normally take 6 to 12 months</a>, and that hardly qualifies as efficient.</p>

<h3 id="redesignsCheaper">4. Redesigns are less expensive</h3>

<p>Another follow-on based on a previous discredited argument of redesigns being more efficient. A redesign is typically an overhaul of the existing site, and CSS layouts don't fare any better than their tables layout counterparts.</p>

<p>The theory sounds good, but in real-world practice, the argument isn't sustainable. Perhaps this only works on small trivial sites rather than the typical Alexa top-100 type sites.</p>


<h3 id="visualConsistency">5. Visual consistency maintained throughout website(s)</h3>

<p>Matt finally gets to one of the real strengths of CSS; the ability to externalise an entire site's styles in a manner that is sharable across all pages on that site.</p>

<p>Yes, a great argument, except that it then contradicts all the arguments about download performance.</p>

<p>This advantage is also a disadvantage. Changing one style to fix a bug or improve the styling on one page can have a detrimental effect on other out-of-sight pages on the site. So a page you are not looking at can break without you immediately knowing.</p>

<p>Firebug only saves you on the pages you are looking at, and when your site is a couple of hundred pages it is difficult to figure out the risks involved in updating just one style rule. There's no simple way of figuring out the site-wide implications of changing one style rule. And when JavaScript is affecting what style rules apply it's an absolute nightmare to test.</p>

<p>Which means that developers tend to prefer adding new class names and new stylerules to try to limit the damage caused on the rest of the pages. And that results in styles that are page-specific, and thus the visual consistency of pages then degrades.</p>

<p>Visual consistency is a little better with CSS, but a well-planned tables layout built with real development tools has a much better chance than the typical web standards geek and their trusty text editor. Ask around how many CSS savvy web developers actually have a build and deploy process. Not many.</p>

<h3 id="betterForSeo">6. Better for SEO</h3>

<p>Again, more nonsense with very little substance. Search engines aren't hindered by longer pages, and haven't been since the inception of the Web. Search engines index tabled layout pages as adeptly as CSS layouts, particularly with Google's preferred approach of disregarding markup semantics and heavily favouring actual text meaning.</p>

<p>Some search engines do stop at the first 100Kb of content, but that's regardless of whether the page is tables or CSS layout. And if you can't fit a page's content into 100Kb you have bigger issues than just tables for layout. Like Information Architecture issues.</p>

<p>An argument that could be considered in CSS' favour is that a semantic search engine could read more into a CSS layed out document (assuming that CSS is applied to an existing well-structured document). But this isn't what is happening with today's popular search engines. This is something that may prove beneficial in the future, but not today. But it is also a chicken and egg situation, there's not enough well-structured pages out there to make it worth relying on semantic structure, and semantic structure isn't useful to search engines today so there's no point spending too much time with them if that's the only argument for it. But that's neither here nor there, a table layout can just as easily use proper headings and markup for its content than a CSS layout; or both can be just as bad as the other.</p>

<p>Search engines ignore all markup by default, and whitelist certain constructs, like links, headers, bold, image elements. All of these structures are possible with both CSS and tables for layout.</p>

<p>Jurmann's point about rollovers is complete nonsense and has no bearing on the search engine visibility of the page.</p>


<h3 id="accessibility">7. Accessibility</h3>

<p>Ah, the accessibility card. Except Jurmann picks the wrong definition of accessibility - the one about the availability or universality of a page (for example, server uptime). In this case CSS for layout doesn't do anything to preserve the uptime of a server.</p>

<p>Now turning to accessibility: as in making content and services perceivable, operable, understandable and robust for people with disabilities:</p>

<p>It is very possible to create an accessible website with tables for layout. Heck, two of the best accessibility books on the planet go into detail about how to minimise the accessibility barriers of using tables for layout. CSS can still create accessibility issues, and that still needs a watchful eye just like their counterparts.</p>

<p>CSS layouts are no more accessible than tables layout. Screenreaders have had to deal with layout tables since the inception of the web, and they do a fairly decent job at making them transparent to the visitor so much so that most of the time they do not realise the difference between CSS and tables layout.</p>

<p>All of the accessibility techniques the Chromatic piece talks about have nothing to do with CSS layouts, but of CSS styling. Font-sizing, styling of lists, these are all quite possible with tables layout too. This isn't an advantage of using CSS for layouts, it's an advantage of using CSS for styling content.</p>


<h3 id="competitiveEdge">8. Competitive edge (job security)</h3>

<p>And here is the ugly truth about CSS evangelism: the elitism. CSS layouts aren't as easy for the vast majority of people building websites. So obviously, people who can do CSS layouts, and write articles about 13 reasons why CSS layouts are better than tables, well this is the part where they assert that they, the CSS layout gods, are so much better than the typical site builder.</p>

<p>Job security for learning something asserted to be easy? That's an interesting contradiction. Where's the job security in knowing something that's easy? Surely the people working with tables based layouts have better job security because CSS is so much easier, and it requires more dexterity and skill to edit a tables layout?</p>

<p>And frankly, this dismissive 'CSS is easy' is disgusting. CSS is not easy. The learning curve is steep, and not well mapped. CSS layouts are very much stuck in the Dark Ages as alchemy was. A decent text about building reusable stable layouts with CSS is yet to appear, and that's more down to the immaturity of CSS itself. Building solid reliable layouts in CSS is a Black Art.</p>

<p>Learning how to use tables for layout is actually far simpler. The number of hacks and workarounds to render a reliable and stable non-trivial layout is actually far fewer and less complex than the CSS hacks and workarounds.</p>


<h3 id="globalUpdates">9. Quick website-wide updates</h3>

<p>Another riff on the consistency across sites argument. Sure, updating one single style will affect all the pages on the site. But a proper build and deploy process also does that, so layout tables can have this feature too. No modern website with a sizable audience doesn't have an automated build and deploy process.</p>


<h3 id="maintainability">10. Easier for teams to maintain (and individuals)</h3>

<p>Yet another riff on consistency across pages, and without mentioning the downside. Surely changing on thing that results in changes across thousands of pages also means those thousands of pages also need to be tested individually? This is the great risk with CSS, you can destroy a page you weren't intending on changing, and without knowing it.</p>

<p>CSS for site-wide styling is a double-edged sword, you can just as easily cut yourself with it. The testing burden alone is a sufficient reason not to use CSS for site-wide consistency.</p>

<p>And yet, site-wide CSS styling of content (as opposed to layout) can, and are, used in tables layout to style the content. The clean separation of presentation and layout means that in a tables layout site, site-wide changes to styles are less likely to trigger a degradation of a page layout because tables are so robust. So it is actually safer to use tables for layout.</p>

<p>Jeffrey Zeldman's original edition of <a href="http://www.amazon.co.uk/gp/product/0735712018?ie=UTF8&amp;tag=getsmalea-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=0735712018">Designing with Web Standards</a> advocated a tables layout, and using CSS for the rest. CSS was deemed not to be mature enough when this book was written, and in layout terms it hasn't improved that much, and tables layout are still far more stable than CSS (for real world layouts).</p>


<h3 id="usability">11. Increased usability</h3>

<p>Apparently the ability to have a print stylesheet means improved usability. Well well. With the typical automated build and deploy systems in use across most leading websites it is fairly trivial to create a printer friendly version of pages with very little effort or overhead. So the advantages of a print stylesheet are negligible.</p>

<p>The continual assertion that CSS downloads faster makes another appearance. Yawn.</p>

<h3 id="complexLayouts">12. More complex layouts and designs</h3>

<p>Another baseless and unsubstantiated assertion. It took a long time for CSS to mature enough to be able to create layouts that were straight-forward to do with tables. The canonical example of a headered and footered three column layout with the middle column fluid (the 'Holy Grail' of layouts) is still remarkably simple to do with tables, and yet a minefield of issues for CSS. The CSS equivalent requires trade-offs and compromises to get into a reliable state.</p>

<p>CSS is starting to get an edge in pixel-specific layouts. So grid based layouts, those much praised by designers and the print world, that is almost doable in CSS now, whereas they've been relatively straightforward with tables for well over a decade.</p>

<p>Layouts that require overlaying, cropping or relative positioning are obviously not straightforward with tables. And yet, considering the accessibility and usability implications of such techniques, maybe that's a positive thing for tables. Considering the number of cropping and lost content issues with the Chromatic sites website, perhaps they'd be much better off using tables for layout instead? They certainly wouldn't have had their titles and abstract cropped!</p>

<h3 id="spacerGifs">13. No spacer gifs</h3>

<p>Tables for layout doesn't automatically mean the use of spacer gifs. <a href="http://www.amazon.co.uk/gp/product/0735712018?ie=UTF8&amp;tag=getsmalea-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=0735712018">Designing with Web Standards</a> by Jeffrey Zeldman detailed how to create table layouts without needing these.</p>

<h3 id="meritsOfEvangelism">The merits of evangelism</h3>

<p>These kool-aid induced advantages of CSS lack substance or real-world experience. As a sceptical observer who is well versed in using CSS, I find the points raised underwhelming and unconvincing.</p>

<p>Why am I critiquing like this? Well, I find the level of discourse about CSS layouts low. There is too much back-patting and self-congratulations going on. These CSS are better than tables articles, as they are currently published, are doing nothing to improve web standards or encourage an interest in CSS.</p>

<p>ESPN, Wired and the Blogger redesign were three tremendous examples of the practical benefits of CSS layouts. These sites inspired people, encouraged people to give CSS a whirl.</p>

<p>Eric Meyer's books on using CSS in a practical manner are also as inspiring as they were instructive. I'd recommend both "<a href="http://www.amazon.co.uk/gp/product/073571245X?ie=UTF8&amp;tag=getsmalea-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=073571245X">Eric Meyer on CSS</a>" and "<a href="http://www.amazon.co.uk/gp/product/0735714258?ie=UTF8&amp;tag=getsmalea-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=0735714258">More Eric Meyer on CSS</a>" for people who are curious about what CSS can do. But they don't talk too much about actual page layout. Yes, there's coverage of simple layouts, but not those sort of layouts that make up the vast majority of corporate sites.</p>

<p>Evangelising CSS shouldn't be about my tools being better than your tools. People working on existing sites get paid to keep sites using tables for layout up and running. It is simply not cost-efficient to not support these sites. They are not going to be completely convinced by these arguments and start tomorrow off by deleting all layout tables - that's the quickest way to not having a job, and in the current economic climate, that's not a clever move.</p>

<p>Tables for layout work. Their deficiencies, and workarounds, are well understood and easy to learn. For the typical corporate web developer debugging a table layout is far easier than a CSS layout. The risk of unintentionally breaking other pages on the site by fixing one issue on one page is  substantially smaller than site-wide CSS.</p>

<p>The core argument that CSS evangelists fail to acknowledge is that companies with big sites can't afford to change the entire site in one go. There is no clean-slate approach to revamping these sites. Projects are broken up into little phases of deliverables. Sometimes there's a three month project to change a tiny part of the page measuring not more than 250 pixels by 32 pixels. Full site redevelopment is practically a non-starter.</p>

<p>What is worse, is when these webdevelopers see lame articles about how CSS is much better than tables for layout, they only need to see though the nonsense of one single argument to realise that these articles lack substance and real world evidence. And when measured against the harsh realities of an existing website, these arguments are ridiculous and serve only to distance developers from using CSS. And so the status quo remains.</p>

<h3>Advice for CSS evangelists</h3>

<p>CSS evangelists, consider the merits of your arguments thoroughly. You'll find that CSS isn't better than tables for layout; it's just different. Just a different set of trade-offs and compromises. Deepen your understanding of CSS, especially it's shortcomings, limitations and it's compromises.</p>

<p>Belief doesn't build websites. Toil and sweat produce websites. Belief doesn't get things working. If you only believe CSS is better than tables for layout, then perhaps you aren't the person who should be evangelising to people who have a solid track record of delivering real websites with layout tables.</p>

<p>Be prepared to back up every single one of your arguments. There is nothing worse than an evangelist who doesn't have the knowledge, practical experience or evidence to back up his claims.</p>

<p>And most importantly, understand the web as it exists today. The past and the present cannot be forgotten. The future is something we can aim for, but not at the expense of a business continuity.</p>


<p>Maybe these CSS evangelists need a break from the kool-aid? That would be a start. Perhaps then a rationale dialogue will be possible.</p>

<p>The guys behind Chromatic sites perhaps should spend less time exhorting the perceived advantages of CSS and how easy it all is and spend more time fixing the CSS issues on their own site. Some people talk the talk, but don't walk the walk.</p>]]></content:encoded>
		<dc:subject>Web Standards</dc:subject>
		<dc:creator>Isofarro</dc:creator>
		<dc:date>2009-03-09T15:25+01:00</dc:date>
	</item>
	<item rdf:about="http://www.isolani.co.uk/blog/reviews/RestfulPhpWebServices">
		<title>Restful PHP Web Services</title>
		<link>http://www.isolani.co.uk/blog/reviews/RestfulPhpWebServices</link>
		<content:encoded><![CDATA[<p>Title: <a href="http://www.amazon.co.uk/gp/product/1847195520?ie=UTF8&amp;tag=getsmalea-21&amp;link_code=as3&amp;camp=2506&amp;creative=9298&amp;creativeASIN=1847195520">Restful PHP Web Services</a><br />
Author: Samisa Abeysinghe<br />
Publisher: Packt Publishing<br />
Publish Date: October 2008</p>

<p>Disclaimer: I received a review copy of this book from Packt Publishing in December 2008.</p>

<p><img src="http://ecx.images-amazon.com/images/I/51d2CqPOy8L._SL500_AA240_.jpg" alt="Restful PHP Web Services: " height="240" width="240" class="bookPic" /> Restful Web services is an often-heard buzzword on the Web, and it is fairly disappointing that the real essence of what makes a Rest web service is frequently misunderstood. Unfortunately Restful PHP Web Services doesn't get it right and is littered with errors that negatively impact the content itself.</p>

<h3>Rest is not RPC</h3>

<p>A book that asserts Flickr as an example of a Rest web service is going to start off on the wrong foot. Unfortunately the book spends several pages detailing how to operate with that particular service as a working example of a Rest-based service.</p>

<p>The API is basically one single endpoint (<code>http://api.flickr.com/services/rest/</code>), with a collection of parameters (including one called method) that dictate what operation is being performed on what resource. This is the typical Remote Procedure Call; the URL space is broken down by function, not resources.</p>

<p>The fundamental principle of Rest is that the HTTP methods define the operation to perform on a representation of a resource at a particular URL. Flickr gets it wrong because URLs don't map to representations of resources, nor uses HTTP verbs as the mechanism for performing operations. It is just Remote Procedure Call.</p>

<p>Why use Flickr, why not use a real Rest web service, like Wordpress' implementation of the Atom Publication Protocol? At best Flickr is an API over HTTP, at worst it is a Remote Procedure Call.</p>


<h3>Rest is about hyperlinks</h3>

<p>Rest is about mapping representations of resources onto URLs. The Flickr API fails to do this, and to actually retrieve an image from their API you have to manually construct a URL to that image; it isn't returned to you by the API. Witness the following logic:</p>

<pre><code>
$image_url = 'http://farm' . $attributes['farm'] . 
	'.static.flickr.com/' . $attributes['server'] . '/' .
	$attributes['id'] . '_' . 
	$attributes['secret'] . '.jpg';
</code></pre>

<p>If a client has to construct a URL in this way to obtain a representation
of a resource, that API isn't Restful.</p>


<h3>Post or Put</h3>

<p>The book improves slightly by covering the principles of Rest, but not much. It specifies POST as a means for updating a representation, and PUT as the way to create resources. The real distinction is more complicated. PUT can do both <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6">create and update</a>, POST is used to <q>request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI</q>, which means it is suitable for adding new resources. Particularly Atom uses POST on a collection to create a new member, and PUT to update an existing member.</p>

<h3>Content types</h3>

<p>There is no mention of content types when dealing with Rest resources. This means that a Rest client has to know what kind of representation he is getting back, because the content-type information is useless for helping determine that. Just imagine how the web would work without content types - it would be a mess.</p>

<p>With Atom we had specific content types for an Atom Entry and Feed, and a different content type for the Atom Service Document that described the collections available.</p>


<h3>Curl</h3>

<p>A useful section of the book covers using CURL to talk to servers. It is fairly useful as a starting point, but either the material is out of date or just plain wrong. Doing a GET with the code supplied did work but emitted a warning on PHP5 that there wasn't a CURL option called <code>CURLOPT_GET</code>. Sure enough, checking <a href="http://uk2.php.net/manual/en/function.curl-setopt.php">the documentation</a> and there is no mention of this option. The code only worked because GET is the default HTTP method.</p>

<p>Even worse is the sample code for doing a PUT, this involves writing out the data to the filesystem and then sending the filename as a parameter using <code>CURLOPT_INFILE</code>. Digging around I found the more natural solution of using <code>CURLOPT_POSTFIELDS</code>, so it is not clear why the author had offered the convoluted file creation method and not even noting the better methods.</p>

<p>However useful it is to have simple working code examples of both server and client aspects of Rest, it doesn't help to ignore Rest principles in doing so. In the code sample for a PUT the author has a PHP script that is used for the URL of the resource and then claims that a PHP script is a representation of the resource. Which it isn't. A representation of a resource is data, not a piece of code that executes on that data.</p>

<h3>Building a Rest service</h3>

<p>The example of a library is a decent worked example of implementing Rest clients and Rest servers. However, the design and implementation skimp on architectural correctness and the code itself is just below par.</p>

<p>The architecture is relatively straightforward, there's a collection for users, a collection of books, and a collection of books being leant out to users.</p>

<ul>
	<li>Checking out a book involves a POST a book id to a collection inside the user collection. However, the content is the book id, and so there is no URL reference to the actual book. So one could not have a Rest client list the title of the book being leant to a user. Nor could you take any book and see if it had been checked out by anyone.</li>
	<li>The author can't decide whether he is writing HTML or XHTML, and the  code examples regularly change from one to the other.</li>
	<li>The URL map presented actually differs from the URL map of the actual implementation. It felt like the author didn't get around to explaining mod_rewrite, and hoped that the Path info approach would be accepted unquestioningly.</li>
</ul>

<h3>Teaching by bad example</h3>

<p>I tried hard to find something to like about this book. The Curl I found useful as a starting point, but I quickly realised that the author's knowledge, or working code was too sub-standard to be followed and eventually I had to sit with the PHP documentation to really figure out how to use Curl properly.</p>

<p>As a book about Rest web services in PHP this book falls short of any acceptable mark. I don't think it is acceptable to teach the wrong thing first until a certain level of understanding has been reached before then teaching them the right thing. This undoes any confidence or learning knowing that things need to be unlearned before continuing. Unfortunately this process isn't made clear, and many people will learn things about Rest that are not correct.</p>

<p>It does bother me when Rest is misrepresented in this way, because Rest is such an elegant architecture when it is allowed to be itself.</p>


<p>As an alternative to this book, I'd rather recommend <a href="http://www.amazon.co.uk/gp/product/0596529260?ie=UTF8&amp;tag=getsmalea-21&amp;link_code=as3&amp;camp=2506&amp;creative=9298&amp;creativeASIN=0596529260">RESTful Web Services</a> by Leonard Richardson and <a href="http://intertwingly.net/">Sam Ruby</a>, and of course, anything written by <a href="http://roy.gbiv.com/untangled/">Roy Fielding</a>.</p>

]]></content:encoded>
		<dc:subject>Book Reviews</dc:subject>
		<dc:creator>Isofarro</dc:creator>
		<dc:date>2009-02-23T07:56+01:00</dc:date>
	</item>
	

</rdf:RDF>