<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns: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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>small acts</title> <link>http://www.caikesouza.com/blog</link> <description>make great revolutions</description> <pubDate>Thu, 04 Mar 2010 22:28:42 +0000</pubDate> <generator>http://wordpress.org/?v=2.7.1</generator> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/smallacts" /><feedburner:info uri="smallacts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>ftp upload in one command</title><link>http://feedproxy.google.com/~r/smallacts/~3/iFISHFwPrzU/</link> <comments>http://www.caikesouza.com/blog/2010/03/ftp-upload-in-one-command/#comments</comments> <pubDate>Thu, 04 Mar 2010 22:23:35 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[en]]></category><category><![CDATA[linux]]></category><category><![CDATA[opensource]]></category><guid isPermaLink="false">http://www.caikesouza.com/blog/?p=736</guid> <description><![CDATA[As part of a backup routine, I had to upload a file to an ftp server. It actually took me some time to figure out how to do this with one command, so I thought I&#8217;d post it here:
curl -sS -T ${FILE_PATH}/${FILE_NAME} --ftp-pasv \
ftp://${FTP_USER}:${FTP_PWD}@${FTP_URL}/${FILE_NAME}
This example is uploading the file to the ftp server using silent [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">As part of a backup routine, I had to upload a file to an ftp server. It actually took me some time to figure out how to do this with one command, so I thought I&#8217;d post it here:</p><pre><code>curl -sS -T ${FILE_PATH}/${FILE_NAME} --ftp-pasv \
ftp://${FTP_USER}:${FTP_PWD}@${FTP_URL}/${FILE_NAME}</code></pre><p
style="text-align: justify;">This example is uploading the file to the ftp server using silent mode (-s) and showing errors when they occur (-S), while connecting to the server in passive mode (&#8211;ftp-pasv).</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=iFISHFwPrzU:RxElKzyhTv0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=iFISHFwPrzU:RxElKzyhTv0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=iFISHFwPrzU:RxElKzyhTv0:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/iFISHFwPrzU" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.caikesouza.com/blog/2010/03/ftp-upload-in-one-command/feed/</wfw:commentRss> <feedburner:origLink>http://www.caikesouza.com/blog/2010/03/ftp-upload-in-one-command/</feedburner:origLink></item> <item><title>Refactoring at ORUG</title><link>http://feedproxy.google.com/~r/smallacts/~3/LgEQRGRGiGs/</link> <comments>http://www.caikesouza.com/blog/2010/01/refactoring-at-orug/#comments</comments> <pubDate>Tue, 19 Jan 2010 04:39:44 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[agile]]></category><category><![CDATA[en]]></category><category><![CDATA[opensource]]></category><category><![CDATA[ruby]]></category><category><![CDATA[software craftsmanship]]></category><guid isPermaLink="false">http://www.caikesouza.com/blog/?p=702</guid> <description><![CDATA[Here is the slides for the Refactoring talk I did last Thursday at the Orlando Ruby User Group meeting. In case you want to hear me speaking along with the slides, I&#8217;ve put it up on vcasmo also.
Refactoring
View more documents from Caike Souza.]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">Here is the slides for the Refactoring talk I did last Thursday at the <a
href="http://orug.org/articles/2010/01/07/meeting-january-14th">Orlando Ruby User Group</a> meeting. In case you want to hear me speaking along with the slides, I&#8217;ve <a
href="http://www.vcasmo.com/video/caike/7205">put it up on vcasmo</a> also.</p><div
style="width:425px;text-align:left" id="__ss_2927365"><a
style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/caikesouza/refactoring-2927365" title="Refactoring">Refactoring</a><object
style="margin:0px" width="425" height="355"><param
name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=refactoringruby-100115230806-phpapp01&#038;rel=0&#038;stripped_title=refactoring-2927365" /><param
name="allowFullScreen" value="true"/><param
name="allowScriptAccess" value="always"/><embed
src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=refactoringruby-100115230806-phpapp01&#038;rel=0&#038;stripped_title=refactoring-2927365" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div
style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a
style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a
style="text-decoration:underline;" href="http://www.slideshare.net/caikesouza">Caike Souza</a>.</div></div> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=LgEQRGRGiGs:fsoFPfCJegk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=LgEQRGRGiGs:fsoFPfCJegk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=LgEQRGRGiGs:fsoFPfCJegk:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/LgEQRGRGiGs" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.caikesouza.com/blog/2010/01/refactoring-at-orug/feed/</wfw:commentRss> <feedburner:origLink>http://www.caikesouza.com/blog/2010/01/refactoring-at-orug/</feedburner:origLink></item> <item><title>Autotesting PHP applications (and others)</title><link>http://feedproxy.google.com/~r/smallacts/~3/d2GqLAFjGCI/</link> <comments>http://www.caikesouza.com/blog/2010/01/autotesting-php-applications-and-others/#comments</comments> <pubDate>Tue, 12 Jan 2010 20:24:14 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[agile]]></category><category><![CDATA[en]]></category><category><![CDATA[opensource]]></category><category><![CDATA[php]]></category><guid isPermaLink="false">http://www.caikesouza.com/blog/?p=637</guid> <description><![CDATA[So you&#8217;ve probably heard of ZenTest/Autotest, right?
In case you haven&#8217;t, it is a Ruby gem that (among other things) automatically runs your tests whenever it notices that a file in you project has changed. It&#8217;s a great productivity boost, because it saves you from having to run your tests each time you make a change [...]]]></description> <content:encoded><![CDATA[<p>So you&#8217;ve probably heard of <a
href="http://www.zenspider.com/ZSS/Products/ZenTest">ZenTest/Autotest</a>, right?</p><p
style="text-align: justify;">In case you haven&#8217;t, it is a Ruby gem that (among other things) automatically runs your tests whenever it notices that a file in you project has changed. It&#8217;s a great productivity boost, because it saves you from having to run your tests each time you make a change to your program. The perfect tool if you are doing TDD.</p><p
style="text-align: justify;">So I wanted to get this autotest functionality going for projects in other languages - like PHP, for example - but apparently ZenTest/Autotest only works within Ruby projects.</p><p
style="text-align: justify;">Talking to the <a
href="http://envylabs.com/">EnvyLabs&#8217;</a> guys I was told about <a
href="http://github.com/mynyml/watchr">Watchr</a>, a Ruby gem that monitors files <a
href="http://github.com/caike/watchr_running_php/blob/master/watchr.conf">matched by a regular expression</a> and triggers a user defined command whenever a file changes. That&#8217;s enough to get you started in an autotest-like tool for PHP - or just about any other language.</p><p
style="text-align: justify;">I&#8217;ve setup an example PHP project of Watchr playing an autotest role in a PHP project:</p><p
style="text-align: justify;"><p
style="text-align: justify;"><object
width='500' height='290'><param
name='allowfullscreen' value='true' /><param
name='allowscriptaccess' value='always' /><param
name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=8700084&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1' /><embed
src='http://vimeo.com/moogaloop.swf?clip_id=8700084&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1' type='application/x-shockwave-flash' allowfullscreen='true' allowscriptaccess='always' width='500' height='290'></embed></object><br
/><a
href='http://vimeo.com/8700084'>View on Vimeo</a>.</p><p
style="text-align: justify;">The source code from this example can be seen at <a
href="http://github.com/caike/watchr_running_php">http://github.com/caike/watchr_running_php</a></p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=d2GqLAFjGCI:9xHEnYdLfRI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=d2GqLAFjGCI:9xHEnYdLfRI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=d2GqLAFjGCI:9xHEnYdLfRI:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/d2GqLAFjGCI" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.caikesouza.com/blog/2010/01/autotesting-php-applications-and-others/feed/</wfw:commentRss> <feedburner:origLink>http://www.caikesouza.com/blog/2010/01/autotesting-php-applications-and-others/</feedburner:origLink></item> <item><title>AppleScript for my Rails terminal tabs</title><link>http://feedproxy.google.com/~r/smallacts/~3/nR-4yhtuqmg/</link> <comments>http://www.caikesouza.com/blog/2009/12/applescript-for-rails-terminal-tabs/#comments</comments> <pubDate>Thu, 10 Dec 2009 19:24:22 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[en]]></category><category><![CDATA[mac]]></category><category><![CDATA[rails]]></category><guid isPermaLink="false">http://www.caikesouza.com/blog/?p=613</guid> <description><![CDATA[While working on a Rails project I always have at least 4 different Terminal tabs that I use forspork server
autospec
./script/server
command line stuff (generators and general shell commands)Setting up the tabs all the time is kind of a boring and repetitive task. This truly deserved some automation and it was the perfect excuse for writing my [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">While working on a Rails project I always have at least 4 different Terminal tabs that I use for</p><ol
style="text-align: justify;"><li><a
href="http://github.com/timcharper/spork">spork</a> server</li><li>autospec</li><li>./script/server</li><li>command line stuff (generators and general shell commands)</li></ol><p
style="text-align: justify;">Setting up the tabs all the time is kind of a boring and repetitive task. This truly deserved some automation and it was the perfect excuse for writing my first AppleScript.</p><p
style="text-align: justify;">After some googling around I came up with this bash/AppleScript to do these tasks for me (and also open up TextMate):</p><pre><code>#!/bin/bash

if [ $# -ne 1 ]; then
    PATHDIR=`pwd`
else
    PATHDIR=$1
fi

/usr/bin/osascript &lt;&lt;EOF
on new_terminal_tab()
	tell application "System Events" to tell process "Terminal" \
        to keystroke "t" using command down
end new_terminal_tab

set actions to {"spork rspec", "autospec", "./script/server"}

tell application "Terminal"
	do script with command "cd $PATHDIR &amp;&amp; mate . &amp;&amp; clear" \
	in selected tab of the front window
	repeat with action in actions
		my new_terminal_tab()
		do script with command "cd $PATHDIR &amp;&amp; " &amp; action \
		in selected tab of the front window
		if action contains "spork" then
			delay 7
		end if
	end repeat
end tell
EOF
</code></pre><p>If only I had used the <a
href="http://www.google.com/search?q=rails+terminal+launcher">right search words</a> I would have found <a
href="http://blog.ardes.com/2009/1/22/rails-multi-terminal-launcher">Nick Rutherfor</a> had been through the same situation.</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=nR-4yhtuqmg:BPUD4frh8X0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=nR-4yhtuqmg:BPUD4frh8X0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=nR-4yhtuqmg:BPUD4frh8X0:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/nR-4yhtuqmg" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.caikesouza.com/blog/2009/12/applescript-for-rails-terminal-tabs/feed/</wfw:commentRss> <feedburner:origLink>http://www.caikesouza.com/blog/2009/12/applescript-for-rails-terminal-tabs/</feedburner:origLink></item> <item><title>Using Authlogic for general email validation</title><link>http://feedproxy.google.com/~r/smallacts/~3/tJYFCzgpJww/</link> <comments>http://www.caikesouza.com/blog/2009/11/using-authlogic-for-email-validation/#comments</comments> <pubDate>Thu, 05 Nov 2009 15:55:39 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[en]]></category><category><![CDATA[rails]]></category><category><![CDATA[ruby]]></category><category><![CDATA[web]]></category><category><![CDATA[authlogic]]></category><category><![CDATA[email]]></category><category><![CDATA[regexp]]></category><category><![CDATA[validation]]></category><guid isPermaLink="false">http://www.caikesouza.com/blog/?p=604</guid> <description><![CDATA[In case you are using Authlogic for authentication in your Rails apps, then you are probably using its email format validation in the user registration step. You get this validation for free just by specifying your model to acts_as_authentic:
class User &#60; ActiveRecord::Baseacts_as_authenticend
That&#8217;s it for the user model and its registration field validations (login, email [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">In case you are using <a
href="http://github.com/binarylogic/authlogic">Authlogic</a> for authentication in your Rails apps, then you are probably using its email format validation in the user registration step. You get this validation for free just by specifying your model to <strong>acts_as_authentic:</strong></p><pre><code>class User &lt; ActiveRecord::Base

  acts_as_authentic

end</code></pre><p
style="text-align: justify;">That&#8217;s it for the user model and its registration field validations (login, email and password).</p><p
style="text-align: justify;">But what if you have some other model in your application with an email field that you also want to validate ? You could just get your favorite email format regexp and use it with the <a
href="http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M002168">validates_format_of</a> method:</p><pre><code>class Band &lt; ActiveRecord::Base

  validates_presence_of :manager, :description
  validates_format_of :email, :with =&gt; /SomeRegexpYouGotFromGoogle/

end</code></pre><p
style="text-align: justify;">But that would be decentralizing the email validation concern - totally anti-DRY and error-prone.</p><p
style="text-align: justify;">A better solution would be to use the email regexp that&#8217;s in <a
href="http://github.com/binarylogic/authlogic">Authlogic</a>, which is the same that&#8217;s already validating your user model email field.</p><pre><code>class Band &lt; ActiveRecord::Base

  validates_presence_of :manager, :description
  validates_format_of :email, :with =&gt; Authlogic::Regex.email

end</code></pre><p>That&#8217;s it. Hope it helps someone keep their code clean.</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=tJYFCzgpJww:sQTYSnqJdKw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=tJYFCzgpJww:sQTYSnqJdKw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=tJYFCzgpJww:sQTYSnqJdKw:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/tJYFCzgpJww" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.caikesouza.com/blog/2009/11/using-authlogic-for-email-validation/feed/</wfw:commentRss> <feedburner:origLink>http://www.caikesouza.com/blog/2009/11/using-authlogic-for-email-validation/</feedburner:origLink></item> <item><title>Writing expressive code</title><link>http://feedproxy.google.com/~r/smallacts/~3/tHGo9Xo9mSo/</link> <comments>http://www.caikesouza.com/blog/2009/10/writing-expressive-code/#comments</comments> <pubDate>Wed, 07 Oct 2009 20:37:23 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[agile]]></category><category><![CDATA[en]]></category><category><![CDATA[ruby]]></category><category><![CDATA[software craftsmanship]]></category><guid isPermaLink="false">http://www.caikesouza.com/blog/?p=570</guid> <description><![CDATA[Software developers read a lot more code than they actually write. An application source code is nothing but a story written using a specific language. It has state and describes behaviour.
Code written once, will be read millions of times. For the most part, it will be read by a compiler who doesn&#8217;t really look for anything [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify; ">Software developers read a lot more code than they actually write. An application source code is nothing but a story written using a specific language. It has state and describes behaviour.</p><p
style="text-align: justify; ">Code written <strong>once</strong>, will be read millions of times. For the most part, it will be read by a compiler who doesn&#8217;t really look for anything but correct syntax. Compilers are not into reading stories. They are too busy for that. Just like assembly-line workers, they follow a plan and do exactly what they were told. As soon as they pass things over to the runtime, they are done. On the other hand, we developers are not like that, are we ? <strong>No, we are not!</strong></p><p
style="text-align: justify; ">We are <a
href="http://en.wikipedia.org/wiki/Software_Craftsmanship">software craftsmen</a>. We like to read stories and even get paid to write some every once in a while.</p><div
id="attachment_589" class="wp-caption aligncenter" style="width: 510px"><a
href="http://www.flickr.com/photos/dhammza/91435718/"><img
class="size-full wp-image-589" src="http://www.caikesouza.com/blog/wp-content/uploads/man_reading_book.jpg" alt="man_reading_book" width="500" height="440" /></a><p
class="wp-caption-text">http://www.flickr.com/photos/dhammza/91435718/</p></div><p
style="text-align: center;"><p
style="text-align: justify; ">Think about it the next time you hack that magic one-liner in an application. Do you think you will be able to read that <a
href="http://codegolf.com/">code-golf</a> champion piece of code the next time you look at it ? What if it is not you, but someone else reading it ?</p><blockquote><p
style="text-align: justify;">&#8220;Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live (&#8230;) Alternatively, always code and comment in such a way that if someone a few notches junior picks up the code, they will take pleasure in reading and learning from it.&#8221; - Ward Cunningham, <a
href="http://c2.com/cgi/wiki?CodeForTheMaintainer">CodeForTheMaintainer</a></p></blockquote><p
style="text-align: justify;">An example I like to use for expressive code is method parameters in Ruby. Let&#8217;s say you want to stay fit and write a method to calculate a body fat percentage. You write the following:</p><pre><code>def body_fat_percentage(name, age, height, weight, metric_system)
end</code></pre><p>Apparently it looks nice. Let&#8217;s see how it could be invoked:</p><pre><code># fred's height in meters and weight in kilograms
body_fat_percentage("fred", 30, 1.82, 90, 1)

# barney's height in feet and weight in pounds
body_fat_percentage("barney", 32, 5, 300, 2)</code></pre><p
style="text-align: justify;">In order to write those two calls you would probably have to check the right order for the parameters in the method&#8217;s signature. Even worse, every time you read that line you would have to check back its signature just to make sure that the last argument determines the metric system or that the third argument is actually the height and not the weight.</p><p>That sounds like a pretty boring story to read!</p><p>Let&#8217;s make this piece of code more expressive:</p><pre><code># fred's height in meters and weight in kilograms
body_fat_percentage("fred", :age =&gt; 30, :height =&gt; 1.82,
  :weight =&gt; 90, :metric_system =&gt; MetricSystem::METERS_KG)

# barney's height in feet and weight in pounds
body_fat_percentage("barney", :age =&gt; 32, :height =&gt; 5,
:weight =&gt; 300, :metric_system =&gt; MetricSystem::FEET_LB)</code></pre><p>All we need to do to the method signature is to replace the standalone arguments for a hash.</p><pre><code>def body_fat_percentage(name, params={})
end</code></pre><p
style="text-align: justify;">From the method body, the values can be accessed using the keys, like params[:age], params[:height], etc.</p><p
style="text-align: justify;">In a real life situation, this expressiveness would be achieved from writing our expectations as unit tests. We would first write our failing tests as how we wanted our code to look and act like. From that, we would head towards making the tests pass. When all is green, the tests would turn out to be the reference for how to call the method (running and never-obsolete documentation) so there&#8217;s no need to go back to the implementation of the method itself to learn how to to use it.</p><p
style="text-align: justify;">Writing expressive code often means writing more code, but it also means writing better code. It&#8217;s not about making things work, it&#8217;s about <a
href="http://manifesto.softwarecraftsmanship.org/">making things right</a>.</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=tHGo9Xo9mSo:TFEIVeHSGlU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=tHGo9Xo9mSo:TFEIVeHSGlU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=tHGo9Xo9mSo:TFEIVeHSGlU:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/tHGo9Xo9mSo" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.caikesouza.com/blog/2009/10/writing-expressive-code/feed/</wfw:commentRss> <feedburner:origLink>http://www.caikesouza.com/blog/2009/10/writing-expressive-code/</feedburner:origLink></item> <item><title>O conto do lenhador</title><link>http://feedproxy.google.com/~r/smallacts/~3/W9GewE1smQc/</link> <comments>http://www.caikesouza.com/blog/2009/09/o-conto-do-lenhador/#comments</comments> <pubDate>Tue, 01 Sep 2009 19:54:15 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[agile]]></category><category><![CDATA[pt]]></category><category><![CDATA[software craftsmanship]]></category><guid isPermaLink="false">http://www.caikesouza.com/blog/?p=550</guid> <description><![CDATA[Não lembro ao certo quando escutei este conto pela primeira vez.
&#8220;Certo dia, um rapaz que caminhava pelo bosque avistou um lenhador tentando derrubar uma árvore. Observou-o por alguns instantes e notou que, mesmo investindo cada vez mais força em suas machadadas, não estava obtendo muito sucesso em derrubar a árvore.
Então o rapaz sugeriu ao lenhador:
- [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">Não lembro ao certo quando escutei este conto pela primeira vez.</p><p
style="text-align: justify;">&#8220;Certo dia, um rapaz que caminhava pelo bosque avistou um lenhador tentando derrubar uma árvore. Observou-o por alguns instantes e notou que, mesmo investindo cada vez mais força em suas machadadas, não estava obtendo muito sucesso em derrubar a árvore.</p><p
style="text-align: justify;">Então o rapaz sugeriu ao lenhador:</p><p
style="text-align: justify;">- &#8216;Por que você não descansa um pouco e, enquanto isso, aproveita para amolar o seu machado ?&#8217;</p><p
style="text-align: justify;">O lenhador respondeu:</p><p
style="text-align: justify;">- &#8216;Não posso perder tempo! Tenho que derrubar logo esta árvore!&#8217;&#8221;</p><p
style="text-align: justify;"><p
style="text-align: justify;">Desenvolvimento de software é um <a
href="http://www.se-radio.net/podcast/2009-06/episode-138-learning-part-development-allan-kelly">processo contínuo de aprendizagem</a>. Diariamente nos deparamos com árvores a serem derrubadas. No caso das mais difíceis, pense em parar e refletir sobre o que está fazendo enquanto amola seu machado ao invés de ficar repetindo incessantemente a mesma coisa, esperando resultados diferentes (a definição de estupidez, segundo Einstein).</p><div
id="attachment_553" class="wp-caption aligncenter" style="width: 510px"><a
href="http://www.flickr.com/photos/shedboy/3610432084/"><img
class="size-full wp-image-553 " src="http://www.caikesouza.com/blog/wp-content/uploads/ax1.jpg" alt="Machado" width="500" height="281" /></a><p
class="wp-caption-text">http://www.flickr.com/photos/shedboy/3610432084/</p></div><p
style="text-align: justify;">Você reserva algum momento de sua semana para a leitura de blogs de referência da sua comunidade ?</p><p>Participa de alguma comunidade ?</p><p>Participa de pelo menos uma grande conferência por ano ?</p><p>Está lendo algum livro técnico ?</p><p
style="text-align: justify;">Estar atualizado é <a
href="http://blog.jayfields.com/2009/08/staying-current-software-developers.html">responsabilidade</a> de qualquer profissional de tecnologia.</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=W9GewE1smQc:tO_Z-z6w_0s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=W9GewE1smQc:tO_Z-z6w_0s:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=W9GewE1smQc:tO_Z-z6w_0s:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/W9GewE1smQc" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.caikesouza.com/blog/2009/09/o-conto-do-lenhador/feed/</wfw:commentRss> <feedburner:origLink>http://www.caikesouza.com/blog/2009/09/o-conto-do-lenhador/</feedburner:origLink></item> <item><title>Dev in Rio 2009</title><link>http://feedproxy.google.com/~r/smallacts/~3/bKcUY-WbjAY/</link> <comments>http://www.caikesouza.com/blog/2009/08/dev-in-rio-2009/#comments</comments> <pubDate>Fri, 21 Aug 2009 18:11:08 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">http://www.caikesouza.com/blog/?p=543</guid> <description><![CDATA[O que vocês vão fazer dia 14 de setembro no Rio de Janeiro ?
Dev in Rio 2009 !
Texto copiado do blog do Henrique:
Finalmente o Rio de Janeiro ganhou um grande evento de tecnologia focado no que é mais importante: Pessoas!
É com muito orgulho que apresentamos o Dev in Rio 2009, uma conferência bombástica sobre desenvolvimento [...]]]></description> <content:encoded><![CDATA[<p>O que vocês vão fazer dia 14 de setembro no Rio de Janeiro ?</p><p><strong>Dev in Rio 2009 !</strong></p><p>Texto copiado do blog do <a
href="http://henriquebastos.net">Henrique</a>:</p><blockquote><p>Finalmente o Rio de Janeiro ganhou um grande evento de tecnologia focado no que é mais importante: <strong>Pessoas</strong>!</p><p>É com muito orgulho que apresentamos o <a
href="http://devinrio.com.br" target="_blank"><strong><em>Dev in Rio 2009</em></strong></a>, uma conferência bombástica sobre desenvolvimento de software que acontecerá no próximo dia <strong>14 de setembro</strong> no <a
href="http://www.ccsulamerica.com.br/PgLocalizacao.php" target="_blank">Centro de Convenções SulAmérica</a>, no Rio de Janeiro!</p><p>O <a
href="http://devinrio.com.br" target="_blank"><strong><em>Dev in Rio 2009</em></strong></a>, contará com palestrantes nacionais e internacionais que falarão sobre <a
href="http://java.sun.com/" target="_blank">Java</a>, <a
href="http://www.ruby-lang.org/" target="_blank">Ruby</a> e <a
href="http://rubyonrails.org/" target="_blank">Ruby on Rails</a>, <a
href="http://python.org" target="_blank">Python</a>, <a
href="http://djangoproject.com" target="_blank">Django</a>, <a
href="http://www.opensource.org/" target="_blank">Open Source</a>, <a
href="http://www.joomla.org/" target="_blank">Joomla!</a>, <a
href="http://improveit.com.br/xp/manifesto_agil" target="_blank">Métodos Ágeis</a>, e muito mais. Nomes como <a
title="Akita é a referência de Rails no Brasil." href="http://akitaonrails.com/" target="_blank">Fábio Akita</a>, <a
title="Vinícius é especialista em Extreme Programming e produtos Web." href="http://improveit.com.br/" target="_blank">Vinícius Manhães Teles</a>, <a
title="Jacob é co-criador do Django" href="http://jacobian.org" target="_blank">Jacob Kaplan-Moss</a>, <a
title="Conheça mais sobre o Guilherme e sua particpação na Comunidade Java." href="http://guilhermesilveira.wordpress.com/" target="_blank">Guilherme Silveira</a>, <a
title="Conheça mais sobre o Nico e seu trabalho na Caelum." href="http://blog.caelum.com.br/" target="_blank">Nico Steppat</a>, <a
title="Conheça o Ryan e seu trabalho com Open Source e Joomla!" href="http://www.picnet.net/blog/author/cozimek/" target="_blank">Ryan Ozimek</a> e <a
title="Jeff é consultor especializado em métodos ágeis." href="http://www.agileproductdesign.com/" target="_blank">Jeff Patton</a> agitarão um dia inteiro de muita tecnologia e diversão. Veja a <a
href="http://devinrio.com.br" target="_blank">programação detalhada</a> no site da <a
href="http://devinrio.com.br/" target="_blank"><strong><em>Dev in Rio 2009</em></strong></a>.</p><p>Mas não é só isso. Como eu disse no início, este é um evento focado em <strong>pessoas</strong>. Toda a organização do evento está voltada para promover ao máximo a interação e integração entre os presentes.</p><p>Por isso, o <a
href="http://devinrio.com.br/" target="_blank"><strong><em>Dev in Rio 2009</em></strong></a> contará com uma <a
href="http://dojorio.org">Arena DojoRio</a> onde participantes e palestrantes poderão programar lado à lado, experimentando diversas linguagens e técnicas, buscando juntos as melhores formas de desenvolver software.</p><p>O evento está sendo organizado por <a
href="http://henriquebastos.net" target="_blank">mim (Henrique Bastos)</a> em parceria com o meu amigo <a
href="http://gc.blog.br/2009/08/20/dev-in-rio-2009-eu-vou/" target="_blank">Guilherme Chapiewski</a>, contando com todo o apoio dos membros da <a
href="http://pythonrio.org" target="_blank">PythOnRio</a>, <a
href="http://dojorio.org" target="_blank">DojoRio</a> e <a
href="http://horaextra.org" target="_blank">#Horaextra</a>.</p><p>A realização está sendo coordenada pelas nossas experientes amigas da <a
href="http://www.arteccom.com.br" target="_blank">Arteccom</a>. E tê-las ao nosso lado já garante que este será um evento para marcar o circuito carioca.</p><p><strong>Você</strong> não pode perder esta incrível oportunidade de participar desse mega evento, interagir com grandes nomes do cenário mundial de tecnologia, conhecer pessoas interessantes que compartilham a paixão pelo desenvolvimento de software, e ainda por cima começar sua semana só na terça-feira. <a
href="http://devinrio.com.br" target="_blank">Inscreva-se já!</a></p><p><em><strong>Nos vemos por lá!</strong></em></p><p>[]’s!</p></blockquote><p>Em se tratando deste grupo de feras na organização e nas palestras - e finalizando com um super-sized <a
href="http://horaextra.org">#HoraExtra</a> deluxe edition - com certeza este será um daqueles eventos memoráveis dos quais vocês não podem deixar de ir!</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=bKcUY-WbjAY:aijWXTtuxRg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=bKcUY-WbjAY:aijWXTtuxRg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=bKcUY-WbjAY:aijWXTtuxRg:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/bKcUY-WbjAY" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.caikesouza.com/blog/2009/08/dev-in-rio-2009/feed/</wfw:commentRss> <feedburner:origLink>http://www.caikesouza.com/blog/2009/08/dev-in-rio-2009/</feedburner:origLink></item> <item><title>Coding Dojo CESUPA</title><link>http://feedproxy.google.com/~r/smallacts/~3/89i-LvBDWpE/</link> <comments>http://www.caikesouza.com/blog/2009/07/coding-dojo-cesupa/#comments</comments> <pubDate>Tue, 07 Jul 2009 20:52:43 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[agile]]></category><category><![CDATA[pt]]></category><category><![CDATA[software craftsmanship]]></category><category><![CDATA[codingdojo]]></category><guid isPermaLink="false">http://www.caikesouza.com/blog/?p=516</guid> <description><![CDATA[Na última sexta-feira tive o prazer de realizar um Coding Dojo junto ao pessoal do CESUPA, em Belém do Pará.
Ao todo, nove pessoas estavam presentes. Paulo Igor, Marcos Venicius, Aldrin Leal, Gustavo Pinto, Igo Medeiros, Mateus Miranda, Danilo Cunha, Rafael Santana e eu nos reunimos as 16 horas (horário mais conhecido como &#8220;depois da chuva&#8221;) [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">Na última sexta-feira tive o prazer de realizar um <a
href="http://codingdojo.org">Coding Dojo</a> junto ao pessoal do <a
href="http://www.cesupa.br/">CESUPA</a>, em Belém do Pará.</p><p
style="text-align: justify;">Ao todo, nove pessoas estavam presentes. Paulo Igor, Marcos Venicius, Aldrin Leal, Gustavo Pinto, Igo Medeiros, Mateus Miranda, Danilo Cunha, Rafael Santana e eu nos reunimos as 16 horas (horário mais conhecido como &#8220;depois da chuva&#8221;) no campus José Malcher, sala 4F, munidos apenas de um pc e um retro-projetor.</p><p
style="text-align: justify;">Enquanto aguardávamos o resto do pessoal chegar, <a
href="http://pauloigor.blogspot.com/">Paulo Igor</a>, <a
href="http://leal.eng.br/">Aldrin Leal</a> e eu conversamos sobre Ruby, Python, FISL e sobre o <a
href="http://www.projectzero.org/">Project Zero</a>, um projeto ao qual o Aldrin pertence.</p><p
style="text-align: justify;">Após uma pequena <a
href="http://www.slideshare.net/caikesouza/coding-dojo-cesupa">apresentação do que é o Coding Dojo,</a> sugeri alguns problemas que poderíamos resolver. A maioria optou pelo problema do jogador de futebol, que já havia sido resolvido em Ruby no último <a
href="http://dojorio.wordpress.com/2009/07/04/coding-dojo-rio-22/">Dojo Rio</a> mas que desta vez seria resolvido utilizando Java.</p><p
style="text-align: justify;">O problema mostrou-se mais uma vez de fácil compreensão e não precisamos de muito tempo para a definição das estórias. Gosto do formato de <a
href="http://en.wikipedia.org/wiki/User_stories">user stories</a> para fechar o escopo de problemas como este (e como o <a
href="http://www.github.com/caike/wowspec">wowspec</a>) para um Coding Dojo, uma vez que são idéias muito gerais e com possibilidades  de implementação quase que infinitas.</p><p
style="text-align: center;"><img
class="size-medium wp-image-517 aligncenter" src="http://www.caikesouza.com/blog/wp-content/uploads/dsc00758-300x225.jpg" alt="dojo cesupa" width="300" height="225" /></p><p
style="text-align: justify;">A utilização do Netbeans como IDE não foi uma boa escolha. Com apenas duas classes, o Netbeans foi capaz de se perder e exibir testes falhando mesmo quando corretos. A solução foi dar &#8216;clean&#8217; no projeto de tempos em tempos.</p><p
style="text-align: center;"><img
class="size-medium wp-image-527 aligncenter" src="http://www.caikesouza.com/blog/wp-content/uploads/dsc00756-300x225.jpg" alt="coding dojo cesupa" width="300" height="225" /></p><p
style="text-align: justify;">Após 40 minutos de codificação, conseguimos completar as quatro estórias criadas mas não tivemos tempo para refatorar nosso código. Como o objetivo do Coding Dojo não é <strong>completar</strong> os problemas, mas exercitar ao máximo as técnicas de programação e comunicação durante o time-box estabelecido, paramos de trabalhar no código e passamos para a retrospectiva.</p><p
style="text-align: justify;">Realizamos nossa retrospectiva e trocamos muitas idéias sobre, claro, metodologias e práticas ágeis e também sobre a situação do mercado de desenvolvimento de software em Belém, que carece de profissionais que pensem &#8216;out-of-the-box&#8217;.</p><p
style="text-align: justify;">Obrigado ao <a
href="http://www.cesupa.br/">CESUPA</a> pela disponibilidade da sala e equipamentos e também aos que estiveram por lá e participaram do Dojo. Espero que tenham gostado e que possam levar a prática do Coding Dojo a diante!</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=89i-LvBDWpE:p9PRtdj1Zlw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=89i-LvBDWpE:p9PRtdj1Zlw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=89i-LvBDWpE:p9PRtdj1Zlw:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/89i-LvBDWpE" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.caikesouza.com/blog/2009/07/coding-dojo-cesupa/feed/</wfw:commentRss> <feedburner:origLink>http://www.caikesouza.com/blog/2009/07/coding-dojo-cesupa/</feedburner:origLink></item> <item><title>FISL 10</title><link>http://feedproxy.google.com/~r/smallacts/~3/Mm_Yw0OR6AQ/</link> <comments>http://www.caikesouza.com/blog/2009/07/fisl-10/#comments</comments> <pubDate>Wed, 01 Jul 2009 04:55:22 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[agile]]></category><category><![CDATA[opensource]]></category><category><![CDATA[pt]]></category><guid isPermaLink="false">http://www.caikesouza.com/blog/?p=484</guid> <description><![CDATA[Chega ao final a décima edição do Forum Internacional de Software Livre, realizado na PUC-RS e com participação de mais de oito mil pessoas.
Minhas impressões do evento foram as melhores possíveis. Excelentes palestras aconteceram durante os quatro dias de conferência mas assisti a pouquíssimas. Passei a maior parte do tempo revendo amigos, conhecendo novas pessoas [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">Chega ao final a décima edição do <a
title="FISL" href="http://fisl.org.br">Forum Internacional de Software Livre</a>, realizado na PUC-RS e com participação de mais de oito mil pessoas.</p><p
style="text-align: justify;">Minhas impressões do evento foram as melhores possíveis. Excelentes palestras aconteceram durante os quatro dias de conferência mas assisti a pouquíssimas. Passei a maior parte do tempo revendo amigos, conhecendo novas pessoas e conversando com mentes brilhantes que passaram por lá.</p><p
style="text-align: justify;">Com a proposta de tentarmos mostrar o &#8220;espírito&#8221; do <a
href="http://fisl.org.br">FISL</a> para os que não puderam estar presentes, o <a
title="Henrique Bastos" href="http://henriquebastos.net">Henrique Bastos</a> e eu relatamos os acontecimentos em forma de podcasts. Todos encontram-se disponíveis no site da <a
title="PythOnRio" href="http://pythonrio.org">PythOnRio</a> (<a
href="http://pythonrio.org/balanco-do-primeiro-dia-no-fisl10-parte-1">primeiro dia - parte I</a>, <a
href="http://pythonrio.org/balanco-do-primeiro-dia-no-fisl10-parte-2">primeiro dia - parte II</a>, <a
href="http://pythonrio.org/balanco-do-segundo-dia-do-fisl-10">segundo dia</a>, <a
href="http://pythonrio.org/balanco-do-terceiro-no-fisl-10">terceiro dia</a>, <a
href="http://pythonrio.org/balanco-do-quarto-dia-no-fisl-10">quarto dia</a>).</p><p
style="text-align: justify;">Junto a <a
title="PythOnRio" href="http://pythonrio.org">PythOnRio</a> e <a
title="Python Brasil" href="http://python.org.br">Python Brasil</a>, tive a honra de poder contribuir com a comunidade ao colocar em prática um plano para <a
href="http://pythonrio.org/balanco-do-terceiro-no-fisl-10">entregar uma camiseta da PythOnRio ao presidente Lula</a> e contar a ele sobre a iniciativa <a
href="http://pythonrio.org/pythoncampus-na-uva-universidade-veiga-de-alm">PythOnCampus</a>.</p><p
style="text-align: justify;">A <a
title="Python Brasil" href="http://python.org.br">Python Brasil</a> realizou duas sessões de palestras relâmpago. Ao assistir a primeira sessão, achei o formato tão legal que preparei ali mesmo uma apresentação rápida para a segunda sessão. Em apenas cinco minutos falei sobre técnicas para melhorar sua orientação a objetos - <a
href="http://www.vcasmo.com/video/pythonrio/5495">PyListhenics</a><a
title="small acts make great revolutions" href="http://www.vcasmo.com/video/pythonrio/5494"></a>. As palestras podem ser vistas no site da <a
title="PythOnRio" href="http://pythonrio.org">PythOnRio</a>.</p><p
style="text-align: justify;">Ainda exausto e meio gripado por conta do frio em Porto Alegre, <a
href="http://pythonrio.org/balanco-do-quarto-dia-no-fisl-10">gravamos o último podcast</a> quase que de saída para o <a
href="http://rafael.adm.br/p/novo-ponto-de-encontro-do-hora-extra/">#horaextra</a> da primeira segunda-feira pós-<a
href="http://fisl.org.br">FISL</a> - que <a
href="http://www.flickr.com/photos/caike/3673576867/">bateu o record</a>!</p><p
style="text-align: justify;">Esta última semana pode ser resumida com o título da apresentação do <a
title="Henrique Bastos" href="http://henriquebastos.net">Henrique Bastos</a> nas palestras relâmpago:<strong> pequenos atos fazem grandes revoluções</strong>. Assista a <a
href="http://www.vcasmo.com/video/pythonrio/5494">palestra</a> e saiba a razão.</p><p
style="text-align: justify;">Iniciam-se já os preparativos para o FISL 11!</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=Mm_Yw0OR6AQ:GMyBooAxoQ8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=Mm_Yw0OR6AQ:GMyBooAxoQ8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=Mm_Yw0OR6AQ:GMyBooAxoQ8:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/Mm_Yw0OR6AQ" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.caikesouza.com/blog/2009/07/fisl-10/feed/</wfw:commentRss> <feedburner:origLink>http://www.caikesouza.com/blog/2009/07/fisl-10/</feedburner:origLink></item> </channel> </rss><!-- This site's performance optimized by W3 Total Cache. Dramatically improve the speed and reliability of your blog!

Learn more about our WordPress Plugins: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk
Database Caching using disk

Served from: hm1509 @ 2010-03-07 20:56:00 -->
