<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>General Musings of a Software Engineer</title>
	<atom:link href="http://smithnicholas.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://smithnicholas.wordpress.com</link>
	<description>... thoughts, theory and opinion</description>
	<lastBuildDate>Sat, 22 Oct 2011 18:23:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='smithnicholas.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>General Musings of a Software Engineer</title>
		<link>http://smithnicholas.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://smithnicholas.wordpress.com/osd.xml" title="General Musings of a Software Engineer" />
	<atom:link rel='hub' href='http://smithnicholas.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Review: JavaFX 1.2 Application Development Cookbook</title>
		<link>http://smithnicholas.wordpress.com/2010/10/19/review-javafx-1-2-application-development-cookbook/</link>
		<comments>http://smithnicholas.wordpress.com/2010/10/19/review-javafx-1-2-application-development-cookbook/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 13:07:34 +0000</pubDate>
		<dc:creator>Nicholas</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[JavaFX]]></category>

		<guid isPermaLink="false">http://smithnicholas.wordpress.com/?p=153</guid>
		<description><![CDATA[Title: JavaFX 1.2 Application Development Cookbook Author: Vladimir Vivien Publisher: Packt Publishing Chapters at a Glance The following is a summary of the chapter content, not a list of the included recipes; most subjects contain multiple recipes. Chapter 1 : Getting Started with JavaFX - Installing the SDK - Working with IDEs - Compiling - [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=153&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Title:</strong> <a href="http://www.packtpub.com/javafx-1-2-application-development-cookbook/book?utm_source=smithnicholas.wordpress.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_004727">JavaFX 1.2 Application Development Cookbook</a><br />
<strong>Author:</strong> Vladimir Vivien<br />
<strong>Publisher:</strong> Packt Publishing</p>
<p><img src="https://www.packtpub.com/sites/default/files/imagecache/productview/8945_Mockup1Cover.jpg" alt="Front Cover" /></p>
<p><strong>Chapters at a Glance</strong><br />
The following is a summary of the chapter content, not a list of the included recipes; most subjects contain multiple recipes. </p>
<p>Chapter 1 : Getting Started with JavaFX<br />
- Installing the SDK<br />
- Working with IDEs<br />
- Compiling<br />
- Working with classes, functions, variables and data types</p>
<p>Chapter 2 : Creating JavaFX Applications<br />
- Working with shapes &amp; text<br />
- Stage management</p>
<p>Chapter 3 : Transformations, Animations and Effects<br />
- Transformation API<br />
- Transition API and custom animations<br />
- Visual effects, reflections, shadows et al. </p>
<p>Chapter 4 : Components and Skinning<br />
- GUI Controls<br />
- Using Swing components<br />
- Applying CSS styling</p>
<p>Chapter 5 : JavaFX Media<br />
- Working with images, audio and video</p>
<p>Chapter 6 : Working with Data<br />
- Storage API<br />
- Working with HttpRequest<br />
- Feed API, Atom and RSS<br />
- Using the Chart API</p>
<p>Chapter 7 : Deployment and Integration<br />
- Packaging your application or applet<br />
- Using Web Start<br />
- JavaScript controls and parameter passing</p>
<p>Chapter 8 : The JavaFX Production Suite<br />
- Exporting images (PhotoShop, Illustrator and SVG)<br />
- Loading objects from FXZ</p>
<p>Appendices<br />
- Tools, Products and Frameworks<br />
- Best practices.</p>
<p><strong>Critique</strong><br />
I wouldn&#8217;t consider myself a JavaFX novice, but certainly my experience is concentrated in specific areas, namely data and charting.  So with this in mind I made a bee line for chapter 6 and the “Visualising Data with the JavaFX Chart API” recipe.  Unfortunately I was particularly disappointed with the coverage, with one recipe only covering the basics.  The charting API in my opinion woeful, although it is very easy to use and can display simple graphs it offers very few out of the box features.   For example without the help of an “<a href="http://rakeshmenonp.wordpress.com/2010/06/12/javafx-rotate-chart-axis-label/">enhancement</a>” you can&#8217;t even rotate labels an axis.  I would therefore consider it a prime candidate for a few helpful recipes, sadly not. </p>
<p>That being said, although fringe areas like the chart API might be lacking the “core” recipes are strong.  Sourcing and handling your data in a RIA application is vital and there is good coverage of the use of HttpRequest and fair sized recipe for RSS and Atom feeds.  The examples also integrate with the likes of Yahoo weather and Goolge maps, which I think leads to a more interesting experience.</p>
<p>Similarly the introduction to working with JavaFX and the packaging of your product is also thorough.  The book therefore caters well for new developers, as well as a few gems for the more experienced.</p>
<p>Not having worked with audio and video before I was keen to see what the book had to offer with that respect.  Although the audio recipe was fairly simplistic I felt the two recipes for working with video made up for that; and are incidentally probably the longest the author dwells on one subject area.</p>
<p>As you might expect there are code samples that accompany the book, downloadable from packtpub.com.  The samples I fired up all worked well and are in-line with the written examples from the book.  The only minor issue being the active platform for chapter 2 samples seems to be 1.3, odd for a book targeting 1.2!</p>
<p>If you&#8217;re new to JavaFX development this is a good starting point, it serves as a good introduction to many of the APIs shipped with the SDK.  From experience I can say JavaFX Script literature on-line is not as plentiful as most languages, so a single point of reference with this number of examples is beneficial.  If you&#8217;re more experienced JavaFX Script developer you may feel you have out grown a lot of the content in this title; however the scope is broad, so it&#8217;s unlikely you will have experience with everything covered here.</p>
<p>It is worth pointing out, before considering this title, you should be aware that Oracle have recently announced the termination of JavaFX script with version 2.0 of the platform (due late 2011).  Although the JavaFX will live on with other JVM languages, this may well be the only cookbook published for the doomed JavaFX Script.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smithnicholas.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smithnicholas.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smithnicholas.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smithnicholas.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smithnicholas.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smithnicholas.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smithnicholas.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smithnicholas.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smithnicholas.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smithnicholas.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smithnicholas.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smithnicholas.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smithnicholas.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smithnicholas.wordpress.com/153/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=153&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smithnicholas.wordpress.com/2010/10/19/review-javafx-1-2-application-development-cookbook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5695b708f679e16ba99ac01d15104422?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smithnicholas</media:title>
		</media:content>

		<media:content url="//www.packtpub.com/sites/default/files/imagecache/productview/8945_Mockup1Cover.jpg" medium="image">
			<media:title type="html">Front Cover</media:title>
		</media:content>
	</item>
		<item>
		<title>How to deploy your Grails application (on EATJ)</title>
		<link>http://smithnicholas.wordpress.com/2010/09/20/deploying-your-grails-application-on-eatj/</link>
		<comments>http://smithnicholas.wordpress.com/2010/09/20/deploying-your-grails-application-on-eatj/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 17:55:50 +0000</pubDate>
		<dc:creator>Nicholas</dc:creator>
				<category><![CDATA[Theory]]></category>
		<category><![CDATA[EATJ]]></category>
		<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://smithnicholas.wordpress.com/?p=113</guid>
		<description><![CDATA[In this post I&#8217;m going to show you how easy it is to host your Grails application online. People also have a perception that Java hosting is expensive, and it can be; however for low use applications and initial production proving, a budget one should suffice. So you&#8217;re at the stage where you&#8217;ve finished initial [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=113&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In this post I&#8217;m going to show you how easy it is to host your Grails application online.  People also have a perception that Java hosting is expensive, and it can be; however for low use applications and initial production proving, a budget one should suffice.</p>
<p>So you&#8217;re at the stage where you&#8217;ve finished initial development your Grails application and now it&#8217;s time to get it online for the world to see.  You&#8217;ve cast your eye over <code>http://www.grails.org/hosting</code> and EATJ is the one that catches your eye; as it&#8217;s the cheap &#8211; like the budgie.  At $9.85 per month, this is pretty good value for Java hosting, and gets even cheaper if you plump for a year term, $8.21.</p>
<p>So let&#8217;s have a look at what&#8217;s involved:</p>
<p><strong>1) Register with EATJ</strong></p>
<p>As you can see EATJ lets you create an account for free, sadly that&#8217;s all it lets you do.  After you have verified your email address you will be asked to “pay for your free trial”, your also instructed to contact customer support for a refund after your trial.  I guess this is basically equivalent of a money back guarantee.</p>
<p>After paying via PayPal or credit card you then have email support@eatj.com with your username.</p>
<p><strong>2) Wait</strong></p>
<p>Yes, wait; after emailing customer support it took a mere three and a half hours to activate the account.</p>
<p><strong>3) Set up MySQL Workbench</strong></p>
<p>Your EATJ console comes with links to phpMyAdmin, which is fine if your not planning to ferret around the database much, but likely you will need a half decent browser.  Obviously you can use TOAD or whatever floats your boat though.</p>
<p><code> hostname: s11.eatj.com<br />
port: 3307<br />
username: username<br />
password: password</code></p>
<p>You need to check you server address in your welcome email, and careful of the port, the default one is usually 3306.  Once you have connected to the database you know you have the correct settings for the next step.</p>
<div id="attachment_135" class="wp-caption aligncenter" style="width: 310px"><a href="http://smithnicholas.files.wordpress.com/2010/09/workbench1.gif"><img src="http://smithnicholas.files.wordpress.com/2010/09/workbench1.gif?w=300&#038;h=177" alt="MySQL Workbench" title="MySQL Workbench" width="300" height="177" class="size-medium wp-image-135" /></a><p class="wp-caption-text">Add New Connection</p></div>
<p><strong>4) DataSource.groovy</strong></p>
<p>Now put your newly determined database settings into datasource.groovy.</p>
<div style="padding-left:50px;">
<code>environments {<br />
&nbsp;...<br />
&nbsp;production {<br />
&nbsp;&nbsp;dataSource {<br />
&nbsp;&nbsp;dbCreate = "update"<br />
&nbsp;&nbsp;url = "jdbc:mysql://localhost:3307/username?autoReconnect=true"<br />
&nbsp;&nbsp;driverClassName = "com.mysql.jdbc.Driver"<br />
&nbsp;&nbsp;username = "username"<br />
&nbsp;&nbsp;password = "password"<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}<br />
</code></div>
<p></p>
<p>Change the dbCreate property if required, but as a production environment I can&#8217;t really see this being any different.  Update your username and password as necessary; password is by default in clear text.  If you want to encrypt the password, the clearest instructions I have found on how to do this are attached to this <a href="http://jira.codehaus.org/browse/GRAILS-3620">JIRA</a>, there also this <a href="http://www.grails.org/1.1+Release+Notes">Release Note</a>.</p>
<p>I assume at some point you would have carried out local testing on MySQL and therefore have the JDBC connector on your classpath.  If not, you should get the <a href="http://www.mysql.com/downloads/connector/j/">latest version</a> from MySQL, then simply drop the jar into your lib folder.</p>
<p><strong>5) Config.groovy</strong></p>
<p>You need to add the root of your production application to environments block in the config.groovy file, like with the other environments is needed for relative paths in your application.</p>
<div style="padding-left:50px;">
<code><br />
environments {<br />
&nbsp;production {<br />
&nbsp;&nbsp;grails.serverURL = "http://username.s11.eatj.com/appname"<br />
&nbsp;}<br />
&nbsp;…<br />
}</code>
</div>
<p></p>
<p>In the example above I&#8217;m using the sub domain that EATJ provide, check your welcome email carefully though as “s11” may be different.  If you want to use your own domain you can add one after logging in to your EATJ console at eatj.com, you&#8217;ll also find out the ns setting there too.  Adjust your root accordingly.</p>
<p><strong>6) Create a war</strong></p>
<p>Now you&#8217;ve updated your production settings simply run the war command from the grails console <code>grails war</code>.  This should then deposit the war in the target folder of you application, and will be given the name and version provided in the <code>application.properties</code> file. i.e. <code>myapp-0.1.war</code>.</p>
<p><strong>7) Upload the war</strong></p>
<p>You have two choices for uploading your war now, you can either use the up-loader from the EATJ console from logging in at eatj.com, or you can hit the Tomcat manager directly: <code>http://username.s11.eatj.com/manager/html</code> .  When asked for credentials, username should be “admin” rather then your account username, but the password will be the same as your account one.</p>
<p><strong>8) Check out your application</strong></p>
<p>That really should be it!  It&#8217;s fair to say, when I started taking notes during the process I expected to encounter a few more steps and ultimately describe a more involved process.  A real testament to how easy it is to deploy a Grails application in the wild.  In fact the longest part of the whole process is waiting for EATJ to activate the account!</p>
<p>Its worth mentioning a couple of minor issues though; perhaps more specific to my circumstances:</p>
<p><strong>Get working on local tomcat first.</strong></p>
<p>Interesting point here; be careful of your references in your gsp files.  Jetty seems to be case-insensitive when developing in Windows, and therefore in running a Grails application in a dev set-up will hide potential errors.  For example I was calling a template:</p>
<p><code>&lt;g:render template="/landing/templateName" /&gt; </code></p>
<p>The actual file name was <code>_templatename.gsp</code>; an error on my part that was being hidden by Jetty in development.  There does appear to be an open <a href="http://jira.codehaus.org/browse/JETTY-520">JIRA </a> to address this though; worth keeping an eye on.  In the meantime I recommend before uploading your war to EATJ you deploy it to a local Tomcat instance and touch each page.</p>
<p><strong>Delete your tables, mine still had data!</strong></p>
<p>Rather lazily and (irresponsibly), EATJ don&#8217;t appear to appear to clear down the environments very carefully.  The one I was assigned had a database schema (complete with data) from a previous owner.  Make sure you drop any tables that shouldn&#8217;t be there when you get an account.  Similarly I&#8217;d make sure you drop all tables if/when you leave EATJ; particularly if they have people&#8217;s personal data!</p>
<p>So far I have no other complaints about the EATJ service; although it is fair to say I haven&#8217;t stressed it.  If you can see past the ropey sign up process and poor housekeeping it seems to be good value.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smithnicholas.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smithnicholas.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smithnicholas.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smithnicholas.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smithnicholas.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smithnicholas.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smithnicholas.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smithnicholas.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smithnicholas.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smithnicholas.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smithnicholas.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smithnicholas.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smithnicholas.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smithnicholas.wordpress.com/113/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=113&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smithnicholas.wordpress.com/2010/09/20/deploying-your-grails-application-on-eatj/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5695b708f679e16ba99ac01d15104422?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smithnicholas</media:title>
		</media:content>

		<media:content url="http://smithnicholas.files.wordpress.com/2010/09/workbench1.gif?w=300" medium="image">
			<media:title type="html">MySQL Workbench</media:title>
		</media:content>
	</item>
		<item>
		<title>New JavaFX book published</title>
		<link>http://smithnicholas.wordpress.com/2010/09/16/new-javafx-book-published/</link>
		<comments>http://smithnicholas.wordpress.com/2010/09/16/new-javafx-book-published/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 17:13:03 +0000</pubDate>
		<dc:creator>Nicholas</dc:creator>
				<category><![CDATA[Thought]]></category>
		<category><![CDATA[JavaFX]]></category>

		<guid isPermaLink="false">http://smithnicholas.wordpress.com/?p=101</guid>
		<description><![CDATA[It&#8217;s fair to say the publication of a new technology book in itself is quite unremarkable, however consider, this is the only JavaFX book to be publish so far this year. As mentioned previously JavaFX is struggling with a poor uptake in the RIA sector, and the lack of publications is as strong an indication [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=101&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s fair to say the publication of a new technology book in itself is quite unremarkable, however consider, this is the only JavaFX book to be publish so far this year.  As mentioned previously JavaFX is struggling with a poor uptake in the RIA sector, and the lack of publications is as strong an indication as any. </p>
<p>As a practitioner it is often difficult to find helpful JavaFX information on-line, and given that little user content has been written so far.  It is perhaps no surprise then that this offering comes in the form of a cookbook.  Vladimir Vivien&#8217;s <a href="http://www.packtpub.com/javafx-1-2-application-development-cookbook/book?utm_source=smithnicholas.wordpress.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_004727">JavaFX 1.2 Application Development Cookbook</a> is no lightweight either, with no less then 80 recipes over the best part of 330 pages.</p>
<p>A full review will follow&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smithnicholas.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smithnicholas.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smithnicholas.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smithnicholas.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smithnicholas.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smithnicholas.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smithnicholas.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smithnicholas.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smithnicholas.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smithnicholas.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smithnicholas.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smithnicholas.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smithnicholas.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smithnicholas.wordpress.com/101/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=101&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smithnicholas.wordpress.com/2010/09/16/new-javafx-book-published/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5695b708f679e16ba99ac01d15104422?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smithnicholas</media:title>
		</media:content>
	</item>
		<item>
		<title>Displaying a JavaFX Applet in a Grails Application</title>
		<link>http://smithnicholas.wordpress.com/2010/07/07/displaying-a-javafx-applet-in-a-grails-application/</link>
		<comments>http://smithnicholas.wordpress.com/2010/07/07/displaying-a-javafx-applet-in-a-grails-application/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 20:36:41 +0000</pubDate>
		<dc:creator>Nicholas</dc:creator>
				<category><![CDATA[Theory]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[JavaFX Applets]]></category>
		<category><![CDATA[jnlp]]></category>

		<guid isPermaLink="false">http://smithnicholas.wordpress.com/?p=58</guid>
		<description><![CDATA[I&#8217;m going to take a quick look at how to put a JavaFX applet into your Grails application. Currently there&#8217;s only a Grails plug-in for “old-style” Java applets, and not one that enables you to leverage the Java Web Start functionality with a jnlp file. Fortunately it&#8217;s very easy to get a JavaFX Applet into [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=58&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to take a quick look at how to put a JavaFX applet into your Grails application.</p>
<p>Currently there&#8217;s only a Grails plug-in for “old-style” Java applets, and not one that enables you to leverage the Java Web Start functionality with a jnlp file.</p>
<p>Fortunately it&#8217;s very easy to get a JavaFX Applet into your web application.  If you&#8217;re not building a Grails application, a lot of steps are still the same for any JEE application.  As I found though the web is not awash with JavaFX how-to&#8217;s, probably due to it&#8217;s poor take up.</p>
<p>So assuming you have already developed your JavaFX applet and you have a jar and a browser jnlp file.  If you haven&#8217;t, but want something to start working with <a href="http://www.javafx.com/docs/gettingstarted/eclipse-plugin/create-first-javafx-app-eclipse.jsp">here</a> is a simple tutorial.</p>
<p>You now need to make a home for your applet files in your Grails application, and a “dist” folder is a good a place as any.  So in your “web-app” directory, create a “dist” folder.</p>
<div id="attachment_59" class="wp-caption aligncenter" style="width: 207px"><a href="http://smithnicholas.files.wordpress.com/2010/07/create_dist.gif"><img class="size-full wp-image-59" title="create_dist" src="http://smithnicholas.files.wordpress.com/2010/07/create_dist.gif?w=197&#038;h=198" alt="" width="197" height="198" /></a><p class="wp-caption-text">Create dist folder</p></div>
<p>From your JavaFX project, drop your *.jar file and *_browser.jnlp file into the “dist” folder.  If you&#8217;re having trouble finding them using Eclipse, try refreshing your JavaFX project and the should be in a “dist” folder there.  You will need to have run the JavaFX script as an Applet rather than an Application in order to create the *_browser.jnlp file.  You can do this in the Run Configurations in Eclipse.</p>
<p>Once you&#8217;ve copied the files you need to update the paths in the jnlp file so it reference its new location, so open it up.</p>
<p>The codebase attribute should be changed so the jnlp tag reads:</p>
<p><code>&lt;jnlp spec="1.0+" codebase="http://localhost:8080/application_name/dist/" href="Main_browser.jnlp"&gt;<br />
</code></p>
<p>and href attribute of the homepage tag.</p>
<p><code>&lt;homepage href="http://localhost:8080/dist/"/&gt;</code></p>
<p>Obviously replace localhost with the server you intend to use, and application_name is your actual application name.  If you have updated your Config.groovy with &#8230; <code>grails.app.context = "/"</code> &#8230; so you don&#8217;t have use the application name in URLs you should use http://localhost:8080/dist/ instead.</p>
<p>Next you need to make a script declaration in the GSP file where you want the applet to appear:</p>
<p><code>...<br />
&lt;script&gt;<br />
    javafx(<br />
        {<br />
              archive: "/dist/Main.jar",<br />
              width: 200,<br />
              height: 200,<br />
              code: "package.Main",<br />
              name: "Main"<br />
        }<br />
    );<br />
&lt;/script&gt;<br />
...</code></p>
<p>The archive attribute uses the base url provided in environments block from Config.groovy, so make sure this is correct for your full path.  Or if your feeling naughty you can use an absolute path.</p>
<p><code>&lt;jnlp spec="1.0+" codebase="file:/C:/workspace/JavaFXApp/dist/" href="Main_browser.jnlp"&gt;</code></p>
<p>The width and height attributes should be made similar to the ones defined in your the Stage object of the JavaFX script, otherwise your applet might end up being cropped.</p>
<p>The code attribute needs to have the fully qualified name of the script, so replace &#8220;package&#8221; with what is appropriate to you.</p>
<p>Next add the script src in the head of your GSP.</p>
<p><code>&lt;head&gt;<br />
		...<br />
		&lt;script src="http://dl.javafx.com/1.2/dtfx.js"&gt;&lt;/script&gt;<br />
		...<br />
	&lt;/head&gt;</code></p>
<p>Finally you might want to add the following to your grails.mime.types in you Config.groovy.</p>
<p><code>grails.mime.types = [<br />
...<br />
jnlp: 'application/x-java-jnlp-file'<br />
…<br />
]</code></p>
<p>Your applet will now display in your application; but you can also hit the URL directly and the applet will load using Web Start e.g.  http://localhost:8080/application_name/dist/Main_browser.jnlp</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smithnicholas.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smithnicholas.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smithnicholas.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smithnicholas.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smithnicholas.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smithnicholas.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smithnicholas.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smithnicholas.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smithnicholas.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smithnicholas.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smithnicholas.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smithnicholas.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smithnicholas.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smithnicholas.wordpress.com/58/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=58&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smithnicholas.wordpress.com/2010/07/07/displaying-a-javafx-applet-in-a-grails-application/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5695b708f679e16ba99ac01d15104422?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smithnicholas</media:title>
		</media:content>

		<media:content url="http://smithnicholas.files.wordpress.com/2010/07/create_dist.gif" medium="image">
			<media:title type="html">create_dist</media:title>
		</media:content>
	</item>
		<item>
		<title>In summary: Reverse Engineering and Design Recovery A Taxonomy</title>
		<link>http://smithnicholas.wordpress.com/2010/06/10/45/</link>
		<comments>http://smithnicholas.wordpress.com/2010/06/10/45/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 15:44:09 +0000</pubDate>
		<dc:creator>Nicholas</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Chikofsky]]></category>
		<category><![CDATA[Cross]]></category>
		<category><![CDATA[Design Recovery]]></category>
		<category><![CDATA[Reverse Engineering]]></category>

		<guid isPermaLink="false">http://smithnicholas.wordpress.com/?p=45</guid>
		<description><![CDATA[From time to time you come across a paper that fully describes a subject, so much so that all other writing on the area either references it or rip it off. Reverse Engineering and Design Recovery A Taxonomy is one such paper; and I will now rip it off “summaries” it: Chikofsky and Cross outline [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=45&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>From time to time you come across a paper that fully describes a subject, so much so that all other writing on the area either references it or rip it off.  <a href="http://smithnicholas.files.wordpress.com/2010/06/chikofsky.pdf">Reverse Engineering and Design Recovery A Taxonomy</a> is one such paper; and I will now <strike>rip it off</strike> “summaries” it:</p>
<p>Chikofsky and Cross outline six key terms used within the domain of reverse engineering:</p>
<blockquote><p><span style="font-weight:bold;">Forward Engineering:</span><br />
This is the “traditional” process of moving through the stages of design, starting at the highest level of abstraction moving to a specific implementation.</p>
<p><span style="font-weight:bold;">Reverse Engineering:</span><br />
This involves analysing a “subject” system in order to determine its components and the relationship between those components.  It also involves the creation of alternative representations of the system, usually at a higher level of abstraction.  Reverse engineering does not involve changing or replicating the system, it is only concerned with an examination of the system and can occur at any stage in the software development life cycle.</p>
<p><span style="font-weight:bold;">Re-documentation:</span><br />
Whereas reverse engineering will often lead to the abstraction level being raised, re-documentation is concerned with creating an alternative view at the same abstraction level.  This alternative view is usually targeted at a human audience, and attempts to recover documentation for a system that for whatever reason no longer exists.  A number of tools exist to make the task of re-documentation easier, e.g. pretty painters and diagram generators.</p>
<p><span style="font-weight:bold;">Design Recovery:</span><br />
This is the process of adding “domain knowledge, external information and deduction” to information directly garnered from the subject system.  It is not a process on its own, but is incorporated in reverse engineering.  In some instances,  it provides a wider range of information then the system itself can provide.</p>
<p><span style="font-weight:bold;">Restructuring:</span><br />
Restructuring like re-documentation occurs at the same abstraction level; however it is concerned with modifying the representation, whilst providing the same overall outcome.  It often involves (but is not restricted to) the restructuring of code and models.  Changes are made to components so that they produce the same result, but improve the way they achieve it.</p>
<p><span style="font-weight:bold;">Re-engineering:</span><br />
Also referred to as renovation or reclamation, re-engineering is the process of amending the subject system.  As a process it will provide functionality the system should have originally had, or make changes to meet new business needs.  The process usually involves a reverse engineering aspect to understand the subject system, followed by a forward engineering aspect to implement the changes.</p></blockquote>
<p>The paper goes on to then outline six objectives for the future development of reverse engineering:</p>
<blockquote><p>
<strong>Cope with complexity:</strong><br />
Better methods and ways of automation in order to deal with large complex systems.</p>
<p><strong>Generate alternative views:</strong><br />
Usually alternative views are graphical, these are expensive to maintain, both in time and money.  Reverse engineering can facilitate the the auto-generation of graphical and non graphical views.</p>
<p><strong>Recover lost information:</strong><br />
Design recovery in particular allows us to discover information about the system that is missing from the documentation.</p>
<p><strong>Detect side effects:</strong><br />
Provides a method to deliver observations on the results of poor design or subsequent maintenance.</p>
<p><strong>Synthesize higher abstractions:</strong><br />
As a discipline reverse engineering requires improved processes, (most likely automated) for the production of alternative views that “transcend to higher abstraction levels”  </p>
<p><strong>Facilitate reuse:</strong><br />
Re engineering can assist in the identification of reusable components from the subject system.</p></blockquote>
<p>As a final point the paper discusses the economics of Reverse Engineering; drawing attention to, understanding and maintenance is particularly costly for software owners. Over the complete life cycle of a product, maintenance may account for “50 to 90 percent”, thus the potential for savings using reverse engineering techniques could be significant.</p>
<p>For me it&#8217;s interesting to see that the principals outlined here, 20 years on are still as valid today.  As software engineers we often believe we&#8217;re breaking boundaries, but most of the time this is not the case.  Surprisingly though, in these 20 years we have actually achieved very little in expediting these processes.  Having worked on two design recovery projects in the past, one in the public sector and one for a large UK bank, industry seems content with approaching the majority of the work manually.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smithnicholas.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smithnicholas.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smithnicholas.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smithnicholas.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smithnicholas.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smithnicholas.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smithnicholas.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smithnicholas.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smithnicholas.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smithnicholas.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smithnicholas.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smithnicholas.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smithnicholas.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smithnicholas.wordpress.com/45/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=45&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smithnicholas.wordpress.com/2010/06/10/45/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5695b708f679e16ba99ac01d15104422?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smithnicholas</media:title>
		</media:content>
	</item>
		<item>
		<title>The SchoolForStartups Experience</title>
		<link>http://smithnicholas.wordpress.com/2010/05/14/the-schoolforstartups-experience/</link>
		<comments>http://smithnicholas.wordpress.com/2010/05/14/the-schoolforstartups-experience/#comments</comments>
		<pubDate>Fri, 14 May 2010 13:13:20 +0000</pubDate>
		<dc:creator>Nicholas</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Doug Richard]]></category>
		<category><![CDATA[SchoolForStartups]]></category>
		<category><![CDATA[Startup]]></category>

		<guid isPermaLink="false">http://smithnicholas.wordpress.com/?p=17</guid>
		<description><![CDATA[Being a modern technology slave, I often to envisage using my expertise to start my own enterprise. So when Doug Richard (formally of the BBC&#8217;s Dragons Den) brought his School for Startups to the University of Leicester, I decided to go along. After all the university was subsidising tickets, so for £15 I couldn&#8217;t really [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=17&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Being a modern technology slave, I often to envisage using my expertise to start my own enterprise.  So when Doug Richard (formally of the BBC&#8217;s Dragons Den) brought his <a href="http://www.schoolforstartups.co.uk/">School for Startups</a> to the University of Leicester, I decided to go along.   After all the university was subsidising tickets, so for £15 I couldn&#8217;t really go wrong!  As a social enterprise the full price tickets are not unreasonable either.</p>
<p>The overall impression of the day, was a very enjoyable experience; which is perhaps not what you want from a “school”.  Doug is a natural public speaker, that can captivate the audience with anecdotes and jokes.  For a days entertainment it was good value, but I didn&#8217;t really get out what I expected.  No discussion on business plans, very little on business models, no advice on how you might go about getting investment.  A lot of the content for a intelligent person could actually be put down to common sense: “Sell something people want”, “Do something new”.  In fairness however, there is a limit to what you can cover in a single six hour day.</p>
<p>That being said, there were a number of “surgery” sections, when entrepreneurs could come on stage and discuss their own business.  These were the people that got the most out of the day, getting specific advice about off the beaten track concerns.  I&#8217;m sure also, that the people queued to asked questions during the intermissions got as good advice as well.</p>
<p>If your considering going, make sure you have specific questions.  If you&#8217;re actually thinking of starting a business and want schooling&#8230; this is perhaps not for you.  </p>
<p>Collection of my favourite quotes/comments from the day:</p>
<blockquote><p>Ideas are cheap – have 100</p>
<p>People tell you what you want to hear, few are going to tell you, your baby is actually ugly (or your business)</p>
<p>Take something and do it cheaper</p>
<p>Be remarkable, make something worth talking about.  Word of mouth in the communication age is more important then ever</p>
<p>Who invented the iPod&#8230; Stalin. (in reference to the fact it has fewer features and gives you less rights then competitors) </p>
<p>Go out of your way to get companies to want to crush you.  At least your being noticed.</p>
<p>Open source products are interesting as the number of contributors drives improved user experience. </p>
<p>If you want to be rich, be an investment banker.  If you want the independence to do your own thing – be and entrepreneur.</p>
<p>There&#8217;s always room for expertise.</p>
<p>The first investment opportunities: friends, family and fools.</p>
<p>Start with what you love.
</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smithnicholas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smithnicholas.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smithnicholas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smithnicholas.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smithnicholas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smithnicholas.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smithnicholas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smithnicholas.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smithnicholas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smithnicholas.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smithnicholas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smithnicholas.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smithnicholas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smithnicholas.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=17&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smithnicholas.wordpress.com/2010/05/14/the-schoolforstartups-experience/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5695b708f679e16ba99ac01d15104422?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smithnicholas</media:title>
		</media:content>
	</item>
		<item>
		<title>Brief look at Cloud Architectures and GrepTheWeb</title>
		<link>http://smithnicholas.wordpress.com/2010/03/20/brief-look-at-cloud-architectures-and-greptheweb/</link>
		<comments>http://smithnicholas.wordpress.com/2010/03/20/brief-look-at-cloud-architectures-and-greptheweb/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 12:58:03 +0000</pubDate>
		<dc:creator>Nicholas</dc:creator>
				<category><![CDATA[Thought]]></category>
		<category><![CDATA[Cloud Architectures]]></category>
		<category><![CDATA[GrepTheWeb]]></category>

		<guid isPermaLink="false">http://smithnicholas.wordpress.com/?p=6</guid>
		<description><![CDATA[cloud architecture GrepTheWeb<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=6&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In this post I take a quick look at the GrepTheWeb application; which is part of The Alexa Web Search <a href="http://aws.amazon.com/alexa">[1]</a> suite of Web Services allowing developers to build their own customised search engines.  A more detailed developer article on GrepTheWeb can be found at <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1632">[2]</a>.  Finally I consider some questions about cloud architectures in general.</p>
<p>GrepTheWeb allows users to search or rather “grep” the web, as UNIX users will know the key difference between a “grep” and a “search” is the fact that you can use regular expressions.  As you might imagine the amount of processing power required to grep the largest data source possible i.e. the web, would be huge.  </p>
<p>Due to global time differences, web applications rarely use the same capacity consistently throughout the day.  Therefore when large populations like the USA are offline the same level of capacity is no longer required.  The developers of GrepTheWeb therefore decided to utilise the concept of cloud computing in what is described as a “Cloud Architecture”.  </p>
<p>In a Cloud Architecture the processing and physical storage are shared between multiple systems.  As processing activities increase the system garners more resources to complete the activities.  Similarly when resources are no longer required, they are released back to the “cloud” for the other systems to use.</p>
<p>Providers of cloud computing hardware then bill their customers based on usage rather then a fixed sum; this is a paradigm similar to mobile phone Pay-As-You-Go billing rather then the Pay-Monthly (contract) alternative. </p>
<p>As we can see from Fig[1] below GrepTheWeb is comprised of a number of Amazon web service products, which have been arranged in a Cloud Architecture:</p>
<div id="attachment_11" class="wp-caption aligncenter" style="width: 330px"><a href="http://smithnicholas.files.wordpress.com/2010/06/gtwsystemoverview.png"><img src="http://smithnicholas.files.wordpress.com/2010/06/gtwsystemoverview.png?w=320&#038;h=240" alt="Grep the Web System Overview" title="gtwSystemOverview" width="320" height="240" class="size-full wp-image-11" /></a><p class="wp-caption-text">System Overview - Source (2)</p></div>
<p>Amazon SQS – The Amazon Simple Queue Service orchestrates calls between controllers and queues requests when the system is under heavy load.  You can consider this, as indeed the developer guide describes, as the “glue” between controllers; however I have never been a fan of this analogy, as it implies something permanently fixed and is not easy to change.</p>
<p>Controller – The diagram above is somewhat confusing with respect to the controller, as firstly the controller code is actually part of the EC2 Cluster.  Second the system does not have a single controller, but rather multiple controllers each relating to the phases of processing in the system:  </p>
<p>The Launch Controller will start the process off in the EC2 cluster, as well as creating a processing record in the Simple DB.  </p>
<p>The Monitor Controller will check if a process is complete, when it is notify both the Shutdown and Billing Controller by way of a messages placed in their respective SQS queues.</p>
<p>The Shutdown Controller will relinquish the now unused resources in the EC2 cluster. </p>
<p>The Billing Controller calculates the amount of usage the process utilised and sends the information to the billing service.  </p>
<p>Amazon EC2 Cluster – The Elastic Compute Cloud is the essence of the cloud architecture; it offers processing in the form of a Web Service that can be scaled up or down as required.  It is also where the application code is deployed and executed.  When required multiple processes are run in parallel, before being aggregated into a single output.</p>
<p>Amazon SimpleDB – As the architecture relies on asynchronous calls and as Web Services are inherently stateless it must be possible to determine the state of a given component.  Controllers therefore use the Simple DB to query and update a given processes status.</p>
<p>Amazon S3 – The Simple Storage Service is where the content from the web crawlers are stored, essentially an ever changing and expanding dataset from the internet.  Similar to the processing of the EC2 cluster, storage is scalable on demand. </p>
<p>Inputs – There are two inputs to the system, one is the internet itself that are provided to the S3 data store by means of web crawlers.  The second is the regular expression that a given user wishes to run against that dataset.</p>
<p>Outputs – As the output from a given grep can be particularly large, the content is written to the data store rather then being returned as typical Web Service response.  </p>
<p><span style="font-weight:bold;">What purpose does this architecture serve?<br />
</span><br />
Cloud architectures and the way they are offered as services by vendors like Amazon, are unusual in the fact they do not aim to address a traditional design principal like separation of concerns i.e. Object Orientated Architecture or event response i.e. Event Driven Architectures.   Rather the purpose is directly related to reducing the costs of running the system.</p>
<p>A more purest view is that the main purpose is to increased the amount of parallel processing capacity a single system could achieve on its own; but ultimately this is directly related to not having to pay for the cost of the hardware yourself.</p>
<p>So how are the costs reduced?  Well as alluded to previously when the system is not utilising resources they  are releases back to the cloud, to be used by other systems. This allows greater hardware utilisation and therefore a greater efficiency is attained, the other major saving is that an organisation no longer has a massive initial hardware cost.   </p>
<p><span style="font-weight:bold;">Who do you think will use it and for what purpose?<br />
</span><br />
The term “cloud computing” is growing in momentum and has gained a lot of coverage recently; however some organisations will always have reservations about their information existing in a shared space; particularly governments.  Organisations that are involved with customer&#8217;s personal information may also face legal concerns, particularly with data moving across country boundaries.</p>
<p>For those ready to embrace the cloud, there are a number of facets that will appeal to a diverse mix organisations:</p>
<p>Perhaps the demographic that are most attracted to the cloud are new start ups, mainly due to them not having the hardware outlay upfront.  As an added bonus these start ups no longer have to estimate the capacity they will require; which can be a costly a complex process in itself. Conversely those organisations that have already paid the costs for existing systems would have less to gain.  </p>
<p>Another major beneficiary of this architecture will be web companies that get bursts of traffic.  Organisations with uneven server load will ultimately be best suited to the form of “Pay-As-You-Go” computing, e.g. a sports website, that typically has their traffic focused at weekends when matches are played.  </p>
<p>Quite different still would be a company that wanted to run processor intensive tasks, data conversion, data mining etc.  Most companies run some form of batch processing over night, which often results in complicated scheduling in order to get tasks completed before the start of the working day.  With cloud computing you can scale up the processing activities to the Nth degree and have your processing completed in a suitable time frame, before releasing the system resources for the rest of the day.</p>
<div id="attachment_9" class="wp-caption aligncenter" style="width: 330px"><a href="http://smithnicholas.files.wordpress.com/2010/06/cloud_small.gif"><img src="http://smithnicholas.files.wordpress.com/2010/06/cloud_small.gif?w=320&#038;h=240" alt="Cloud Cartoon" title="cloud_small" width="320" height="240" class="size-full wp-image-9" /></a><p class="wp-caption-text">The power of the cloud...</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smithnicholas.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smithnicholas.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smithnicholas.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smithnicholas.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smithnicholas.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smithnicholas.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smithnicholas.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smithnicholas.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smithnicholas.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smithnicholas.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smithnicholas.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smithnicholas.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smithnicholas.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smithnicholas.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smithnicholas.wordpress.com&amp;blog=13776750&amp;post=6&amp;subd=smithnicholas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smithnicholas.wordpress.com/2010/03/20/brief-look-at-cloud-architectures-and-greptheweb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5695b708f679e16ba99ac01d15104422?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">smithnicholas</media:title>
		</media:content>

		<media:content url="http://smithnicholas.files.wordpress.com/2010/06/gtwsystemoverview.png" medium="image">
			<media:title type="html">gtwSystemOverview</media:title>
		</media:content>

		<media:content url="http://smithnicholas.files.wordpress.com/2010/06/cloud_small.gif" medium="image">
			<media:title type="html">cloud_small</media:title>
		</media:content>
	</item>
	</channel>
</rss>
