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

<channel>
	<title>Claudio Cherubino&#039;s blog &#187; Software Development</title>
	<atom:link href="http://www.claudiocherubino.it/category/software-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.claudiocherubino.it</link>
	<description>Life of a Googler</description>
	<lastBuildDate>Fri, 25 Nov 2011 22:38:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Free tickets and promo code for Progressive .NET Tutorials in London</title>
		<link>http://www.claudiocherubino.it/2011/08/03/free-tickets-and-promo-code-for-progressive-net-tutorials-in-london/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=free-tickets-and-promo-code-for-progressive-net-tutorials-in-london</link>
		<comments>http://www.claudiocherubino.it/2011/08/03/free-tickets-and-promo-code-for-progressive-net-tutorials-in-london/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 21:36:13 +0000</pubDate>
		<dc:creator>claudio</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.claudiocherubino.it/?p=772</guid>
		<description><![CDATA[It's been less than a month since I left London to move to the Bay Area and I already have a good reason to come back. Skills Matter and the London .NET User Group are organizing the Progressive .NET Tutorials in London on September 5-7 and the agenda looks quite interesting, with two tracks and [...]]]></description>
			<content:encoded><![CDATA[<p>It's been less than a month since I left London to move to the Bay Area and I already have a good reason to come back.</p>
<p><a href="http://skillsmatter.com/" title="Skills Matter">Skills Matter</a> and the <a href="http://www.dnug.org.uk/" title="London .NET User Group">London .NET User Group</a> are organizing the <a href="http://skillsmatter.com/event/open-source-dot-net/progressive-dot-net-tutorials-2011/" title="Progressive .NET Tutorials">Progressive .NET Tutorials</a> in London on September 5-7 and the <a href="http://skillsmatter.com/event/open-source-dot-net/progressive-dot-net-tutorials-2011/">agenda</a> looks quite interesting, with two tracks and a lot of important names, including my fellow Googler <strong>Jon Skeet</strong>!</p>
<p>Unfortunately, I won't be able to attend the event but the good part of it (good for you) is that I have <strong>two free tickets to give away</strong>!</p>
<p><strong>The first two people to comment this post will get a free ticket each</strong>, but please only participate if you really plan to attend the event.</p>
<p>Don't despair if you don't get one of the two free tickets, if you want to buy one you can use the <strong>promo code PROGNET50</strong> when registering to get a <strong>£50 discount</strong> off the ticket price.</p>
<p><a href="http://skillsmatter.com/event/open-source-dot-net/progressive-dot-net-tutorials-2011/wd-2388"><img border="0" src="http://skillsmatter.com/nl/prognet/prognet11_banner.gif"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.claudiocherubino.it/2011/08/03/free-tickets-and-promo-code-for-progressive-net-tutorials-in-london/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dissecting the Google Developer Advocate Team page</title>
		<link>http://www.claudiocherubino.it/2011/03/09/dissecting-the-google-developer-advocate-team-page/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dissecting-the-google-developer-advocate-team-page</link>
		<comments>http://www.claudiocherubino.it/2011/03/09/dissecting-the-google-developer-advocate-team-page/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 19:26:02 +0000</pubDate>
		<dc:creator>claudio</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Lavoro]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[app engine]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[developer programs engineer]]></category>
		<category><![CDATA[developer relations]]></category>
		<category><![CDATA[GData]]></category>
		<category><![CDATA[spreadsheet]]></category>

		<guid isPermaLink="false">http://www.claudiocherubino.it/?p=738</guid>
		<description><![CDATA[One of the side projects I worked on at the end of last year is the Google Developer Advocate Team page, a web application that provides bios for all members of my team and allows to track the public events we are going to attend. We'll probably end up open-sourcing the code but I've already [...]]]></description>
			<content:encoded><![CDATA[<p>One of the side projects I worked on at the end of last year is the <a href="http://code.google.com/team">Google Developer Advocate Team page</a>, a web application that provides bios for all members of my team and allows to track the public events we are going to attend.</p>
<p>We'll probably end up open-sourcing the code but I've already got questions about the technologies adopted so I decided to write this post to explain some of the design choices.</p>
<p>The application is written in Java and runs on <a href="http://code.google.com/appengine/">App Engine</a>, which provides scalability and simple deployment and administration. </p>
<p>One of the main requirements when designing the application was that it had to seamlessly integrate into our existing workflow in order to be as easy as possible for Google advocates to insert their events. Internally we use Google Calendar to track our trips and speaking opportunities so it was straightforward to use the <a href="http://code.google.com/apis/calendar/data/2.0/developers_guide.html">Calendar Data API</a> to fetch data from a <a href="http://www.google.com/calendar/render?cid=http%3A//www.google.com/calendar/feeds/developer-calendar@google.com/public/basic">shared calendar</a>.</p>
<p>A <a href="http://code.google.com/appengine/docs/java/config/cron.html">cron job</a> periodically checks that calendar, parses new events to extract the relevant info (date, time, location, speakers, products, description) and updates the <a href="http://code.google.com/appengine/docs/java/gettingstarted/usingdatastore.html">Datastore using JDO</a>.</p>
<p>Advocates' profiles are stored in a Google Spreadsheet which we can internally update using a simple web form. The public page uses the <a href="http://code.google.com/apis/spreadsheets/data/3.0/developers_guide.html">Spreadsheets Data API</a> to get the relevant pieces of information and display them.</p>
<p>The <a href="http://code.google.com/events/">Google Developer Events Calendar page</a> embeds a Google Map using JavaScript and uses the <a href="http://code.google.com/apis/maps/documentation/geocoding/">Geocoding API</a> to map event locations to geographical coordinates that can be pinned to the map or searched for.</p>
<p>Want to see your face in the Google Developer Advocates page? We are <a href="http://sites.google.com/site/googdevreljobs/">hiring</a>! </p>
]]></content:encoded>
			<wfw:commentRss>http://www.claudiocherubino.it/2011/03/09/dissecting-the-google-developer-advocate-team-page/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using JetS3t to interact with Google Storage</title>
		<link>http://www.claudiocherubino.it/2010/10/04/using-jets3t-to-interact-with-google-storage/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=using-jets3t-to-interact-with-google-storage</link>
		<comments>http://www.claudiocherubino.it/2010/10/04/using-jets3t-to-interact-with-google-storage/#comments</comments>
		<pubDate>Mon, 04 Oct 2010 10:29:17 +0000</pubDate>
		<dc:creator>claudio</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[amazon s3]]></category>
		<category><![CDATA[bitbucket]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[Google Storage]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JetS3t]]></category>

		<guid isPermaLink="false">http://www.claudiocherubino.it/?p=709</guid>
		<description><![CDATA[Google announced a lot of cool stuff at Google I/O, including Google TV, Android Froyo and App Engine for Business but it was another project that caught my attention and it is Google Storage for Developers. Cloud storage is a huge business and many successful online services such as Dropbox, SlideShare or Twitter already use [...]]]></description>
			<content:encoded><![CDATA[<p>Google announced a lot of cool stuff at <a href="http://code.google.com/events/io/2010/">Google I/O</a>, including <a href="http://www.google.com/tv/">Google TV</a>, <a href="http://googleblog.blogspot.com/2010/05/android-froyo-with-some-sprinkles.html">Android Froyo</a> and <a href="http://code.google.com/appengine/business/">App Engine for Business</a> but it was another project that caught my attention and it is <a href="http://code.google.com/apis/storage/">Google Storage for Developers</a>.</p>
<p>Cloud storage is a huge business and many successful online services such as Dropbox, SlideShare or Twitter already use <strong>Amazon S3</strong> for their storage needs. The idea is simple: you store your files on Google's infrastructure and access them from anywhere, paying only for what you use.</p>
<p><strong>Google Storage</strong> is a RESTful service so it is possible to interact with it through the standard HTTP methods (GET, POST, PUT and DELETE) as explained in the <a href="http://code.google.com/apis/storage/docs/developer-guide.html">Developer's Guide</a> but it is much easier to rely on the client libraries which hide the complexities of the raw protocol.<br />
A <a href="http://code.google.com/apis/storage/docs/gspythonlibrary.html">Python library</a> can be downloaded from the project website but Google Storage also understands Amazon S3 protocol so that any existing tool for S3 can work with Google Storage with minor (if any) modifications.</p>
<p>Among all the toolkits for Amazon S3, <a href="http://jets3t.s3.amazonaws.com/index.html">JetS3t</a> is probably the best known and most widely adopted. It is an open-source Java suite that officially added support for Google Storage in the recently released <a href="http://bitbucket.org/jmurty/jets3t/downloads">version 0.8.0</a>.</p>
<p><strong>JetS3t</strong> is released under the Apache License 2.0, so it is free for commercial or non-commercial use and can be modified as needed. Its source code can be downloaded from the <a href="http://bitbucket.org/jmurty/jets3t/wiki/Home">project page on BitBucket</a> where you can also find the instructions on <a href="http://bitbucket.org/jmurty/jets3t/wiki/Build_Instructions">how to build it</a> or contribute to the project.</p>
<p>Using JetS3t to write a Java application that interacts with Google Storage is very easy. It is possible to connect to the service, create buckets and upload/download objects with less than 10 lines of code:</p>
<pre class="brush: java; title: ; notranslate">
// Google Storage login credentials are required to manage GS accouponunts.
GSCredentials credentials = new GSCredentials(ACCESS_KEY, SECRET_KEY);

// To communicate with Google Storage use the GoogleStorageService.
GoogleStorageService service = new GoogleStorageService(credentials);

// To store data in GS you must first create a bucket, a container for objects.
GSBucket bucket = service.createBucket(&quot;jets3t-test-bucket&quot;);

// Create a GSObject based on a local file
File localFile = new File(&quot;my_file.txt&quot;);
GSObject localObject = new GSObject(localFile);

// Upload the object to our test bucket in GS.
localObject = service.putObject(&quot;jets3t-test-bucket&quot;, localObject);

// Download the data object we just uploaded
GSObject remoteObject = service.getObject(&quot;jets3t-test-bucket&quot;, &quot;my_file.txt&quot;);
</pre>
<p>The <strong>GoogleStorageService</strong> exposes all the methods to manipulate the cloud filesystem and only takes a set of credentials to be instantiated. Besides the basic set of commands presented in the code snippet above, there are other methods to manage Access Control Lists or to copy/move/rename objects.<br />
The source code distribution also includes <a href="http://bitbucket.org/jmurty/jets3t/src/tip/src/org/jets3t/samples/GSCodeSamples.java">a complete code sample</a> that covers all the functionalities described in the <a href="http://code.google.com/apis/storage/docs/developer-guide.html">Google Storage Developer's Guide</a>.</p>
<p>Are you already thinking about the next big thing that can be built on top of this service?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.claudiocherubino.it/2010/10/04/using-jets3t-to-interact-with-google-storage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google events in Europe</title>
		<link>http://www.claudiocherubino.it/2010/09/16/google-events-in-europe/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-events-in-europe</link>
		<comments>http://www.claudiocherubino.it/2010/09/16/google-events-in-europe/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 10:16:16 +0000</pubDate>
		<dc:creator>claudio</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[developer days]]></category>
		<category><![CDATA[devfest]]></category>
		<category><![CDATA[europe]]></category>
		<category><![CDATA[google apps]]></category>
		<category><![CDATA[madrid]]></category>
		<category><![CDATA[marketplace]]></category>
		<category><![CDATA[moscow]]></category>
		<category><![CDATA[munich]]></category>
		<category><![CDATA[prague]]></category>
		<category><![CDATA[spain]]></category>

		<guid isPermaLink="false">http://www.claudiocherubino.it/?p=701</guid>
		<description><![CDATA[It's time again for a series of Google events in Europe, where you can learn about the newest technologies and have the chance to ask questions to Google engineers. Google Developer Days 2010 will be held in Europe in November according to the following calendar: November 9 - Munich, Germany November 12 - Moscow, Russia [...]]]></description>
			<content:encoded><![CDATA[<p>It's time again for a series of Google events in Europe, where you can learn about the newest technologies and have the chance to ask questions to Google engineers.</p>
<p><a href="http://www.google.com/events/developerday/2010/">Google Developer Days 2010</a> will be held in Europe in November according to the following calendar:</p>
<ul>
<li><a href="http://www.google.com/events/developerday/2010/munich/">November 9 - Munich, Germany</a></li>
<li><a href="http://www.google.com/events/developerday/2010/moscow/">November 12 - Moscow, Russia</a></li>
<li><a href="http://www.google.com/events/developerday/2010/prague/">November 16 - Prague, Czech Republic</a></li>
</ul>
<p>Registration for these three events will open on September 22nd so save the date because the available seats usually run out very quickly!</p>
<p>Next week we'll be also having a different event in Spain, the <a href="http://code.google.com/events/devfests/2010/">Madrid DevFest 2010</a>. Unfortunately, registration for this event is already closed and there's no way to request extra seats, as it is full booked.</p>
<p>I'll be presenting at all these event about the <a href="http://code.google.com/googleapps/">Google Apps APIs</a> and the <a href="http://www.google.com/enterprise/marketplace/">Google Apps Marketplace</a> and I'll be glad to answer your questions on these topics.<br />
Hope to see a lot of you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.claudiocherubino.it/2010/09/16/google-events-in-europe/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Spell checking with F#</title>
		<link>http://www.claudiocherubino.it/2010/01/25/spell-checking-with-f/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=spell-checking-with-f</link>
		<comments>http://www.claudiocherubino.it/2010/01/25/spell-checking-with-f/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 19:00:52 +0000</pubDate>
		<dc:creator>claudio</dc:creator>
				<category><![CDATA[Functional programming]]></category>
		<category><![CDATA[Lavoro]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[f#]]></category>
		<category><![CDATA[fsharp]]></category>
		<category><![CDATA[ioprogrammo]]></category>
		<category><![CDATA[jaro-winkler]]></category>
		<category><![CDATA[programming magazine]]></category>
		<category><![CDATA[similarity]]></category>
		<category><![CDATA[spell checker]]></category>
		<category><![CDATA[wpf]]></category>

		<guid isPermaLink="false">http://www.claudiocherubino.it/?p=681</guid>
		<description><![CDATA[Some months ago I have written an introductory article on F# for the "IoProgrammo" magazine (sorry, Italian only!) and now I have published a second article on the latest issue of the same magazine. This new article covers more advanced topics and is focused on writing a basic spell checker that mixes together the functional [...]]]></description>
			<content:encoded><![CDATA[<p>Some months ago I have written an <a href="http://www.claudiocherubino.it/2009/07/21/f-introductory-article-on-ioprogrammo-magazine/">introductory article</a> on F# for the "<a href="http://www.ioprogrammo.it/">IoProgrammo</a>" magazine (sorry, Italian only!) and now I have published a second article on the latest issue of the same magazine.</p>
<p>This new article covers more advanced topics and is focused on writing a basic spell checker that mixes together the functional and object-oriented programming paradigms. </p>
<p>The spell checking algorithm is implemented in functional F# and is based on the <a href="http://en.wikipedia.org/wiki/Jaro-Winkler_distance">Jaro-Winkler similarity distance</a> while the UI is WPF-based and written with OO code.</p>
<p>I hope you will appreciate the article and I'll be very happy to get any feedback from the readers.</p>
<p><center><div id="attachment_682" class="wp-caption aligncenter" style="width: 229px"><a href="http://www.claudiocherubino.it/wp-content/uploads/2010/01/ioprogrammo_february2010.jpg"><img src="http://www.claudiocherubino.it/wp-content/uploads/2010/01/ioprogrammo_february2010-219x300.jpg" alt="IoProgrammo - February 2010" title="ioprogrammo_february2010" width="219" height="300" class="size-medium wp-image-682" /></a><p class="wp-caption-text">IoProgrammo - February 2010</p></div></center></p>
]]></content:encoded>
			<wfw:commentRss>http://www.claudiocherubino.it/2010/01/25/spell-checking-with-f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby outperforms Python with Project Voldemort</title>
		<link>http://www.claudiocherubino.it/2009/12/04/ruby-outperforms-python-with-project-voldemort/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ruby-outperforms-python-with-project-voldemort</link>
		<comments>http://www.claudiocherubino.it/2009/12/04/ruby-outperforms-python-with-project-voldemort/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 15:24:27 +0000</pubDate>
		<dc:creator>claudio</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[google code]]></category>
		<category><![CDATA[google protocol buffers]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[project voldemort]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.claudiocherubino.it/?p=675</guid>
		<description><![CDATA[If you are performing some statistical analysis on a huge amount of data (try thinking about Twitter data) then the database can become a real bottleneck and that's the reason why the interest on the NoSQL movement is quickly growing. One of the most popular distributed key-value store that tries to overcome this problem is [...]]]></description>
			<content:encoded><![CDATA[<p>If you are performing some statistical analysis on a huge amount of data (try thinking about Twitter data) then the database can become a real bottleneck and that's the reason why the interest on the <a href="http://en.wikipedia.org/wiki/NoSQL">NoSQL</a> movement is quickly growing.</p>
<p>One of the most popular distributed key-value store that tries to overcome this problem is <a href="http://project-voldemort.com/">Project Voldemort</a>, an open-source project based on Amazon Dynamo and sponsored by LinkedIn that uses it for some high-scalability storage problems.</p>
<p>Project Voldemort is written in Java and also provides the developers with C++ and Python client libraries to access the store. One thing that (strangely) was missing is the support for the Ruby language, mainly because of the lack of a stable Google Prototocol Buffers implementation for this language.</p>
<p>There is however a gem called <a href="http://code.google.com/p/ruby-protobuf/">ruby_protobuf</a>, that besides being in alpha release, turned out to be reliable enough for my purpose of porting Project Voldemort Python client library to Ruby.</p>
<p>The library I wrote is called <a href="http://code.google.com/p/voldemort-ruby-client/">voldemort-ruby-client</a> and is now released under the Apache 2.0 License on Google Code, so it is absolutely free for you to experiment with it.</p>
<p>While writing the library I also ported the Python test cases to Ruby and I found the latter to be <strong>3000 times faster</strong> than the former!<br />
Does anybody have a suggestion for the reason of this outstanding improvement?</p>
<p>In my machine the Ruby client performs about 2 millions PUT (or GET) requests per second against the 6 hundreds of the Python client.<br />
Is there anybody else willing to repeat the <a href="http://code.google.com/p/voldemort-ruby-client/source/browse/trunk/test.rb">benchmark</a> on his machine and publish the results?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.claudiocherubino.it/2009/12/04/ruby-outperforms-python-with-project-voldemort/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

