<?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>JulioBiason.Net &#187; Code</title>
	<atom:link href="http://juliobiason.net/category/code/feed/" rel="self" type="application/rss+xml" />
	<link>http://juliobiason.net</link>
	<description>Old-school coder living in a 2.0 development world.</description>
	<lastBuildDate>Thu, 08 Jul 2010 10:43:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>&#8220;What if&#8221; iterable.join()</title>
		<link>http://juliobiason.net/2010/06/07/what-if-iterable-join/</link>
		<comments>http://juliobiason.net/2010/06/07/what-if-iterable-join/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 12:20:55 +0000</pubDate>
		<dc:creator>Julio Biason</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[join]]></category>
		<category><![CDATA[list]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[str]]></category>

		<guid isPermaLink="false">http://juliobiason.net/?p=2160</guid>
		<description><![CDATA[&#8230;or &#8220;Let&#8217;s keep floging this dead horse&#8221;&#8230; Over the weekend I got some reactions over the str.join() vs list.join(). Well, just for fun, this morning I played &#8220;what if&#8221; in my head. So, let&#8217;s say every iterable got a join() method. So you could &#62;&#62;&#62; a = ['s', 'l', 'o', 'w'] &#62;&#62;&#62; a.join('') slow Exactly [...]]]></description>
			<content:encoded><![CDATA[<p><sup>&#8230;or &#8220;Let&#8217;s keep floging this dead horse&#8221;&#8230;</sup></p>
<p>Over the weekend I got some reactions over the str.join() vs list.join(). Well, just for fun, this morning I played &#8220;what if&#8221; in my head.</p>
<p>So, let&#8217;s say every iterable got a join() method. So you could</p>
<p><code>&gt;&gt;&gt; a = ['s', 'l', 'o', 'w']<br />
&gt;&gt;&gt; a.join('')<br />
slow</code></p>
<p>Exactly as JavaScript does. Mkay. A could even be a tuple and would still work. Or, stupidly enough, a string and <em>still</em> work. But, then, what would be the first thing that would cross you mind when you saw this code for the first time:</p>
<p><code>&gt;&gt;&gt; a = ['s', 'l', 'o', 'w']<br />
&gt;&gt;&gt; b = ['r', 'u', 'l', 'z']<br />
&gt;&gt;&gt; c = a.join(b)</code></p>
<p>You have a list in one side and a list in the other with a &#8220;join&#8221; method. List-join-list. Well, I&#8217;d expect another list with <tt>['s', 'l', 'o', 'w', 'r', 'u', 'l', 'z']</tt> which is what <tt>extend()</tt> does.</p>
<p>But let&#8217;s return to the original str.join(): What it does is, join the iterable in the parameters using &#8220;self&#8221;. Mkay, so what would be:</p>
<p><code>c = ['r', ['s', 'l', 'o', 'w'], 'u', ['s', 'l', 'o', 'w'], 'l', ['s', 'l', 'o', 'w'], 'z']</code></p>
<p>Which doesn&#8217;t make any sense.</p>
<p>Let&#8217;s go further. join() could, possible, call str() for the parameter and still react like JavaScript join(). Why? Well, as you may already know, Python have <em>dynamic typing</em> which means any variable can be used. Just to remember:</p>
<p><code>var l = ['s', 'l', 'o', 'w']<br />
var j = l.join('')</code></p>
<p>would result in &#8220;slow&#8221; in JavaScript. Mkay, so </p>
<p><code>&gt;&gt;&gt; l = ['s', 'l', 'o', 'w']<br />
&gt;&gt;&gt; r = ['r', 'u', 'l', 'z']<br />
&gt;&gt;&gt; j = l.join(r)</code></p>
<p>Would result in&#8230; guess what, <tt>"s['r', 'u', 'l', 'z']l['r', 'u', 'l', 'z']o['r', 'u', 'l', 'z']w"</tt> which, not surprisingly, <em>still doesn&#8217;t make sense</em>. Ok, if <tt>r</tt> was a simple string, it would react exactly like JavaScript. But it would be a mess with any other types. And what&#8217;s the point of dynamic typing if you force types?</p>
<p>So, str.join() not only makes code simpler and avoid some mess of monkey-patching, it also removes a greater problem: ambiguity.</p>
<p>And yes, I understand that JavaScript <tt>list.join(str)</tt> makes sense, but it still have the problem with &#8220;What about the other types? Are you a racist?&#8221;</p>
<p><em>Edit:</em> Just for curiosity, I wrote a <tt>list.join(list)</tt> code in JavaScript to see the results. Here they are for you mind-bloggling pleasure:</p>
<p><code>js&gt; var l = ['s', 'l', 'o', 'w'];<br />
js&gt; var r = ['r', 'u', 'l', 'z'];<br />
js&gt; var j = l.join(r);<br />
js&gt; j<br />
sr,u,l,zlr,u,l,zor,u,l,zw</code></p>
]]></content:encoded>
			<wfw:commentRss>http://juliobiason.net/2010/06/07/what-if-iterable-join/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python: why str.join() and not list.join()</title>
		<link>http://juliobiason.net/2010/06/05/python-why-str-join-and-not-list-join/</link>
		<comments>http://juliobiason.net/2010/06/05/python-why-str-join-and-not-list-join/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 12:55:41 +0000</pubDate>
		<dc:creator>Julio Biason</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[iterable]]></category>
		<category><![CDATA[join]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[str]]></category>

		<guid isPermaLink="false">http://juliobiason.net/?p=2156</guid>
		<description><![CDATA[or &#8220;Slowpoke finally understands Python When I was in Australia, one guy kept asking why Python had the &#8220;horrible&#8221; (in his opinion) str.join() instead of obvious (in his opinion) list.join()? After working with JavaScript for a while, I can understand his opinion: In JS, you have a list.join() of sorts and it makes a hell [...]]]></description>
			<content:encoded><![CDATA[<p><sup>or &#8220;Slowpoke finally understands Python</sup></p>
<p>When I was in Australia, one guy kept asking why Python had the &#8220;horrible&#8221; (in his opinion) str.join() instead of obvious (in his opinion) list.join()?</p>
<p>After working with JavaScript for a while, I can understand his opinion: In JS, you have a list.join() of sorts and it makes a hell lot of sense.</p>
<p>But, then again, this morning it finally hit me: str.join() uses an <em>iterable</em> object as parameter, so <em>any</em> iterable object will work. For example:</p>
<p><code>&gt;&gt;&gt; p = 'python'<br />
&gt;&gt;&gt; '-'.join(p)<br />
'p-y-t-h-o-n'<br />
&gt;&gt;&gt;</code></p>
<p>Ok, this is understandable, but why not have a list.join() too? Well, this would mean that every iterable object would have to have a join() method (str.join(), tuple.join(), dict.join(), list.join() and all the new iterable objects that appeared in Python 3.0.) Since the C API for Python doesn&#8217;t allow object hierarchies (and all base types <em>are</em> implemented in C), the same method would have to be implemented over and over again. Not only that, but you would have several different ways to join() stuff instead of one, (now) obvious way.</p>
<p>Another way to fix this would monkey-patch every object to have a join() method, but that&#8217;s not the Python way. Monkey-patch is <em>never</em> the Python way.</p>
<p>And the same rule applies to len(): it takes <em>any</em> iterable due the same reason.</p>
]]></content:encoded>
			<wfw:commentRss>http://juliobiason.net/2010/06/05/python-why-str-join-and-not-list-join/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mitter 1.0.0 alpha 7 &#8220;Anything and everything in my power.&#8221; released</title>
		<link>http://juliobiason.net/2010/04/23/mitter-1-0-0-alpha-7-anything-and-everything-in-my-power-released/</link>
		<comments>http://juliobiason.net/2010/04/23/mitter-1-0-0-alpha-7-anything-and-everything-in-my-power-released/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 19:45:01 +0000</pubDate>
		<dc:creator>Julio Biason</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[mitter]]></category>
		<category><![CDATA[1.0]]></category>
		<category><![CDATA[alpha7]]></category>

		<guid isPermaLink="false">http://juliobiason.net/?p=2131</guid>
		<description><![CDATA[Following the continual improvement of Mitter, alpha 7 is now released. THIS IS AN ALPHA RELEASE! We want to test most of the new features, code and interface to be sure that things are going to the right way. Some features (like DBus notifications) are disabled at this point to make sure the base code [...]]]></description>
			<content:encoded><![CDATA[<p>Following the continual improvement of Mitter, alpha 7 is now released.</p>
<p><em><b>THIS IS AN ALPHA RELEASE!</b></em> We want to test most of the new features, code and interface to be sure that things are going to the right way. Some features (like DBus notifications) are disabled at this point to make sure the base code works without a problem. If you want to help, remember to run Mitter from a terminal with the “-d” option (to display debug messages.) Any help is welcome.</p>
<ul>
<li>Fixed a crash (just internal, Mitter would still run fine) when deleting messages.</li>
<li>Fixed an issue with Python 2.5. It seems that, from time to time, I add some feature that only exists in Python 2.6. From this point, I&#8217;ll try to make Mitter compatible only with the previous minor release from the current stable version. So, when Python 2.7 is launched officially, Mitter will require at least Python 2.6.</li>
<li>Added support for coloring Hashtags, users and Groups (not a Twitter feature, but it&#8217;s used in Identi.ca, so I&#8217;m just paving the way for future networks.)</li>
<li>The statusbar will try to keep more important messages displayed. Smaller updates (i.e. &#8220;Message deleted&#8221;) will appear for about 10 seconds and then disappear, showing the time to for next update.</li>
</ul>
<p>Download details and full list of of changes in this release are available in <a href="http://code.google.com/p/mitter/">project home page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://juliobiason.net/2010/04/23/mitter-1-0-0-alpha-7-anything-and-everything-in-my-power-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mitter 1.0.0 alpha 6 &#8220;Anything within the law.&#8221; released</title>
		<link>http://juliobiason.net/2010/04/16/mitter-1-0-0-alpha-6-anything-within-the-law-released/</link>
		<comments>http://juliobiason.net/2010/04/16/mitter-1-0-0-alpha-6-anything-within-the-law-released/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 12:12:35 +0000</pubDate>
		<dc:creator>Julio Biason</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[mitter]]></category>
		<category><![CDATA[1.0]]></category>
		<category><![CDATA[alpha6]]></category>

		<guid isPermaLink="false">http://juliobiason.net/?p=2128</guid>
		<description><![CDATA[Following the continual improvement of Mitter, alpha 6 is now released. THIS IS AN ALPHA RELEASE! We want to test most of the new features, code and interface to be sure that things are going to the right way. Some features (like DBus notifications) are disabled at this point to make sure the base code [...]]]></description>
			<content:encoded><![CDATA[<p>Following the continual improvement of Mitter, alpha 6 is now released.</p>
<p><em><b>THIS IS AN ALPHA RELEASE!</b></em> We want to test most of the new features, code and interface to be sure that things are going to the right way. Some features (like DBus notifications) are disabled at this point to make sure the base code works without a problem. If you want to help, remember to run Mitter from a terminal with the “-d” option (to display debug messages.) Any help is welcome.</p>
<ul>
<li>Added better support for reporting errors. Some things are still missing, but most of the errors should now be properly reported (instead of just pointing that &#8220;something went wrong.&#8221;)</li>
<li>Fixed a problem with Mitter start up when there are not networks set up.</li>
</ul>
<p>Download details and full list of of changes in this release are available in <a href="http://code.google.com/p/mitter/">project home page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://juliobiason.net/2010/04/16/mitter-1-0-0-alpha-6-anything-within-the-law-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mitter 1.0.0alpha 5 &#8220;I think I&#8217;ll have a drink.&#8221; released</title>
		<link>http://juliobiason.net/2010/04/12/mitter-1-0-0alpha-5-i-think-ill-have-a-drink-released/</link>
		<comments>http://juliobiason.net/2010/04/12/mitter-1-0-0alpha-5-i-think-ill-have-a-drink-released/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 12:42:44 +0000</pubDate>
		<dc:creator>Julio Biason</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[mitter]]></category>
		<category><![CDATA[1.0]]></category>
		<category><![CDATA[alpha5]]></category>

		<guid isPermaLink="false">http://juliobiason.net/?p=2125</guid>
		<description><![CDATA[Following the continual improvement of Mitter, alpha 5 is now released. THIS IS AN ALPHA RELEASE We want to test most of the new features, code and interface to be sure that things are going to the right way. Some features (like DBus notifications) are disabled at this point to make sure the base code [...]]]></description>
			<content:encoded><![CDATA[<p>Following the continual improvement of Mitter, alpha 5 is now released.</p>
<p><b><em>THIS IS AN ALPHA RELEASE</em></b> We want to test most of the new features, code and interface to be sure that things are going to the right way. Some features (like DBus notifications) are disabled at this point to make sure the base code works without a problem. If you want to help, remember to run Mitter from a terminal with the &#8220;-d&#8221; option (to display debug messages.) Any help is welcome.</p>
<ul>
<li>This is the second major code rewrite of Mitter. The first rewrite added support for multiple networks; this rewrite split the PyGTK into some more files, to make it easier to manage it in the future.</li>
<li>The update area is hidden from the start from now on. To post an update, you need to select &#8220;new message&#8221; or simply press &#8220;Enter&#8221;. The update area will then appear. This gives more area to see the messages.</li>
<li>Fixed a couple of problems with Python 2.5 (I accidentally added a feature that only exists on Python 2.6.)</li>
<li>Fixed a problem when marking all messages as read.</li>
<li>Added a simple &#8220;ago&#8221; in the message time text.</li>
<li>The number of unread messages now can be displayed in the window title (check the CHEAT-CODES file if you would like to change the format.)</li>
</ul>
<p>And yes, the plan was to make Alpha 4 the last of the alpha releases and add oAuth support. Problem is, oAuth is a mess to implement and absolutely impossible to find a good document about it. Since it was taking too long, I decided to fix a few other issues. I won&#8217;t make any kinda of promise this time. ;)</p>
<p>Download details and full list of of changes in this release are available in <a href="http://code.google.com/p/mitter/">project home page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://juliobiason.net/2010/04/12/mitter-1-0-0alpha-5-i-think-ill-have-a-drink-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mitter 1.0.0alpha4 &#8220;You&#8217;re muckin&#8217; with a G here, pal!&#8221;</title>
		<link>http://juliobiason.net/2010/01/24/mitter-1-0-0alpha4-youre-muckin-with-a-g-here-pal/</link>
		<comments>http://juliobiason.net/2010/01/24/mitter-1-0-0alpha4-youre-muckin-with-a-g-here-pal/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 09:34:34 +0000</pubDate>
		<dc:creator>Julio Biason</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[mitter]]></category>
		<category><![CDATA[1.0]]></category>
		<category><![CDATA[alpha4]]></category>

		<guid isPermaLink="false">http://juliobiason.net/?p=2103</guid>
		<description><![CDATA[Following the continual improvement of Mitter, alpha 4 is now released. THIS IS AN ALPHA RELEASE! We want to test most of the new features and code to be sure that things are going to the right way. Some features (like DBus notifications) were disabled at this point to make sure the base code works [...]]]></description>
			<content:encoded><![CDATA[<p>Following the continual improvement of Mitter, alpha 4 is now released.</p>
<p><em><b>THIS IS AN ALPHA RELEASE!</b></em> We want to test most of the new features and code to be sure that things are going to the right way. Some features (like DBus notifications) were disabled at this point to make sure the base code works without a problem. If you want to help, remember to run Mitter from a terminal with the “-d” option (to display debug messages.) Any help is welcome.</p>
<ul>
<li>Fixed an error when favouriting a message in the replies tab.</li>
<li>Fixed an error when setting up Mitter for the first time.</li>
<li>Fixed UTF8 incompatibilities when posting on Twitter.</li>
<li>Fixed an error when using the menu button (or Shift+F10).</li>
<li>Fixed the status of the message actions after an update.</li>
<li>Fixed the status icon when there are no new messages but new replies.</li>
<li>Fixed the menu so Settings is also visible.</li>
<li>Added proxy support.</li>
<li>Added priority for interfaces, so PyGTK should be chosen when running Mitter for the first time.</li>
<li>Added indicator for protected messages.</li>
<li>Added functionality to minimize Mitter to tray.</li>
<li>Added action to mark all messages as read.</li>
<li>Added a timeout for requests.</li>
<li>New Deb packaging. As Mitter, it should be considered Alpha quality and, thus, we are still testing it.<em>(deb is now available)</em></li>
</ul>
<p>This should be the last release in the alpha series. Next thing should be oAuth support for Twitter and then the beta cycle will start with a Tk interface and Identi.ca.</p>
<p>Download details and full list of of changes in this release are available in <a href="http://code.google.com/p/mitter/">project home page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://juliobiason.net/2010/01/24/mitter-1-0-0alpha4-youre-muckin-with-a-g-here-pal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mitter 1.0.0alpha3 &#8220;You&#8217;re gonna beg to talk.&#8221; released</title>
		<link>http://juliobiason.net/2010/01/10/mitter-1-0-0alpha3-youre-gonna-beg-to-talk-released/</link>
		<comments>http://juliobiason.net/2010/01/10/mitter-1-0-0alpha3-youre-gonna-beg-to-talk-released/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 13:15:17 +0000</pubDate>
		<dc:creator>Julio Biason</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[mitter]]></category>
		<category><![CDATA[1.0]]></category>
		<category><![CDATA[alpha3]]></category>
		<category><![CDATA[mitt]]></category>

		<guid isPermaLink="false">http://juliobiason.net/?p=2101</guid>
		<description><![CDATA[Following the continual improvement of Mitter, alpha 3 is now released. THIS IS AN ALPHA RELEASE! We want to test most of the new features and code to be sure that things are going to the right way. Some features (like DBus notifications) were disabled at this point to make sure the base code works [...]]]></description>
			<content:encoded><![CDATA[<p>Following the continual improvement of Mitter, alpha 3 is now released.</p>
<p><strong><em>THIS IS AN ALPHA RELEASE!</em></strong> We want to test most of the new features and code to be sure that things are going to the right way. Some features (like DBus notifications) were disabled at this point to make sure the base code works without a problem. If you want to help, remember to run Mitter from a terminal with the “-d” option (to display debug messages.) Any help is welcome.</p>
<ul>
<li>I18N: All visible strings for the user should now be marked as translatable. A bunch of scripts to keep the translations were added in the repository to help translating Mitter. Any help (testing if the translations are in the right place, new translations) are really welcome in this phase. New translations can be added in the Project Page as an Enhancement issue.
</ul>
]]></content:encoded>
			<wfw:commentRss>http://juliobiason.net/2010/01/10/mitter-1-0-0alpha3-youre-gonna-beg-to-talk-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mitter 1.0.0alpha2 &#8220;Bailiff, I want you to switch the juries.&#8221;</title>
		<link>http://juliobiason.net/2010/01/03/mitter-1-0-0alpha2-bailiff-i-want-you-to-switch-the-juries/</link>
		<comments>http://juliobiason.net/2010/01/03/mitter-1-0-0alpha2-bailiff-i-want-you-to-switch-the-juries/#comments</comments>
		<pubDate>Sun, 03 Jan 2010 20:16:55 +0000</pubDate>
		<dc:creator>Julio Biason</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[mitter]]></category>
		<category><![CDATA[1.0]]></category>
		<category><![CDATA[alpha2]]></category>

		<guid isPermaLink="false">http://juliobiason.net/?p=2097</guid>
		<description><![CDATA[Following the continual improvement of Mitter, alpha 2 is now released. THIS IS AN ALPHA RELEASE! We want to test most of the new features and code to be sure that things are going to the right way. Some features (like DBus notifications) were disabled at this point to make sure the base code works [...]]]></description>
			<content:encoded><![CDATA[<p>Following the continual improvement of Mitter, alpha 2 is now released.</p>
<p><em><b>THIS IS AN ALPHA RELEASE!</b></em> We want to test most of the new features and code to be sure that things are going to the right way. Some features (like DBus notifications) were disabled at this point to make sure the base code works without a problem. If you want to help, remember to run Mitter from a terminal with the “-d” option (to display debug messages.) Any help is welcome.</p>
<ul>
<li>General:
<ul>
<li>Added missing files in the install (via setup.py.) </li>
</ul>
</li>
<li>Twitter:
<ul>
<li>Fixed links to reposts.</li>
</ul>
</li>
<li>PyGTK:
<ul>
<li>Fixed display of names with &#8220;&#038;&#8221;.</li>
<li>While typing messages, &#8220;Del&#8221; won&#8217;t try to delete the selected message.</li>
<li>Actions on messages selected in the &#8220;Replies&#8221; now work.</li>
<li>&#8220;Replies&#8221; are marked as such in the message lists (with a &#8220;in reply to&#8221; message.)</li>
<li>Removed the &#8220;Ctrl&#8221; for sending and canceling messages. &#8220;Enter&#8221; will send the message, &#8220;Esc&#8221; will cancel.</li>
<li>Added missing libraries in the install (via setup.py.) </li>
</ul>
</li>
</ul>
<p>For the next alpha, I want to mark all strings as &#8220;translatable&#8221;, paving the way to internationalization.</p>
]]></content:encoded>
			<wfw:commentRss>http://juliobiason.net/2010/01/03/mitter-1-0-0alpha2-bailiff-i-want-you-to-switch-the-juries/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mitter 1.0.0alpha1 &#8220;Well, the Lord hates a coward.&#8221; released</title>
		<link>http://juliobiason.net/2009/12/29/mitter-1-0-0alpha1-well-the-lord-hates-a-coward-released/</link>
		<comments>http://juliobiason.net/2009/12/29/mitter-1-0-0alpha1-well-the-lord-hates-a-coward-released/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 23:28:30 +0000</pubDate>
		<dc:creator>Julio Biason</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[mitter]]></category>
		<category><![CDATA[1.0]]></category>
		<category><![CDATA[alpha1]]></category>

		<guid isPermaLink="false">http://juliobiason.net/?p=2093</guid>
		<description><![CDATA[After a long time, here is a new version of Mitter. This version should, hopefully, pave the way to the magical 1.0 release. A lot of code was rewritten to accommodate new features and fix old bugs. THIS IS AN ALPHA RELEASE! We want to test most of the new features and code to be [...]]]></description>
			<content:encoded><![CDATA[<p>After a long time, here is a new version of Mitter. This version should, hopefully, pave the way to the magical 1.0 release. A lot of code was rewritten to accommodate new features and fix old bugs.</p>
<p><strong><em>THIS IS AN ALPHA RELEASE</em></strong>! We want to test most of the new features and code to be sure that things are going to the right way. Some features (like DBus notifications) were disabled at this point to make sure the base code works without a problem. If you want to help, remember to run Mitter from a terminal with the &#8220;-d&#8221; option (to display debug messages.) Any help is welcome.</p>
<ul>
<li>New, redesigned network layer. This should make things easier for new networks.</li>
<li>New, redesign configuration files. This should make to upgrade for newer options if they appear.</li>
<li>Most (if not all) hardcoded values were moved to the config file. URL colors, URLS, you can change them by simply changing a config file instead of messing with Python code.</li>
<li>Repost (retweet) support in PyGTK interface (working with the Twitter protocol at the moment.)</li>
<li>Proper reply support for Twitter</li>
<li>Replies are shown in the main window.</li>
<li>Favourites.</li>
</ul>
<p>More info, bug reports, what needs to be done, downloads and everything else is available <a href="http://code.google.com/p/mitter">in the project page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://juliobiason.net/2009/12/29/mitter-1-0-0alpha1-well-the-lord-hates-a-coward-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Go feels like a balloon boy</title>
		<link>http://juliobiason.net/2009/11/11/why-go-feels-like-a-balloon-boy/</link>
		<comments>http://juliobiason.net/2009/11/11/why-go-feels-like-a-balloon-boy/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 01:17:37 +0000</pubDate>
		<dc:creator>Julio Biason</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[balloon boy]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://juliobiason.net/?p=2062</guid>
		<description><![CDATA[One of my friends like to use the expression &#8220;balloon boy&#8221; to everything that gets a lot of attention but it turns to be a lot less interesting in the end. Go is a new language created by Google that recently went open source and generated a lot of buzz in the interpipes. As someone [...]]]></description>
			<content:encoded><![CDATA[<p>One of my friends like to use the expression &#8220;balloon boy&#8221; to everything that gets a lot of attention but it turns to be a lot less interesting in the end.</p>
<p><a href="http://golang.org/">Go</a> is a new language created by Google that recently went open source and generated a lot of buzz in the interpipes.</p>
<p>As someone who have been working as programmer for almost 20 years and worked with almost a dozen languages and, on top of that, have a blog, I think I&#8217;m entitled to give my biased opinion about it.</p>
<p>One of the first things that got me off was the video pointing that the language is faster. Or the compiler is. Honestly, pointing that you become more productive because your compiler is fast is utterly wrong. If you&#8217;re aiming for a new language and you want people to be productive with it, make it so it&#8217;s easier to write code right in the first time. If you need to keep compiling your code over and over again till it does the right thing, you should probably check if there isn&#8217;t any impairment in the language itself that prevents right code to be written in the first place.</p>
<p>Which brings us to my second peeve about Go: The syntax, as presented in <a href="http://golang.org/doc/go_tutorial.html">the tutorial</a>. Syntax, in my opinion, is the biggest feature any programming language have to offer. If the syntax is straightfoward and easy to understand, it makes easier to have multiple developers working on the same code; if the language allows multiple &#8220;dialects&#8221; (or ways to write the same code), each developer may be inclined to use a different approach to write the code (which basically does the same thing) and you end up with a mess of a code where most developers would feel like rewriting than fixing a bug or adding a feature.</p>
<p>The first thing that caught my eye was the &#8220;import&#8221; statement that at some point uses a name before it and a block in the second example. Why two different ways (well, three if you count that one is probably optional &#8212; in the middle of the statement, nonetheless!) to import other packages with the same command?</p>
<p>Variable declaration also feels weird. &#8220;a variable p of type string&#8221; is longer to read than &#8220;a string p&#8221; (comparing <code>var p string := "";</code> with C way <code>string *p = "";</code>). And that goes on. If you keep reading the statements in their long form (expanding them to natural English), all commands start to feel awkward and adding unnecessary cruft on the code, things that could be easily dismissed and force people to do less typing.</p>
<p>The &#8220;object&#8221; interface seems derived from JavaScript, which is a bad idea, since JavaScript have absolutely no way to create objects in the proper sense. And, because object attributes and members can be spread around instead of staying grouped together, like in C++ and Python, you can simply add methods out of imports. Ok, it works a bit like duck-taping methods in existing objects, but still can make a mess if you add two objects in one file and people decide to add methods just in the end of the file: You end up with a bunch of methods about different objects all spread your code, when you could &#8220;force&#8221; them to stay together.</p>
<p>So far, those were my first impressions of the language and, as you can see, it was not a good first impression. Focusing on compile speed instead of code easiness/correctness seems out of place for current IT necessities and the language seems to pick some of the worst aspects of most languages around.</p>
]]></content:encoded>
			<wfw:commentRss>http://juliobiason.net/2009/11/11/why-go-feels-like-a-balloon-boy/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
