<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Keith Cirkel, a contractor in frontend web development, shares his expertise in the industry; including JavaScript, HTML, browsers, backend technologies and server-administration</description><title>Keith Cirkel</title><generator>Tumblr (3.0; @keithcirkel)</generator><link>http://blog.keithcirkel.co.uk/</link><item><title>What to expect from a world without IE6.</title><description>&lt;p&gt;It&amp;#8217;s no secret that developers across the globe resent Internet Explorer. It&amp;#8217;s disregard for standards are a burden, often requiring a parallel development effort just to cater for its inadequacies. Newer versions aren&amp;#8217;t much better, and in some cases exacerbate the problem. This year saw &lt;a href="http://www.w3schools.com/browsers/browsers_explorer.asp"&gt;Internet Explorer 6 drop below 10%&lt;/a&gt;, and &lt;a href="http://googleenterprise.blogspot.com/2010/01/modern-browsers-for-modern-applications.html"&gt;Google has dropped support for it&lt;/a&gt;; and (perhaps most importantly) the upcoming release of &lt;a href="http://ie.microsoft.com/testdrive/"&gt;Internet Explorer 9&lt;/a&gt;, what can we expect to see changing?&lt;/p&gt;
&lt;!-- more --&gt;
&lt;h2&gt;The fall of Internet Explorer 6&lt;/h2&gt;
&lt;p&gt;Without a doubt Internet Explorer 6, a browser nearly as old as this millennia, is wrought with the most problems &amp;#8212; as to be expected. With Internet Explorer 6 out of the picture we can finally start to use some of the great technologies CSS2 has brought us:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;CSS Event Selector Support (well, just :hover)&lt;/strong&gt; - IE6, unfortunately, has spotty support for even the most basic selectors. &lt;em&gt;:hover&lt;/em&gt; and &lt;em&gt;:active&lt;/em&gt; only work on anchor tags, &lt;em&gt;:focus&lt;/em&gt; support is non existent, alongside &lt;em&gt;:before&lt;/em&gt; and &lt;em&gt;:after&lt;/em&gt;. Unfortunately Internet Explorer 7 doesn&amp;#8217;t really improve much on this, except for with &lt;em&gt;:hover&lt;/em&gt;. But &lt;em&gt;:hover&lt;/em&gt; is still a huge improvement, so worthy of going on this list.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS HTML Selector Support&lt;/strong&gt; -  HTML Selector support gives support traversal and attribute rules, such as &lt;em&gt;*&lt;/em&gt; (which IE6 does support), &lt;em&gt;+&lt;/em&gt; (select the adjacent element, for example &lt;em&gt;li.first + li{}&lt;/em&gt; or &lt;em&gt;&amp;gt;&lt;/em&gt; (select only the direct children, for example &lt;em&gt;ul &amp;gt; li{}&lt;/em&gt;). Add on to this the &lt;em&gt;:first-child&lt;/em&gt; selector, and you can drop a lot of your HTML class names (think &lt;em&gt;ul:first-child&lt;/em&gt; as opposed to &lt;em&gt;li.first&lt;/em&gt;). Also included in this list is the &lt;em&gt;[attr=]&lt;/em&gt; rules, which version 7 has full support for. This means no more classing your inputs, you can just add a rule such as &lt;em&gt;input[name=&amp;#8221;submit&amp;#8221;]{margin:10px}&lt;/em&gt;, and it&amp;#8217;ll work across the range of browsers. Beautiful.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS3 Selectors&lt;/strong&gt; - As crazy as this might sound, IE7 actually supports some CSS3 selectors, so dropping IE6 will give you the ability to use advanced CSS3 selectors, such as &lt;em&gt;~&lt;/em&gt; (which is like +, but + only selects the next sibling (so a limit of 1), where as ~ selects any following siblings). CSS3 also brought support for advanced &lt;em&gt;[attr=] &lt;/em&gt;selectors, so you can use semi-regex pattern matching such CSS as &lt;em&gt;a[href^=&amp;#8221;http://&amp;#8221;].&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Max-Width, Max-Height CSS Rules - &lt;/strong&gt;I think these are self explanatory, but IE6 is missing support for all but a tiny fraction of these rules, while IE7+ and the rest of the world support them perfectly. Dropping IE6 means you can finally flex your &lt;em&gt;max-* &lt;/em&gt;muscle, which means more intuitive scalable web pages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PNG support&lt;/strong&gt; - Ok, IE6 does support PNGs: badly - it messes up with the palettes in PNG8 files, and worse so, does not support Alpha transparency in PNG-24 files. If you&amp;#8217;re developing for the web, you likely know just how useful Alpha Transparent images are, but &lt;a href="http://homepage.ntlworld.com/bobosola/pngtest.htm"&gt;here is a concise summary&lt;/a&gt;. Now, you can hack PNG support into IE6, using Javascript and Microsofts own CSS filter rules, but you&amp;#8217;re just adding cruft and maintenance issues which can become a headache. Dropping IE6 from your vocabulary will mean you can finally stop using GIFs and switch for PNG8 and PNG24, and live a happy existence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ABBR Tag&lt;/strong&gt; - Ok, not a big one, but still useful: IE7 recognised the abbreviation tag, improving on IE6&amp;#8217;s support of - well, ignoring it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Support for fixed backgrounds&lt;/strong&gt; - Another small bug significant improvement, is IE7&amp;#8217;s support for &lt;em&gt;background-position: fixed&lt;/em&gt;. Allowing the background to stay fixed on the screen while the user scrolls.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Less use of hacks&lt;/strong&gt; - It almost goes without saying, but the improvements made in Internet Explorer 7 have allowed developers to use less &amp;#8220;hacks&amp;#8221; to support later versions of IE: no more frustrating box-model bug, decent CSS selector support, PNG support! So when IE6 finally dissapears, you can expect less &amp;lt;!if ie[lt]7&amp;#8212;&amp;gt; comments, and less CSS/Javascript hacks. This all amounts to less code, meaning less maintenance, meaning you get to spend more time doing the cool stuff than figuring out how to get IE6 working with your new site.&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;Can you drop Internet Explorer 6 support though?&lt;/h4&gt;
&lt;p&gt;In my mind, yes! There is very little reason to continue supporting IE6, Google haven&amp;#8217;t since March. &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=9AE91EBE-3385-447C-8A30-081805B2F90B&amp;amp;displaylang=en"&gt;Windows XP users can upgrade to IE7&lt;/a&gt;. Microsoft has issued automatic updates for IE7 to Home and &lt;a href="http://www.infoworld.com/t/applications/microsoft-warns-businesses-impending-autoupdate-ie7-628"&gt;Corporate&lt;/a&gt; users, and even removed the &lt;a href="http://www.techspot.com/news/27330-wga-removed-from-internet-explorer-7-update.html"&gt;WGA requirement from IE7&lt;/a&gt;, so even pirated versions of Windows XP can get Internet Explorer 7. IE6 has seen a fairly steady decline in userbase (around 1% per month) which means by December 2010 IE6 could match the userbase of browsers such as Opera 9, and IE5 - perhaps it will see an even faster decline after the release of Internet Explorer 9. By then, IE6 usage could well be lower than Firefox 2.*, Mozilla 1.*, Seamonkey 1.*, Safari 3.* and Opera 9.*. How many of those browsers do you support now? If you don&amp;#8217;t want to take into account the usage statistics, how about age? IE6 was released in 2001. Mozilla Firefox 1.0 was released in 2004, Netscape 7 in 2002, Netscape Navigator 4.8: 2002, Opera 6.0: 2002, Safari 1.0: 2003. How many of these do you support? I think the answer is clear.&lt;/p&gt;
&lt;h2&gt;Leaving Internet Explorer 7 behind&lt;/h2&gt;
&lt;p&gt;It is a bold suggestion right now to ditch Internet Explorer 7. IE7 was released in 2006: a 4 year old browser, aeons in computer years. But what would dropping IE7 even give you? What does IE8 have to offer?&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Full CSS Event Selector Support&lt;/strong&gt; - As opposed to lackadaisical approach with event selectors, IE8 gives it the &lt;em&gt;college try&lt;/em&gt;. &lt;em&gt;:hover&lt;/em&gt; and &lt;em&gt;:active&lt;/em&gt; are supported for all elements, not just anchor tags. &lt;em&gt;:focus&lt;/em&gt; is fully supported. No more Javascript hacks for you!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Full CSS HTML Selector Support&lt;/strong&gt; - Selector support becomes more inline with other browers, including adding the &lt;em&gt;:before&lt;/em&gt; and &lt;em&gt;:after&lt;/em&gt; tags. These tags let you add an image, or text before or after an element. Adding to this, it supports the &lt;em&gt;content: &lt;/em&gt;declaration married to this selector.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Counter declaration support&lt;/strong&gt; - This is a cool but seldom used declaration among the CSS2 ranks. Counter lets you assign list-style-type elements to any HTML element. This &lt;em&gt;is&lt;/em&gt; actually more useful than it sounds. Consider &lt;em&gt;h2:before{content:counter(section) &amp;#8220;. &amp;#8220;;}&lt;/em&gt; which will give every H2 element a number i.e turning &amp;#8220;Heading&amp;#8221; into &amp;#8220;1. Heading&amp;#8221;, or perhaps this: &lt;em&gt;img.fig:after{content:&amp;#8221;Figure &amp;#8221; counter(example,lower-alpha);}&lt;/em&gt; which would put, for example, &amp;#8220;Figure a.&amp;#8221; after every &lt;em&gt;&amp;lt;img class=&amp;#8221;fig&amp;#8221;&amp;gt;&lt;/em&gt; element. Nifty, no?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Greater List-Style-Type Support&lt;/strong&gt; - Speaking of List-Style-Type, IE8 comes with additional types according to the CSS 2.1 spec including &lt;em&gt;decimal-leading-zero&lt;/em&gt; (01., 02.), &lt;em&gt;lower-greek&lt;/em&gt; (α, β) and some of the more obscure such as &lt;em&gt;georgian&lt;/em&gt; (ა, ბ) and &lt;em&gt;armenian&lt;/em&gt; (ա, բ).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;More declarations&lt;/strong&gt; - IE8 supports lots of other useful decelerations, for example &lt;em&gt;outline &lt;/em&gt;(think borders that don&amp;#8217;t move the element), the fantastic &lt;em&gt;display:inline-block&lt;/em&gt; (think a grid of icons on a page), and full support for the &lt;em&gt;white-space&lt;/em&gt; declaration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finaly, full CSS 2.1 Compliance&lt;/strong&gt; - You can pretty much sum up all of the above into one, strong point: fully compliant CSS 2.1 support. IE8 passes the &lt;a href="http://acid2.acidtests.org/"&gt;Acid2 Test&lt;/a&gt;, (although it gets a miserable 12/100 on Acid3). Hurray!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;localStorage and sessionStorage&lt;/strong&gt; - One pretty important feature to HTML5 will be localStorage - the ability to store key/value storage in the browser, without using cookies. localStorage differs from Cookies in that it has no expiration, it is not send with every page request, can be pulled (very easily) on demand with Javascript, and it can store a huge amount more data (Each cookie can store 4kb, localStorage can store 10mb on IE8). sessionStorage is just like localStorage, but is cleared when the session is gone (i.e window closing). localStorage is an impressive feature of HTML5, although only the latest versions of many browsers support it (Firefox 3.5+, Safari 4+, Chrome 4+).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data-URI support&lt;/strong&gt; - In case you don&amp;#8217;t know what data-uris are, they are strings that make up part of a binary file, usually an image. For example, a data-uri for a PNG image might look like this &lt;em&gt;data:image/png;base64,iVBORw0KGg&amp;#8230;&lt;/em&gt; This will then render that particular image as if it was a file. This is incredibly useful for small, compact pages - where you need a single image in an instance, or if you are needing to reduce server load through HTTP requests. You can embed data-uris into CSS and HTML, for example: &lt;em&gt;&amp;lt;img src=&amp;#8221;data:image/png;base64,iVBORw0KGg&amp;#8230;&amp;#8221;&amp;gt; &lt;/em&gt;or &lt;em&gt;div{background:url(data:image/png;base64,iVBORw0KGg&amp;#8230;)}.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;When can we rid of Internet Explorer 7?&lt;/h4&gt;
&lt;p&gt;Internet Explorer 7 is definitely on its way out. IE8 is taking place of IE7, as it is available for download on Windows XP, once again without the need for WGA. IE8 comes default on &lt;a href="http://www.microsoft.com/windows/windows-7/default.aspx"&gt;Windows 7&lt;/a&gt;, which seems to be taking the world by storm. IE8 is certainly in a position to replace IE7 in every way. IE7&amp;#8217;s userbase is only around 2% higher than IE6, and seems to remain in-line with IE6 as it falls, and with IE8 as it rises. As soon as May 2010 we could see IE7 drop below the 10% userbase threshold, and it could be as low as 2% by 2011, falling behind Opera. IE7&amp;#8217;s reign will most certainly last shorter than IE6, and rightly so. By this time next year, IE7 could be all but gone.&lt;/p&gt;
&lt;h2&gt;Getting Ready for Internet Explorer 9&lt;/h2&gt;
&lt;p&gt;Internet Explorer 9 was announced not so long ago, with impressive improvements in almost every field. When IE9 hits and has a significant userbase (lets dream here and say enough to put IE6/7/8 out of the picture), our internet lives will be a lot richer:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Full CSS3 Selector Support&lt;/strong&gt; - What? Internet Explorer 9 will fully support CSS3, ahead of time? &lt;a href="http://ie.microsoft.com/testdrive/benchmarks/CSS3info/Default.html"&gt;Pinch me. But its true&lt;/a&gt;. Not only is that the case, but it actually passes every single selector test on &lt;a href="http://www.css3.info/"&gt;css3.info&lt;/a&gt;. That puts it in line with Chrome 4, Safari 4, Firefox 3.5 and Opera 10! Advanced selectors like &lt;em&gt;:last-child&lt;/em&gt;, &lt;em&gt;:nth-child()&lt;/em&gt;, &lt;em&gt;:nth-of-type()&lt;/em&gt;, &lt;em&gt;:empty&lt;/em&gt;, &lt;em&gt;:target&lt;/em&gt;, &lt;em&gt;:disabled&lt;/em&gt;. These selectors will allow you to stop using Javascript to style pages for everything except animations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Support for CSS3 Colour Levels&lt;/strong&gt; - Additions to CSS3 include the ability to set &lt;em&gt;rgb(), rgba()&lt;/em&gt;,&lt;em&gt; hsl()&lt;/em&gt; and &lt;em&gt;hsla()&lt;/em&gt; colours. IE9 supports these. These apply to any declaration of colour, be it border, background or text.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New CSS3 border &amp;amp; shadow declarations&lt;/strong&gt; -&lt;a href="http://ie.microsoft.com/testdrive/HTML5/01BorderRadius/Default.html"&gt;&lt;em&gt;border-radius&lt;/em&gt; is supported.&lt;/a&gt; As is &lt;em&gt;border-image&lt;/em&gt;. Sadly &lt;em&gt;text-shadow&lt;/em&gt; and &lt;em&gt;box-shadow&lt;/em&gt; aren&amp;#8217;t (in the developer preview yet). Fingers crossed they will be!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTML5 Tags&lt;/strong&gt; - Perhaps most impressively, IE9 will support HTML5 tags such as &lt;em&gt;&amp;lt;video&amp;gt;&lt;/em&gt; and &lt;em&gt;&amp;lt;audio&amp;gt;.&lt;/em&gt; Yay!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SVG Support&lt;/strong&gt; - Internet Explorer 9 will support Scalable Vector Graphics embedded in pages, this means where you don&amp;#8217;t need photographic images, you can use vectors instead. This will turn to be a massive improvement to the web as we know it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;XHTML&lt;/strong&gt; - Finally, at long last, IE9 will support true XHTML. This means advocates of XHTML can finally begin to use XHTML as it was meant to be used: as xml. Confused? &lt;a href="http://blog.keithcirkel.co.uk/2010/03/xhtml-why-everyone-wants-it-but-you-shouldnt-use-it/"&gt;Read my previous post&lt;/a&gt; on XHTML.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JPG XR, TIFF, Colour Profiles&lt;/strong&gt; - IE9, catching up and overtaking some browsers, will support &lt;a href="http://ie.microsoft.com/testdrive/Graphics/48ImageSupport/Default.html"&gt;JPG XR and Tiff Images&lt;/a&gt; as well as support ICC &lt;a href="http://ie.microsoft.com/testdrive/Graphics/49ColorProfiles/Default.html"&gt;colour profiles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;When will Internet Explorer 9 make our dreams come true?&lt;/h4&gt;
&lt;p&gt;Here&amp;#8217;s the stinger. IE9 isn&amp;#8217;t set to be released until late 2010. By which time hopefully you&amp;#8217;ll have ditched IE6 and possibly IE7. Unfortunately IE8 will still be around for atleast another year - possibly longer as it supports CSS 2.1, corporate users stuck in there ways (those ones that wouldnt budge off of IE6 for ages) will likely be afraid to move off of IE8 for a good while. To further add sting, IE9 wont be supported on XP, meaning we&amp;#8217;ve got to get rid of a whole population of Windows XP users before we can think about entertaining all the wonderful elements of a full family of standards compliant CSS3, SVG, XHTML browsers. HTML5 and CSS3 aren&amp;#8217;t official standards yet either, so don&amp;#8217;t get too excited about seeing those with wide support just yet (most browsers still use their vendor prefixes, such as &lt;em&gt;-moz-&lt;/em&gt; for CSS3 rules). We are, however, seeing a rapid acceleration in the advancement of the web. HTML4 is getting long in the tooth now, and so it is about time to get some excellent new features. I personally can&amp;#8217;t wait.  Besides, I wouldn&amp;#8217;t waste too much time on wondering when IE9 will come out &amp;#8212; you&amp;#8217;ve got plenty of CSS3 to learn before then&amp;#8230;&lt;/p&gt;</description><link>http://blog.keithcirkel.co.uk/post/6048114440</link><guid>http://blog.keithcirkel.co.uk/post/6048114440</guid><pubDate>Sun, 11 Apr 2010 12:22:16 +0100</pubDate></item><item><title>XHTML: Why everyone wants it but you shouldn't use it</title><description>&lt;p&gt;Everyone is asking for it these days. Go onto freelance boards, talk to clients, even on job boards, clients &amp;amp; companies are requiring their developers to know XHTML. The problem is, XHTML isn&amp;#8217;t what everyone thinks it is, and that isn&amp;#8217;t going to change any time soon.&lt;/p&gt;
&lt;h2&gt;&lt;!-- more --&gt;Why Everyone Wants XHTML&lt;/h2&gt;
&lt;p&gt;Back in the dark days of the web, developers were using HTML, and a lot were using it badly. HTML, like many languages, allows the user to make a real mess of it &amp;#8212; and as W3Schools.com quite happily states: &lt;a href="http://www.w3schools.com/xhtml/xhtml_why.asp"&gt;&amp;#8220;Many pages on the internet contain &amp;#8220;bad&amp;#8221;&lt;/a&gt; HTML.&amp;#8221;&lt;/p&gt;
&lt;h4&gt;Bad HTML&lt;/h4&gt;
&lt;p&gt;Technically, the HTML standard was a mess; &lt;a href="http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.1"&gt;tags didn&amp;#8217;t have to close&lt;/a&gt;, there was a &lt;a href="http://www.w3schools.com/tags/tag_basefont.asp"&gt;whole&lt;/a&gt; &lt;a href="http://www.w3schools.com/tags/tag_center.asp"&gt;range&lt;/a&gt; &lt;a href="http://www.w3schools.com/tags/tag_dir.asp"&gt;of&lt;/a&gt; &lt;a href="http://www.w3schools.com/tags/tag_font.asp"&gt;useless&lt;/a&gt; &lt;a href="http://www.w3schools.com/tags/tag_strike.asp"&gt;tags&lt;/a&gt; &lt;a href="http://www.w3schools.com/tags/tag_u.asp"&gt;which&lt;/a&gt; vacillate in and out of popularity, and lots of down right &lt;a href="http://en.wikipedia.org/wiki/Marquee_element"&gt;annoying&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Blink_element"&gt;tags&lt;/a&gt;. Things have been slowly fixed, and HTML 4.01 is a lot cleaner than its predecessors, but &amp;#8220;back in the day&amp;#8221; (circa 1995-7) no one could say HTML was a good language.  Couple this with the plethora of horrible WYSIWYG HTML editors, the likes of &lt;a href="http://en.wikipedia.org/wiki/Microsoft_FrontPage"&gt;Microsofts FrontPage&lt;/a&gt; (shudder) and &lt;a href="http://www.adobe.com/products/dreamweaver/"&gt;DreamWeaver&lt;/a&gt; which frankly butcher any semblance of sensible mark-up, and you have a real recipe for disaster.&lt;/p&gt;
&lt;h4&gt;Birth of XHTML&lt;/h4&gt;
&lt;p&gt;HTML also uses a loose form of the &lt;a href="http://www.w3.org/TR/REC-html40/intro/sgmltut.html"&gt;SGML standard&lt;/a&gt; (because XML didn&amp;#8217;t exist in 1995 when HTML was created), which allowed all of this mess to happen. Around 1997 the W3C realised the failings of HTML, and in part SGML and began working on a beautiful subset of SGML called &lt;a href="http://www.w3.org/XML/"&gt;XML&lt;/a&gt;. XML is the simpler, more restricted (&lt;a href="http://www.w3.org/TR/xhtml1/diffs.html"&gt;in a good way&lt;/a&gt;) offspring of SGML that was really needed to truly standardise machine readable documentation. XML was, for all intents and purposes, the saviour of &lt;a href="http://xml.coverpages.org/xmlApplications.html"&gt;open documentation&lt;/a&gt;.  So, with this cool new tool, W3C set to work on creating a subset of HTML using the XML standard. &lt;a href="http://www.w3.org/TR/xhtml1/"&gt;XHTML&lt;/a&gt; was born from this. XHTML took away pretty much all the crap that lurked in HTML. All those &lt;a href="http://www.w3schools.com/tags/default.asp"&gt;annoying and useless tags were deprecated&lt;/a&gt;, &lt;a href="http://www.w3.org/TR/xhtml1/#h-4.3"&gt;tags had to close properly&lt;/a&gt;, and because of its use of the much simpler XML format, it was much easier to maintain, implement and extend.  So, back in 2000 when XHTML became an official standard, people rejoiced, we had a strict, properly typed, decent implementation of HTML. Thanks to its simplicity and strict rules, it could be rendered much faster compared to (bad) HTML, and it was easier to read thanks to the enforcement of lower case tags and proper closing. Who wouldn&amp;#8217;t want to use it?  Popularity rose for XHTML and developers quickly learnt the new standard. I admit I was one of the proponents too. XHTML was the buzzword of the 2000s, but it didn&amp;#8217;t turn out to be the panacea people had hyped it up to be&amp;#8230;&lt;/p&gt;
&lt;h4&gt;HTML 4.01&lt;/h4&gt;
&lt;p&gt;The popularity of this new language meant a lot of the &amp;#8220;cutting edge&amp;#8221; developers didn&amp;#8217;t even &lt;em&gt;notice&lt;/em&gt; the release of HTML 4.01 - a release which mirrored the decisions of XHTML, minus the, y&amp;#8217;know, XML part. In fact XHML 1.0 and HTML 4.01 had an &lt;a href="http://www.w3schools.com/tags/default.asp"&gt;identical tag set&lt;/a&gt;, and could have pretty much identical looking code, minus a few slashes. Infact, HTML 4.01 was released as a standard a month earlier than XHTML. My feeling is that because these were released so close together, a big part of the perceived improvement of XHTML made was actually the improvement made from HTML in general.&lt;/p&gt;
&lt;h2&gt;Why you shouldn&amp;#8217;t use it&lt;/h2&gt;
&lt;p&gt;So by now we realise XHTML is pretty much HTML 4.01 but uses XML, which is faster, and simpler, and better. What gives? Why shouldn&amp;#8217;t you use XHTML then?&lt;/p&gt;
&lt;h4&gt;XHTML as HTML&lt;/h4&gt;
&lt;p&gt;Here&amp;#8217;s the kicker - XHTML kinda doesn&amp;#8217;t work all that well. See, with all the great work W3C does to bring the web forward, the biggest browser vendors around at the time are the true judge of how far forward we go. Want proof, just look at the current &lt;a href="http://www.0xdeadbeef.com/weblog/2010/01/html5-video-and-h-264-what-history-tells-us-and-why-were-standing-with-the-web/"&gt;HTML5 Video debacle&lt;/a&gt;. In 2000 when &lt;a href="http://www.thecounter.com/stats/2000/January/browser.php"&gt;Internet Explorer had 80-90%&lt;/a&gt; of the market, it was the ultimate decider on these matters. For whatever reasons Microsoft had, it released Internet Explorer 6 in 2001, without XHTML support. To rephrase that for emphasis, &lt;strong&gt;Internet Explorer 6 does not support XHTML&lt;/strong&gt;. Also, in fact, the latest version of Internet Explorer to support &lt;a href="http://blogs.msdn.com/ie/archive/2010/03/16/html5-hardware-accelerated-first-ie9-platform-preview-available-for-developers.aspx"&gt;XHTML is 9&lt;/a&gt;, which isn&amp;#8217;t released yet. &lt;strong&gt;Awesome&lt;/strong&gt;.  In the &lt;em&gt;extreme wisdom&lt;/em&gt; of web designers all over (including me, &lt;em&gt;sarcasm btw&lt;/em&gt;), XHTML documents would be passed off as &amp;#8220;text/html&amp;#8221;, so they could be rendered in Internet Explorer. This means all browsers see these documents as HTML, not XHTML. This is important because anything you expect to happen in XHTML that doesn&amp;#8217;t in HTML, wont happen. Anything you expect not to happen in XHTML that does happen in HTML, will, of course, happen. So to put it blankly - &lt;strong&gt;virtually no body uses XHTML&lt;/strong&gt;, lots of people incorrectly use XHTML as HTML. Doing this is a &lt;a href="http://hixie.ch/advocacy/xhtml"&gt;really bad idea&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;HTML is better&lt;/h4&gt;
&lt;p&gt;Thanks to the mess of HTML prior to 4.01, and the mess of XHTML as HTML, all the browsers today have a &amp;#8220;&lt;a href="http://en.wikipedia.org/wiki/Quirks_mode"&gt;quirks mode&lt;/a&gt;&amp;#8221;, which is a polite way of saying a way to deal with crap code. Quirks Mode tries to overcome the inadequacies of the HTML document it is rendering, which includes typos, missing tags, missing attributes for tags, added slashes (think &amp;lt;br/&amp;gt;) and lots of other idiosyncrasies.  XHTML doesn&amp;#8217;t do this - because of its strict XML definitions, &lt;a href="http://xhtml.com/en/xhtml/serving-xhtml-as-xml/"&gt;an invalid XHTML document won&amp;#8217;t render&lt;/a&gt; (&lt;a href="http://www.w3.org/TR/2004/REC-xml-20040204/#dt-fatal"&gt;see also W3C&lt;/a&gt;). This is a double edged sword - it&amp;#8217;s good because it is programatically correct - as the xhtml.com article states, you wouldn&amp;#8217;t expect a C++ or PHP application to run on bad code, so why XHTML? The problem lies in that it can be excruciatingly difficult to create valid XML code. Small pages are easy, but imagine a blog - where you have to ensure every post on that blog uses valid XHTML, and every comment inside every post does the same. Suddenly you have turned your life into a never-ending user support nightmare, having to validate (or atleast check) every new post or page that gets a new comment.&lt;/p&gt;
&lt;h4&gt;Don&amp;#8217;t use it!&lt;/h4&gt;
&lt;p&gt;So, history lessons aside, why shouldn&amp;#8217;t you use XHTML? Lets break it down:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;XHTML is not supported by Internet Explorer&lt;/strong&gt;. IE9 is the first release to support it. Cutting your userbase by 90% is usually not a good idea.&lt;/li&gt;
&lt;li&gt;XHTML rendered as HTML can introduce annoying problems &amp;amp; incompatibilities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;When you do actually use XHTML properly, it can break very easily. &lt;/strong&gt;This won&amp;#8217;t change either - it is meant to by design.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proper XHTML becomes difficult to maintain when users introduce new code all the time&lt;/strong&gt;. Sure there is lots you can put in place to prevent invalid code being introduced - but it all adds up&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bad Javascript will break XHTML documents.&lt;/strong&gt; For example, any code with document.write() in it which includes Google Adsense by the way!&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Not very compelling now is it? But what about all the benefits of XHTML? Well, for the most part, the main benefits of XHTML carry over perfectly into HTML. I recommend you take the lessons XHTML provides, and put them to good use in HTML:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Always use lower case tag &amp;amp; attribute names.&lt;/strong&gt; It just makes it so much more readable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quote your attribute values&lt;/strong&gt;. It will help a lot when using Syntax-Highlighting in your development environment to do so.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Close your tags&lt;/strong&gt;. You should do this anyway to ensure your HTML is given the best chance of rendering in all browsers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Properly doctype your HTML. &lt;/strong&gt;This plus closing your tags allows the browser to render your code in &amp;#8220;No Quirks&amp;#8221; mode, lowering the chance of browser incompatibilities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spend time to validate your documents. &lt;/strong&gt;Using the W3C validator service to validate your documents is a good way to make the best of HTML&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;Still want XHTML?&lt;/h4&gt;
&lt;p&gt;If you&amp;#8217;re still adamant about using XHTML, then atleast use it right. Use &lt;a href="http://php.about.com/od/learnphp/p/http_user_agent.htm"&gt;server-side user agent sniffing&lt;/a&gt; or even better;&lt;a href="http://www.w3.org/2003/01/xhtml-mimetype/content-negotiation"&gt; content negotiation&lt;/a&gt; to detect if you are serving to Internet Explorer (or other non-xml-able browsers), and if so serve an HTML document, otherwise serve XHTML with the &amp;#8220;application/xml&amp;#8221; or &amp;#8220;application/xhtml+xml&amp;#8221; mime tag.  Remember, if you code proper HTML, and code it as well as you would XHTML, all you&amp;#8217;re missing out on is your &amp;lt;br&amp;gt; and &amp;lt;img&amp;gt; tags being &amp;lt;br/&amp;gt; and &amp;lt;img/&amp;gt;, but what you gain is flexibility and graceful error handling.&lt;/p&gt;</description><link>http://blog.keithcirkel.co.uk/post/5998205466</link><guid>http://blog.keithcirkel.co.uk/post/5998205466</guid><pubDate>Sat, 27 Mar 2010 12:38:00 +0000</pubDate></item><item><title>Swapping out your LAMP stack</title><description>&lt;p&gt;The LAMP stack is the backbone of the web these days - every hosting provider uses it, sometimes exclusively. Many think their only other option is a WIMA (Windows, ISS, MSSQL, ASP) but in fact there are a whole wealth of options to choose from. When you have the freedom to pick your own server environment, should you move away from LAMP? It&amp;#8217;s certainly a tried and tested platform, many of the top websites of the world use it - but why? How can it be improved? Well, you might be surprised to find out the different choices you have available&amp;#8230;&lt;/p&gt;
&lt;!-- more --&gt;
&lt;h2&gt;L is for Linux&lt;/h2&gt;
&lt;p&gt;I love Linux. 3 of my 5 machines at home run it. It runs on my home server. I use it every day - I&amp;#8217;ve used it to set people up with countless web sites. Linux is certainly a strong platform for your server stack. For me, Windows isn&amp;#8217;t even an option. I&amp;#8217;ve used Windows, but for me, Linux wins. The majority of Linux servers run on the CentOS distribution - a great distro, built on the shoulders of RedHat. I think today, however, there emerge some stronger platforms:&lt;/p&gt;
&lt;h4&gt;&lt;a href="http://www.ubuntu.com/products/whatIsubuntu/serveredition"&gt;Ubuntu Server Edition&lt;/a&gt; (Linux)&lt;/h4&gt;
&lt;p&gt;Ok, ok. Ubuntu is a Linux distribution just like CentOS, so what gives right? Ubuntu Desktop is &lt;strong&gt;the &lt;/strong&gt;Linux desktop, the forums swell with avid users helping each other out, Ubuntu has one of the &lt;a href="http://ubuntuforums.org/"&gt;strongest communities going&lt;/a&gt;. That is a good base for a server platform. Unfortunately the server platform receives the same stigma as the desktop platform - &amp;#8220;Ubuntu is for noobs&amp;#8221;, &amp;#8220;Ubuntu is not a proper distribution&amp;#8221; etc. Ubuntu&amp;#8217;s server platform is pretty amazing though. Ubuntu&amp;#8217;s package management; &lt;a href="http://en.wikipedia.org/wiki/Advanced_Packaging_Tool"&gt;APT&lt;/a&gt; is a strong contender for &lt;a href="http://en.wikipedia.org/wiki/Yellowdog_Updater,_Modified"&gt;Yum&lt;/a&gt; (CentOS package manager), and in my opinion beats it hands down. Ubuntu Server Edition also has a strong selection of &amp;#8220;automagic&amp;#8221; packages through &lt;em&gt;&lt;a href="https://help.ubuntu.com/community/Tasksel"&gt;tasksel&lt;/a&gt;&lt;/em&gt;; things like &amp;#8220;lamp-stack&amp;#8221; which will get you serving for web in under 2 minutes. Sure CentOS has &lt;em&gt;groupinstall&lt;/em&gt; but I feel &lt;em&gt;tasksel &lt;/em&gt;has more going for it, especially with APT in tow. Combine this with the use of &lt;a href="https://launchpad.net/ubuntu/+ppas"&gt;PPAs (Personal Package Archives)&lt;/a&gt; (ok, they aren&amp;#8217;t recommended for mission critical operations, but useful still) and you&amp;#8217;ve got a powerful system which you&amp;#8217;ll rarely have to compile source under. Ubuntu Server Edition also includes &lt;a href="http://www.canonical.com/projects/landscape"&gt;Landscape&lt;/a&gt; as an option which, for enterprise &amp;#8212; especially on the Cloud, is a fantastic management platform. Also Ubuntu provides their EUC &amp;#8220;&lt;a href="http://www.ubuntu.com/cloud/private"&gt;Cloud Edition&lt;/a&gt;&amp;#8221; installers, which are tailored for services like &lt;a href="http://aws.amazon.com/ec2/"&gt;Amazon EC2&lt;/a&gt;. Yes indeed, Ubuntu is shaping up to be an amazing server platform which seriously gives CentOS a run for its money.&lt;/p&gt;
&lt;h4&gt;&lt;a href="http://hub.opensolaris.org/bin/view/Main/"&gt;OpenSolaris&lt;/a&gt; (Sun Solaris)&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://hub.opensolaris.org/bin/view/Main/"&gt;OpenSolaris&lt;/a&gt; would be a definite contender for those performance-oriented administrators. OpenSolaris runs a lot of the FOSS tools you&amp;#8217;re used to; PHP, Apache, MySQL - it&amp;#8217;s all there. Where OpenSolaris is different, is in its architecture. OpenSolaris includes the much talked about &lt;a href="http://hub.opensolaris.org/bin/view/Community+Group+zfs/"&gt;ZFS (Zettabyte File System)&lt;/a&gt;, which is purported to be blazingly fast and maintained free. OpenSolaris also provides a very strong platform for Virtualisation, with extremely strong tools such as Sun&amp;#8217;s own &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt;, &lt;a href="http://hub.opensolaris.org/bin/view/Project+crossbow/"&gt;Crossbow&lt;/a&gt; and &lt;a href="http://www.xen.org/products/xenhyp.html"&gt;Xen Hypervisor&lt;/a&gt;. All this, and more; with &lt;a href="http://ianmurdock.com/about/"&gt;Ian Murdock&lt;/a&gt; (Debian founder, of which &lt;a href="http://www.flickr.com/photos/iamurdock/3950212995/sizes/o/"&gt;many systems are based&lt;/a&gt;) leading the way for OpenSolaris, you know it&amp;#8217;s gotta be good.&lt;/p&gt;
&lt;h2&gt;A is for Apache&lt;/h2&gt;
&lt;p&gt;Apache is the defacto HTTPD (HyperText Transfer Daemon), and it&amp;#8217;s no surprise; Apache is mature, cross platform, stable and has been maintained regularly for way over a decade. It serves over 50% of the web. Being as long in the tooth as it is, though, many alternatives have cropped up which, in their own ways, show Apache to be an outdated platform - one that you should consider switching from.&lt;/p&gt;
&lt;h4&gt;&lt;a href="http://www.lighttpd.net/"&gt;Lighttpd&lt;/a&gt; (Linux, Windows, Solaris) - BSD License&lt;/h4&gt;
&lt;p&gt;Lighttpd (apparently pronounced &amp;#8220;Lighty&amp;#8221;) was created around the idea that a server should withstand 10,000 simultaneous connections, also known as the &lt;a href="http://www.kegel.com/c10k.html"&gt;C10K Problem&lt;/a&gt;. That should give you an idea of where Lighttpd exceeds over Apache. Lighttpd&amp;#8217;s site claims the likes of Youtube, Wikipedia and Meebo are all powered by the little-server-than-can (although Netcraft &lt;a href="http://uptime.netcraft.com/up/graph?site=youtube.com"&gt;seems&lt;/a&gt; &lt;a href="http://uptime.netcraft.com/up/graph?site=wikipedia.org"&gt;to&lt;/a&gt; &lt;a href="http://uptime.netcraft.com/up/graph?site=meebo.com"&gt;differ&lt;/a&gt;). It does seem to be, however, a fan favourite of trackers all over (see &lt;a href="http://uptime.netcraft.com/up/graph?site=thepiratebay.org"&gt;PirateBay&lt;/a&gt;, &lt;a href="http://uptime.netcraft.com/up/graph?site=mininova.org"&gt;Mininova&lt;/a&gt;, &lt;a href="http://uptime.netcraft.com/up/graph?site=isohunt.com"&gt;IsoHunt&lt;/a&gt;). It has risen in popularity to the point where it has emerged out of &lt;a href="http://news.netcraft.com/archives/2010/03/17/march_2010_web_server_survey.html"&gt;Netcraft&amp;#8217;s &amp;#8220;other&amp;#8221; category in their web server statistics&lt;/a&gt;, even if only by a little. Unfortunately, where lighttpd fails is its configuration. I have used lighttpd a few times, and compared to Apache, it is a fair amount harder to configure (or atleast, significantly different for Apache die-hards to have difficulty), and the documentation is sparse. But hey, if its good enough for The Pirate Bay, right?&lt;/p&gt;
&lt;h4&gt;&lt;a href="http://nginx.org/en/"&gt;NginX&lt;/a&gt; (Linux, Windows, Solaris) - BSD License&lt;/h4&gt;
&lt;p&gt;NginX (pronounced Engine-X) is more of a bare-bones server. It is another server, built around the C10K Problem. It doesn&amp;#8217;t come with the great configuration options that Apache and Lighttpd do, but it is fast. And &lt;a href="http://news.netcraft.com/archives/2010/03/17/march_2010_web_server_survey.html"&gt;much more popular&lt;/a&gt; than lighttpd (8% vs 0.35%). I haven&amp;#8217;t used NginX enough to give you my opinion on it, but some pretty large websites use it, including &lt;a href="http://uptime.netcraft.com/up/graph?site=wordpress.com"&gt;Wordpress.com&lt;/a&gt;, &lt;a href="http://uptime.netcraft.com/up/graph?site=github.com"&gt;GitHub&lt;/a&gt; and &lt;a href="http://uptime.netcraft.com/up/graph?site=fastmail.fm"&gt;FastMail.fm&lt;/a&gt;. Also pretty compelling are its &lt;a href="http://wiki.nginx.org/NginxWhyUseIt"&gt;testimonials&lt;/a&gt;, which say more for it than I can.&lt;/p&gt;
&lt;h4&gt;&lt;a href="http://www.cherokee-project.com/"&gt;Cherokee&lt;/a&gt; (Linux, Windows, Solaris) - GPL 2 License&lt;/h4&gt;
&lt;p&gt;Cherokee is shaping up to be my personal favourite for web servers. It&amp;#8217;s as &lt;a href="http://www.cherokee-project.com/benchmarks.html"&gt;fast, if not faster than Lighttpd and Nginx&lt;/a&gt;, once again, another &amp;#8220;C10k server&amp;#8221;. But the real killer feature for Cherokee is the web-based admin panel, and associated wizards. Now I&amp;#8217;ve got to say I&amp;#8217;ve set up many a Wordpress install before using Apache, and it is pretty quick to get off the ground. In Cherokee, however, you can do it in under a minute, using the in built &lt;a href="http://www.cherokee-project.com/screencasts.html#wordpress"&gt;Wordpress wizard&lt;/a&gt;. Same goes for &lt;a href="http://www.cherokee-project.com/screencasts.html#php"&gt;PHP support&lt;/a&gt;, &lt;a href="http://www.cherokee-project.com/screencasts.html#django_uwsgi"&gt;Django&lt;/a&gt;, Ruby, you name it! Cherokee&amp;#8217;s web interface gives you super fast access to all of these features, without you digging around conf files and killing your server because you typo&amp;#8217;d &amp;#8220;AllowOverrride&amp;#8221;. If you want some big names that use Cherokee? Well, there aren&amp;#8217;t any&amp;#8230; but that should not stop you using it!&lt;/p&gt;
&lt;h2&gt;M is for MySQL&lt;/h2&gt;
&lt;p&gt;MySQL has had a turbulent life. It was &lt;a href="http://www.mysql.com/news-and-events/sun-to-acquire-mysql.html"&gt;acquired by Sun&lt;/a&gt; not so long ago, some took this badly, and many speculated on the outcome of MySQL. Recently, Sun was acquired by Oracle, which has only refuelled the speculation. Around the time Sun acquired it, a few engineers released open source alternatives; &lt;a href="http://askmonty.org/wiki/MariaDB"&gt;MariaDB&lt;/a&gt;, and the depressingly named &lt;a href="http://drizzle.org/"&gt;Drizzle&lt;/a&gt;. There are, however, other efforts to improve on database utility, including moving out of RDBMS altogether&amp;#8230;&lt;/p&gt;
&lt;h4&gt;&lt;a href="http://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt; (Linux, Windows, Solaris) - PostgreSQL &amp;#8220;BSD Style&amp;#8221; License&lt;/h4&gt;
&lt;p&gt;PostgreSQL, the successor to the &lt;a href="http://www.ingres.com/products/ingres-database.php"&gt;Ingres SQL database&lt;/a&gt; is an &lt;a href="http://en.wikipedia.org/wiki/RDBMS"&gt;RDBMS&lt;/a&gt; very similar to MySQL. The biggest difference on the surface, is that PostgreSQL is a single layered engine, that is to say it has one storage engine, unified with the database driver (as opposed to MySQL which has &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/myisam-storage-engine.html"&gt;MyISAM&lt;/a&gt;, &lt;a href="http://www.innodb.com/wp/"&gt;InnoDB&lt;/a&gt;, &lt;a href="http://forge.mysql.com/wiki/Maria_Preview#The_Maria_Engine"&gt;Maria&lt;/a&gt; et all). Speed wise PostgreSQL&amp;#8217;s storage is pretty much identical to MySQL&amp;#8217;s; and is fully &lt;a href="http://en.wikipedia.org/wiki/ACID"&gt;ACID&lt;/a&gt; compliant (whereas MyISAM isn&amp;#8217;t, and InnoDB barely is). Otherwise, pretty much everything MySQL does, PostgreSQL does to: Inner &amp;amp; Outer Joins, Transactions, Stored Procedures, Triggers, the list goes on. There are many small differences that may or may not bother you - for example something that bugs me is the lack of TinyInt and MediumInt types. Another gripe I have with PostgreSQL: the lack of a decent admin interface. When you look at &lt;em&gt;&lt;a href="http://dev.mysql.com/doc/administrator/en/index.html"&gt;MySQL Administrator&lt;/a&gt;&lt;/em&gt; and &lt;em&gt;&lt;a href="http://dev.mysql.com/doc/query-browser/en/index.html"&gt;MySQL Query Browser&lt;/a&gt;&lt;/em&gt; you see two very powerful yet very easy to use tools. PostgreSQL has &lt;a href="http://www.pgadmin.org/"&gt;pgAdmin 3&lt;/a&gt; which in my opinion pales in comparison. Ultimately though, PostgreSQL is a well supported &amp;amp; documented standards oriented database engine, with speed pretty much identical to MySQL, with the added benefit of much looser licensing, and is used by many big names including &lt;a href="https://developer.skype.com/SkypeGarage/DbProjects/SkypePostgresqlWhitepaper"&gt;Skype&lt;/a&gt;, &lt;a href="http://www.computerworld.com/s/article/9087918/Size_matters_Yahoo_claims_2_petabyte_database_is_world_s_biggest_busiest"&gt;Yahoo!&lt;/a&gt;, and the amazing &lt;a href="http://wiki.openstreetmap.org/wiki/PostgreSQL"&gt;OpenStreetMap&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Home"&gt;MongoDB&lt;/a&gt; (Linux, Windows, Solaris) - AGPL 3 License&lt;/h4&gt;
&lt;p&gt;MongoDB is a product of the &amp;#8220;&lt;a href="http://en.wikipedia.org/wiki/Nosql"&gt;NoSQL&lt;/a&gt;&amp;#8221; movement, which is getting a lot of hype at the moment. Trying to keep within this article&amp;#8217;s scope, &amp;#8220;NoSQL&amp;#8221; storage is pretty much &lt;em&gt;dumb storage&lt;/em&gt;, non-ACID, non-RDBMS. In other words, what you get is a very simple storage layer that lets you look up a key, and get a value. Forget inner/outer joins, cascading, triggers, constraints - pretty much forget everything to do with SQL (Hense, &lt;strong&gt;No&lt;/strong&gt;SQL). The benefit of losing all of this, is that they are ridiculously faster than the likes of RDBMSes. Even faster than that. A rough estimate for&lt;a href="http://www.mongodb.org/display/DOCS/Benchmarks"&gt; MongoDB is that it is 15-20 times faster than MySQL/PostgreSQL&lt;/a&gt;. So you lose a lot with something like MongoDB, but you also gain a lot. You probably aren&amp;#8217;t going to need the kind of performance MongoDB achieves unless you&amp;#8217;re huge and struggling with the speed of RDBMS. But perhaps is especially cool about MongoDB in particular is that it uses JSON for resultsets, so you don&amp;#8217;t have to waste time processing a resultset, just a quick parseJSON(); will get you a nice keyed array in PHP. Beautiful. MongoDB is pretty new - &lt;a href="http://compoundthinking.com/blog/index.php/2009/07/18/serving-developers-and-users-at-sourceforge/"&gt;but SourceForge uses it&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a href="http://cassandra.apache.org/"&gt;Cassandra&lt;/a&gt; (Linux, Solaris) - Apache 2.0 License&lt;/h4&gt;
&lt;p&gt;Cassandra is a different beast to MongoDB, but still fits within the &amp;#8220;NoSQL&amp;#8221; bracket. It was written by Facebook to replace the relational database they use, inspired by &lt;a href="http://en.wikipedia.org/wiki/Dynamo_(storage_system)"&gt;Amazon&amp;#8217;s Dynamo&lt;/a&gt;. Cassandra is designed to run on a cluster, which is where it&amp;#8217;s strength lies. Cassandra is pretty much the poster boy for the NoSQL movement, with massive sites such as &lt;a href="http://about.digg.com/node/564"&gt;Digg&lt;/a&gt;, &lt;a href="http://blog.reddit.com/2010/03/she-who-entangles-men.html"&gt;Reddit&lt;/a&gt;, &lt;a href="http://www.facebook.com/note.php?note_id=24413138919&amp;amp;id=9445547199&amp;amp;index=9"&gt;Facebook&lt;/a&gt;, &lt;a href="http://www.informationweek.com/news/software/open_source/showArticle.jhtml?articleID=223100894&amp;amp;pgno=1&amp;amp;queryText=&amp;amp;isPrev="&gt;Twitter&lt;/a&gt; - basically every site that takes an unfathomable amount of data in and out daily. An important thing to think about here - many of these sites are still using an RDBMS, and Cassandra has not been a complete replacement for them.&lt;/p&gt;
&lt;h2&gt;P is for PHP&lt;/h2&gt;
&lt;p&gt;PHP is the double-sided coin of web development. A lot of hatred for PHP floats around, some of it justified. Parts of PHP are a huge mess, for example the whole haystack-needle-needle-haystack thing and the huge delays with PHP 6, not to mention the convoluted politics with the core developers. However, PHP is still the single most widely used server side scripting language. Period. Couple PHP with excellent frameworks such as &lt;a href="http://codeigniter.com/"&gt;CodeIgniter&lt;/a&gt;, &lt;a href="http://cakephp.org/"&gt;CakePHP&lt;/a&gt;, &lt;a href="http://www.symfony-project.org/"&gt;Symfony&lt;/a&gt;, or just look at great projects like &lt;a href="http://wordpress.org/"&gt;Wordpress&lt;/a&gt;, &lt;a href="http://www.drupal.org.uk/"&gt;Drupal&lt;/a&gt; and &lt;a href="http://expressionengine.com/"&gt;ExpressionEngine&lt;/a&gt;, and the problems seemingly slip away. However, there are some really interesting languages that might just surprise you&amp;#8230;&lt;/p&gt;
&lt;h4&gt;&lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt; - GPL License&lt;/h4&gt;
&lt;p&gt;Ruby is a Strong Object Oriented (Strong, as opposed to PHP&amp;#8217;s Weak Object Oriented model) language created in Japan, inspired in some part by &lt;a href="http://www.perl.org/"&gt;Perl&lt;/a&gt;. Ruby&amp;#8217;s main reason for success on the web is &lt;a href="http://37signals.com/"&gt;37Signals&lt;/a&gt;&amp;#8217; &lt;a href="http://rubyonrails.org/"&gt;Ruby On Rails&lt;/a&gt; project - a framework not too dissimilar to CakePHP (CakePHP started out as a &amp;#8220;Rails&amp;#8221; clone). Ruby is certainly faster than PHP, and nicer looking (which I feel is important, &lt;a href="http://www.php.net/manual/en/language.namespaces.rationale.php"&gt;case in point&lt;/a&gt;). In fact, there isn&amp;#8217;t much to dislike about Rails, or Ruby for that matter. But then you&amp;#8217;ve not met Python!&lt;/p&gt;
&lt;h4&gt;&lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; - Python License (GPL Compatible)&lt;/h4&gt;
&lt;p&gt;Python is a mature and beautiful language, successor to &lt;a href="http://homepages.cwi.nl/~steven/abc/"&gt;ABC&lt;/a&gt; (a &lt;a href="http://en.wikipedia.org/wiki/BASIC"&gt;BASIC&lt;/a&gt; alternative). Don&amp;#8217;t let it&amp;#8217;s background fool you though - Python is nothing like BASIC. Python has a massive library of&amp;#8230; well, &lt;a href="http://pypi.python.org/pypi/"&gt;libraries&lt;/a&gt;, an &lt;a href="http://docs.python.org/release/2.5.2/tut/node4.html"&gt;interactive shell&lt;/a&gt;, can be &lt;a href="http://www.python.org/dev/doc/maint23/lib/module-pycompile.html"&gt;compiled&lt;/a&gt; or interpreted, is great on the web and on the desktop (a lot of great Gnome/Ubuntu &lt;a href="http://www.pitivi.org/"&gt;applications&lt;/a&gt; &lt;a href="http://www.jokosher.org/"&gt;are&lt;/a&gt; &lt;a href="http://wddb.wine-doors.org/"&gt;written&lt;/a&gt; &lt;a href="http://projecthamster.wordpress.com/"&gt;in&lt;/a&gt; &lt;a href="http://deluge-torrent.org/"&gt;the&lt;/a&gt; &lt;a href="https://one.ubuntu.com/"&gt;Python&lt;/a&gt; &lt;a href="http://albertomilone.com/nvidia_scripts1.html"&gt;language&lt;/a&gt;). Like Ruby, the code is very clean (perhaps cleaner). Python has two strong pillars of web-frameworks: Django and TurboGears. This post is pretty long already, and so I&amp;#8217;m not going to go in depth about Python - but let&amp;#8217;s just say after 8 years of PHP I&amp;#8217;m about ready to jump into Python.&lt;em&gt; Also, if you have a Linux or Mac OSX machine, you already have Python installed! And if you&amp;#8217;re interested in moving away from PHP to Python, &lt;a href="http://www.phptodjango.com/"&gt;check out this site&lt;/a&gt;&lt;/em&gt;&lt;em&gt;&lt;a href="http://www.phptodjango.com/"&gt; for some great migration tips&lt;/a&gt;&lt;/em&gt;&lt;em&gt;!&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;Javascript - No License?&lt;/h4&gt;
&lt;p&gt;I bet you were pretty surprised when you read Javascript right? There&amp;#8217;s a lot of discussion about using Javascript on the server side, also known as &lt;a href="http://en.wikipedia.org/wiki/Server-side_JavaScript"&gt;SSJS&lt;/a&gt;. This idea isn&amp;#8217;t new, but thanks to new Javascript engines like &lt;a href="http://www.mozilla.org/rhino/"&gt;Rhino&lt;/a&gt;, &lt;a href="http://www.mozilla.org/js/spidermonkey/"&gt;SpiderMonkey&lt;/a&gt; and &lt;a href="http://code.google.com/p/v8/"&gt;V8&lt;/a&gt; it becomes a viable choice. Javascript itself is a mature, well formed language, which once again has a Strong Object Oriented approach. There is one huge benefit of using JS server side: your developers (or you!) can write in one language. If your developers work in both backend and frontend this can be quite a good idea. The big downside is that SSJS, despite its age is really not very mature, many like &lt;a href="http://nodejs.org/"&gt;Node.JS&lt;/a&gt; (which runs the awesome V8 engine) run standalone servers, which becomes a problem of scalability &amp;amp; flexibility. Others such as &lt;a href="http://jsext.sourceforge.net/"&gt;JSEXT&lt;/a&gt; are very promising, but for mission critical applications don&amp;#8217;t have enough evidence to justify to your boss or client.&lt;/p&gt;
&lt;h2&gt;Bonus: Google App Engine&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://code.google.com/appengine/"&gt;Google&amp;#8217;s App Engine&lt;/a&gt; (GAE) is a free hosted environment for your application or service. It uses Google&amp;#8217;s proprietary web serves such as it&amp;#8217;s GWS web server, and it&amp;#8217;s &lt;a href="http://en.wikipedia.org/wiki/BigTable"&gt;BigTable NoSQL&lt;/a&gt; datastore. You can code your apps in both Java and Python, but some bright sparks have &lt;a href="http://www.caucho.com/resin-3.0/quercus/"&gt;gotten PHP to work through Java&lt;/a&gt;, which means &lt;a href="http://blog.caucho.com/?p=196"&gt;you can install Wordpress&lt;/a&gt; on GAE! There are some downsides to GAE, especially considering it is built around proprietary web services, portability is a huge issue. But it is a worthy consideration, especially when bootstrapping a startup company, or if looking for a cheaper service than &lt;a href="http://aws.amazon.com/ec2/"&gt;Amazon EC2&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What is right for you&lt;/h2&gt;
&lt;p&gt;Ultimately you&amp;#8217;ll have to pick what is right for you. Many hobbyists chose the ULPPy (Ubuntu, Lighttpd, PostgreSQL and Python) stack. If you&amp;#8217;re deploying a large scale application, you&amp;#8217;ll most likely extend the LAMP stack with tools like NginX and Cassandra, so uh&amp;#8230; LANCMP. The &amp;#8220;in&amp;#8221; side of web development are using UNMR (Ubuntu, NginX, MongoDB and Rails). Perhaps the best combinations are the hardest to make acronyms out of?  Personally, I&amp;#8217;ve become pretty sold with UCPPy (Ubuntu, Cherokee, PostgreSQL, Python), and over the coming weeks will be converting my home server to this setup, as I continue to &lt;a href="http://diveintopython.org/"&gt;dive into python&lt;/a&gt;. But that&amp;#8217;s another story&amp;#8230;&lt;/p&gt;</description><link>http://blog.keithcirkel.co.uk/post/6048033047</link><guid>http://blog.keithcirkel.co.uk/post/6048033047</guid><pubDate>Sat, 27 Mar 2010 11:33:55 +0000</pubDate></item></channel></rss>

