<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Simon Whatley &#187; HTML</title>
	<atom:link href="http://www.simonwhatley.co.uk/tag/html/feed" rel="self" type="application/rss+xml" />
	<link>http://www.simonwhatley.co.uk</link>
	<description>The opposite of every great idea is another great idea</description>
	<lastBuildDate>Wed, 02 Nov 2011 09:28:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Run Two Versions of Firefox on Mac OSX</title>
		<link>http://www.simonwhatley.co.uk/run-two-versions-of-firefox-on-mac-osx</link>
		<comments>http://www.simonwhatley.co.uk/run-two-versions-of-firefox-on-mac-osx#comments</comments>
		<pubDate>Wed, 30 Mar 2011 09:03:52 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Firefox 4]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[OSX]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=3958</guid>
		<description><![CDATA[Last week Firefox 4.0 was released to the world. Web developers everywhere celebrated with delight, the new browser. Well, almost! The browser comes packed with a super-fast JavaScript engine called J&#228;gerMonkey, improved support for HTML5 and CSS3 and a bunch of new interface updates.]]></description>
			<content:encoded><![CDATA[<p>Last week Firefox 4.0 was released to the world. Web developers everywhere celebrated with delight, the new browser. Well, almost!  The browser comes packed with a <a href="http://www.mozilla.com/en-US/firefox/4.0/releasenotes/" title="Firefox 4.0 release notes" target="_blank" rel="nofollow">super-fast JavaScript engine called J&auml;gerMonkey, improved support for HTML5 and CSS3 and a bunch of new interface updates</a>. But don’t get too excited just yet! It&#8217;s still a good idea to keep that old version of Firefox around for testing; we can’t assume everyone has upgraded to Firefox 4. So, to run both Firefox 3.6 and Firefox 4.0 on the same machine, just follow these simple steps:</p>
<ol>
<li>Open up your Applications folder and find your old version of Firefox.</li>
<li>Right click -> Get Info.</li>
<li>Rename to &#8220;Firefox36.app&#8221;.</li>
<li>Download Firefox 4.0 and install as normal.</li>
</ol>
<p>Voil&agrave;! You now have more than one Firefox browser to play with.</p>
<p>That was really simple huh? If someone knows how to do this on the Windows and Linux side, I would love to hear how.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/run-two-versions-of-firefox-on-mac-osx/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Thinking Mobile? If You Build It, They Will Come</title>
		<link>http://www.simonwhatley.co.uk/thinking-mobile-if-you-build-it-they-will-come</link>
		<comments>http://www.simonwhatley.co.uk/thinking-mobile-if-you-build-it-they-will-come#comments</comments>
		<pubDate>Thu, 04 Feb 2010 14:35:59 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[Appcelerator]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Apple iPhone]]></category>
		<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[Brushes]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[HIG]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[human interface guidelines]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[IPhone OS]]></category>
		<category><![CDATA[iPod]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mobile Development]]></category>
		<category><![CDATA[Mobile operating system]]></category>
		<category><![CDATA[Multi-touch]]></category>
		<category><![CDATA[Nokia]]></category>
		<category><![CDATA[Ovi Store]]></category>
		<category><![CDATA[Palm]]></category>
		<category><![CDATA[paypal]]></category>
		<category><![CDATA[PhoneGap]]></category>
		<category><![CDATA[Qik]]></category>
		<category><![CDATA[RedLaser]]></category>
		<category><![CDATA[Rim]]></category>
		<category><![CDATA[RjDj]]></category>
		<category><![CDATA[Smartphones]]></category>
		<category><![CDATA[StreetCar]]></category>
		<category><![CDATA[Symbian]]></category>
		<category><![CDATA[The Guardian]]></category>
		<category><![CDATA[User interface]]></category>
		<category><![CDATA[web-based application]]></category>
		<category><![CDATA[WebOS]]></category>
		<category><![CDATA[Windows Mobile]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=2232</guid>
		<description><![CDATA[Smartphone applications are predicted to overtake the desktop software market. So who will win the multi-billion-pound [dollar] application economy, and what are the new rules?]]></description>
			<content:encoded><![CDATA[<p>Smartphone applications are predicted to overtake the desktop software market. So who will win the multi-billion-pound [dollar] application economy, and what are the new rules?</p>
<p>In January 2010, Apple announced to great fanfare that they had recently sold their 3 billionth iPhone application. Of course not all these applications are paid-for, but with a 30% levy taken on each and every paid-for application, Apple are taking a significant share of the revenue from the application pie. However, as a distribution channel, the AppStore is second to none, whilst <a href="http://metrics.admob.com/2010/01/mobile-browsing-trends-from-quantcast/" title="Mobile Browsing Trends from Quantcast" target="_blank" rel="nofollow">the iPhone uptake is staggering</a>, with a majority share of the smartphone market in many regions of the world. There is a significant opportunity for any developer to make a huge return on investment, assuming the idea is a winning one.</p>
<p>iPhone, Android, Windows Mobile, Blackberry, Nokia and now the larger form factor iPad and Kindle support the idea of applications, or will do in the near future. So what do you need to do to design and build your first application?</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<ol>
<li><strong>Familiarise yourself with the rules</strong><br />
Whether you&#8217;re going to build applications for the <a href="http://developer.apple.com/iphone/" title="Apple iPhone Developer Centre" target="_blank" rel="nofollow">iPhone OS</a>, <a href="http://developer.android.com/" title="Android Developer Resources"  target="_blank" rel="nofollow">Android OS</a> or any other of the mobile platforms, you will need to familiarise yourself with how each operating system does things. Smartphone development is different from the development we are accustomed with on the Web. Reading the user interface guidelines for each platform will go a long way to developing your first application. Smartphones are personal devices and know where you are almost all the time through <abbr title="Global Positioning System">GPS</abbr>. They have rotation detectors, compasses and multitouch screens with gestural interfaces. Only once you know what is possible with each smartphone platform can you begin to design your application.</li>
<li><strong>Brainstorm the issues</strong><br />
This is the creative part of your application development process. You have a basic idea, but you need to take it forward into something that has features and benefits. Will the application be paid-for or free? Will it provide a service or be a marketing channel? Will it be standalone or link closely with other online presences and networks? Smartphone applications, unlike <em>ordinary</em> websites, invariably need to actually do something. There is an element of artificial intelligence at play, whereby the phone can actually know where it is in the world and it&#8217;s orientation, whilst the user interface is remarkably different from that of simply a mouse and keyboard. Smartphone applications can&#8217;t simply be flat catalogues, they need to do something and do it well. Whether this is booking and accessing a car as with <a href="http://itunes.apple.com/gb/app/streetcar/id335331332" title="Apple AppStore: StreetCar" target="_blank" rel="nofollow">StreetCar</a>, buying something from <a href="http://itunes.apple.com/gb/app/ebay-mobile/id282614216" title="Apple AppStore: eBay" target="_blank" rel="nofollow">eBay</a>, paying with <a href="http://itunes.apple.com/gb/app/paypal/id283646709" title="Apple AppStore: PayPal" target="_blank" rel="nofollow">PayPal</a>, creating music with <a href="http://itunes.apple.com/gb/app/rjdj/id290626964" title="Apple AppStore: RjDj" target="_blank" rel="nofollow">RjDj</a>, drawing pictures with <a href="http://itunes.apple.com/gb/app/brushes/id288230264" title="Apple AppStore: Brushes" target="_blank" rel="nofollow">Brushes</a>, price comparison with <a href="http://itunes.apple.com/gb/app/redlaser/id312720263" title="Apple AppStore: RedLaser" target="_blank" rel="nofollow">RedLaser</a>, reading the latest news from <a href="http://itunes.apple.com/gb/app/the-guardian/id340425655" title="Apple AppStore: The Guardian" target="_blank" rel="nofollow">the Guardian</a>, video casting with <a href="http://itunes.apple.com/gb/app/qik-for-3gs/id302767821" title="Apple AppStore: Qik" target="_blank" rel="nofollow">Qik</a> or planning your journey with <a href="http://itunes.apple.com/gb/app/london-tube-deluxe/id300139358" title="Apple AppStore: Tube Deluxe" target="_blank" rel="nofollow">Tube Deluxe</a> your app needs to be compelling.</li>
<li><strong>Create a prototype</strong><br />
You have your compelling idea; create a proof-of-concept prototype. This prototype is used to test some or many aspects of the intended design without attempting to exactly simulate the visual appearance, content or intended interactions. Such prototypes can be used to &#8220;prove&#8221; out a potential design approach such as range of motion, mechanics, sensors, architecture, etc. Making paper prototypes, for example, is a great way to test the application rather than creating low or high fidelity wireframes and <em>hoping for the best</em>. Doing this also provides a perfect opportunity for people around you &#8212; friends, colleagues and family members &#8212; to try out the prototype with little fuss. Only once you&#8217;re happy with the design should you begin any form of coding.</li>
<li><strong>Submit early</strong><br />
You have your application working. You have conducted a number of usability tests and all is looking great. It&#8217;s time to submit it to the appropriate application store. Apple has its <a href="http://www.apple.com/iphone/apps-for-iphone/" title="Apple AppStore" target="_blank" rel="nofollow">AppStore</a>, Android its <a href="http://www.android.com/market/" title="Android Market" target="_blank" rel="nofollow">Market Place</a>, Nokia its <a href="https://store.ovi.com" title="Nokia Ovi Store" target="_blank" rel="nofollow">Ovi Store</a> and so on. Each store has its own nuiances, but if you&#8217;re considering an iPhone application, Apple has been know to <em>drag its feet</em> when approving applications for release. Apple has a <a href="http://news.cnet.com/8301-13579_3-10315328-37.html" title="CNet: Apple sheds light on App Store approval process" target="_blank" rel="nofollow">much discussed approval process</a>, with the possibility of rejection commonplace. Don&#8217;t make plans that depend on Apple. It is better to silently release the application, rather than creating a huge fanfare.</li>
<li><strong>Iterate often</strong><br />
Once your application has been launched your work is nowhere near over, indeed it has just begun! As you gain more and more users, improvements will suggest themselves not only from within your team, but more often, from your users. Here is where you go back to stage two and start brainstorming again. Version 2 may include bug fixes, but also major feature updates. For the latter, your brainstorming will decide what is most important for the next iteration. When your next iteration is complete, the AppStore, for example, makes upgrades far easier to achieve than for normal desktop software.</li>
</ol>
<p>If you&#8217;re planning an application that could disrupt one of the smartphones capabilities, such as <a href="http://www.google.com/mobile/voice/" title="Google Voice for Mobile" target="_blank" rel="nofollow">Google Voice for the iPhone</a>, it may be worth considering whether building an application specifically for that particular operating system is worthwhile. Google Voice was neither approved nor rejected by Apple for the iPhone, but has now been replaced by a fully featured <abbr title="HyperText Markup Language">HTML</abbr>5 web-based application; circumventing the Apple approval process. Of course this now means that the same web-based application can be used for not just the iPhone, but other smartphones.</p>
<p>Now go forth and build it!</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p><strong>Resources</strong></p>
<p>Smartphone User Interface Guidelines:</p>
<ul>
<li><a href="http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/MobileHIG/Introduction/Introduction.html" target="_blank" rel="nofollow">Apple iPhone Human Interface Guidelines (HIG)</a></li>
<li><a href="http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html" target="_blank" rel="nofollow">Apple iPhone Application Programming Guide</a></li>
<li><a href="http://developer.android.com/guide/practices/ui_guidelines/index.html" target="_blank" rel="nofollow">Android User Interface Guidelines</a></li>
<li><a href="http://binarysheep.com/AndroidCode/AndroidHIG.pdf" target="_blank" rel="nofollow">Android Human Interface Guidelines (adapted from Apple)</a></li>
<li><a href="http://www.forum.nokia.com/Tools_Docs_and_Code/Documentation/Usability/UI_Style_and_Visual_Guidelines.xhtml" target="_blank" rel="nofollow">Nokia User Interface Style and Visual Guidelines</a></li>
<li><a href="http://developer.palm.com/index.php?option=com_content&#038;view=article&#038;id=1606" target="_blank" rel="nofollow">Palm User Interface Guidelines</a></li>
<li><a href="http://docs.blackberry.com/en/developers/deliverables/6625/Screens_373681_11.jsp" target="_blank" rel="nofollow">RIM Blackberry User Interface Guidelines</a></li>
</ul>
<p>Application Development Frameworks:</p>
<ul>
<li><a href="http://phonegap.com/" title="PhoneGap: An open source development tool for building iPhone, Android, Blackberry and other mobile apps with JavaScript" target="_blank" rel="nofollow">PhoneGap</a> an open source development tool for building iPhone, Android, Blackberry and other mobile apps with JavaScript</li>
<li><a href="http://www.appcelerator.com/" title="Appcelerator: Mobile development platform for javascript developers" target="_blank" rel="nofollow">Appcelerator</a> a mobile development platform for javascript developers</li>
</ul>
<p>Mobile Web Application Frameworks:</p>
<ul>
<li><a href="http://www.jqtouch.com/" title="jQTouch: A jQuery plugin for mobile development" target="_blank" rel="nofollow">jQTouch</a> a jQuery plugin for mobile development</li>
<li><a href="http://code.google.com/p/iui/" title="iUI: iPhone User Interface Framework" target="_blank" rel="nofollow">iUI</a> an iPhone/iPod Touch user interface framework</li>
</ul>
<p>Other:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Mobile_development" title="Wikipedia: Mobile Development" target="_blank" rel="nofollow">Wikipedia article on Mobile Development</a></li>
</ul>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/thinking-mobile-if-you-build-it-they-will-come/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Configure Apache to GZip Your Components</title>
		<link>http://www.simonwhatley.co.uk/how-to-configure-apache-to-gzip-your-components</link>
		<comments>http://www.simonwhatley.co.uk/how-to-configure-apache-to-gzip-your-components#comments</comments>
		<pubDate>Wed, 03 Feb 2010 15:26:38 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Apache HTTP Server]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DEFLATE]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Yahoo]]></category>
		<category><![CDATA[ZIP]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=2332</guid>
		<description><![CDATA[Compressing your Web components will help speed up your Website. The majority of your visitors will benefit as most all Web browsers support GZip compression. You’ll want to compress all text, which includes HTML, CSS, JavaScript, XML, JSON, etc.]]></description>
			<content:encoded><![CDATA[<p>Compressing your Web components will help speed up your Website.  The majority of your visitors will benefit as most all Web browsers support <abbr title="GNU zip">GZip</abbr> compression.  You’ll want to compress all text, which includes <abbr title="HyperText Markup Language">HTML</abbr>, <abbr title="Cascading Style Sheets">CSS</abbr>, JavaScript, <abbr title="eXtensible Markup Language">XML</abbr>, <abbr title="JavaScript Object Notation">JSON</abbr>, etc.</p>
<p>Apache 2.x uses <code>mod_deflate</code>. Much like <a href="/how-to-set-an-expires-header-in-apache" title="setting expires headers">setting expires headers</a>, this will save you bandwidth and server load, because it allows output from your server to be compressed before being sent to the client over the network.</p>
<p>The deflate module is not compiled by default and must be enabled in the Apache <em>httpd.conf</em> file. Make sure the following is present and uncommented (remove preceding the #):</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">LoadModule deflate_module modules/mod_deflate.so</pre></div></div>

<p>To set <abbr title="GNU zip">GZip</abbr> compression, simply add the following to the <virtualHost> section of your Apache <em>vhost</em> configuration:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html</pre></div></div>

<p>Alternatively you can add it to your <em>htaccess</em> file in an <code>&lt;ifModule mod_deflate.c&gt;&lt;/ifModule&gt;</code> block.</p>
<p>All you really need is the first line. The <code>BrowserMatch </code>lines are there to handle issues with older browsers such as Internet Explorer 5.</p>
<p>You can read all about <abbr title="GNU zip">GZip</abbr> by reading Yahoo!’s <a href="http://developer.yahoo.com/performance/rules.html#gzip" title="Yahoo! Best Practices for Speeding Up Your Web Site Guide" target="_blank" rel="nofollow">Best Practices for Speeding Up Your Web Site</a> guide.</p>
<p>Alternatively, read the <a href="http://httpd.apache.org/docs/2.0/mod/mod_deflate.html" title="Apache mod_deflate documentation" target="_blank" rel="nofollow">Apache mod_deflate documentation</a>.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/how-to-configure-apache-to-gzip-your-components/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Parsing Twitter Usernames, Hashtags and URLs with ColdFusion</title>
		<link>http://www.simonwhatley.co.uk/parsing-twitter-usernames-hashtags-and-urls-with-coldfusion</link>
		<comments>http://www.simonwhatley.co.uk/parsing-twitter-usernames-hashtags-and-urls-with-coldfusion#comments</comments>
		<pubDate>Fri, 01 May 2009 11:24:07 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[GPS logger]]></category>
		<category><![CDATA[Holux M-241 GPS Receiver]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[New Brunswick]]></category>
		<category><![CDATA[online resource]]></category>
		<category><![CDATA[parsing]]></category>
		<category><![CDATA[tag]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[username]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=1907</guid>
		<description><![CDATA[Some time ago, well almost a year ago actually, I posted an article called Parsing Twitter Usernames, Hashtags and URLs with JavaScript. From that article, it became immediately apparent that this was an issue many people were confronting and one that required an answer. Now, belatedly, it is the turn of ColdFusion to get the Twitter love.]]></description>
			<content:encoded><![CDATA[<p>Some time ago, well almost a year ago actually, I posted an article called <a href="/parsing-twitter-usernames-hashtags-and-urls-with-javascript">Parsing Twitter Usernames, Hashtags and URLs with JavaScript</a>. From that article, it became immediately apparent that this was an issue many people were confronting and one that required an answer. Now, belatedly, it is the turn of ColdFusion to get the Twitter love.</p>
<p>Compared to JavaScript it is far easier to parse the <abbr title="Univeral Resource Locator">URL</abbr>s, Usernames and Hashtags in a tweet using ColdFusion and minor amendments to the regular expressions used in the JavaScript code.</p>
<p>Below is an example tweet that I&#8217;ll use for this post.</p>

<div class="wp_syntax"><div class="code"><pre class="cfm" style="font-family:monospace;"><span style="color: #333333;"><span style="color: #800000;">&lt;cfset</span> myTweet <span style="color: #0000ff">=</span> <span style="color: #009900;">&quot;Woot! I've just taken receipt of my Holux M-241 GPS logger. Good call @fordie. http://bit.ly/2RsAu ##holux ##gpslogger&quot;</span> <span style="color: #0000ff;">/</span><span style="color: #800000;">&gt;</span></span></pre></div></div>

<p><abbr title="Nota bene (please note)">NB</abbr>. For the purpose of this test, I need to double-hash the hashtags to prevent ColdFusion throwing an error.</p>
<h3>Parsing URLs as Links to the resource</h3>
<p>We can simply demonstrate the parsing of the link with the following code in the body of the page:</p>

<div class="wp_syntax"><div class="code"><pre class="cfm" style="font-family:monospace;"><span style="color: #333333;"><span style="color: #800000;">&lt;cfset</span> myTweet <span style="color: #0000ff">=</span> <span style="color: #800080;">REReplace</span><span style="color: #000000;">&#40;</span>myTweet,<span style="color: #009900;">'([A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&amp;amp;\?\/.=]+)'</span>,<span style="color: #009900;">'&lt;a href=&quot;\1&quot;&gt;</span></span>\1<span style="color: #333333;"><span style="color: #800000;">&lt;</span><span style="color: #0000ff;">/</span>a<span style="color: #0000ff;">&gt;</span></span>','ALL') /&gt;</pre></div></div>

<p><abbr title="Nota bene (please note)">NB</abbr>. The <code>\1</code> is a back reference to part of the regular expression match. A backreference stores the part of the string matched by the part of the regular expression inside the parentheses. This means you can reuse it inside the regular expression, or afterwards as I am doing in each of these examples.</p>
<p>The resultant HTML generated is the following:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">Woot! I've just taken receipt of my Holux M-241 GPS logger. Good call @fordie. &lt;a href=&quot;http://bit.ly/2RsAu&quot;&gt;http://bit.ly/2RsAu&lt;/a&gt; #holux #gpslogger</pre></div></div>

<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>Parsing Usernames as Links to Twitter</h3>
<p>Following on from the <abbr title="Universal Resource Locator">URL</abbr> example above, we can apply a similar methodology to Twitter usernames since they can also be <abbr title="Universal Resource Locator">URL</abbr>s to their associated Twitter page.</p>
<p>We can simply demonstrate this with the following code:</p>

<div class="wp_syntax"><div class="code"><pre class="cfm" style="font-family:monospace;"><span style="color: #333333;"><span style="color: #800000;">&lt;cfset</span> myTweet <span style="color: #0000ff">=</span> <span style="color: #800080;">REReplace</span><span style="color: #000000;">&#40;</span>myTweet,<span style="color: #009900;">'[@]+([A-Za-z0-9-_]+)'</span>,<span style="color: #009900;">'&lt;a href=&quot;http://twitter.com/\1&quot; rel=&quot;nofollow&quot;&gt;</span></span>@\1<span style="color: #333333;"><span style="color: #800000;">&lt;</span><span style="color: #0000ff;">/</span>a<span style="color: #0000ff;">&gt;</span></span>','ALL') /&gt;</pre></div></div>

<p>The regular expression in this case finds all instances of <code>@username</code>. The Twitter <abbr title="Universal Resource Locator">URL</abbr> is then applied to the username.</p>
<p>The resultant HTML generated is the following:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">Woot! I've just taken receipt of my Holux M-241 GPS logger. Good call &lt;a href=&quot;http://twitter.com/fordie&quot; rel=&quot;nofollow&quot;&gt;@fordie&lt;/a&gt;. http://bit.ly/2RsAu #holux #gpslogger</pre></div></div>

<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>Parsing Hashtags as Links to Twitter’s Search</h3>
<p>Finally, Twitter also allows user’s to create Hastags within their posts. Hashtags are a community-driven convention for adding additional context and metadata to your tweets. Like regular <abbr title="Universal Resource Locator">URL</abbr>s and usernames, Hastags can been parsed as a <abbr title="Universal Resource Locator">URL</abbr> to an online resource, in this case, Twitter’s search.</p>
<p>We can simply demonstrate this with the following code:</p>

<div class="wp_syntax"><div class="code"><pre class="cfm" style="font-family:monospace;"><span style="color: #333333;"><span style="color: #800000;">&lt;cfset</span> myTweet <span style="color: #0000ff">=</span> <span style="color: #800080;">REReplace</span><span style="color: #000000;">&#40;</span>myTweet,<span style="color: #009900;">'[##]+([A-Za-z0-9-_]+)'</span>,<span style="color: #009900;">'&lt;a href=&quot;http://search.twitter.com/search?q=%23\1&quot; rel=&quot;nofollow&quot;&gt;</span></span><span style="color: #0000ff;">##</span>\1<span style="color: #333333;"><span style="color: #800000;">&lt;</span><span style="color: #0000ff;">/</span>a<span style="color: #0000ff;">&gt;</span></span>','ALL') /&gt;</pre></div></div>

<p>The regular expression in this case finds all instances of <code>#hashtag</code>. The Twitter Search <abbr title="Universal Resource Locator">URL</abbr> is then applied to the hashtag.</p>
<p>The resultant HTML generated is the following:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">Woot! I've just taken receipt of my Holux M-241 GPS logger. Good call @fordie. http://bit.ly/2RsAu &lt;a href=&quot;http://search.twitter.com/search?q=%23holux&quot; rel=&quot;nofollow&quot;&gt;#holux&lt;/a&gt; &lt;a href=&quot;http://search.twitter.com/search?q=%23ipslogger&quot; rel=&quot;nofollow&quot;&gt;#gpslogger&lt;/a&gt;</pre></div></div>

<h3>All in one</h3>
<p>So, putting all the regular expressions together, you would end up with the following:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">Woot! I've just taken receipt of my Holux M-241 GPS logger. Good call &lt;a href=&quot;http://twitter.com/fordie&quot; rel=&quot;nofollow&quot;&gt;@fordie&lt;/a&gt;. &lt;a href=&quot;http://bit.ly/2RsAu&quot;&gt;http://bit.ly/2RsAu&lt;/a&gt; &lt;a href=&quot;http://search.twitter.com/search?q=%23holux&quot; rel=&quot;nofollow&quot;&gt;#holux&lt;/a&gt; &lt;a href=&quot;http://search.twitter.com/search?q=%23gpslogger&quot; rel=&quot;nofollow&quot;&gt;#ipslogger&lt;/a&gt;</pre></div></div>

<p>Which translates as the more useful tweet:</p>
<p>Woot! I&#8217;ve just taken receipt of my Holux M-241 GPS logger. Good call <a href="http://twitter.com/fordie" rel="nofollow">@fordie</a>. <a href="http://bit.ly/2RsAu">http://bit.ly/2RsAu</a> <a href="http://search.twitter.com/search?q=%23holux" rel="nofollow">#holux</a> <a href="http://search.twitter.com/search?q=%23gpslogger" rel="nofollow">#gpslogger</a></p>
<h3>Where to take it next</h3>
<p>Wrap these code snippets up into <a href="/examples/twitter/twitterise/twitterise.txt">a simple twitterise function</a> could be a good starter for ten. Following that, we could also create a simple Twitter feed reader, but I&#8217;ll leave that up to you to develop.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/parsing-twitter-usernames-hashtags-and-urls-with-coldfusion/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Let&#039;s not Dilly-Dally: ColdFusion has its Merits</title>
		<link>http://www.simonwhatley.co.uk/lets-not-dilly-dally-coldfusion-has-its-merits</link>
		<comments>http://www.simonwhatley.co.uk/lets-not-dilly-dally-coldfusion-has-its-merits#comments</comments>
		<pubDate>Fri, 09 Jan 2009 10:58:36 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[administrator]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe ColdFusion]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Atom]]></category>
		<category><![CDATA[best practice]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[content management]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[enterprise-level search]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[fundamentals]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Applications]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rapid application development]]></category>
		<category><![CDATA[Rich Internet Applications]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[The Web]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[web technology]]></category>
		<category><![CDATA[web world]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=1734</guid>
		<description><![CDATA[ColdFusion is 13 years old. That make makes it the daddy of the web world! It does not make it any less hip or useful than the relatively new kids on the block. Let's not dilly-dally, bicker or insult one another about which is best, which one is dying and which one is not worth the computer it is compiled on. What is important is to understand the merits of each language and decide which one best suits the application, not only in technical terms, but also in terms of time-to-market, cost of development, availability of a skilled workforce etc.]]></description>
			<content:encoded><![CDATA[<p>ColdFusion is 13 years old. That make makes it the daddy of the web world! It does not make it any less hip or useful than the relatively new kids on the block.</p>
<p>Take this scenario. A company I once worked for had what can be described as a business directory built upon a licensed, yet bastardised, version of a popular ColdFusion-based <abbr title="Content Management System">CMS</abbr>. It didn&#8217;t work that well! The decision was made to redevelop the application in Java. It took two years to reach the same level of functionality! What happened next? Ruby-on-Rails is what! The rest is history and beyond the topic of this post.</p>
<p>So, in effect, the application almost went full-circle in its development paradigm &#8212; both ColdFusion and Ruby-on-Rails can be considered <q>Rapid Application Development</q> environments, Java, certainly not. Why did the decision makers not stick with ColdFusion and put time aside to actually build it properly in the first place? To put it simply, they lost faith in ColdFusion; it was largely mis-understood.</p>
<p>The weakness of every programming language does not lie with the language itself per se &#8212; albeit it can have an important influencing factor &#8212; but rather with the ability, or indeed inability, of the developer to leverage the language in the most efficient and optimal way.</p>
<p>ColdFusion, like every other programming language has had and I&#8217;m sure still does have its fair share of poor developers; those people simply working with it as a means-to-an-end, rather than those passionate about the language, those people programming without understanding the fundamentals of programming or the implications of their poorly written code. This is apparent from .NET to Java, ColdFusion to Ruby, JavaScript to ActionScript.</p>
<p>Let&#8217;s not dilly-dally, bicker or insult one another about which is best, which one is dying and which one is not worth the computer it is compiled on. What is important is to understand the merits of each language and decide which one best suits the application, not only in technical terms, but also in terms of time-to-market, cost of development, availability of a skilled workforce etc.</p>
<p>ColdFusion, whether rightly or wrongly in some people&#8217;s opinion, can sit proudly amongst its peers and provide a truly compelling alternative.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>Here&#8217;s how (in no particular order):</p>
<ol>
<li>Low Total Cost of Ownership &#8211; frequently, ColdFusion is described as expensive, it simply isn&#8217;t especially if you consider the natively supported functions. But to put it bluntly, if your company cannot afford the cost of ColdFusion standard, or indeed ColdFusion hosting, you have bigger things to worry about regarding the profitability of the company; you won&#8217;t be able to afford much of anything! The problem becomes not the product. ColdFusion applications are quicker to develop and developers are vastly cheaper to employ than their peers in Java or Ruby, just look at <a href="http://www.itjobswatch.co.uk/" title="ITJobsWatch" target="_blank" rel="nofollow">ITJobsWatch</a> for examples.</li>
<li>Rapid Application Development &#8211; ColdFusion vastly simplifies tasks. What would take other languages numerous lines of code to produce is efficiently encapsulated either in a tag or function or as a setting in the administrator. This is a simplistic yet indicative example: where else can you connected to a database simply with one line of code or indeed simply by name? ColdFusion changed the idea of specifying development time in terms of months and years to weeks and months or small features a matter of hours and days. Simplicity is not the mother or all evil. To be pragmatic, simplification reduces costs.</li>
<li>Rich Internet Applications &#8211; ColdFusion may or may not have pioneered the <abbr title="Rich Internet Application">RIA</abbr> paradigm, but it has played a significant supporting role to Flash and now Flex. ColdFusion natively supports Flash remoting, providing the all important data access tier.</li>
<li>Platform Maturity &#8211; ColdFusion 8 is built upon the latest version of Java (1.6). Along with internal improvements to the ColdFusion application, this has afforded ColdFusion unprecedented speed improvements and stability.</li>
<li>Language Maturity &#8211; with each major release of ColdFusion comes many language enhancements added to the core. This means that previous addons, for example image manipulation, which came at a premium are now standard. Adobe and other companies that produce <abbr title="ColdFusion Markup Language">CFML</abbr> engines are now participating in  a <abbr title="ColdFusion Markup Language">CFML</abbr> advisory committee, which aims to set standards for the core language. This is not only a sign of maturity but a letter of intent by the industry that will mean your application will work on any engine, assuming no proprietary functionality is used.</li>
<li>The Ultimate Middleware &#8211; ColdFusion sits comfortably between any backend and front end system. Be it interfacing with a host of databases, Java, .NET, <abbr title="Component Object Model">COM</abbr>, Corba or connecting to classic <abbr title="HyperText Manrkup Language">HTML</abbr> or rich Flash, Flex and <abbr title="Asynchronous JavaScript and XML">AJAX</abbr> frontends with little or no configuration.</li>
<li>Feature Rich &#8211; what other web technology <strong>natively</strong> supports <abbr title="">PDF</abbr> generation, charting, enterprise-level search, <abbr title="Asynchronous JavaScript and XML">AJAX</abbr>, image manipulation, Atom and <abbr title="Really Simple Syndication">RSS</abbr> creation, Zip and <abbr title="Java Archive">JAR</abbr> file manipulation, a server monitor, Flex integration, encryption libraries, all important database connectors, webservice creation, <abbr title="">XML</abbr> manipulation, inbuilt reporting application (similar to Crystal Reports), email, <abbr title="File Transfer Protocol">FTP</abbr> to name but a few? I hazard a guess at none, unless you&#8217;re happy to pay a premium.</li>
<li>Platform Independent &#8211; since ColdFusion 6, when Macromedia redeveloped the entire application in Java, ColdFusion has been platform independent. You can install it on practically any machine.</li>
<li>OpenSource Alternatives &#8211; BlueDragon and Railo are both significant alternatives to Adobe ColdFusion and both have opensource alternatives, the latter of the two having recently joined the JBoss community. Adobe are also considering providing a free edition to academic institutions.</li>
<li>The Future &#8211; many commentators have mentioned Hibernate as a significant addition to the next release of ColdFusion, version 9. But having seen the prerelease notes, that is not all that will be added. Alas I&#8217;m under <abbr title="Non-Disclosure Agreement">NDA</abbr>, but rest assured, there is going to be a significant intake of breath when developers get hold of the next release. ColdFusion 8 was firmly geared towards middle management with fuzzy additions, ColdFusion 9 is set to re-address the balance with compelling language and functionality enhancements.</li>
</ol>
<p>ColdFusion evangelism needs to step up a gear! Adobe certainly doesn&#8217;t afford much marketing budget to the product, prefering <q>The Community</q> do the hard work. It is not always easy convincing the decision makers that ColdFusion is a good product of choice, without Adobe&#8217;s unnerving support, but we have to work hard, break down those barriers, encroach on events outside the comfortable sphere of the ColdFusion world and demonstrate ColdFusion&#8217;s match-winning ability.</p>
<p>ColdFusion isn’t dying, it’s simply niche. Every niche has its place.</p>
<p><strong>UPDATE:</strong> If you would like to view the ensuing debate regarding ColdFusion prompted by <a href="http://aralbalkan.com/1864" title="Aral Balkan - Why learning ColdFusion today is a waste of time." target="_blank" rel="nofollow">Aral Balkan</a>, feel free to do so. This post should serve as a positive reminder of ColdFusion&#8217;s virtues, alongside the need for a balanced and polite debate.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/lets-not-dilly-dally-coldfusion-has-its-merits/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>The Four C&#039;s of Community</title>
		<link>http://www.simonwhatley.co.uk/the-four-cs-of-community</link>
		<comments>http://www.simonwhatley.co.uk/the-four-cs-of-community#comments</comments>
		<pubDate>Thu, 04 Dec 2008 14:12:45 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Social Media]]></category>
		<category><![CDATA[Strategy]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[assistive technologies]]></category>
		<category><![CDATA[bbc]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[connectivity]]></category>
		<category><![CDATA[Content]]></category>
		<category><![CDATA[context]]></category>
		<category><![CDATA[continuity]]></category>
		<category><![CDATA[CRM]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FriendFeed]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Information Architecture]]></category>
		<category><![CDATA[Internet forum]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[king]]></category>
		<category><![CDATA[Last.fm]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[mass communications]]></category>
		<category><![CDATA[meme]]></category>
		<category><![CDATA[N95]]></category>
		<category><![CDATA[Nokia]]></category>
		<category><![CDATA[Nokia N95]]></category>
		<category><![CDATA[party social media services]]></category>
		<category><![CDATA[re-worked web interface]]></category>
		<category><![CDATA[Remember The Milk]]></category>
		<category><![CDATA[respective web browsers]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[search engine]]></category>
		<category><![CDATA[search engine optimisation]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Social Bookmarking]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[social software]]></category>
		<category><![CDATA[The Guardian]]></category>
		<category><![CDATA[The Web]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[unique selling point]]></category>
		<category><![CDATA[User Agent]]></category>
		<category><![CDATA[User Science]]></category>
		<category><![CDATA[usp]]></category>
		<category><![CDATA[virtual community]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[web accessibility]]></category>
		<category><![CDATA[Web communities]]></category>
		<category><![CDATA[web community]]></category>
		<category><![CDATA[web robots]]></category>
		<category><![CDATA[web-based community]]></category>
		<category><![CDATA[web-capabilities]]></category>
		<category><![CDATA[YouTube]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=1549</guid>
		<description><![CDATA[A web community is a web site (or group of web sites) that is a virtual community. Web communities in recent times commonly take the form of a social network service, such as Facebook, Upcoming and Last.fm, an Internet forum, a group of blogs such as WordPress.com and Blogger, or another kind of social software web application.]]></description>
			<content:encoded><![CDATA[<p>A web community is a web site (or group of web sites) that is a virtual community. Web communities in recent times commonly take the form of a social network service, such as <a href="http://www.facebook.com" title="Facebook social network" target="_blank" rel="nofollow">Facebook</a>, <a href="http://upcoming.org" title="Upcoming events" target="_blank" rel="nofollow">Upcoming</a> and <a href="http://last.fm" title="Last.fm social music platform" target="_blank" rel="nofollow">Last.fm</a>, an Internet forum, a group of blogs such as <a href="http://wordpress.com" title="WordPress managed blog hosting" target="_blank" rel="nofollow">WordPress.com</a> and <a href="http://www.blogger.com" title="Blogger publishing tool" target="_blank" rel="nofollow">Blogger</a>, or another kind of social software web application.</p>
<p>But what makes up a web community; what makes them successful? Below I discuss the four C&#8217;s of community: Content, Context, Connectivity and Community.</p>
<p><img src="http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/12/the-four-c-of-community-300x292.jpg" alt="" title="The Four C&#039;s of Community" width="300" height="292" class="aligncenter size-medium wp-image-1551" /></p>
<h3>Content</h3>
<p>A current <a href="http://en.wikipedia.org/wiki/Meme" title="Wikipedia: Meme" target="_blank" rel="nofollow">meme</a> when organising or building a website is the catchphrase <q>Content is King</q>. A big shift in the web in recent years has been the way websites are constructed. Today it&#8217;s a necessity, and indeed best practice, to separate form from content. In one hand you have the compelling content, whilst in the other you have the presentation, be it in the form of HTML and CSS, Flash or RSS, amongst others.</p>
<p>Quality content is one way in which you can make your website stand out. It is also a great way to attract the people who are needed to form the elusive community that your brand is hoping build. When considering community initiatives, there are three questions to ask: Where will the content come from; for example community driven or syndication? Does it provide indisputable value; does it have a unique selling point (<abbr title="Unique Selling Point">USP</abbr>)? Can a regular flow of quality content be maintained? Even pre-Web 2.0 initiatives have to focus on keeping the content itself fresh and relevant.</p>
<p>Web accessibility and search engine optimisation are also vital, so having content completely separated from presentation means a number of assistive technologies can make better use of the content, whilst the web robots can also readily consume the information.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>Context</h3>
<p>Context means understanding how people use your website, where they are in the user-journey and serving them the right experience at the right time. Well-designed applications and functionality have great opportunities to deliver on context.</p>
<p>For example, <a href="http://friendfeed.com" title="FriendFeed website" target="_blank" rel="nofollow">FriendFeed</a>&#8216;s iPhone version, which is simply a re-worked web interface, is perfectly designed for contextual usage on the go. Similarly, <a href="http://www.rememberthemilk.com" title="Remember The Milk website" target="_blank" rel="nofollow">Remember The Milk</a> updates the interface explicitly for <a href="http://m.rememberthemilk.com" title="Remember The Milk mobile website" target="_blank" rel="nofollow">mobile</a> and <a href="http://i.rememberthemilk.com" title="Remember The Milk iPhone website" target="_blank" rel="nofollow">iPhone</a> users, whilst also syndicating the content to applications such as Google Calendar. (It is questionable whether user-agent switching is good practice, but that is a whole new blog post.) Conversely, <a href="http://delicious.com" title="Delicious website" target="_blank" rel="nofollow">Delicious</a> makes no attempt at changing the user interface for iPhone or Nokia N95 users since the iPhone and N95 have full web-capabilities through their respective web browsers.</p>
<p>In some instances the context in which the content is displayed will require reduced functionality. For example, the <a href="http://m.last.fm" title="Last.fm mobile website" target="_blank" rel="nofollow">Last.fm mobile site</a> does not allow you to play music, but simply search music listings, view recommendations, events and friend listings, and edit settings. However, through its <abbr title="Application Programming Interface">API</abbr>, Last.fm is able to offer its data and platform to third party developers to aid the building of new applications and communities, thus changing its context.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>Connectivity</h3>
<p>Connectivity is the ability of a system, whether that is a web-based community or a device like the iPhone, to connect with little or no modification. In the realm of communities, the ability to easily connect to your peers is the Holy Grail of the application.</p>
<p>Successful communities thrive on fluid, hard-to-measure activities that are, in the purest sense, relationship-based. It&#8217;s not all about mass communications &#8212; although <a href="http://twitter.com" title="Twitter" target="_blank" rel="nofollow">Twitter</a> and <a href="http://www.youtube.com" title="YouTube" target="_blank" rel="nofollow">YouTube</a> are both bucking this trend &#8212; but more about the micro-interactions. Designing experiences that support thousands of micro-interactions means that the community is able to function, unhindered, almost indefinitely. <a href="http://www.facebook.com" title="Facebook" target="_blank" rel="nofollow">Facebook</a> lends itself expertly to micro-interactions through the user&#8217;s &#8216;wall&#8217;.</p>
<p>Companies are turning to communities as the new customer relationship management (<abbr title="customer relationship management">CRM</abbr>), but this requires people to mind them. Organisations such as <a href="http://www.37signals.com" title="37Signals" target="_blank" rel="nofollow">37Signals</a> and <a href="http://www.wildbit.com/" title="WildBit" target="_blank" rel="nofollow">WildBit</a> very effectively use Twitter to broadcast service updates and sometimes apologies, whilst the <a href="http://www.bbc.co.uk" title="British Broadcasting Corporation" target="_blank" rel="nofollow">BBC</a> and <a href="http://www.guardian.co.uk" title="The Guardian newspaper online" target="_blank" rel="nofollow">The Guardian</a> online use it to broadcast links to new content.</p>
<h3>Continuity</h3>
<p>People often don&#8217;t like change, but communities that thrive often do so though evolution to meet the needs of users. Communities need to be flexible to evolve while still providing a valuable and consistent user experience which can be sustained. Too much of a radical change will almost certainly have a detrimental impact upon visits, at least initially.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>Building communities is the new marketing for a brand, whether that is through wholely-owned properties or 3rd party social media services such as <a href="http://twitter.com" title="Twitter: micro-blogging" target="_blank" rel="nofollow">Twitter</a>, <a href="http://wordpress.com" title="WordPress: blogging" target="_blank" rel="nofollow">WordPress</a> or <a href="http://www.ning.com" title="Ning: create your own social network" target="_blank" rel="nofollow">Ning</a>. The starting point to any community is finding a niche that is currently underserved and serving that community better than anyone else. But Brands need to know a few things before they head down the community path. The web is saturated with communities. Some are thriving, while others have come and gone. Creating a community is not like your average marketing campaign that you can ditch it is a failure. If the community is successful the four C&#8217;s of content, contect, connectivity and continuity will have to be maintained and indeed, developed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/the-four-cs-of-community/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Chrome &#8211; Google&#8217;s OpenSource Browser Project</title>
		<link>http://www.simonwhatley.co.uk/google-chrome-google-opensource-browser-project</link>
		<comments>http://www.simonwhatley.co.uk/google-chrome-google-opensource-browser-project#comments</comments>
		<pubDate>Tue, 02 Sep 2008 11:30:53 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[gears]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[Google Gears]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mozilla Prism]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[Virtual Machine]]></category>
		<category><![CDATA[Web apps]]></category>
		<category><![CDATA[Webkit]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=1023</guid>
		<description><![CDATA[On 1st September 2008 Google launched a new opensource browser project named Chrome.]]></description>
			<content:encoded><![CDATA[<p>On <del datetime="2008-09-02T19:13:28+00:00">1st</del> 2nd September 2008 Google launched a new opensource browser project named <a href="http://www.google.com/chrome" title="Google Chrome" target="_blank" rel="nofollow">Chrome</a>.</p>
<p><a href="http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome.jpg" rel="lightbox"><img src="http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome.jpg" alt="" title="Google Chrome" width="440" height="359" class="aligncenter size-full wp-image-1080" /></a></p>
<p><strong>UPDATE:</strong> You can download the beta project from the <a href="http://www.google.com/chrome" title="Google Chrome" target="_blank" rel="nofollow">Google Chrome website</a>.</p>
<p>Instead of me talking you through the project, Google and <a href="http://www.scottmccloud.com/" title="Scott McCloud" target="_blank" rel="nofollow">Scott McCloud</a> have put together a cool little cartoon.</p>
<p>However, as a brief summary:</p>
<ul>
<li>Google Chrome is Google’s open source browser project.</li>
<li>The browser will use the popular <a href="http://webkit.org/" title="Webkit OpenSource Project" target="_blank" rel="nofollow">Webkit</a> <abbr title="HyperText Markup Language">HTML</abbr> rendering engine used in <a href="http://www.apple.com/safari/" title="Apple Safari" target="_blank" rel="nofollow">Safari</a> and <a href="http://www.adobe.com/products/air/" title="Adobe Integrated Runtime" target="_blank" rel="nofollow">Adobe AIR</a>.</li>
<li>The browser will include a brand new JavaScript Virtual Machine called V8.</li>
<li>The browser will include <a href="http://gears.google.com/" title="Gears" target="_blank" rel="nofollow">Gears</a> to allow developers to enhance the user experience.</li>
<li>Google Chrome will use special tabs, like more traditional browsers, but set above the address and menu bar.</li>
<li>Each browser tab will run on its own process. If one tab fails for some reason, the whole browser will not need to be restarted, losing valuable work or tabs. This is similar to functionality found in Internet Explorer 8.</li>
<li>The browser has an address bar which includes a more intuitive auto-completion feature called &#8216;omnibox&#8217;. It is said to be less &#8216;irritating&#8217; than current auto-complete/suggest functionality common to <a href="http://www.mozilla-europe.org/en/firefox/" title="Firefox" target="_blank" rel="nofollow">Firefox 3</a> or <a href="http://www.google.com/webhp?complete=1&#038;hl=en" title="Google Suggest" target="_blank" rel="nofollow">Google Suggest</a>.</li>
<li>As a default homepage Chrome presents you with a kind of <q>speed dial</q> feature, similar to the one found in <a href="http://www.opera.com/" title="Opera Browser" target="_blank" rel="nofollow">Opera</a>.</li>
<li>Chrome has a privacy mode, which allows you to create an <q>incognito</q> window <q>and nothing that occurs in that window is ever logged on your computer.</q> Again, this is similar to functionality found in Internet Explorer 8.</li>
<li>Web apps can be launched in their own browser window without address bar and toolbar, much like <a href="http://labs.mozilla.com/projects/prism/" title="Mozilla's Prism" target="_blank" rel="nofollow">Mozilla&#8217;s Prism</a> project.</li>
<li>To fight malware and phishing attempts, Chrome constantly downloads lists of harmful sites.</li>
</ul>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p><em>(Click on the images to see a larger view)</em></p>
<p><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-01.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-01-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-02.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-02-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-03.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-03-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-04.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-04-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-05.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-05-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-06.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-06-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-07.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-07-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-08.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-08-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-09.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-09-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-10.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-10-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-11.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-11-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-12.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-12-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-13.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-13-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-14.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-14-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-15.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-15-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-16.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-16-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-17.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-17-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-18.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-18-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-19.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-19-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-20.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-20-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-21.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-21-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-22.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-22-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-23.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-23-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-24.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-24-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-25.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-25-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-26.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-26-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-27.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-27-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-28.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-28-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-29.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-29-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-30.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-30-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-31.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-31-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-32.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-32-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-33.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-33-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-34.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-34-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-35.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-35-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-36.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-36-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-37.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-37-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-38.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-38-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a><a href= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-39.jpg" rel="lightbox" title="Google Chrome"><img src= "http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/09/google-chrome-39-150x150.jpg" width="150" height="150" alt= "Google Chrome - Opensource Browser Project" class= "alignleft size-thumbnail"></a></p>
<p><br style="clear:both;" /></p>
<p>You can find out more information from <a href="http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html" title="Google's blog post on Chrome" target="_blank" rel="nofollow">Google&#8217;s blog post</a> on the subject.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/google-chrome-google-opensource-browser-project/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using the MooTools Autocompleter Plugin with ColdFusion</title>
		<link>http://www.simonwhatley.co.uk/using-the-mootools-autocompleter-plugin-with-coldfusion</link>
		<comments>http://www.simonwhatley.co.uk/using-the-mootools-autocompleter-plugin-with-coldfusion#comments</comments>
		<pubDate>Thu, 21 Aug 2008 10:57:35 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Australia]]></category>
		<category><![CDATA[autocomplete]]></category>
		<category><![CDATA[autocompleter]]></category>
		<category><![CDATA[Bulgaria]]></category>
		<category><![CDATA[CNet]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Dylan Verheul]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Harald Kirschner]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JavaScript Object Notation]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[New Brunswick]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[search interface]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[united kingdom]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=883</guid>
		<description><![CDATA[In a previous post, I demonstrated how to implement Dylan Verheul’s jQuery Autocomplete plugin. Not content with demonstrating one library's plugin, it is now the turn of Mootools.]]></description>
			<content:encoded><![CDATA[<p>In a <a href="/using-jquery-auto-complete-with-coldfusion" title="Using jQuery Auto-Complete with ColdFusion">previous post</a>, I demonstrated how to implement Dylan Verheul&#8217;s <a href="http://www.dyve.net/jquery/?autocomplete" title="jQuery Autocomplete Plugin" target="_blank" rel="nofollow">jQuery Autocomplete plugin</a>. Not content with demonstrating one library&#8217;s plugin, it is now the turn of <a href="http://mootools.net/" title="MooTools JavaScript Framework" target="_blank" rel="nofollow">MooTools</a>.</p>
<blockquote><p>MooTools is a compact, modular, Object-Oriented JavaScript framework designed for the intermediate to advanced JavaScript developer. It allows you to write powerful, flexible, and cross-browser code with its elegant, well documented, and coherent API.</p></blockquote>
<p>In this post I will show you how to implement the <a href="http://digitarald.de/project/autocompleter/" title="Autocompleter Plugin" target="_blank" rel="nofollow">AutoCompleter plugin</a> by Harald Kirschner. Kirschner&#8217;s AutoCompleter plugin script for MooTools provides the functionality for text suggestion and completion. It features different data-sources (local, <acronym title="JavaScript Object Notation">JSON</acronym> or <abbr title="eXtensible Markup Language">XML</abbr>), a variety of user interactions, custom formatting, multiple selection, animations and much more.</p>
<h3>The Goal</h3>
<p>The goal of this post will be the same as the <a href="/using-jquery-auto-complete-with-coldfusion" title="Using jQuery Auto-Complete with ColdFusion">jQuery autocomplete post</a>: Allow the user to type a few characters into a standard form text input field and to automatically provide suggestions from which the user can select.</p>
<h3>Prerequisites</h3>
<ol>
<li>The <a href="http://mootools.net/download" title="Mootools Download" target="_blank" rel="nofollow">latest copy of MooTools</a></li>
<li>A basic understanding of JavaScript and <acronym title="JavaScript Object Notation">JSON</acronym></li>
<li>A server-side script that can respond to the <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> request, in our case ColdFusion</li>
</ol>
<h3>Demo</h3>
<p>The demo below will show how to interact with a simple ColdFusion script, but I&#8217;ll also provide <a href="/examples/autocomplete/mootools/" title="More examples">more (advanced) examples</a> in the <a href="/examples/autocomplete/mootools/autocomplete.zip" title="Download the files">download</a>.</p>
<h3>How It Works</h3>
<p>Once the user begins to type into the form text input field, the MooTools auto-complete is activated. After a set character length and time interval (both optional), a list of items is displayed below the input field. The user can select an item with either the arrow keys or mouse.</p>
<p>NB. Clicking back in the input field will repopulate the auto-complete list, if options are available, so that the user can change the selection. Deleting part of the chosen item will also trigger a new selection list.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>The Code</h3>
<p>There are three parts to this demo:</p>
<ol>
<li>The page’s HTML.</li>
<li>The server-side code to produce the dynamic page (i.e. to load the autocomplete <code>div</code> when the user types something into the input field).</li>
<li>The MooTools JavaScript.</li>
</ol>
<p><strong>HTML Form</strong></p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;h1&gt;Example: Country Lookup&lt;/h1&gt;
&lt;p&gt;Using &lt;abbr title=&quot;Asynchronous JavaScript and XML&quot;&gt;AJAX&lt;/abbr&gt; to interrogate the database.&lt;/p&gt;
&lt;p&gt;Example data: Australia, Bulgaria, United Kingdom&lt;/p&gt;
&lt;form name=&quot;frmAutoCompleteCountry&quot; id=&quot;frmAutoCompleteCountry&quot; action=&quot;#&quot; method=&quot;post&quot;&gt;
&lt;p&gt;
&lt;label for=&quot;country&quot;&gt;Country&lt;/label&gt;
&lt;input type=&quot;text&quot; name=&quot;country&quot; id=&quot;country&quot; /&gt;
&lt;/p&gt;
&lt;/form&gt;</pre></div></div>

<p><strong>ColdFusion</strong></p>
<p>Below is a simple ColdFusion component that takes a string as an argument. This string is part or all of the country name. The query results are parsed as an array and returned from the function, as <acronym title="JavaScript Object Notation">JSON</acronym>, to the MooTools auto-complete function.</p>

<div class="wp_syntax"><div class="code"><pre class="cfm" style="font-family:monospace;"><span style="color: #333333;"><span style="color: #800000;">&lt;cfcomponent</span> <span style="color: #0000ff">output</span><span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;false&quot;</span><span style="color: #800000;">&gt;</span></span>
&nbsp;
	<span style="color: #333333;"><span style="color: #800000;">&lt;cffunction</span> <span style="color: #0000ff;">name</span><span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;getCountry&quot;</span> <span style="color: #0000ff">access</span><span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;remote&quot;</span> <span style="color: #0000ff">output</span><span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;false&quot;</span> <span style="color: #0000ff">returntype</span><span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;array&quot;</span> returnf<span style="color: #0000ff;">or</span>mat<span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;json&quot;</span><span style="color: #800000;">&gt;</span></span>
		<span style="color: #333333;"><span style="color: #800000;">&lt;cfargument</span> <span style="color: #0000ff;">name</span><span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;country&quot;</span> <span style="color: #0000ff;">type</span><span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;string&quot;</span> <span style="color: #0000ff">required</span><span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;true&quot;</span> <span style="color: #0000ff;">/</span><span style="color: #800000;">&gt;</span></span>
&nbsp;
		<span style="color: #333333;"><span style="color: #800000;">&lt;cfset</span> <span style="color: #0000ff;">var</span> qryCountry <span style="color: #0000ff">=</span> <span style="color: #800080;">queryNew</span><span style="color: #000000;">&#40;</span><span style="color: #009900;">'country'</span><span style="color: #000000;">&#41;</span> <span style="color: #0000ff;">/</span><span style="color: #800000;">&gt;</span></span>
		<span style="color: #333333;"><span style="color: #800000;">&lt;cfset</span> <span style="color: #0000ff;">var</span> arrCountry <span style="color: #0000ff">=</span> <span style="color: #800080;">arrayNew</span><span style="color: #000000;">&#40;</span><span style="color: #ff0000;">1</span><span style="color: #000000;">&#41;</span> <span style="color: #0000ff;">/</span><span style="color: #800000;">&gt;</span></span>
&nbsp;
		<span style="color: #333333;"><span style="color: #800000;">&lt;cfquery</span> <span style="color: #0000ff;">name</span><span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;qryCountry&quot;</span> <span style="color: #0000ff">datasource</span><span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;test&quot;</span><span style="color: #800000;">&gt;</span></span>
		SELECT countryName
		FROM country
		WHERE countryName LIKE <span style="color: #333333;"><span style="color: #800000;">&lt;cfqueryparam</span> <span style="color: #0000ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;%#ARGUMENTS.country#%&quot;</span> <span style="color: #0000ff">cfsqltype</span><span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;cf_sql_varchar&quot;</span> <span style="color: #0000ff;">/</span><span style="color: #800000;">&gt;</span></span>
		<span style="color: #333333;"><span style="color: #800000;">&lt;/cfquery&gt;</span></span>
&nbsp;
		<span style="color: #333333;"><span style="color: #800000;">&lt;cfloop</span> <span style="color: #0000ff">query</span><span style="color: #0000ff;">=</span><span style="color: #009900;">&quot;qryData&quot;</span><span style="color: #800000;">&gt;</span></span>
			<span style="color: #333333;"><span style="color: #800000;">&lt;cfset</span> arrCountry<span style="color: #000000;">&#91;</span>currentRow<span style="color: #000000;">&#93;</span> <span style="color: #0000ff">=</span> qryCountry.countryName<span style="color: #000000;">&#91;</span>currentRow<span style="color: #000000;">&#93;</span> <span style="color: #0000ff;">/</span><span style="color: #800000;">&gt;</span></span>
		<span style="color: #333333;"><span style="color: #800000;">&lt;/cfloop&gt;</span></span>
&nbsp;
		<span style="color: #333333;"><span style="color: #0000ff;">&lt;</span>cfreturn arrCountry <span style="color: #0000ff;">/</span><span style="color: #800000;">&gt;</span></span>
	<span style="color: #333333;"><span style="color: #800000;">&lt;/cffunction&gt;</span></span>
&nbsp;
<span style="color: #333333;"><span style="color: #800000;">&lt;/cfcomponent&gt;</span></span></pre></div></div>

<p><strong>JavaScript</strong></p>
<p>The JavaScript will attach itself after the <acronym title="Document Object Model">DOM</acronym> is ready &#8212; this more or less relates to when the page has loaded in the browser. Each time the text input field, with the ID of country, is changed, the <code>Autocompleter.Ajax.Json</code> event is fired. This makes a call to the ColdFusion component, which returns a <acronym title="JavaScript Object Notation">JSON</acronym> object of matched items. This <acronym title="JavaScript Object Notation">JSON</acronym> object is interpreted by the plugin and rendered as an <abbr title="Hyper-Text Markup Language">HTML</abbr> un-ordered list.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;mootools.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;Observer.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;Autocompleter.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;Autocompleter.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
window.addEvent('domready', function() {
	new Autocompleter.Ajax.Json(
		'country',
		'data/Country.cfc?method=getCountry&amp;returnformat=json&amp;country=' + $('country').getProperty('value')
		, {
			'minLength': 1, // We wait for at least one character
			'overflow': true // Overflow for more entries'
	});
});
&lt;/script&gt;</pre></div></div>

<h3>Where to Take it Next</h3>
<p><strong>Unobtrusive JavaScript</strong></p>
<p>As with any page that is loaded with JavaScript and <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> functionality, it should work without JavaScript.</p>
<p>To achieve this with the above tutorial, you will need to replace the MooTools autocomplete functionality with an ‘interim’ page that allows a user to select from a list of items, effectively turning the input field into a simple search interface. Of course, all other form field information would need to be retained between pages.</p>
<h3>Download the Code</h3>
<p>The <a href="/examples/autocomplete/mootools/autocomplete.zip" title="Download the example code">example code</a> can be downloaded from the demo page. Included are ColdFusion and PHP examples.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/using-the-mootools-autocompleter-plugin-with-coldfusion/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parsing Twitter Usernames, Hashtags and URLs with JavaScript</title>
		<link>http://www.simonwhatley.co.uk/parsing-twitter-usernames-hashtags-and-urls-with-javascript</link>
		<comments>http://www.simonwhatley.co.uk/parsing-twitter-usernames-hashtags-and-urls-with-javascript#comments</comments>
		<pubDate>Mon, 21 Jul 2008 15:10:48 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[New Brunswick]]></category>
		<category><![CDATA[online musings]]></category>
		<category><![CDATA[online resource]]></category>
		<category><![CDATA[parseURL]]></category>
		<category><![CDATA[parsing]]></category>
		<category><![CDATA[Rob Douglas]]></category>
		<category><![CDATA[Simon Whatley]]></category>
		<category><![CDATA[tag]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[username]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=646</guid>
		<description><![CDATA[As part of an AIR project that I have been working on with my good friend Rob, we came across the need to parse a number of URLs within the text of a Twitter post. This may not sound too easy at first, but thanks to the prototype property available on JavaScript objects, our task was a relatively simple one.]]></description>
			<content:encoded><![CDATA[<p><strong>Updated 10/05/2011</strong></p>
<p>As part of an <acronym title="Adobe Integrated Runtime">AIR</acronym> project that I have been working on with my good friend <a href="http://www.anucreative.com" title="Rob Douglas" target="_blank" rel="nofollow">Rob</a>, we came across the need to parse a number of <abbr title="Universal Resource Locator">URL</abbr>s within the text of a <a href="http://twitter.com" title="Twitter" target="_blank" rel="nofollow">Twitter</a> post. This may not sound too easy at first, but thanks to the prototype property available on JavaScript objects, our task was a relatively simple one.</p>
<p>The prototype object of JavaScript is a pre-built object that simplifies the process of adding custom properties or methods to all instances of an object. For example, there is not a <code>trim()</code> method available on the <code>String</code> class, therefore, through the wizardry of regular expressions and the prototype property, I can add one.</p>
<p>You simply need to specify <code>String.prototype</code> before your method definition. e.g.:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">String.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">trim</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^\s+|\s+$/g</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>With this in mind, we can add methods to our <code>String</code> class, at runtime, that will allow us to manipulate the text string that is passed back in a Twitter <acronym title="JavaScript Object Notation">JSON</acronym> packet.</p>
<h3>The Goal</h3>
<p>To auto-magically parse different types of links within a text string. We will look at standard <abbr title="Universal Resource Locator">URL</abbr> links, links applied to <a href="http://twitter.com" title="Twitter" target="_blank" rel="nofollow">Twitter</a> usernames and those applied to <a href="http://twitter.pbwiki.com/Hashtags" title="Twitter Hashtags" target="_blank" rel="nofollow">Hashtags</a>.</p>
<h3>Demo</h3>
<p>The demonstration simply takes a test string and outputs it to the screen using JavaScript.</p>
<p><a href="http://www.simonwhatley.co.uk/examples/twitter/prototype/">See the demo in action.</a></p>
<h3>Parsing URLs as Links to the resource</h3>
<p>First we create a custom method of the <code>String.prototype</code> property called <code>parseURL</code>. When invoked on a string, the regular expression finds any instance of a <abbr title="Universal Resource Locator">URL</abbr> and will wrap the <abbr title="Universal Resource Locator">URL</abbr> with an <abbr title="HyperText Markup Language">HTML</abbr> anchor, with the correct <code>href</code> attribute and value applied.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">String.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">parseURL</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&amp;~\?\/.=]+/g</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">return</span> url.<span style="color: #660066;">link</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Demo 1.</strong></p>
<p>We can simply demonstrate the parsing of the link with the following code in the body of the page:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot;&gt;
var test = &quot;Simon Whatley's online musings can be found at: http://www.simonwhatley.co.uk&quot;;
document.write(test.parseURL());
&lt;/script&gt;</pre></div></div>

<p>In the above example, a simple string variable is created called <code>test</code>, which contains a <abbr title="Universal Resource Locator">URL</abbr>. The text does not contain any <abbr title="HyperText Markup Language">HTML</abbr> at this stage. We then write out the <code>test</code> variable applying the <code>parseURL()</code> method to it.</p>
<p>The resultant <abbr title="HyperText Markup Language">HTML</abbr> generated is the following:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">Simon Whatley's online musings can be found at: &lt;a href=&quot;http://www.simonwhatley.co.uk&quot;&gt;http://www.simonwhatley.co.uk&lt;/a&gt;</pre></div></div>

<p>When rendered in a browser, the code becomes a hyper-link.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>Parsing Usernames as Links to Twitter</h3>
<p>Following on from the <abbr title="Universal Resource Locator">URL</abbr> example above, we can apply a similar methodology to Twitter usernames since they can also be <abbr title="Universal Resource Locator">URL</abbr>s to their associated Twitter page.</p>
<p>Again we create a custom method of the <code>String.prototype</code> property, this time we&#8217;ll called it <code>parseUser</code>. The regular expression in this case finds all instances of <code>@username</code>. We then simply replace the <code>@</code> as this is not part of the actual username. The Twitter <abbr title="Universal Resource Locator">URL</abbr> is then applied to the username.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">String.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">parseUsername</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/[@]+[A-Za-z0-9-_]+/g</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>u<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003366; font-weight: bold;">var</span> username <span style="color: #339933;">=</span> u.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;@&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #000066; font-weight: bold;">return</span> u.<span style="color: #660066;">link</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;http://twitter.com/&quot;</span><span style="color: #339933;">+</span>username<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Demo 2.</strong></p>
<p>We can simply demonstrate this with the following code:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot;&gt;
var test = &quot;@whatterz is writing a post about JavaScript.&quot;;
document.writeln(test.parseUsername());
&lt;/script&gt;</pre></div></div>

<p>The resultant <abbr title="HyperText Markup Language">HTML</abbr> generated is the following:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;a href=&quot;http://twitter.com/whatterz&quot;&gt;@whatterz&lt;/a&gt; is writing a post about JavaScript</pre></div></div>

<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>Parsing Hashtags as Links to Twitter&#8217;s Search</h3>
<p>Finally, Twitter also allows user&#8217;s to create Hastags within their posts. Hashtags are a community-driven convention for adding additional context and metadata to your tweets. Like regular <abbr title="Universal Resource Locator">URL</abbr>s and usernames, Hastags can been parsed as a <abbr title="Universal Resource Locator">URL</abbr> to an online resource, in this case, Twitter&#8217;s search.</p>
<p>Again we create a custom method of the <code>String.prototype</code> property, this time we&#8217;ll called it <code>parseHashtag</code>. The regular expression in this case finds all instances of <code>#hashtag</code>. The Twitter Search <abbr title="Universal Resource Locator">URL</abbr> is then applied to the hashtag.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">String.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">parseHashtag</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/[#]+[A-Za-z0-9-_]+/g</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>t<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003366; font-weight: bold;">var</span> tag <span style="color: #339933;">=</span> t.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;%23&quot;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #000066; font-weight: bold;">return</span> t.<span style="color: #660066;">link</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;http://search.twitter.com/search?q=&quot;</span><span style="color: #339933;">+</span>tag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Demo 3.</strong></p>
<p>We can simply demonstrate this with the following code:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot;&gt;
var test = &quot;Simon is writing a post about #twitter and parsing hashtags as URLs&quot;;
document.writeln(test.parseHashtag());
&lt;/script&gt;</pre></div></div>

<p>The resultant <abbr title="HyperText Markup Language">HTML</abbr> generated is the following:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">Simon is writing a post about &lt;a href=&quot;http://search.twitter.com/search?q=%23twitter&quot;&gt;#twitter&lt;/a&gt; and parsing hashtags as URLs</pre></div></div>

<p>NB. Twitter&#8217;s search was originally provided by Summize. However, as of July 2008, they have been bought by Twitter and the search can be found at <a href="http://search.twitter.com" title="Twitter Search" target="_blank" rel="nofollow">http://search.twitter.com</a>.</p>
<h3>Where to take it next</h3>
<p>Using the above code, we can now create a simple Twitter feed reader. Using, for example jQuery, to get and parse the Twitter <acronym title="JavaScript Object Notation">JSON</acronym> packet we can then apply the prototype methods to the text entries.</p>
<p>It is also worth noting that it is possible to cascade the methods, so we can do the following:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot;&gt;
var test = &quot;@whatterz is writing a blog post about #twitter, which can be found at http://www.simonwhatley.co.uk&quot;;
document.writeln(test.parseURL().parseUsername().parseHashtag());
&lt;/script&gt;</pre></div></div>

<h3>Download the code</h3>
<p>The <a href="http://www.simonwhatley.co.uk/examples/twitter/prototype/">example code</a> can be downloaded from the demo page.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/parsing-twitter-usernames-hashtags-and-urls-with-javascript/feed</wfw:commentRss>
		<slash:comments>41</slash:comments>
		</item>
		<item>
		<title>ColdFusion Becomes a Teenager</title>
		<link>http://www.simonwhatley.co.uk/coldfusion-becomes-a-teenager</link>
		<comments>http://www.simonwhatley.co.uk/coldfusion-becomes-a-teenager#comments</comments>
		<pubDate>Thu, 10 Jul 2008 18:14:36 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[1999]]></category>
		<category><![CDATA[2001]]></category>
		<category><![CDATA[2005]]></category>
		<category><![CDATA[2007]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe ColdFusion]]></category>
		<category><![CDATA[Allaire]]></category>
		<category><![CDATA[Centaur]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[ColdFusion Markup Language]]></category>
		<category><![CDATA[Derby]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash platform]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Applications]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jeremy Allaire]]></category>
		<category><![CDATA[JJ Allaire]]></category>
		<category><![CDATA[JSP]]></category>
		<category><![CDATA[macromedia]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Neo]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Scorpio]]></category>
		<category><![CDATA[Visual C++]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=591</guid>
		<description><![CDATA[Today ColdFusion moved into the next stage of its life and became a teenager, hopefully not a precocious one!]]></description>
			<content:encoded><![CDATA[<p>Today ColdFusion moved into the next stage of its life and became a teenager, hopefully not a precocious one!</p>
<p><strong>Happy 13<sup>th</sup> Birthday ColdFusion.</strong></p>
<p>Adobe ColdFusion has had a long and illustrious life. The first version of ColdFusion&#8211;written almost entirely by one person, JJ Allaire and then called &#8220;Cold Fusion&#8221;&#8211;was released in 1995. This first version, although revolutionising how web applications were built, was primitive by modern standards, doing little more than database access.</p>
<p>Although originally built in Visual C++, Allaire, around 1999, took the decision to rewrite the entire ColdFusion engine in Java&#8211;a project named &#8220;Neo&#8221;&#8211;which would allow for greater portability among different platforms. The rewrite, released under the monicker MX 6, would prove to be somewhat problematic and a wholescale update to the version resulted.</p>
<p>In 2001 Allaire was acquired by Macromedia. This union brought with it the integration of Macromedia&#8217;s Flash platform via Flash Remoting; a huge step towards rich Internet applications.</p>
<p>In 2005 it was the turn of Macromedia to be acquired and they merged with Adobe. A period of instability in the ColdFusion world resulted, brought about by the knowledge that Adobe was a company that developed tools, not programming languages. However, following a successful release of ColdFusion 8 in 2007 and the announcement that a version 9 would be developed, code-named &#8220;Centaur&#8221;, fears about ColdFusion&#8217;s future have subsided&#8211;albeit the continued debate over &#8220;ColdFusion is Dead&#8221; remains boiling in the background.</p>
<p>The primary distinguishing feature of ColdFusion is its associated scripting language, ColdFusion Markup Language (<abbr title="ColdFusion Markup Language">CFML</abbr>), which compares favourably to its rivals, <abbr title="Java Server Pages">JSP</abbr>, <abbr title="Active Server Pages">ASP</abbr>.NET, or <abbr title="PHP Hypertext Preprocessor">PHP</abbr> and resembles <abbr title="HyperText Markup Language">HTML</abbr> in syntax. &#8220;ColdFusion&#8221; is often used synonymously with &#8220;CFML&#8221;, but it should be noted that there are additional <abbr title="ColdFusion Markup Language">CFML</abbr> application servers besides ColdFusion, and that ColdFusion supports programming languages other than <abbr title="ColdFusion Markup Language">CFML</abbr>, such as server-side Actionscript and embedded scripts that can be written in a JavaScript-like language, known as <abbr title="ColdFusion">CF</abbr>Script. Adobe ColdFusion also includes native support for Flex, <abbr title="Portable Document Format">PDF</abbr>, Verity and the embedded Derby database amongst a host of <a href="http://www.adobe.com/products/coldfusion/features/" title="Features of Adobe ColdFusion" target="_blank" rel="nofollow">other features</a>.</p>
<p>ColdFusion 9 is set to be an exciting release, much like its predecessor, with more features added to the core tag set, whilst also integrating other technologies such <acronym title="Adobe Integrated Runtime">AIR</acronym> and Hibernate.</p>
<p>Exciting times lay ahead. Let&#8217;s hope Adobe takes full advantage with such a fine product.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p><strong>See Also:</strong></p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/ColdFusion" title="ColdFusion" target="_blank" rel="nofollow">ColdFusion</a> Wikipedia entry</li>
<li><a href="http://en.wikipedia.org/wiki/ColdFusion_Markup_Language" title="ColdFusion Markup Language" target="_blank" rel="nofollow">ColdFusion Markup Language</a> Wikipedia entry</li>
<li><a href="http://www.www.railo-technologies.com/" title="Railo" target="_blank" rel="nofollow">Railo</a> &#8211; Free, Open Source alternative <abbr title="ColdFusion Markup Language">CFML</abbr> Engine</li>
<li><a href="http://www.smithproject.org" title="SmithProject" target="_blank" rel="nofollow">SmithProject</a> &#8211; Free, Open Source alternative <abbr title="ColdFusion Markup Language">CFML</abbr> Engine</li>
<li><a href="http://www.newatlanta.com/bluedragon/" title="BlueDragon" target="_blank" rel="nofollow">BlueDragon</a> &#8211; Free, Open Source alternative <abbr title="ColdFusion Markup Language">CFML</abbr> Engine</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/coldfusion-becomes-a-teenager/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

