<?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>Thought Forge</title>
	<atom:link href="http://thoughtforge.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://thoughtforge.net</link>
	<description></description>
	<lastBuildDate>Mon, 02 Jan 2012 21:03:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>SpringOne 2GX: Implementing Scalable HA Architectures with Spring Integration</title>
		<link>http://thoughtforge.net/1533/springone-2gx-implementing-scalable-ha-architectures-with-spring-integration/</link>
		<comments>http://thoughtforge.net/1533/springone-2gx-implementing-scalable-ha-architectures-with-spring-integration/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 21:03:42 +0000</pubDate>
		<dc:creator>turnerj</dc:creator>
				<category><![CDATA[Spring Integration]]></category>

		<guid isPermaLink="false">http://thoughtforge.net/?p=1533</guid>
		<description><![CDATA[Another session from SpringOne 2GX 2011 but this time focusing on Spring Integration.  &#8216;Implementing Scalable HA Architectures with Spring Integration&#8216; is presented by Gary Russell and David Turanski who are currently working on a project with a significant element of enterprise integration for EMC.  A solid understanding of Spring Integration is assumed by the presenters [...]]]></description>
			<content:encoded><![CDATA[<p>Another session from <a href="http://www.springone2gx.com/">SpringOne 2GX 2011</a> but this time focusing on Spring Integration.  &#8216;<a href="http://www.infoq.com/presentations/Implementing-HA-Architectures-Spring-Integration">Implementing Scalable HA Architectures with Spring Integration</a>&#8216; is presented by Gary Russell and David Turanski who are currently working on a project with a significant element of enterprise integration for EMC.  A solid understanding of Spring Integration is assumed by the presenters and the focus is more on the application of Spring Integration to support &#8216;Single Source&#8217; and &#8216;Strict Order&#8217; processing of messages.  The presentation included the following topics:</p>
<ul>
<li>High availability architecture concepts</li>
<li>Spring Integration basics</li>
<li>Competing consumers</li>
<li>Challenges with competing consumers</li>
</ul>
<p>The high availability architecture concepts were presented to frame the session.  There was little depth of discussion or new ground covered.  The same could be said for the section introducing the basics of Spring Integration.  The guys did a good job of describing competing consumers and the challenges of using competing consumers for &#8216;Single Source&#8217; processing.</p>
<p>For the remainder of the session Gary and David discussed the solution they were developing for EMC.  I was interested in particular to hear what the presenters had to say on the subject of &#8216;Single Source&#8217; processing in a HA environment as we have similar problems to be solved at Paddy Power.  If you are new to this type of processing I think you will find the content a little difficult to follow and if you are not new to this you probably won&#8217;t take a lot away from the discussion.</p>
<p>It was quite a frustrating session to watch as there was a significant amount of time spent trying to execute the demo application.  I would have liked if their own solutions were described more concisely and contrasted against some of the other solutions as leveraged by a number of peer-to-peer protocols such as chord.</p>
]]></content:encoded>
			<wfw:commentRss>http://thoughtforge.net/1533/springone-2gx-implementing-scalable-ha-architectures-with-spring-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SpringOne 2GX: Getting Started With Spring Security 3.1</title>
		<link>http://thoughtforge.net/1529/springone-2gx-getting-started-with-spring-security-3-1/</link>
		<comments>http://thoughtforge.net/1529/springone-2gx-getting-started-with-spring-security-3-1/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 17:44:30 +0000</pubDate>
		<dc:creator>turnerj</dc:creator>
				<category><![CDATA[Spring Security]]></category>

		<guid isPermaLink="false">http://thoughtforge.net/?p=1529</guid>
		<description><![CDATA[I&#8217;ve used Spring Security often.  Sometimes to provide what would be considered relatively straight forward authentication and authorisation and on other occasions to provide  multi-step authentication (using pre-authentication) and complex authorisation.  In the &#8216;Getting Started With Spring Security 3.1&#8216; session at SpringOne 2GX 2011 Rob Winch introduced Spring Security and the new features of Spring [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve used Spring Security often.  Sometimes to provide what would be considered relatively straight forward authentication and authorisation and on other occasions to provide  multi-step authentication (using pre-authentication) and complex authorisation.  In the &#8216;<a href="http://www.infoq.com/presentations/Spring-Security-3-1">Getting Started With Spring Security 3.1</a>&#8216; session at <a href="http://www.springone2gx.com/">SpringOne 2GX 2011</a> Rob Winch introduced Spring Security and the new features of Spring Security 3.1.</p>
<p>He starts his presentation with a high level overview of the Spring Security framework and the variety of support it provides.  For those who have not used Spring Security this was quite informative and for those who are familiar with the framework it was a useful recap.  Spring Security is organised into the core framework and a number of extensions that provide support for OAuth, SAML, Kerberos etc.  This was mentioned by way of an overview and not delved into in any depth.</p>
<p>Havig used Spring Security before, I was particularily interested in what is new in version 3.1.  The two additions that I was particularily happy to see were:</p>
<ul>
<li>namespace support for multiple http elements</li>
<li>a stateless authentication mode for RESTful services.</li>
</ul>
<p>Unfortunately Rob did not delve into the stateless authentication mode.</p>
<p>Much of the session focused on a demo web application (Secure Mail) and how to leverage Spring Security to implement authentication and authorisation.  This was a through walk through the demo application that covered everything from the initial configuration of spring security to session management, user registration and proxy based authorisation.</p>
<p>In particular, I found the section on proxy based authorisation was well presented.  The difference between interface based proxies and class based proxies was explained along with the pro&#8217;s and con&#8217;s for both.  I also found the tips on preventing Spring Security from permeating into the application source code useful.  I hate seeing dependencies on framework code proliferate application code.</p>
<p>Rob was an informative and engaging presenter and this session is definitely worth watching if you find yourself with a free hour and a half.</p>
]]></content:encoded>
			<wfw:commentRss>http://thoughtforge.net/1529/springone-2gx-getting-started-with-spring-security-3-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino Starter Kit – Day 2</title>
		<link>http://thoughtforge.net/1516/arduino-starter-kit-day-2/</link>
		<comments>http://thoughtforge.net/1516/arduino-starter-kit-day-2/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 22:43:26 +0000</pubDate>
		<dc:creator>turnerj</dc:creator>
				<category><![CDATA[Ramblings]]></category>

		<guid isPermaLink="false">http://thoughtforge.net/?p=1516</guid>
		<description><![CDATA[Following on from my first look at the Arduino, I freed up a few hours in my day to continue with the tutorial projects. Project 6 builds on the LED chase effect that was created by project 5 and adds a potentiometer that adjusts the speed of the chase.  Shame I dismantled project 5 when [...]]]></description>
			<content:encoded><![CDATA[<p>Following on from my <a href="http://thoughtforge.net/1451/arduino-starter-kit-day-1/">first look at the Arduino</a>, I freed up a few hours in my day to continue with the tutorial projects.</p>
<p><strong>Project 6</strong> builds on the LED chase effect that was created by project 5 and adds a potentiometer that adjusts the speed of the chase.  Shame I dismantled project 5 when I finished up on day 1.  It took me a few minutes to reconfigure all the LEDs and connect them to the Arduino.  Once this was done attaching the potentiometer and the update to the sketch was quick and easy.  I skipped the two exercises at the end of project 6 as they were effectively programming exercises.</p>
<p><strong>Project 7</strong> involves creating a single pulsating LED.  This is achieved by doing an analog write to the output pin (the output pin is a digital pin).  An interesting explanation of how we get a digital pin to behave like an analog pin follows with a description of PWM (Pulse Width Modulation).</p>
<p><strong>Project 8</strong> creates a mood light that uses a clear red, clear green and clear blue LED  and adjusts the brightness of each to simulate a range of colours.  The sketch was interesting as it managed the transitions so that transitions from one colour to another were not too abrupt.</p>
<p><strong>Project 9</strong> creates a fire effect using two yellow and a red LED.  The wiring and sketch are more basic than the last couple of projects so there really wasn&#8217;t a lot to this project.</p>
<p><strong>Project 10</strong> uses the same circuit as project 8 but uses the serial monitor to manually input commands to the Arduino.  Simple commands allow manual control of each of the LEDs individually.</p>
<p><strong>Project 11</strong> puts away all the LEDs and starts to play with some of the other components, namely the Piezo Sounder and the terminal block.  The circuit is trivial but we start to see new functions within the sketch that control the Piezo Sounder.</p>
<p><strong>Project 12</strong> uses the Serial Temperature Sensor to output temperature readings to the Serial Monitor.  There appeared to be an issue (which I caould not find the source of) that caused my PC to freeze when I connected this circuit.  It seemed to be a problem with the sensor itself.  This was the first problem I had with the kit so far.</p>
<p><strong>Project 13</strong> uses a light sensor to adjust the rate at which a LED flashes.  Normal service resumed and after putting together the circuit and downloading the sketch the LED reacted to the lighting as expected.  I&#8217;m a little relieved that there is nothing wrong with the board!</p>
<p>I&#8217;m not going to finish projects 14, 15 and 16 as the next thing I want to try is to control the Arduino from a Java program.  But that&#8217;s for another day.</p>
]]></content:encoded>
			<wfw:commentRss>http://thoughtforge.net/1516/arduino-starter-kit-day-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino Starter Kit &#8211; Day 1</title>
		<link>http://thoughtforge.net/1451/arduino-starter-kit-day-1/</link>
		<comments>http://thoughtforge.net/1451/arduino-starter-kit-day-1/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 23:47:05 +0000</pubDate>
		<dc:creator>turnerj</dc:creator>
				<category><![CDATA[Ramblings]]></category>

		<guid isPermaLink="false">http://thoughtforge.net/?p=1451</guid>
		<description><![CDATA[My wife recently bought me an Arduino Starter Kit from Earthshine Electronics and I have been keen to start playing around with it.  Despite doing some electronics in university I have absolutely no idea where to start but there was a free book (downloadable PDF) that accompanied the kit.  I downloaded the book and followed [...]]]></description>
			<content:encoded><![CDATA[<p>My wife recently bought me an <a title="Arduino" href="http://www.arduino.cc/" target="_blank">Arduino </a>Starter Kit from <a title="Earthshine Electronics" href="http://www.earthshineelectronics.com/" target="_blank">Earthshine Electronics</a> and I have been keen to start playing around with it.  Despite doing some electronics in university I have absolutely no idea where to start but there was a free book (downloadable PDF) that accompanied the kit.  I downloaded the book and followed the instructions to install the Arduino IDE and verify that the Arduino board was functioning.</p>
<div id="attachment_1454" class="wp-caption aligncenter" style="width: 276px"><a href="http://thoughtforge.net/wp-content/uploads/2011/12/arduino.jpg"><img class="size-full wp-image-1454 " style="border: 2px solid black; margin: 3px 5px;" title="The Arduino Board" src="http://thoughtforge.net/wp-content/uploads/2011/12/arduino.jpg" alt="The Arduino Board" width="266" height="189" /></a><p class="wp-caption-text">Figure 1: The Arduino Board</p></div>
<p><strong>Project 1</strong> in the book involved connecting an LED and resistor to the board (using a breadboard) and writing a short sketch to make the LED blink every second.  While it was pretty straight forward, I was quite pleased when it all went to plan (I think trouble shooting would be beyond me at this stage) and the little red LED started to flash when I uploaded the sketch to the Arduino.  The book then reviews the C code (which I skimmed over) before providing an overview of the hardware for the project.  Its on the hardware side that I will find my challenge so I needed to read this section carefully.</p>
<p><strong>Project 2</strong> used the same hardware configuration but changes the sketch to signal S.O.S in Morse Code via the LED.  Given this only involved a rather simple sketch and the same hardware configuration I did not find this interesting.  On to the next project.</p>
<p><strong>Project 3</strong> simulates the light sequence on a set of UK traffic lights; that is, red, red-amber, amber and green.  Given the two previous projects this was pretty straight forward.  Different resisters were used this time so that the LED&#8217;s were not as bright as in the previous projects.  Given the additional components, I can see now why a strong table lamp is a necessity for this type of activity. Anyway, I&#8217;ll press on without one.</p>
<p><strong>Project 4</strong> adds a set of pedestrian lights (red and green) and a push button to the previous project.  Steady state shows the traffic green and the pedestrians red.  On pushing the button, the traffic is shown amber then red.  The pedestrians are then shown green.  After a little time passes the green pedestrian light flashes before changing to red.  The traffic lights then transition to amber and then green thus completing the sequence and returning to the steady state.  The circuit was straight forward although given the number of components I had to recheck the connections a couple of times.  I also made the mistake of placing and LED the wrong way around thus it did not illuminate.  This was easy to detect and diagnose.  The code itself was fairly straight forward.</p>
<p><strong>Project 5</strong> creates a LED chase effect.  Both the hardware and sketch are straight forward but given it uses 10 LEDs and 10 resistors it is fairly time consuming.  I worked through it anyway for completeness.</p>
<p><object style="height: 288px; width: 512px;" width="512" height="288" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="controls" value="0" /><param name="loop" value="1" /><param name="src" value="http://www.youtube.com/v/ZFuI1EaOZCY?version=3&amp;feature=player_popout" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><embed style="height: 288px; width: 512px;" width="512" height="288" type="application/x-shockwave-flash" src="http://www.youtube.com/v/ZFuI1EaOZCY?rel=0&amp;version=3&amp;feature=player_popout" allowFullScreen="true" allowScriptAccess="always" controls="0" loop="1" allowfullscreen="true" allowscriptaccess="always" /></object></p>
<p>So far it has been fun learning about the Arduino and I&#8217;m looking forward to working my way through the other projects in the accompanying book.  It&#8217;s getting late so time to pack up for today.  Hopefully I&#8217;ll get some time over the Christmas holidays to tackle the rest of the projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://thoughtforge.net/1451/arduino-starter-kit-day-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Comments</title>
		<link>http://thoughtforge.net/1458/code-comments/</link>
		<comments>http://thoughtforge.net/1458/code-comments/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 12:27:35 +0000</pubDate>
		<dc:creator>turnerj</dc:creator>
				<category><![CDATA[Ramblings]]></category>

		<guid isPermaLink="false">http://thoughtforge.net/?p=1458</guid>
		<description><![CDATA[I remember when I started commercial coding in early 1999.  The developers that I worked with would constantly remind me of the value of commenting code.  The main reason they would give was that it reduces the cost of maintenance by making it easier to return to the code at a later date. Now, I [...]]]></description>
			<content:encoded><![CDATA[<p>I remember when I started commercial coding in early 1999.  The developers that I worked with would constantly remind me of the value of commenting code.  The main reason they would give was that it reduces the cost of maintenance by making it easier to return to the code at a later date.</p>
<p>Now, I wanted to write code and not comments so this did not come naturally but on my best days I would diligently comment every class/method declaration and adorn non-trivial methods with a liberal spattering of the same.  After a while I noticed the amount of noise produced by comments that added no value or that were no longer relevant was a considerable distraction.  In fact, this distraction was increasing the maintenance cost rather than reducing it as I had previously been told.</p>
<p>Since then much has changed and the publication of books such as <a href="http://www.amazon.co.uk/Pragmatic-Programmer-Andrew-Hunt/dp/020161622X%3FSubscriptionId%3DAKIAJHSWSXRJBPQPLC3Q%26tag%3Dthouforg-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D020161622X">The Pragmatic Programmer</a>, <a href="http://www.amazon.co.uk/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882%3FSubscriptionId%3DAKIAJHSWSXRJBPQPLC3Q%26tag%3Dthouforg-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0132350882">Clean Code</a> and <a href="http://www.amazon.co.uk/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073%3FSubscriptionId%3DAKIAJHSWSXRJBPQPLC3Q%26tag%3Dthouforg-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0137081073">The Clean Coder</a> has changed the perceived wisdom surrounding the commenting of code.  The authors of these books suggested that better code maintainability will come from writing better code (who would have thought!).  By better code they meant code that is easier to understand but how do we write code that is easier to understand.  A good start is to:</p>
<ul>
<li>Use descriptive class and method names.</li>
<li>Do Not Repeat Yourself</li>
<li>Write <a href="http://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29">SOLID</a> code.</li>
<li>&#8230;</li>
</ul>
<p>Given the way in which modern logging frameworks work, using descriptive class and method names also increases the value of your application logs.</p>
<p>Bob Martin said that “The proper use of comments is to compensate for our failure to express yourself in code. Note that I used the word failure. I meant it. Comments are always failures.”.  I&#8217;m a little more open to comments and still see the value in class and public method comments (please, no bean accessor and mutator commenting!) but regardless of each individuals personal preferences for comments its is good that people are thinking about the subject and doing what makes most sense for them rather than blindly commenting everything.</p>
]]></content:encoded>
			<wfw:commentRss>http://thoughtforge.net/1458/code-comments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SpringOne 2GX: Messaging for Modern Applications</title>
		<link>http://thoughtforge.net/1331/springone-2gx-messaging-for-modern-appications/</link>
		<comments>http://thoughtforge.net/1331/springone-2gx-messaging-for-modern-appications/#comments</comments>
		<pubDate>Sat, 10 Dec 2011 17:13:16 +0000</pubDate>
		<dc:creator>turnerj</dc:creator>
				<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false">http://thoughtforge.net/?p=1331</guid>
		<description><![CDATA[I&#8217;ve spent much of my career working on application integration projects and the technologies and techniques have changed much in that short period of time. I&#8217;ve used a variety of transports, message formats and protocols and these are continuing to change with the requirements from modern applications. The &#8216;Messaging for Modern Applications&#8216; session at SpringOne [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve spent much of my career working on application integration projects and the technologies and techniques have changed much in that short period of time. I&#8217;ve used a variety of transports, message formats and protocols and these are continuing to change with the requirements from modern applications.</p>
<p>The &#8216;<a href="http://www.infoq.com/presentations/Messaging-for-Modern-Applications" target="_blank">Messaging for Modern Applications</a>&#8216; session at <a href="http://www.springone2gx.com" target="_blank">SpringOne 2GX</a> starts by talking about the trends in modern applications. Much of this reiterated the information in the key note session by discussing the diversifying of user platforms and applications, massive scale of data requirements and the continuing emergence of Cloud computing. Tom McCuch points out that synchronous communication protocols have often led to brittle architectures that evolve slowly. Much of this is due to the fact that often components are coupled in time, their release cycles require significant co-ordination etc. Components are typically stateful leading to scalability challenges that can be met by asynchronous architectures that retain state within messages passed between components. I tend to agree with this assertion (generally!).</p>
<p>Moving on, Tom speaks about Spring Integration and its ability to simplify building of messaging application components. I&#8217;ve used Spring Integration many times before and found its alignment to the Enterprise Integration Patterns catalog (see www.eaipatterns.com) and the messaging DSL meant a reasonably gentle learning curve for what is a very powerful framework. Coupled with Spring Bean Profiles this creates a great mechanism for decoupling the messaging implementation so that different implementations can be used in different environments (particularly useful for integration testing). The tried and tested Coffee Shop demo was adapted and wheeled out to demonstrate many of the concepts.</p>
<p>I was particularly interested in the section focusing on AMQP and its support within Spring Integration and RabbitMQ. As with the rest of the Spring portfolio, Spring Source are working to make it easier to deliver applications using these technologies from concept to production. This all encompassing approach is one of the reasons Spring has become so popular and it&#8217;s good to see that this has not changed.</p>
<p>One of the slides presented contained a statement that really rang true for me. It was that &#8220;Existing middleware impacts agility by tightly<br />
coupling applications to underlying application server and other middleware components&#8221;. Again, I would agree that there are few exceptions to this statement. Of course, Spring Integration aims to reduce this coupling through its many abstractions in the same way that Spring did for J2EE.</p>
<p>Tom finished up this session by discussing RabbitMQ. He briefly covered its support for AMQP, clustering, federation etc. It peaked my interest enough to look into it further.</p>
<p><strong>Thoughts</strong></p>
<p>Similar to the key note session, I found the content really interesting. For such as session I think the pace was a little slow and Tom could have rattled through the material a little faster. Worth a watch if you can spare the 90 minutes it runs for.</p>
]]></content:encoded>
			<wfw:commentRss>http://thoughtforge.net/1331/springone-2gx-messaging-for-modern-appications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SpringOne 2GX Keynote: Next Generation Applications</title>
		<link>http://thoughtforge.net/1329/springone-2gx-keynote-next-generation-applications/</link>
		<comments>http://thoughtforge.net/1329/springone-2gx-keynote-next-generation-applications/#comments</comments>
		<pubDate>Sat, 10 Dec 2011 02:22:08 +0000</pubDate>
		<dc:creator>turnerj</dc:creator>
				<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false">http://thoughtforge.net/?p=1329</guid>
		<description><![CDATA[I found the recent &#8216;Next Generation Applications&#8216; session at SpringOne 2011 covered a lot of ground and provided a solid view on where application architecture and design is headed in the not too distant future. The session was introduced by Ben Alex who discussed 4 key computing trends: Diversification of user devices. Increase of internet [...]]]></description>
			<content:encoded><![CDATA[<p>I found the recent &#8216;<a href="http://www.infoq.com/presentations/SpringOne-2GX-Keynote-Next-Generation-Applications" target="_blank">Next Generation Applications</a>&#8216; session at SpringOne 2011 covered a lot of ground and provided a solid view on where application architecture and design is headed in the not too distant future.</p>
<p>The session was introduced by Ben Alex who discussed 4 key computing trends:</p>
<ul>
<li>Diversification of user devices.</li>
<li>Increase of internet bandwidth and stagnation in network latency.</li>
<li>Reducing cost of data storage.</li>
<li>Reduction in clock speed and increase in number of processor cores.</li>
</ul>
<p>These trends are having a significant impact on how we are developing applications today and will increase in relevance into the future. This paved the way for a number of discussions on how to exploit these trends to deliver tomorrows applications.</p>
<p><strong>Next Generation Clients</strong></p>
<p>Because of the increasing diversification of user devices developers must find a way to bring the &#8216;Write Once, Run Anywhere&#8217; philosophy to the client. Spring Source are working on delivering this promise by supporting development using Html 5 and JavaScript while using bridging frameworks such as Phone Gap to ensure these applications have access to native features and are available through existing app stores.</p>
<p>Keith Donald demonstrated a reference architecture (expense application) built using Html 5, CSS, JavaScript and Phone Gap on the client. Authorisation utilised OAuth while services were exposed using a RESTful API. He also did a demo of pushing application updates. Compelling stuff!</p>
<p><strong>Next Generation Authorisation</strong></p>
<p>Craig Walls and Roy Clarkson then presented on authentication which focused on the utilisation of OAuth and Spring Security. Interesting in the context of access control for RESTful services but fairly typical application of OAuth to provide SSO.</p>
<p><strong>Next Generation Data</strong></p>
<p>Html 5 application caching was touched upon and a demo of the previous expense application was performed using a disconnected device. Big Data was then discussed and placed in the context of the Spring Data project and its sub-modules. I&#8217;ve not looked at Spring Data in any great depth but really liked some approaches adopted by the Spring JPA sub-module (which was not covered in this session).</p>
<p><strong>Next Generation Architecture</strong></p>
<p>Finally, Tim Fox closed by discussing the adoption of asynchronous application architectures to deliver the massive scale that today&#8217;s applications are expected to achieve.</p>
<p><strong>Thoughts</strong></p>
<p>It was a really enjoyable session that was interesting and informative. A broad range of topics were covered by presenters who are clearly very knowledgeable.</p>
<p>I think overall, a really compelling vision of how developers will meet the challenge of delivering tomorrows applications was provided.</p>
]]></content:encoded>
			<wfw:commentRss>http://thoughtforge.net/1329/springone-2gx-keynote-next-generation-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continuous Integration</title>
		<link>http://thoughtforge.net/1292/continuous-integration/</link>
		<comments>http://thoughtforge.net/1292/continuous-integration/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 20:21:58 +0000</pubDate>
		<dc:creator>turnerj</dc:creator>
				<category><![CDATA[Book Review]]></category>
		<category><![CDATA[Continuous Integration]]></category>

		<guid isPermaLink="false">http://thoughtforge.net/?p=1292</guid>
		<description><![CDATA[I have been building and maintaining continuous integration (CI) environments for several years now and would consider myself well versed in the practice. There really is a wealth of information on CI and people such as Martin Fowler and John Smart do a great job as advocates by providing a solid understanding and practical advice. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.co.uk/Continuous-Integration-Improving-Software-Signature/dp/0321336380%3FSubscriptionId%3DAKIAIEF6UQB4LZ3JULBQ%26tag%3Dthouforg-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321336380"><img class="alignright" style="margin: 3px 5px; border: 2px solid black;" src="http://ecx.images-amazon.com/images/I/516KKWTBt1L._SL160_.jpg" alt="" width="121" height="160" /></a>I have been building and maintaining continuous integration (CI) environments for several years now and would consider myself well versed in the practice. There really is a wealth of information on CI and people such as Martin Fowler and John Smart do a great job as advocates by providing a solid understanding and practical advice. Due to the amount of freely distributable software supporting the establishment of CI environments, acquiring knowledge of the subject is the biggest entry cost.</p>
<p>For that reason, it was with much anticipation that &#8216;Continuous Integration&#8217; was published back in 2007 (shame on me for only reading it now!).</p>
<p><span id="more-1292"></span><strong>Getting Started</strong></p>
<p>The book starts of with a gentle introduction to the subject providing a preview of the material to come. Chances are that if you have purchased this book that you already know roughly what CI comprises and how it works so you won&#8217;t learn a lot here. Still though, its good to lay some ground work and review that activities that typically occur as part of a CI system.</p>
<p><strong>Introducing Continuous Integration</strong></p>
<p>Next we cover a number of practices that encapsulate what I would call the discipline of CI. It is not enough just to have this thing called CI running in the background and expect it to protect you from all evil. You must:</p>
<ul>
<li>Commit Code Frequently</li>
<li>Fix Broken Builds Immediately</li>
<li>Write Automated Tests</li>
<li>Run Private Builds</li>
<li>Avoid Broken Code</li>
</ul>
<p>These disciplines must be followed religiously because if one person on the team fails to adhere to them, the entire CI system is devalued. My experiences have always reflected the the broken windows theory, as the frequency of broken builds increases, people become more tolerant of them and thus the build breaks more often.</p>
<p><strong>Reducing Risks Using CI</strong></p>
<p>So, CI is principally about integrating early and often to reduce risk, reduce defects and increase quality. A number of scenarios are outlined along with the rationale for why CI can help alleviate the problems illustrated by those scenarios. Again, while there was nothing ground breaking for me, the information was well presented and did a good job of conveying some use cases for CI.</p>
<p><strong>Building Software at Every Change</strong></p>
<p>The book examines each of the activities that form part of an effective CI system. This begins with building the software. Some of the points made like centralised software repository, consistent directory structure etc. are so ingrained that today we often take this for granted. Source code repositories and dependency management solutions have become part and parcel of software development.</p>
<p>It was useful though to highlight that CI builds should be capable of &#8216;Building for any Environment&#8217; and come in the form of a private build, integration build and release build. In order to maintain a rapid feedback cycle, you might also utilise stage builds that execute varying levels of testing, code analysis etc.</p>
<p><strong>Continuous Database Integration</strong></p>
<p>Continuous database integration is one of the activities of a CI system that is easy to get wrong. Done right, it removes a lot of frustrations from the development process. I often see teams who spend inordinate amounts of time tracking down issues with data, its structure or storage. There are lots of options to achieve continuous database integration ranging from in memory databases up to dedicated instances and these are explained in detail.</p>
<p><strong>Continuous Testing</strong></p>
<p>When most people think about continuous integration they immediately think about automated testing. Automated testing plays a major part in the continuous feedback that makes CI so compelling.</p>
<p>In order to get the most out of automated testing its effectiveness must be measured. This is typically achieved through code coverage tooling but is all coverage equal? Automated testing can also be time consuming and so should be categorised to facilitate different execution frequencies depending on the type of testing being carried out. This is discussed in a clear and informative manner.</p>
<p><strong>Continuous Inspection</strong></p>
<p>I remember when I started writing code in a corporate environment (yes, way back then!). The first thing I was given was a document describing the style in which code was to be written. After a while, I got to look at actual code and found that it bared no resemblance to the style guide I had been given. This sort of quality check is far better automated.</p>
<p>But we can go even further and actually gather some insight by using other quality metrics. Starting with duplicate code and moving on to measures such as cyclomatic complexity, afferent coupling and efferent coupling we can get a real insight into the overall quality of our code base. Using tools like Sonar, these quality metrics can be tracked over time to measure improvement or deterioration and have an impact on the processes and techniques adopted by a project or product team.</p>
<p><strong>Continuous Deployment</strong></p>
<p>Having implemented a process whereby software is automatically build, integrated and tested the next logical step is to automate the deployment of the software. This is an area where there are significant return on investment to be had. Software deployment is often complicated and involved. Automating this process frees up developers to do what they enjoy and more importantly are being paid to do (or maybe what they are paid to do and more importantly enjoy!!). It also reduces the time lag from the cost of producing the software to releasing the value of that software.</p>
<p><strong>Continuous Feedback</strong></p>
<p>The book finishes by discussing the ways in which a CI system can provide feedback to the development team. The default mechanism of email can so easily be ignored. Alternatives such as flashing or coloured lights, SMS and audible feedback are discussed.</p>
<p><strong>Thoughts</strong></p>
<p>Although I was very familiar with much of the material, reading this book was a useful refresher. It is well written and easy to follow. It is certainly not a &#8220;how to&#8221; book but you will walk away with a firm grasp of the theory. There are lots of sources of information related to how to implement specific CI systems.</p>
Note: There is a rating embedded within this post, please visit this post to rate it.
]]></content:encoded>
			<wfw:commentRss>http://thoughtforge.net/1292/continuous-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m Feeling Lucky: The Confessions of Google Employee Number 59</title>
		<link>http://thoughtforge.net/1265/im-feeling-lucky-the-confessions-of-google-employee-number-59/</link>
		<comments>http://thoughtforge.net/1265/im-feeling-lucky-the-confessions-of-google-employee-number-59/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 18:00:21 +0000</pubDate>
		<dc:creator>turnerj</dc:creator>
				<category><![CDATA[Book Review]]></category>

		<guid isPermaLink="false">http://thoughtforge.net/?p=1265</guid>
		<description><![CDATA[I think people in the technology industry are universally interested in the inner workings of Google. Over the years, so many myths and legends have been born that allude to the largess and brilliance of the search giant. Frequently people post blogs purporting to provide some insight into the interviewing process, salary and bonus structures, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.co.uk/Im-Feeling-Lucky-Confessions-Employee/dp/1846145120%3FSubscriptionId%3DAKIAIEF6UQB4LZ3JULBQ%26tag%3Dthouforg-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1846145120"><img class="alignright" style="border: 2px solid black; margin: 3px 5px;" src="http://ecx.images-amazon.com/images/I/51Tg%2BJxzJyL._SL160_.jpg" alt="" width="104" height="160" /></a>I think people in the technology industry are universally interested in the inner workings of Google. Over the years, so many myths and legends have been born that allude to the largess and brilliance of the search giant. Frequently people post blogs purporting to provide some insight into the interviewing process, salary and bonus structures, staff parties, experimental technology, new market entry etc. Given this interest, I suspect that I&#8217;m Feeling Lucky by Douglas Edwards has/will do rather well.</p>
<p>It may or may not be due to my technology background, but I found the book a compelling read. The google story on its own is one of a meteoric rise that pitted a young, highly motivated and infinitely talented company against the establishment. More interesting for me though was the personal experiences and the insight into how all those people, individually very talented, melded together to create the biggest technology success of the internet era.</p>
<p>I thoroughly enjoyed how, chapter after chapter, Douglas described the significant milestones of Google&#8217;s growth story. Each milestone describes how the individuals involved were challenged and how they responded to the challenge. Naturally, the interactions with Larry and Sergey were of particular interest.</p>
Note: There is a rating embedded within this post, please visit this post to rate it.
]]></content:encoded>
			<wfw:commentRss>http://thoughtforge.net/1265/im-feeling-lucky-the-confessions-of-google-employee-number-59/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>REST in Practice</title>
		<link>http://thoughtforge.net/1239/rest-in-practice/</link>
		<comments>http://thoughtforge.net/1239/rest-in-practice/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 17:56:06 +0000</pubDate>
		<dc:creator>turnerj</dc:creator>
				<category><![CDATA[Book Review]]></category>
		<category><![CDATA[Representational State Transfer]]></category>

		<guid isPermaLink="false">http://thoughtforge.net/?p=1239</guid>
		<description><![CDATA[Ever since Fielding published his dissertation on Architectural Styles and the Design of Network-based Software Architectures, the momentum behind the Representational State Transfer (REST) architectural style has been building apace. Of course, as with the many new technologies, practices and theories adopted by the software industry, REST is progressing along what Gartner call the &#8216;Hype [...]]]></description>
			<content:encoded><![CDATA[<p>Ever since Fielding published his dissertation<a href="http://www.amazon.co.uk/REST-Practice-Hypermedia-Systems-Architecture/dp/0596805829%3FSubscriptionId%3DAKIAIEF6UQB4LZ3JULBQ%26tag%3Dthouforg-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0596805829"><img class="alignright" style="margin: 3px 5px; border: 2px solid black;" src="http://ecx.images-amazon.com/images/I/51RCGXFjaFL._SL160_.jpg" alt="" width="123" height="160" /></a> on <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm" target="_blank">Architectural Styles and the Design of Network-based Software Architectures</a>, the momentum behind the Representational State Transfer (REST) architectural style has been building apace. Of course, as with the many new technologies, practices and theories adopted by the software industry, REST is progressing along what Gartner call the &#8216;<a href="http://en.wikipedia.org/wiki/Hype_cycle" target="_blank">Hype Cycle</a>&#8216;.</p>
<p>Since Fielding&#8217;s dissertation, REST has been adopted widely by the software industry and a number of frameworks have evolved that support the development of RESTful services on today&#8217;s platforms. The availability of frameworks to simplify the implementation of RESTful services has further accelerated the adoption of REST.</p>
<p>As with any new technology, creating frameworks that make it easy to adopt that technology can, and in the case of REST has, become a double edge sword. I say this because making technology adoption easy also makes it easy for those implementing that technology to get by with a minimum of understanding. &#8216;REST in Practice&#8217; aims to inform those adopting REST by providing a compressive guide to REST and building the readers knowledge progressively from start to finish.</p>
<p><span id="more-1239"></span><strong>The Web as a Platform for Building Distributed Systems</strong></p>
<p>Rest in Practice begins by providing a high level description of the infrastructure of the web including resources, URIs, caching etc. The term &#8216;Resource&#8217; is defined along with its relationship to URIs. Resources are of course fundamental to REST and it is important to distinguish between a resource and its representation. Brief mention is given to how the web supports loose coupling, business processes, consistency and scalability. The introduction of the Richardson Maturity Model is particularly useful in understanding what level your REST services are at and where you might need them to be. The notion of <em>hypermedia as the engine of application state</em> is introduced as part of the model and is covered in more detail later.</p>
<p><strong>Introducing Restbucks</strong></p>
<p>I often find that technical books are easier to follow when an example is taken from conception to completion as part of the learning experience. Rest in Practice leverage&#8217;s the same example Gregor Hohpe used when explaining interaction patterns (<a href="http://eaipatterns.com/docs/IEEE_Software_Design_2PC.pdf" target="_blank">Your Coffee Shop Doesn&#8217;t Use Two Phase Commit</a>). For me personally, this was a good choice as it was a scenario I was already familiar with having read <a href="http://www.amazon.co.uk/Enterprise-Integration-Patterns-Designing-Addison-Wesley/dp/0321200683%3FSubscriptionId%3DAKIAIEF6UQB4LZ3JULBQ%26tag%3Dthouforg-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321200683" target="_blank">Enterprise Integration Patterns</a> and associated material on the companion web site. More generally, it is an easy scenario to follow and something most people can relate to.</p>
<p>The scenario interactions and message formats are described before briefly introducing the modelling of protocols and state transitions.</p>
<p><strong>Basic Web Integration</strong></p>
<p>The public API of a REST service consists of URI templates and the message payload (headers and body) definitions. URI templates should strive to be intuitive and URI tunneling is discussed in detail in the context of the Restbucks example. The fundamental properties of the GET verb frame the discussion on why not to use URI tunneling to modify a resource.</p>
<p>A number of other integration approaches are described including XML over HTTP and XML-RPC.</p>
<p><strong>CRUD Web Services</strong></p>
<p>CRUD Web Services sit at level two of the Richardson Maturity Model<strong>.</strong> The majority of REST services I discuss with colleagues or interviewees would sit at this level. Often it is the case that little awareness exists of more sophisticated services. CRUD services are what most people think of when REST is mentioned. The HTTP verbs POST, GET, PUT and DELETE are introduced as are there utilisation within a RESTful service. Once again, these concepts are placed in the context of the Restbucks scenario.</p>
<p>For the most part this chapter does not introduce anything new. Of more interest was the application of ETag and If-Match headers to provide safety and idempotency. Interestingly, the chapter rounds up by stating that &#8216;CRUD is good, but it&#8217;s not great&#8217;. I tend to agree!<strong><br />
</strong></p>
<p><strong>Hypermedia Services</strong></p>
<p>Things start getting interesting when the authors introduce hypermedia services and the domain application protocol. A domain application protocol specifies the legal transitions from one resource to another. It informs the consumer of a resource of available transitions to other resources in the same way the html links inform a web browser of transitions to other web pages. Within the context of an enterprise application, this facilitates the representation of state machine like behaviour.</p>
<p>An immediate impact of providing hypermedia services is that consumers now only need to know how to enter the system. They will then transition to other resources via links embedded in resources. This reduces the coupling between the consumer and the application (because only the semantic meaning of the links are shared, the location can be changed without any impact on the consumer..they just follow the new link).</p>
<p>The value of hypermedia services are brought to life when applied to the Restbucks scenario.</p>
<p><strong>Scaling Out</strong></p>
<p>One of the most impressive characteristics of the web is its shear scale. When talking about the web as a platform, it would be remiss to omit how its scale is achieved and how this might apply to scaling RESTful services within an enterprise. The scale of today&#8217;s web can be attributed in part to the caching mechanisms employed by its infrastructure and the HTTP protocol itself. As anyone who has built a caching solution of any significance can testify, caching is a complex business that involves decisions on the sensitivity of the data, liveliness of data, expiry policies etc. These topics are discussed in the context of RESTful services.</p>
<p><strong>The Atom Syndication Format</strong></p>
<p>The typical enterprise approach to building event based systems is to utilise a messaging system of some form or other. Messaging systems that support point-to-point and publish subscribe paradigms are perfect for this type of requirement. On the web, Atom Syndication can also be used to the same effect and this is described in detail with examples in Java and .NET. <strong><br />
</strong></p>
<p><strong>Atom Publishing Protocol</strong></p>
<p>Building on the previous chapter, the atom publishing protocol is is described as a &#8216;domain application protocol for publishing and editing web content&#8217;. I&#8217;m not completely convinced about the advantages above an beyond those provided by HTTP itself.</p>
<p><strong>Web Security</strong></p>
<p>A layered design is used to provide a robust approach to security on the web. This starts at the transport layer with SSL and is built upon at the protocol later through the Basic and Digest authentication mechanisms provided by HTTP.</p>
<p>Significant air time is given to OpenID and OAuth which I did not find entirely interesting. In most enterprises, other mechanisms will already have been established and be leveraged by any RESTful service implementation.</p>
<p><strong>Semantics</strong></p>
<p>Having recently completed a course on knowledge based systems and the semantic web I found the discussion on semantics interesting. That said, I&#8217;m not sure that most people will find it entirely relevant as semantics will typically be agreed as part of a RESTful service specification as opposed to dynamically. Nevertheless, those with an enquiring mind or an interest in the future of the web will find this chapter interesting.</p>
<p><strong>The Web and WS-*</strong></p>
<p>A lot of people who come to look at REST have previous experience of the WS-* stack. This section reviews some elements of the WS-* stack and provides a comparison with REST. The similarities between the two approaches are also identified before a discussion on the differing approaches to security and transactional messaging. Finally, WS-* is placed at level 1 on the Richardson Maturity Model.</p>
<p><strong>Building the Case for the Web</strong></p>
<p>The authors wrap up by &#8216;building a case for the web&#8217;. They align the proven features of web architecture to the requirements of enterprise architecture. This includes attributes such as scale, latency, cost and security.</p>
<p><strong>Thoughts</strong></p>
<p>It has only been in the last year or so that I have started to utilise REST and before that I had only a cursory knowledge of the architectural style. Then a requirement landed that had REST written all over it but I needed to know more before pinning my colours to the mast. To this end I looked for some learning resources that would fill the gaps in my knowledge and I found this book was a great aid. I read it cover to cover and found each chapter built on the next to provide a comprehensive understanding of the fundamentals.</p>
<p>I find often that when I discuss REST with those who have been utilising frameworks such as JAX-RS etc. that there is often a gap in knowledge of the fundamentals of REST and the maturity of REST services. In particular, I&#8217;m disappointed that few are aware of the Richardson Maturity Model or of the notion of <em>hypermedia as the engine of application state.</em> Having read this book, I now know that building CRUD services is only the entry level of what REST services can be. If you think you are doing REST but are not sure what the fuss is about, read this book and get a real understanding of the power of REST.</p>
Note: There is a rating embedded within this post, please visit this post to rate it.
]]></content:encoded>
			<wfw:commentRss>http://thoughtforge.net/1239/rest-in-practice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

