<?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:dc="http://purl.org/dc/elements/1.1/" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>CodeClimber</title><link>http://codeclimber.net.nz/Default.aspx</link><description>Climbing the Cliffs of C#</description><language>en-NZ</language><copyright>Simone Chiaretta</copyright><managingEditor>simone@piyosailing.com</managingEditor><generator>Subtext Version 2.0.0.36</generator><image><link>http://www.codeclimber.net.nz/</link><url>http://www.codeclimber.net.nz/Skins/CodeClimber/Images/codeclimber_50.gif</url><title>CodeClimber</title></image><geo:lat>45.49481143093878</geo:lat><geo:long>9.219868183135986</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Codeclimber" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Server migration to LinkedLabs completed</title><category>Me, Myself &amp; I</category><category>Blogging about Blogging</category><link>http://feedproxy.google.com/~r/Codeclimber/~3/tyh44KfujJ0/server-migration-to-linkedlabs-completed.aspx</link><description>&lt;p&gt;As you might have read yesterday, this weekend I moved my blog from &lt;a href="http://www.webhost4life.com/"&gt;WebHost4Life&lt;/a&gt; to &lt;a href="http://linkedlabs.com/"&gt;LinkedLabs&lt;/a&gt;, the hosting company managed by &lt;a href="http://invalidlogic.com/"&gt;Ken Robertson&lt;/a&gt;, a Senior Software Developer at Tellingent. And if you are reading this post it means the DNS transition is complete.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;I decided to move away from WH4L not because I had performance problems or poor customer support (which IMHO is great), but because I needed to manage and host more websites (small ones), and this was not possible on WH4L without paying a yearly additional fee of 20$ per web application. I used to run these small sites on DotNetNuke, with which you can have just one web application with many different domains, but running, patching, updating an application like DNN for running a few kind-of static websites was overkill for me. With the solution provided by LinkedLabs I can run as many web applications as I need, without paying additional fees: the yearly fee is higher, but with the number of sites I've to run the overall cost will be lower. Another reason is that now I've a more granular control on IIS, I'll have IIS7 and SQL Server 2008, while with WH4L I was still on IIS6 and SQL Server 2000. And the last reason is that the VPS solutions offered by LinkedLabs seem better than the ones offered by WH4L, and as the traffic on my blog grows, I'll eventually have to upgrade to this more powerful solution.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Now I hope the performances and the support of LinkedLabs will be the same of WH4L.&lt;/p&gt;
&lt;p&gt;I'm on a shared hosting, but LinkedLabs is now selling only VPS (I bought the service more than one year ago when he was still selling this solution). You can read about LinkedLabs offering from Ken's website: &lt;a href="http://invalidlogic.com/technology/awesome-virtual-server-hosting/"&gt;Awesome virtual server hosting&lt;/a&gt; &lt;/p&gt;&lt;img src="http://codeclimber.net.nz/aggbug/848.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/CDECLMBR/8AA6CD0CB6A09E8AA9109852CE1CC7A45C7297BE"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/CDECLMBR/8AA6CD0CB6A09E8AA9109852CE1CC7A45C7297BE"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=tyh44KfujJ0:MteIlVedacw:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=tyh44KfujJ0:MteIlVedacw:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=tyh44KfujJ0:MteIlVedacw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=tyh44KfujJ0:MteIlVedacw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=tyh44KfujJ0:MteIlVedacw:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=tyh44KfujJ0:MteIlVedacw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=tyh44KfujJ0:MteIlVedacw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=tyh44KfujJ0:MteIlVedacw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/tyh44KfujJ0" height="1" width="1"/&gt;</description><dc:creator>Simone Chiaretta</dc:creator><guid isPermaLink="false">http://codeclimber.net.nz/archive/2009/11/21/server-migration-to-linkedlabs-completed.aspx</guid><pubDate>Sat, 21 Nov 2009 14:17:09 GMT</pubDate><wfw:comment>http://codeclimber.net.nz/comments/848.aspx</wfw:comment><comments>http://codeclimber.net.nz/archive/2009/11/21/server-migration-to-linkedlabs-completed.aspx#feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/848.aspx</wfw:commentRss><feedburner:origLink>http://codeclimber.net.nz/archive/2009/11/21/server-migration-to-linkedlabs-completed.aspx</feedburner:origLink></item><item><title>5th Italian ALT.NET Conference (winter edition)</title><category>Community Life</category><link>http://feedproxy.google.com/~r/Codeclimber/~3/kJwG0Hanhr0/5th-italian-alt.net-conference-winter-edition.aspx</link><description>&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="GetFile" border="0" alt="GetFile" align="left" src="http://codeclimber.net.nz/images/codeclimber_net_nz/WindowsLiveWriter/5thItalianALT.NETConference_B987/GetFile_3.png" width="100" height="100" /&gt; Keeping the usual half-yearly pace (one in winter and one in summer), the 5th Italian ALT.NET Conference will take in Milano, Saturday January 23rd 2010, kindly hosted by &lt;a href="http://www.avanade.com/it/" target="_blank"&gt;Avanade&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;It will be a openspace conference (like &lt;a href="http://codeclimber.net.nz/archive/2008/02/24/Italian-ALT.NET-miniconf-small-in-size-high-in-value.aspx"&gt;all&lt;/a&gt; &lt;a href="http://codeclimber.net.nz/archive/2008/05/07/Second-Italian-ALT.NET-conference.aspx"&gt;the&lt;/a&gt; &lt;a href="http://codeclimber.net.nz/archive/2009/01/17/the-italian-alt.net-conference-is-here.aspx"&gt;previous&lt;/a&gt; &lt;a href="http://codeclimber.net.nz/archive/2009/05/13/registration-of-the-italian-alt.net-conference-is-open.aspx"&gt;ones&lt;/a&gt;) and this time we will have all the 9th floor of the building: this means we will have rooms for 4 concurrent tracks, and room for more than 100 people.&lt;/p&gt;  &lt;p&gt;We are heading for at least 15 sessions so, if you want to propose something, please do it by sending an email to &lt;a href="mailto:cfp@ugialt.net"&gt;cfp@ugialt.net&lt;/a&gt;. Session in English also are accepted.&lt;/p&gt;  &lt;h3&gt;What we are going to discuss&lt;/h3&gt;  &lt;p&gt;We have &lt;a title="(in Italian)" href="http://ugialt.net/V%20UgiALT.net%20Conference.ashx" target="_blank"&gt;4 session proposal&lt;/a&gt; so far, and other people (also from outside Italy) committed to propose other sessions.&lt;/p&gt;  &lt;p&gt;Topics we are going to discuss are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Distributed Source Control (git, mercurial) &lt;/li&gt;    &lt;li&gt;Relational Databases are still alive despite the NoSql-like databases &lt;/li&gt;    &lt;li&gt;TFS 2010 for Agile &lt;/li&gt;    &lt;li&gt;Domain Validation: how and why &lt;/li&gt;    &lt;li&gt;MonoTouch &lt;/li&gt;    &lt;li&gt;Frontend development best practices (CSS, HTML, JS) &lt;/li&gt;    &lt;li&gt;jQuery &lt;/li&gt;    &lt;li&gt;UI and UX &lt;/li&gt;    &lt;li&gt;a case study of the refactoring for a legacy application &lt;/li&gt;    &lt;li&gt;and more &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Registration&lt;/h3&gt;  &lt;p&gt;The registration will open exactly 2 months before the keynote of the Conference: Monday November 23rd at 10:00AM CET.&lt;/p&gt;  &lt;p&gt;I’ll post an update with the URL for the registration a few days before it opens so that you can be on time and register before it closes.&lt;/p&gt;  &lt;h3&gt;Twittering about the conference&lt;/h3&gt;  &lt;p&gt;And last but not least, the official hashtag if you want to tweet about it is &lt;a href="http://search.twitter.com/search?q=%23ugialtnetconf" target="_blank"&gt;#ugialtnetconf&lt;/a&gt;, and I’ll post update using this tag.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5bc435aa-f0bf-4430-8651-28a5f9eb86bb" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://del.icio.us/popular/ugialtnet" rel="tag"&gt;ugialtnet&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/alt.net" rel="tag"&gt;alt.net&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/conference" rel="tag"&gt;conference&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/846.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/CDECLMBR/D40534E291DB8472930BF7C1FCCAC3AC3140F85F"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/CDECLMBR/D40534E291DB8472930BF7C1FCCAC3AC3140F85F"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=kJwG0Hanhr0:G1ssPr5bSic:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=kJwG0Hanhr0:G1ssPr5bSic:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=kJwG0Hanhr0:G1ssPr5bSic:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=kJwG0Hanhr0:G1ssPr5bSic:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=kJwG0Hanhr0:G1ssPr5bSic:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=kJwG0Hanhr0:G1ssPr5bSic:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=kJwG0Hanhr0:G1ssPr5bSic:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=kJwG0Hanhr0:G1ssPr5bSic:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/kJwG0Hanhr0" height="1" width="1"/&gt;</description><dc:creator>Simone Chiaretta</dc:creator><guid isPermaLink="false">http://codeclimber.net.nz/archive/2009/11/13/5th-italian-alt.net-conference-winter-edition.aspx</guid><pubDate>Fri, 13 Nov 2009 14:04:16 GMT</pubDate><wfw:comment>http://codeclimber.net.nz/comments/846.aspx</wfw:comment><comments>http://codeclimber.net.nz/archive/2009/11/13/5th-italian-alt.net-conference-winter-edition.aspx#feedback</comments><wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/846.aspx</wfw:commentRss><feedburner:origLink>http://codeclimber.net.nz/archive/2009/11/13/5th-italian-alt.net-conference-winter-edition.aspx</feedburner:origLink></item><item><title>Entering my 3rd year at Avanade</title><category>Me, Myself &amp; I</category><link>http://feedproxy.google.com/~r/Codeclimber/~3/ThawUsdz348/entering-my-3rd-year-at-avanade.aspx</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/gadl/269616247/"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" align="right" src="http://farm1.static.flickr.com/97/269616247_106af550e8_m.jpg" /&gt;&lt;/a&gt; On &lt;a href="http://codeclimber.net.nz/archive/2007/11/12/My-first-day-at-Avanade.aspx"&gt;November 12nd, 2007 I started working in Avanade Italy&lt;/a&gt;. And today, November 12nd, 2009, it’s exactly two years I’m working here.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://codeclimber.net.nz/archive/2008/11/11/one-year-at-avanade.aspx"&gt;One year ago I already wrote about my first year&lt;/a&gt;, and this second year didn’t change opinion about the company: it’s a great place to work, with both tech and soft skills training provided, with the CTO caring about technology (something that should happen everywhere but unfortunately never happened in my previous jobs) and with an overall family environment despite being a 400 persons company.&lt;/p&gt;  &lt;p&gt;Unfortunately, due to both the current economic situation and to the general approach to the Internet in Italy, I was not able to do web development since I came over to Avanade Italy. I went on doing team leading as the previous year, and mentoring junior developers on best practices and writing code of quality. Not exactly my favorite kind of job, but still something I like to do. And hopefully “&lt;em&gt;the public internet&lt;/em&gt;” will pick up in Italy as well, and I’ll start doing some web development on B2C sites soon.&lt;/p&gt;  &lt;p&gt;And now, let’s move on to the 3rd year.&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;&lt;em&gt;Picture "&lt;/em&gt;&lt;/font&gt;&lt;a href="http://www.flickr.com/photos/gadl/269616247/" target="_blank"&gt;&lt;font size="1"&gt;&lt;em&gt;Smarties: The Fountain&lt;/em&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt;&lt;em&gt;” by &lt;/em&gt;&lt;/font&gt;&lt;a href="http://www.flickr.com/photos/gadl/" target="_blank"&gt;&lt;font size="1"&gt;&lt;em&gt;gadl&lt;/em&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt;&lt;em&gt; on Flickr&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:16396451-11c1-4900-be0d-c91de3756257" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://del.icio.us/popular/avanade" rel="tag"&gt;avanade&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/career" rel="tag"&gt;career&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/845.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/CDECLMBR/8326CD4516457A6021D674CD631960B7CB6298B2"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/CDECLMBR/8326CD4516457A6021D674CD631960B7CB6298B2"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=ThawUsdz348:O4pfwQRVjTM:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=ThawUsdz348:O4pfwQRVjTM:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=ThawUsdz348:O4pfwQRVjTM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=ThawUsdz348:O4pfwQRVjTM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=ThawUsdz348:O4pfwQRVjTM:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=ThawUsdz348:O4pfwQRVjTM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=ThawUsdz348:O4pfwQRVjTM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=ThawUsdz348:O4pfwQRVjTM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/ThawUsdz348" height="1" width="1"/&gt;</description><dc:creator>Simone Chiaretta</dc:creator><guid isPermaLink="false">http://codeclimber.net.nz/archive/2009/11/12/entering-my-3rd-year-at-avanade.aspx</guid><pubDate>Thu, 12 Nov 2009 09:32:06 GMT</pubDate><wfw:comment>http://codeclimber.net.nz/comments/845.aspx</wfw:comment><comments>http://codeclimber.net.nz/archive/2009/11/12/entering-my-3rd-year-at-avanade.aspx#feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/845.aspx</wfw:commentRss><feedburner:origLink>http://codeclimber.net.nz/archive/2009/11/12/entering-my-3rd-year-at-avanade.aspx</feedburner:origLink></item><item><title>Does Twitter Lists need Twitter Topics?</title><category>Web 2.0</category><category>Blogging about Blogging</category><link>http://feedproxy.google.com/~r/Codeclimber/~3/4BoltFAnOy8/does-twitter-lists-need-twitter-topics.aspx</link><description>&lt;p&gt;Last week &lt;a href="http://blog.twitter.com/2009/10/theres-list-for-that.html" target="_blank"&gt;Twitter pushed&lt;/a&gt; the new feature of &lt;a href="http://blog.twitter.com/2009/09/soon-to-launch-lists.html" target="_blank"&gt;Twitter List&lt;/a&gt; to everyone. But after few days of using it and from comments of other users I’m seeing some fallacies of the feature.&lt;/p&gt;  &lt;p&gt;Here are some of them:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;why am messages from people I follow and are in a list appear twice? &lt;/li&gt;    &lt;li&gt;what is the difference between following someone and following a list he/she is part of? &lt;/li&gt;    &lt;li&gt;if someone did a &lt;a href="http://twitter.com/plastical/asp-net-mvc-community" target="_blank"&gt;“asp-net-mvc” list&lt;/a&gt;, why is he getting also my tweets about my &lt;a href="http://twitter.com/simonech/status/5342431469" target="_blank"&gt;tweets about my trekking&lt;/a&gt;? &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The first is probably a bug that, sooner or later, will be fixed, but the other two are conceptual problems that are not that easy to be fixed.&lt;/p&gt;  &lt;p&gt;My solution is &lt;strong&gt;Twitter Topics&lt;/strong&gt;. And I envision it that way:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Everyone declares the topics he plans to tweet about (I’d probably declare &lt;em&gt;aspnetmvc&lt;/em&gt;, &lt;em&gt;.net&lt;/em&gt;, &lt;em&gt;outdoors&lt;/em&gt; and everything else) &lt;/li&gt;    &lt;li&gt;When a user adds someone to a list he decides which topic he wants to bind to the list &lt;/li&gt;    &lt;li&gt;Each tweet contains a tag with the “official” topic the used announced (or a new metadata could be added to the tweet to avoid stealing useful characters)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I know this sounds a bit complex, and depends too much on users adding a tag for the topic, but I think this is the only way to solve the fallacies I see on Twitter Lists.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;It makes clearer the differences between following someone and adding him in a list (if you want to get all the tweets you follow, otherwise you add to list)&lt;/li&gt;    &lt;li&gt;You get only tweets about the topic of your list.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;And this is not very complex to implement. It can be accomplished by adding a filter in the list, and by asking everyone to list the topics they tweet about.&lt;/p&gt;  &lt;p&gt;Another solution could be filtering on the usual hashtags, but I think that asking to users the tags that are going to use (and on which they want to be filtered on), will make them stick to their tags instead of using different variations (for example #aspnetmvc,#asp.net-mvc, #asp-net-mvc)&lt;/p&gt;  &lt;p&gt;What do you think? Are you using lists? Did you find the same problems I did? What do you think about this possible solution? Please, write your ideas in the comment section below.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f58ed36c-6bf3-4779-b1e6-b1e0a2817b2e" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://del.icio.us/popular/twitter" rel="tag"&gt;twitter&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/list" rel="tag"&gt;list&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/843.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/CDECLMBR/C0A422F29512C410EA3B885FA992292842ADCCA7"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/CDECLMBR/C0A422F29512C410EA3B885FA992292842ADCCA7"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=4BoltFAnOy8:ThFciGdHR-s:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=4BoltFAnOy8:ThFciGdHR-s:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=4BoltFAnOy8:ThFciGdHR-s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=4BoltFAnOy8:ThFciGdHR-s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=4BoltFAnOy8:ThFciGdHR-s:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=4BoltFAnOy8:ThFciGdHR-s:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=4BoltFAnOy8:ThFciGdHR-s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=4BoltFAnOy8:ThFciGdHR-s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/4BoltFAnOy8" height="1" width="1"/&gt;</description><dc:creator>Simone Chiaretta</dc:creator><guid isPermaLink="false">http://codeclimber.net.nz/archive/2009/11/03/does-twitter-lists-need-twitter-topics.aspx</guid><pubDate>Tue, 03 Nov 2009 11:42:00 GMT</pubDate><wfw:comment>http://codeclimber.net.nz/comments/843.aspx</wfw:comment><comments>http://codeclimber.net.nz/archive/2009/11/03/does-twitter-lists-need-twitter-topics.aspx#feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/843.aspx</wfw:commentRss><feedburner:origLink>http://codeclimber.net.nz/archive/2009/11/03/does-twitter-lists-need-twitter-topics.aspx</feedburner:origLink></item><item><title>StackOverflow DevDays in London</title><category>Community Life</category><link>http://feedproxy.google.com/~r/Codeclimber/~3/MqzEJeong3I/stackoverflow-devdays-in-london.aspx</link><description>&lt;p&gt;Last Wednesday I was at the &lt;a href="http://stackoverflow.carsonified.com/events/london/"&gt;StackOverflow DevDays&lt;/a&gt; event in London (and the AltNetBeers afterward), and finally this weekend I was able to collect my thoughts and find the time to write my review.&lt;/p&gt;  &lt;h3 id="in_30_seconds"&gt;In 30 seconds&lt;/h3&gt;  &lt;p&gt;If I had to sum it up one sentence I’d say that DevDays was a quick overview of the “cool” technologies of the moment, all at a pretty basic level. And since I didn’t know most of them if found the event useful and worth the 99€ of the price and the effort to take the plane and come to London.&lt;/p&gt;  &lt;h3 id="if_you_want_more_details"&gt;If you want more details&lt;/h3&gt;  &lt;p&gt;It all started with a pretty entertaining and inspiring talk by &lt;a href="http://www.joelonsoftware.com/"&gt;Joel Spolsky&lt;/a&gt;: whether you like his approach to development or not, you cannot say that this guy cannot speak. His keynote was about simplicity in software applications and definitely left something to think about. &lt;/p&gt;  &lt;h4 id="python"&gt;Python&lt;/h4&gt;  &lt;p&gt;Then came Python, and &lt;a href="http://yeoldeclue.com/blog"&gt;Michael Sparks&lt;/a&gt; explained how the spell check algorithm of Google works: it is done with Python, and it’s just 10 lines (and if 10 was not the correct number, something around that size) of Python code. I didn’t care a lot about Python, and the speech was not that great (partially due to a low volume).&lt;/p&gt;  &lt;h4 id="android"&gt;Android&lt;/h4&gt;  &lt;p&gt;After the break (I headed to a nearby cafè because the queue at the catering was too long) and a sales talk about FogBugz, it came the first of the three overviews of the mobile development SDKs: &lt;strong&gt;Android&lt;/strong&gt;.     &lt;br /&gt;It was definitely boring, more a marketing talk than something to make you (as a developer) want to try and build something for it. This also probably caused by both a blurred screen with small characters and very low volume of the voice coming from &lt;a href="http://blog.radioactiveyak.com/"&gt;Reto Meir&lt;/a&gt; mic.&lt;/p&gt;  &lt;h4 id="jquery"&gt;jQuery&lt;/h4&gt;  &lt;p&gt;The one presented by &lt;a href="http://remysharp.com/"&gt;Remy Sharp&lt;/a&gt; is definitely the best talk of the morning. I already knew jQuery (even if I don’t consider myself an expert), but got a lot from his presentation which was well organized, with a lot of samples, that was both entertaining and rich of contents. It also showed one of the new features of jQuery, the live method. Big thumb up to &lt;a href="http://remysharp.com/"&gt;Remy Sharp&lt;/a&gt;.&lt;/p&gt;  &lt;h4 id="jeff_atwood8217s_talk_good_developers_are_good_communicators"&gt;Jeff Atwood’s talk: good developers are good communicators&lt;/h4&gt;  &lt;p&gt;After lunch we had Joel trying to sell something again: this time it was the hosted version of StackOverflow, &lt;a href="http://stackexchange.com/"&gt;stackexchange.com&lt;/a&gt; and a bunch of new “produces” that StackOverflow is adding. Then a great talk by &lt;a href="http://www.codinghorror.com/blog/"&gt;Jeff Atwood&lt;/a&gt;, about StackOverflow, the reasons behind the project and a inspiring discussion about how being a good writer and communicator makes you a better developer.     &lt;br /&gt;They are exactly the same reasons why I decided to start writing this blog and one of the reasons why I wrote &lt;a href="http://www.amazon.com/gp/product/047043399X?ie=UTF8&amp;amp;tag=codec04-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=047043399X"&gt;my book&lt;/a&gt;: when you have to ask for help on a forum, you want to write a technical blog post or are trying to explain a concept inside a book, you have to think about what you have to communicate and make it clearer into your mind. Otherwise the people that are going to read your question will not understand your problem, or will not understand your idea and thoughts, and the readers of your book will not learn what you wanted to tell them. And all this additional “thinking” will make you understand the problem better, and thus, become a better developer.     &lt;br /&gt;&lt;strong&gt;Probably this was the main takeaway of the day&lt;/strong&gt;.&lt;/p&gt;  &lt;h4 id="iphone"&gt;iPhone&lt;/h4&gt;  &lt;p&gt;The second mobile SDK was the &lt;strong&gt;iPhone&lt;/strong&gt;. I already developed an iPhone application, but the introduction &lt;a href="http://www.levelofindirection.com/"&gt;Phil Nash&lt;/a&gt; did about Objective-C is what I would have wanted when I started developing with the iPhone: explained all the single concepts in a very clear way. And if you didn’t attend, &lt;a href="http://www.levelofindirection.com/journal/2009/10/31/devdays-slides.html"&gt;the slides&lt;/a&gt; are available on his blog.&lt;/p&gt;  &lt;h4 id="jon_skeet_meta_talk"&gt;Jon Skeet meta talk&lt;/h4&gt;  &lt;p&gt;And then &lt;a href="http://msmvps.com/blogs/jon_skeet/"&gt;Jon Skeet&lt;/a&gt; came: together with &lt;a href="http://www.flickr.com/photos/dafydd_ll_rees/4054084898/"&gt;Tony the Pony&lt;/a&gt;, a jr developer that doesn’t know anything about the basic concepts behind numerics, strings and dates manipulation and localization. He reminded us that localization is a very complex topic: you have different charsets, you have Unicode, you have timezones, you have different formats to represent dates with strings. But it’s no point taking everything in consideration if you are developing an intranet or application that will only be used in your country. But remember that there are all these problems that you will have to address if you are going to build an application that is going to be used in countries with different timezone, formats and charsets.&lt;/p&gt;  &lt;h4 id="nokia_qt"&gt;Nokia Qt&lt;/h4&gt;  &lt;p&gt;The third (and last) mobile SDK was Qt of Nokia. It was mostly a marketing talk, but &lt;a href="http://www.linkedin.com/in/pekkak"&gt;Pekka Kosonen&lt;/a&gt; was very amusing. I don’t think I’ll ever have to write an application for a Nokia (I don’t want to get my hands wet with C++ again), but I really liked the way he described the SDK, even if he might have done better with the demos. The &lt;a href="http://www.slideshare.net/pkosonen/qt-for-stack-overflow-developer-conference"&gt;slides are already available online&lt;/a&gt;.&lt;/p&gt;  &lt;h4 id="scripting_languages"&gt;Scripting Languages&lt;/h4&gt;  &lt;p&gt;The “academic” talk was something I didn’t expect much from: but &lt;a href="https://www.cs.tcd.ie/~pbiggar/"&gt;Paul&lt;/a&gt; really beat my expectations. He explained why scripting languages (or better, why script interpreters) suck so badly when it come to performances and that they cannot do nothing to solve the problem because otherwise they would break all the parsers of the given language. And &lt;a href="https://www.cs.tcd.ie/~pbiggar/#so-2009"&gt;the slides are online&lt;/a&gt; as well.&lt;/p&gt;  &lt;h4 id="yahoo_developer_tools"&gt;Yahoo Developer Tools&lt;/h4&gt;  &lt;p&gt;And the last talk was about the Yahoo Developer Tools: the &lt;a href="http://www.wait-till-i.com/"&gt;Christian Heilmann&lt;/a&gt; (actually I think he is heavy-metal rock star from the ’80s rather then a developer) explained about the YUI CSS and then he showed &lt;a href="http://developer.yahoo.com/yql/"&gt;YQL&lt;/a&gt; in action: and &lt;strong&gt;YQL is the second great takeaway&lt;/strong&gt; of the day. I never used it, actually I even never heard about it before, but seems to be a great way to build serverside mashups, by querying various APIs (Flickr, Google, Yahoo, Facebook, Twitter) and even screenscraping “normal” HTML pages. And his &lt;a href="http://www.wait-till-i.com/2009/10/28/stackoverflow-devdays-my-slide-deck/"&gt;slides&lt;/a&gt; and &lt;a href="http://www.wait-till-i.com/2009/10/29/yqlautotagger-automatic-tag-generation-with-a-single-line-of-javascript/"&gt;demo&lt;/a&gt; are available online.&lt;/p&gt;  &lt;h3 id="the_organization"&gt;The organization&lt;/h3&gt;  &lt;p&gt;Let’s talk a bit about the venue, the organization and the side-services.   &lt;br /&gt;The venue was big enough for everybody, but the audio/video system had some problems: the screen was a bit blurry and the audio, especially the one from the speaking position on the left, was too low. Then there was the catering: once you got to it, it was great (Lasagne FTW!), but there was only one desk, and it took the full one hour lunch break to serve everybody. Maybe, next time, have two or three serving desks instead of one.&lt;/p&gt;  &lt;p&gt;And one last big win for this event, and probably &lt;a href="http://www.joelonsoftware.com/items/2009/10/08.html" target="_blank"&gt;unexpected also for the organizers&lt;/a&gt;, is the WiFi: it worked all the day, with 900 people connected in the same room, with just a few reconnects needed. Too bad the batteries of my iPhone died before the end of the conference.&lt;/p&gt;  &lt;h3 id="wrapping_up"&gt;Wrapping up&lt;/h3&gt;  &lt;p&gt;Collecting my thoughts:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Memorable      &lt;ul&gt;       &lt;li&gt;Jeff Atwood’s talk about social skill for developers &lt;/li&gt;        &lt;li&gt;YQL &lt;/li&gt;        &lt;li&gt;Scripting Languages &lt;/li&gt;        &lt;li&gt;Jon Skeet&lt;/li&gt;        &lt;li&gt;WiFi&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Neutral      &lt;ul&gt;       &lt;li&gt;jQuery &lt;/li&gt;        &lt;li&gt;iPhone &lt;/li&gt;        &lt;li&gt;Nokia Qt &lt;/li&gt;        &lt;li&gt;KeyNote &lt;/li&gt;        &lt;li&gt;Venue &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Bad      &lt;ul&gt;       &lt;li&gt;Android &lt;/li&gt;        &lt;li&gt;Python &lt;/li&gt;        &lt;li&gt;Joel’s sales talks &lt;/li&gt;        &lt;li&gt;Lunch/Catering &lt;/li&gt;        &lt;li&gt;Audio/Video &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Not everything was good, but I had some topics that I consider worth studying more (YQL for sure). And if they keep the same price, I’ll definitely come again next year.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:26faa4ba-9666-411d-81f5-0eab31ba27f1" class="wlWriterSmartContent"&gt;Tags: &lt;a href="http://del.icio.us/popular/devdays" rel="tag"&gt;devdavs&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/stackoverflow" rel="tag"&gt;stackoverflow&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/842.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/CDECLMBR/7D7BF61784F41E5E30F5985784BD7A2BDB2D4659"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/CDECLMBR/7D7BF61784F41E5E30F5985784BD7A2BDB2D4659"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=MqzEJeong3I:AbTYuNl7Qwk:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=MqzEJeong3I:AbTYuNl7Qwk:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=MqzEJeong3I:AbTYuNl7Qwk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=MqzEJeong3I:AbTYuNl7Qwk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=MqzEJeong3I:AbTYuNl7Qwk:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=MqzEJeong3I:AbTYuNl7Qwk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=MqzEJeong3I:AbTYuNl7Qwk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=MqzEJeong3I:AbTYuNl7Qwk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/MqzEJeong3I" height="1" width="1"/&gt;</description><dc:creator>Simone Chiaretta</dc:creator><guid isPermaLink="false">http://codeclimber.net.nz/archive/2009/11/01/stackoverflow-devdays-in-london.aspx</guid><pubDate>Sun, 01 Nov 2009 22:03:29 GMT</pubDate><wfw:comment>http://codeclimber.net.nz/comments/842.aspx</wfw:comment><comments>http://codeclimber.net.nz/archive/2009/11/01/stackoverflow-devdays-in-london.aspx#feedback</comments><wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/842.aspx</wfw:commentRss><feedburner:origLink>http://codeclimber.net.nz/archive/2009/11/01/stackoverflow-devdays-in-london.aspx</feedburner:origLink></item><item><title>12 ASP.NET MVC Best Practices</title><category>Software Development</category><category>Community Life</category><category>ASP.NET</category><link>http://feedproxy.google.com/~r/Codeclimber/~3/wklegqg4Fi4/12-asp.net-mvc-best-practices.aspx</link><description>&lt;p&gt;&lt;a href="http://codeclimber.net.nz/archive/2009/09/24/speaking-in-rome-at-the-gladiators-fest-about-asp.net-mvc.aspx"&gt;Last week I held two presentations&lt;/a&gt; about ASP.NET MVC for the new-born &lt;a href="http://www.dotnetromacesta.org/" target="_blank"&gt;DotNetRomaCeStà user group&lt;/a&gt; in Rome. And one of them was about what I consider to be ASP.NET MVC Best Practices. The presentation was in Italian so I decided to translate my &lt;a href="http://codeclimber.googlecode.com/svn/CommunityTalks/October%2009%20-%20DotNetRomaCesta/ASPNET%20MVC%20Framework%20-%20Best%20Practices%20-%20ENG.pptx" target="_blank"&gt;slide&lt;/a&gt; in English so that everybody can read them.&lt;/p&gt;  &lt;h3&gt;Controller’s best practices&lt;/h3&gt;  &lt;h4&gt;1 – Delete the AccountController&lt;/h4&gt;  &lt;p&gt;You will never use it and it’s a super-bad practice to keep demo code in your applications.&lt;/p&gt;  &lt;h4&gt;2 – Isolate Controllers from the outside World&lt;/h4&gt;  &lt;p&gt;Dependencies on the HttpContext, on data access classes, configuration, logging, clock, etc… make the application difficult (if not impossible) to test, to evolve and modify.&lt;/p&gt;  &lt;h4&gt;3 – Use an IoC Container&lt;/h4&gt;  &lt;p&gt;To make it easy to adhere to Best Practice #2, use an IoC Container to manage all that external dependencies. &lt;a href="http://codeclimber.net.nz/archive/2009/10/15/my-asp.net-mvc-stack-and-why-i-chosen-it.aspx"&gt;I use&lt;/a&gt; &lt;a href="http://codeclimber.net.nz/archive/2009/08/10/how-to-use-ninject-2-with-asp.net-mvc.aspx"&gt;Ninject v2&lt;/a&gt;, but there are many around, and &lt;a href="http://odetocode.com/Blogs/scott/archive/2009/10/19/mvc-2-areas-and-containers.aspx" target="_blank"&gt;it’s easy to build your own&lt;/a&gt; if needed.&lt;/p&gt;  &lt;h4&gt;4 – Say NO to “magic strings”&lt;/h4&gt;  &lt;p&gt;Never use &lt;font face="Courier New"&gt;&lt;strong&gt;ViewData[“key”]&lt;/strong&gt;&lt;/font&gt;, but always create a ViewModel per each View, and use strongly-typed views &lt;font size="2" face="Courier New"&gt;&lt;strong&gt;ViewPage&amp;lt;ViewModel&amp;gt;&lt;/strong&gt;&lt;/font&gt;.&lt;/p&gt;  &lt;p&gt;Magic strings are evil because they will never tell you whether your view is failing due to a misspelling error, while using a strongly-typed model you will get a compile-time error when there is a problem. And as bonus you get Intellisense.&lt;/p&gt;  &lt;h4&gt;5 – Build your own “personal conventions”&lt;/h4&gt;  &lt;p&gt;Use ASP.NET MVC as a base for your (or your company’s) reference architecture. Enforce your own conventions having controllers and maybe views inherit from your own base classes rather then the default ones.&lt;/p&gt;  &lt;h4&gt;6 – Pay attention to the Verbs&lt;/h4&gt;  &lt;p&gt;Even without going REST (just RESTful) use the best Http Verb for each action. Adopt the &lt;a href="http://blog.eworldui.net/post/2008/05/ASPNET-MVC---Using-Post2c-Redirect2c-Get-Pattern.aspx" target="_blank"&gt;PRG Pattern (Post-Redirect-Get)&lt;/a&gt;: show data with GET, modify data with POST.&lt;/p&gt;  &lt;h3&gt;Model’s Best Practices&lt;/h3&gt;  &lt;h4&gt;7 – DomainModel != ViewModel&lt;/h4&gt;  &lt;p&gt;The DomainModel represents the domain, while the ViewModel is designed around the needs of the View, and these two worlds might be (and usually are) different. Furthermore the DomainModel is data plus behaviours, is hierarchical and is made of complex types, while the ViewModel is just a DTO, flat, and made of strings. To remove the tedious and error-prone object-mapping code, you can use &lt;a href="http://www.codeplex.com/AutoMapper" target="_blank"&gt;AutoMapper&lt;/a&gt;. For a nice overview of the various options I recommend you read: &lt;a href="http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx" target="_blank"&gt;ASP.NET MVC View Model Patterns&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;8 – Use ActionFilters for “shared” data&lt;/h4&gt;  &lt;p&gt;This is my solution for the componentization story of ASP.NET MVC, and might need a future post of its own. You don’t want your controllers to retrieve data that is shared among different views. My approach is to use the Action Filters to retrieve the data that needs to be shared across many views, and use partial view to display them.&lt;/p&gt;  &lt;h3&gt;View’s Best Practices&lt;/h3&gt;  &lt;h4&gt;9 – Do NEVER user code-behind&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;NEVER&lt;/strong&gt;&lt;/p&gt;  &lt;h4&gt;10 – Write HTML each time you can&lt;/h4&gt;  &lt;p&gt;I have the option that web developers have to be comfortable writing HTML (and CSS and JavaScript). So they should never use the HtmlHelpers whose only reason of living is hiding the HTML away (like &lt;font face="Courier New"&gt;&lt;strong&gt;Html.Submit&lt;/strong&gt;&lt;/font&gt; or &lt;font face="Courier New"&gt;&lt;strong&gt;Html.Button&lt;/strong&gt;&lt;/font&gt;). Again, this is something that might become a future post.&lt;/p&gt;  &lt;h4&gt;11 - If there is an if, write an HtmlHelper&lt;/h4&gt;  &lt;p&gt;Views must be dumb (and Controllers skinny and Models fat). If you find yourself writing an “&lt;em&gt;if&lt;/em&gt;”, then consider writing an HtmlHelper to hide the conditional statement.&lt;/p&gt;  &lt;h4&gt;12 – Choose your view engine carefully&lt;/h4&gt;  &lt;p&gt;The default view engine is the WebFormViewEngine, but IMHO it’s NOT the best one. &lt;a href="http://codeclimber.net.nz/archive/2009/10/15/my-asp.net-mvc-stack-and-why-i-chosen-it.aspx"&gt;I prefer to use&lt;/a&gt; the &lt;a href="http://sparkviewengine.com/" target="_blank"&gt;Spark ViewEngine&lt;/a&gt;, since it seems to me like it’s more suited for an MVC view. What I like about it is that the HTML &lt;em&gt;“dominates the flow and that code should fit seamlessly”&lt;/em&gt; and the foreach loops and if statements are defined with “HTML attributes”.&lt;/p&gt;  &lt;h3&gt;Download the slides and demo&lt;/h3&gt;  &lt;p&gt;Both the &lt;a href="http://codeclimber.googlecode.com/svn/CommunityTalks/October%2009%20-%20DotNetRomaCesta/ASPNET%20MVC%20Framework%20-%20Best%20Practices%20-%20ENG.pptx" target="_blank"&gt;slides&lt;/a&gt; and the &lt;a href="http://codeclimber.googlecode.com/svn/CommunityTalks/October%2009%20-%20DotNetRomaCesta/BestPractice-Demo.zip" target="_blank"&gt;demo code&lt;/a&gt; are available for download. Or watch it here:&lt;/p&gt;  &lt;div style="text-align: center"&gt;   &lt;div style="text-align: left; width: 425px" id="__ss_2361304"&gt;&lt;a style="margin: 12px 0px 3px; display: block; font: 14px helvetica,arial,sans-serif; text-decoration: underline" title="ASP.NET MVC Best Practices" href="http://www.slideshare.net/simonech/aspnet-mvc-best-practices"&gt;ASP.NET MVC Best Practices&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aspnetmvcframework-bestpractices-eng-091027173619-phpapp01&amp;amp;stripped_title=aspnet-mvc-best-practices" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aspnetmvcframework-bestpractices-eng-091027173619-phpapp01&amp;amp;stripped_title=aspnet-mvc-best-practices" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" /&gt;&lt;/object&gt;      &lt;div style="font-family: tahoma,arial; height: 26px; font-size: 11px; padding-top: 2px"&gt;View more &lt;a style="text-decoration: underline" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration: underline" href="http://www.slideshare.net/simonech"&gt;simonech&lt;/a&gt;.&lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;h3&gt;Which other Best Practices would you suggest?&lt;/h3&gt;  &lt;p&gt;The 12 above are what I consider basic practices that everyone building ASP.NET MVC applications should adopt. Do you think there are other must-have practices for developers building ASP.NET MVC applications? Please say it in the comment section below.&lt;/p&gt;  &lt;p&gt;One last note: in May &lt;a href="http://serialseb.blogspot.com/" rel="met colleague acquiantance" target="_blank"&gt;Sebastien Lambla&lt;/a&gt; had a talk about &lt;a href="http://serialseb.blogspot.com/2009/05/my-mvc-best-practices-talk.html" target="_blank"&gt;his ASP.NET MVC Best Practices&lt;/a&gt; for the &lt;a href="http://edgeug.net/" target="_blank"&gt;VistaSquad user group&lt;/a&gt; in London. His talk was very inspiring and stuck into my mind, and it inspired both my ASP.NET MVC projects and my talk as well. So I want to give credit to &lt;a href="http://serialseb.blogspot.com/" target="_blank"&gt;Sebastien&lt;/a&gt;’s &lt;a href="http://serialseb.blogspot.com/2009/05/my-mvc-best-practices-talk.html" target="_blank"&gt;talk&lt;/a&gt; for having inspired me, and that talk. If you are interested you can download &lt;a href="http://developerdayscotland.com/sessions/09-SebastienLambla/mvc-bestpractices.pdf" target="_blank"&gt;his slides&lt;/a&gt; from the Developers Developers Developers event in Scotland.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:26faa4ba-9666-411d-81f5-0eab31ba27f1" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://del.icio.us/popular/aspnetmvc" rel="tag"&gt;aspnetmvc&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/presentation" rel="tag"&gt;presentation&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/talk" rel="tag"&gt;talk&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/dotnetromacesta" rel="tag"&gt;dotnetromacesta&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/841.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/CDECLMBR/3CA79D4CD9F0B9508315AB167B5C218DA69EFB40"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/CDECLMBR/3CA79D4CD9F0B9508315AB167B5C218DA69EFB40"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=wklegqg4Fi4:CjKehkGhhAs:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=wklegqg4Fi4:CjKehkGhhAs:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=wklegqg4Fi4:CjKehkGhhAs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=wklegqg4Fi4:CjKehkGhhAs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=wklegqg4Fi4:CjKehkGhhAs:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=wklegqg4Fi4:CjKehkGhhAs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=wklegqg4Fi4:CjKehkGhhAs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=wklegqg4Fi4:CjKehkGhhAs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/wklegqg4Fi4" height="1" width="1"/&gt;</description><dc:creator>Simone Chiaretta</dc:creator><guid isPermaLink="false">http://codeclimber.net.nz/archive/2009/10/27/12-asp.net-mvc-best-practices.aspx</guid><pubDate>Tue, 27 Oct 2009 22:38:02 GMT</pubDate><wfw:comment>http://codeclimber.net.nz/comments/841.aspx</wfw:comment><comments>http://codeclimber.net.nz/archive/2009/10/27/12-asp.net-mvc-best-practices.aspx#feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/841.aspx</wfw:commentRss><feedburner:origLink>http://codeclimber.net.nz/archive/2009/10/27/12-asp.net-mvc-best-practices.aspx</feedburner:origLink></item><item><title>10 resources to learn Moq</title><category>Software Development</category><link>http://feedproxy.google.com/~r/Codeclimber/~3/lydKxRDdqhM/10-resources-to-learn-moq.aspx</link><description>&lt;p&gt;Last week &lt;a href="http://codeclimber.net.nz/archive/2009/10/15/my-asp.net-mvc-stack-and-why-i-chosen-it.aspx"&gt;I described the stack I’ll be using to develop my new ASP.NET MVC project&lt;/a&gt;, and I said I was going to use RhinoMocks as mocking framework. Well, it later turned out that some tests were using RhinoMocks but most of them were using Moq and “&lt;a href="http://twitter.com/ripamount/" rel="co-worker friend met" target="_blank"&gt;Il Maestro&lt;/a&gt;” decided that the latter would be the mocking framework of choice. I never used it, so I started looking for some documentation online. And here I’m listing the best 11 links about Moq.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://code.google.com/p/moq/" href="http://code.google.com/p/moq/"&gt;http://code.google.com/p/moq/&lt;/a&gt; – obviously, the starting point of it all. Download the binary, source and everything official about Moq&lt;/li&gt;    &lt;li&gt;&lt;a title="http://code.google.com/p/moq/wiki/QuickStart" href="http://code.google.com/p/moq/wiki/QuickStart"&gt;http://code.google.com/p/moq/wiki/QuickStart&lt;/a&gt; – the official quickstart. “&lt;a href="http://twitter.com/emadb/statuses/5094548767" target="_blank"&gt;emadb&lt;/a&gt; @simonech Moq is so easy and stylish that all what you need is here”&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.clariusconsulting.net/labs/moq/index.html" target="_blank"&gt;MSDN style API&lt;/a&gt; – available both online and as chm file in the download package&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codethinked.com/post/2009/03/08/Beginning-Mocking-With-Moq-3-Part-1.aspx" target="_blank"&gt;Beginning Mocking With Moq 3&lt;/a&gt; by &lt;a href="http://www.codethinked.com" rel="friend colleague met" target="_blank"&gt;Justin Etheredge&lt;/a&gt; – a great 4 parts tutorial on how to get started with Moq version 3 (ok, now it’s at version 4 beta, but most of the concepts still apply) (&lt;a href="http://www.codethinked.com/post/2009/03/08/Beginning-Mocking-With-Moq-3-Part-1.aspx" target="_blank"&gt;Part 1&lt;/a&gt;, &lt;a href="http://www.codethinked.com/post/2009/03/13/Beginning-Mocking-With-Moq-3-Part-2.aspx" target="_blank"&gt;Part 2&lt;/a&gt;, &lt;a href="http://www.codethinked.com/post/2009/03/13/Beginning-Mocking-With-Moq-3-Part-3.aspx" target="_blank"&gt;Part 3&lt;/a&gt; and &lt;a href="http://www.codethinked.com/post/2009/03/31/Beginning-Mocking-With-Moq-3-Part-4.aspx" target="_blank"&gt;Part 4&lt;/a&gt;)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://stephenwalther.com/blog/archive/2008/06/12/tdd-introduction-to-moq.aspx" target="_blank"&gt;TDD : Introduction to Moq&lt;/a&gt; – Very nice and comprehensive introduction on doing TDD with Moq&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.dimecasts.net/Casts/CastDetails/8" target="_blank"&gt;Introduction to Mocking with Moq screencast&lt;/a&gt; – One of the first screencasts published on DimeCasts, is a nice and quick overview of how to get started with Moq, by &lt;a href="http://devlicio.us/blogs/Derik_whittaker/" target="_blank"&gt;Derik Whittaker&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2007/12/18/LinqtoMockMoqisborn.aspx" target="_blank"&gt;Linq to Mock: MoQ is born&lt;/a&gt; – The official announcement of the first version of Moq.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2009/08/13/164978.aspx" target="_blank"&gt;Linq to Mocks is finally born&lt;/a&gt; – nice new feature of Moq 4 (still beta), that allows to setup a mock using Linq.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2007/12/21/47152.aspx" target="_blank"&gt;Mocks, Stubs and Fakes: it's a continuum&lt;/a&gt; – Daniel Cazzulino’s take on the differences between Mocks, Stubs and Fakes&lt;/li&gt;    &lt;li&gt;...&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As you see there are only 9 links in the list: which other link would you recommend as 10th link?&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e83fdae5-3a1c-4309-b986-2dd524b9a48b" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://del.icio.us/popular/moq" rel="tag"&gt;moq&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/mocks" rel="tag"&gt;mocks&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/TDD" rel="tag"&gt;TDD&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/840.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/CDECLMBR/C057E5C55BE66FD3C6B63FA745D13C8768E2FC46"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/CDECLMBR/C057E5C55BE66FD3C6B63FA745D13C8768E2FC46"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=lydKxRDdqhM:VFhZIqlvdQs:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=lydKxRDdqhM:VFhZIqlvdQs:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=lydKxRDdqhM:VFhZIqlvdQs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=lydKxRDdqhM:VFhZIqlvdQs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=lydKxRDdqhM:VFhZIqlvdQs:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=lydKxRDdqhM:VFhZIqlvdQs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=lydKxRDdqhM:VFhZIqlvdQs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=lydKxRDdqhM:VFhZIqlvdQs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/lydKxRDdqhM" height="1" width="1"/&gt;</description><dc:creator>Simone Chiaretta</dc:creator><guid isPermaLink="false">http://codeclimber.net.nz/archive/2009/10/23/10-resources-to-learn-moq.aspx</guid><pubDate>Fri, 23 Oct 2009 13:55:33 GMT</pubDate><wfw:comment>http://codeclimber.net.nz/comments/840.aspx</wfw:comment><comments>http://codeclimber.net.nz/archive/2009/10/23/10-resources-to-learn-moq.aspx#feedback</comments><wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/840.aspx</wfw:commentRss><feedburner:origLink>http://codeclimber.net.nz/archive/2009/10/23/10-resources-to-learn-moq.aspx</feedburner:origLink></item><item><title>31 Days of Refactoring eBook</title><category>Community Life</category><category>Software Development</category><link>http://feedproxy.google.com/~r/Codeclimber/~3/BNhLv4QKLxQ/31-days-of-refactoring-ebook.aspx</link><description>&lt;p&gt;This August, &lt;a href="http://www.lostechies.com/blogs/sean_chambers/default.aspx" target="_blank"&gt;Sean Chambers&lt;/a&gt;, blogger on &lt;a href="http://www.lostechies.com/" target="_blank"&gt;Los Techies&lt;/a&gt;, wrote an awesome series of posts, called &lt;a href="http://www.lostechies.com/blogs/sean_chambers/archive/2009/07/31/31-days-of-refactoring.aspx" target="_blank"&gt;31 Days of Refactoring&lt;/a&gt;, during which he wrote one post per day, describing one refactoring technique.&lt;/p&gt;  &lt;p&gt;In August I was on holiday, and I never had time to read the 31 posts, so last week I decided to create a easy to read version of the series, and I assembled a eBook, putting together all the posts, doing some minor edits, and applying some formatting. And I sent it over to Sean so that he could share it with all his readers.&lt;/p&gt;  &lt;p&gt;You can read &lt;a href="http://www.lostechies.com/blogs/sean_chambers/archive/2009/10/20/31-days-of-refactoring-ebook.aspx" target="_blank"&gt;Sean’s announcement&lt;/a&gt; or directly &lt;a href="http://www.lostechies.com/media/p/27197/download.aspx"&gt;download the 31 Days of Refactoring eBook&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Hope you like it.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5ee91f57-8025-4a78-bb9f-b11447572195" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://del.icio.us/popular/refactoring" rel="tag"&gt;refactoring&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/ebook" rel="tag"&gt;ebook&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/838.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/CDECLMBR/FB472E3A469C8D14CEE90B20FFFB1ACB2817C6FA"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/CDECLMBR/FB472E3A469C8D14CEE90B20FFFB1ACB2817C6FA"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=BNhLv4QKLxQ:F4muB-0v24g:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=BNhLv4QKLxQ:F4muB-0v24g:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=BNhLv4QKLxQ:F4muB-0v24g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=BNhLv4QKLxQ:F4muB-0v24g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=BNhLv4QKLxQ:F4muB-0v24g:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=BNhLv4QKLxQ:F4muB-0v24g:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=BNhLv4QKLxQ:F4muB-0v24g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=BNhLv4QKLxQ:F4muB-0v24g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/BNhLv4QKLxQ" height="1" width="1"/&gt;</description><dc:creator>Simone Chiaretta</dc:creator><guid isPermaLink="false">http://codeclimber.net.nz/archive/2009/10/22/31-days-of-refactoring-ebook.aspx</guid><pubDate>Thu, 22 Oct 2009 07:49:58 GMT</pubDate><wfw:comment>http://codeclimber.net.nz/comments/838.aspx</wfw:comment><comments>http://codeclimber.net.nz/archive/2009/10/22/31-days-of-refactoring-ebook.aspx#feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/838.aspx</wfw:commentRss><feedburner:origLink>http://codeclimber.net.nz/archive/2009/10/22/31-days-of-refactoring-ebook.aspx</feedburner:origLink></item><item><title>My ASP.NET MVC stack and why I chose it</title><category>Software Development</category><link>http://feedproxy.google.com/~r/Codeclimber/~3/YTldHzHxzh4/my-asp.net-mvc-stack-and-why-i-chosen-it.aspx</link><description>&lt;p&gt;In my current project I'm starting to develop a new web application using ASP.NET MVC and given all the environmental conditions, choosing the stack, from the tools to the libraries was not an easy task. I had to come to a few compromise to cope with all the different "forces" involved, so I though it would have been a good idea to share my reasoning and the final decision to show an example how an architect that works in "normal" company (as opposed to HeadSpring and such kind of on-the-edge companies) has to balance between what is the best possible option (but sometimes not feasible) and what is the option that is good enough but feasible.&lt;/p&gt;  &lt;h3&gt;The facts&lt;/h3&gt;  &lt;p&gt;In order to understand the decision is important to understand what the application is and how (and by who) it is going to be developed.    &lt;br /&gt;Without going into the details, the application is mainly a dashboard that manages and monitors the performances and health of an application server. What it will do is retrieve data from the main application server (either via reading the "main" DB or by calling some web service), visualize them in an easy to read and understand manner, and do some quick maintenance and management of the system like restarting, stopping and changing some of the configuration parameter.     &lt;br /&gt;Another important fact is the team that will be developing the application: it will be me and a few junior developers with a 1-2 years of experience of developing in .NET and very little (if not nil) in developing web applications.     &lt;br /&gt;And finally, the main application is a mix of Java, .NET and COBOL and the team already has source control and a kind of build server that performs nightly builds and deploys to a test environment.&lt;/p&gt;  &lt;h3&gt;The stack&lt;/h3&gt;  &lt;p&gt;Now that I made the environment clear, let's review the stack and why I choose each piece of it. Starting from the tools.&lt;/p&gt;  &lt;h4&gt;Tools&lt;/h4&gt;  &lt;h5&gt;Visual Studio 2008 + Resharper&lt;/h5&gt;  &lt;p&gt;That was kind of an obvious choice: we are building the software with ASP.NET MVC, the .NET 3.5 and I'll try to introduce the team to a more agile way of developing software, so &lt;a href="http://www.jetbrains.com/resharper/index.html" target="_blank"&gt;ReSharper&lt;/a&gt;, with all the refactoring tools, will make the life easier.&lt;/p&gt;  &lt;h5&gt;SubVersion&lt;/h5&gt;  &lt;p&gt;As I said, the IT of the client already has a source control system in place, and it is Subversion, so we'll go with it. &lt;/p&gt;  &lt;h5&gt;Maven/&lt;a href="https://hudson.dev.java.net/" target="_blank"&gt;Hudson&lt;/a&gt;&lt;/h5&gt;  &lt;p&gt;The client's team is mainly a Java oriented team, so they setup all the build server using java tools: they used Maven to build the projects and used Hudson to schedule the builds. I always used NAnt, MsBuild, TFS and CC.NET but since they already had all this place, I had to go with that. But it turned out to be a good thing: &lt;a href="http://stackoverflow.com/questions/616149/how-and-why-do-i-set-up-a-c-build-machine/616230#616230" target="_blank"&gt;it seems like Hudson is probably the best CI server out there at the moment&lt;/a&gt;, and also has a &lt;a href="http://redsolo.blogspot.com/2008/04/guide-to-building-net-projects-using.html" target="_blank"&gt;lot of .NET related plugins&lt;/a&gt;. So this is turning out to be an opportunity to learn a new thing. &lt;/p&gt;  &lt;h4&gt;The libraries&lt;/h4&gt;  &lt;p&gt;Let's see something probably more interesting: the libraries used. &lt;/p&gt;  &lt;h5&gt;ASP.NET MVC 1.0&lt;/h5&gt;  &lt;p&gt;I don't think I'll ever go back to starting a new web project using Webforms (unless forced to). But even without my love for the framework I probably would have chosen ASP.NET MVC anyway. A dashboard is the kind of application ASP.NET MVC shines in: very little editing of data, and a lot of data rendering, visualization and ajax things. For that reasons I decided to stay with the released version 1.0 instead of going with v2 Preview 2: I don't have many pages and I don't need to separated the controllers and views into areas, and I don't have so many editing forms to need the &lt;a href="http://haacked.com/archive/2009/08/04/default-templated-views.aspx"&gt;Templated Helpers&lt;/a&gt; and the integrated &lt;a href="http://codingndesign.com/blog/?p=76"&gt;ModelValidation&lt;/a&gt;. &lt;/p&gt;  &lt;h5&gt;Custom Data Repository with Linq2Sql&lt;/h5&gt;  &lt;p&gt;As said, there is not a lot of editing to do. Furthermore the dashboard is going to connect to a legacy database, designed in a really (and I mean really really) strange way, and unfortunately I've no jurisdiction over it. So custom repository with manual mapping is the way I decided to go. Furthermore the developers in the team are not familiar with an ORM. Actually they are not familiar with IoC, MVC, HTML+Javascript and writing tests neither. I didn't want to flood them with all that many technologies and practices all together. So I thought that ORM was the one I could skip for that project. &lt;/p&gt;  &lt;h5&gt;&lt;a href="http://entlib.codeplex.com/" target="_blank"&gt;Enterprise Library&lt;/a&gt; and &lt;a href="http://unity.codeplex.com/" target="_blank"&gt;Unity&lt;/a&gt;&lt;/h5&gt;  &lt;p&gt;I always used &lt;a href="http://ninject.org/"&gt;Ninject&lt;/a&gt; for IoC, and &lt;a href="http://code.google.com/p/elmah/"&gt;Elmah&lt;/a&gt; for the logging, but &lt;a href="http://www.avanade.com/entlib/"&gt;Avanade&lt;/a&gt; is the company that wrote the first version of the Enterprise Library and it's part of the internal development framework. But after all the EnterpriseLibrary is not that bad, and this way I have the chance to play around with Unity and maybe find a way to study the validation application block in order to make a client side validation provider on top of it. &lt;/p&gt;  &lt;h5&gt;&lt;a href="http://www.codeplex.com/AutoMapper" target="_blank"&gt;AutoMapper&lt;/a&gt;&lt;/h5&gt;  &lt;p&gt;Even if we won't have a lot of entities to deal with, AutoMapper will save us from writing boring mapping code. And will help the team to understand better the importance of having a model specific to each view and to keep the domain model separated by the view model. &lt;/p&gt;  &lt;h5&gt;&lt;a href="http://sparkviewengine.com/" target="_blank"&gt;Spark&lt;/a&gt;&lt;/h5&gt;  &lt;p&gt;WebForm View Engine holds too many connections with the WebForm's world so I don't like using it. Furthermore the developers of the team are not familiar with ASP.NET and very little with HTML/CSS, so I thought that Spark is a better solution since it is pure HTML with little customization compared to WebForm. And finally it will prevent developers from breaking the pattern including server controls with data logic in them. &lt;/p&gt;  &lt;h5&gt;&lt;a href="http://jquery.com/" target="_blank"&gt;jQuery&lt;/a&gt;&lt;/h5&gt;  &lt;p&gt;There was a bit of talking about whether using ASP.NET Ajax or jQuery, but at the end we opted for the latter. The reasons for this decision are various: we are using Spark instead of the WebForms ViewEngine, jQuery has a much bigger "add-on" ecosystem and in particular it has the jqGrid which by itself justifies the adoption of jQuery, and then the guys of the team heard about it and wanted to learn more about it. &lt;/p&gt;  &lt;h5&gt;&lt;a href="http://jqueryui.com/" target="_blank"&gt;jQuery UI&lt;/a&gt;&lt;/h5&gt;  &lt;p&gt;Tabs, datatime pickers, modal dialogs are all part of the Ajax Control Toolkit, but what the jQuery UI has is the unified theme: with just one line of configuration all your UI controls will look the same. And since we choose for jQuery, the ACT has never really been an option. &lt;/p&gt;  &lt;h5&gt;&lt;a href="http://www.trirand.com/blog/" target="_blank"&gt;jqGrid&lt;/a&gt;&lt;/h5&gt;  &lt;p&gt;We have to implement a few grids that need to support sorting and paging: I already used this plugin before, and it's both easy to setup and very powerful. You can browse some &lt;a href="http://trirand.com/jqgrid/jqgrid.html" target="_blank"&gt;samples and the documentation here&lt;/a&gt;.&lt;/p&gt;  &lt;h5&gt;&lt;a href="http://xval.codeplex.com/" target="_blank"&gt;xVal&lt;/a&gt;&lt;/h5&gt;  &lt;p&gt;We won't have many complex editing screens, just a one or two, but xVal is really easy to implement and I think it's worth adding it even if there is just one field to validate. &lt;/p&gt;  &lt;h4&gt;Testing&lt;/h4&gt;  &lt;p&gt;We are not going to do TDD (or maybe we will, let's see how the team goes first) but for sure we will write unit tests and we'll try to test the most important features. &lt;/p&gt;  &lt;h5&gt;MsTest&lt;/h5&gt;  &lt;p&gt;Even if I prefer mbUnit, the rest of the solutions is already using MsTest so, even if it's not my preferred testing framework, we'll go with that. &lt;/p&gt;  &lt;h5&gt;&lt;a href="http://ayende.com/projects/rhino-mocks.aspx" target="_blank"&gt;RhinoMocks&lt;/a&gt;&lt;/h5&gt;  &lt;p&gt;Fortunately the other tests are already using this great mocking framework, which is also the one I used the most and that I prefer, so all good on this side. &lt;/p&gt;  &lt;h3&gt;The result&lt;/h3&gt;  &lt;p&gt;Even with some restrictions, I think we ended with an application stack that is pretty close to what I'd have considered the best possible. Now the fun begins, and we'll see if the team will find MVC, jQuery and Spark easy to learn and to use. I'll keep you posted, and when the project ends I'll write a post sharing what was the experience of the team with the new stack and which problem we encountered.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ef87ae47-e053-46fa-8708-d750f3fc07e6" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://del.icio.us/popular/aspnetmvc" rel="tag"&gt;aspnetmvc&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/spark" rel="tag"&gt;spark&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/jQuery" rel="tag"&gt;jQuery&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/stack" rel="tag"&gt;stack&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/decisions" rel="tag"&gt;decisions&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;&lt;a href="http://dotnetshoutout.com/My-ASPNET-MVC-stack-and-why-I-chosen-it" rev="vote-for"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fcodeclimber.net.nz%2Farchive%2F2009%2F10%2F15%2Fmy-asp.net-mvc-stack-and-why-i-chosen-it.aspx" /&gt;&lt;/a&gt; &lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fcodeclimber.net.nz%2farchive%2f2009%2f10%2f15%2fmy-asp.net-mvc-stack-and-why-i-chosen-it.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fcodeclimber.net.nz%2farchive%2f2009%2f10%2f15%2fmy-asp.net-mvc-stack-and-why-i-chosen-it.aspx" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://codeclimber.net.nz/aggbug/835.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/CDECLMBR/57BE675B7024A1DA193104D313E10B602C4B0F2D"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/CDECLMBR/57BE675B7024A1DA193104D313E10B602C4B0F2D"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=YTldHzHxzh4:6PaiMHG_6oY:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=YTldHzHxzh4:6PaiMHG_6oY:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=YTldHzHxzh4:6PaiMHG_6oY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=YTldHzHxzh4:6PaiMHG_6oY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=YTldHzHxzh4:6PaiMHG_6oY:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=YTldHzHxzh4:6PaiMHG_6oY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=YTldHzHxzh4:6PaiMHG_6oY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=YTldHzHxzh4:6PaiMHG_6oY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/YTldHzHxzh4" height="1" width="1"/&gt;</description><dc:creator>Simone Chiaretta</dc:creator><guid isPermaLink="false">http://codeclimber.net.nz/archive/2009/10/15/my-asp.net-mvc-stack-and-why-i-chosen-it.aspx</guid><pubDate>Thu, 15 Oct 2009 10:54:36 GMT</pubDate><wfw:comment>http://codeclimber.net.nz/comments/835.aspx</wfw:comment><comments>http://codeclimber.net.nz/archive/2009/10/15/my-asp.net-mvc-stack-and-why-i-chosen-it.aspx#feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/835.aspx</wfw:commentRss><feedburner:origLink>http://codeclimber.net.nz/archive/2009/10/15/my-asp.net-mvc-stack-and-why-i-chosen-it.aspx</feedburner:origLink></item><item><title>Twitter is crowdsourcing the translation to Italian, and I&amp;rsquo;m part of it</title><category>Web 2.0</category><category>User Experience</category><category>Community Life</category><link>http://feedproxy.google.com/~r/Codeclimber/~3/LCSGUskpNmw/twitter-is-crowdsourcing-the-translation-to-italian-and-irsquom-part.aspx</link><description>&lt;p&gt;This news it’s a few days old, but if you hadn’t heard of it yet, &lt;a href="http://blog.twitter.com/2009/10/coming-soon-twitter-in-more-languages.html" target="_blank"&gt;Twitter is going to be available in more languages&lt;/a&gt;: not only English and Japanese, but also Italian, French, German and Spanish. The cool thing is that the interface is not being translated by a team of professional translators but by a selected number of users. And I’m happy to have been invited to help the translation of Twitter to Italian (notice the “&lt;a href="http://twitter.com/simonech" target="_blank"&gt;Translator Badge&lt;/a&gt;” at the top right corner of &lt;a href="http://twitter.com/simonech" target="_blank"&gt;my profile page on Twitter&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;There are many considerations that can be done about this project, from different point of view.&lt;/p&gt;  &lt;h3&gt;The business side&lt;/h3&gt;  &lt;p&gt;First of all this will help Twitter spread more in non English-speaking countries like Italy. Since Facebook was translated in Italian, the number of Italians on Facebook grew exponentially (there are now 18 millions of Italian on Facebook, 1/3th of all the Italians). So probably the same will happen with Twitter as well.&lt;/p&gt;  &lt;h3&gt;The social side&lt;/h3&gt;  &lt;p&gt;Then another interesting thing is that they are exploiting the community of users, using the approach called &lt;a href="http://en.wikipedia.org/wiki/Crowdsourcing" target="_blank"&gt;Crowdsourcing&lt;/a&gt;, which is outsourcing the solution of your problem not to an external contractor but to a “crowd”. This concepts is already widely adopted in the online communities. There are many advantages in this approach, the most of important being the fact that many people can collaborate to create the best translation possible, without the usual “weird” translations that we see in localized software.&lt;/p&gt;  &lt;p&gt;If you are interested in helping, you can &lt;a href="http://twitter.com/translate/#translate_signup" target="_blank"&gt;ask to become a volunteer&lt;/a&gt;. And you can even volunteer to translate to a different language that it’s not being translated yet, like Farsi or Danish.&lt;/p&gt;  &lt;p&gt;Another point of interest is how they shared the effort among the volunteers: they didn’t. Everyone can translate everything and when there will be enough translations, the more frequent will be the official ones. And probably other volunteers will be invited later to help evaluate the best translations.&lt;/p&gt;  &lt;h3&gt;The tech side&lt;/h3&gt;  &lt;p&gt;Let’s go to the technology side of things. The application they developed to translate the site is great: it’s not the usual list of placeholders and English sentence, but it is a very nice visual UI, with a textbox that appears inside a tooltip pointing to the text to be translated, on the actual page. There is a nice &lt;a href="http://www.youtube.com/watch?v=7rFAZQpafRs" target="_blank"&gt;video on YouTube that shows how Twitter translate works&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;It would be cool if they could opensource the translation application to help other developers localize their own apps using the same crowdsourcing approach.&lt;/p&gt;  &lt;p&gt;Finally it’s funny to have a look at how Twitter developers organized the strings of text: like all the application we develop to be localizable, there are many “placeholders” for the same text, or sometimes you find hardcoded strings (like “5 minutes ago” where you can translate ago, but not minutes).But I’m pretty sure all these small issue will be addressed in future releases of Twitter.&lt;/p&gt;  &lt;h3&gt;The linguistic side&lt;/h3&gt;  &lt;p&gt;Translating from English, especially single terms or short sentences is difficult. Unlike English, many languages have genders, declination of verbs, verbs cannot be transformed in nouns just by adding a –er at the end, or nouns cannot be used also as verbs (like “to message to”). For example “&lt;em&gt;you are followed by&lt;/em&gt;” needs to be translated based on the the sex of the user: “&lt;em&gt;sei seguit&lt;strong&gt;o&lt;/strong&gt; da&lt;/em&gt;” for male and “&lt;em&gt;sei seguit&lt;strong&gt;a&lt;/strong&gt; da&lt;/em&gt;” for female. And also the term “follower” doesn’t have a counterpart in Italian that doesn’t involve at least 2 words. But we have a great team and are having great discussions, so I’m pretty sure we will come out with a great translation. And if that doesn’t happen, well, you know who to blame for it.&lt;/p&gt;  &lt;h3&gt;Wrapping up&lt;/h3&gt;  &lt;p&gt;It’s great to see Twitter exploiting the community to translate it’s UI in different languages, and I’m very proud of being part of this team.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a2efd418-322f-4faf-9e98-73bbb163ab54" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://del.icio.us/popular/Twitter" rel="tag"&gt;Twitter&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/translate" rel="tag"&gt;translate&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/crowdsourcing" rel="tag"&gt;crowdsourcing&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/834.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/CDECLMBR/7471619D7887D2661A66E1323480D4C03B38176E"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/CDECLMBR/7471619D7887D2661A66E1323480D4C03B38176E"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=LCSGUskpNmw:DpVxMkBd7-g:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=LCSGUskpNmw:DpVxMkBd7-g:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=LCSGUskpNmw:DpVxMkBd7-g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=LCSGUskpNmw:DpVxMkBd7-g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=LCSGUskpNmw:DpVxMkBd7-g:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=LCSGUskpNmw:DpVxMkBd7-g:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=LCSGUskpNmw:DpVxMkBd7-g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=LCSGUskpNmw:DpVxMkBd7-g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/LCSGUskpNmw" height="1" width="1"/&gt;</description><dc:creator>Simone Chiaretta</dc:creator><guid isPermaLink="false">http://codeclimber.net.nz/archive/2009/10/13/twitter-is-crowdsourcing-the-translation-to-italian-and-irsquom-part.aspx</guid><pubDate>Tue, 13 Oct 2009 10:39:00 GMT</pubDate><wfw:comment>http://codeclimber.net.nz/comments/834.aspx</wfw:comment><comments>http://codeclimber.net.nz/archive/2009/10/13/twitter-is-crowdsourcing-the-translation-to-italian-and-irsquom-part.aspx#feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/834.aspx</wfw:commentRss><feedburner:origLink>http://codeclimber.net.nz/archive/2009/10/13/twitter-is-crowdsourcing-the-translation-to-italian-and-irsquom-part.aspx</feedburner:origLink></item></channel></rss>
