<?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>robjam.es &#187; Innovation</title>
	<atom:link href="http://robjam.es/category/innovation/feed/" rel="self" type="application/rss+xml" />
	<link>http://robjam.es</link>
	<description>Now What?</description>
	<lastBuildDate>Mon, 24 May 2010 22:40:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>New Role &#8211; CTO Posse.com</title>
		<link>http://robjam.es/2010/05/new-role-cto-posse-com/</link>
		<comments>http://robjam.es/2010/05/new-role-cto-posse-com/#comments</comments>
		<pubDate>Thu, 13 May 2010 19:09:25 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[General News]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[posse]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=283</guid>
		<description><![CDATA[A few weeks ago I &#8216;officially&#8217; became the Chief Technology Officer (CTO) of Posse.com, an Australian tech startup that provides a product &#38; service affiliate sales channel for Social Networks that currently focusses on selling tickets to events. So what is an &#8220;affiliate sales channel&#8221; you ask? Think of it this way; as our lives [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frobjam.es%2F2010%2F05%2Fnew-role-cto-posse-com%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frobjam.es%2F2010%2F05%2Fnew-role-cto-posse-com%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>A few weeks ago I &#8216;officially&#8217; became the Chief Technology Officer (CTO) of Posse.com, an Australian tech startup that provides a product &amp; service affiliate sales channel for Social Networks that currently focusses on selling tickets to events.</p>
<p>So what is an &#8220;affiliate sales channel&#8221; you ask? Think of it this way; as our lives on the internet evolve, we find that we are rediscovering the old word-of-mouth adage through our new trusted networks; the online social networks. We are constantly turning to twitter, facebook and other platforms to ask questions such as &#8220;Where is the best Italian restaurant?&#8221;, &#8220;What do you think of product X before I buy it?&#8221; or &#8220;Who is going to this event?&#8221;</p>
<p>Posse gives users the ability to actively promote things that they are a &#8216;fan&#8217; of, and make a commission from any sale that occurs from their referral. The way this currently works with events, is that you may be my friend on Facebook, and when you visit my profile, you see that I am talking about how great the TED event is, and provide you with a link to buy a ticket if you are interested in doing so. You go ahead and click the link, and at the time that the sale is complete, I make a referral commission on the sale. Easy!!</p>
<p>Its an exciting opportunity with the web emerging to be a platform for cross pollination of widgets and services that enables this kind of promotion and affiliation to go on. Posse.com has been in bootstrap mode for over a year now, and after securing its first round of funding is ready to step up and make its next move forward from its humble beginnings. Posse development was originally delivered through a partnering with <a href="http://www.pollenizer.com" target="_blank">Pollenizer</a>, who have done a remarkable job of delivering a sound technology base to grow from. But expect some changes! Posse has some exciting innovation on its roadmap that we should start to see over the next 3-6 months, and I am super excited to be part of that evolution!!!!</p>
<p>Watch this space!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2010/05/new-role-cto-posse-com/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bluetooth Plantronics 906 Backbeat Headphones Review</title>
		<link>http://robjam.es/2010/02/bluetooth-plantronics-906-backbeat-headphones-review/</link>
		<comments>http://robjam.es/2010/02/bluetooth-plantronics-906-backbeat-headphones-review/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 02:29:24 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Interview]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=268</guid>
		<description><![CDATA[Like many people that work in front of their PC&#8217;s and Macs, I spend a bit of time on different types of calls; mobile, landline, Skype, and Conference Calls. I am my Skype and my iPhone a lot, but never seem to find a happy place for what devices I use to listen to or [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frobjam.es%2F2010%2F02%2Fbluetooth-plantronics-906-backbeat-headphones-review%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frobjam.es%2F2010%2F02%2Fbluetooth-plantronics-906-backbeat-headphones-review%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Like many people that work in front of their PC&#8217;s and Macs, I spend a bit of time on different types of calls; mobile, landline, Skype, and Conference Calls. I am my Skype and my iPhone a lot, but never seem to find a happy place for what devices I use to listen to or speak on.</p>
<p>My solution so far has been to use a Logitech headset on my Mac when I am Skype calls or conference calls (where audio is done through the Mac), and I use the iPhone headset that is provided in the box. But I have issues with this; 1) as much as I like the Logitech headset, I don&#8217;t find it comfortable for long periods of time and always feel like its falling off my head. The other issue is the wires &#8211; they just get in the way &amp; 2) although the iPhone headset is fine, its always falling out of my ears and I keep getting tangled in the wires.</p>
<p>So I have been looking for the holy grails of headset, here is my criteria;</p>
<ol>
<li>No Wires</li>
<li>An inner Ear solution</li>
<li>But I also want it to hang from behind my ear (inner ear always falls out too for me)</li>
<li>stereo, so typical bluetooth headsets are out (I am partially deaf from too much Rock n Roll in a previous life, and audio in both my ears is best)</li>
<li>Something that can work with both my Mac and iPhone</li>
<li>I want to be able to listen to music on it too</li>
</ol>
<p>So after some research I came across the 906 Backbeat Headphone from Plantronic and Altec Lansing, and after using it for a week, and although I am still trying to resolve a Mic issue with my Mac, I have been very impressed!!</p>
<p>These Plantronics are essentially inner ear headphones that hang behind the ear. They connect to any Bluetooth enabled device and also have a bluetooth adapter that plugin into any mini jack audio device. They also have a built in mic that seems to work quite effectively (as many people are telling me) when you are using them with the iPhone or Skype.</p>
<p>I paired it up with my iPhone first and that was pretty straight forward. Press the power button and hold it on until the LED alternates between red and blue, and the iPhone picked it up straight away. As soon as I hit play on the headset, my iPod started to play!!! And when I make or take a call, the iPhone sees my Plantronic headset and uses it by default.</p>
<p>Next I paired it up with my Mac. This was just as straight forward. Put the headphones in discoverable mode again, and the Mac pairs with it. As expected, on the Mac I can select it as an audio device and in Skype, I can also select to use the Plantronic as the audio input and output device. Although I have come across an issue at the moment that I am sure I will be able to resolve; the microphone doesn&#8217;t seem to want to work. I can get the headset to work fine and hear everything, but when I select the Plantronics as a Mic input, no one can hear anything. I am thinking I will still need to play with this somewhat to get it sorted out.</p>
<h2>The Good Stuff</h2>
<p>I find the Plantronics super comfortable. They feel very natural on my ears, are not heavy and unlike other wired headphones, when I move my head suddenly or quickly, they just stay in place. They sound awesome! When I first bought them, I charged them up and wore them on a flight back home from a work engagement and I loved them immediately. The don&#8217;t sit right in my ears, but have these telescopic buds the seem to transmit the sound neatly, and also unlike many other earphones, they don&#8217;t lose bottom end when they slightly pop out (which is their natural sitting positions). They are also very &#8216;discrete&#8217;, meaning that most people don&#8217;t even notice that you are wearing them! But the downside is when you get a call, you look like a total fool talking to himself!!! <img src='http://robjam.es/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h2>The Bad Stuff</h2>
<p>I can&#8217;t say that I have come across much stuff to complain about yet. The only things that seem to be strange is when I first get them working with my iPhone, the volume controls work perfectly, but 10 minutes in that seems to stop working. And turning them off and on again seems to fix that. The other thing that annoyed me is the fact that the only way you could charge the device was via the supplied Power Supply, that charges through a micro USB port. These days, most devices allow you to charge them through the USB port. The last thing I need is to have to look for a power outlet when travelling just for the headset. Quick fix; I jumped onto eBay and bought a USB to Micro-USB cable for $8 delivered! Not so much a gripe with these headphones as it is with Bluetooth, but I would prefer  to have a greater range than 10 metres. I am sometimes on a Skype call and would like to walk out of the environment that I am in to make it more private. But the limitations of Bluetooth don&#8217;t able me to go into a room down the hall. Oh well, have to wait for the new Bluetooth standard to be released <img src='http://robjam.es/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<h2>Conclusion</h2>
<p>When I am at my desk, I have it paired to my MacBook and pretty much always on charge. So when I am on Skype, I can just put these on my head. And if I am working for long periods of time where I want to listen to some music, I&#8217;ll use these as well. Then when I hit the road, I shut my laptop and turn on Bluetooth on my iPhone and I am listening to my iPod and can take and make calls whilst driving. Perfect solution for me!!!</p>
<p>If you are looking for comfortable stereo headphones that hand off the back of your ear, I can&#8217;t recommend these enough. I love them, but remember its only a week that I have been using them. The bluetooth pairing is great, sound great, they are very comfortable and I can find myself wearing them all day without my ears hurting.</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2010/02/bluetooth-plantronics-906-backbeat-headphones-review/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Configure Apache to run Tomcat and PHP</title>
		<link>http://robjam.es/2010/01/configure-apache-to-run-tomcat-and-php/</link>
		<comments>http://robjam.es/2010/01/configure-apache-to-run-tomcat-and-php/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 06:47:39 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=254</guid>
		<description><![CDATA[I have decided to blog about this, as I have had never ending problems in the past to try and get this configured. Here is the scenario; you have a project that requires hosting a single website in a single web domain, but you have a mix of PHP applications and Java (or in my [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frobjam.es%2F2010%2F01%2Fconfigure-apache-to-run-tomcat-and-php%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frobjam.es%2F2010%2F01%2Fconfigure-apache-to-run-tomcat-and-php%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>I have decided to blog about this, as I have had never ending problems in the past to try and get this configured. Here is the scenario; you have a project that requires hosting a single website in a single web domain, but you have a mix of PHP applications and Java (or in my instance, GRAILS) applications that you need to run. The way you do this, is configure both PHP and Java applications to run through an Apache front end. The problem is, that there is no good documentation to help you do this, so here I go!</p>
<p>In this example, I am going to show you how to run a static html site, plus a PHP application (we&#8217;ll use WordPress for this example) and a java .WAR applications all off the same instance of apache on the same server. Our site will look like this;</p>
<ul>
<li>http://www.mydomain.com/ &#8211; will have a static html site and will have links to other pages and directories under this domain, with the exception of;</li>
<li>http://www.mydomain.com/blog &#8211; will be running <a href="http://wordpress.org/" target="_blank">WordPress</a>, a PHP blogging application, &amp;</li>
<li>http://www.mydomain.com/quotation &#8211; will run a java application packaged as a .WAR</li>
</ul>
<p>I am assuming that you have access to your own server, or virtual private server (I recommend <a href="http://www.neosurge.com/" target="_blank">NeoSurge</a> hosting if you need one), and that you are running Ubuntu Server (Although my instructions are for <a href="http://www.ubuntu.com/" target="_blank">Ubuntu</a>, they are easily transferable to other falvours of Linux). Here is the process form start to end to get it setup;</p>
<h3>Server Setup</h3>
<p>I am using <a href="http://www.ubuntu.com/products/whatisubuntu/serveredition" target="_blank">Ubuntu Server 9.04</a>, and I have set up a &#8216;vanilla&#8217; instance of the server running with none of the options configured (DNS etc). Now start the server &amp; login with the userename and password elected on the install</p>
<p>Firstly we will install some tools that will come in handy later such as ssh (for terminal access), I use nano for text editing (which may not installed), but you may prefer to install vi or vim, and an ftp server</p>
<p>NB: I have included SSH installation, but with most VPS and hosted providers, this will be done for you (Otherwise, you wouldn&#8217;t be able to get into your server <img src='http://robjam.es/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  You will only need to do this if you want to run a virtual machine in your own environment).</p>
<p><strong>Install OpenSSH</strong></p>
<p>To install openSSH, type the following in the command line (NB: you will be prompted to enter your password again to gain SuperUser access &#8211; which is what the sudo command is)<strong><br />
</strong></p>
<blockquote><p>sudo apt-get install openssh-server</p></blockquote>
<p>After the installation process, you will have openSSH on the server. Next we install FTP</p>
<p><strong>Install FTP Server &#8211; vsftpd</strong></p>
<blockquote><p>sudo apt-get install vsftpd</p></blockquote>
<p>To allow log on access for authenticated users, you need to edit /etc/vsftpd.conf</p>
<blockquote><p>sudo nano /etc/vsftpd.conf</p></blockquote>
<p>find the following two lines and uncomment them (they are near each other)</p>
<blockquote><p>local_enable=YES<br />
write_enable=YES</p></blockquote>
<p>Now restart the ftp server so your new settings can be picked up</p>
<blockquote><p>sudo /etc/init.d/vsftpd restart</p></blockquote>
<p>Now you should be able to ftp, and ssh to the server so that you can make changes and upload files &#8211; which you will need to do when you start configuring mod-proxy</p>
<h3>Install required Software</h3>
<p>Next you will need to install all the software such as mysql, apache, PHP, tomcat etc. I will be just installing all the basic software, so I won&#8217;t go into the details of installing PHPMyAdmin if you require it. As there are lots of tutorials out there on how to do that.</p>
<p><strong>Install mysql</strong></p>
<blockquote><p>sudo apt-get install mysql-server</p></blockquote>
<p>This will take a while, but after its done, you will have MySql installed. Again, you will need to configure MySql to be able to create databases etc remotely, but as is, you can ssh into your machine and do what you need to do in the MySql command line.</p>
<p><strong>Install apache, java and tomcat</strong></p>
<p>Now you will install Apache, Java, Tomcat and Tomcat Admin application so that your web server and Java setup is complete, this can be done in a single command;</p>
<blockquote><p>sudo apt-get install apache2 sun-java6-jdk tomcat6 tomcat6-admin</p></blockquote>
<p>You will need to go through the license acceptance process, and depending on your internet link speed, the above may take a while.</p>
<p><strong>Install php</strong></p>
<p>Now that Apache is installed, you can go ahead and install the PHP extensions so that php code can be parsed and rendered.</p>
<blockquote><p>sudo apt-get install php5<br />
sudo /etc/init.d/apache2 restart</p></blockquote>
<p>That&#8217;s it!!! All the software is now installed and its time to do some configuration.</p>
<h3>Configuration</h3>
<p>First we are going to enable mod-proxy. Mod-proxy is the extension to apache that allows you to use apache as the proxy for web requests but then passes on the processing to tomcat (in our example). We are going to be using the AJP connector, but its pretty much the same process if you wanted to use the http connector or one of the other various adapters that apache provides.</p>
<p><strong>Enable mod-proxy</strong></p>
<blockquote><p>sudo a2enmod proxy_ajp</p></blockquote>
<p>After you enable the proxy, you now need to allow the proxying to occur. You do this by modifying your proxy.conf file.</p>
<blockquote><p>sudo nano /etc/apache2/mods-enabled/proxy.conf</p></blockquote>
<p>Find where it says &#8220;Order deny,allow&#8221;, and change the text underneath so it looks like the following</p>
<blockquote><p>Order deny,allow<br />
Allow from all<br />
#Deny from all</p></blockquote>
<p>Quite simply, you are now allowing all rules to be proxied, and turning off the Deny rules (you can obviously get more fine tuned here, and you will see lots of security warnings, which I recommend you listen to, but for the moment this will get you by.).</p>
<p>Allow AJP port by uncommenting the connector in Tomcat</p>
<blockquote><p>sudo nano /etc/tomcat6/server.xml</p></blockquote>
<p>and uncomment</p>
<blockquote><p>&lt;Connector port=&#8221;8009&#8243; protocol=&#8221;AJP/1.3&#8243; redirectPort=&#8221;8443&#8243; /&gt;</p></blockquote>
<p>Add an admin and manager user for tomcat</p>
<blockquote><p>sudo nano /etc/tomcat6/tomcat-users.xml</p></blockquote>
<blockquote><p>&lt;role rolename=&#8221;admin&#8221;/&gt;<br />
&lt;role rolename=&#8221;manager&#8221;/&gt;<br />
&lt;user username=&#8221;yourUser&#8221; password=&#8221;aPassword&#8221; roles=&#8221;admin,manager&#8221;/&gt;</p></blockquote>
<p>Give tomcat some more memory (default is never enough) and disable tomcat&#8217;s security</p>
<blockquote><p>sudo nano /etc/default/tomcat6</p></blockquote>
<p>and uncomment and change the following</p>
<blockquote><p>JAVA_OPTS=&#8221;-Djava.awt.headless=true -Xms128M -Xmx1280M -XX:MaxPermSize=256m&#8221;<br />
TOMCAT6_SECURITY=no</p></blockquote>
<p><strong>Setup tomcat</strong></p>
<p>So now you are going to setup tomcat so that you can run WARs in the tomcat Servlet Container.</p>
<blockquote><p>sudo nano /etc/tomcat6/server.xml</p></blockquote>
<p>First thing we are going to do is change the host setting. I do this by leaving the default host and creating a new one for our purposes. Add an another &lt;Host/&gt; node below the existing one in server.xml</p>
<blockquote><p>&lt;Host name=&#8221;ServletName&#8221; appBase=&#8221;webapps/ServletName&#8221;<br />
unpackWARs=&#8221;true&#8221; autoDeploy=&#8221;true&#8221; xmlValidation=&#8221;false&#8221; xmlNamespaceAware=&#8221;false&#8221;&gt;<br />
&lt;/Host&gt;</p></blockquote>
<p>The important thing in the above node is the appBase. This should point to the webapps directory (unless you have created a new one), and then the directory that will contain the servlet container. Even though unpackWARs is set to true, I find this a bit strange and like to unpack my own WARs, so I would also create the directory and in the location that is going to hold the exploded war.</p>
<blockquote><p>sudo mkdir /var/lib/tomcat6/webapps/ServletName<br />
sudo chown tomcat6:tomcat6  /var/lib/tomcat6/webapps/ServletName</p></blockquote>
<p>Uplaod the War to /var/lib/tomcat6/webapps</p>
<p>And unpack it (unzip, and make sure it has the same name as the directory under webapps)</p>
<p>OK, now configure the proxy settings for apache, back in the proxy.conf</p>
<blockquote><p>sudo nano /etc/apache2/mods-enabled/proxy.conf</p></blockquote>
<p>Turn On Proxy requests on and configure the proxying (you can put this anywhere in the file, but I like to put the following at the top of the file)</p>
<blockquote><p>ProxyRequest On<br />
ProxyPreserveHost On<br />
ProxyPass /ServletName ajp://localhost:8009/ServletName<br />
ProxyPassReverse /ServletName ajp://localhost:8009/ServletName</p></blockquote>
<p>and at the end of the file</p>
<blockquote><p>ProxyVia On</p></blockquote>
<p>The important part of the above change is that you are configuring what requests to apache are going to be passed to tomcat for processing. Above I am telling any request to /ServletName will be passed through. you can also tell it to ignore certain directories as well. For example, one common use would be to route all traffic to tomcat, but ignore static files that you want to apache to process for performance reasons. To do this, you would do something like;</p>
<blockquote><p>ProxyPass /css !<br />
ProxyPass /images !<br />
ProxyPass / ajp://localhost:8009/</p></blockquote>
<p>Pretty self explanatory, the only thing to keep in mind is any directories you want to ignore need to come first.</p>
<p>Finally, restart apache and then tomcat</p>
<blockquote><p>sudo /etc/init.d/apache2 restart<br />
sudo /etc/init.d/tomcat6 restart</p></blockquote>
<p>That&#8217;s it &#8211; you are done!!!!</p>
<h3>So now what?</h3>
<p>At the start of this post, I talked about configuring the following sites;</p>
<ul>
<li>http://www.mydomain.com/ &#8211; your static html;</li>
<li>http://www.mydomain.com/blog &#8211; WordPress PHP blog</li>
<li>http://www.mydomain.com/quotation &#8211; Java App</li>
</ul>
<p>Well now that the configuration has been done &#8211; its pretty easy. To host your static site, just upload all your html, css, js &amp; images etc into your root directory. You should find this in /var/www. To host your WordPress blog, its as easy as creating the directory /var/www/blog and uploading wordpress here.</p>
<p>PHP is all configured and you should be able to go through the standard installation process for WordPress by going to your url http://someurl.com./blog.</p>
<p>And finally the /quotation directory in my example is the directory that you need to use in the tutorial above where I have used ServletName.</p>
<p>Once you have done all this, and restarted tomcat and apache, all three sites; static, php and java should be working seamlessly&#8230;.!!</p>
<p>Have Fun&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2010/01/configure-apache-to-run-tomcat-and-php/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>I&#8217;ve got the next Killer Idea!!!&#8230;&#8230;&#8230;&#8230;&#8230;.Bullshit</title>
		<link>http://robjam.es/2010/01/ive-got-the-next-killer-idea-bullshit/</link>
		<comments>http://robjam.es/2010/01/ive-got-the-next-killer-idea-bullshit/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 04:34:20 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[General News]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=248</guid>
		<description><![CDATA[So you wake up in a cold sweat one night as you are in a &#8216;half sleep&#8221;. While you were in this delirious moment, you conjure up the most amazing idea that is going to make you a bazillion dollars and no one has done it before!!!!! ho hum&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..BORING!!!! This is one of those urban [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frobjam.es%2F2010%2F01%2Five-got-the-next-killer-idea-bullshit%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frobjam.es%2F2010%2F01%2Five-got-the-next-killer-idea-bullshit%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>So you wake up in a cold sweat one night as you are in a &#8216;half sleep&#8221;. While you were in this delirious moment, you conjure up the most amazing idea that is going to make you a bazillion dollars and no one has done it before!!!!!</p>
<p>ho hum&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..BORING!!!!</p>
<p>This is one of those urban myths that seems to never go away. People are always trying to stumble on that next killer idea. But the thing is, you and I probably have these great &#8220;wouldn&#8217;t it be awesome if&#8230;..&#8221; ideas almost every second day. And so does everyone. Since I am in the business of making ideas come to reality, I get my share of friends (also known as nut cases that think I am waiting for them to bombard me with their next great idea) calling me with their idea and are surprised by the fact that I don&#8217;t drop everything to work with them !?!?</p>
<p>So if this is not important, what is?</p>
<p><strong>Your Customer!!! Its that simple&#8230;</strong></p>
<p>Its much easier to fill an existing void for your customer than it is to convince your customer that they are in need of this fabulous invention. And timing is key, if you get it out too early, there will be no demand (you are trying to convince them they need it); too late and you have missed the market (someone else has beat you to it and your customers already have the product).</p>
<p>Its also important to extract the idea into reality. How much will it cost to build and distribute. &#8220;I can get it into every household in the country over the next 5 years!!!&#8221;, but when you do the numbers, the revenue you make never catches up to the cost of marketing and distribution (or maybe in 20 years it does) #FAIL.</p>
<p>You need to get &#8216;real&#8217; customers in front of your product; get feedback, evolve, refine, more experimentation and testing, and work on filling that need.</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2010/01/ive-got-the-next-killer-idea-bullshit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The 24 Hour Startup</title>
		<link>http://robjam.es/2010/01/the-24-hour-startup/</link>
		<comments>http://robjam.es/2010/01/the-24-hour-startup/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 20:14:13 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[General News]]></category>
		<category><![CDATA[Innovation]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=245</guid>
		<description><![CDATA[This morning I came across the most inspiring web site &#8211; http://www.24hour-startup.com/. (watch the 3 minute video presentation here) Basically the idea was a bunch of developers, business guys and designers got together and delivered a startup, from start to finish in 24 hours. And I mean START to FINISH! They get together and don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frobjam.es%2F2010%2F01%2Fthe-24-hour-startup%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frobjam.es%2F2010%2F01%2Fthe-24-hour-startup%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>This morning I came across the most inspiring web site &#8211; <a href="http://www.24hour-startup.com/" target="_blank">http://www.24hour-startup.com/</a>.  (watch the 3 minute video presentation <a href="http://www.24hour-startup.com/" target="_blank">here</a>)</p>
<p>Basically the idea was a bunch of developers, business guys and designers got together and delivered a startup, from start to finish in 24 hours. And I mean START to FINISH! They get together and don&#8217;t even have an idea, take it through to the point that on the 24th hour they launch the site live. The launch included a blog, twitter account and facebook page. &#8220;I love it when a plan comes together&#8221;</p>
<p>Then if that was not enough, they then list the startup on eBay and within 7 days get $5,100 for it. Not bad for a day&#8217;s work (sure, a long day and they have to split amongst a dozen of them)!</p>
<p>It reminds me of all the developer camps that go on, but I love the energy of this and how they deliver it.</p>
<p>Its a real inspirational story, and makes me want to lock myself in a room for a weekend to see what I could achieve!!!</p>
<p>Check ou their final product <a href="http://www.drhue.com" target="_blank">http://www.drhue.com</a> &#8211; a shop-by-colour website</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2010/01/the-24-hour-startup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programatically Scheduling Jobs in Grails with Quartz</title>
		<link>http://robjam.es/2009/12/programatically-scheduling-jobs-in-grails-with-quartz/</link>
		<comments>http://robjam.es/2009/12/programatically-scheduling-jobs-in-grails-with-quartz/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 11:11:36 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[General News]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[quartz]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=236</guid>
		<description><![CDATA[In a recent project I was working on I had a requirement to be able to set up Quartz jobs programatically as the application is running. So in other words, when the app is started, there are no jobs scheduled or running, but through a user interface, create jobs and schedule them. I could not [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frobjam.es%2F2009%2F12%2Fprogramatically-scheduling-jobs-in-grails-with-quartz%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frobjam.es%2F2009%2F12%2Fprogramatically-scheduling-jobs-in-grails-with-quartz%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>In a recent project I was working on I had a requirement to be able to set up Quartz jobs programatically as the application is running. So in other words, when the app is started, there are no jobs scheduled or running, but through a user interface, create jobs and schedule them. I could not find any info on how to do this effectively in Grails, but found it to be easy. Real Easy!!!</p>
<p>Start by installing Quartz;</p>
<blockquote><p>grails install-plugin quartz</p></blockquote>
<p>Typically when creating Quartz Jobs in Grails, you would now go ahead and do &#8220;grails create-job&#8221;, but doing so will automatically trigger the job to run every minute (even if you leave the trigger off) as a default.</p>
<p>Instead, we are going to create a Service to run as a Job. That&#8217;s right you can use regular grails services as a Job Class with some minor modifications. And all the Grails Service goodness comes along with it</p>
<blockquote><p>grails create-service JobScheduler</p></blockquote>
<p>To make the service to act as a Job, you need to do a few things. The service needs to implement the Job Interface and has to include an execute method (I also needed to use the execute method that took the JobExecutionContext) so your JobScheduler class looks like this;</p>
<blockquote><p>import org.quartz.Job</p>
<p>import org.quartz.JobExecutionContext;</p>
<p>class JobScheduler implements Job{</p>
<p>boolean transactional = false</p>
<p>public void execute (JobExecutionContext jobExecutionContext) {</p>
<p>println &#8220;I have been triggered to run &#8221; + new Date()</p>
<p>}</p>
<p>}</p></blockquote>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 216px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">import org.quartz.Job</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 216px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">import org.quartz.JobExecutionContext;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 216px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">class CrawlTriggerService implements Job{</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 216px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">boolean transactional = false</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 216px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">public void execute(JobExecutionContext jobExecutionContext) {</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 216px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">//To change body of implemented methods use File | Settings | File Templates.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 216px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">println &#8220;I HAVE BEEN TRIGGERED TO RUN NOW!!!&#8221; + new Date()</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 216px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">}</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 216px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">}</div>
<p>In this example, my job is just printing a statement so I know that the job has run. So now we need to schedule the actual job. Triggering a job can be done through a controller, service or wherever you like. And make sure you check out the JavaDocs for SimpleTrigger and TriggerUtils, they are your friends!!! The only thing to remember is to include the quartzScheduler Bean from the app context</p>
<p>Here are some examples of how you can do it.</p>
<p>Firstly, schedule a one-off job so you just schedule your JobService to be called at some time in the future, this is quite easily done with the SimpleTrigger. Add the following to your controller</p>
<blockquote><p>def quartzScheduler</p></blockquote>
<p>And then add the following action</p>
<blockquote><p>def scheduleOneOff() {</p>
<p>def jobDetail = new JobDetail(&#8220;myJob&#8221;, null, JobScheduler.class);</p>
<p>def trigger = new SimpleTrigger(&#8220;myTrigger&#8221;, null, new Date() + 1)</p>
<p>quartzScheduler.scheduleJob(jobDetail, trigger);</p>
<p>}</p></blockquote>
<p>How easy was that?!?! Its pretty self explanatory, but as you can see we create a JobDetail, which passes the job name, &#8220;myJob&#8221;, group name (null in this instance) and you pass the Job Class. This is where you tell it about your service you previously created.</p>
<p>We then create a trigger for our Job which in this instance is a simple trigger with the name &#8220;myTrigger&#8221;, and again a null group and start date in 1 day (you can obviously set it to whatever you want by passing a valid date object).</p>
<p>Finally using the quartzScheduler bean, you schedule the job by passing the jobDetail and trigger to the scheduleJob method.</p>
<p>What about scheduling a recurring job that starts at 2am on the 1st of every month? Easy, use the makeMonthlyTrigger method from the TriggerUtils anonymous class;</p>
<blockquote><p>def scheduleMonthly() {</p>
<p>def jobDetail = new JobDetail(&#8220;myJob&#8221;, null, JobScheduler.class);</p>
<p>def trigger = TriggerUtils.makeMonthlyTrigger(1, 2, 0);</p>
<p>trigger.setStartTime(new Date() + 1)</p>
<p>trigger.setName(&#8220;myTrigger&#8221;);</p>
<p>quartzScheduler.scheduleJob(jobDetail, trigger);</p>
<p>}</p></blockquote>
<p>Things are very similar except that we have used the makeMonthlyTrigger and passed the start date, hour and minute. We have also told it to start in one day from today (as before) and have given our trigger a name.</p>
<p>There are helper methods to set triggers to happen on the minute, hour, week, month etc and of course you can schedule using your handy Cron expressions too.</p>
<p>By passing JobDetail parameters to your JobService, you could theoretically just use that JobService as a scheduler wrapper service and it can then be a generic scheduler for any job you may want to trigger.</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2009/12/programatically-scheduling-jobs-in-grails-with-quartz/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Trailblazer Development Techniques</title>
		<link>http://robjam.es/2009/07/trailblazer-development-techniques/</link>
		<comments>http://robjam.es/2009/07/trailblazer-development-techniques/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 01:39:35 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=201</guid>
		<description><![CDATA[Don&#8217;t you find that when you get a small team working on a project, that they end up being far more productive compared to when you load that team up with many developers, designers, testers etc? Well I have, so much so, that I tried to formalize it at Aegeon. We called it &#8216;trailblazing&#8217; development, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frobjam.es%2F2009%2F07%2Ftrailblazer-development-techniques%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frobjam.es%2F2009%2F07%2Ftrailblazer-development-techniques%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Don&#8217;t you find that when you get a small team working on a project, that they end up being far more productive compared to when you load that team up with many developers, designers, testers etc?</p>
<p>Well I have, so much so, that I tried to formalize it at <a href="http://aegeon.us" target="_blank">Aegeon</a>.</p>
<p>We called it &#8216;trailblazing&#8217; development, but I sometimes lovingly called it &#8220;Guerrilla Warfare Development&#8221; too. Anyone that has ever been to a Code Party or Developer/Startup camp will be familiar with it. Essentially the principles are to address the 20% of functionality that delivers 80% of the value to users. It addresses the most typical use cases and ignores the &#8216;fringe&#8217; use cases.</p>
<p>The purpose of this is really to answer the question; &#8220;I have this idea, and I am pretty sure it would work, but I am not sure &#8211; what do you think?&#8221;, then you apply the &#8220;Nike &#8211; Just Do It&#8221; attitude. So rather than spend weeks/months on planning, documentation, meetings and discussions, you get the key people in a room to work on the project.</p>
<p>Here are some suggestions on how you too can implement this;</p>
<p><strong>1. Don&#8217;t worry about Scope, at first</strong></p>
<p>Don&#8217;t get hung up on fixing the scope at first. Just focus on working out what the core of the offering is. In fact, as you will see below, try not to fix the scope at all. Just make a list of the features you want to deliver, and prioritize them. then start from the top of the list and work your way down. But let your team work in flux with this. Because you are wanting to get intense work out of an extremely focused team, you will need them to work on what they want &#8211; just give them guidance on what YOU want &#8211; and that is the list.</p>
<p><strong>2. Focus</strong></p>
<p>This really should be no# 1 on the list. You need to focus, focus, focus. More so than ever. You need to omit the details, remember that you are working on the most common flow through your app. So for example, if you need people to login to your app, then build that. You are not going to build &#8220;forgot password&#8221; or &#8220;forgot username&#8221; they can come later. You can&#8217;t &#8220;WOW&#8221; users with this functionality.</p>
<p><strong>3. 2x Developers, Designer and Product Lead</strong></p>
<p>This was my magic team. Your designer is working on your UI, hopefully you can split your devs to a front end and back end dev, and your product lead is focusing on the functionality and doubles up as a tester. You want this team t be cross-functional as well (so that everyone can do a little bit of the other person&#8217;s job). The product lead tests to make sure that the key parts are being delivered. BTW: It is important to raise and prioritize defects. But only address the real critical blockers as part of this process.</p>
<p><strong>4. Don&#8217;t ignore solid foundations</strong></p>
<p>Always make sure you are building on a solid foundation. That is, you don&#8217;t want this to be a throwaway exercise. Build on tried and tested frameworks, and because in all likelihood, you will be moving what you are building into a production world, you need to make sure you are doing things right, or at least in a fashion where you can refactor them to be right. My platform of choice here is <a href="http://grails.org/" target="_blank">Grails</a>, but RoR, .net, php frameworks and lightweight Java frameworks can be good for this process too.</p>
<p><strong>5. Know your compromises</strong></p>
<p>You will need to make certain compromises when going through this process. Such as;</p>
<ul>
<li>Limited testing and test coverage</li>
<li>Code quality may not be great</li>
<li>It will be buggy</li>
<li>it won&#8217;t have &#8216;spit and polish&#8217;</li>
</ul>
<p>These are things that you will need to come back to. BUT (and a big BUT), make sure that you do schedule into the next phase to do so! The purpose of this exercise is to prototype quickly, and then build from the prototype, but you always want to make sure where you are starting from is a good base. Since you are probably halving your dev effort/time, factor in 25% at the start of the next phase to do cleanup.</p>
<p><strong>6. Fix time it &#8211; everything else floats</strong></p>
<p>If you want to fix time to a weekend, a week, a month or 3 months, it doesn&#8217;t matter. The key here is to fix time, not your deliverable. Remember, you don&#8217;t want to fix your scope, you just want to have a task list and attempt to deliver as much as you can in a fixed amount of time. The team needs to know that they have X amount of time to deliver something that works. They will then make the compromises as to how to deliver what they can in the time they have.</p>
<p><strong>7. Co-locate</strong></p>
<p>Co-location always helps with the development effort, as it reduced communication issues. I like putting the 4 people on a single table, that is the most &#8216;bang for buck&#8217; communication you will ever have. But as long as they are co-located in the same room, you will get the benefits. When your time is limited, the last thing you want to be doing is spending time emailing and having meetings.</p>
<p><strong>8. Motivation</strong></p>
<p>Typically, I have not found this to be an issue. Fixing the time and floating the scope makes this exciting. But try and do some things such as prizes and awards for such things as most features delivered in a week or least amount of bugs etc. This motivates the team to do &#8216;better&#8217; work. I have found that one of the most powerful things that motivates the team is to empower them. Let them decide what they want to build. Just guide them. And don&#8217;t worry, with a mature team, nothing will be forgotten, they will get around to everything, you won&#8217;t have anything missed.</p>
<p><strong>9. The aftermath</strong></p>
<p>Finally, we have the aftermath to cleanup. I have already talked about the cleanup you need to do in &#8220;Know your Compromises&#8221;. But try and schedule a portion of time after the effort ends to do general cleanup. Things such as;</p>
<ul>
<li>Remove links to functionality not implemented yet</li>
<li>Stub any tests that need to be done</li>
<li>Clean up any UI glitches</li>
<li>Fail gracefully (maybe through standard error page) on unimplemented functionality</li>
</ul>
<p><strong>In Conclusion</strong></p>
<p>Give it a shot, I would love to hear experiences from others about how they went, or if they have had similar experiences in setting up such a team. What were the benefits and downsides, what would you do different? I am keen to do more of this type of development, and want to learn from others too.</p>
<p>And on the suggestion of <a href="http://twitter.com/RobertFischer" target="_blank">@RobertFischer</a>, you must also subscribe to being a <a href="http://imarockstarninja.com/" target="_blank">Rockstar Ninja </a> <img src='http://robjam.es/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2009/07/trailblazer-development-techniques/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>When product development and marketing work together</title>
		<link>http://robjam.es/2009/07/when-product-development-and-marketing-work-together/</link>
		<comments>http://robjam.es/2009/07/when-product-development-and-marketing-work-together/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 23:31:32 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=197</guid>
		<description><![CDATA[I recently read a blog posting from Seth Godin, that really hit the spot with me. Selling to business (particularly to small business) can be particularly challenging. Not only will they want exceptional value for their investment and ensure low costs, but they are extremely sceptical. More so than consumers. This can be particularly daunting [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frobjam.es%2F2009%2F07%2Fwhen-product-development-and-marketing-work-together%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frobjam.es%2F2009%2F07%2Fwhen-product-development-and-marketing-work-together%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>I recently read a <a href="http://www.typepad.com/services/trackback/6a00d83451b31569e20115710add33970c" target="_blank">blog posting from Seth Godin</a>, that really hit the spot with me. Selling to business (particularly to small business) can be particularly challenging. Not only will they want exceptional value for their investment and ensure low costs, but they are extremely sceptical.</p>
<p>More so than consumers. This can be particularly daunting as it requires the seller to jump through a number of hoops to make the sale. Seth&#8217;s blog hit some quite topical areas about how to plan the strategy around this, and how product marketers and product developers need to work together.</p>
<p>In my experience (particularly in software), this is left too late. Developers come up with a great product, and then marketers are told &#8220;productise it!&#8221;. Turing a &#8216;thing&#8217; into a &#8216;product&#8217; is part of the lifecycle, and as a developer, I know the importance of working with the mrketing guys to understand fundamental aspects such as;</p>
<ul>
<li>Who is going to be our market?</li>
<li>How do we reach out them?</li>
<li>What is the problem we are solving for them?</li>
<li>How will we provide the &#8220;exceptional value&#8221; and &#8220;low cost&#8221; that they are after?</li>
</ul>
<p>In a recent project, using a Guerrilla development technique where we put together 2 developers, a designer and a product lead (who doubles as a tester), the product lead was a marketer. Apart from being an strongly opinionated and visionary individual, they provided a new perspective on t he product development that  helped getting it to market sooner.</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2009/07/when-product-development-and-marketing-work-together/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is Opera Unite the Platform for Web 3.0?</title>
		<link>http://robjam.es/2009/06/is-opera-unite-the-platform-for-web-30/</link>
		<comments>http://robjam.es/2009/06/is-opera-unite-the-platform-for-web-30/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 02:05:01 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[social computing]]></category>
		<category><![CDATA[web 3.0]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=194</guid>
		<description><![CDATA[We are all excited about what is install for us as the web evolves. Web 2.0 and Social Networking are so parsé, when are we going to get something new? I have been keeping a close eye on discussions about Social Computing. And you may have also seen a recent post of mine where I [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frobjam.es%2F2009%2F06%2Fis-opera-unite-the-platform-for-web-30%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frobjam.es%2F2009%2F06%2Fis-opera-unite-the-platform-for-web-30%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div style="text-align: left;">We are all excited about what is install for us as the web evolves. Web 2.0 and Social Networking are so parsé, when are we going to get something new?</div>
<div style="text-align: left;"></div>
<div style="text-align: left;">I have been keeping a close eye on discussions about Social Computing. And you may have also seen a <a href="../2009/03/connected-computing-how-useful-is-your-device-without-a-network/">recent post of mine</a> where I discuss &#8220;Connected Computing&#8221;. Where the premise is about our computers getting more and more powerful, but we as users, are hardly harnessing this power, and (unless we are talking high end graphics for gamers) haven&#8217;t been for years.</div>
<div style="text-align: left;"></div>
<p>With all the focus on cloud computing, why does cloud computing have to be on remote servers on some remote farm somewhere? Why can&#8217;t I just share out the data and power on my computer into a virtual farm, and so can you, and WE then become THE network?</p>
<p>I believe that <a href="http://unite.opera.com/">Opera&#8217;s new browser and the Unite strategy</a> is going down this path, and it excites me. It is taking away the power from the servers that are running websites, and putting it into my hands as a user and my desktop/laptop. I no longer have to worry about remote files, uploading, deploying worpress etc. Because now, (theoretically), this can all happen behind the scenes.</p>
<p>If Unite is what it promises to be, users will start to seamlessly deploy new services and applications. Applications could be envisaged that are mashups of web APIs, and then deployed on a local machine. There may be an opportunity for (again seamlessly) proxying these applications onto actual servers when the user&#8217;s computers are turned off, and synchronised when back on.</p>
<p>Then lets take that to the next level, where users can suddenly expose their own APIs! So here is a scenario; I create a mashup between twitter and my bank account (remember, this is all on my machine). So I can find an opportunity to monetise twitter and deposit money into my account (hypothetically, I would have no idea how this may really work), and then I expose this as a service, so others can use my API to create their own applications where I can get monetised benefits. The transactions could be &#8216;long lived&#8217; and cached, so that once my computer comes back on, the transactions are processed. The sky is the limit!!</p>
<p>We aren&#8217;t seeing all this functionality as yet, but i am sure if this platform takes off for the Opera guys, this is where it may evolve.</p>
<p>What do you think &#8211; am I nuts?</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2009/06/is-opera-unite-the-platform-for-web-30/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hey Dev Team! Embrace Changing requirements</title>
		<link>http://robjam.es/2009/05/hey-dev-team-embrace-changing-requirements/</link>
		<comments>http://robjam.es/2009/05/hey-dev-team-embrace-changing-requirements/#comments</comments>
		<pubDate>Fri, 29 May 2009 05:30:08 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[devlopment]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[product]]></category>
		<category><![CDATA[project]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=187</guid>
		<description><![CDATA[I know there is a lot of developers kicking and screaming when they see this, but hear me out, as it is important for the success of your project/product and your sanity and the business being happy with you as a developer. Lets get one thing straight; REQUIREMENTS WILL CHANGE! I cannot stress this enough. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frobjam.es%2F2009%2F05%2Fhey-dev-team-embrace-changing-requirements%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frobjam.es%2F2009%2F05%2Fhey-dev-team-embrace-changing-requirements%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>I know there is a lot of developers kicking and screaming when they see this, but hear me out, as it is important for the success of your project/product and your sanity and the business being happy with you as a developer.</p>
<p>Lets get one thing straight; REQUIREMENTS WILL CHANGE! I cannot stress this enough. What project (beyond the most simplistic) have not had requirements change? If they changed because someone didn&#8217;t provide enough details in the first place, or the business forgot something, or the market environment has changed, or a plethora of other reasons; it doesn&#8217;t matter. The business isn&#8217;t changing requirements to piss you off, they are doing it because one of the above reasons happened and they need to make the change.</p>
<p>Now that you are all angry at the above paragraph, it is time for the good news; a system to make it work!</p>
<p>Firstly, I would hope by now that you are using an Agile process to develop software, and my solution only works if you are doing Agile development. And when I say &#8220;my&#8221; solution, its not mine at all, but just my way of implementing what Agile tells us to do.</p>
<p>Since you are doing Agile you are using an iterative approach. My personal preference is to take the fixed timeboxed approach versus what Scrum tells us to do which is a variable timeboxed. In a typical fixed timeboxed approach, I generally like my iterations to run for 2 weeks. This is because in the 10 working days we have, this is usually enough to have 1 day at the start to plan the iteration, and get all the story details out, the last day to get the iteration build out (although this should not take the day at all) and 8 days to drill out the dozen or so stories you have prioritised for this iteration.</p>
<p>This iteration release is locked. So when the business says we need to change the requirement, tell them it is not going to happen in this iteration. Whatever the new requirement is, write up the stories, and add it to the backlog and then get the business to re-priorise the backlog for the next release.</p>
<p>There is only 2 times that you should effect what you are delivering for this iteration, and that is when the requirement is not a requirement change at all, but further details about a story you are currently working on that won&#8217;t effect the estimate. Ie/ &#8220;When creating the login screen, we want the word &#8216;account&#8217; to be replaced by &#8216;username&#8217;&#8221;. But if the requirement is, &#8220;We no longer want the user to login with a username, instead they are to use an email address&#8221;, this is a &#8220;We&#8217;ll have to add a new story and prioritise for the next iteration.&#8221; In this second scenario, although as a developer, you may write some redundant code to implement a username, don&#8217;t worry, all the other stuff is valid (password checks &amp; validation etc), that it would actually be more disruptive to drop this story altogether to start something else.</p>
<p>The other time that a change to requirements can effect a current iteration is when the change is actually making an existing story totally redundant. ie &#8220;We no longer want to have a username/password for login, but want to just use Open ID&#8221;. In this case, if you are currently half way through the login story which is going to be a total waste of time, its time to drop it and roll back the code that you wrote. BUT, and very big BUT. This doesn&#8217;t mean that the new requirement becomes a story for this iteration, it goes into the backlog to be prioritised for the next iteration, or at best, goes in the &#8220;unplanned stories&#8221; bucket for the current release but is the lowest priority. This is slightly controversial, and that is because you may have planned to deliver 28 points in the current iteration that has a capacity of 30 points, and by dropping the login story, you have saved 5 points and consequently are down to 23 points. That is fine, if we really do save ourselves the points, we&#8217;ll get to it at the end. There is a conscious reason for doing this; mainly it is to avoid the knee-jerk reaction to adding new stories. It buys some time for the business to really think through why they are adding this requirement, and secondly, it is a way to apply a &#8220;cost&#8221; to the business for changing a requirement. I know you are all thinking that we are punishing the business, and although this is not entirely true, it is partially true, because the reality is that changing requirements is extremely disruptive to the current iteration, and its always best to continue with what has been planned.</p>
<p>By applying these rules, you continue to set an expectation of what I called the &#8220;heartbeat for the project&#8221;. If you are running fortnightly iterations, then everyone expects to lock in the stories during the planning meeting, and they also know that the stories will be delivered in 2 weeks, and this will be consistent. Routine is not only good for babies. It is good for all of us!!</p>
<p>If you have a business that is really unsure that of what they are doing (and this happens, and is quite fair, if they are still brainstorming some of the requirements), you may want to shorten the feedback loop. The feedback loop is the time you have to get working code from an iteration out for QA or the business to test and validate. So you may want to run 1 week iterations. The only thing to take into account, is that you will not be half as productive when you half your iteration cycle. This is because you still need to go through the planning cycle. Although you may be delivering 30 points in 10 days, you will probably only be able to deliver 10 points in 5 days.</p>
<p>But this is a sure fire way to keep yourself and the business sane and happy, by putting in a process that allows changes to occur immediately, and to be implemented in no longer than 2 weeks (or the length of your iteration).</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2009/05/hey-dev-team-embrace-changing-requirements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
