<?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>dev.enekoalonso.com</title>
	<atom:link href="http://dev.enekoalonso.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://dev.enekoalonso.com</link>
	<description>having fun with code</description>
	<lastBuildDate>Thu, 02 Sep 2010 13:56:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Link: Whirlpool JS</title>
		<link>http://dev.enekoalonso.com/2010/08/27/link-whirlpool-js/</link>
		<comments>http://dev.enekoalonso.com/2010/08/27/link-whirlpool-js/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 20:08:25 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[compressed]]></category>
		<category><![CDATA[crypto]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[encode]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[hash]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[minified]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[whirlpool]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=651</guid>
		<description><![CDATA[Whirlpool is a very strong hashing algorithm (one way encryption) that encodes any text into a 128 character string (popular md5 generates a 32 byte string). Looking for the JavaScript version, I had to search on my email inbox for an email I received back in October 2009 to found the link where to download [...]]]></description>
			<content:encoded><![CDATA[<p>Whirlpool is a very strong hashing algorithm (one way encryption) that encodes any text into a 128 character string (popular md5 generates a 32 byte string). </p>
<p>Looking for the JavaScript version, I had to search on my email inbox for an email I received back in October 2009 to found the link where to download the Whirlpool Hash Javascript Algorithm. It&#8217;s kind of surprising that searching in Google for &#8220;whirlpool js&#8221;, &#8220;whirlpool javascript&#8221; or &#8220;whirlpool hash javascript algorithm&#8221; does not return the link.</p>
<p>For the record, here is the url:<br />
<a href="http://www.sunsean.com/Whirlpool.html">Whirlpool Hash Javascript Algorithm</a></p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>August 18, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/18/titanium-developer-love-and-hate-part-ii/" title="Titanium Developer: love and hate (Part II)">Titanium Developer: love and hate (Part II)</a> (0)</li><li>July 30, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/30/titanium-developer-love-and-hate/" title="Titanium Developer: love and hate">Titanium Developer: love and hate</a> (3)</li><li>February 19, 2010 -- <a href="http://dev.enekoalonso.com/2010/02/19/having-fun-with-mooml-and-twitter/" title="Having fun with Mooml &#038; Twitter">Having fun with Mooml &#038; Twitter</a> (0)</li><li>December 29, 2008 -- <a href="http://dev.enekoalonso.com/2008/12/29/modifying-the-url-hash-without-affecting-the-browser-history/" title="Modifying the URL Hash without affecting the browser history">Modifying the URL Hash without affecting the browser history</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/08/27/link-whirlpool-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>List of iPhone ipsw firmware files (yes, downgrading from iOS 4.0.1 to 3.1.3)</title>
		<link>http://dev.enekoalonso.com/2010/08/22/list-of-iphone-ipsw-firmware-files/</link>
		<comments>http://dev.enekoalonso.com/2010/08/22/list-of-iphone-ipsw-firmware-files/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 04:01:03 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[3.1.3]]></category>
		<category><![CDATA[4]]></category>
		<category><![CDATA[4.0.1]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[downgrade]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ios4]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[iphoneos]]></category>
		<category><![CDATA[ipsw]]></category>
		<category><![CDATA[recboot]]></category>
		<category><![CDATA[restore]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[version]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=646</guid>
		<description><![CDATA[So I finally decided to downgrade my iPhone 3G from iOS 4.0.1 to iPhone OS 3.1.3. For some reason, Apple does not keep the old ipsw restore files easy to find and most posts on Internet are missing a link to them. Here is a list of some of them: iPhone 3.1.3 firmware for iPhone [...]]]></description>
			<content:encoded><![CDATA[<p>So I finally decided to downgrade my iPhone 3G from iOS 4.0.1 to iPhone OS 3.1.3. For some reason, Apple does not keep the old ipsw restore files easy to find and most posts on Internet are missing a link to them. Here is a list of some of them:<br />
<a href="http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7481.20100202.4orot/iPhone1,1_3.1.3_7E18_Restore.ipsw" target="_blank">iPhone 3.1.3 firmware for iPhone 2G</a><br />
<a href="http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7468.20100202.pbnrt/iPhone1,2_3.1.3_7E18_Restore.ipsw" target="_blank">iPhone 3.1.3 firmware for iPhone 3G</a><br />
<a href="http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7472.20100202.8tugj/iPhone2,1_3.1.3_7E18_Restore.ipsw" target="_blank">iPhone 3.1.3 firmware for iPhone 3GS</a></p>
<p>I have downgraded my phone following this article: <a href="http://www.redmondpie.com/downgrade-ios-4.1-to-ios-4-3.1.3-3.1.2-how-to-guide/">Downgrade iOS 4.1 iPhone 4, 3GS, 3G and iPod touch to iOS 4 / iPhone 3.1.3 / 3.1.2 [How to Guide]</a></p>
<p>The process is super simple, I couldn&#8217;t believe it was so easy, specially, since RecBoot runs so clean and fast. What the tutorials don&#8217;t say, although I expected it, is that you will lost all your data (as every time you recover). The problem is the next time you connect to iTunes, you wont be able to restore from your latest backup since it would be for a newer OS version.</p>
<p>Luckily, iTunes keeps track of old backups. I&#8217;m currently restoring from a backup I have from April 2010, probably the last one before I updated to the back then beta version of iOS 4.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>August 3, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/03/iphone-sdk-old-versions/" title="List of iPhone SDK &#038; XCode packages">List of iPhone SDK &#038; XCode packages</a> (0)</li><li>February 7, 2010 -- <a href="http://dev.enekoalonso.com/2010/02/07/my-current-svn-setup/" title="My current SVN setup">My current SVN setup</a> (0)</li><li>August 18, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/18/titanium-developer-love-and-hate-part-ii/" title="Titanium Developer: love and hate (Part II)">Titanium Developer: love and hate (Part II)</a> (0)</li><li>July 30, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/30/titanium-developer-love-and-hate/" title="Titanium Developer: love and hate">Titanium Developer: love and hate</a> (3)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/08/22/list-of-iphone-ipsw-firmware-files/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Titanium Developer: love and hate (Part II)</title>
		<link>http://dev.enekoalonso.com/2010/08/18/titanium-developer-love-and-hate-part-ii/</link>
		<comments>http://dev.enekoalonso.com/2010/08/18/titanium-developer-love-and-hate-part-ii/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 19:58:52 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[appcelerator]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[compiled]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[generated]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[native]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[objc]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[scrollview]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[titanium]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=644</guid>
		<description><![CDATA[For the last four weeks and despite other projects and deadlines, I&#8217;ve been working on a mobile app for iPhone and Android, using Titanium Developer from Appcelerator. I still hate it. And I still love it. More to come&#8230; Related Posts:July 30, 2010 -- Titanium Developer: love and hate (3)August 3, 2010 -- List of [...]]]></description>
			<content:encoded><![CDATA[<p>For the last <a href="http://dev.enekoalonso.com/2010/07/30/titanium-developer-love-and-hate/">four weeks</a> and despite other projects and deadlines, I&#8217;ve been working on a mobile app for iPhone and Android, using Titanium Developer from <a href="http://appcelerator.com">Appcelerator</a>.</p>
<p>I still hate it. And I still love it.</p>
<p>More to come&#8230;</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>July 30, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/30/titanium-developer-love-and-hate/" title="Titanium Developer: love and hate">Titanium Developer: love and hate</a> (3)</li><li>August 3, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/03/iphone-sdk-old-versions/" title="List of iPhone SDK &#038; XCode packages">List of iPhone SDK &#038; XCode packages</a> (0)</li><li>November 28, 2008 -- <a href="http://dev.enekoalonso.com/2008/11/28/mygameoflife-source-code/" title="MyGameOfLife source code">MyGameOfLife source code</a> (0)</li><li>July 26, 2009 -- <a href="http://dev.enekoalonso.com/2009/07/26/placing-a-uiactivityindicartorview-on-a-uibarbuttonitem/" title="Placing a UIActivityIndicartorView on a UIBarButtonItem">Placing a UIActivityIndicartorView on a UIBarButtonItem</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/08/18/titanium-developer-love-and-hate-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Little tricks: repeating strings in Javascript &amp; Python</title>
		<link>http://dev.enekoalonso.com/2010/08/18/little-tricks-repeating-strings-in-javascript-python/</link>
		<comments>http://dev.enekoalonso.com/2010/08/18/little-tricks-repeating-strings-in-javascript-python/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 19:17:34 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[concatenate]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[repeat]]></category>
		<category><![CDATA[string]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=641</guid>
		<description><![CDATA[How many times have you found yourself printing strings like &#8220;&#8212;&#8212;&#8212;&#8212;-&#8221; or &#8220;===========&#8221;? I do that a lot when I have to do console.logs or if I&#8217;m working on a console application or script. Adding dividers to the output makes it more readable. Python has a very peculiar syntax for repeating strings, which consists in [...]]]></description>
			<content:encoded><![CDATA[<p>How many times have you found yourself printing strings like &#8220;&#8212;&#8212;&#8212;&#8212;-&#8221; or &#8220;===========&#8221;? I do that a lot when I have to do console.logs or if I&#8217;m working on a console application or script. Adding dividers to the output makes it more readable.</p>
<p>Python has a very peculiar syntax for repeating strings, which consists in just multiplying the string by a number, like this:</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="st0">&quot;123&quot;</span><span class="sy0">*</span><span class="nu0">4</span> // returns <span class="st0">&quot;123123123123&quot;</span></div>
</li>
</ol>
</div>
<p>We can achieve the same in Javascript using Array.join() like this:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1">Array<span class="br0">&#40;</span><span class="nu0">4</span><span class="br0">&#41;</span>.<span class="me1">join</span><span class="br0">&#40;</span><span class="st0">&quot;123&quot;</span><span class="br0">&#41;</span>; <span class="co1">// returns &quot;123123123123&quot;</span></div>
</li>
<li class="li1">
<div class="de1">Array<span class="br0">&#40;</span><span class="nu0">30</span><span class="br0">&#41;</span>.<span class="me1">join</span><span class="br0">&#40;</span><span class="st0">&quot;-&quot;</span><span class="br0">&#41;</span>; <span class="co1">// returns &quot;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">Array<span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span>.<span class="me1">join</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;span&gt;test&lt;/span&gt;&quot;</span><span class="br0">&#41;</span>; <span class="co1">// returns &quot;&lt;span&gt;test&lt;/span&gt;&lt;span&gt;test&lt;/span&gt;&quot;</span></div>
</li>
</ol>
</div>
<p>Very useful for logs or to generate repeated html strings, etc.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>July 1, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/01/little-tricks-editing-strings-by-index-in-javascript-and-python/" title="Little tricks: editing strings by index in Javascript and Python">Little tricks: editing strings by index in Javascript and Python</a> (1)</li><li>August 12, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/12/little-tricks-concatenating-arrays-in-javascript/" title="Little tricks: concatenating arrays in Javascript">Little tricks: concatenating arrays in Javascript</a> (4)</li><li>July 20, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/20/little-tricks-string-padding-in-javascript/" title="Little tricks: string padding in Javascript">Little tricks: string padding in Javascript</a> (2)</li><li>May 22, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/22/more-websockets-now-with-python/" title="More WebSockets, now with Python!">More WebSockets, now with Python!</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/08/18/little-tricks-repeating-strings-in-javascript-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Little tricks: concatenating arrays in Javascript</title>
		<link>http://dev.enekoalonso.com/2010/08/12/little-tricks-concatenating-arrays-in-javascript/</link>
		<comments>http://dev.enekoalonso.com/2010/08/12/little-tricks-concatenating-arrays-in-javascript/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 21:44:30 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[add]]></category>
		<category><![CDATA[append]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[concatenate]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[native]]></category>
		<category><![CDATA[push]]></category>
		<category><![CDATA[trick]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=632</guid>
		<description><![CDATA[It happens that when working with Javascript frameworks like MooTools for a long time, it&#8217;s easy to forget how to do things in plain/native Javascript. For example, concatenating arrays is an easy task thanks to the Function object method apply: var array1 = &#91;1,2,3,4&#93;; var array2 = &#91;5,6,7&#93;; array1.push.apply&#40;array1, array2&#41;; // array1 = [1, 2, [...]]]></description>
			<content:encoded><![CDATA[<p>It happens that when working with Javascript frameworks like MooTools for a long time, it&#8217;s easy to forget how to do things in plain/native Javascript. For example, concatenating arrays is an easy task thanks to the <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function object</a> method <b>apply</b>:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> array1 = <span class="br0">&#91;</span><span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">3</span>,<span class="nu0">4</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> array2 = <span class="br0">&#91;</span><span class="nu0">5</span>,<span class="nu0">6</span>,<span class="nu0">7</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">array1.<span class="me1">push</span>.<span class="me1">apply</span><span class="br0">&#40;</span>array1, array2<span class="br0">&#41;</span>; <span class="co1">// array1 = [1, 2, 3, 4, 5, 6, 7]</span></div>
</li>
<li class="li1">
<div class="de1">array1.<span class="me1">push</span>.<span class="me1">apply</span><span class="br0">&#40;</span>array1, <span class="br0">&#91;</span><span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span>; <span class="co1">// array1 = [1, 2, 3, 4, 5, 6, 7, 1, 2, 3]</span></div>
</li>
</ol>
</div>
<p>Note that this method <b>concatenates two arrays</b>, and does not check for duplicate items.</p>
<p>In MooTools, the equivalent to this method would be <a href="http://mootools.net/docs/core/Native/Array#Array:extend">Array.extend()</a>:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> array1 = <span class="br0">&#91;</span><span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">3</span>,<span class="nu0">4</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> array2 = <span class="br0">&#91;</span><span class="nu0">5</span>,<span class="nu0">6</span>,<span class="nu0">7</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">array1.<span class="me1">extend</span><span class="br0">&#40;</span>array2<span class="br0">&#41;</span>; <span class="co1">// array1 = [1, 2, 3, 4, 5, 6, 7]</span></div>
</li>
<li class="li1">
<div class="de1">array1.<span class="me1">extend</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span>; <span class="co1">// array1 = [1, 2, 3, 4, 5, 6, 7, 1, 2, 3]</span></div>
</li>
</ol>
</div>
<p>Again, Array.extend() concatenates two arrays without checking for duplicates.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>August 18, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/18/little-tricks-repeating-strings-in-javascript-python/" title="Little tricks: repeating strings in Javascript &#038; Python">Little tricks: repeating strings in Javascript &#038; Python</a> (1)</li><li>May 14, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/14/interesting-json-vulnerability-old-stuff/" title="Interesting JSON vulnerability (old stuff)">Interesting JSON vulnerability (old stuff)</a> (0)</li><li>August 27, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/27/link-whirlpool-js/" title="Link: Whirlpool JS">Link: Whirlpool JS</a> (0)</li><li>August 18, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/18/titanium-developer-love-and-hate-part-ii/" title="Titanium Developer: love and hate (Part II)">Titanium Developer: love and hate (Part II)</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/08/12/little-tricks-concatenating-arrays-in-javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>List of iPhone SDK &amp; XCode packages</title>
		<link>http://dev.enekoalonso.com/2010/08/03/iphone-sdk-old-versions/</link>
		<comments>http://dev.enekoalonso.com/2010/08/03/iphone-sdk-old-versions/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 22:21:04 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[sdk]]></category>
		<category><![CDATA[titanium]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[version]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=623</guid>
		<description><![CDATA[Lately I&#8217;ve been developing Android and iPhone apps with Titanium Developer and also switching from on Mac to another. At the end I ended up with a computer that only had the latest iOS 4 SDK. Thus, I couldn&#8217;t compile anymore apps for my 3G iPhone with OS 3.1.3. Fortunately, the old versions of XCode [...]]]></description>
			<content:encoded><![CDATA[<p>Lately I&#8217;ve been developing Android and iPhone apps with Titanium Developer and also switching from on Mac to another. At the end I ended up with a computer that only had the latest iOS 4 SDK. Thus, I couldn&#8217;t compile anymore apps for my 3G iPhone with OS 3.1.3.</p>
<p>Fortunately, the old versions of XCode and iPhone SDKs are still available for download, although they don&#8217;t show up in the Downloads section of the Apple Developer Connection site.</p>
<p>Here is a list of versions and links:<br />
<a href="http://developer.apple.com/iphone/download.action?path=/iphone/iphone_sdk_3.1__final/iphone_sdk_3.1_with_xcode_3.2_final__snow_leopard__10a432.dmg">iPhone SDK 3.1 with XCode 3.2.1 for Snow Leopard (10.6.0)</a><br />
<a href="http://developer.apple.com/iphone/download.action?path=/iphone/iphone_sdk_3.1.3__final/iphone_sdk_3.1.3_with_xcode_3.2.1__snow_leopard__10m2003a.dmg">iPhone SDK 3.1.3 with XCode 3.2.1 for Snow Leopard (10.6.0)</a><br />
<a href="http://developer.apple.com/iphone/download.action?path=/iphone/iphone_sdk_3.2__final/xcode_3.2.2_and_iphone_sdk_3.2_final.dmg">iPhone SDK 3.2 Final with Xcode 3.2.2 for Snow Leopard (10.6.0)</a><br />
<a href="http://developer.apple.com/iphone/download.action?path=/iphone/iphone_sdk_4_gm_seed/xcode_3.2.3_and_iphone_sdk_4_gm_seed.dmg">Xcode 3.2.3 and iPhone SDK 4 GM seed for Snow Leopard (10.6.2)</a><br />
<a href="http://developer.apple.com/iphone/download.action?path=%2Fios%2Fios_sdk_4.0.1__final%2Fxcode_3.2.3_and_ios_sdk_4.0.1.dmg">Xcode 3.2.3 and iOS SDK 4.0.1 for Snow Leopard</a><br />
<a href="http://developer.apple.com/iphone/download.action?path=%2Fios%2Fios_sdk_4.0.2__final%2Fxcode_3.2.3_and_ios_sdk_4.0.2.dmg">Xcode 3.2.3 and iOS SDK 4.0.2 for Snow Leopard</a></p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>August 18, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/18/titanium-developer-love-and-hate-part-ii/" title="Titanium Developer: love and hate (Part II)">Titanium Developer: love and hate (Part II)</a> (0)</li><li>July 30, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/30/titanium-developer-love-and-hate/" title="Titanium Developer: love and hate">Titanium Developer: love and hate</a> (3)</li><li>August 22, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/22/list-of-iphone-ipsw-firmware-files/" title="List of iPhone ipsw firmware files (yes, downgrading from iOS 4.0.1 to 3.1.3)">List of iPhone ipsw firmware files (yes, downgrading from iOS 4.0.1 to 3.1.3)</a> (1)</li><li>January 28, 2010 -- <a href="http://dev.enekoalonso.com/2010/01/28/things-to-do/" title="Things to do">Things to do</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/08/03/iphone-sdk-old-versions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating QR Codes with Google Charts API</title>
		<link>http://dev.enekoalonso.com/2010/07/30/creating-qr-codes-with-google-charts-api/</link>
		<comments>http://dev.enekoalonso.com/2010/07/30/creating-qr-codes-with-google-charts-api/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 05:51:28 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[chart]]></category>
		<category><![CDATA[charts]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[qr]]></category>
		<category><![CDATA[qrcode]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=618</guid>
		<description><![CDATA[As simple as a URL: http://chart.apis.google.com/chart?cht=qr&#038;chs=250&#215;250&#038;chl=http://dev.enekoalonso.com Related Posts:May 6, 2010 -- Tech talks at LEVEL Studios (0)February 19, 2010 -- Having fun with Mooml &#038; Twitter (0)January 28, 2010 -- Things to do (0)June 30, 2009 -- iPhone 3.0 geolocation with Javascript (1)]]></description>
			<content:encoded><![CDATA[<p>As simple as a URL: <a href="http://chart.apis.google.com/chart?cht=qr&#038;chs=250x250&#038;chl=http://dev.enekoalonso.com">http://chart.apis.google.com/chart?cht=qr&#038;chs=250&#215;250&#038;chl=http://dev.enekoalonso.com</a><br />
<img src="http://chart.apis.google.com/chart?cht=qr&#038;chs=250x250&#038;chl=http://dev.enekoalonso.com" alt="" /></p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>May 6, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/06/tech-talks-at-level-studios/" title="Tech talks at LEVEL Studios">Tech talks at LEVEL Studios</a> (0)</li><li>February 19, 2010 -- <a href="http://dev.enekoalonso.com/2010/02/19/having-fun-with-mooml-and-twitter/" title="Having fun with Mooml &#038; Twitter">Having fun with Mooml &#038; Twitter</a> (0)</li><li>January 28, 2010 -- <a href="http://dev.enekoalonso.com/2010/01/28/things-to-do/" title="Things to do">Things to do</a> (0)</li><li>June 30, 2009 -- <a href="http://dev.enekoalonso.com/2009/06/30/iphone-3-0-geolocation-with-javascript/" title="iPhone 3.0 geolocation with Javascript">iPhone 3.0 geolocation with Javascript</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/07/30/creating-qr-codes-with-google-charts-api/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Titanium Developer: love and hate</title>
		<link>http://dev.enekoalonso.com/2010/07/30/titanium-developer-love-and-hate/</link>
		<comments>http://dev.enekoalonso.com/2010/07/30/titanium-developer-love-and-hate/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 04:57:16 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[appcelerator]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[pc]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[titanium]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=615</guid>
		<description><![CDATA[I&#8217;ve been using Titanium Developer for a while now, since I installed it to do some mobile app research one or two months ago. But up until now I barely used it again other than to maintain a desktop app I created for a game, which thanks to Titanium runs in both Mac and PC. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using <a href="http://www.appcelerator.com/products/titanium-mobile-application-development/">Titanium Developer</a> for a while now, since I installed it to do some mobile app research one or two months ago. But up until now I barely used it again other than to maintain a desktop app I created for a game, which thanks to Titanium runs in both Mac and PC. Thus, up until this week, I hadn&#8217;t really get in depth with it.</p>
<h3>The good things</h3>
<p>Nice, easy and fast. Creating apps is piece of cake, loading JSON feeds from Internet, using local storage, placing buttons and labels on the screen&#8230; it&#8217;s all easy and it works on both iPhone and Android right away.</p>
<h3>The bad things</h3>
<p>Titanium Developer looks like an unfinished app. It shouldn&#8217;t be version 1.X, not even 0.X. Looks like an alpha, buggy and very easy to get screwed up, specially if you share your projects between Windows and Mac. This time it launches the emulator, this time it does not. This time your project does not load properly. Next time, you try to create a new project and it fails. And the errors are totally useless. Not very helpful.</p>
<h3>Conclusion</h3>
<p>The idea is great, awesome. The code is clean and using Javascript for development makes it easy for web developers to get easily involved into mobile app development. If only the <a href="http://twitter.com/appcelerator">Appcelerator</a> team could improve their app, we would save a lot of headaches.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>August 18, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/18/titanium-developer-love-and-hate-part-ii/" title="Titanium Developer: love and hate (Part II)">Titanium Developer: love and hate (Part II)</a> (0)</li><li>August 3, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/03/iphone-sdk-old-versions/" title="List of iPhone SDK &#038; XCode packages">List of iPhone SDK &#038; XCode packages</a> (0)</li><li>August 27, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/27/link-whirlpool-js/" title="Link: Whirlpool JS">Link: Whirlpool JS</a> (0)</li><li>February 19, 2010 -- <a href="http://dev.enekoalonso.com/2010/02/19/having-fun-with-mooml-and-twitter/" title="Having fun with Mooml &#038; Twitter">Having fun with Mooml &#038; Twitter</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/07/30/titanium-developer-love-and-hate/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Little tricks: string padding in Javascript</title>
		<link>http://dev.enekoalonso.com/2010/07/20/little-tricks-string-padding-in-javascript/</link>
		<comments>http://dev.enekoalonso.com/2010/07/20/little-tricks-string-padding-in-javascript/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 22:35:45 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[number]]></category>
		<category><![CDATA[pad]]></category>
		<category><![CDATA[padding]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[zeropad]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=611</guid>
		<description><![CDATA[I just found this little trick to zero pad numbers in Javascript. It is also applicable to padding with any character, not just zeros. var n = 123 String&#40;&#34;00000&#34; + n&#41;.slice&#40;-5&#41;; // returns 00123 &#40;&#34;00000&#34; + n&#41;.slice&#40;-5&#41;; // returns 00123 &#40;&#34; &#160; &#160; &#34; + n&#41;.slice&#40;-5&#41;; // returns &#34; &#160;123&#34; (with two spaces) Found here. [...]]]></description>
			<content:encoded><![CDATA[<p>I just found this little trick to zero pad numbers in Javascript. It is also applicable to padding with any character, not just zeros.</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> n = <span class="nu0">123</span></div>
</li>
<li class="li1">
<div class="de1">String<span class="br0">&#40;</span><span class="st0">&quot;00000&quot;</span> + n<span class="br0">&#41;</span>.<span class="me1">slice</span><span class="br0">&#40;</span><span class="nu0">-5</span><span class="br0">&#41;</span>; <span class="co1">// returns 00123</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span><span class="st0">&quot;00000&quot;</span> + n<span class="br0">&#41;</span>.<span class="me1">slice</span><span class="br0">&#40;</span><span class="nu0">-5</span><span class="br0">&#41;</span>; <span class="co1">// returns 00123</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span><span class="st0">&quot; &nbsp; &nbsp; &quot;</span> + n<span class="br0">&#41;</span>.<span class="me1">slice</span><span class="br0">&#40;</span><span class="nu0">-5</span><span class="br0">&#41;</span>; <span class="co1">// returns &quot; &nbsp;123&quot; (with two spaces)</span></div>
</li>
</ol>
</div>
<p>Found <a href="http://ricochen.wordpress.com/2010/04/24/javascript-zero-padding-numbers/">here</a>.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>August 18, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/18/little-tricks-repeating-strings-in-javascript-python/" title="Little tricks: repeating strings in Javascript &#038; Python">Little tricks: repeating strings in Javascript &#038; Python</a> (1)</li><li>July 2, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/02/equivalent-of-parseint-in-freemarker/" title="Equivalent of parseInt() in Freemarker">Equivalent of parseInt() in Freemarker</a> (0)</li><li>July 1, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/01/little-tricks-editing-strings-by-index-in-javascript-and-python/" title="Little tricks: editing strings by index in Javascript and Python">Little tricks: editing strings by index in Javascript and Python</a> (1)</li><li>September 2, 2009 -- <a href="http://dev.enekoalonso.com/2009/09/02/creating-html-blocks-with-mootools/" title="Creating HTML blocks with Mootools">Creating HTML blocks with Mootools</a> (3)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/07/20/little-tricks-string-padding-in-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Equivalent of parseInt() in Freemarker</title>
		<link>http://dev.enekoalonso.com/2010/07/02/equivalent-of-parseint-in-freemarker/</link>
		<comments>http://dev.enekoalonso.com/2010/07/02/equivalent-of-parseint-in-freemarker/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 19:05:40 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[cast]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[freemarker]]></category>
		<category><![CDATA[integer]]></category>
		<category><![CDATA[number]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[parseInt]]></category>
		<category><![CDATA[string]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=604</guid>
		<description><![CDATA[Programming languages have methods to cast integers to strings and strings to integers, but usually is had to find equivalents to parseInt(), a Javascript function that basically removes all non-numeric characters from a string and returns the resulting integer. Today, while working on a Freemarker template, I had to convert strings like &#8220;40 ms.&#8221; and [...]]]></description>
			<content:encoded><![CDATA[<p>Programming languages have methods to cast integers to strings and strings to integers, but usually is had to find equivalents to parseInt(), a Javascript function that basically removes all non-numeric characters from a string and returns the resulting integer.</p>
<p>Today, while working on a Freemarker template, I had to convert strings like &#8220;40 ms.&#8221; and &#8220;128 px&#8221; to their respective integers 40 and 128. The solution I found is to use regular expressions, which are kind of tricky in Freemarker but can save you lots of time.</p>
<p>Example in Javascript:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span>parseInt<span class="br0">&#40;</span><span class="st0">&quot;40 ms&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="co1">// outputs 40</span></div>
</li>
<li class="li1">
<div class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;40 ms&quot;</span>.<span class="me1">match</span><span class="br0">&#40;</span><span class="re0">/^\d+/</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="co1">// outputs 40</span></div>
</li>
</ol>
</div>
<p>Same in Freemarker:</p>
<div class="geshi no text">
<ol>
<li class="li1">
<div class="de1">&lt;#assign myInt = &quot;40 ms.&quot;?matches(&quot;^(\\d+)(.*)&quot;)[0]?groups[1]&gt;</div>
</li>
</ol>
</div>
<p>Looks like even using regular expressions, in Freemarker we need to <a href="http://freemarker.org/docs/ref_builtins_string.html#ref_builtin_matches">match the whole string</a> with groups to separate the number from the rest. Thus, this will work only if the number is at the beginning of the string, which was the initial requirement in my case.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>July 20, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/20/little-tricks-string-padding-in-javascript/" title="Little tricks: string padding in Javascript">Little tricks: string padding in Javascript</a> (2)</li><li>August 18, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/18/little-tricks-repeating-strings-in-javascript-python/" title="Little tricks: repeating strings in Javascript &#038; Python">Little tricks: repeating strings in Javascript &#038; Python</a> (1)</li><li>July 1, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/01/little-tricks-editing-strings-by-index-in-javascript-and-python/" title="Little tricks: editing strings by index in Javascript and Python">Little tricks: editing strings by index in Javascript and Python</a> (1)</li><li>March 15, 2010 -- <a href="http://dev.enekoalonso.com/2010/03/15/more-updates-to-mooml-coming-soon/" title="More updates to Mooml coming soon">More updates to Mooml coming soon</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/07/02/equivalent-of-parseint-in-freemarker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Little tricks: editing strings by index in Javascript and Python</title>
		<link>http://dev.enekoalonso.com/2010/07/01/little-tricks-editing-strings-by-index-in-javascript-and-python/</link>
		<comments>http://dev.enekoalonso.com/2010/07/01/little-tricks-editing-strings-by-index-in-javascript-and-python/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 16:57:04 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[edit]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[readonly]]></category>
		<category><![CDATA[string]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=591</guid>
		<description><![CDATA[Editing strings by index maybe something that we don&#8217;t do all the time. But it&#8217;s one of these things that, coming from languages like C, one would assume is as trivial as assigning the value of an indexed position. Something like this: var a = &#34;hello world&#34; a&#91;0&#93; = &#34;H&#34; console.log&#40;a&#41; // outputs &#34;hello world&#34; [...]]]></description>
			<content:encoded><![CDATA[<p>Editing strings by index maybe something that we don&#8217;t do all the time. But it&#8217;s one of these things that, coming from languages like C, one would assume is as trivial as assigning the value of an indexed position. Something like this:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> a = <span class="st0">&quot;hello world&quot;</span></div>
</li>
<li class="li1">
<div class="de1">a<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> = <span class="st0">&quot;H&quot;</span></div>
</li>
<li class="li1">
<div class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span>a<span class="br0">&#41;</span> <span class="co1">// outputs &quot;hello world&quot;</span></div>
</li>
</ol>
</div>
<p>Go ahead and paste that code in your favorite javascript console. You would expect the output to be &#8220;Hello there&#8221;, but it is not.<br />
Same goes with Python, check this code:</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&gt;&gt;&gt;</span> a = <span class="st0">&quot;hello world&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&gt;&gt;&gt;</span> a<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> = <span class="st0">&quot;H&quot;</span></div>
</li>
<li class="li1">
<div class="de1">Traceback <span class="br0">&#40;</span>most recent call last<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; File <span class="st0">&quot;&lt;stdin&gt;&quot;</span>, line <span class="nu0">1</span>, <span class="kw1">in</span> <span class="sy0">&lt;</span>module<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">TypeError</span>: <span class="st0">&#39;str&#39;</span> <span class="kw2">object</span> does <span class="kw1">not</span> support item assignment</div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&gt;&gt;&gt;</span> a<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> = <span class="st0">&#39;H&#39;</span></div>
</li>
<li class="li1">
<div class="de1">Traceback <span class="br0">&#40;</span>most recent call last<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; File <span class="st0">&quot;&lt;stdin&gt;&quot;</span>, line <span class="nu0">1</span>, <span class="kw1">in</span> <span class="sy0">&lt;</span>module<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">TypeError</span>: <span class="st0">&#39;str&#39;</span> <span class="kw2">object</span> does <span class="kw1">not</span> support item assignment</div>
</li>
</ol>
</div>
<p>This is because strings are read only and cannot be modified at all. Only replaced with new strings.</p>
<h2>The solution: convert to array and back to string</h2>
<p>There may be other solutions out there, I&#8217;m sure, but this is the solution I use: Both in Python and Javascript, a string can be converted into an array or list of characters (actually, list of strings). Then we can modify values by index and finally join the output into a new string.</p>
<p>Javascript:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> a = <span class="st0">&quot;hello world&quot;</span></div>
</li>
<li class="li1">
<div class="de1">a = a.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">a<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> = <span class="st0">&quot;H&quot;</span></div>
</li>
<li class="li1">
<div class="de1">a = a.<span class="me1">join</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span>a<span class="br0">&#41;</span> <span class="co1">// outputs &quot;Hello world&quot;</span></div>
</li>
</ol>
</div>
<p>Python:</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&gt;&gt;&gt;</span> a = <span class="st0">&quot;hello world&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&gt;&gt;&gt;</span> a = <span class="kw2">list</span><span class="br0">&#40;</span>a<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&gt;&gt;&gt;</span> a<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> = <span class="st0">&quot;H&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&gt;&gt;&gt;</span> a = <span class="st0">&quot;&quot;</span>.<span class="me1">join</span><span class="br0">&#40;</span>a<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&gt;&gt;&gt;</span> a</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#39;Hello world&#39;</span></div>
</li>
</ol>
</div>
<p>It&#8217;s interesting to see how the syntax for joining arrays into strings is totally the opposite in Javascript and Python. In Javascript, <a href="https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects#Array_Methods">join()</a> is a function of the Array object while in Python <a href="http://docs.python.org/py3k/library/stdtypes.html?highlight=join#str.join">join()</a> is a function of the string class.</p>
<p>In the other hand, <a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/split">split()</a> is a method of the String object in Javascript. There is a <a href="http://docs.python.org/py3k/library/stdtypes.html?highlight=split#str.split">split()</a> function on the string class in Python, but it cannot be used to split strings without a specific separator. The <a href="http://docs.python.org/py3k/library/functions.html?highlight=list#list">list()</a> function/constructor does the trick.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>August 18, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/18/little-tricks-repeating-strings-in-javascript-python/" title="Little tricks: repeating strings in Javascript &#038; Python">Little tricks: repeating strings in Javascript &#038; Python</a> (1)</li><li>July 20, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/20/little-tricks-string-padding-in-javascript/" title="Little tricks: string padding in Javascript">Little tricks: string padding in Javascript</a> (2)</li><li>May 22, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/22/more-websockets-now-with-python/" title="More WebSockets, now with Python!">More WebSockets, now with Python!</a> (1)</li><li>September 2, 2009 -- <a href="http://dev.enekoalonso.com/2009/09/02/creating-html-blocks-with-mootools/" title="Creating HTML blocks with Mootools">Creating HTML blocks with Mootools</a> (3)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/07/01/little-tricks-editing-strings-by-index-in-javascript-and-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Change in WebSockets handshake protocol</title>
		<link>http://dev.enekoalonso.com/2010/06/08/change-in-websockets-handshake-protocol/</link>
		<comments>http://dev.enekoalonso.com/2010/06/08/change-in-websockets-handshake-protocol/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 16:12:07 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[devchannel]]></category>
		<category><![CDATA[handshake]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[websockets]]></category>
		<category><![CDATA[websoket]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=587</guid>
		<description><![CDATA[If you are working with the latest version of Google Chrome (6.0.442.0) and you have been doing some testing or projects with WebSockets you may have already noticed there has been a change in the WebSockets specification for the client/server handshake protocol. More info about the change: http://webreflection.blogspot.com/2010/06/websocket-handshake-76-simplified.html http://blog.chromium.org/2010/06/websocket-protocol-updated.html Related Posts:May 22, 2010 -- More [...]]]></description>
			<content:encoded><![CDATA[<p>If you are working with the latest version of Google Chrome (6.0.442.0) and you have been doing some testing or projects with WebSockets you may have already noticed there has been a change in the WebSockets specification for the client/server handshake protocol.</p>
<p>More info about the change:<br />
<a href="http://webreflection.blogspot.com/2010/06/websocket-handshake-76-simplified.html">http://webreflection.blogspot.com/2010/06/websocket-handshake-76-simplified.html</a><br />
<a href="http://blog.chromium.org/2010/06/websocket-protocol-updated.html">http://blog.chromium.org/2010/06/websocket-protocol-updated.html</a></p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>May 22, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/22/more-websockets-now-with-python/" title="More WebSockets, now with Python!">More WebSockets, now with Python!</a> (1)</li><li>May 3, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/03/playing-with-websockets/" title="Playing with WebSockets">Playing with WebSockets</a> (2)</li><li>May 6, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/06/tech-talks-at-level-studios/" title="Tech talks at LEVEL Studios">Tech talks at LEVEL Studios</a> (0)</li><li>January 27, 2010 -- <a href="http://dev.enekoalonso.com/2010/01/27/detecting-when-css-gets-loaded-by-the-browser-with-mootools-and-asset-css/" title="Detecting when CSS gets loaded by the browser with Mootools and Asset.css">Detecting when CSS gets loaded by the browser with Mootools and Asset.css</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/06/08/change-in-websockets-handshake-protocol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More WebSockets, now with Python!</title>
		<link>http://dev.enekoalonso.com/2010/05/22/more-websockets-now-with-python/</link>
		<comments>http://dev.enekoalonso.com/2010/05/22/more-websockets-now-with-python/#comments</comments>
		<pubDate>Sun, 23 May 2010 06:41:27 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[websocket]]></category>
		<category><![CDATA[websockets]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=576</guid>
		<description><![CDATA[A couple of weeks ago, Tim and I worked on a little game/demo using WebSockets and C# (I haven&#8217;t been able to put it online since I do not have a Windows server). It was a lot of fun and we were able to see the potential of WebSockets and how much internet can will [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago, <a href="http://twitter.com/SkullDuggerT">Tim</a> and I worked on a <a href="http://dev.enekoalonso.com/2010/05/03/playing-with-websockets/">little game/demo using WebSockets and C#</a> (I haven&#8217;t been able to put it online since I do not have a Windows server). It was a lot of fun and we were able to see the potential of WebSockets and how much internet <del datetime="2010-05-23T06:09:54+00:00">can</del> will change in the next few years because of them.</p>
<p>Today I spent a couple of hours researching and implementing a WebSocket solution that I could run in my linux servers, and I found this very nice tutorial for creating a Python WebSockets server: <a href="http://yz.mit.edu/wp/web-sockets-tutorial-with-simple-python-server/">http://yz.mit.edu/wp/web-sockets-tutorial-with-simple-python-server/</a></p>
<p>So I took that code and modified to create a very, very basic chat, that broadcasts received messages to all connected clients. You can try it here (as long as the python server is still up): <a href="http://enekoalonso.com/research/html5/websockets/python/">http://enekoalonso.com/research/html5/websockets/python/</a></p>
<p>Here is the client code:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> form = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&#39;form&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> msg = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&#39;msg&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> output = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&#39;serveroutput&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> s = <span class="kw2">new</span> WebSocket<span class="br0">&#40;</span><span class="st0">&quot;ws://&quot;</span>+window.<span class="me1">location</span>.<span class="me1">hostname</span>+<span class="st0">&quot;:9876/&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;s.<span class="me1">onopen</span> = <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;opened&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; out<span class="br0">&#40;</span><span class="st0">&#39;Connected.&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;s.<span class="me1">onclose</span> = <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;closed&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; out<span class="br0">&#40;</span><span class="st0">&#39;Connection closed.&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;s.<span class="me1">onmessage</span> = <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;got: &quot;</span> + e.<span class="me1">data</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; out<span class="br0">&#40;</span>e.<span class="me1">data</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;form.<span class="me1">onsubmit</span> = <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; e.<span class="me1">preventDefault</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; msg.<span class="me1">value</span> = <span class="st0">&#39;&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; window.<span class="me1">scrollTop</span> = window.<span class="me1">scrollHeight</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">function</span> sendMsg<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; s.<span class="me1">send</span><span class="br0">&#40;</span>msg.<span class="me1">value</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">function</span> out<span class="br0">&#40;</span>text<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> el = document.<span class="me1">createElement</span><span class="br0">&#40;</span><span class="st0">&#39;p&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; el.<span class="me1">innerHTML</span> = text;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; output.<span class="me1">appendChild</span><span class="br0">&#40;</span>el<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;msg.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>And the server code:</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/env python</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">socket</span>, <span class="kw3">threading</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># httphost = &quot;localhost:8888&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># sockethost = &quot;localhost:9876&quot;</span></div>
</li>
<li class="li1">
<div class="de1">httphost = <span class="st0">&quot;enekoalonso.com&quot;</span></div>
</li>
<li class="li1">
<div class="de1">sockethost = <span class="st0">&quot;enekoalonso.com:9876&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> handle<span class="br0">&#40;</span>s, addr<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; handsake = <span class="st0">&quot;HTTP/1.1 101 Web Socket Protocol Handshake<span class="es0">\r</span><span class="es0">\n</span>Upgrade: WebSocket<span class="es0">\r</span><span class="es0">\n</span>Connection: Upgrade<span class="es0">\r</span><span class="es0">\n</span>WebSocket-Origin: http://%s<span class="es0">\r</span><span class="es0">\n</span>WebSocket-Location: ws://%s/<span class="es0">\r</span><span class="es0">\n</span>WebSocket-Protocol: sample<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>httphost, sockethost<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; s.<span class="me1">send</span><span class="br0">&#40;</span>handsake<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; data = s.<span class="me1">recv</span><span class="br0">&#40;</span><span class="nu0">1024</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; lock = <span class="kw3">threading</span>.<span class="me1">Lock</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">while</span> <span class="nu0">1</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; data = s.<span class="me1">recv</span><span class="br0">&#40;</span><span class="nu0">1024</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span> data: <span class="kw1">break</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&#39;Data from&#39;</span>, addr, <span class="st0">&#39;:&#39;</span>, data</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; lock.<span class="me1">acquire</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#91;</span>conn.<span class="me1">send</span><span class="br0">&#40;</span>data<span class="br0">&#41;</span> <span class="kw1">for</span> conn <span class="kw1">in</span> clients<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; lock.<span class="me1">release</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">print</span> <span class="st0">&#39;Client closed:&#39;</span>, addr</div>
</li>
<li class="li1">
<div class="de1">&nbsp; lock.<span class="me1">acquire</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; clients.<span class="me1">remove</span><span class="br0">&#40;</span>s<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; lock.<span class="me1">release</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; s.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> start_server<span class="br0">&#40;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp;s = <span class="kw3">socket</span>.<span class="kw3">socket</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;s.<span class="me1">setsockopt</span><span class="br0">&#40;</span><span class="kw3">socket</span>.<span class="me1">SOL_SOCKET</span>, <span class="kw3">socket</span>.<span class="me1">SO_REUSEADDR</span>, <span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;s.<span class="me1">bind</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="st0">&#39;&#39;</span>, <span class="nu0">9876</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;s.<span class="me1">listen</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">while</span> <span class="nu0">1</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;conn, addr = s.<span class="me1">accept</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">print</span> <span class="st0">&#39;Connected by&#39;</span>, addr</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;clients.<span class="me1">append</span><span class="br0">&#40;</span>conn<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">threading</span>.<span class="me1">Thread</span><span class="br0">&#40;</span>target = handle, args = <span class="br0">&#40;</span>conn,addr<span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">clients = <span class="br0">&#91;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">start_server<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Check the live demo (be aware WebSockets are only supported by Google Chrome right now): <a href="http://enekoalonso.com/research/html5/websockets/python/">http://enekoalonso.com/research/html5/websockets/python/</a><br />
Open a few tabs and send some text. You should see it appearing in all of them. It will also work if you open the page in multiple browser windows or even if you open the page in different computers.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>May 3, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/03/playing-with-websockets/" title="Playing with WebSockets">Playing with WebSockets</a> (2)</li><li>May 6, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/06/tech-talks-at-level-studios/" title="Tech talks at LEVEL Studios">Tech talks at LEVEL Studios</a> (0)</li><li>February 19, 2010 -- <a href="http://dev.enekoalonso.com/2010/02/19/having-fun-with-mooml-and-twitter/" title="Having fun with Mooml &#038; Twitter">Having fun with Mooml &#038; Twitter</a> (0)</li><li>August 18, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/18/little-tricks-repeating-strings-in-javascript-python/" title="Little tricks: repeating strings in Javascript &#038; Python">Little tricks: repeating strings in Javascript &#038; Python</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/05/22/more-websockets-now-with-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Performance matters</title>
		<link>http://dev.enekoalonso.com/2010/05/16/performance-matters/</link>
		<comments>http://dev.enekoalonso.com/2010/05/16/performance-matters/#comments</comments>
		<pubDate>Sun, 16 May 2010 18:36:24 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[check]]></category>
		<category><![CDATA[checking]]></category>
		<category><![CDATA[closure]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[parameter]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[runtime]]></category>
		<category><![CDATA[value]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=543</guid>
		<description><![CDATA[I just read this on an email from a Google&#8217;s Closure developer: Adding runtime checks for invalid usage is something we have policy against. It adds to the code size as well as to the runtime cost. I totally agree. Developers should be responsible for their usage of APIs or third party libraries, while these [...]]]></description>
			<content:encoded><![CDATA[<p>I just read this on an email <a href="http://groups.google.com/group/closure-library-discuss/msg/15fae0a2aee76721">from a Google&#8217;s Closure developer</a>:</p>
<blockquote><p>Adding runtime checks for invalid usage is something we have policy against. It adds to the code size as well as to the runtime cost.</p></blockquote>
<p>I totally agree. Developers should be responsible for their usage of APIs or third party libraries, while these should focus on working as efficient as possible given the correct parameters. Being Javascript a non-strongly-typed language, checking the parameters passed to every function are right at runtime would be a huge overkill.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>March 15, 2010 -- <a href="http://dev.enekoalonso.com/2010/03/15/more-updates-to-mooml-coming-soon/" title="More updates to Mooml coming soon">More updates to Mooml coming soon</a> (0)</li><li>January 28, 2010 -- <a href="http://dev.enekoalonso.com/2010/01/28/dojo-y-yo/" title="Dojo y yo">Dojo y yo</a> (0)</li><li>May 6, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/06/tech-talks-at-level-studios/" title="Tech talks at LEVEL Studios">Tech talks at LEVEL Studios</a> (0)</li><li>January 28, 2010 -- <a href="http://dev.enekoalonso.com/2010/01/28/things-to-do/" title="Things to do">Things to do</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/05/16/performance-matters/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Awesome! Dinner for Spanish developers at Google IO 2010</title>
		<link>http://dev.enekoalonso.com/2010/05/16/awesome-dinner-for-spanish-developers-at-google-io-2010/</link>
		<comments>http://dev.enekoalonso.com/2010/05/16/awesome-dinner-for-spanish-developers-at-google-io-2010/#comments</comments>
		<pubDate>Sun, 16 May 2010 18:03:28 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[cena]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[dinner]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[io2010]]></category>
		<category><![CDATA[spain]]></category>
		<category><![CDATA[spanish]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=539</guid>
		<description><![CDATA[Great news. Google will be sponsoring a dinner for all Spanish developers at Google IO 2010: http://programa-con-google.blogspot.com/2010/05/vienes-al-google-i0.html We will be driving from SLO on Tuesday afternoon, but I&#8217;m not sure we would get there by 8pm. I really hope I can make it! Related Posts:April 27, 2010 -- My Google IO 2010 Schedule (0)July 30, [...]]]></description>
			<content:encoded><![CDATA[<p>Great news. Google will be sponsoring a dinner for all Spanish developers at Google IO 2010:<br />
<a href="http://programa-con-google.blogspot.com/2010/05/vienes-al-google-i0.html">http://programa-con-google.blogspot.com/2010/05/vienes-al-google-i0.html</a></p>
<p>We will be driving from SLO on Tuesday afternoon, but I&#8217;m not sure we would get there by 8pm. I really hope I can make it!</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>April 27, 2010 -- <a href="http://dev.enekoalonso.com/2010/04/27/my-google-io-2010-schedule/" title="My Google IO 2010 Schedule">My Google IO 2010 Schedule</a> (0)</li><li>July 30, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/30/creating-qr-codes-with-google-charts-api/" title="Creating QR Codes with Google Charts API">Creating QR Codes with Google Charts API</a> (1)</li><li>May 16, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/16/performance-matters/" title="Performance matters">Performance matters</a> (2)</li><li>May 6, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/06/tech-talks-at-level-studios/" title="Tech talks at LEVEL Studios">Tech talks at LEVEL Studios</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/05/16/awesome-dinner-for-spanish-developers-at-google-io-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interesting JSON vulnerability (old stuff)</title>
		<link>http://dev.enekoalonso.com/2010/05/14/interesting-json-vulnerability-old-stuff/</link>
		<comments>http://dev.enekoalonso.com/2010/05/14/interesting-json-vulnerability-old-stuff/#comments</comments>
		<pubDate>Fri, 14 May 2010 21:00:56 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[constructor]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[issue]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[vulnerability]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=532</guid>
		<description><![CDATA[Somebody at work passed this article about an interesting vulnerability in web APIs that use JSON. The exploit combines Cross Site Request Forgery (CSRF) with a JSON Array hack allowing an evil site to grab sensitive user data from an unsuspecting user. The hack involves redefining the Array constructor, which is totally legal in Javascript. http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx [...]]]></description>
			<content:encoded><![CDATA[<p>Somebody at work passed this article about an interesting vulnerability in web APIs that use JSON.</p>
<blockquote><p>The exploit combines <a title="Cross Site Request Forgery" href="http://www.codinghorror.com/blog/archives/001175.html">Cross Site Request Forgery</a> (CSRF) with a JSON Array hack allowing an evil site to grab sensitive user data from an unsuspecting user. The hack involves redefining the Array constructor, which is totally legal in Javascript.</p></blockquote>
<p><a href="http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx">http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx</a></p>
<p>I&#8217;ve found a while ago that you can put pretty much any URL on a script tag and the browser will download the content right away, whether it&#8217;s javascript or not, as long as the type attribute in the tag is set to &#8216;text/javascript&#8217;.  But although browsers download the URL content and place it inside the script tag, you can&#8217;t get to the content from Javascript (using innerHTML, for instance). Or can you? Apparently, Firebug can, at least on the HTML tab. I&#8217;m not sure if Firebug has direct access to the DOM, other than through Javascript, but I hope that is the case.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>August 12, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/12/little-tricks-concatenating-arrays-in-javascript/" title="Little tricks: concatenating arrays in Javascript">Little tricks: concatenating arrays in Javascript</a> (4)</li><li>February 19, 2010 -- <a href="http://dev.enekoalonso.com/2010/02/19/having-fun-with-mooml-and-twitter/" title="Having fun with Mooml &#038; Twitter">Having fun with Mooml &#038; Twitter</a> (0)</li><li>August 27, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/27/link-whirlpool-js/" title="Link: Whirlpool JS">Link: Whirlpool JS</a> (0)</li><li>August 18, 2010 -- <a href="http://dev.enekoalonso.com/2010/08/18/titanium-developer-love-and-hate-part-ii/" title="Titanium Developer: love and hate (Part II)">Titanium Developer: love and hate (Part II)</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/05/14/interesting-json-vulnerability-old-stuff/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tech talks at LEVEL Studios</title>
		<link>http://dev.enekoalonso.com/2010/05/06/tech-talks-at-level-studios/</link>
		<comments>http://dev.enekoalonso.com/2010/05/06/tech-talks-at-level-studios/#comments</comments>
		<pubDate>Thu, 06 May 2010 15:51:16 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[closure]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[level]]></category>
		<category><![CDATA[qunit]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[studios]]></category>
		<category><![CDATA[talk]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[websocket]]></category>
		<category><![CDATA[websockets]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=527</guid>
		<description><![CDATA[Today we have a Tech Meeting at LEVEL Studios and I&#8217;ll be doing a quick demo of some tools we have been using in our current project, to help during our development: Using Closure Compiler to detect Javascript syntax errors and remove warnings. Using QUnit to test a REST api The power of WebSockets and [...]]]></description>
			<content:encoded><![CDATA[<p>Today we have a Tech Meeting at <a href="http://level-studios.com/">LEVEL Studios</a> and I&#8217;ll be doing a quick demo of some tools we have been using in our current project, to help during our development:</p>
<ul>
<li>Using <a href="http://code.google.com/closure/compiler/">Closure Compiler</a> to detect Javascript syntax errors and remove warnings.</li>
<li>Using <a href="http://docs.jquery.com/QUnit">QUnit</a> to test a REST api</li>
<li>The power of <a href="http://en.wikipedia.org/wiki/Web_Sockets">WebSockets</a> and how the way browsers and servers interact with each other will change in the future.</li>
</ul>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>May 22, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/22/more-websockets-now-with-python/" title="More WebSockets, now with Python!">More WebSockets, now with Python!</a> (1)</li><li>March 15, 2010 -- <a href="http://dev.enekoalonso.com/2010/03/15/more-updates-to-mooml-coming-soon/" title="More updates to Mooml coming soon">More updates to Mooml coming soon</a> (0)</li><li>January 28, 2010 -- <a href="http://dev.enekoalonso.com/2010/01/28/things-to-do/" title="Things to do">Things to do</a> (0)</li><li>July 30, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/30/creating-qr-codes-with-google-charts-api/" title="Creating QR Codes with Google Charts API">Creating QR Codes with Google Charts API</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/05/06/tech-talks-at-level-studios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Playing with WebSockets</title>
		<link>http://dev.enekoalonso.com/2010/05/03/playing-with-websockets/</link>
		<comments>http://dev.enekoalonso.com/2010/05/03/playing-with-websockets/#comments</comments>
		<pubDate>Tue, 04 May 2010 04:20:37 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[connection]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[studio]]></category>
		<category><![CDATA[tpc]]></category>
		<category><![CDATA[visual]]></category>
		<category><![CDATA[websocket]]></category>
		<category><![CDATA[websockets]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=521</guid>
		<description><![CDATA[Today I spent some time with Tim at work, playing with WebSockets, a new HTML5 feature that only Google Chrome supports so far. WebSockets allow browsers to create and maintain open direct TCP connections to the server, allowing instant communication in both directions. This means that ajax polling is no longer needed to get updates [...]]]></description>
			<content:encoded><![CDATA[<p>Today I spent some time with Tim at work, playing with <a href="http://en.wikipedia.org/wiki/Web_Sockets">WebSockets</a>, a new <a href="http://dev.w3.org/html5/websockets/">HTML5 feature</a> that only Google Chrome supports so far. WebSockets allow browsers to create and maintain open direct TCP connections to the server, allowing instant communication in both directions. This means that ajax polling is no longer needed to get updates from the server. Instead, the server can send a message directly to the browser at any point in time while the connection is open. Awesome!</p>
<p style="text-align: left;">Since we are currently working on a C# .Net project, we searched Internet and found this very cool example that we took as a base for a little multiuser game we were working on today: <a href="http://www.codeproject.com/KB/webservices/c_sharp_web_socket_server.aspx">WebSocket Chat</a></p>
<p style="text-align: left;"><a href="http://www.codeproject.com/KB/webservices/c_sharp_web_socket_server.aspx"></a><br />
<a href="http://www.codeproject.com/KB/webservices/c_sharp_web_socket_server.aspx"><img class="aligncenter" src="http://www.codeproject.com/KB/webservices/c_sharp_web_socket_server/WebSocketServer.png" alt="" /></a></p>
<p>The potential of WebSockets is incredible, specially for online games and multiuser applications.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>May 22, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/22/more-websockets-now-with-python/" title="More WebSockets, now with Python!">More WebSockets, now with Python!</a> (1)</li><li>June 8, 2010 -- <a href="http://dev.enekoalonso.com/2010/06/08/change-in-websockets-handshake-protocol/" title="Change in WebSockets handshake protocol">Change in WebSockets handshake protocol</a> (0)</li><li>May 6, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/06/tech-talks-at-level-studios/" title="Tech talks at LEVEL Studios">Tech talks at LEVEL Studios</a> (0)</li><li>February 18, 2010 -- <a href="http://dev.enekoalonso.com/2010/02/18/google-fiber-in-san-luis-obispo-that-would-be-awesome/" title="Google Fiber in San Luis Obispo? That would be awesome!">Google Fiber in San Luis Obispo? That would be awesome!</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/05/03/playing-with-websockets/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mooml 1.2.3 &#8211; Bye, bye, with()</title>
		<link>http://dev.enekoalonso.com/2010/04/28/mooml-1-2-3-bye-bye-with/</link>
		<comments>http://dev.enekoalonso.com/2010/04/28/mooml-1-2-3-bye-bye-with/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 04:26:54 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[engine]]></category>
		<category><![CDATA[eval]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mooml]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[version]]></category>
		<category><![CDATA[with]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=517</guid>
		<description><![CDATA[Mooml 1.1 was the first version of Mooml that didn&#8217;t rely on eval(), a javascript function that causes lot&#8217;s of problems when not used properly, but that also prevent minimizers and compilers like Closure to generate valid code. The new Mooml 1.2.3 release also gets rid of with(), which will no longer be used to [...]]]></description>
			<content:encoded><![CDATA[<p>Mooml 1.1 was the first version of Mooml that didn&#8217;t rely on eval(), a javascript function that causes lot&#8217;s of problems when not used properly, but that also prevent minimizers and compilers like Closure to generate valid code.</p>
<p>The new Mooml 1.2.3 release also gets rid of with(), which will no longer be used to render Mooml templates. Instead, templates are prepared when they get registered, so all template tag functions (div(), span(), p()) get replaced by calls to the Mooml engine. Although this means there will be a performance hit when registering templates, it also means templates will render faster. As a plus, template parameter names will no longer conflict with template tag function names. Thus, you can now have a template with a parameter named &#8216;div&#8217; and the template wont fail rendering.</p>
<p>Download: http://mootools.net/forge/p/mooml<br />
Source: http://github.com/eneko/mooml</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>March 15, 2010 -- <a href="http://dev.enekoalonso.com/2010/03/15/more-updates-to-mooml-coming-soon/" title="More updates to Mooml coming soon">More updates to Mooml coming soon</a> (0)</li><li>March 24, 2010 -- <a href="http://dev.enekoalonso.com/2010/03/24/mooml-1-1-no-more-eval-say-hi-to-mooml-template-and-mooml-templates/" title="Mooml 1.1 &#8211; No more eval(), say Hi to Mooml.Template and Mooml.Templates">Mooml 1.1 &#8211; No more eval(), say Hi to Mooml.Template and Mooml.Templates</a> (0)</li><li>February 19, 2010 -- <a href="http://dev.enekoalonso.com/2010/02/19/having-fun-with-mooml-and-twitter/" title="Having fun with Mooml &#038; Twitter">Having fun with Mooml &#038; Twitter</a> (0)</li><li>February 1, 2010 -- <a href="http://dev.enekoalonso.com/2010/02/01/mooml-globalize-mooml-template-functions-going-global/" title="Mooml.globalize(): Mooml template functions going global">Mooml.globalize(): Mooml template functions going global</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/04/28/mooml-1-2-3-bye-bye-with/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Google IO 2010 Schedule</title>
		<link>http://dev.enekoalonso.com/2010/04/27/my-google-io-2010-schedule/</link>
		<comments>http://dev.enekoalonso.com/2010/04/27/my-google-io-2010-schedule/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 05:27:36 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[googleio]]></category>
		<category><![CDATA[io2010]]></category>
		<category><![CDATA[plan]]></category>
		<category><![CDATA[san francisco]]></category>
		<category><![CDATA[schedule]]></category>
		<category><![CDATA[sessions]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=515</guid>
		<description><![CDATA[The schedule for Google IO 2010 has been published. I am going through the list of talks thinking on which ones I am more interested, and here are my candidates so far: Wednesday May 19 10:45am &#8211; Opening up Closure Library 12:30pm &#8211; Beyond JavaScript: programming the web with native code 1:45pm &#8211; Map once, [...]]]></description>
			<content:encoded><![CDATA[<p>The schedule for Google IO 2010 has been published. I am going through the list of talks thinking on which ones I am more interested, and here are my candidates so far:</p>
<h2>Wednesday May 19</h2>
<p>10:45am &#8211; <a href="http://code.google.com/events/io/2010/sessions/closure-library.html">Opening up Closure Library</a><br />
12:30pm &#8211; <a href="http://code.google.com/events/io/2010/sessions/native-code-chrome.html">Beyond JavaScript: programming the web with native code</a><br />
1:45pm &#8211; <a href="http://code.google.com/events/io/2010/sessions/map-once-map-anywhere-geospatial-apps.html">Map once, map anywhere: Developing geospatial applications for both desktop and mobile</a><br />
3:00pm &#8211; <a href="http://code.google.com/events/io/2010/sessions/chrome-os-apps.html">Developing HTML5 Applications for Google Chrome and Google Chrome OS</a><br />
4:15pm &#8211; <a href="http://code.google.com/events/io/2010/sessions/unleash-map-data-cloud-computing-geospatial-apps.html">Unleash your map data: Cloud computing for geospatial applications</a></p>
<h2>Thursday May 20</h2>
<p>10:15am &#8211; <a href="http://code.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html">Developing RESTful Android applications</a><br />
11:30am &#8211; <a href="http://code.google.com/events/io/2010/sessions/lose-friends-alienate-people-engineering-leadership.html">How to lose friends and alienate people: The joys of engineering leadership</a><br />
1:00pm &#8211; <a href="http://code.google.com/events/io/2010/sessions/gwt-html5.html">GWT + HTML5 can do what?!</a><br />
2:15pm &#8211; <a href="http://code.google.com/events/io/2010/sessions/fireside-chat-social-web.html">Fireside chat with the Social Web team</a><br />
3:30pm &#8211; <a href="http://code.google.com/events/io/2010/sessions/how-google-builds-apis.html">How Google builds APIs</a><br />
4:45pm &#8211; <a href="http://code.google.com/events/io/2010/sessions/html5-status-chrome.html">HTML5 status update</a></p>
<p>Sad I can&#8217;t divide and go to all sessions ;)</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>May 16, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/16/awesome-dinner-for-spanish-developers-at-google-io-2010/" title="Awesome! Dinner for Spanish developers at Google IO 2010">Awesome! Dinner for Spanish developers at Google IO 2010</a> (0)</li><li>July 30, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/30/creating-qr-codes-with-google-charts-api/" title="Creating QR Codes with Google Charts API">Creating QR Codes with Google Charts API</a> (1)</li><li>May 16, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/16/performance-matters/" title="Performance matters">Performance matters</a> (2)</li><li>May 6, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/06/tech-talks-at-level-studios/" title="Tech talks at LEVEL Studios">Tech talks at LEVEL Studios</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/04/27/my-google-io-2010-schedule/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
