<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Infoonthego</title>
    <description>All about innovation and technology...</description>
    <link>http://www.infoonthego.co.uk/blog/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.5.0</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://www.infoonthego.co.uk/blog/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>James Moore</dc:creator>
    <dc:title>Infoonthego</dc:title>
    <geo:lat>52.766700</geo:lat>
    <geo:long>-1.200000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Infoonthego" /><feedburner:info uri="infoonthego" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Banking on the Cloud</title>
      <description>&lt;span class="Apple-style-span" style="font-family: Times; font-size: 16px"&gt;&lt;div style="min-height: 1100px; counter-reset: __goog_page__ 0; font-family: Verdana; font-size: 10pt; line-height: normal; background-color: #ffffff; padding: 0px; margin: 6px"&gt;It&amp;#39;s been nearly 15 years since&amp;nbsp;&lt;a href="http://www.sfcu.org/home/" target="_blank" title="Stanford Federal Credit Union"&gt;Stanford Federal Credit Union&lt;/a&gt;&amp;nbsp;started offering online banking services to all it&amp;#39;s customers and the revolution of internet banking began, in that time the fundamental service offered has remained largely static.&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;The years have seen various developments including account aggregation, downloadable statements, increasingly accessible sites (as standards matured) and, just recently we&amp;#39;ve seen an increased entry into &amp;quot;Web 2.0&amp;quot; technologies.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;It&amp;#39;s becoming clear that the time of drawing customers into a website for marketing and servicing is set to decline but&amp;nbsp;what does this all have to do with &amp;#39;&lt;a href="http://en.wikipedia.org/wiki/Cloud_computing" title="Wikipedia - Cloud Computing"&gt;cloud computing&lt;/a&gt;&amp;#39;, and what do we mean by the term in this context? &amp;nbsp;Let&amp;#39;s first take a conceptual view and then we&amp;#39;ll ground that back to some real technology to make things a little clearer.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;Cloud computing is a term that already seems to be in danger of becoming over-applied but my (in a nut-shell) understanding is that it refers to a scalable infrastructure that may include some form of storage, a processing environment, synchronisation and the idea of&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Software_as_a_service" title="Wikipedia - SaaS"&gt;software as a service (SaaS)&lt;/a&gt;. &amp;nbsp;It primarily uses the internet as a means of connection and is a hot topic for the likes of&amp;nbsp;&lt;a href="http://www.microsoft.com/azure/default.mspx" title="Microsoft Azure"&gt;Microsoft&lt;/a&gt;,&amp;nbsp;&lt;a href="http://code.google.com/appengine/" title="Google AppEngine"&gt;Google&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://aws.amazon.com/ec2/" target="_blank" title="Amazon EC2"&gt;Amazon&lt;/a&gt; as a commercial opportunity.&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;A&amp;nbsp;practical&amp;nbsp;example of this that you have a large amount of music stored on your home PC, by synchronising the relevant part of the PC with the cloud your music becomes available to you wherever you have an internet connection (and therefore access to your cloud). &amp;nbsp;Even better, you may configure another device (for example a media player) such that when it connects to the cloud on the internet, it also synchronises and any new music you have added at home is automatically added to your media player.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;Let&amp;#39;s take a look at a more complete example:&lt;/div&gt;&lt;img src="http://www.infoonthego.co.uk/blog/image.axd?picture=2009%2f1%2fclodoverview.png" alt="" /&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;At the bottom of the diagram we have the physical devices which are periodically connected to the internet, and therefore have occasional access to my cloud. &amp;nbsp;We can see our simple example of music being stored in the cloud and synchronised with both the home PC and the media player. &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;Back in the financial context, in addition to the bank&amp;#39;s data silo of customer balances and transactions let&amp;#39;s suppose for a moment that the status and changes to accounts was to be represented as a feed of information. &amp;nbsp;Effectively we have a secure RSS feed of all the events that happen to one or more accounts the customer holds with the bank which only the individual customer can access. &amp;nbsp;Through establishing a relationship from their website, the bank forms a relationship with the customer&amp;#39;s cloud that only allows them to update information relating to the particular accounts the bank holds and does not allow any access to any of the other repositories or information that may reside elsewhere in the customer&amp;#39;s cloud.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;Once data is free from the bank in the cloud it&amp;#39;s use is down to the customer and how they wish to establish relationships with other parties and applications to use that data.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;For example, let&amp;#39;s take the current day scenario of the personal finance site. &amp;nbsp;They PFM site can let us manage our money typically better than our bank but they are largely unregulated. &amp;nbsp;The biggest single difficulty these sites face is of getting the information in and people trusting that information is being stored and used securely. &amp;nbsp;The means used today is to either rely on manual upload by the customer, a time consuming and off-putting task or, by requesting the customer provide their banking credentials and automatically logging into the bank websites and either downloading or reading (screen scraping) the data. &amp;nbsp;Neither approach is by any means ideal. &amp;nbsp;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;In the case where account events are published to our cloud by a bank, the personal finance site is granted read-only access to balances and transactions through forming the relationship from their site. &amp;nbsp;The PFM site does not need to store our transactions, they access it as and when they need it and they have done it without needing to know our banking credentials or, relying on any form of &amp;quot;nasty&amp;quot;&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Screen_scraping" title="Wikipedia - Screen Scraping"&gt;screen scraping&lt;/a&gt;&amp;nbsp;or other unreliable means of pulling in data. &amp;nbsp;The means by which the bank protects it&amp;#39;s own site becomes immaterial as no-one but the customer needs to access it.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;By similar means, a customer&amp;#39;s accountant has their own cloud in which the relationships could be formed to allow the accountant limited access to the customer&amp;#39;s account details. &amp;nbsp;The diagram above shows a similar idea but sharing photos with a friend so it appears as part of the friends cloud but with read-only access. &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;There are more opportunities when we consider hosting applications within our cloud and is where we move beyond thinking of this as purely a central storage and synchronisation platform. &amp;nbsp;The applications again are granted access to certain feeds of data which they may combine with other external information to provide new services. &amp;nbsp;In the diagram is the idea that the mobile phone periodically reports it&amp;#39;s position to the cloud, no-one can see this information but it could be used to combine with account transactions as a means of warning the user of potential fraud (a card present transaction occurred in Birmingham but you were reported as being in London). &amp;nbsp;A somewhat unlikely sounding example for now but within the realms of technical feasibility at least.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;Rather than industry vertical based mobile applications, a mobile application that runs against a customer&amp;#39;s cloud would be able to give a general update of the information contained therein. &amp;nbsp;Linked with the phone&amp;#39;s location, the date or the time the information could be filtered to give a more personalised and contextually relevant view to the customer.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;It all sounds a little fanciful, but the idea of the customer&amp;#39;s digital existence in the first place is sound which this all builds on. &amp;nbsp;There are plenty of key concepts I haven&amp;#39;t covered here (particularly in the area of security and privacy) and there is no discussion on why a bank would actually engage with this but it is worth understanding the central ideas first and don&amp;#39;t forget that the technology that enables this sort of thing is to a large extent beyond even the early adopters amongst us. &amp;nbsp;There&amp;#39;s also an interesting argument to be had which has already started in the social networking world, who owns the data pertaining an account?&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px"&gt;What would be interesting to try though is to ground and demonstrate some of this functionality, using Microsoft&amp;#39;s&amp;nbsp;&lt;a href="http://www.microsoft.com/azure/default.mspx" target="_blank" title="Microsoft Azure"&gt;Azure&lt;/a&gt;&amp;nbsp;cloud platform and&amp;nbsp;&lt;a href="http://www.mesh.com" target="_blank" title="Live Mesh (Beta)"&gt;Live Mesh&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/YFLFBE6TqIg/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/Banking-on-the-Cloud.aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=c8988bd0-e685-4aae-8c00-4a4373a84884</guid>
      <pubDate>Thu, 29 Jan 2009 09:01:00 -0600</pubDate>
      <category>Computing</category>
      <category>Finance</category>
      <category>Innovation</category>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=c8988bd0-e685-4aae-8c00-4a4373a84884</pingback:target>
      <slash:comments>13</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=c8988bd0-e685-4aae-8c00-4a4373a84884</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/Banking-on-the-Cloud.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=c8988bd0-e685-4aae-8c00-4a4373a84884</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=c8988bd0-e685-4aae-8c00-4a4373a84884</feedburner:origLink></item>
    <item>
      <title>Blue sky thinking (and playing to your strengths)</title>
      <description>&lt;div&gt;&amp;#39;Blue sky&amp;#39; thinking in the financial services industry may not be fashionable (quite enough to keep us busy in the here and now), but for a short time I wanted to forget the current troubles and write a short series of posts that look at consumer aspects of the industry beyond the next year or so. &amp;nbsp;This first post plays fairly safe on a subject many can relate to regardless of whether they agree with it, the next post looks a little further ahead to something more revolutionary.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Safety first...&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;The idea of moving financial customer experience away from the traditional silos of branches and bank websites isn&amp;#39;t new, the various personal finance management sites such as&amp;nbsp;&lt;a href="http://www.infoonthego.co.uk/blog/admin/Pages/www.wesabe.com" target="_blank" title="Wesabe"&gt;Wesabe&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.infoonthego.co.uk/blog/admin/Pages/www.mint.com" target="_blank" title="Mint"&gt;Mint&lt;/a&gt;&amp;nbsp;have demonstrated that. &amp;nbsp;There is a tendancy to assume that banks will see this sort of thing as a threat and eventually turn up late to the party offering similar same sorts of facilities, pretty much as soon as the issue of ROI is figured out. &amp;nbsp;There is already some testing and &amp;quot;labs&amp;quot; development from the banks but it&amp;#39;s by no means a common offering.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It isn&amp;#39;t just a return on the investment that banks will struggle with through, it&amp;#39;s the potential size of the ongoing investment that is required in a difficult economic climate. &amp;nbsp;The typical customer experience of any bank is geared up to providing an accessible experience to the maximum number of customers. &amp;nbsp;It may not satisfy the &amp;#39;power&amp;#39; users who want to slice and dice their finances in lots of different ways but it caters for the majority of people using a variety of browsing technologies.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Even a relatively modern bank formed in the last ten years is now going to be typically sitting on years of legacy technologies and&amp;nbsp;&lt;a href="http://martinfowler.com/bliki/TechnicalDebt.html" title="Martin Fowler on Technical Debt"&gt;technical debt&lt;/a&gt;&amp;nbsp;inevitably have accumulated over the years gradually increasing the cost of change. &amp;nbsp;Where technology works, is still cost effective, remains secure and is legally compliant it can be very difficult to justify the costs of a major architectural change which gives the customer more flexibility and control over the way they view their financial information. &amp;nbsp;I think it&amp;#39;s pretty unlikely that there are going to be marketing and technical folk working within a bank that &lt;span class="Apple-style-span" style="font-weight: bold"&gt;aren&amp;#39;t&lt;/span&gt; going to be wanting to get into this sort of game.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The question is, should the banks try? &amp;nbsp;That&amp;#39;s not meant in the lazy sense but rather, will the customers end up sufficiently benefitting and can the bank really capitalise on the investment? &amp;nbsp;A traditionally developed bank cannot compete with the nimble start-up, take a look at the user-facing releases Wesabe made over the course of three days (via WesabeUpdates twitter feed):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- We&amp;#39;ve just deployed a new version of the site with 1 change by Brian&lt;span class="Apple-tab-span" style="white-space: pre"&gt;					&lt;/span&gt;(Jan 14th)&lt;/div&gt;&lt;div&gt;- We&amp;#39;ve just deployed a new version of the site with 7 changes by Andre and Brad&lt;span class="Apple-tab-span" style="white-space: pre"&gt;			&lt;/span&gt;(Jan 14th)&lt;/div&gt;&lt;div&gt;- Released Wesabe Cutback, a tool to help you save money by finding recurring expenses to cut back on&lt;span class="Apple-tab-span" style="white-space: pre"&gt;	&lt;/span&gt;(Jan 14th)&lt;/div&gt;&lt;div&gt;- We&amp;#39;ve just deployed a new version of the site with 2 changes by Brad&lt;span class="Apple-tab-span" style="white-space: pre"&gt;				&lt;/span&gt;(Jan 14th)&lt;/div&gt;&lt;div&gt;- Clicking the &amp;#39;Edit&amp;#39; button to edit a transaction should always work now&lt;span class="Apple-tab-span" style="white-space: pre"&gt;			&lt;/span&gt;(Jan 13th)&lt;/div&gt;&lt;div&gt;- Fixed that your merchant ratings wouldn&amp;#39;t show up when editing transactions&lt;span class="Apple-tab-span" style="white-space: pre"&gt;			&lt;/span&gt;(Jan 13th)&lt;/div&gt;&lt;div&gt;- We&amp;#39;ve just deployed a new version of the site with 8 changes by Brad and Brian&lt;span class="Apple-tab-span" style="white-space: pre"&gt;		&lt;/span&gt;(Jan 13th)&lt;/div&gt;&lt;div&gt;- We&amp;#39;ve just deployed a new version of the site with 1 change by Andre&lt;span class="Apple-tab-span" style="white-space: pre"&gt;				&lt;/span&gt;(Jan 12th)&lt;/div&gt;&lt;div&gt;- We&amp;#39;ve just deployed a new version of the site with 6 changes by Andre and Brian&lt;span class="Apple-tab-span" style="white-space: pre"&gt;		&lt;/span&gt;(Jan 12th)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That&amp;#39;s not a particularly unusual week and represents a site that has a small team of developers who are able to listen and respond to their community very quickly. &amp;nbsp;At the moment the level of technical debt will be low and the site has been built from the ground up with a more modern customer experience feel. &amp;nbsp;Although the scale of the changes are probably small, the lack of regulation and implications of things going wrong are far lower and it would be a very brave bank that tried such an aggressive release schedule regardless of the size of the change.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There&amp;#39;s an argument to say that actually, sites like these in fact complement the banks. &amp;nbsp;They can&amp;#39;t perform transactions and ultimately are not responsible for the safe holding and handling of your money, but what they can do is manage the resulting data from money movement money far better than the bank can in the eyes of the early adopters. &amp;nbsp;It leaves several options for the banks:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- Do nothing (doesn&amp;#39;t cost much in the short term and there&amp;#39;s little evidence to suggest customers are ready to move for the functionality yet)&lt;/div&gt;&lt;div&gt;- Work with their current technologies and enable functionality one justifiable investment at a time&lt;/div&gt;&lt;div&gt;- Somehow split the front end development from the back end to create an internal customer facing capability (a self contained startup)&lt;/div&gt;&lt;div&gt;- Be open with their data, but in a controlled manner. &amp;nbsp;Allow a customer easy access to data that is relevant to them.&lt;/div&gt;&lt;div&gt;- Work directly with a start-up/mature PFM site. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The last two are probably the most interesting to me, the personal finance sites offers a valuable service and whilst their &amp;#39;pro&amp;#39; functionality may cost the customer more than they pay now, the basic functionality is there for all customers. &amp;nbsp;At the lowest level, there is always the bank&amp;#39;s uniform, basic balances and statement. &amp;nbsp;We&amp;#39;ve seen Wesabe already create a joint site with the (UK newspaper)&amp;nbsp;&lt;a href="http://telegraph.wesabe.com/" title="Telegraph / Wesabe joint site"&gt;Telegraph&lt;/a&gt;, but would any bank embrace a closer tie? &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This first post doesn&amp;#39;t really gaze far into the future and we&amp;#39;re seeing examples of how this could work right now. &amp;nbsp;Many banks offer statement download functionality but the user experience is typically poor and not obvious for the majority of customers. &amp;nbsp;There are various options (for example OAuth) which would allow a customer to grant limited read-only access to their statements from a third party site, all without having to give away their banking credentials.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So the question is, should banks really try and offer the ultimate Web 2.0 experience themselves or should they enable the customer to get that experience in the easiest way possible?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next time - Banking on the Cloud...&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: center"&gt;&lt;span class="Apple-style-span" style="vertical-align: sub"&gt;&lt;span class="Apple-style-span" style="font-size: x-small"&gt;(Side note: apologies for the poor formatting of the last few posts, my laptop died and took with it the excellent&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://windowslivewriter.spaces.live.com/" target="_blank" title="Windows Live Writer"&gt;&lt;span class="Apple-style-span" style="vertical-align: sub"&gt;&lt;span class="Apple-style-span" style="font-size: x-small"&gt;Windows Live Writer.&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="vertical-align: sub"&gt;&lt;span class="Apple-style-span" style="font-size: x-small"&gt; &amp;nbsp;The blog web interface just doesn&amp;#39;t compare.)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/b-WVcgh6Vc8/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/Blue-sky-thinking-(and-playing-to-your-strengths).aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=58d4dcf8-6f26-4afc-97d9-8bf87bfb50a7</guid>
      <pubDate>Tue, 20 Jan 2009 02:53:00 -0600</pubDate>
      <category>Finance</category>
      <category>Innovation</category>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=58d4dcf8-6f26-4afc-97d9-8bf87bfb50a7</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=58d4dcf8-6f26-4afc-97d9-8bf87bfb50a7</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/Blue-sky-thinking-(and-playing-to-your-strengths).aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=58d4dcf8-6f26-4afc-97d9-8bf87bfb50a7</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=58d4dcf8-6f26-4afc-97d9-8bf87bfb50a7</feedburner:origLink></item>
    <item>
      <title>Microsoft Tag - say what you see</title>
      <description>&lt;p&gt;Today&amp;nbsp;&lt;a href="http://thefinanser.co.uk/fsclub/2009/01/microsoft-offers-a-new-payments-world.html" title="The Finanser"&gt;Chris Skinner&lt;/a&gt;&amp;nbsp;wrote about&amp;nbsp;&lt;a href="http://www.microsoft.com/tag/" title="Microsoft Tag"&gt;Microsoft Tag&lt;/a&gt;, the latest means of using images to represent textual data or URLs. &amp;nbsp;Chris rightly links these to&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/QR_Code" title="Wikipedia - QR codes"&gt;Quick Response (QR) codes&lt;/a&gt;&amp;nbsp;but I think misses one important difference about these tags compared to what we&amp;#39;ve seen before. &amp;nbsp;A Microsoft Tag is a pictorial identifier to information which is stored server-side by Microsoft and which is retrieved by the mobile TagReader client. &amp;nbsp;This is the first reason you need an internet connection and differs from traditional QR codes which embed the information directly into the 2D barcode itself with no external connectivity required.&lt;/p&gt;&lt;p&gt;What does that mean in practice? &amp;nbsp;Well, if we encode the couple of lines of my last blog post using Microsoft Tag we get:&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial; font-size: 12px; line-height: 17px"&gt;&amp;quot;&lt;span class="Apple-style-span" style="font-style: italic"&gt;Just a quick link post today but there have been three posts over the past week that have really struck me as some cheery news in difficult times: Barclays pilots Microsoft Surface in new flagship concept branch. &amp;nbsp;The reference to Microsoft Surface is almost the least interesting bit of this article (more...)&lt;/span&gt;&amp;quot;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.infoonthego.co.uk/blog/image.axd?picture=2009%2f1%2fMicrosoftTag.png" alt="" /&gt;&lt;div&gt;Compare that to a traditional 2D barcode which renders as:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;img src="http://www.infoonthego.co.uk/blog/image.axd?picture=2009%2f1%2fqrcode.png" alt="" /&gt;&lt;div&gt;The barcode is that large so as to try and make it readable by a camera but you&amp;#39;re on a loosing battle at this point. &amp;nbsp;If you&amp;#39;ve got a 2D barcode reader app on your phone and try to read the image above you&amp;#39;ll be very lucky if you get anywhere. &amp;nbsp;Use the Microsoft TagReader application on the first image though and chances are you only have to point the camera roughly at the image before it gets picked up.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Now of course, we could have encoded a URL in the 2D barcode to the same image but the point is that far more data can be stored in a Microsoft Tag (free text allows up to a 1000 characters). &amp;nbsp;It also has additional benefits:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;	&lt;li&gt;A small amount of data means the image is quick to interpret&lt;/li&gt;	&lt;li&gt;Being quick to interpret means the user doesn&amp;#39;t have to hold the image rock solid for a length of time&lt;/li&gt;	&lt;li&gt;A tag publisher gets statistics on how many people have scanned the tag&lt;/li&gt;	&lt;li&gt;A tag publisher will get general location information from customer&amp;#39;s who have the feature enabled in TagReader&lt;/li&gt;	&lt;li&gt;Allows password protection (few details around the implementation of this)&lt;/li&gt;	&lt;li&gt;Allows expiration date to be set&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;The requirement for an internet connection from the mobile is far less of a barrier than it was and there is plenty of scope for innovation around this, both from the customer holding a tag (rendered on a phone/printed on a card) and the customer reading a tag.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Obviously this is just Microsoft&amp;#39;s implementation of this and the same idea could be implemented in different ways using custom client applications (dangerous path ahead...) and, while it doesn&amp;#39;t feel like a standard in the making, it does give some interesting food for thought.&lt;/div&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/g96MvZ6-yKA/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/Microsoft-Tag-say-what-you-see.aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=a56264cf-09a9-459b-8e0a-74e6f562677f</guid>
      <pubDate>Mon, 12 Jan 2009 05:31:00 -0600</pubDate>
      <category>Computing</category>
      <category>Finance</category>
      <category>Innovation</category>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=a56264cf-09a9-459b-8e0a-74e6f562677f</pingback:target>
      <slash:comments>13</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=a56264cf-09a9-459b-8e0a-74e6f562677f</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/Microsoft-Tag-say-what-you-see.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=a56264cf-09a9-459b-8e0a-74e6f562677f</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=a56264cf-09a9-459b-8e0a-74e6f562677f</feedburner:origLink></item>
    <item>
      <title>Positive news in difficult times</title>
      <description>&lt;p&gt;Just a quick link post today but there have been three posts over the past week that have really struck me as some cheery news in difficult times:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.finextra.co.uk/fullstory.asp?id=19462" target="_blank"&gt;Barclays pilots Microsoft Surface in new flagship concept branch&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The reference to Microsoft Surface is almost the least interesting bit of this article (which is impressive in itself) but to create a three storey concept branch in a retail concept style is a clear message from Barclays.&amp;nbsp; It reminds me of Microsoft's "&lt;a href="http://uk.youtube.com/watch?v=9ptcC5B0E3U" target="_blank"&gt;Bank of the Future&lt;/a&gt;" video from a few years ago and it's going to be interesting to see how Barclays capitalise on this going forwards.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://futurebanking.bankofamerica.com" target="_blank"&gt;Future Banking Blog&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;As reported &lt;a href="http://bankervision.typepad.com/bankervision/2008/12/the-centre-for.html" target="_blank"&gt;here&lt;/a&gt; by James Gardner over at &lt;a href="http://bankervision.typepad.com/" target="_blank"&gt;BankerVision&lt;/a&gt;, the folks over at the &lt;a href="http://cfb.media.mit.edu/" target="_blank"&gt;Centre for Future Banking&lt;/a&gt; (representing a five year working partnership between Bank of America and MIT Media Labs) have announced their &lt;a href="http://futurebanking.bankofamerica.com" target="_blank"&gt;Future Banking Blog&lt;/a&gt;.&amp;nbsp; As James notes, it's markedly different from the usual bank offerings with a Bank of America branding but offering open contributions and thought as well as inviting contributions.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://thefinanser.co.uk/fsclub/2008/12/-hsbc-banking-on-the-network.html" target="_blank"&gt;HSBC: Banking on the network&lt;/a&gt;&lt;/p&gt; &lt;p&gt;In this &lt;a href="http://thefinanser.co.uk/fsclub/2008/12/-hsbc-banking-on-the-network.html" target="_blank"&gt;interesting post&lt;/a&gt; from Chris Skinner there is a summary of a conversation with Ken Harvey, Chief Technology and Services Officer (CTSO) from HSBC around what they have achieved in turning into an IP bank.&amp;nbsp; If sounding somewhat rose-tinted (employees really do training using iPods on their own time?), it's a positive post around achieving real cost-savings through the intelligent development and deployment of services to employees and customers alike and reinvesting savings into innovation.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In a time when there are messages of 'battening down the hatches' and 'keeping the lights on', it's positive to read of banks using innovation in an increasingly open way and realising that even (and especially) when times are tough, innovation matters.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:289968c6-0641-4e1d-bb73-2f16366787ae" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Financial%20Innovation" rel="tag"&gt;Financial Innovation&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/eCKWdk8POE0/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/Positive-news-in-difficult-times.aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=81d64aa7-86c4-4ef6-ba60-cc3cc269e9a4</guid>
      <pubDate>Tue, 23 Dec 2008 06:02:18 -0600</pubDate>
      <category>Finance</category>
      <category>Innovation</category>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=81d64aa7-86c4-4ef6-ba60-cc3cc269e9a4</pingback:target>
      <slash:comments>14</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=81d64aa7-86c4-4ef6-ba60-cc3cc269e9a4</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/Positive-news-in-difficult-times.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=81d64aa7-86c4-4ef6-ba60-cc3cc269e9a4</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=81d64aa7-86c4-4ef6-ba60-cc3cc269e9a4</feedburner:origLink></item>
    <item>
      <title>So banks need to do this now, why?</title>
      <description>&lt;p&gt;My &lt;a href="http://www.infoonthego.co.uk/blog/post/Mashing-up-your-bank-and-Wesabe.aspx" target="_blank"&gt;post&lt;/a&gt; on creating a client-side mashup between a traditional bank website and Wesabe got noticed by &lt;a href="http://thebankwatch.com/" target="_blank"&gt;The Bankwatch&lt;/a&gt; with Colin's coverage on the idea &lt;a href="http://thebankwatch.com/2008/12/12/real-innovation-integration-of-online-banking-and-wesabe-api/" target="_blank"&gt;here&lt;/a&gt;.&amp;#160; Colin (quite rightly) points out that the idea is a one-off and requires a degree of technical know-how, if nothing else the idea was to again show how banks can be manipulated whether or not it is something the institution actively enables.&amp;#160; We've seen it before with various screen scraping solutions, including the likes of &lt;a href="http://www.yodlee.com/" target="_blank"&gt;Yodlee&lt;/a&gt; and others but I wanted to show a more directly visual means of enhancement.&lt;/p&gt;  &lt;p&gt;What I would like to address are a couple of the comments that followed Colin's post which I think are pretty indicative of how banks are seen when we talk about things like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="www.tinfoiling.com" target="_blank"&gt;Gene&lt;/a&gt; said:&lt;/p&gt;  &lt;p&gt;&amp;quot;&lt;em&gt;... This is a key process that needs to be discussed and accepted by those in the banking world. The problem is the domain of the IT personnel and others who have a vested interests in NOT allowing this functionality. I can just hear the howls of excuses as to why it shouldn&amp;#8217;t be done instead of simply Why not?&lt;/em&gt;&amp;quot;&lt;/p&gt;  &lt;p&gt;&lt;a href="www.technologystory.com" target="_blank"&gt;Matt Williamson&lt;/a&gt; said:&lt;/p&gt;  &lt;p&gt;&amp;quot;&lt;em&gt;... As soon as the banks realize that the college crowd sees banking data much like they view all data, as something they own and want to see when and where they choose, then the banks will be closer to the goal of maintaining customers.&lt;/em&gt;&amp;quot; &lt;/p&gt;  &lt;p&gt;Almost all the medium and large sized financial institutions will have some form of innovation, marketing or R&amp;amp;D function that do get this and are probably internal advocates for it in their respective institutions with a degree of influence.&amp;#160; I'd also suggest that the IT personnel within banks would have very little problem with this sort of thing at all.&amp;#160; Without wishing to be particularly inflammatory, I would say that it's less a case of making excuses for it and it's even not a case of asking 'Why not?' but about asking the question 'Why now?'.&amp;#160; I would suspect the majority of banks have some form of money management or financial planning solutions or strategy up their sleeves but probably not many have the case to go ahead and release it yet.&lt;/p&gt;  &lt;p&gt;Online banking accounts for a well touted 40-50% of banking customers but how many of those customers would switch to a bank which offered a &lt;a href="http://www.wesabe.com" target="_blank"&gt;Wesabe&lt;/a&gt;/&lt;a href="http://www.mint.com" target="_blank"&gt;Mint&lt;/a&gt;/&lt;a href="http://www.buxfer.com/" target="_blank"&gt;Buxfer&lt;/a&gt; (insert PFM startup company here) style interface?&amp;#160; How many customers would switch to a bank that offered &lt;a href="http://oauth.net/" target="_blank"&gt;OAuth&lt;/a&gt; and an API for third party sites to interact with?&amp;#160; How many customers would put up with a bad experience otherwise because a bank tried to engage with customers in a more open way?&lt;/p&gt;  &lt;p&gt;The argument for the OAuth/API (or similar) offering is that the early tech adopters pick it up and run with it to create useful functionality or the bank can sponsor the adopters (via startup, competitions etc), in other words the &lt;a href="http://en.wikipedia.org/wiki/The_Long_Tail#User-driven_innovation" target="_blank"&gt;Long Tail&lt;/a&gt;.&amp;#160; Whatever the option though, it's a punt on a medium/long-term return for the bank and it may work out well (think &lt;a href="http://www.ebay.com" target="_blank"&gt;eBay&lt;/a&gt; and &lt;a href="http://www.amazon.com" target="_blank"&gt;Amazon&lt;/a&gt;) or it may sink without trace.&amp;#160; I think it's interesting that something like the Wesabe API introduction gained them much justifiable kudos from the technical community but how much functionality has actually been produced using it and made available over the past year, some, but not as much as I initially expected by any means.&lt;/p&gt;  &lt;p&gt;Don't take this to be a 'defending the banks' post, just a starter question on a wider debate (and bear in mind where this post started from):&lt;/p&gt;  &lt;p&gt;Breaking down walls is something the banks &lt;strong&gt;could&lt;/strong&gt; do, it's something that many institutions probably believe they &lt;strong&gt;should&lt;/strong&gt; (and maybe even &lt;strong&gt;want&lt;/strong&gt;&amp;#160; to do), but the killer question is whether it's something they &lt;strong&gt;must&lt;/strong&gt; do right now in the current climate?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e0fd8648-2713-4f9f-a1b9-4953ac46e45e" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Finance" rel="tag"&gt;Finance&lt;/a&gt;,&lt;a href="http://technorati.com/tags/API" rel="tag"&gt;API&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/HVAEf_CrAlE/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/So-banks-need-to-do-this-now-why.aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=c4aa2499-0759-4a4c-9fff-29984ac30c2c</guid>
      <pubDate>Fri, 19 Dec 2008 09:39:05 -0600</pubDate>
      <category>Finance</category>
      <category>Innovation</category>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=c4aa2499-0759-4a4c-9fff-29984ac30c2c</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=c4aa2499-0759-4a4c-9fff-29984ac30c2c</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/So-banks-need-to-do-this-now-why.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=c4aa2499-0759-4a4c-9fff-29984ac30c2c</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=c4aa2499-0759-4a4c-9fff-29984ac30c2c</feedburner:origLink></item>
    <item>
      <title>Mashing up your bank and Wesabe</title>
      <description>&lt;p&gt;In my &lt;a href="http://www.infoonthego.co.uk/blog/post/Re-writing-the-web-(one-page-at-a-time).aspx" target="_blank"&gt;last post&lt;/a&gt; I described a means of using &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/748" target="_blank"&gt;Grease Monkey&lt;/a&gt; and javascript to add extra functionality to web pages and in my previous example I demonstrated adding extra functionality to an online banking page.&amp;#160; At the end of that post I asked the question as to whether this was something that could be taken further and used to create a mash-up of your bank and a personal finance site.&amp;#160; In my case, I use &lt;a href="http://www.wesabe.com" target="_blank"&gt;Wesabe&lt;/a&gt; and whilst it is a great site to use I still find myself going to my traditional bank website for the standard balance/transaction stuff as it gives the most reliably up-to-date information.&lt;/p&gt;  &lt;p&gt;If I've gone to the effort of giving friendly names to merchants in Wesabe, can't I get the benefits elsewhere as well?&amp;#160; Wesabe have provided an API for well over a year now and although I've had a dabble with it now and again I've found that until there's a means of updating information (aside from the undocumented statement upload function) I haven't really had that much use for it, until now.&lt;/p&gt;  &lt;p&gt;Given the script from the original post, it's not a difficult jump to integrate functionality from Wesabe into our standard transaction statement:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/MashingupyourbankandWesabe_CDBC/four-col_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="86" alt="four-col" src="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/MashingupyourbankandWesabe_CDBC/four-col_thumb.png" width="467" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160; &lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="85" alt="wesabeintegrated" src="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/MashingupyourbankandWesabe_CDBC/wesabeintegrated_thumb.png" width="468" border="0" /&gt;&lt;/p&gt;  &lt;p&gt;Doesn't look hugely different but the original statement (on the left) label has been changed to the more readable name (on the right) I set in Wesabe and is now a link which allows me to open up the Wesabe merchant information in a separate window showing spending information etc.&lt;/p&gt;  &lt;p&gt;It's only a small change and there is plenty more you could do with it; show the tags, the transaction impact on a spending target, how much you've spent at that merchant this month or anything else you can think of.&amp;#160; It's possible to do this with almost any online banking site, applying the same script (with about four line changes handling the different HTML) to the Lloyds TSB site gives a result as shown below:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/MashingupyourbankandWesabe_CDBC/Lloyds-before_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="44" alt="Lloyds-before" src="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/MashingupyourbankandWesabe_CDBC/Lloyds-before_thumb.png" width="599" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/MashingupyourbankandWesabe_CDBC/Lloyds-after_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="29" alt="Lloyds-after" src="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/MashingupyourbankandWesabe_CDBC/Lloyds-after_thumb.png" width="563" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I'm not giving a complete script for this (see the warning I placed in my previous post about running third party scripts in online banking sessions) but I will show some fragments and let you 'fill in the blanks' and adapt to your own bank's site.&amp;#160; The script is split into two main sections, the first part dealing with the interaction with Wesabe via their REST based API:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  1:   &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; WesabeAPI = {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  2: 
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  3:     getRestResponse: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(url,functionref) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  4:       &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; xmlDoc;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  5:       GM_xmlhttpRequest({
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  6:         method: 'GET',
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  7:         url: url,
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  8:         headers: {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  9:             'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 10:             'Accept': 'application/x-www-form-urlencoded',
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 11:         },
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 12:         onload: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(responseDetails) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 13:           &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; parser = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DOMParser();
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 14:           GM_log(responseDetails.responseText);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 15:           xmlDoc = parser.parseFromString(responseDetails.responseText, &amp;quot;&lt;span style="color: #8b0000"&gt;application/xml&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 16:           functionref(xmlDoc);          
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 17:         }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 18:       });
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 19:     },
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 20: 
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 21:     &lt;span style="color: #008000"&gt;// Take the last four digits of the account number and look up the wesabe id for the account.&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 22:     &lt;span style="color: #008000"&gt;// Cache the id after the first time&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 23:     getWesabeDetails: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(accountId) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 24:       &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; wesabeId = GM_getValue(accountId,&amp;quot;&lt;span style="color: #8b0000"&gt;&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 25:       &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (wesabeId.&lt;span style="color: #0000ff"&gt;length&lt;/span&gt; != 0) WesabeAPI.getWesabeRawNames(wesabeId);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 26: 
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 27:       WesabeAPI.getRestResponse('https:&lt;span style="color: #008000"&gt;//www.wesabe.com/accounts.xml',WesabeAPI.parseWesabeAccounts);      &lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 28:     },
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 29: 
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 30:     parseWesabeAccounts: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(xmlDoc) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 31:       &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; accountNumbers = xmlDoc.getElementsByTagName(&amp;quot;&lt;span style="color: #8b0000"&gt;account-number&lt;/span&gt;&amp;quot;);      
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 32:       &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; i=0; i&amp;lt; accountNumbers.&lt;span style="color: #0000ff"&gt;length&lt;/span&gt;; i++) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 33:         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (accountNumbers[i].textContent == accountId) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 34:           &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; accountNode = accountNumbers[i].parentNode;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 35:           GM_log(accountNode.localName);              
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 36:           &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; j=0; j&amp;lt;accountNode.childNodes.&lt;span style="color: #0000ff"&gt;length&lt;/span&gt;; j++)
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 37:           {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 38:             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (accountNode.childNodes[j].localName==&amp;quot;&lt;span style="color: #8b0000"&gt;id&lt;/span&gt;&amp;quot;) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 39:               GM_setValue(accountId,accountNode.childNodes[j].textContent);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 40:               WesabeAPI.getWesabeRawNames(accountNode.childNodes[j].textContent);                  
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 41:             }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 42:           }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 43:         }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 44:       }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 45:     },
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 46: 
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 47:     getWesabeRawNames: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(wesabeAccountId) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 48:       WesabeAPI.getRestResponse('https:&lt;span style="color: #008000"&gt;//www.wesabe.com/accounts/'+wesabeAccountId+'.xml?start_date=20080101&amp;amp;end_date=20081201',WesabeAPI.parseWesabeRawNames);&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 49:     },
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 50: 
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 51:     parseWesabeRawNames: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(xmlDoc) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 52:       &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; rawNameNodes = xmlDoc.getElementsByTagName(&amp;quot;&lt;span style="color: #8b0000"&gt;raw-name&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffff00"&gt; 53:       LloydsTSB.matchTransactions(rawNameNodes);              &lt;span style="color: #008000"&gt;// &amp;lt;-- Alter this line to point to your bank specific update function&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 54:     }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 55:   }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 56: &lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;You can use this section of the script pretty much as it stands - the only line you &lt;strong&gt;need&lt;/strong&gt; to change is line 53 which makes a function call through to your bank specific code.&amp;#160; The entry point for this functionality is the getWesabeDetails function which takes the last four digits of your account number (which Wesabe uses as an identifier) and then finds out what Wesabe's internal identifier is for this account.&amp;#160; Once that's been retrieved it is cached to the script's sandboxed persistent storage and goes on to download the transactions for the time period we're interested in.&amp;#160; You can see that the time period is specified in the REST URL on line 48 of the snippet above, it's a horrible approach and would be the first thing to clean up in your own version of the script (along with removing some of the debug logging 'GM_log' statements).&lt;/p&gt;

&lt;p&gt;Line 53 then calls in to your bank specific code, in this case that of Lloyds TSB which is shown below:&lt;/p&gt;

&lt;pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  1:   &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; LloydsTSB = {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  2:     updateItem: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(descriptionElement, transaction) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  3:       &lt;span style="color: #008000"&gt;// check for merchant info&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  4:       &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; merchantNode = LloydsTSB.findChildByName(transaction,&amp;quot;&lt;span style="color: #8b0000"&gt;merchant&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  5:       &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (merchantNode) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  6:         &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; idNode = LloydsTSB.findChildByName(merchantNode,&amp;quot;&lt;span style="color: #8b0000"&gt;id&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  7:         &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; nameNode = LloydsTSB.findChildByName(merchantNode,&amp;quot;&lt;span style="color: #8b0000"&gt;name&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  8:         descriptionElement.innerHTML = &amp;quot;&lt;span style="color: #8b0000"&gt;&amp;lt;a href=\&amp;quot;https://www.wesabe.com/transactions/merchant/&lt;/span&gt;&amp;quot;+idNode.textContent+&amp;quot;&lt;span style="color: #8b0000"&gt;\&amp;quot; target=\&amp;quot;_blank\&amp;quot;&amp;gt;&lt;/span&gt;&amp;quot;+nameNode.textContent+&amp;quot;&lt;span style="color: #8b0000"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&amp;quot;;      
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;  9:       }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 10:     },
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 11: 
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 12:     findChildByName: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(parentNode, localName) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 13:       &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; i=0; i&amp;lt;parentNode.childNodes.&lt;span style="color: #0000ff"&gt;length&lt;/span&gt;; i++)
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 14:       {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 15:         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (parentNode.childNodes[i].localName==localName) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 16:           &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; parentNode.childNodes[i];        
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 17:         }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 18:       }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 19:     },
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 20: 
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 21:     getAccountIdentifier: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;() {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 22:       &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; cardNumberElement = &lt;span style="color: #0000ff"&gt;document&lt;/span&gt;.evaluate(&amp;quot;&lt;span style="color: #8b0000"&gt;//TD[@class='accountDetailsTableContainer5']//DIV[2]&lt;/span&gt;&amp;quot;, &lt;span style="color: #0000ff"&gt;document&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, XPathResult.FIRST_ORDERED_NODE_TYPE, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;).singleNodeValue;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 23:       &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; cardNumberElement.innerHTML.substring(4);  
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 24:     },
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 25: 
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 26:     matchTransactions: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(wesabeRawNames) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 27:       &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; rowElements = &lt;span style="color: #0000ff"&gt;document&lt;/span&gt;.evaluate(&amp;quot;&lt;span style="color: #8b0000"&gt;//DIV[@id='table']//TBODY/TR/TD[4]&lt;/span&gt;&amp;quot;, &lt;span style="color: #0000ff"&gt;document&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 28:       &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; i = 0; i &amp;lt; rowElements.snapshotLength ; i++) {        
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 29:         &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; descripElement = rowElements.snapshotItem(i);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 30:         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!descripElement) &lt;span style="color: #0000ff"&gt;continue&lt;/span&gt;;        
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 31:         &lt;span style="color: #008000"&gt;// is there a matching transaction&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 32:         &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; text = descripElement.innerHTML;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 33:         text = text.replace('&amp;lt;br&amp;gt;',' . ');        
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 34:         text=text.replace(/^\s*/, '').replace(/\s*$/, ''); 
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 35: 
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 36:         &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (text.indexOf(&amp;quot;&lt;span style="color: #8b0000"&gt;  &lt;/span&gt;&amp;quot;)!=-1) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 37:           text=text.replace(&amp;quot;&lt;span style="color: #8b0000"&gt;  &lt;/span&gt;&amp;quot;,&amp;quot;&lt;span style="color: #8b0000"&gt; &lt;/span&gt;&amp;quot;);            
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 38:         }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 39: 
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 40:         &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; j = 0; j&amp;lt;wesabeRawNames.&lt;span style="color: #0000ff"&gt;length&lt;/span&gt;; j++ ) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 41:           &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (text == wesabeRawNames[j].textContent) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 42:             LloydsTSB.updateItem(descripElement, wesabeRawNames[j].parentNode);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 43:             &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;              
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 44:           }            
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 45:         }        
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 46:       }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 47:     }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt; 48:   }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Ignoring the helper methods in there, the two functions you will need to write are &lt;strong&gt;getAccountIdentifier&lt;/strong&gt; to get that four digit account suffix to pass to Wesabe for lookup and the &lt;strong&gt;matchTransactions&lt;/strong&gt; function which will match the Wesabe raw transaction names to those on your statement.&amp;#160; Once the transactions have been matched you can insert whatever you want to provide the extra functionality, in the snippet above it uses the friendly name and inserts a link.&lt;/p&gt;

&lt;p&gt;That's pretty much it, you just need to add the two lines to call &lt;strong&gt;getAccountIdentifier&lt;/strong&gt; and pass the result to the &lt;strong&gt;WesabeAPI.getWesabeDetails&lt;/strong&gt; function.&lt;/p&gt;

&lt;p&gt;You'll notice that Wesabe authentication is not mentioned anywhere in the code snippets, I purposefully didn't include it and when the script runs it will prompt you for your Wesabe credentials (only does this once per browser session).&amp;#160; It gives you the option to cancel it and not augment your statement if you don't want to.&amp;#160; Another option would be to persist your Wesabe credentials in Grease Monkey settings so that it never asks you aside from the first time you run the script.&amp;#160; You'd need to weight up the pros and cons to that approach yourself.&lt;/p&gt;

&lt;p&gt;So there you have it, an augmented statement with extra details and no-one else had to do anything to achieve it.&amp;#160; It's by no means an ideal solution and using scripts like this is something to do with your eyes very much open but the fact that the functionality 'appears' within a few seconds of you opening your statement is quite neat and can make the statement a little more personal in appearance.&amp;#160; One way to take this forwards might be to add the functionality to perform a statement upload into Wesabe directly from your bank's site.&lt;/p&gt;

&lt;p&gt;It should go without saying but please do not send me any bank statements or any other private or personal information for help with writing a script, that said if you want to try something similar yourself and run into trouble then feel free to leave a comment.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d6da62d1-955a-4060-b7e2-42760f44eb8d" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Wesabe" rel="tag"&gt;Wesabe&lt;/a&gt;,&lt;a href="http://technorati.com/tags/mashup" rel="tag"&gt;mashup&lt;/a&gt;,&lt;a href="http://technorati.com/tags/finance" rel="tag"&gt;finance&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/CZl1jfvNNQQ/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/Mashing-up-your-bank-and-Wesabe.aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=808b10c3-9544-4abd-9299-8eb2aa4af88a</guid>
      <pubDate>Tue, 09 Dec 2008 10:09:13 -0600</pubDate>
      <category>Computing</category>
      <category>Finance</category>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=808b10c3-9544-4abd-9299-8eb2aa4af88a</pingback:target>
      <slash:comments>32</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=808b10c3-9544-4abd-9299-8eb2aa4af88a</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/Mashing-up-your-bank-and-Wesabe.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=808b10c3-9544-4abd-9299-8eb2aa4af88a</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=808b10c3-9544-4abd-9299-8eb2aa4af88a</feedburner:origLink></item>
    <item>
      <title>Re-writing the web (one page at a time...)</title>
      <description>&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/748" target="_blank"&gt;Grease Monkey&lt;/a&gt; is a browser plugin that's been around for a long time (2005) which allows you to run scripts against a page and alter the content on the fly.&amp;nbsp; Scripts are configured individually as to which URLs (either partial or full) they run against and can be turned or off at will.&amp;nbsp; There are &lt;a href="http://userscripts.org/" target="_blank"&gt;lots of scripts&lt;/a&gt; that have been provided over the years which do everything from fixing rendering bugs on common pages to enhancing Google results with search results from other sources.&lt;/p&gt; &lt;p&gt;Although it's always been something I've meant to get round to trying it's never quite made the top of the list until I wanted to add an enhancement to the credit card recent transactions page at &lt;a href="http://www.egg.com" target="_blank"&gt;Egg Bank&lt;/a&gt;.&amp;nbsp; The current page has three columns giving the date of the transaction, a description and the amount as shown below:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/AddingabalancetoyourEggrecenttransaction_D040/three-col_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="69" alt="Original three column layout" src="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/AddingabalancetoyourEggrecenttransaction_D040/three-col_thumb_1.png" width="467" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;What I wanted was an additional column which shows the rolling balance against each transaction.&amp;nbsp; The idea was to easily see the effect of a credit transaction amongst lots of debits to make sure I paid the balance off and didn't get charged interest.&lt;/p&gt; &lt;p&gt;The first step was to install Grease Monkey which was dead easy and then it was just a matter of writing a user script to work against the card transactions page.&amp;nbsp; It took about an half hour to get something working which I was happy with and gave the result I wanted:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/AddingabalancetoyourEggrecenttransaction_D040/three-col_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="86" alt="Layout with added balance column" src="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/AddingabalancetoyourEggrecenttransaction_D040/three-col_thumb.png" width="467" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The beauty is that once Grease Monkey is enabled, the page is automatically altered with no user intervention so it effectively permanently enhances the page.&amp;nbsp; The script to achieve the above is:&lt;/p&gt;&lt;pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;&lt;span style="color: #008000"&gt;// ==UserScript==&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;&lt;span style="color: #008000"&gt;// @name           EggCardBalance&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;&lt;span style="color: #008000"&gt;// @namespace      http://infoonthego/egg&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;&lt;span style="color: #008000"&gt;// @description    Adds a balance column to Egg Card/Egg Money recent transactions&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;&lt;span style="color: #008000"&gt;// @include        https://your.egg.com/customer/eggmoney/recenttransactions.aspx&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;&lt;span style="color: #008000"&gt;// @include        https://your.egg.com/customer/eggcard/recenttransactions.aspx&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;&lt;span style="color: #008000"&gt;// ==/UserScript==&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;(&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; () {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;  &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; EggBalance = {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;    getCurrentBalance: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;() {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;      &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; balanceElement = document.evaluate("&lt;span style="color: #8b0000"&gt;//tfoot/tr/td[@class='money']&lt;/span&gt;", document, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, XPathResult.FIRST_ORDERED_NODE_TYPE, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;).singleNodeValue;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;      &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; balanceString = balanceElement.innerHTML;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;      balanceString = balanceString.substring(1);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;      balanceString = balanceString.substring(0,balanceString.length-3);            
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;      &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; balanceString;    
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;    },
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;    addColumn: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;() {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;      &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; amountElement = document.evaluate("&lt;span style="color: #8b0000"&gt;//thead/tr/th[@class='amount']&lt;/span&gt;", document, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, XPathResult.FIRST_ORDERED_NODE_TYPE, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;).singleNodeValue;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (amountElement) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; balanceElement = document.createElement('th');
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        balanceElement.innerHTML="&lt;span style="color: #8b0000"&gt;balance&lt;/span&gt;";
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        balanceElement.setAttribute("&lt;span style="color: #8b0000"&gt;class&lt;/span&gt;","&lt;span style="color: #8b0000"&gt;money&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        amountElement.parentNode.insertBefore(balanceElement,amountElement.nextSibling);      
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;      }        
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;    },
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;    addBalanceCells: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;() {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;      &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; balance = parseFloat(EggBalance.getCurrentBalance());
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;      &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; rowElements = document.evaluate("&lt;span style="color: #8b0000"&gt;//table[@class='grid']/tbody/tr&lt;/span&gt;", document, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;      &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; amountElements = document.evaluate("&lt;span style="color: #8b0000"&gt;//table[@class='grid']/tbody/tr/td[@class='money']&lt;/span&gt;", document, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);    
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;      &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; i = amountElements.snapshotLength-1; i &amp;gt;= 0 ; i--) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; amountElement = amountElements.snapshotItem(i);        
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; amount = parseFloat(amountElement.innerHTML.substring(1));
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; balanceElement = document.createElement('td');
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;              
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        balanceElement.setAttribute("&lt;span style="color: #8b0000"&gt;class&lt;/span&gt;","&lt;span style="color: #8b0000"&gt;money&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        balanceElement.innerHTML="&lt;span style="color: #8b0000"&gt;£&lt;/span&gt;"+Math.round(balance*Math.pow(10,2))/Math.pow(10,2).toString();
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (balanceElement.innerHTML.indexOf("&lt;span style="color: #8b0000"&gt;.&lt;/span&gt;")==-1) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;          balanceElement.innerHTML = balanceElement.innerHTML+"&lt;span style="color: #8b0000"&gt;.00&lt;/span&gt;";        
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (balanceElement.innerHTML.indexOf("&lt;span style="color: #8b0000"&gt;.&lt;/span&gt;")==balanceElement.innerHTML.length-2) {
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;          balanceElement.innerHTML = balanceElement.innerHTML+"&lt;span style="color: #8b0000"&gt;0&lt;/span&gt;";
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        }      
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        amountElement.parentNode.appendChild(balanceElement);
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;        balance = balance - amount;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;      }  
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;    }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;  }
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;  GM_log('Running Egg balance GreaseMonkey script');
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;  EggBalance.addColumn();
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;  EggBalance.addBalanceCells();;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;})();
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #ffffff"&gt;&lt;/pre&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I've never really been much of a front-end/javascript type developer so I'm sure there are plenty of holes to be picked with the code but it does the job if you want to try the same thing.&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e6a5a66e-8e34-487a-880f-01b932603262" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Grease%20Monkey" rel="tag"&gt;Grease Monkey&lt;/a&gt;,&lt;a href="http://technorati.com/tags/finance" rel="tag"&gt;finance&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;You'll notice that the source listing above isn't very copy/paste friendly and I've done that for one very good reason...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/AddingabalancetoyourEggrecenttransaction_D040/warning-general-2_2.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="40" alt="warning-general-2" src="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/AddingabalancetoyourEggrecenttransaction_D040/warning-general-2_thumb.gif" width="44" align="left" border="0"&gt;&lt;/a&gt; You should never, ever, execute some arbitrary script against pages without fully trusting and understanding what it does and that goes in triplicate for logged in online banking sessions.&amp;nbsp; You couldn't ask for anything much more dangerous.&amp;nbsp; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That said, the source is there for you to enter and should still mean you get an understanding for what it does.&amp;nbsp; I'm not providing a downloadable file because people will install it without thinking which I will not be responsible for.&amp;nbsp; If you want to try the script on IE then there is a &lt;a href="http://www.gm4ie.com/" target="_blank"&gt;Grease Monkey IE plugin&lt;/a&gt; but I've not tested the script for compatibility so I couldn't say whether it works.&lt;/p&gt;
&lt;p&gt;It does lead me on to my next thought though which is that if it is pretty easy to do this then how about taking it to the next level and mashing up some of the good stuff that the personal finance sites do directly on to your bank page.&amp;nbsp; In particular I'm thinking of the &lt;a href="https://www.wesabe.com/page/api" target="_blank"&gt;Wesabe API&lt;/a&gt; to pull in friendly transaction names etc.&amp;nbsp; A sort of &lt;a href="http://en.wikipedia.org/wiki/If_the_mountain_won%27t_come_to_Muhammad" target="_blank"&gt;mountain and Muhammad&lt;/a&gt; scenario.&lt;/p&gt;
&lt;p&gt;If I get chance to take a look then I'll post the results.&lt;/p&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/h_CXU6yjdMI/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/Re-writing-the-web-(one-page-at-a-time).aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=7d5f79ae-5f15-430b-ac02-dd6d636cf955</guid>
      <pubDate>Wed, 03 Dec 2008 09:23:39 -0600</pubDate>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=7d5f79ae-5f15-430b-ac02-dd6d636cf955</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=7d5f79ae-5f15-430b-ac02-dd6d636cf955</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/Re-writing-the-web-(one-page-at-a-time).aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=7d5f79ae-5f15-430b-ac02-dd6d636cf955</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=7d5f79ae-5f15-430b-ac02-dd6d636cf955</feedburner:origLink></item>
    <item>
      <title>Developing in the cloud</title>
      <description>&lt;p&gt;Now that thin client computing has become fashionable again (as part of cloud computing) and the likes of &lt;a href="http://www.microsoft.com/azure/default.mspx" target="_blank"&gt;Microsoft&lt;/a&gt;, &lt;a href="http://code.google.com/appengine/" target="_blank"&gt;Google&lt;/a&gt; and &lt;a href="http://aws.amazon.com/" target="_blank"&gt;Amazon&lt;/a&gt; have released their respective platforms, it's interesting to look at some of the opportunities opening for companies.&amp;nbsp; There has already been a&amp;nbsp; coverage around the use of cloud computing as a potential replacement for data and hosting centres which are expensive, environmentally unfriendly and difficult to locate and several startups have used the model for either a &lt;a href="http://aws.amazon.com/solutions/case-studies/zoomii/" target="_blank"&gt;complete production environment&lt;/a&gt; or as a &lt;a href="http://aws.amazon.com/solutions/case-studies/37signals/" target="_blank"&gt;means of backup&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I've been wondering about development itself though and whether that could be something that would sit logically in a cloud computing virtualisation model.&amp;nbsp; I'll use Amazon's Elastic Computing Cloud (EC2) service as the example, it's probably the most appropriate of the frameworks for general virtualisation and is relatively mature.&lt;/p&gt; &lt;p&gt;EC2 makes use of an Amazon Machine Image (AMI) which is a complete configured operating system (&lt;a href="http://aws.amazon.com/ec2/#os" target="_blank"&gt;of which several are supported&lt;/a&gt;) along with any applications which the AMI needs.&amp;nbsp; Customers can either select a pre-built AMI or create their own from scratch (including the OS),&amp;nbsp; customise it exactly to their personal / corporate needs and then upload it to Amazons &lt;a href="http://aws.amazon.com/s3/" target="_blank"&gt;S3&lt;/a&gt; storage service.&amp;nbsp; From that point EC2 allows instances of the AMI to be started and stopped at will and charging is based on a Pay As You Go (PAYG) model.&lt;/p&gt; &lt;p&gt;Let's assume that your AMI is Windows based and given we want to use this machine for development, it's going to need a reasonable amount of computational power and RAM.&amp;nbsp; EC2 measures CPU usage in computer units (ECU) which the &lt;a href="http://aws.amazon.com/ec2/#instance" target="_blank"&gt;documentation&lt;/a&gt; explains as being 'one EC2 Compute Unit (EC2) provides the equivalent CPU capacity of a 1.0-1.2 GHz 2007 Opteron or 2007 Xeon processor).&amp;nbsp; For development the type of instance we will probably choose is the 'Standard Large Instance':&lt;/p&gt; &lt;p&gt;Large Instance - 7.5 GB of memory, 4 EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each), 850GB of instance storage, 64-bit platform&lt;/p&gt; &lt;p&gt;Until recently, EC2 instances had no form of persistent storage when they were shut down and relied on the user to transfer the data off either to the storage service S3 or to their own persistent storage.&amp;nbsp; That's changed now and in this instance we get an impressive 850Gb which should be more than ample for most cases.&lt;/p&gt; &lt;p&gt;The cost for this instance is $0.50 per hour while it is running with partial hours charged as full hours.&amp;nbsp; Assuming the instance runs for 40 hours in the working week (switched off at night) and there was 4Gb if traffic to the instance (2Gb either way), the weekly bill would be $20.54 (£13.91).&amp;nbsp; Used every week of the year the total bill comes to a shade over $1k ($1068 or £727 at the time of writing).&lt;/p&gt; &lt;p&gt;That may not sound particularly cheap but the instance specified above would most likely support two developers rather than requiring an instance per developer.&lt;/p&gt; &lt;p&gt;Some clear advantages I can see with this:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Small number of AMI "templates" to maintain for different types of instances and immediate roll-out as instances are re-started  &lt;li&gt;As projects start/stop and developers move between types of work then the number of relevant instances can be immediately scaled  &lt;li&gt;Internal hardware lifetime can be extended as developers do not require such capable terminals - a modern docked laptop would be more than suitable for general office duties and sessions open to a cloud developer instance.  &lt;li&gt;Any AMI can be run against any type of instance depending on the needs - prices start from $0.10 / hour for a single ECU, Linux/Unix based instance  &lt;li&gt;Instances can be monitored and automatically shut down when idle for certain periods of time through the EC2 Webservice API  &lt;li&gt;Costs can clearly be seen and controlled&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;On the other side, the challenges I see would be:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Security - A VPN would be a first step but there are bound to be corporate difficulties with this  &lt;li&gt;How the cost is accounted - the expensive developer workstations are presumably company assets  &lt;li&gt;Developer reliance on a third party&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;It's a very different sort of model and one that would probably be a challenge to many corporations but with the push for green computing as well as cost pressures, cloud virtualisation may become a viable option for development capabilities.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0b020ab8-e634-4230-b17f-a331019069e8" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/EC2" rel="tag"&gt;EC2&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Cloud%20computing" rel="tag"&gt;Cloud computing&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;.&amp;nbsp; &lt;/p&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/30BVWibQJOs/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/Developing-in-the-cloud.aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=8552f13e-c1dc-496b-9d5f-03b30a0bae0e</guid>
      <pubDate>Wed, 03 Dec 2008 07:43:26 -0600</pubDate>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=8552f13e-c1dc-496b-9d5f-03b30a0bae0e</pingback:target>
      <slash:comments>8</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=8552f13e-c1dc-496b-9d5f-03b30a0bae0e</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/Developing-in-the-cloud.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=8552f13e-c1dc-496b-9d5f-03b30a0bae0e</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=8552f13e-c1dc-496b-9d5f-03b30a0bae0e</feedburner:origLink></item>
    <item>
      <title>Alienating your customers from the start</title>
      <description>&lt;p&gt;People tend not to change their current accounts very often or even at all and there are some pretty obvious reasons why.&amp;nbsp; The biggest reason I would guess is around apathy, can I be bothered to go through the hassle of changing everything over to a new bank (even if they do promise to do it all for me), is it going to be so much better for me to make the effort?&lt;/p&gt; &lt;p&gt;I've banked with &lt;a href="www.lloydstsb.com" target="_blank"&gt;Lloyds TSB&lt;/a&gt; now for 12 years since I opened my first current account at the age of 16 and for the most part I've been fairly happy with them.&amp;nbsp; Just recently though they've become a nuisance due to an issue they have with generating false fraud alerts when accounts make external debit card payments using 3D-Secure to certain other banks.&amp;nbsp; My account has been regularly blocked and I got to the point when I though it time to see if someone else could do better.&lt;/p&gt; &lt;p&gt;About a month ago I went through the application process for &lt;a href="http://www.halifax.co.uk" target="_blank"&gt;Halifax&lt;/a&gt; (a not very &lt;a href="http://www.mozilla-europe.org/en/firefox/" target="_blank"&gt;Firefox&lt;/a&gt; friendly experience) and awaited my cards, cheque books (so I can lose them), online credentials and the magic account transfer process from Lloyds to begin.&lt;/p&gt; &lt;p&gt;Unfortunately, things went downhill from there:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The PIN mailer for the credit card was illegible when the security tab was removed (requested a new one)&lt;/li&gt; &lt;li&gt;The customer services number on the letter for any issues relating to the above PIN mailer was wrong - it wasn't customer services, it was the lost and stolen number who couldn't give me the number for customer services&lt;/li&gt; &lt;li&gt;To try and get a new PIN mailer we had to sign up for phone banking to speak to someone at customer services&lt;/li&gt; &lt;li&gt;First set of online details arrived, website wouldn't authenticate them and the call centre had no record of any online access registered to me (requested new credentials)&lt;/li&gt; &lt;li&gt;Second set of online details arrives, website wouldn't authenticate them but the man at the end of the phone spent ten minutes typing something and then it started working (no idea)&lt;/li&gt; &lt;li&gt;Halifax website - made me nostalgic for the 80s, basic but not in a user friendly way&lt;/li&gt; &lt;li&gt;No auto-magical account transfer process started, in fact no details of anything about it were sent (even after prompting, twice)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I'm the first to admit that none of the problems are insurmountable or even that serious but when that's the experience of the first ten days, you wonder what the next twelve years or so has in store for you teething problems or not.&lt;/p&gt; &lt;p&gt;I closed the account within the 14-day cooling off period and it felt a relief.&amp;nbsp; Ok, I was still with Lloyds but at least I knew their problems.&lt;/p&gt; &lt;p&gt;My view is that banks can rely on a lot of apathy from the consumer but if you can't get the initial experience right then you don't build confidence and you alienate your customer no matter how good your product is.&lt;/p&gt; &lt;p&gt;As for me, well, Lloyds TSB locked my account this week again so I'm off to try &lt;a href="http://www.firstdirect.com/" target="_blank"&gt;First Direct&lt;/a&gt; (at least the application was Firefox friendly....)&lt;/p&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/thpj0RDQF38/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/Alienating-your-customers-from-the-start.aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=b9fc94e6-5bb4-485a-8433-0ad31b547ec5</guid>
      <pubDate>Tue, 02 Dec 2008 10:21:46 -0600</pubDate>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=b9fc94e6-5bb4-485a-8433-0ad31b547ec5</pingback:target>
      <slash:comments>9</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=b9fc94e6-5bb4-485a-8433-0ad31b547ec5</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/Alienating-your-customers-from-the-start.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=b9fc94e6-5bb4-485a-8433-0ad31b547ec5</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=b9fc94e6-5bb4-485a-8433-0ad31b547ec5</feedburner:origLink></item>
    <item>
      <title>Converting those Egg statements to OFX (and getting them into Wesabe...)</title>
      <description>&lt;p&gt;I use my &lt;a href="http://www.egg.com" target="_blank"&gt;Egg&lt;/a&gt; credit card a fair amount and one of the things I've wanted to try for quite a while is to get some of the data into &lt;a href="http://www.wesabe.com" target="_blank"&gt;Wesabe&lt;/a&gt; to look at my spending.&lt;/p&gt; &lt;p&gt;Unfortunately as there is no option to download statements from Egg which Wesabe's import functionality relies on, there's no easy or obvious way of getting the data across.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.seagul.co.uk/" target="_blank"&gt;Chris Roos&lt;/a&gt; &lt;a href="http://blog.seagul.co.uk/articles/2007-04-01-converting-egg-credit-card-statements-to-ofx-for-upload-to-wesabe" target="_blank"&gt;addressed the problem&lt;/a&gt; some time ago along with &lt;a href="http://www.lloydstsb.co.uk" target="_blank"&gt;Lloyds TSB&lt;/a&gt; and &lt;a href="www.hsbc.co.uk" target="_blank"&gt;HSBC&lt;/a&gt; and provided some &lt;a href="http://www.ruby-lang.org/en/" target="_blank"&gt;Ruby&lt;/a&gt; scripts which would log into Egg, retrieve the statements and convert them into &lt;a href="http://www.ofx.net/" target="_blank"&gt;OFX&lt;/a&gt; which in turn Wesabe can import.&lt;/p&gt; &lt;p&gt;I know a number of people have had issues in trying to get the scripts running due to a lack of familiarity with Ruby so I put a quick page together which converts the statement text into OFX.&amp;nbsp; If you have the &lt;a href="https://www.wesabe.com/page/firefox" target="_blank"&gt;Wesabe firefox plugin&lt;/a&gt; installed then it should offer you the option to upload the resulting OFX straight into Wesabe.&amp;nbsp; The advantage here is that there is nothing to install, no security credentials are required (you &lt;strong&gt;never&lt;/strong&gt; give them out to anyone but your bank right?) and no personal information is necessary outside of the transactions themselves.&lt;/p&gt; &lt;p&gt;It should work with both recent transactions and monthly statement pages.&amp;nbsp; Seems to work ok but if it does upload some rubbish then you can always remove the upload from within Wesabe.&lt;/p&gt; &lt;p&gt;The page is &lt;a href="http://www.infoonthego.co.uk/eggtoofx/" target="_blank"&gt;here&lt;/a&gt;, give it a go and let me know how you get on... &lt;/p&gt; &lt;p&gt;(It should go without saying that the utility is not sanctioned or endorsed by either Egg or Wesabe)&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c2c03a63-59e4-4758-9590-519320427e6d" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Wesabe" rel="tag"&gt;Wesabe&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OFX" rel="tag"&gt;OFX&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/cu5cHbNNbRw/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/Converting-those-Egg-statements-to-OFX-(and-getting-them-into-Wesabe).aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=43979862-0b61-46de-81c5-2a28ea32fdb6</guid>
      <pubDate>Thu, 27 Nov 2008 05:38:11 -0600</pubDate>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=43979862-0b61-46de-81c5-2a28ea32fdb6</pingback:target>
      <slash:comments>21</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=43979862-0b61-46de-81c5-2a28ea32fdb6</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/Converting-those-Egg-statements-to-OFX-(and-getting-them-into-Wesabe).aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=43979862-0b61-46de-81c5-2a28ea32fdb6</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=43979862-0b61-46de-81c5-2a28ea32fdb6</feedburner:origLink></item>
    <item>
      <title>Disappointment is&amp;hellip;</title>
      <description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Disappointment is having an application work beautifully under simulation, getting excited at trying your creation on actual hardware and then…. it doesn’t even compile for the physical platform.&amp;#160; Bah.&amp;#160; &lt;/p&gt;  &lt;p&gt;I’ve had my native iPhone application running pretty well under simulation for close to a week now and have reached the point where I’d like to try it on a physical device and see how the UI choices I made do or don’t work as expected.&lt;/p&gt;  &lt;p&gt;Setting XCode to compile for the iPhone itself rather than the simulator yielded two problems.&lt;/p&gt;  &lt;p&gt;1) &lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSCalendarDate_Class/Reference/Reference.html" target="_blank"&gt;NSCalendarDate&lt;/a&gt; isn’t supported.&amp;#160; Ok fair play to this one, looking at the documentation gives the message up at the top that NSCalendarDate is due to be deprecated and you shouldn’t use it.&amp;#160; My bad for not reading the documentation properly. &lt;/p&gt;  &lt;p&gt;2) &lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSXMLDocument_Class/Reference/Reference.html" target="_blank"&gt;NSXMLDocument&lt;/a&gt;, &lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSXMLElement_Class/Reference/Reference.html" target="_blank"&gt;NSXMLElement&lt;/a&gt;, and &lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSXMLNode_Class/Reference/Reference.html" target="_blank"&gt;NSNode&lt;/a&gt; aren’t present either.&amp;#160; The reason I’ve seen suggested is that a full DOM for XML was deemed rather heavyweight for the phone.&amp;#160; &lt;/p&gt;  &lt;p&gt;In both cases, I can see the logic and am fine with these omissions but why on earth didn’t the simulator tell me two weeks ago when I wrote the code?&amp;#160; I was expecting to see runtime issues that showed where the simulator and physical reality differed but not fundamental library differences.&lt;/p&gt;  &lt;p&gt;For those who stumble over this then for the date/calendar issue, the documentation for NSCalendarDate points you to classes which between them can provide the functionality you’re looking for (not as nicely unfortunately).&amp;#160; As for XML, if you do need access to a DOM and a forward-only reader won’t do then try the &lt;a href="http://code.google.com/p/touchcode/" target="_blank"&gt;touchcode&lt;/a&gt; googlecode project which provides a libxml based replacement set of classes in &lt;a href="http://code.google.com/p/touchcode/wiki/TouchXML" target="_blank"&gt;TouchXML&lt;/a&gt;.&amp;#160; Be warned though – you may well find implementation differences to the NS* classes.&amp;#160; Apple presumably had a good reason for their decision on iPhone XML support so the other point to consider is whether your design is best suited to requiring DOM access when a forward-only reader might do the job just as well.&lt;/p&gt;  &lt;p&gt;Sigh, rant over and back to fixing the bugs.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:81024387-9125-4904-ba4b-279afbbce51d" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/iPhone+Development" rel="tag"&gt;iPhone Development&lt;/a&gt;,&lt;a href="http://technorati.com/tags/iPhone+Application" rel="tag"&gt;iPhone Application&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/P0Kp_49nX3A/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/Disappointment-ishellip3b.aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=291a1e47-f603-4a4e-9ee6-350aef569837</guid>
      <pubDate>Thu, 09 Oct 2008 03:06:40 -0600</pubDate>
      <category>iPhone Development</category>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=291a1e47-f603-4a4e-9ee6-350aef569837</pingback:target>
      <slash:comments>9</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=291a1e47-f603-4a4e-9ee6-350aef569837</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/Disappointment-ishellip3b.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=291a1e47-f603-4a4e-9ee6-350aef569837</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=291a1e47-f603-4a4e-9ee6-350aef569837</feedburner:origLink></item>
    <item>
      <title>iPhone resources I found helpful</title>
      <description>&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:34d52210-6973-49c4-98bd-6d2ceb8d88e4" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/iPhone" rel="tag"&gt;iPhone&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;Building an application for the iPhone has certainly been a steep learning curve, especially so if you’ve never done any Mac development before (and having actually used a Mac probably helps)…&lt;/p&gt;  &lt;p&gt;Two weeks in to some on and off development has got me to a point where I’m now more or less happy I understand the fundamentals if not producing the best &lt;a href="http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/chapter_1_section_1.html" target="_blank"&gt;Objective-C&lt;/a&gt; in the world.&amp;#160; Along the way I’ve made some heavy use of the various tutorials and forums around and I wanted to share those in case they were helpful to anyone else.&lt;/p&gt;  &lt;p&gt;Should save a couple of minutes with Google anyway.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://developer.apple.com/iphone/" target="_blank"&gt;Apple’s iPhone Dev Center&lt;/a&gt; – you probably found Apple’s own developer portal and whilst the documentation and videos are perhaps not particularly beginner friendly, the sample code is a very useful resource.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://iphone.zcentric.com/" target="_blank"&gt;iPhone Noob&lt;/a&gt; – a decent set of tutorials that take you from creating basic views etc through to using async AJAX calls in a pleasant, readable manner&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.iphonedevsdk.com" target="_blank"&gt;iPhone Dev SDK&lt;/a&gt; – a collection of forums which includes some tutorials but there’s a lot of useful information in there ready to be found through other’s questions&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lists.apple.com/" target="_blank"&gt;Apple’s developer mailing list&lt;/a&gt; – not iPhone specific but a good place to search for &lt;a href="http://developer.apple.com/cocoa/" target="_blank"&gt;Cocoa&lt;/a&gt; help&lt;/p&gt;  &lt;p&gt;This isn’t an iPhone development blog so I don’t want to go into too much detail but I can see a post upcoming with a couple of the code nuggets I’ve found to be helpful.&amp;#160; If you’re interested in &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank"&gt;test driven development&lt;/a&gt; for the iPhone it looks like &lt;a href="http://code.google.com/p/google-toolbox-for-mac/" target="_blank"&gt;google-toolbox-for-mac&lt;/a&gt; open source project is probably your best bet although it isn’t something I’ve tried yet.&lt;/p&gt;  &lt;p&gt;Let me know if you know of any other useful resources.&lt;/p&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/UI1f_2cT0uE/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/iPhone-resources-I-found-helpful.aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=6bdfada6-0d55-464b-b108-7c6177ebd897</guid>
      <pubDate>Tue, 23 Sep 2008 02:46:28 -0600</pubDate>
      <category>iPhone Development</category>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=6bdfada6-0d55-464b-b108-7c6177ebd897</pingback:target>
      <slash:comments>18</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=6bdfada6-0d55-464b-b108-7c6177ebd897</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/iPhone-resources-I-found-helpful.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=6bdfada6-0d55-464b-b108-7c6177ebd897</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=6bdfada6-0d55-464b-b108-7c6177ebd897</feedburner:origLink></item>
    <item>
      <title>As good as it gets&amp;hellip;</title>
      <description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;A couple of weeks ago I decided to take a look at the &lt;a href="http://developer.apple.com/iphone/" target="_blank"&gt;iPhone SDK&lt;/a&gt; and ran into the same barriers that probably thousands of others have:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You need a mac – ok, that’s not going to come as a total surprise and there are those who have set up compilation &lt;a href="http://antirez.com/page/iphone-gcc-guide.html" target="_blank"&gt;tool chains&lt;/a&gt; under Linux but I don’t want to make things harder than they need to be. &lt;/li&gt;    &lt;li&gt;That mac needs the latest version of Mac OS 10.5 – the old Macbook I had needed an upgrade &lt;/li&gt;    &lt;li&gt;That mac needs to be Intel CPU based&amp;#160; - that was annoying.&amp;#160; Doubly annoying for the installer running successfully except for not offering me the chance to actually install the SDK (just installed some other tools etc).&amp;#160; Finally got round that issue by following the instructions &lt;a href="http://czhangblog.blogspot.com/2008/07/iphone-sdk.html" target="_blank"&gt;here&lt;/a&gt; and adding support for the G4 into the platform supporting chipsets. &lt;/li&gt;    &lt;li&gt;You can’t test your application on a physical device without signing up for the &lt;a href="http://developer.apple.com/iphone/program/" target="_blank"&gt;developer program&lt;/a&gt; and paying Apple a minimum of $99 for a certificate to digitally sign your app regardless of whether you plan to distribute it or not. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;So a week later than expected I finally managed to get an iPhone dev environment fired up.&amp;#160; Given the thousands of blog posts and articles that have no doubt been written about iPhone development I won’t dwell on the experience.&amp;#160; What I will say though is that it was an initially rude awakening to someone who has grown more accustomed to&amp;#160; Java and .Net over the past couple of years with the mix of &lt;a href="http://en.wikipedia.org/wiki/ANSI_C" target="_blank"&gt;ANSI C&lt;/a&gt; and &lt;a href="http://www.smalltalk.org/smalltalk/whatissmalltalk.html" target="_blank"&gt;SmallTalk&lt;/a&gt; like syntax present in &lt;a href="http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/chapter_1_section_1.html" target="_blank"&gt;Objective-C&lt;/a&gt;.&amp;#160; &lt;/ul&gt;  &lt;p&gt;Thinking about the way the mobile industry has changed in terms of providing third party functionality on phones, you can suddenly see why this is something quite special.&lt;/p&gt;  &lt;p&gt;Using the iPhone SDK as it stands, I can develop for two devices (the iPhone and iPod Touch) which aside from some of the iPhone extras are very similar devices thanks to them being closed systems.&amp;#160; I don’t have to worry about differences in screen resolutions, input methods, audio capabilities, differing platform implementations or virtually any of the major issues which a &lt;a href="http://java.sun.com/javame/index.jsp" target="_blank"&gt;J2ME&lt;/a&gt; developer faces.&lt;/p&gt;  &lt;p&gt;In some ways, I liken it to developing a game for a console rather than a PC.&amp;#160; With a PC you have endless configurations of hardware, software, patch levels and drivers to handle and still produce a game that gives a great customer experience.&amp;#160; Compare that with a console whereby you know exactly what the hardware does, what bugs exist and what capabilities the platform offers.&amp;#160; &lt;/p&gt;  &lt;p&gt;If you consider purely the development platform then I think that ultimately Google’s &lt;a href="http://code.google.com/android/" target="_blank"&gt;android&lt;/a&gt; will &lt;strong&gt;probably &lt;/strong&gt;be the better of the two.&amp;#160; It has a lower cost to entry, it will support background running applications, a more flexible messaging system, a more open means of distributing your application and will probably outpace the iPhone SDK in terms of pure functionality.&amp;#160; The arguable downside is that several manufacturers will have to integrate it with their own hardware, the phones are going to come in all shapes and sizes and while android will no doubt abstract a lot of the difficulty away there will still be compromises.&amp;#160; That outpacing in terms of functionality will also help add to the level of fragmentation.&lt;/p&gt;  &lt;p&gt;The situation in developing with the iPhone SDK will probably get worse from here on in (and I’d love to be proved wrong).&amp;#160; Nano versions of the iPod Touch may come out, more firmware releases will mean different levels of functionality and bugs on different devices, the next generation of iPhone which you can probably expect in the next 12-24 months will have new gizmos added.&amp;#160; Apple aren’t known for providing the best backwards compatibility….&amp;#160; &lt;/p&gt;  &lt;p&gt;Now though, right here and now, until someone comes out with another closed system with an even better platform, in my opinion this is as good as it gets for a mobile developer.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d68ef3e5-1188-4774-91b3-fc294684db25" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/iPhone" rel="tag"&gt;iPhone&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Mobile+Applications" rel="tag"&gt;Mobile Applications&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/Y7qc0BK8-1Q/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/As-good-as-it-getshellip3b.aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=7db5601d-b3cd-4472-9aad-750a902947ee</guid>
      <pubDate>Wed, 10 Sep 2008 02:56:00 -0600</pubDate>
      <category>Computing</category>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=7db5601d-b3cd-4472-9aad-750a902947ee</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=7db5601d-b3cd-4472-9aad-750a902947ee</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/As-good-as-it-getshellip3b.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=7db5601d-b3cd-4472-9aad-750a902947ee</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=7db5601d-b3cd-4472-9aad-750a902947ee</feedburner:origLink></item>
    <item>
      <title>How does your business handle innovation?</title>
      <description>&lt;p&gt;
As I go through the process of looking at the innovation capability where I work I&amp;rsquo;ve been thinking recently about the different means of providing innovation within a business along with some advantages and disadvantages.
&lt;/p&gt;
&lt;p&gt;
This is not talking about different targets (or types) of innovation (be it product, process, culture etc) but rather the fundamental way in which the team works and I came up with the following:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;1) Disruptive growth innovation&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The output of the team is either large scale, disruptive innovation that attempts to jump to the desired goal immediately or, the function acquires (or creates) a new capability to achieve the same result.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Pros&lt;/em&gt;: A success means a big ROI
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Cons&lt;/em&gt;: Expensive and unless there is a large amount of available resource will inevitably lead to a small number of eggs in the basket.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2) Filtering innovation&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The innovation capability takes the ideas of a larger community and filters them down before taking the best ideas forwards and converting them into practical innovation.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Pros&lt;/em&gt;: Potentially a high turnover of practical innovations that cover a wide degree of business areas with an experience wider than that of the innovation team
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Cons&lt;/em&gt;: Depending on the size of the community providing the initial ideas, there may be a large resource requirement from the innovation side trying to deal with all the ideas.&amp;nbsp; Good ideas may be dismissed because they are not complete enough in comparison to others.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3) Business driven / evolutionary innovation&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The innovation team uses business (or other) stakeholders to provide the areas or goals which the team aims to provide appropriate solutions towards.&amp;nbsp; The innovation that comes about may be stepping stones to a long term goal but provides smaller, short term rewards along the way.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Pros&lt;/em&gt;: Provides a reasonable ROI in the short/medium term whilst moving towards a desired end state for the business area.&amp;nbsp; Potentially uses less resource than some of the other types.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Cons&lt;/em&gt;: Innovation limited to the needs of the stakeholders.&amp;nbsp; May be difficult to steer the evolutionary work in the direction of the desired final goal.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;4) &amp;ldquo;Pure&amp;rdquo; Technology / Business Process (R&amp;amp;D) innovation &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The innovation team takes little or no impetus from immediate business goals but is a research and development capability looking at technology or business process optimisation which can then be taken to stakeholders.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Pros&lt;/em&gt;: A free remit for the team may lead to some highly innovative solutions to problems and potentially large rewards
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Cons&lt;/em&gt;: Expensive and the ROI may be extremely variable.&amp;nbsp; Runs the risk of the team being classed as the &amp;ldquo;gadget guys&amp;rdquo; and working with stakeholders as a vendor rather than a collaborator.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;5) Do nothing&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
You can always do nothing.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Pros&lt;/em&gt;: Cheap (in the short term)
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Cons&lt;/em&gt;: The business suffers from a competitive disadvantage and will possibly (probably?) suffer in the long term
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
All of the above are distinct examples of handling and I would expect there are many real-world teams who mix elements of the above to create a more balanced function with a probably bias to one style in particular.
&lt;/p&gt;
&lt;p&gt;
My team primarily uses the &amp;ldquo;evolutionary innovation&amp;rdquo; method of working above.&amp;nbsp; It fits well in the current climate when &amp;ldquo;permission to fail&amp;rdquo; is not as prevalent as perhaps it once was and offers a good ROI.&amp;nbsp; At the same time, it&amp;rsquo;s difficult to realise potential in areas where it can&amp;rsquo;t be applied to immediate stakeholder goals.
&lt;/p&gt;
&lt;p&gt;
I&amp;rsquo;m interested in finding any other ways of working that people have along with how some of the above may have been combined effectively.&amp;nbsp; Do teams often have the flexibility to change the mix in line with the business needs or does the remit usually remain static?
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/sDDFfvTBg1w/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/How-does-your-business-handle-innovation.aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=ee7bfa21-63ec-490e-ae85-2912f292b1dc</guid>
      <pubDate>Mon, 08 Sep 2008 07:47:00 -0600</pubDate>
      <category>Innovation</category>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=ee7bfa21-63ec-490e-ae85-2912f292b1dc</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=ee7bfa21-63ec-490e-ae85-2912f292b1dc</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/How-does-your-business-handle-innovation.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=ee7bfa21-63ec-490e-ae85-2912f292b1dc</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=ee7bfa21-63ec-490e-ae85-2912f292b1dc</feedburner:origLink></item>
    <item>
      <title>Recommended software for Ubuntu</title>
      <description>&lt;blockquote&gt;   &lt;p&gt;&lt;/p&gt;    &lt;p&gt;Having largely switched my day-to-day usage from Vista to Ubuntu, I’ve been keeping my eye out for the software tools that I consider vital for my set-up.&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;RSS reader client &lt;/li&gt;      &lt;li&gt;Media player &lt;/li&gt;      &lt;li&gt;Virtualisation platform &lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;RSS Client&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ubuntu does have a number of RSS clients within it’s repositories ranging from extremely light weight to relatively full featured.&amp;#160; Initially I decided to try one of the more full featured clients having been a previous fan of RSS Bandit under Windows, &lt;a href="http://liferea.sourceforge.net" target="_blank"&gt;Liferea&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The client is comparatively simple when viewed against the likes of &lt;a href="http://www.rssbandit.org/" target="_blank"&gt;RSS Bandit&lt;/a&gt; but what caused it’s rejection for me was an apparent single threaded update of RSS feeds.&amp;#160; I subscribe to a relatively modest number of feeds but it took far too long for those to get updated.&lt;/p&gt;  &lt;p&gt;Assuming there must be a few java based efforts a Google search suggested &lt;a href="http://www.rssowl.org/" target="_blank"&gt;RSSOwl&lt;/a&gt; and this is what I’ve stuck with.&amp;#160; A month or two of use has not changed my opinion that this is a great RSS client. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/RecommendedsoftwareforUbuntu_76B8/Screenshot-ProgrammableWeb%20-%20RSSOwl%20_2.png"&gt;&lt;img title="Screenshot-ProgrammableWeb - RSSOwl " style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 5px 0px 0px; border-right-width: 0px" height="216" alt="Screenshot-ProgrammableWeb - RSSOwl " src="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/RecommendedsoftwareforUbuntu_76B8/Screenshot-ProgrammableWeb%20-%20RSSOwl%20_thumb.png" width="244" align="left" border="0" /&gt;&lt;/a&gt;Aside from being extremely customisable, it’s fast and maintains a simple interface.&amp;#160; It has all the features I used within RSS Bandit and has builds available for Windows, Mac and Linux.&lt;/p&gt;  &lt;p&gt;Based on the &lt;a href="http://www.eclipse.org" target="_blank"&gt;Eclipse&lt;/a&gt; framework this is a familiar looking interface to anyone who has used the Eclipse IDE previously but it’s simple to use and options are quick to find.&lt;/p&gt;  &lt;p&gt;For me the only thing that is missing is the ability to sync between separate instances, a feature that will only appeal to the minority and something that I can definitely live with.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Media Player&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Again, Ubuntu comes with a number of media players already suggested through it’s repository and again, for now I’m sticking with one that isn’t currently suggested – &lt;a href="http://getsongbird.com/" target="_blank"&gt;Songbird&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;It’s worth saying up front that this is still in beta (and has only just moved from alpha) but the software is very feature rich and its stability seems on the whole pretty good.&lt;a href="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/RecommendedsoftwareforUbuntu_76B8/Screenshot-Songbird_2.png"&gt;&lt;img title="Screenshot-Songbird" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 0px 5px; border-right-width: 0px" height="181" alt="Screenshot-Songbird" src="http://www.infoonthego.co.uk/blog/image.axd?picture=WindowsLiveWriter/RecommendedsoftwareforUbuntu_76B8/Screenshot-Songbird_thumb.png" width="244" align="right" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The application is built on the &lt;a href="http://en.wikipedia.org/wiki/Mozilla_application_framework" target="_blank"&gt;Mozilla Application Framework&lt;/a&gt; (aka XPFE) and inherits a nice plugin architecture with support for both visual elements and playback/media functionality.&amp;#160; They appear to already have a strong community of plugin developers and the coverflow addon shown in the picture is one of my favourite handling album art better than Windows Media Player.&lt;/p&gt;  &lt;p&gt;Like RSSOwl, Songbird is available for Windows, Mac and Linux platforms so if you fancy trying out an alternative media player you’ve got no excuses.&amp;#160; It will also handle your external mp3 player as well with support for iPod, MTP and simple USB devices (via plugins).&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Virtualisation Platform&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There are a number of options here including &lt;a href="www.vmware.com" target="_blank"&gt;VMWare&lt;/a&gt; and &lt;a href="http://www.virtualbox.org" target="_blank"&gt;VirtualBox&lt;/a&gt; which are both worth looking at.&amp;#160; I won’t comment on them further (there’s plenty of much better informed commentary already available) except to say that I use VirtualBox and it has been both very stable and given great performance using both Windows XP and Windows Server 2003 on my Ubuntu host.&amp;#160;&amp;#160; The only caveat worth mentioning is that at the time of writing the open source edition does not include USB support for the guest OS.&amp;#160; That was something I required so I opted for the closed source edition &lt;a href="http://www.sun.com/software/products/virtualbox/get.jsp" target="_blank"&gt;directly from Sun&lt;/a&gt;.&lt;/p&gt;</description>
      <link>http://feedproxy.google.com/~r/Infoonthego/~3/H4Cw45LTjFw/post.aspx</link>
      <author>jamesdmoore.nospam@nospam.gmail.com (james)</author>
      <comments>http://www.infoonthego.co.uk/blog/post/Recommended-software-for-Ubuntu.aspx#comment</comments>
      <guid isPermaLink="false">http://www.infoonthego.co.uk/blog/post.aspx?id=ed0bf46e-5df1-425d-9d00-1c573578c2a7</guid>
      <pubDate>Mon, 01 Sep 2008 03:44:23 -0600</pubDate>
      <category>Computing</category>
      <category>Ubuntu</category>
      <dc:publisher>james</dc:publisher>
      <pingback:server>http://www.infoonthego.co.uk/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.infoonthego.co.uk/blog/post.aspx?id=ed0bf46e-5df1-425d-9d00-1c573578c2a7</pingback:target>
      <slash:comments>8</slash:comments>
      <trackback:ping>http://www.infoonthego.co.uk/blog/trackback.axd?id=ed0bf46e-5df1-425d-9d00-1c573578c2a7</trackback:ping>
      <wfw:comment>http://www.infoonthego.co.uk/blog/post/Recommended-software-for-Ubuntu.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.infoonthego.co.uk/blog/syndication.axd?post=ed0bf46e-5df1-425d-9d00-1c573578c2a7</wfw:commentRss>
    <feedburner:origLink>http://www.infoonthego.co.uk/blog/post.aspx?id=ed0bf46e-5df1-425d-9d00-1c573578c2a7</feedburner:origLink></item>
  </channel>
</rss>

