<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7754525275646824833</id><updated>2012-01-30T13:49:51.918Z</updated><category term='mobile'/><category term='ruby'/><category term='astronomy'/><category term='drawing'/><category term='javascript'/><category term='vi'/><category term='mysql'/><category term='php'/><category term='apple'/><category term='development'/><category term='hosting'/><category term='telescope'/><category term='utils'/><category term='pdf'/><category term='infographic'/><category term='gnome'/><category term='OutSystems'/><category term='cocoa'/><category term='picasa'/><category term='firefox'/><category term='mouse'/><category term='iPhone'/><category term='scrum'/><category term='geolocation'/><category term='css'/><category term='google earth'/><category term='agile'/><category term='python'/><category term='tips'/><category term='div'/><category term='mac'/><category term='beryl'/><category term='video'/><category term='windows'/><category term='vpn'/><category term='network'/><category term='testing'/><category term='ubuntu'/><category term='cake'/><category term='touchpad'/><category term='review'/><category term='greasemonkey'/><category term='gmail'/><category term='nvidia'/><category term='management'/><category term='svn'/><category term='drivel'/><title type='text'>Kutuma's Ramblings</title><subtitle type='html'>About technology, useful stuff or whatever I come across during my day.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>59</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-9149644814535464766</id><published>2011-10-03T22:08:00.001+01:00</published><updated>2011-10-03T22:09:27.772+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>DIY tripod for the iPhone</title><content type='html'>Do you need to make a short video explaining how to do something with your hands? A drawing, assembling some &lt;a href="http://www.lego.com/"&gt;lego&lt;/a&gt;, playing with your &lt;a href="http://www.nintendo.com/ds"&gt;Nintendo DS&lt;/a&gt;? Well, I needed, and since the only video camera I have is my iPhone, I needed a tripod for it. So here it is, my homemade iPhone tripod!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-T8mQIExk_Vs/Tooj4pvn8TI/AAAAAAAAAe0/kREC8gP6Z2U/s1600/tripod.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="425" src="http://3.bp.blogspot.com/-T8mQIExk_Vs/Tooj4pvn8TI/AAAAAAAAAe0/kREC8gP6Z2U/s640/tripod.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-9149644814535464766?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/9149644814535464766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=9149644814535464766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/9149644814535464766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/9149644814535464766'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2011/10/diy-tripod-for-iphone.html' title='DIY tripod for the iPhone'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-T8mQIExk_Vs/Tooj4pvn8TI/AAAAAAAAAe0/kREC8gP6Z2U/s72-c/tripod.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-889947913992329391</id><published>2011-09-26T09:05:00.001+01:00</published><updated>2011-09-26T15:47:22.328+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='geolocation'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Converting a list of IP addresses to countries</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/--XS8X4TR_YE/ToAyUF52n9I/AAAAAAAAAew/A4vra1HSs54/s1600/globe.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/--XS8X4TR_YE/ToAyUF52n9I/AAAAAAAAAew/A4vra1HSs54/s1600/globe.png" /&gt;&lt;/a&gt;&lt;/div&gt;If you have an Excel file with a column filled with IP addresses that need to be converted to countries, here's a way to do it. These instructions were tested on a Mac, but it should work fine in any environment with &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Start by downloading the GeoIP City database from &lt;a href="http://www.maxmind.com/"&gt;MaxMind&lt;/a&gt;. They have a free version that you can download &lt;a href="http://www.maxmind.com/app/geolitecity"&gt;here&lt;/a&gt;. Download the one in binary format, and uncompress it.&lt;br /&gt;&lt;br /&gt;Next, you need the library to access this database format. There's a pure Python library called &lt;a href="http://code.google.com/p/pygeoip/"&gt;pygeoip&lt;/a&gt; that you can download from google code. To install it, just uncompress it and run the installer:&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sudo python setup.py instal&lt;/span&gt;l&lt;br /&gt;&lt;br /&gt;Next, you need to build a small script to convert the IP addresses to countries. Here's the script I used (note that the countries database should be in the same directory as the script).&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;import pygeoip, sys&lt;br /&gt;gi = pygeoip.GeoIP('GeoLiteCity.dat')&lt;br /&gt;&lt;br /&gt;for line in sys.stdin:&lt;br /&gt;	rec = gi.record_by_addr(line)&lt;br /&gt;	print rec['country_name']&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I used this script (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;geo.py&lt;/span&gt;) by copying the IP list from excel to a plain text file (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ips.txt&lt;/span&gt;), where you get one address per line. Then just run it with something like &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;python geo.py &amp;lt; ips.text&lt;/span&gt; and you get a list of countries on your terminal window. Copy/paste to excel and you're done!&lt;br /&gt;&lt;br /&gt;If you want more than just the country, just play a bit with the print line. Here's a variation I did to get the state and the city. The output is tab separated so that you can copy it easily to excel:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;import pygeoip, sys&lt;br /&gt;gi = pygeoip.GeoIP('GeoLiteCity.dat')&lt;br /&gt;&lt;br /&gt;for line in sys.stdin:&lt;br /&gt;	rec = gi.record_by_addr(line)&lt;br /&gt;	print rec['country_name'] + '\t',&lt;br /&gt;	if rec['country_code'] == 'US' and 'region_name' in rec:&lt;br /&gt;		print rec['region_name'] + '\t' + rec['city']&lt;br /&gt;	else:&lt;br /&gt;		print '-' + '\t' + rec['city']&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As a side note, I tried another database from &lt;a href="http://www.hostip.info/"&gt;hostip.info&lt;/a&gt;, but it was only able to convert about half of the IPs I threw at it, so I recommend going with the one from MaxMind...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-889947913992329391?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/889947913992329391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=889947913992329391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/889947913992329391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/889947913992329391'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2011/09/converting-list-of-ip-addresses-to.html' title='Converting a list of IP addresses to countries'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/--XS8X4TR_YE/ToAyUF52n9I/AAAAAAAAAew/A4vra1HSs54/s72-c/globe.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-7844520392837825867</id><published>2011-08-10T17:27:00.001+01:00</published><updated>2011-08-10T17:27:37.221+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='infographic'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><title type='text'>Mobile Trends and Numbers - Infographic</title><content type='html'>Here's an infographic that I designed for &lt;a href="http://www.outsystems.com/"&gt;OutSystems&lt;/a&gt;. It shows some of the impressive numbers around mobile adoption and mobile in the enterprise:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://www.outsystems.com/offer/mobile/mobile-trends-and-numbers-infographic/"&gt;&lt;img alt="Mobile Trends and Numbers - Infographic" border="0" src="http://www.outsystems.com/CMS_BackOffice/ResourceLink.aspx?ResourceName=mobile-infographic" /&gt;&lt;/a&gt;&lt;br /&gt;Via: &lt;a href="http://www.outsystems.com/"&gt;OutSystems&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-7844520392837825867?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/7844520392837825867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=7844520392837825867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/7844520392837825867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/7844520392837825867'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2011/08/mobile-trends-and-numbers-infographic.html' title='Mobile Trends and Numbers - Infographic'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-2836342608391973954</id><published>2011-01-19T00:16:00.000Z</published><updated>2011-01-19T00:16:15.008Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>What's wrong with ScrumBut?</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_cLyDgbVAqWo/TTYsQJ6ukzI/AAAAAAAAAaU/U3mT0tLyE8Q/s1600/Screen+shot+2011-01-19+at+12.11.04+AM.PNG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_cLyDgbVAqWo/TTYsQJ6ukzI/AAAAAAAAAaU/U3mT0tLyE8Q/s1600/Screen+shot+2011-01-19+at+12.11.04+AM.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;When I talk to other Agilists about &lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)"&gt;SCRUM&lt;/a&gt;, I usually get two very extreme reactions to this methodology:&lt;br /&gt;&lt;br /&gt;On one side, I get people that say you've got to follow all the rules. That's what SCRUM is! There is no but!&lt;br /&gt;&lt;br /&gt;On the other side, I get people saying that there's no such thing as a one size fits all methodology, so you always need to adapt SCRUM for your particular scenario.&lt;br /&gt;&lt;br /&gt;Now, I don't agree that you need to blindly follow all the rules of SCRUM. That's not Agile at all... remember the 1st rule in the &lt;a href="http://agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt;? &amp;nbsp;&lt;i&gt;"Individuals and interactions over processes and tools"&lt;/i&gt;. Seems clear to me that, if your team agrees that some part of SCRUM can be improved, the Agile Manifesto is there to back you up.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;But...&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Just because it is ok to change SCRUM, doesn't mean you should. &lt;b&gt;Failing to properly implement SCRUM is not a valid excuse&lt;/b&gt; to change the process "to fit your organization". That's the the type of attitude that gives ScrumBut a bad name!&lt;br /&gt;&lt;br /&gt;Before adapting SCRUM to your organization, you need to implement and use original SCRUM for a while. It's only when you finally get SCRUM running smoothly on your organization (and that will take some time!) that you and your team can move to phase 2: Analyze the process, do retrospectives, and improve the process to better suite your needs.&lt;br /&gt;&lt;br /&gt;And that's when the real fun of Agile and SCRUM begins!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-2836342608391973954?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/2836342608391973954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=2836342608391973954' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/2836342608391973954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/2836342608391973954'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2011/01/whats-wrong-with-scrumbut.html' title='What&apos;s wrong with ScrumBut?'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_cLyDgbVAqWo/TTYsQJ6ukzI/AAAAAAAAAaU/U3mT0tLyE8Q/s72-c/Screen+shot+2011-01-19+at+12.11.04+AM.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-7681206966313109460</id><published>2010-06-26T19:24:00.005+01:00</published><updated>2010-06-29T09:54:34.130+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='OutSystems'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><title type='text'>Giving Gantt charts some Agile love!</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Gantt_chart"&gt;Gantt charts&lt;/a&gt; have a really bad reputation&amp;nbsp;these days. They're strongly associated with the &lt;a href="http://en.wikipedia.org/wiki/Waterfall_model"&gt;waterfall methodology&lt;/a&gt;, are considered an evil tool that managers use to micro-manage teams, and are usually classified as outdated delusions of certainty about projects that are subject to lots of change.&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But still,&amp;nbsp;&lt;b&gt;I love Gantt charts&lt;/b&gt;! They're a great way to keep everybody in synch with the overall timeline of a project, team allocation, and how the project dates relate to other important dates.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My secret to make Gantt charts successful is easy: &lt;b&gt;Keep It Simple&lt;/b&gt;!&lt;br /&gt;&lt;br /&gt;Here are a few tips on how to achieve Gantt Nirvana:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;You have to be able to produce the Gantt really quickly.&lt;/b&gt; The problem with most Gantt charts is that creating them is a project in itself. And that means that by the time you publish them, they're already out-of-date.&lt;/li&gt;&lt;li&gt;&lt;b&gt;It must be really easy to change the Gantt.&lt;/b&gt; The Gantt's main purpose is communication. So when the project changes, the Gantt must also change.&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Gantt's don't work well with lots of data.&lt;/b&gt; Forget about the never-ending &lt;a href="http://en.wikipedia.org/wiki/Work_breakdown_structure"&gt;WBS&lt;/a&gt;s. It's too much detail and too much work. &lt;a href="http://en.wikipedia.org/wiki/User_story"&gt;User stories&lt;/a&gt; are more than enough detail.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Assign to teams, not individuals.&lt;/b&gt; It's up to the team to organize how they solve problems. Besides, it means a lot less work for you!&lt;/li&gt;&lt;li&gt;&lt;b&gt;Gantt's don't scale well vertically.&lt;/b&gt; Don't make a stair case of user stories if they all belong to the same project. Show them one after the other, with the most important first, of course!&lt;/li&gt;&lt;li&gt;&lt;b&gt;Be precise.&lt;/b&gt; There's not much point communicating something that's wrong. Take into account the &lt;a href="http://kutuma.blogspot.com/2009/07/reading-burndown-charts.html"&gt;team velocity&lt;/a&gt;, vacations, national holidays, ...&lt;/li&gt;&lt;li&gt;&lt;b&gt;Add milestones and releases.&lt;/b&gt; Make it obvious when things will be made available. Just because a user story is completed next week, that doesn't mean it will be available in production.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Worry about the future.&lt;/b&gt; Retrospectives are important learning tools, but usually it's more important to communicate were we are heading. Focus on that.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;At &lt;a href="http://www.outsystems.com/"&gt;OutSystems&lt;/a&gt;, we used our own &lt;a href="http://www.outsystems.com/agile-platform"&gt;Agile Platform&lt;/a&gt; to automate the entire process of creating the Gantt. All I have to do is click a button, and hey presto! Here's how they look:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_cLyDgbVAqWo/TCZETfexkGI/AAAAAAAAAYQ/nfdIc3jW4r8/s1600/plan.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="332" src="http://3.bp.blogspot.com/_cLyDgbVAqWo/TCZETfexkGI/AAAAAAAAAYQ/nfdIc3jW4r8/s640/plan.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-7681206966313109460?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/7681206966313109460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=7681206966313109460' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/7681206966313109460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/7681206966313109460'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2010/06/giving-gantt-charts-some-agile-love.html' title='Giving Gantt charts some Agile love!'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_cLyDgbVAqWo/TCZETfexkGI/AAAAAAAAAYQ/nfdIc3jW4r8/s72-c/plan.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-5773860798759893998</id><published>2010-05-23T22:59:00.000+01:00</published><updated>2010-05-23T22:59:35.758+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='OutSystems'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><title type='text'>Beating the Delivery Deadline!</title><content type='html'>&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_cLyDgbVAqWo/S_mirj-LX5I/AAAAAAAAAYI/xFThJYbrGnU/s1600/stopwatch.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/_cLyDgbVAqWo/S_mirj-LX5I/AAAAAAAAAYI/xFThJYbrGnU/s200/stopwatch.jpg" width="173" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I'm a product delivery manager at&amp;nbsp;&lt;a href="http://www.outsystems.com/"&gt;OutSystems&lt;/a&gt;. In a nutshell, my job is to make sure new versions of the&amp;nbsp;&lt;a href="http://www.outsystems.com/agile-platform"&gt;Agile Platform&lt;/a&gt;&amp;nbsp;are released on time, with quality, and with all the features agreed upon.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Last Friday we released version&amp;nbsp;&lt;b&gt;5.1 beta&lt;/b&gt;&amp;nbsp;of the Agile Platform! And yes, it was&amp;nbsp;&lt;b&gt;released on time&lt;/b&gt;, with quality, and with everything the stakeholders were expecting! Cool, hum?&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;And if you're wondering,&amp;nbsp;&lt;b&gt;this wasn't a one time lucky shot&lt;/b&gt;. This is the 4th version since I'm a delivery manager that we've pulled this off!&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Actually, this shouldn't be anything to be amazed about... But the fact of the matter is that it is so unusual, that it surprises most people I know in the software industry. So I decided to share some&amp;nbsp;principles I follow to make sure we ship on time:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Embrace change:&lt;/b&gt;&amp;nbsp;One of the most&amp;nbsp;anticipated&amp;nbsp;features on 5.1 are the Wizards. Funny enough, the wizards weren't part of 5.1 when it started! This could've been a major stress factor, but it wasn't! From the moment we understood it was the right decision, we were more than thrilled to make it happen!&lt;/li&gt;&lt;li&gt;&lt;b&gt;Don't add, swap:&lt;/b&gt;&amp;nbsp;It's really easy to add a bunch of features to a version, just so see its ship date delayed over and over. Swapping puts a price on features and forces everyone to prioritize. This keeps everyone focused on shipping the most important things first!&lt;/li&gt;&lt;li&gt;&lt;b&gt;Say 'No':&lt;/b&gt;&amp;nbsp;It happens on every version. The end date gets near and everybody wants to add just one more thing. It's much easier to say "yes", but you'll regret it for much longer. I usually put it like this: Is it worth it to miss the ship date to add this last minute feature? It usually isn't...&lt;/li&gt;&lt;li&gt;&lt;b&gt;Know your teams:&lt;/b&gt;&amp;nbsp;5.1 got out on time because we were able to predict how long it would take to build! And the reason we were able to predict this (even with so much change!) is because we studied past versions to learn how long we take to do stuff. And not just the time software takes to build, we also consider interactions with other teams, user feedback, meetings, ...&lt;/li&gt;&lt;li&gt;&lt;b&gt;Establish design rules:&lt;/b&gt;&amp;nbsp;It's really easy to derail when developing software. Establishing good design rules (visions, goals, guidelines, ...) is a great way to make sure everyone is on the same page. To be honest, I usually don't come up with these rules. The teams do! I just help teams stick to them.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Get out of the way:&lt;/b&gt;&amp;nbsp;I'm always available to give help and advice to my teams. But once I feel they're on track, I get out of the way. This is actually much harder to do than it seems, but once you have this level of trust with your teams, it's pure bliss - for both the manager and the team!&lt;/li&gt;&lt;li&gt;&lt;b&gt;Ship:&lt;/b&gt;&amp;nbsp;There's always last minute bugs. There's always a reason to stop the presses and hold the version. Turns out most last minute bugs only occur when the planets are aligned and it's raining in the&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Kalahari_Desert"&gt;Kalahari&lt;/a&gt;...&amp;nbsp;so ship anyway! You can fix it tomorrow!&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;These might seem like easy enough tips, but to each of them there's a lot of preparation, trust, and discernment going on! Not only that, there's a huge requirement to make any of these tips work:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;You need amazing teams working with you!&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Lucky for me,&amp;nbsp;&lt;b&gt;I work with the best teams on the planet!&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-5773860798759893998?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/5773860798759893998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=5773860798759893998' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/5773860798759893998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/5773860798759893998'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2010/05/beating-delivery-deadline.html' title='Beating the Delivery Deadline!'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_cLyDgbVAqWo/S_mirj-LX5I/AAAAAAAAAYI/xFThJYbrGnU/s72-c/stopwatch.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-563651692435733590</id><published>2010-04-25T20:29:00.004+01:00</published><updated>2010-04-25T22:29:44.794+01:00</updated><title type='text'>It's not about the numbers!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_cLyDgbVAqWo/S9Sb6ndliVI/AAAAAAAAAYA/hDtOat6nZ-s/s1600/numbers.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_cLyDgbVAqWo/S9Sb6ndliVI/AAAAAAAAAYA/hDtOat6nZ-s/s320/numbers.png" /&gt;&lt;/a&gt;&lt;/div&gt;When an organization is small, everyone knows what's going on. People have the full context, communication is easy, and so is evaluating performance. Everything is natural, very ad-hoc, and mostly &lt;b&gt;qualitative&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;When the company grows, formalism starts to impose itself. &amp;nbsp;Some evaluation forms (aka Excel files) appear, and&amp;nbsp;&lt;b&gt;goals and metrics are agreed upon&lt;/b&gt;. Still, when evaluation time arrives, everybody is very well aware that &lt;b&gt;things changed&lt;/b&gt; since the day the goals were written, and a more qualitative approach is used once again.&lt;br /&gt;&lt;br /&gt;When the company gets big, people don't know each other so well, and they &lt;b&gt;don't have all the organization's context&lt;/b&gt; at the top of their heads. To make sure everybody is aligned and working for the same grand objective, metrics are put in place.&amp;nbsp;&lt;b&gt;Big mistake!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Don't get me wrong.&lt;b&gt; Metrics are good&lt;/b&gt;. The problem is turning metrics into goals and evaluations. Once you do that, people will try to make the number blindly, even if they have to &lt;b&gt;go against&amp;nbsp;the organization's best interest&lt;/b&gt;. To put it a single sentence:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Metrics are tools, not goals!&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;As with every tool, some care must be taken with metrics. Here's a few hints to make sure your metrics are helping you:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Understand the metric:&lt;/b&gt; Not only the formula to obtain the metric, but why are you getting the current values.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Question the values:&lt;/b&gt; It's really easy to measure wrong. Check your numbers. &lt;a href="http://punditkitchen.files.wordpress.com/2009/04/political-pictures-measure-twice.jpg"&gt;Measure twice, cut once&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Question the metric:&lt;/b&gt; Don't assume the current metric is adequate. Mistakes are made. Things change. More information is available. Be extra critical with metrics!&lt;/li&gt;&lt;li&gt;&lt;b&gt;Study the derivative:&lt;/b&gt; More important than the number, is the derivative. More important than knowing the current numbers, is knowing next month's.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Don't trust all stats:&lt;/b&gt; You need a &lt;a href="http://www.britannica.com/EBchecked/topic/330568/law-of-large-numbers"&gt;big sample of values&lt;/a&gt; to trust statistics. Don't trust averages and the like if the sample is small.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Don't use metrics as a direction:&lt;/b&gt; Use them as guidance.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Talk to people:&lt;/b&gt; &lt;a href="http://www.cafepress.com/pragmaticmarket.56372820"&gt;Don't trust yourself&lt;/a&gt; to analyze the results. Talk to the people that measure. Talk to the people that affect the metric.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div&gt;I'm sure the list goes on and on. What is your advice for working with metrics? Do you have any stories of metrics gone wrong?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-563651692435733590?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/563651692435733590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=563651692435733590' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/563651692435733590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/563651692435733590'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2010/04/its-not-about-numbers.html' title='It&apos;s not about the numbers!'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_cLyDgbVAqWo/S9Sb6ndliVI/AAAAAAAAAYA/hDtOat6nZ-s/s72-c/numbers.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-441929124251720288</id><published>2009-11-01T22:19:00.006Z</published><updated>2009-11-01T22:23:32.265Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>Sprint review meeting: It's all about Marketing!</title><content type='html'>&lt;div&gt;I attend a lot of&amp;nbsp;&lt;a href="http://www.mountaingoatsoftware.com/sprint-review-meeting"&gt;Sprint Review meetings&lt;/a&gt;, and sometimes I leave those meetings a bit sad...&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;It's not that the team hasn't done a great job! Quite the opposite. The teams I work with do &lt;b&gt;miracles&lt;/b&gt;! But, like most engineers, they &lt;b&gt;sell themselves short&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Sprint Review Meetings are all about &lt;/b&gt;&lt;a href="http://en.wikipedia.org/wiki/Marketing"&gt;&lt;b&gt;Marketing&lt;/b&gt;&lt;/a&gt;&lt;b&gt;!&lt;/b&gt; Your team needs to sell the work done during the Sprint to the audience!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here are a few tips to effectively market your work:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Show the value of what you did:&lt;/b&gt;&amp;nbsp;Don't explain how you did it, and don't go into excruciating technical detail about what you implemented... explain the benefits of what you did!&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Do: &lt;/b&gt;"By improving the reticulating splines performance, customers have a much smoother checkout process"&lt;/li&gt;&lt;li&gt;&lt;b&gt;Don't:&lt;/b&gt; "We improved reticulating splines speed by using a really smart b-tree structure"&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Make a big fuss about what you did:&lt;/b&gt; Don't hide the great work you did in a bullet list with all the details of the Sprint. Pick 3 to 5 key points, and make a slide for each of them.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Do:&lt;/b&gt;&lt;br /&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_cLyDgbVAqWo/Su3pNgD4RjI/AAAAAAAAAWA/gq_4ykA82lY/s200/sprint.002.png" /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Don't:&lt;/b&gt;&lt;br /&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_cLyDgbVAqWo/Su4IuVGcnFI/AAAAAAAAAWQ/IKjxKcjsZ04/s320/sprint.001.png" /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Make a real world demo:&lt;/b&gt; Be smart with your seed data. Use real data whenever possible, or some really clever examples to make your demo more effective.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Do:&lt;/b&gt; "Peter Smith bought a Mega Chair and paid it with a Visa card"&lt;/li&gt;&lt;li&gt;&lt;b&gt;Don't:&lt;/b&gt; "Customer A bought Product 1 and paid with card X"&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Talk about the entire Use Case:&lt;/b&gt; Even if you don't demo it all, explain how the user got to the point of the demo and what the user is trying to achieve. It will make understanding your demo much easier.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Do:&lt;/b&gt; "Peter Smith was navigating at our web site to buy a chair. He did a search for chairs, and clicked the 1st result on the list. What you see here is the page present to him at that stage."&lt;/li&gt;&lt;li&gt;&lt;b&gt;Don't:&lt;/b&gt; "Assume Customer 1 is at this page"&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Make a clean demo:&lt;/b&gt; The demo should be as near to reality as possible. Avoid launching the command line, use batch files, or employ other kind of odd gizmos during your demo.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Don't dwell on what you didn't do:&lt;/b&gt; If your team made a commitment to this sprint that it wasn't able to keep, mention it, give a one sentence justification, and move along. Be prepared to answer any questions that may arise, but don't spend the time you have to talk about what you did, speaking about what you didn't do.&lt;/li&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;What other tips would you add to this list? How do you turn your Sprint Review meetings into huge successes?&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-441929124251720288?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/441929124251720288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=441929124251720288' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/441929124251720288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/441929124251720288'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2009/11/sprint-review-meeting-its-all-about.html' title='Sprint review meeting: It&apos;s all about Marketing!'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_cLyDgbVAqWo/Su3pNgD4RjI/AAAAAAAAAWA/gq_4ykA82lY/s72-c/sprint.002.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-284702234219727588</id><published>2009-10-27T16:25:00.006Z</published><updated>2009-10-26T20:58:35.077Z</updated><title type='text'>When is enough good enough?</title><content type='html'>We all love perfect products! Those products that you actually feel pleasure just for using. And naturally, we all want to make our own products perfect!&lt;br /&gt;&lt;br /&gt;But &lt;span style="font-weight: bold;"&gt;perfection comes at a price&lt;/span&gt;. Generally speaking, the closer you want to get to perfection, the more it will cost you. And the cost increase isn't linear!&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5396166727666172754" src="http://1.bp.blogspot.com/_cLyDgbVAqWo/SuMJDHdTA1I/AAAAAAAAAVI/sc6Op6Ai3C0/s400/chart.001.png" style="cursor: pointer; display: block; height: 274px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;span style="color: #666666;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: #999999;"&gt;(the smiling faces represent the mood of your "average user")&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This means you have to be careful when investing on perfection. In most scenarios, there's simply &lt;span style="font-weight: bold;"&gt;not enough time to make everything perfect&lt;/span&gt;. Nothing new here, right? It's just the old quantity vs. quality dilemma. You either do 1 perfect thing, or you do 2 "good enough" things.&lt;br /&gt;&lt;br /&gt;If you take this into a software product scope, there are a few guidelines that can help deciding how perfect your feature needs to be:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;How many times will the feature be used?&lt;/span&gt; Rarely used features can be a bit uncomfortable, and seldom used features can be good enough. Perfection should be saved for those features that are used all the time!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Who will be using the feature?&lt;/span&gt; Features targeted at one particular user can get away with a hack. For features existing users are craving for, a quick "good enough" solution may be better than a delayed perfect solution. If you're aiming for first time users, you should go for perfection, to make sure they stick around for more.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;How unique is the feature?&lt;/span&gt; Is this something every other product does? Is it always done the same way? Unless this is really core to your product, you probably should stick to good enough and go with the crowd. But if this is something truly unique to your product, polish it up for perfection!&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Is the feature demo-able?&lt;/span&gt; If this is something you'll be wanting to show at a prospect demo or at a room with 400 people, going for perfection is a good investment.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Is the feature sell-able? &lt;/span&gt;Is this one of those features that has the potential to enchant customers? Better yet, is this a feature customers will be talking about to your prospects? If so, by all means make it perfect!&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;These are just a few things to consider. I bet there's lots more! What factors do you take into consideration when deciding how much effort you should invest on a feature?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;PS: &lt;/span&gt;The same principle can be applied to a bunch of other areas of a software product, like documentation and marketing. Anyone care to make a blog post about those? :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-284702234219727588?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/284702234219727588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=284702234219727588' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/284702234219727588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/284702234219727588'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2009/10/when-is-enough-good-enough.html' title='When is enough good enough?'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_cLyDgbVAqWo/SuMJDHdTA1I/AAAAAAAAAVI/sc6Op6Ai3C0/s72-c/chart.001.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-117854288591418666</id><published>2009-09-06T20:52:00.003+01:00</published><updated>2009-10-24T16:30:59.062+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>The Secret of Agile Speed</title><content type='html'>Here's an introductory video on how Agile improves your projects' speed.&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/rhIu-hjvxc4&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/rhIu-hjvxc4&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-117854288591418666?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/117854288591418666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=117854288591418666' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/117854288591418666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/117854288591418666'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2009/09/secret-of-agile-speed.html' title='The Secret of Agile Speed'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-3830734999328414849</id><published>2009-07-10T22:55:00.003+01:00</published><updated>2009-07-11T15:40:15.154+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>Reading burndown charts</title><content type='html'>&lt;div&gt;&lt;a href="http://en.wikipedia.org/wiki/Burn_down_chart"&gt;Burndown charts&lt;/a&gt; are a fairly common tool used in &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;Agile projects&lt;/a&gt; to measure the velocity of a team. It usually contains two sets of data, the actual missing effort and the expected missing effort. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The thing is, &lt;b&gt;looking at a burndown chart is useless, unless you have a very good understanding of what’s going on with the project&lt;/b&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here’s a sample of a burndown chart:&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_cLyDgbVAqWo/SleQXfZh_-I/AAAAAAAAAUg/6P6Z0KhtzrM/s1600-h/burndown1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://4.bp.blogspot.com/_cLyDgbVAqWo/SleQXfZh_-I/AAAAAAAAAUg/6P6Z0KhtzrM/s400/burndown1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5356909015020470242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;At first glance, it seems things aren’t bad. Although there is a “saw” look to it, every couple of weeks things go back to normal. The drops seem to occur at the end of each iteration (assuming 2 week iterations). But the thing is, the chart doesn’t show us &lt;b&gt;why&lt;/b&gt; the drops occur!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One reason might be poor self management by the team. They only close the stories at the end of the iteration. This is a good scenario, because it means you can quickly coach the team to have more fine grained stories, so you can have better visibility on the project.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another reason for these drops might be that, at the end of each iteration, the team reviews the backlog and realizes it will miss the date. With that in mind, they remove the last items from the backlog, and the project gets back on track. This is way more problematic!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The team is assuming the project is about 1/2 weeks late (marked by the dotted red line), so they cut 1/2 weeks worth of work from the backlog. But the reality is that &lt;b&gt;the project is 5 weeks late!&lt;/b&gt; (marked by the dotted blue line).&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_cLyDgbVAqWo/SleQe_KbebI/AAAAAAAAAUo/YmSJ9iBAUnA/s1600-h/burndown2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://4.bp.blogspot.com/_cLyDgbVAqWo/SleQe_KbebI/AAAAAAAAAUo/YmSJ9iBAUnA/s400/burndown2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5356909143806146994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;The consequence of this is that the team will have to cut about half of the backlog to finish the project on time! This can obviously have catastrophic implications for the project....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are several ways to deal this problem, but the important thing is that action is taken as soon as possible. And to be able to quickly understand what is going on, &lt;b&gt;you cannot trust on the burndown chart alone. You need a very good understanding of what is going on with the project&lt;/b&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-3830734999328414849?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/3830734999328414849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=3830734999328414849' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/3830734999328414849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/3830734999328414849'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2009/07/reading-burndown-charts.html' title='Reading burndown charts'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_cLyDgbVAqWo/SleQXfZh_-I/AAAAAAAAAUg/6P6Z0KhtzrM/s72-c/burndown1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-1172125809007297920</id><published>2009-05-09T12:09:00.009+01:00</published><updated>2009-05-09T14:55:36.612+01:00</updated><title type='text'>Analyzing Movable Type search logs</title><content type='html'>The &lt;a href="http://blog.outsystems.com/aboutagility/"&gt;OutSystems blog&lt;/a&gt; uses &lt;a href="http://www.movabletype.org/"&gt;Movable Type&lt;/a&gt;. I was curious to see what type of searches were being made on the blog, so I downloaded the logs from MT's back-office and started thinking how I could analyze them.&lt;br /&gt;&lt;br /&gt;I wanted to generate &lt;a href="http://en.wikipedia.org/wiki/Comma-separated_values"&gt;CSV&lt;/a&gt; files, so I could open them in &lt;a href="http://office.microsoft.com/en-us/excel/default.aspx"&gt;Excel&lt;/a&gt; or &lt;a href="http://www.apple.com/iwork/numbers/"&gt;Numbers&lt;/a&gt;. At first I considered &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;, because it has good CSV support. But most of the work would consist in parsing the MT log file, so then I considered &lt;a href="http://www.perl.org/"&gt;Perl&lt;/a&gt;. The problem with Perl is that I can never remember the syntax, so in the end I decided to just use the Unix command line.&lt;br /&gt;&lt;br /&gt;I started out by checking unique sentences in the file:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;grep "Search: query for" logfile.csv | cut -d \' -f 2 | tr '[A-Z]' '[a-z]' | sort | uniq -c | sort -nr | sed 's/ *\([0-9]*\) \(.*\)/\2, \1/' &gt; sentences.csv&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here's what this does:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;grep "Search: query for" logfile.csv &lt;/span&gt;- Get all the lines from the log that are searches&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;cut -d \' -f 2 &lt;/span&gt;- Extract the content of the search. This might not work if the content has &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;'&lt;/span&gt; on it, so be advised.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;tr '[A-Z]' '[a-z]' &lt;/span&gt;- Turn everything to lowercase.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;sort &lt;/span&gt;- Group the sentences (for &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;uniq -c&lt;/span&gt; to work).&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;uniq -c &lt;/span&gt;- Count the unique occurrences of each sentence.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;sort -nr &lt;/span&gt;- Sort by numbers, in reverse order.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;sed 's/ *\([0-9]*\) \(.*\)/\2, \1/' &lt;/span&gt;- Transform the result into a CSV file.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;&gt; sentences.csv &lt;/span&gt;- Save to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;sentences.csv&lt;/span&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Turns out this wasn't very useful, because there are a lot of different sentences. One of them kind of stand out, but it accounted for about 5% of the searches. So I've added a bit of &lt;a href="http://en.wikipedia.org/wiki/AWK"&gt;awk&lt;/a&gt; to do the same for the words, instead of the sentences:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;grep "Search: query for" logfile.csv | cut -d \' -f 2 | tr '[A-Z]' '[a-z]' | &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;awk '{for (i=1;i&lt;=NF;i++) print $i}'&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; | sort | uniq -c | sort -nr | sed 's/ *\([0-9]*\) \(.*\)/\2, \1/' &gt; words.csv&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The awk script splits the sentences into words. This issue a more interesting result: 26% of the searches include the word "&lt;b&gt;Agile&lt;/b&gt;"! Note that this counts words like "and" and "the", but it's easy enough to remove them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's some more fun stuff you can do with this! Use &lt;a href="http://www.wordle.net/"&gt;Wordle&lt;/a&gt; to create a word cloud:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_cLyDgbVAqWo/SgV_YnxdknI/AAAAAAAAATg/cLKWl_xotcQ/s1600-h/search_word_cloud.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 212px;" src="http://3.bp.blogspot.com/_cLyDgbVAqWo/SgV_YnxdknI/AAAAAAAAATg/cLKWl_xotcQ/s400/search_word_cloud.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5333809394660250226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Or you can check where the accesses come from. If you have an &lt;a href="http://www.iplocationtools.com/sql_database.php"&gt;IP geolocation DB&lt;/a&gt;, you can try this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;grep "Search: query for" $1 | cut -d , -f 2 | sort | uniq | awk '{print "SELECT country_name FROM ip_group_country where ip_start &lt;= INET_ATON(\""$1"\") order by ip_start desc limit 1;"}' | mysql --skip-column-names -B -uGeoDBUser -pGeoDBPwd GeoDB | sort | uniq -c | sort -nr | sed 's/ *\([0-9]*\) \(.*\)/\2, \1/' &gt; geo.csv&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can then open the file and make a nice chart! Have fun!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_cLyDgbVAqWo/SgWLAzEsO5I/AAAAAAAAATo/kxRzw76lKgo/s1600-h/search_by_country.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 280px; height: 298px;" src="http://3.bp.blogspot.com/_cLyDgbVAqWo/SgWLAzEsO5I/AAAAAAAAATo/kxRzw76lKgo/s400/search_by_country.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5333822179516365714" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-1172125809007297920?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/1172125809007297920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=1172125809007297920' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1172125809007297920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1172125809007297920'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2009/05/analyzing-movable-type-search-logs.html' title='Analyzing Movable Type search logs'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_cLyDgbVAqWo/SgV_YnxdknI/AAAAAAAAATg/cLKWl_xotcQ/s72-c/search_word_cloud.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-656217400872347630</id><published>2009-03-04T19:00:00.005Z</published><updated>2009-03-04T21:14:33.443Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OutSystems'/><title type='text'>Great employee care!</title><content type='html'>I had a baby boy a few days ago. Because of that, I'm on leave from work. And, to my surprise, today I got a gift delivered to my house.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It was a gift from the company I work for, &lt;a href="http://www.outsystems.com/"&gt;OutSystems&lt;/a&gt;! It was a plant for my wife, a cigar for me, and a bunch of stuff for the baby, including some diapers, a blanket and some baby shoes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My company treats me pretty good on a regular basis, but for some reason this attention they had really hit a chord. It was a really thoughtful gesture, and I truly appreciate the gift!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is even more meaningful if you consider the tough times we're going through. To me, this sends a clear message that OutSystems is devoted to great employee care, even in the middle of the current crisis.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thank you &lt;a href="http://www.outsystems.com/"&gt;OutSystems&lt;/a&gt;!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_cLyDgbVAqWo/Sa7vF86FCPI/AAAAAAAAASE/A6WT7bW6u9M/s1600-h/collage.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 325px;" src="http://1.bp.blogspot.com/_cLyDgbVAqWo/Sa7vF86FCPI/AAAAAAAAASE/A6WT7bW6u9M/s400/collage.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5309443896244504818" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-656217400872347630?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/656217400872347630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=656217400872347630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/656217400872347630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/656217400872347630'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2009/03/great-employee-care.html' title='Great employee care!'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_cLyDgbVAqWo/Sa7vF86FCPI/AAAAAAAAASE/A6WT7bW6u9M/s72-c/collage.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-8960714324925921782</id><published>2009-02-14T13:13:00.002Z</published><updated>2009-02-14T13:24:16.841Z</updated><title type='text'>Sharing a mouse and a keyboard between computers</title><content type='html'>I &lt;a href="http://kutuma.blogspot.com/2008/06/i-bought-mac.html"&gt;have a Mac&lt;/a&gt; at home. Considering I spend most of my computer time @ work, the poor computer was feeling kind of lonely.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Taking the Mac to work allows me to use a bunch of stuff that I really like, for task organization, to do some script development, and so on. But having to swap between keyboards and mouse is a pain.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Along comes &lt;a href="http://synergy2.sourceforge.net/"&gt;Synergy&lt;/a&gt;. It allows you to share a mouse and keyboard across computers and it works in a bunch of OSs, so I can have the server running on my windowz box, the client on the Mac, and share the mouse and keyboard between them. And it even allows you to copy paste text between the 2 boxes!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Synergy works pretty good, and I'm using it every working day, but there are a few quirks that are kind of annoying. Here they are, so you can level your expectations on it:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;When the host machine is working hard (CPU or HDD) it stops working. This is a bit of a pain, because most of the time I want to go to the Mac when windowz is trashing.&lt;/li&gt;&lt;li&gt;The keyboard layout for the Mac is a bit strange. You get Alt for Command, and the Windows key for Option. This means you use Alt-C to copy on the Mac and Ctrl-V to paste on Windows. It gets a bit confusing.&lt;/li&gt;&lt;li&gt;It's not that tolerant to bandwidth ups and downs. Since my Wifi network at work sucks, this is a problem sometimes.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Still, it is a pretty cool piece a software and well worth the try. And the price is right!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-8960714324925921782?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/8960714324925921782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=8960714324925921782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/8960714324925921782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/8960714324925921782'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2009/02/sharing-mouse-and-keyboard-between.html' title='Sharing a mouse and a keyboard between computers'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-5401533540429101053</id><published>2008-12-04T22:11:00.000Z</published><updated>2008-12-06T22:37:56.518Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='utils'/><title type='text'>Cleaning up your computer to give away</title><content type='html'>While cleaning up the house, I came up across two old computers that I really don't want. One of them is old enough to recycle, the other one I'll give away for charity. Eitherway, I want the hard-drives to be clean before they leave the house. Not that I have any sensitive stuff on them, but there's probably enough info for some identity theft.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fortunately, a while ago I came across this tool: &lt;a href="http://www.dban.org/"&gt;Darik's Boot and Nuke&lt;/a&gt;. This is basically an image file you download and burn on a CD. You boot the computer you want to recycle/give away/sell with the CD and it just wipes all your hard drives.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I used it with both computers and it worked perfectly. Now I can give them away without concern.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oh, using this software had an unexpected bonus! Because I had to open the CD drive, it stopped me from sending the computer away with a backup CD in it!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-5401533540429101053?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/5401533540429101053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=5401533540429101053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/5401533540429101053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/5401533540429101053'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2008/12/cleaning-up-your-computer-to-give-away.html' title='Cleaning up your computer to give away'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-1272609659782607256</id><published>2008-09-28T23:01:00.005+01:00</published><updated>2008-09-28T23:42:57.552+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='cake'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Setting up Cake on a custom folder</title><content type='html'>&lt;p style="text-align: left;"&gt;I wanted to try the &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; framework &lt;a href="http://cakephp.org/"&gt;Cake&lt;/a&gt;, but if you look at the documentation it assumes you want to install Cake under the &lt;span style="font-family:'Courier New';"&gt;/var/www/html&lt;/span&gt; folder.&lt;/p&gt;&lt;p style="text-align: left;"&gt;You can obviously install to other folders, but if not done properly, you'll encounter a start page with no images, no styles, and some error messages.&lt;/p&gt;&lt;p style="text-align: left;"&gt;The steps I took to make Cake work in my folder (&lt;span style="font-family:'Courier New';"&gt;/home/me/dev/myapp&lt;/span&gt;) and to work with the &lt;span style="font-family:courier new;"&gt;http://localhost/myapp&lt;/span&gt; URL where:&lt;/p&gt;&lt;ol&gt;  &lt;li&gt;Uncompress the latest version of Cake to &lt;span style="font-family:'Courier New';"&gt;/home/me/dev/myapp&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;Edit my &lt;span style="font-family:courier new;"&gt;/etc/apache2/users/me.conf&lt;/span&gt; and add the following (replace &lt;a href="http://en.wikipedia.org/wiki/Bracket"&gt;braces&lt;/a&gt; with &lt;a href="http://en.wikipedia.org/wiki/Bracket"&gt;chevrons&lt;/a&gt;):&lt;pre&gt;Alias /myapp/ "/home/me/dev/myapp/"&lt;br /&gt;{Directory  "/home/me/dev/myapp/"}&lt;br /&gt; AllowOverride All&lt;br /&gt; Order allow,deny&lt;br /&gt; Allow from all&lt;br /&gt;{/Directory}&lt;/pre&gt;&lt;/li&gt;  &lt;li&gt;Edit the .&lt;span style="font-family:courier new;"&gt;htaccess&lt;/span&gt; file in your &lt;span style="font-family:'Courier New';"&gt;/home/me/dev/myapp&lt;/span&gt; folder and add &lt;span style="font-family:courier new;"&gt;RewriteBase /myapp/&lt;/span&gt; to it. Should look something like (replace &lt;a href="http://en.wikipedia.org/wiki/Bracket"&gt;braces&lt;/a&gt; with &lt;a href="http://en.wikipedia.org/wiki/Bracket"&gt;chevrons&lt;/a&gt;):&lt;pre&gt;{IfModule mod_rewrite.c}&lt;br /&gt; RewriteEngine on&lt;br /&gt; RewriteBase /myapp/&lt;br /&gt; RewriteRule ^$ app/webroot/     [L]&lt;br /&gt; RewriteRule (.*) app/webroot/$1 [L]&lt;br /&gt;{/IfModule}&lt;/pre&gt;&lt;/li&gt;  &lt;li&gt;Make sure your &lt;span style="font-family:courier new;"&gt;/home/me/dev/myapp/app/tmp&lt;/span&gt; folder is writable by all&lt;/li&gt;  &lt;li&gt;Restart &lt;a href="http://www.apache.org/"&gt;apache&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;And that's it. After these steps you should be able to access your application and see the default Cake page, including images &amp;amp; CSS.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-1272609659782607256?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/1272609659782607256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=1272609659782607256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1272609659782607256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1272609659782607256'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2008/09/setting-up-cake-on-your-home-folder.html' title='Setting up Cake on a custom folder'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-7498778069816306952</id><published>2008-09-13T21:31:00.003+01:00</published><updated>2008-09-13T22:17:18.913+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mouse'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Mighty Mouse design flaw</title><content type='html'>I bought a &lt;a href="http://www.apple.com/mightymouse/"&gt;Mighty Mouse&lt;/a&gt; from Apple. I wanted a wireless mouse for my computer, and the Mighty Mouse seemed like the perfect choice for my Mac.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The mouse is beautiful, the buttons work pretty well and the scroll ball is great! But the mouse has a rather annoying design flaw:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;You cannot lift the mouse while clicking!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's the problem: The mouse detects the button is pressed because you press the body of the mouse against the base of the mouse. When you lift the mouse, there's no longer pressure between the body and the base of the mouse. So our mighty mouse assumes you're no longer pressing the button.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's somewhat of a work around for this... If you squeeze the mouse, the base does not drop and you can lift the mouse. But since squeezing the mouse brings up &lt;a href="http://support.apple.com/kb/HT2503"&gt;Exposé&lt;/a&gt;, things can get pretty weird...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This can be a real pain when you're trying to drag files from an end of the screen to another, or when you're trying to make a huge selection... it is one of those design vs. function options that I'm still not sure if Apple's done the right choice.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-7498778069816306952?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/7498778069816306952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=7498778069816306952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/7498778069816306952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/7498778069816306952'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2008/09/mighty-mouse-design-flaw.html' title='Mighty Mouse design flaw'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-4185752518736927452</id><published>2008-08-14T13:08:00.003+01:00</published><updated>2008-08-14T13:11:52.820+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='cocoa'/><title type='text'>Hello world in Cocoa-Ruby</title><content type='html'>Here's a short video on how to do a "hello world" application in Cocoa-Ruby.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/838MHbylnbk&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/838MHbylnbk&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;This was based on &lt;a href="http://www.fobj.com/hisa/d/20071028.html"&gt;this japanese video&lt;/a&gt; I found on the web.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-4185752518736927452?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/4185752518736927452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=4185752518736927452' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4185752518736927452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4185752518736927452'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2008/08/hello-world-in-cocoa-ruby.html' title='Hello world in Cocoa-Ruby'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-328716560593589693</id><published>2008-07-03T00:20:00.000+01:00</published><updated>2008-08-09T00:28:03.735+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Killing programs on Windows shutdown</title><content type='html'>My Windows computer at the office takes quite some time to restart... so, whenever there's an update or such that requires a restart, I wait for a moment that I'm away from the computer to do so. Turns out that it's not that unusual to return to a dialog box stating that some program has failed to exit with a button to "click to end".&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fortunately there's a workaround for this not so smart behavior. Start regedit (*sigh*), go to &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;HKEY_CURRENT_USER\Control Panel\Desktop&lt;/span&gt; and alter the key &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;AutoEndTasks&lt;/span&gt; to the value &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;1&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS: I'm not really sure if this works, because I'm always away when my computer reboots... but I haven't seen that message again!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-328716560593589693?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/328716560593589693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=328716560593589693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/328716560593589693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/328716560593589693'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2008/07/killing-programs-on-windows-shutdown.html' title='Killing programs on Windows shutdown'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-3665116437503365008</id><published>2008-06-10T18:44:00.003+01:00</published><updated>2008-06-10T19:48:17.239+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>PHP on the Mac</title><content type='html'>If you have a Mac with &lt;a href="http://www.apple.com/macosx/"&gt;Leopard&lt;/a&gt; and want to use &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt;, most of what you need is already installed. It's just a matter of making it work.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First you need to turn on &lt;a href="http://www.apache.org/"&gt;apache&lt;/a&gt;. Just go to your "System Preferences", "Sharing" and turn on "Web Sharing". That's it, apache is running. You can check if all is ok by going to &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;http://localhost&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You'll probably want &lt;a href="http://www.mysql.com/"&gt;MySql&lt;/a&gt; too. Just go to their site, download and install. No big fuss, but make sure you install the &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;StartupItem&lt;/span&gt; if you want MySql to start when the system boots.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next you must enable PHP. Launch a terminal and use your favorite text editor to edit&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; /etc/apache2/httpd.conf&lt;/span&gt;. Look for &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LoadModule php5_module&lt;/span&gt; and uncomment the line. Restart apache with &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;sudo apachectl graceful&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now let's say your username is &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;john&lt;/span&gt;, and you have on your home folder a &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;~/dev/phpproj&lt;/span&gt; where your php code is. One way to make this available (and there's lots of others) is to edit &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;/etc/apache2/users/john.conf&lt;/span&gt; and add the following to the bottom of the file (replace [ with "lesser than" and ] with "greater than". Blogger doesn't like those symbols):&lt;/div&gt;&lt;div&gt;&lt;pre&gt;Alias /phpproj/ "/Users/john/dev/phpproj/"&lt;br /&gt;[Directory "/Users/john/dev/phpproj/"]&lt;br /&gt; Options Indexes MultiViews&lt;br /&gt; Order allow,deny&lt;br /&gt; Allow from all&lt;br /&gt;[/Directory]&lt;/pre&gt;&lt;/div&gt;&lt;div&gt; Now you can access &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;http://localhost/phpproj/&lt;/span&gt; to view your app.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At this point you might get a MySql error stating that you &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;/var/mysql/mysql.sock&lt;/span&gt; does not exist, just go back to your terminal window and type:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;cd /var&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;sudo mkdir mysql&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;cd mysql&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;sudo ln -s /private/tmp/mysql.sock mysql.sock&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's it!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-3665116437503365008?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/3665116437503365008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=3665116437503365008' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/3665116437503365008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/3665116437503365008'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2008/06/php-on-mac.html' title='PHP on the Mac'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-4412059359515720571</id><published>2008-06-10T17:59:00.000+01:00</published><updated>2008-06-10T18:43:40.204+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>I bought a Mac!</title><content type='html'>About a year ago I wrote some reasons why &lt;a href="http://kutuma.blogspot.com/2007/06/why-am-not-buying-mac.html"&gt;I wasn't buying a Mac&lt;/a&gt;. Well, a year has come and gone an I bought a &lt;a href="http://www.apple.com/macbook/"&gt;Mac&lt;/a&gt;! And so far, I'm very happy with it!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I could go on forever about what's so great about my Mac, how cool it is just to unpack it, how beautiful the hardware and software are, and all that. But you can read about a million posts on the web about that, so I won't bother.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Instead I'm going to focus on the parts that aren't so good. This way people switching from &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; to Mac will know what to expect.&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;You have to pay for the software: Oh yeah, most software is closed source and payed for. I really miss doing &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;apt-get &lt;software&gt;&lt;/software&gt;&lt;/span&gt; and it just works, no payment, no registration...&lt;/li&gt;&lt;li&gt;The keyboard is... different: I have a portuguese keyboard. The Mac doesn't have a } anywhere visible on the keyboard! It took me a while to figure I had to type &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;alt&gt;-&lt;shift&gt;-9&lt;/shift&gt;&lt;/alt&gt;&lt;/span&gt;! &lt;/li&gt;&lt;li&gt;X11 compatible... kind of: You can run X apps on the Mac. I installed &lt;a href="http://www.gimp.org/"&gt;Gimp&lt;/a&gt;, and it works. But the UI is a bit clumsy... For starters, the keyboard shortcuts aren't the same for X and Mac (e.g. in Mac you copy with &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;cmd&gt;-c&lt;/cmd&gt;&lt;/span&gt;, in X with &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;ctrl&gt;-c&lt;/ctrl&gt;&lt;/span&gt;). Second, the windows interaction is awkward. In "X mode" you have to click the window to get the focus, then click the button on the window to make it work. Since the Gimp has multiple windows, this is very annoying.&lt;/li&gt;&lt;li&gt;No out of the box NTFS write support: C'mon! I have an external 500Gb HD formatted in NTFS! I had to install &lt;a href="http://code.google.com/p/macfuse/"&gt;MacFUSE&lt;/a&gt; from google to make it work!&lt;/li&gt;&lt;li&gt;Only 2 USB ports: Good thing I have a hub!&lt;/li&gt;&lt;li&gt;Strange video output: It has a mini-DVI. Never seen one before. Oh well, I don't have another monitor, so it's not a big problem.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;And I can't remember anything else... but I only have the laptop for 4 days!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Don't get me wrong, I love my Mac! But, like all things, it has some downsides. And the biggest one AFAIK is the non-open nature of this platform. Still, if I was going shopping again today, I would still buy the Mac!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-4412059359515720571?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/4412059359515720571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=4412059359515720571' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4412059359515720571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4412059359515720571'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2008/06/i-bought-mac.html' title='I bought a Mac!'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-1622625301974063102</id><published>2008-05-03T15:07:00.002+01:00</published><updated>2008-05-03T15:09:42.944+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Reso. not supported</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I bought a &lt;a href="http://www.iomega.com/direct/products/detail.jsp?PRODUCT%3C%3Eprd_id=59147833&amp;amp;FOLDER%3C%3Efolder_id=60799373&amp;amp;bmUID=1209822965374"&gt;500Gb Iomega Screenplay HD&lt;/a&gt;. I needed some place to backup my photos, and since I don't like watching long videos sitting at the computer, I figured a multimedia drive was the way to go.&lt;br /&gt;&lt;br /&gt;I tried it out with a bunch of videos and it seems to work pretty good. It supports enough formats, it has support for subtitles, and it lets me see my photos (though it is a bit slow showing pictures).&lt;br /&gt;&lt;br /&gt;Then I tried another video that I really wanted to watch, and I got this error:&lt;br /&gt;&lt;blockquote&gt;Reso. not supported&lt;br /&gt;&lt;/blockquote&gt;I must confess it took me a bit to understand that it meant "Resolution not supported"! After I got finally got that, the solution was obvious! Change the resolution of the video.&lt;br /&gt;&lt;br /&gt;To do that I used &lt;a href="http://fixounet.free.fr/avidemux/"&gt;Avidemux&lt;/a&gt;. It is very easy to use and has these "Auto" configurations that basically do exactly what you want. All I had to do was open the video, select "Auto/DVD", configure to do a single pass (double pass is the default, but it takes twice as long to convert), and wait. Now I can see the video on my multimedia drive!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-1622625301974063102?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/1622625301974063102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=1622625301974063102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1622625301974063102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1622625301974063102'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2008/05/reso-not-supported.html' title='Reso. not supported'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-8686856272298381731</id><published>2008-05-01T00:19:00.001+01:00</published><updated>2008-05-01T11:40:49.477+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='picasa'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Problems with Picasa 2 in Ubuntu</title><content type='html'>I've upgraded my &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; installation to Hardy Heron.&lt;br /&gt;&lt;br /&gt;I had some new photos to check, so after installing the system the 1st thing I did was get &lt;a href="http://picasa.google.com/linux/"&gt;Picasa&lt;/a&gt;. I ran the software, it started scanning my hard drive, and it just didn't go past the 5th photo folder on my hard drive (I've got about 400 photo folders).&lt;br /&gt;&lt;br /&gt;I immediately cursed the new Ubuntu release, because after my &lt;a href="http://kutuma.blogspot.com/2007/11/upgrading-to-gutsy-gibbon.html"&gt;upgrade to Gutsy Gibbon&lt;/a&gt; I also had problems with Picasa.... but turns out that this time the problem wasn't in Ubuntu, it was in Picasa.&lt;br /&gt;&lt;br /&gt;The symptoms of the problem are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Hard disk always on&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Computer stand still... even the mouse moves slow&lt;/li&gt;&lt;li&gt;No matter how long you wait (I left the computer working over night) nothing happens&lt;/li&gt;&lt;/ul&gt;The solution is a bit drastic, but it works. Basically Picasa is generating huge invalid &lt;span style="font-family:courier new;"&gt;Picasa.ini&lt;/span&gt; files, and those are messing the system. All you have to do is delete the invalid files. One easy way to spot them is by their size:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;find . -size +512 -name  Picasa.ini&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To make Picasa get back on track, just delete them. You can use &lt;span style="font-family:Courier New;"&gt;xargs&lt;/span&gt; to do this:&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;find . -size +512 -name  Picasa.ini | xargs rm&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;or (if you have directory names with strange characters):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;find . -size +512 -name  Picasa.ini -print0  | xargs -0 rm&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Note that this will not destroy any of your photos, but it will destroy any changes you made to the photos in Picasa, like crops, tunnings, ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-8686856272298381731?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/8686856272298381731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=8686856272298381731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/8686856272298381731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/8686856272298381731'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2008/05/problems-with-picasa-2-in-ubuntu.html' title='Problems with Picasa 2 in Ubuntu'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-4614658476173216255</id><published>2008-04-01T22:25:00.003+01:00</published><updated>2008-04-01T22:29:12.954+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Registry entry for Java Preferences</title><content type='html'>&lt;a href="http://java.sun.com/j2se/1.4.2/docs/guide/lang/preferences.html"&gt;Java Preferences&lt;/a&gt; in Windows are stored in the registry entry:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;HKLM\Software\Javasoft\Prefs\&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;HKCU\Software\Javasoft\Prefs\&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There, now I don't have to dig this information on the net again!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-4614658476173216255?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/4614658476173216255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=4614658476173216255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4614658476173216255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4614658476173216255'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2008/04/registry-entry-for-java-preferences.html' title='Registry entry for Java Preferences'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-1537585290880834182</id><published>2008-03-30T22:31:00.003+01:00</published><updated>2008-03-30T23:34:23.625+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='telescope'/><category scheme='http://www.blogger.com/atom/ns#' term='astronomy'/><title type='text'>What can you see with a 60mm telescope?</title><content type='html'>Like every other geek, I love astronomy and most things related to space. I never truly pursued this topic, apart from the odd article on &lt;a href="http://www.nationalgeographic.com/"&gt;NGS&lt;/a&gt;, but now I get to use a telescope on the weekends.&lt;br /&gt;&lt;br /&gt;The telescope ain't that much, but it ain't that bad either. It's a &lt;a href="http://www.telescopes.com/telescopes/refracting-telescopes/telescopes/refracting-telescopes/konustart900motorrefractorwithramotor.cfm?source=gbase&amp;amp;tid=KONU094&amp;amp;gbid=Konus_KonuStart_900_Motor_Refractor_Telescope_with_RA_Motor_and_Electronic_Focuser"&gt;60mm Konus&lt;/a&gt;, with &lt;a href="http://en.wikipedia.org/wiki/Equatorial_mount"&gt;equatorial mount&lt;/a&gt; and a motor (which basically means I can point at an object, turn on the motor and the motor will make up for Earth's rotation).&lt;br /&gt;&lt;br /&gt;One of the things I would like to know is what can you see with such a telescope. Oddly enough, I still wasn't able to find a comprehensive list on the net... so here's what I was able to see so far: (I've only used the telescope 3 times, so I hope the list will grow in the future!)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Moon"&gt;Moon&lt;/a&gt;: Excellent view, great contrast on the craters. I plan to look at it with a lot more detail.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Saturn"&gt;Saturn&lt;/a&gt;: I was able to see the rings without a problem. I still wasn't able to see the &lt;a href="http://en.wikipedia.org/wiki/Cassini_Division#Cassini_Division"&gt;Cassini Division&lt;/a&gt;, but I'll keep trying. I was able to see a bit of the texture of the planet, but it's mostly a small white ball. I was also able to see one of the moons of Saturn (&lt;a href="http://en.wikipedia.org/wiki/Dione_%28moon%29"&gt;Dione&lt;/a&gt;, I believe).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Mars"&gt;Mars&lt;/a&gt;: I've seen it without much detail, because right now it is way up in the sky and therefore a bit uncomfortable to watch. Still, it is rather small, and the only detail I was able to see was that it was only partly lit by the Sun.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Orion_Nebula"&gt;Orion Nebula&lt;/a&gt;: You can see the &lt;a href="http://en.wikipedia.org/wiki/Trapezium_%28astronomy%29"&gt;trapezium cluster&lt;/a&gt; without a problem, as well as the nearer 3 stars. But the nebula itself is rather faint, and you can only see the brightest part. And even that is only a small blur.&lt;/li&gt;&lt;/ul&gt;Next, I plan to see the &lt;a href="http://en.wikipedia.org/wiki/Sun"&gt;Sun&lt;/a&gt; (I'll need to buy a filter), &lt;a href="http://en.wikipedia.org/wiki/Jupiter"&gt;Jupiter&lt;/a&gt; and some other &lt;a href="http://www.webcam-astrophotography.com/data/messier-objects-magnitude.html"&gt;Messier objects&lt;/a&gt;. (I'd really like to see the &lt;a href="http://en.wikipedia.org/wiki/Whirlpool_Galaxy"&gt;Whirlpool Galaxy&lt;/a&gt;, but I still wasn't able to spot it... don't even know if it is visible with my telescope!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-1537585290880834182?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/1537585290880834182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=1537585290880834182' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1537585290880834182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1537585290880834182'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2008/03/what-can-you-see-with-60mm-telescope.html' title='What can you see with a 60mm telescope?'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-4722740872136818136</id><published>2008-02-18T21:18:00.003Z</published><updated>2008-02-18T21:30:44.338Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Creating an SVN repositoy</title><content type='html'>I do a bunch of personal projects and, in the spirit of &lt;a href="http://kutuma.blogspot.com/2007/07/use-source-control-always.html"&gt;keeping it all under source control&lt;/a&gt;, I always create an SVN repository for all of them (even if I don’t finish them… after all, I suffer from &lt;a href="http://www.randsinrepose.com/archives/2003/07/10/nadd.html"&gt;NADD&lt;/a&gt;). Because I like to &lt;a href="http://kutuma.blogspot.com/2007/05/automate-everything.html"&gt;automate everything&lt;/a&gt;, here’s the script I use to startup projects:&lt;br /&gt;&lt;br /&gt;&lt;div style="padding: 3px; background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);"&gt;&lt;pre&gt;&lt;span style=";font-family:monospace;font-size:12px;"  &gt;&lt;font color="#80a0ff"&gt;#!/bin/sh&lt;/font&gt;&lt;br /&gt;&lt;font color="#40ffff"&gt;TMPDIR&lt;/font&gt;=/tmp/svntmpdir&lt;br /&gt;&lt;font color="#40ffff"&gt;REPODIR&lt;/font&gt;=/home/rsc/Documents/repositories&lt;br /&gt;&lt;font color="#40ffff"&gt;REPOURL&lt;/font&gt;=file://&lt;font color="#ff80ff"&gt;$REPODIR&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ffff60"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;span class="Statement"&gt;[&lt;/span&gt;&amp;nbsp;&lt;font color="#ff80ff"&gt;$1&lt;/font&gt;&lt;span class="shExpr"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Statement"&gt;==&lt;/span&gt;&lt;span class="shExpr"&gt;&amp;nbsp;&lt;/span&gt;&lt;font color="#ffa0a0"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;span class="Statement"&gt;]&lt;/span&gt;&lt;span class=""&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Statement"&gt;;&lt;/span&gt;&lt;span class=""&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Statement"&gt;then&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff60"&gt;&lt;b&gt;echo&lt;/b&gt;&lt;/font&gt;&lt;font color="#ffa0a0"&gt;&amp;nbsp;Usage: &lt;/font&gt;&lt;font color="#ff80ff"&gt;$0&lt;/font&gt;&lt;span class="Constant"&gt;&amp;nbsp;&lt;/span&gt;&lt;font color="#ffa500"&gt;{&lt;/font&gt;&lt;span class="Constant"&gt;repository name&lt;/span&gt;&lt;span class="Special"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff60"&gt;&lt;b&gt;exit&lt;/b&gt;&lt;/font&gt;&lt;span class=""&gt;&amp;nbsp;&lt;/span&gt;&lt;font color="#ffa0a0"&gt;1&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffff60"&gt;&lt;b&gt;fi&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ffff60"&gt;&lt;b&gt;echo&lt;/b&gt;&lt;/font&gt;&lt;font color="#ffa0a0"&gt;&amp;nbsp;Creating directory structure&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffff60"&gt;&lt;b&gt;echo&lt;/b&gt;&lt;/font&gt;&lt;font color="#ffa0a0"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#ff80ff"&gt;$TMPDIR&lt;/font&gt;&lt;br /&gt;mkdir &lt;font color="#ff80ff"&gt;$TMPDIR&lt;/font&gt;&lt;br /&gt;mkdir &lt;font color="#ff80ff"&gt;$TMPDIR&lt;/font&gt;&lt;span class=""&gt;/trunk&lt;/span&gt;&lt;br /&gt;mkdir &lt;font color="#ff80ff"&gt;$TMPDIR&lt;/font&gt;&lt;span class=""&gt;/branches&lt;/span&gt;&lt;br /&gt;mkdir &lt;font color="#ff80ff"&gt;$TMPDIR&lt;/font&gt;&lt;span class=""&gt;/tags&lt;/span&gt;&lt;br /&gt;&lt;font color="#ffff60"&gt;&lt;b&gt;echo&lt;/b&gt;&lt;/font&gt;&lt;font color="#ffa0a0"&gt;&amp;nbsp;Creating repository &lt;/font&gt;&lt;font color="#ff80ff"&gt;$1&lt;/font&gt;&lt;br /&gt;svnadmin create &lt;font color="#ff80ff"&gt;$REPODIR&lt;/font&gt;&lt;span class=""&gt;/&lt;/span&gt;&lt;span class="PreProc"&gt;$1&lt;/span&gt;&lt;br /&gt;&lt;font color="#ffff60"&gt;&lt;b&gt;cd&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff80ff"&gt;$TMPDIR&lt;/font&gt;&lt;br /&gt;svn import &lt;font color="#ff80ff"&gt;$REPOURL&lt;/font&gt;&lt;span class=""&gt;/&lt;/span&gt;&lt;span class="PreProc"&gt;$1&lt;/span&gt;&lt;span class=""&gt;&amp;nbsp;&lt;/span&gt;&lt;font color="#ffa500"&gt;-m&lt;/font&gt;&lt;span class=""&gt;&amp;nbsp;&lt;/span&gt;&lt;font color="#ffff60"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ffa0a0"&gt;Initial structure&lt;/font&gt;&lt;span class="Statement"&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;font color="#ffff60"&gt;&lt;b&gt;echo&lt;/b&gt;&lt;/font&gt;&lt;font color="#ffa0a0"&gt;&amp;nbsp;Checking out&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffff60"&gt;&lt;b&gt;cd&lt;/b&gt;&lt;/font&gt;&amp;nbsp;-&lt;br /&gt;svn co &lt;font color="#ff80ff"&gt;$REPOURL&lt;/font&gt;&lt;span class=""&gt;/&lt;/span&gt;&lt;span class="PreProc"&gt;$1&lt;/span&gt;&lt;span class=""&gt;/trunk &lt;/span&gt;&lt;span class="PreProc"&gt;$1&lt;/span&gt;&lt;br /&gt;&lt;font color="#ffff60"&gt;&lt;b&gt;echo&lt;/b&gt;&lt;/font&gt;&lt;font color="#ffa0a0"&gt;&amp;nbsp;Cleaning up&lt;/font&gt;&lt;br /&gt;rm &lt;font color="#ffa500"&gt;-Rf&lt;/font&gt;&lt;span class=""&gt;&amp;nbsp;&lt;/span&gt;&lt;font color="#ff80ff"&gt;$TMPDIR&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffff60"&gt;&lt;b&gt;echo&lt;/b&gt;&lt;/font&gt;&lt;font color="#ffa0a0"&gt;&amp;nbsp;Done!&lt;/font&gt;&lt;br&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-4722740872136818136?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/4722740872136818136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=4722740872136818136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4722740872136818136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4722740872136818136'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2008/02/creating-svn-repositoy.html' title='Creating an SVN repositoy'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-4964402443767672109</id><published>2007-12-01T21:16:00.000Z</published><updated>2007-12-01T21:27:35.864Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>MySQL fails to start on Gutsy</title><content type='html'>For some reason, &lt;a href="http://www.mysql.com/"&gt;mySql&lt;/a&gt; wasn't starting up on my machine. It was easy enough to find the cause just by looking at the log. Apparently there was no &lt;span style="font-family:courier new;"&gt;/var/run/mysqld&lt;/span&gt; directory where mySql could write to. So I created the directory, gave the required permissions and didn't give it a second thought.&lt;br /&gt;&lt;br /&gt;Turns out that when I rebooted my computer, mySQL wasn't starting again! The directory wasn't there anymore! Because I don't want to have to create the directory and start mySQL by hand each time the computer restart, here's what I did:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo gvim /etc/init.d/mysql&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Just after the &lt;span style="font-family:courier new;"&gt;'start')&lt;/span&gt; string I added the following content:&lt;br /&gt;&lt;br /&gt;&lt;div style="padding: 3px; background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);"&gt;&lt;pre&gt;&lt;span style=";font-family:monospace;font-size:12px;"  &gt;&lt;span style="color: rgb(255, 255, 96);"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 160, 160);"&gt;start&lt;/span&gt;&lt;span class="Statement"&gt;'&lt;/span&gt;&lt;span class="Statement"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 160, 255);"&gt;# Create directory in /var/run&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 255, 96);"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&lt;span class="shCase"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 96);"&gt;[&lt;/span&gt; &lt;span class="Statement"&gt;!&lt;/span&gt;&lt;span class="shExpr"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 96);"&gt;-d&lt;/span&gt;&lt;span class="shExpr"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 160, 160);"&gt;/var/run/mysqld&lt;/span&gt;&lt;span class="Statement"&gt;"&lt;/span&gt;&lt;span class="shExpr"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;]&lt;/span&gt;&lt;span class="Statement"&gt;;&lt;/span&gt;&lt;span class="shCase"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;then&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(255, 255, 96);"&gt;&lt;b&gt;mkdir&lt;/b&gt;&lt;/span&gt;&lt;span class="shCase"&gt; /var/run/mysqld&lt;/span&gt;&lt;br /&gt;      chown mysql.mysql /var/run/mysqld&lt;br /&gt;  &lt;span style="color: rgb(255, 255, 96);"&gt;&lt;b&gt;fi&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 160, 255);"&gt;# All done&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-4964402443767672109?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/4964402443767672109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=4964402443767672109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4964402443767672109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4964402443767672109'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/12/mysql-fails-to-start-on-gutsy.html' title='MySQL fails to start on Gutsy'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-6372858229750546330</id><published>2007-11-29T22:29:00.000Z</published><updated>2007-11-29T23:16:06.400Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Changing the default gateway using Network Manager</title><content type='html'>I have an oddball network configuration at home. I have a wireless &lt;a href="http://www.dlink.com/"&gt;D-Link&lt;/a&gt; router that connects to a &lt;a href="http://www.huawei.com/"&gt;Huawei&lt;/a&gt; router that in turn connects to the internet. So far so good.&lt;br /&gt;&lt;br /&gt;The problem is that I want to use the D-Link router DHCP Server, but I want to use the Huawei router as default gateway... and there is no way to specify that in the D-Link router.&lt;br /&gt;&lt;br /&gt;The solution I had so far implied setting the connection manually in &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt;, and that works fine... Apart from the fact that I have no fast way of &lt;a href="http://kutuma.blogspot.com/2007/05/vpn-in-ubuntu.html"&gt;setting up a VPN&lt;/a&gt;! So I decided to give it one more go with &lt;a href="http://www.gnome.org/projects/NetworkManager/"&gt;Network Manager&lt;/a&gt;, and turns out it is pretty easy to change the default gateway for a particular interface.&lt;br /&gt;&lt;br /&gt;To do that, just create a file in &lt;span style="font-family:courier new;"&gt;/etc/network/if-up.d/&lt;/span&gt; and call it &lt;span style="font-family:courier new;"&gt;gwconfig&lt;/span&gt; for instance.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo gvim /etc/network/if-up.d/gwconfig&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In that file, check for the interface that you want (e.g. &lt;span style="font-family:courier new;"&gt;eth1&lt;/span&gt;), delete the default gateway that is messing up your system (e.g. &lt;span style="font-family:courier new;"&gt;192.168.0.10&lt;/span&gt;) and add the the one you really want (e.g. &lt;span style="font-family:courier new;"&gt;192.168.1.1&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div style="padding: 3px; background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);"&gt;&lt;pre&gt;&lt;span style=";font-family:monospace;font-size:12px;"&gt;&lt;span style="color: rgb(128, 160, 255);"&gt;#!/bin/sh&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 96);"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; &lt;span class="Statement"&gt;[&lt;/span&gt; &lt;span class="Statement"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 128, 255);"&gt;$IFACE&lt;/span&gt;&lt;span class="Statement"&gt;"&lt;/span&gt;&lt;span class="shExpr"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;=&lt;/span&gt;&lt;span class="shExpr"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 160, 160);"&gt;"eth1"&lt;/span&gt;&lt;span class="shExpr"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;]&lt;/span&gt;&lt;span class="Statement"&gt;;&lt;/span&gt;&lt;span class=""&gt; &lt;/span&gt;&lt;span class="Statement"&gt;then&lt;/span&gt;&lt;br /&gt; route delete default gw &lt;span style="color: rgb(255, 160, 160);"&gt;192.168.1.10&lt;/span&gt;&lt;br /&gt; route add default gw &lt;span style="color: rgb(255, 160, 160);"&gt;192.168.1.1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 96);"&gt;&lt;b&gt;fi&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Make sure you make the file executable and you're done.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo chmod a+x &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;/etc/network/if-up.d/gwconfig&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Set the network to Roaming Mode, and all should work fine. If it doesn't, try to disable and re-enable the network on Network Manager.&lt;br /&gt;&lt;br /&gt;Btw, I still wasn't able to make the VPN work with this configuration... more on that later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-6372858229750546330?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/6372858229750546330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=6372858229750546330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/6372858229750546330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/6372858229750546330'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/11/changing-default-gateway-using-network.html' title='Changing the default gateway using Network Manager'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-5415348766086698291</id><published>2007-11-22T21:45:00.000Z</published><updated>2007-11-22T22:20:29.917Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='greasemonkey'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Greasemonkey tips</title><content type='html'>&lt;a href="http://www.greasespot.net/"&gt;Greasemonkey&lt;/a&gt; is a great &lt;a href="http://www.mozilla.com/en-US/firefox/"&gt;Firefox&lt;/a&gt; add-on that allows you to add custom &lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt; to any web page. This simple concept allows you to do extraordinary changes to a web page and you can find a lot of &lt;a href="http://userscripts.org/"&gt;pre-made scripts&lt;/a&gt; around. But if you want to do your own scripts, there's a few things that you should know before you start...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Registering events&lt;/span&gt;&lt;br /&gt;Let's say you want to catch a button click. Here's how to do it:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var button = document.getElementById(buttonId);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;button.addEventListener('click', myFunction, false);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Don't do stuff like &lt;span style="font-family:courier new;"&gt;button.onclick = "myFunction()"&lt;/span&gt; or even &lt;span style="font-family:courier new;"&gt;button.onclick = myFunction&lt;/span&gt;. It won't work.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Accessing element properties&lt;br /&gt;&lt;/span&gt;Suppose you want to add some information to a link that you created to use during the onclick event. You must do it with:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;lnk.setAttribute("attrName", value);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and fetch it with:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;lnk.getAttribute("attrName");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Doing &lt;span style="font-family:courier new;"&gt;lnk.attrName&lt;/span&gt; or &lt;span style="font-family:courier new;"&gt;lnk["attrName"]&lt;/span&gt; will not work, and will return &lt;span style="font-family:courier new;"&gt;null&lt;/span&gt; when you access it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Parameters in Event Handlers&lt;/span&gt;&lt;br /&gt;Let's say you registered an event like mentioned above. The event always receives a &lt;span style="font-family:courier new;"&gt;MouseEvent&lt;/span&gt; argument, so you should declare the function like &lt;span style="font-family:courier new;"&gt;myFunction(evt)&lt;/span&gt;. This is important because if you by accident register as an event handler a function that takes a boolean paramenter, like &lt;span style="font-family:courier new;"&gt;myFunction(flag)&lt;/span&gt;, flag will always be "true" when called from the event.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Stopping the bubble&lt;br /&gt;&lt;/span&gt;Assuming you defined your function like mentioned earlier, &lt;span style="font-family:courier new;"&gt;myFunction(evt),&lt;/span&gt; you can stop the event from bubbling by calling&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;evt.preventDefault();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Testing functions&lt;/span&gt;&lt;br /&gt;Because &lt;a href="http://www.getfirebug.com/"&gt;Firebug&lt;/a&gt; is such a great tool to debug your scripts, you may want to check for Grasemonkey functions before you use them. Do it with something like:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if (typeof(GM_getValue) != "undefined")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And you should be able to run the script outside Greasemonkey for easier debugging.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;More tips&lt;/span&gt;&lt;br /&gt;Well, so far these were the problems I faced! :-) I'll update this as I keep discovering Greasemonkey's idiosyncrasies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-5415348766086698291?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/5415348766086698291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=5415348766086698291' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/5415348766086698291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/5415348766086698291'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/11/greasemonkey-tips.html' title='Greasemonkey tips'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-1325393282092648459</id><published>2007-11-01T23:11:00.000Z</published><updated>2007-11-01T23:25:58.721Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Upgrading to Gutsy Gibbon</title><content type='html'>&lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; has launched a new release last October, &lt;a href="https://wiki.ubuntu.com/GutsyGibbon"&gt;Gutsy Gibbon&lt;/a&gt;. I was really eager to try it out, so I clicked the magic button to do the upgrade, just &lt;a href="http://kutuma.blogspot.com/2007/04/upgrading-to-feisty.html"&gt;like I did last April&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Turns out that this time things weren't so easy... For some reason my Update Manager had been giving me trouble for a couple of weeks. And the Gutsy upgrade was the worst time for things to go really bad.&lt;br /&gt;&lt;br /&gt;To start with, the upgrade seemed to stop at some point for no apparent reason. Because the upgrade script is made in &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; I decided to try to figure out what was going on. For some inexplicable reason, the confirmation dialog was freezing the installation... so I removed the call to the dialog and things seemed to move forward.&lt;br /&gt;&lt;br /&gt;Obviously my happiness didn't last long, and the process stopped at the middle of the installation. No chance but to boot the computer and be prepared for the worst. Turns out the computer booted OK, Ubuntu loaded, but the system was so mixed up with new and old stuff, that &lt;a href="http://www.x.org/wiki/"&gt;X&lt;/a&gt; didn't start and &lt;a href="http://en.wikipedia.org/wiki/Advanced_Packaging_Tool"&gt;apt-get&lt;/a&gt; was unable to recover the situation... oh well...&lt;br /&gt;&lt;br /&gt;Still, I had text mode so I was able to backup all the things that I should have backed up earlier. I booted Windows and downloaded the Gutsy CD. And then I reinstalled everything.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-1325393282092648459?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/1325393282092648459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=1325393282092648459' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1325393282092648459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1325393282092648459'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/11/upgrading-to-gutsy-gibbon.html' title='Upgrading to Gutsy Gibbon'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-5484387578157710988</id><published>2007-08-24T21:46:00.000+01:00</published><updated>2007-08-24T22:06:02.925+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Internet privacy with Firefox</title><content type='html'>If you don't want your &lt;a href="http://www.divinecaroline.com/article/22084/24225"&gt;girlfriend to know what you're watching online&lt;/a&gt;, you can use &lt;a href="http://www.mozilla.com/en-US/firefox/"&gt;Firefox&lt;/a&gt; profiles to clear your footsteps. Here's how:&lt;br /&gt;&lt;br /&gt;Start by printing this page, because you'll have to close Firefox in order for this to work. Next, launch Firefox with the &lt;span style="font-family:courier new;"&gt;-p&lt;/span&gt; option. If you're in &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt;, you can do this by pressing &lt;span style="font-family:courier new;"&gt;Alt-F2&lt;/span&gt; and typing &lt;span style="font-family:courier new;"&gt;firefox -p&lt;/span&gt; at the "Run Application" window.&lt;br /&gt;&lt;br /&gt;The profiles window will appear with only one profile called "default". Create a new one (let's call it &lt;span style="font-style: italic;"&gt;private&lt;/span&gt;), select it and start Firefox. Next, go to "Edit", "Preferences" and in the "Privacy" tab untick all the "History" options. Tick the "Always clear my private data when I close Firefox", click the "Settings" button and tick all the boxes. Your &lt;span style="font-style: italic;"&gt;private&lt;/span&gt; profile is now ready!&lt;br /&gt;&lt;br /&gt;Now close Firefox and open it again with the &lt;span style="font-family:courier new;"&gt;-p&lt;/span&gt; option. Select the "default" profile and set the "don't ask me on startup" option. Run Firefox and make sure you have the old profile back (with history and all). Of course I'm assuming that's what you want by default.&lt;br /&gt;&lt;br /&gt;From now on, each time you want to navigate to websites you don't want your girlfriend to know about (say, because you want to surprise her with a valentines gift), just execute Firefox by typing &lt;span style="font-family:courier new;"&gt;firefox -p private&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-5484387578157710988?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/5484387578157710988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=5484387578157710988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/5484387578157710988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/5484387578157710988'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/08/internet-privacy-with-firefox.html' title='Internet privacy with Firefox'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-2540633891057452379</id><published>2007-08-22T23:20:00.000+01:00</published><updated>2007-11-29T23:14:51.506Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><title type='text'>Sending emails via Gmail with Python</title><content type='html'>Whenever I need to send files from work to home I use &lt;a href="http://www.gmail.com/"&gt;gmail&lt;/a&gt;. Usually this email message consists of one single file (that may be a &lt;a href="http://en.wikipedia.org/wiki/Tar_%28file_format%29"&gt;tarball&lt;/a&gt;) and has the file name for subject. In the "&lt;a href="http://kutuma.blogspot.com/2007/05/automate-everything.html"&gt;Automate Everything&lt;/a&gt;" spirit, I decided to build a script to do this task for me.&lt;br /&gt;&lt;br /&gt;The first thing I had to do was find out how to send an email with an attachment via gmail. It wasn't too hard to find this information around the web, but it still took me the best part of an hour. So here's a simple &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; script that sends an email with an attachment:&lt;br /&gt;&lt;br /&gt;&lt;div style="padding: 3px; background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);"&gt;&lt;pre&gt;&lt;span style=";font-family:monospace;font-size:12px;"&gt;&lt;span style="color: rgb(128, 160, 255);"&gt;#!/usr/bin/python&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff80ff;"&gt;import&lt;/span&gt; smtplib&lt;br /&gt;&lt;span style="color:#ff80ff;"&gt;from&lt;/span&gt; email.MIMEMultipart &lt;span style="color:#ff80ff;"&gt;import&lt;/span&gt; MIMEMultipart&lt;br /&gt;&lt;span style="color:#ff80ff;"&gt;from&lt;/span&gt; email.MIMEBase &lt;span style="color:#ff80ff;"&gt;import&lt;/span&gt; MIMEBase&lt;br /&gt;&lt;span style="color:#ff80ff;"&gt;from&lt;/span&gt; email.MIMEText &lt;span style="color:#ff80ff;"&gt;import&lt;/span&gt; MIMEText&lt;br /&gt;&lt;span style="color:#ff80ff;"&gt;from&lt;/span&gt; email &lt;span style="color:#ff80ff;"&gt;import&lt;/span&gt; Encoders&lt;br /&gt;&lt;span style="color:#ff80ff;"&gt;import&lt;/span&gt; os&lt;br /&gt;&lt;br /&gt;gmail_user = &lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;your_email@gmail.com&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;gmail_pwd = &lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;your_password&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ffff60;"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#40ffff;"&gt;mail&lt;/span&gt;(to, subject, text, attach):&lt;br /&gt;   msg = MIMEMultipart()&lt;br /&gt;&lt;br /&gt;   msg[&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;From&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;] = gmail_user&lt;br /&gt;   msg[&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;To&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;] = to&lt;br /&gt;   msg[&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;Subject&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;] = subject&lt;br /&gt;&lt;br /&gt;   msg.attach(MIMEText(text))&lt;br /&gt;&lt;br /&gt;   part = MIMEBase(&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;application&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;octet-stream&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;   part.set_payload(open(attach, &lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;rb&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;).read())&lt;br /&gt;   Encoders.encode_base64(part)&lt;br /&gt;   part.add_header(&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;Content-Disposition&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;           &lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;attachment; filename="%s"&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;'&lt;/span&gt;&lt;/span&gt; % os.path.basename(attach))&lt;br /&gt;   msg.attach(part)&lt;br /&gt;&lt;br /&gt;   mailServer = smtplib.SMTP(&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;smtp.gmail.com&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;, 587)&lt;br /&gt;   mailServer.ehlo()&lt;br /&gt;   mailServer.starttls()&lt;br /&gt;   mailServer.ehlo()&lt;br /&gt;   mailServer.login(gmail_user, gmail_pwd)&lt;br /&gt;   mailServer.sendmail(gmail_user, to, msg.as_string())&lt;br /&gt;   &lt;span style="color:#80a0ff;"&gt;# Should be mailServer.quit(), but that crashes...&lt;/span&gt;&lt;br /&gt;   mailServer.close()&lt;br /&gt;&lt;br /&gt;mail(&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;some.person@some.address.com&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;   &lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;Hello from python!&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;   &lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;This is a email sent with python&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;   &lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ffa0a0;"&gt;my_picture.jpg&lt;/span&gt;&lt;span style="background-color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ffffff;"&gt;"&lt;/span&gt;&lt;/span&gt;)&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-2540633891057452379?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/2540633891057452379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=2540633891057452379' title='67 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/2540633891057452379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/2540633891057452379'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/08/sending-emails-via-gmail-with-python.html' title='Sending emails via Gmail with Python'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>67</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-4310535040595390433</id><published>2007-08-15T14:44:00.000+01:00</published><updated>2007-08-15T15:02:07.569+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Dual monitor in Ubuntu</title><content type='html'>I bought a new 32'' LCD TV. A Samsung LE32S62. The TV comes with a VGA connection, so obviously I had to connect my laptop to it!&lt;br /&gt;&lt;br /&gt;The first challenge was making &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; work with dual monitor. I did a few searches on the web and found a few instructions on how to do this. I ended up with a rather simple configuration. Just edit the &lt;span style="font-family:courier new;"&gt;/etc/X11/xorg.conf&lt;/span&gt; file and add the following under the "Device" section. (&lt;span style="font-weight: bold;"&gt;NOTE:&lt;/span&gt; I'm using an &lt;a href="http://www.nvidia.com/"&gt;nVidia&lt;/a&gt; graphics card. This may be different for your card)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Option "TwinView" "on"&lt;br /&gt;Option "TwinViewOrientation" "RightOf"&lt;/pre&gt;&lt;br /&gt;Next restart X (Ctrl-Alt-Backspace) and you should end up with dual monitor. This isn't exactly brilliant, because the TV ended up as the main monitor, and I would prefer to have the laptop as the main monitor. But after a bunch of failed tries I just gave up. After all, I don't think I'll use this setup a lot of times. (but I am thinking on recovering my old computer to use it as a media center!)&lt;br /&gt;&lt;br /&gt;Here's a couple of pics of the setup:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_cLyDgbVAqWo/RsMFgtnFINI/AAAAAAAAAF4/ixaqEIFuvDk/s1600-h/DSC_7173.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_cLyDgbVAqWo/RsMFgtnFINI/AAAAAAAAAF4/ixaqEIFuvDk/s400/DSC_7173.JPG" alt="" id="BLOGGER_PHOTO_ID_5098925262670995666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Setting up xorg.conf with &lt;a href="http://www.vim.org/"&gt;gvim&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_cLyDgbVAqWo/RsMF_dnFIOI/AAAAAAAAAGA/eIdd5EZy6Os/s1600-h/DSC_7174.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_cLyDgbVAqWo/RsMF_dnFIOI/AAAAAAAAAGA/eIdd5EZy6Os/s400/DSC_7174.JPG" alt="" id="BLOGGER_PHOTO_ID_5098925790951973090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Watching a movie with &lt;a href="http://www.videolan.org/vlc/"&gt;VLC&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-4310535040595390433?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/4310535040595390433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=4310535040595390433' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4310535040595390433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4310535040595390433'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/08/dual-monitor-in-ubuntu.html' title='Dual monitor in Ubuntu'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_cLyDgbVAqWo/RsMFgtnFINI/AAAAAAAAAF4/ixaqEIFuvDk/s72-c/DSC_7173.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-5178718803737856447</id><published>2007-08-12T14:29:00.000+01:00</published><updated>2007-08-12T15:57:46.684+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vi'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Back to basics: Vi</title><content type='html'>I've been doing a lot of programming in &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt;, mostly in &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; (my &lt;a href="http://www.margaridatovar.com/"&gt;sister's in law web site&lt;/a&gt;), &lt;a href="http://www.perl.com/"&gt;Perl&lt;/a&gt; and &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;. I tried a lot of editors and (so called) IDEs, but was never happy with any of them. So I went back to basics: using &lt;a href="http://www.vim.org/"&gt;Vim&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now, I can ear the screams of &lt;a href="http://www.gnu.org/software/emacs/"&gt;Emacs&lt;/a&gt; users and the cries of all of you who only learned the &lt;span style="font-family:courier new;"&gt;:q!&lt;/span&gt; shortcut to exit Vi as soon as possible, but here's my view on things:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Emacs users:&lt;/span&gt; I tried using Emacs. I really did. And I actually used it for a long time while I was in college. But after using Vi for a while I had a really hard time both remembering the shortcuts and configuring Emacs to behave like I wanted to. So I just stuck with Vi.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-family:courier new;"&gt;:q!&lt;/span&gt; users:&lt;/span&gt; Vi is not that hard. Really! It does need a bit getting used to, but the freedom of not using the mouse and all those small shortcuts that you think you'll never use but turn out to be extremely useful make up for the learning curve.&lt;br /&gt;&lt;br /&gt;To speed up your learning curve, here are the two secrets to loving Vi:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A proper &lt;span style="font-family:courier new;"&gt;.vimrc&lt;/span&gt; file&lt;/li&gt;&lt;li&gt;Knowing the right commands&lt;/li&gt;&lt;/ul&gt;Because there are so many "right commands" I'll leave that to a later post. Let's focus on the &lt;span style="font-family:courier new;"&gt;.vimrc&lt;/span&gt; file for now. And just to get your expectations in the right place, I'm not a Vim power user. If you look the web for &lt;span style="font-family:courier new;"&gt;.vimrc&lt;/span&gt; files you'll find files with hundreds of lines of code. Mine has 25, including comments... But it makes Vim behave like I want, so it's enough. Just go through the code and comments and you'll be able to understand what the configurations do. If not, drop me a line.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTE:&lt;/span&gt; The last 2 lines are wrong! Instead of [ you should have &lt;. And instead of ] you should have &gt;. But &lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt; does a really bad job with these 2 characters....&lt;br /&gt;&lt;pre&gt;" Turn on syntax highlight&lt;br /&gt;syntax on&lt;br /&gt;" Set tabs to 4 in size and make sure autoindent is on&lt;br /&gt;set tabstop=4&lt;br /&gt;set autoindent&lt;br /&gt;" Make backspace work as in most editors&lt;br /&gt;set backspace=indent,eol,start&lt;br /&gt;" Black background and white foreground&lt;br /&gt;highlight Normal guibg=black&lt;br /&gt;highlight Normal guifg=white&lt;br /&gt;" Make the default window size 50x80&lt;br /&gt;set lines=50&lt;br /&gt;set columns=80&lt;br /&gt;" Store temp and swap files in this directory&lt;br /&gt;set directory=/tmp/&lt;br /&gt;" Show the status line&lt;br /&gt;set ls=2&lt;br /&gt;" Set the status line to:&lt;br /&gt;" Filename [Modifed &amp; Readonly Status] line number/total lines column (#buffer)&lt;br /&gt;" More info at:&lt;br /&gt;" http://www.winterdom.com/weblog/CommentView,guid,3372fa1e-966e-4389-b2ba-bb2ce527f52a.aspx&lt;br /&gt;let &amp;amp;stl="%f %([%R%M]%)%=%l/%L %c (#%n)"&lt;br /&gt;" Map Ctrl-Ins and Shift-Ins to clipboard copy paste (FIX THIS!!!)&lt;br /&gt;map [C-Insert] "+y&lt;br /&gt;map [S-Insert] "+gP&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-5178718803737856447?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/5178718803737856447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=5178718803737856447' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/5178718803737856447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/5178718803737856447'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/08/back-to-basics-vi.html' title='Back to basics: Vi'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-4278646975509423180</id><published>2007-08-11T16:00:00.000+01:00</published><updated>2007-08-12T16:56:16.345+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Objects in Perl? Use Python!</title><content type='html'>I've been meaning to try &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; for a while. I'm kind of a sucker for programming languages, and knowing a bunch of languages allows me to choose the right tool for the right job. Turns out that this week I had the perfect opportunity to check out Python.&lt;br /&gt;&lt;br /&gt;The task at hand was analyzing patterns in a bunch of &lt;a href="http://en.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt; files. I had 270Mb of XML files, and the largest file was 32Mb. Because I was pretty sure I was executing the analysis more than once (&lt;span style="font-style: italic;"&gt;errare humanum est&lt;/span&gt; and I want to improve the analysis in the future) I decided to use &lt;a href="http://sax.sourceforge.net/"&gt;SAX&lt;/a&gt; to read the files.&lt;br /&gt;&lt;br /&gt;Having decided to use SAX I then decided to use &lt;a href="http://www.perl.com/"&gt;Perl&lt;/a&gt; to do the job. I'm pretty familiar with it and was able to quickly find a SAX sample. Besides, I had a few string matches and replacements to do, and Perl is a great language for that.&lt;br /&gt;&lt;br /&gt;Turns out that using SAX in Perl demands that you use and define objects in Perl. And it turns out that defining objects in Perl is... well, terrible! I really hated the syntax, &lt;a href="http://www.perl.com/doc/manual/html/pod/perlfunc/bless.html"&gt;bless&lt;/a&gt; and the way attributes were defined. It all looks like a big hack! To add insult to injury, the &lt;a href="http://search.cpan.org/%7Ekmacleod/libxml-perl-0.08/lib/XML/Parser/PerlSAX.pm"&gt;perlSAX&lt;/a&gt; has a few quirks when changing handlers. This is mandatory to make your SAX code maintainable... So I dropped Perl and went for Python.&lt;br /&gt;&lt;br /&gt;To my surprise the transition was really easy. I was able to convert my Perl code to Python very quickly, with only a few doubts now and then on specific stuff. Here's what I gained from the transformation:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I learned Python (finally!)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Better SAX handlers (the quirks that happen in Perl don't happen in Python)&lt;/li&gt;&lt;li&gt;Clearer attribute access (if you have an object with a reference to an array of references and want to print it in Perl... things can get weird)&lt;/li&gt;&lt;li&gt;Clearer object definition and usage (no bless!)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fewer lines of code (from ~250 to ~150)&lt;/li&gt;&lt;li&gt;Same performance (I was worried about this, but both scripts took the same time to execute!)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I still love Perl. If I want to parse a bunch of text files, do text transformations and the like it will be my 1st choice.&lt;br /&gt;&lt;br /&gt;But whenever I need to do something a bit more complex that requires complex data types or &lt;a href="http://en.wikipedia.org/wiki/Object-oriented_programming"&gt;OO programming&lt;/a&gt;, from now on I'll definitely turn to Python!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-4278646975509423180?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/4278646975509423180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=4278646975509423180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4278646975509423180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4278646975509423180'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/08/objects-in-perl-use-python.html' title='Objects in Perl? Use Python!'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-7518794364739354655</id><published>2007-07-29T21:54:00.000+01:00</published><updated>2007-07-29T22:24:33.481+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Web Testing</title><content type='html'>Last week I updated my sister's in law &lt;a href="http://www.margaridatovar.com/"&gt;web site&lt;/a&gt; to have expanding folders. The solution I implemented is far from perfect but it does the trick. And since I used the &lt;a href="http://www.prototypejs.org/"&gt;prototype framework&lt;/a&gt; for the JS code, I figured it shouldn't have any problems in either IE or Firefox. I was wrong...&lt;br /&gt;&lt;br /&gt;Turns out I forgot to test the web site in IE, and the first time my wife went there to take a look, it didn't work. Apparently &lt;span style="font-family:courier new;"&gt;nextSiblings&lt;/span&gt; doesn't work properly in IE... so instead of:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;my_element.nextSiblings()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I had to do:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Element.nextSiblings(my_element)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is really a pain for me because it means I have to test the site in both IE and Firefox all the time. And since I use &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt;, that didn't seem like an easy task. Wrong again!&lt;br /&gt;&lt;br /&gt;There's a project called &lt;a href="http://www.tatanka.com.br/ies4linux/page/Main_Page"&gt;IEs4Linux&lt;/a&gt; that allows you to run IE on any computer that runs &lt;a href="http://www.winehq.org/"&gt;Wine&lt;/a&gt;. So I followed the instructions on the website, installed the thing, and in about 5 minutes (mostly because of download times) I was running IE 6 on my Ubuntu machine. I actually found out and solved the above problem all in Ubuntu. Sweet!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-7518794364739354655?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/7518794364739354655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=7518794364739354655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/7518794364739354655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/7518794364739354655'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/07/web-testing.html' title='Web Testing'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-5717020109726815588</id><published>2007-07-22T14:16:00.000+01:00</published><updated>2007-07-29T22:23:20.370+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Use source control. Always!</title><content type='html'>So you're doing this simple project, you have a bit of &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt;, a bit of &lt;a href="http://www.mysql.com/"&gt;mySQL&lt;/a&gt;, you add a dash of really cool JavaScript, you publish it to the server and... BANG! Everything stops working!&lt;br /&gt;&lt;br /&gt;Guess what? It happened to me this week. Because of a rather simple thing, actually. In my development machine I have mySQL 5, and the server machine has mySQL 4. My beautiful queries were all failing.&lt;br /&gt;&lt;br /&gt;It actually took me about 2 minutes to fix the problem. Get the latest running version from source control (I'm currently using &lt;a href="http://subversion.tigris.org/"&gt;SVN&lt;/a&gt;) publish it and that's it. And during those 2 minutes I just kept thinking, "I'm *so* glad I have this in source control!"&lt;br /&gt;&lt;br /&gt;Listen to experience. Use source control. Always!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-5717020109726815588?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/5717020109726815588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=5717020109726815588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/5717020109726815588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/5717020109726815588'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/07/use-source-control-always.html' title='Use source control. Always!'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-8650203711467253569</id><published>2007-06-29T21:18:00.000+01:00</published><updated>2007-07-01T00:01:19.355+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Video Editing and Ubuntu</title><content type='html'>Last weekend I had to &lt;a href="http://www.youtube.com/watch?v=FV_9DTJMFZs"&gt;edit a video for work&lt;/a&gt;. It was nothing too fancy. I had about 45 minutes of video on tape and I wanted to save parts of it to my computer (the takes). Then I wanted to cut the takes into pieces (the scenes), edit it as I pleased and add some background music.&lt;br /&gt;&lt;br /&gt;Let me go straight to the conclusion: I gave up and did it all in Windows. How depressing...&lt;br /&gt;&lt;br /&gt;I was able to capture the video to disk without problems (I think I used &lt;a href="http://www.kinodv.org/"&gt;Kino&lt;/a&gt; for that), but the editing part was really bad.&lt;br /&gt;&lt;br /&gt;I tried out &lt;a href="http://www.pitivi.org/wiki/Main_Page"&gt;Pitivi&lt;/a&gt; but it just hang after a few clicks. Then I tried &lt;a href="http://www.kinodv.org/"&gt;Kino&lt;/a&gt; but unfortunately it is too basic. No ability to add the background music (actually I think there's a way, but 2 audio channels is still to limited).&lt;br /&gt;&lt;br /&gt;Then I found &lt;a href="http://cvs.cinelerra.org/"&gt;Cinelerra&lt;/a&gt;. I tried everything to make Cinelerra work properly, I even &lt;a href="#shmmax"&gt;fixed&lt;/a&gt; the dreaded startup error regarding the &lt;span style="font-family:courier new;"&gt;shmmax&lt;/span&gt; parameter. And although the software looks very promising, it is full of bugs that make it completely unusable... It's a shame really.&lt;br /&gt;&lt;br /&gt;I did manage to do a test video in Cinelerra. The video had cuts, background music, the works. But while doing this video the preview was out of synch (and that makes editing really hard), I had to restart the software at least 20 times (no kidding) and when I got to work with my new video to show my colleagues what a great editor I was, I couldn't make it play on a Windows machine!&lt;br /&gt;&lt;br /&gt;So I went back to my Windows partition, installed &lt;a href="http://www.virtualdub.org/"&gt;VirtualDub&lt;/a&gt; and  another video editor I can't remember the name right now and was able to do the job hassle free... 1 down for free (&lt;a href="http://www.gnu.org/philosophy/free-sw.html"&gt;as in speech&lt;/a&gt;) software. :-(&lt;br /&gt;&lt;br /&gt;&lt;a name="shmmax"&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;PS: &lt;/span&gt;To fix the dreaded startup error regarding the shmmax parameter edit the file &lt;span style="font-family:courier new;"&gt;/etc/sysctl.conf&lt;/span&gt; and add the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# make cinelerra happy&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;kernel.shmmax = 2147483647&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You'll need to reboot for the changes to take effect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-8650203711467253569?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/8650203711467253569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=8650203711467253569' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/8650203711467253569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/8650203711467253569'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/06/video-editing-and-ubuntu.html' title='Video Editing and Ubuntu'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-9113069904592446056</id><published>2007-06-13T14:22:00.001+01:00</published><updated>2007-07-29T22:25:17.559+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Why I am not buying a Mac</title><content type='html'>Yearly this year I was strongly considering buying a &lt;a href="http://www.apple.com/mac/"&gt;Mac&lt;/a&gt;. The design is so cool, &lt;a href="http://www.apple.com/macosx/leopard/"&gt;OSX&lt;/a&gt; seems like a great OS, they have &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt; and people I know that own Macs don't miss a chance to tell me how great it is.&lt;br /&gt;&lt;br /&gt;But as time went by I changed my mind. Here's some of the reasons why this happened:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The $$$ factor:&lt;/span&gt; I don't really need a Mac. Actually, I don't even need a new PC. It's a way too expensive whim.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;iPod:&lt;/span&gt; I own an &lt;a href="http://www.apple.com/ipod/ipod.html"&gt;iPod&lt;/a&gt;. I love it. It's a great MP3 + video player but it does have its flaws, specially when it comes to &lt;a href="http://www.apple.com/itunes/download/"&gt;iTunes&lt;/a&gt;. There's just some things it won't do right (like podcast handling) and it has a few bugs that cause my artwork to vanish from time to time. Fortunately &lt;a href="http://www.mediamonkey.com/"&gt;Media Monkey&lt;/a&gt; solves my problem, but it does make me wonder about other Apple software.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;It burns:&lt;/span&gt; A friend of mine has a &lt;a href="http://www.apple.com/macbookpro/"&gt;MacBook Pro&lt;/a&gt;. The hand rest heats to a point where it is actually uncomfortable to rest your hands. This is an issue to me because I actually use the hand rest to... well, rest my hands! I returned a laptop because of this same problem, so it's a no go for me.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Safari:&lt;/span&gt; I downloaded &lt;a href="http://www.apple.com/safari/download/"&gt;Safari for Windows&lt;/a&gt;. It crashes as soon as I type something in an input box. Again my faith in Apple software went downhill.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ubuntu:&lt;/span&gt; When I first considered buying a Mac I was using Windows. My machine was getting slower and slower by the day, so I believed I needed a new machine... Now I use &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; and that problem is gone. And Ubuntu may not be as cool as OSX, but it is a cool enough OS.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Fanatics:&lt;/span&gt; The legion of Apple fans makes me more uncomfortable than reassured. They always assume Steve Jobs is right and that everything about Apple is great. This means they have a high tolerance to problems and that they don't talk about those problems. This is not an exclusive problem of Apple, it's a problem that occurs every time a technology issue is turned into a religious war (think &lt;a href="http://www.gnu.org/software/emacs/"&gt;Emacs&lt;/a&gt; vs &lt;a href="http://www.vim.org/"&gt;Vi&lt;/a&gt;!).&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;With all this in mind I'll save my $$$ and keep this not so fast machine for at least another year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-9113069904592446056?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/9113069904592446056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=9113069904592446056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/9113069904592446056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/9113069904592446056'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/06/why-am-not-buying-mac.html' title='Why I am not buying a Mac'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-4215893192408340622</id><published>2007-06-13T00:43:00.000+01:00</published><updated>2007-06-12T23:43:39.755+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drawing'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Scribus vs Inkscape</title><content type='html'>My &lt;a href="http://www.margaridatovar.com/"&gt;sister in law&lt;/a&gt; is having an exhibit next week. To help her out I did the paper invitations during the weekend. This was the first time I needed to do something like this in &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt;, so I did a test drive on two applications.&lt;br /&gt;&lt;br /&gt;Due to an article on &lt;a href="http://fullcirclemagazine.org/2007/06/07/issue-1-is-out/"&gt;Full Circle Magazine&lt;/a&gt; I decided to give &lt;a href="http://www.scribus.net/"&gt;Scribus&lt;/a&gt; a go. I already new &lt;a href="http://www.inkscape.org/"&gt;Inkspace&lt;/a&gt; by name so I also gave it a try.&lt;br /&gt;&lt;br /&gt;The short of it: Use Inkscape. If you want to know why, here's the details.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Scribus&lt;/span&gt;&lt;br /&gt;Scribus annoyed me a bit. The first bad experience was with the "new document" menu. It doesn't save your settings! I was doing a few experiments so I had to start new documents quite often... and typing all the settings all the time is a drag (I had to change 4 values for the margins and 1 value for the units).&lt;br /&gt;&lt;br /&gt;The next thing I disliked was the line tool. When you draw a line it stays red (because it is selected) and wider than the line you actually draw. Pretty bad for &lt;a href="http://en.wikipedia.org/wiki/WYSIWYG"&gt;WYSIWYG&lt;/a&gt;. Also, moving the thing around had some odd behaviors....&lt;br /&gt;&lt;br /&gt;The next problem was undo. Not sure what it actually did... Sometimes it worked, sometimes it didn't... sometimes it did odd things. Like after moving the line, undoing deleted the line. Pretty bad.&lt;br /&gt;&lt;br /&gt;The final annoyance was with the snap to guides. I set the option but it did nothing... it just kept not snapping. I gave up at this stage.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Inkspace&lt;/span&gt;&lt;br /&gt;No questions asked when the software starts, the document is already there and it actually has the settings I wanted to use. Not bad.&lt;br /&gt;&lt;br /&gt;Drawing lines was also as I expected, and after a web search on how to snap to the guides, it worked OK. And undo did what I expected.&lt;br /&gt;&lt;br /&gt;After I did a bit of work on the actual invitation, I decided to move the files around to organize my folders. Turns out Inkspace stores the pictures as references, so I lost all the pictures I had in the drawing (about 9 pictures). Restoring the references seemed like a drag, but since the save format is &lt;a href="http://en.wikipedia.org/wiki/Svg"&gt;SVG&lt;/a&gt; I was able to use a text editor and perform a simple find and replace! Not bad.&lt;br /&gt;&lt;br /&gt;Then I wanted to add a new page. I wasn't able to find out how to do it! Fortunately there is the concept of layers, so I just used one layer for each page. I could have used another document, but since the invitation isn't that complex this solution was good enough.&lt;br /&gt;&lt;br /&gt;Time to print! This was another surprise. You actually need to know the &lt;a href="http://en.wikipedia.org/wiki/Lp_%28Unix%29"&gt;lp&lt;/a&gt; command details and how &lt;a href="http://en.wikipedia.org/wiki/Common_Unix_Printing_System"&gt;CUPS&lt;/a&gt; works to do some basic printing tasks (like printing more than one copy in normal mode). So much for a grandma friendly application. But at the end of the day I managed to print everything without a problem and the invitations were sent on time.&lt;br /&gt;&lt;br /&gt;Here's the final result:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.margaridatovar.com/folder.php?folderid=24"&gt;&lt;img style="cursor: pointer;" src="http://www.margaridatovar.com/images/386.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-4215893192408340622?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/4215893192408340622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=4215893192408340622' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4215893192408340622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/4215893192408340622'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/06/scribus-vs-inkscape.html' title='Scribus vs Inkscape'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-9020195461474269594</id><published>2007-06-07T17:35:00.000+01:00</published><updated>2007-06-08T14:41:12.200+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Printing to PDF</title><content type='html'>If you need to print something to PDF in windows, you can do it with &lt;a href="http://www.dopdf.com/"&gt;doPDF&lt;/a&gt;. I know there's a lot of other software that does exactly the same thing, but this one got my attention because:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It is small (about 1Mb)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It is free (as in beer)&lt;/li&gt;&lt;li&gt;It is easy to use...&lt;/li&gt;&lt;li&gt;...but has advanced features for when you need them&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;In about 5 minutes (including download and installation) I had just what I wanted: a Word document printed in PDF, page size A4, 150 dpi's. Cool!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-9020195461474269594?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/9020195461474269594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=9020195461474269594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/9020195461474269594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/9020195461474269594'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/06/printing-to-pdf.html' title='Printing to PDF'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-1783398519510200487</id><published>2007-05-27T22:37:00.000+01:00</published><updated>2007-05-27T22:37:16.917+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='vpn'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>VPN in Ubuntu</title><content type='html'>After &lt;a href="http://kutuma.blogspot.com/2007/05/vpn-to-windows-network-in-ubuntu.html"&gt;my previous attempt&lt;/a&gt; at creating a VPN in Ubuntu I reverted all my work because I was rather unhappy with the results. After digging a bit more I found out I could actually use &lt;a href="http://pptpclient.sourceforge.net/"&gt;pptpconfig&lt;/a&gt;, as long as I didn't actually clicked the &lt;span style="font-style: italic;"&gt;"Start"&lt;/span&gt; button. Here's the trick:&lt;br /&gt;&lt;br /&gt;Start by installing pptpconfig. Add the following to your /etc/apt/sources.list file:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# James Cameron's PPTP GUI packaging&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;deb http://quozl.netrek.org/pptp/pptpconfig ./&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then install the app:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo apt-get update&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo apt-get install pptpconfig&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now run it (&lt;span style="font-style: italic;"&gt;sudo pptpconfig&lt;/span&gt;) and configure your VPN. In the &lt;span style="font-style: italic;"&gt;"Routing"&lt;/span&gt; options, select &lt;span style="font-style: italic;"&gt;"Client to LAN"&lt;/span&gt;. Lets assume you called your new configuration &lt;span style="font-weight: bold;"&gt;MyVPN&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;You can close pptpconfig. Go over to /etc/ppp/ip-up.d/ and create a new file called vpnroute (&lt;span style="font-style: italic;"&gt;sudo gedit vpnroute&lt;/span&gt;). Assuming that the network you want to connect to uses IPs like 192.168.0.*, add this to the file:&lt;br /&gt;&lt;pre style="font-family: courier new;"&gt;#!/bin/sh&lt;br /&gt;if [ "${PPP_IPPARAM}" = "&lt;span style="font-weight: bold;"&gt;MyVPN&lt;/span&gt;" ]; then&lt;br /&gt;   route add -net  &lt;span style="font-weight: bold;"&gt;192.168.0&lt;/span&gt;.0 netmask 255.255.255.0 dev ppp0&lt;br /&gt;fi&lt;/pre&gt;Don't forget to make it executable, or it won't work:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;chmod a+x vpnroute&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And that's it. To start your VPN run:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo pon MyVPN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To stop it run:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo poff MyVPN&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-1783398519510200487?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/1783398519510200487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=1783398519510200487' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1783398519510200487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1783398519510200487'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/05/vpn-in-ubuntu.html' title='VPN in Ubuntu'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-3614025356386321528</id><published>2007-05-27T12:23:00.000+01:00</published><updated>2007-05-27T22:43:06.901+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='vpn'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>VPN in Ubuntu using Network Manager</title><content type='html'>&lt;span style="font-weight: bold;"&gt;UPDATE:&lt;/span&gt; I found a better way to connect to a VPN. Check &lt;a href="http://kutuma.blogspot.com/2007/05/vpn-in-ubuntu.html"&gt;this post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Imagine you have a Windows Network at work and you're stuck at home waiting for the plummer to fix the sink. No problem, just connect via &lt;a href="http://en.wikipedia.org/wiki/Virtual_Private_Network"&gt;VPN&lt;/a&gt; to your workplace, launch a &lt;a href="http://en.wikipedia.org/wiki/Remote_Desktop_Protocol"&gt;Remote Desktop&lt;/a&gt; and in no time you're working in that piece of code you must deliver yesterday. Being this such a useful and common scenario, how come it is so hard to set up in Ubuntu?&lt;br /&gt;&lt;br /&gt;Here's how I managed to connect to my workplace via VPN using Ubuntu. Let me say upfront that I'm not particularly happy with the result, and I'll try to do it some other way in the near future. But if you're desperate this will do. This is not an &lt;span style="font-style: italic;"&gt;How To&lt;/span&gt;, but rather a step by step description of the tries and failures. Maybe it can help someone that finds the same error messages I've encountered. Well, here goes:&lt;br /&gt;&lt;br /&gt;First I tried &lt;a href="http://pptpclient.sourceforge.net/"&gt;pptpconfig&lt;/a&gt;. Everything seemed to be properly configured, but all I got was the error message:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Cannot determine ethernet address for proxy ARP&lt;/span&gt; &lt;span style="font-size:85%;"&gt;(&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt; Actually this is not a problem. Just add &lt;span style="font-style: italic;"&gt;noproxyarp&lt;/span&gt; to the pppd parameters.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So I decided to install the &lt;a href="http://www.gnome.org/projects/NetworkManager/"&gt;Network Manager&lt;/a&gt; PPTP package:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo apt-get install network-manager-pptp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And restarted everything that depended on the package:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo /etc/dbus-1/event.d/25NetworkManager restart&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo /etc/dbus-1/event.d/26NetworkManagerDispatcher restart&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;killall gnome-panel&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;nm-applet &amp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-style: italic;"&gt;killall&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;nm-applet&lt;/span&gt; commands are there to restart the Network Manager icon on your gnome panel. If for some reason the Network Manager icon does not appear (happened to me) just execute:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo /etc/dbus-1/event.d/25NetworkManager start&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;killall gnome-panel&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;nm-applet &amp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;If you click the Network Manager icon now, you should have a "VPN Connections" entry. Just configure your own VPN connection and it should appear in the list of VPNs. Click it. If it works, you're in luck. If it doesn't, keep reading.&lt;br /&gt;&lt;br /&gt;To keep an eye on what's going on with the VPN connection, just tail &lt;a href="http://en.wikipedia.org/wiki/Syslog"&gt;syslog&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo tail -f /var/log/syslog&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That's how I found this error message:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;(...) no currently active network device, won't activate VPN.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I googled for a while and found that if you want to use Network Manager to take care of your VPN, you cannot have a Wireless Connection manually configured. Oh boy... So I opened the manual configuration, &lt;span style="font-weight: bold;"&gt;saved my current configuration&lt;/span&gt; and in the properties of the Wireless connection ticked the box &lt;span style="font-style: italic;"&gt;"Enable roaming mode"&lt;/span&gt;. Because I have a somewhat odd configuration of routers at home, I also had to reconfigure all the routers, but I won't bother you with that.&lt;br /&gt;&lt;br /&gt;My main problem with the roaming mode is that it stores the WEP password in the &lt;a href="http://en.wikipedia.org/wiki/GNOME_Keyring"&gt;keyring&lt;/a&gt;. That's all fine and safe, but it means that when I login, besides having to enter my username and password I also have to put my keyring password! Very annoying!&lt;br /&gt;&lt;br /&gt;On with the show. Connect VPN. More mysterious errors in syslog:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;LCP terminated by peer&lt;/span&gt; (+ bunch of characters blogger won't let my type)&lt;br /&gt;&lt;br /&gt;This is a funny one! First because it was a bit lost in the middle of a bunch of error messages. Second because, at least to me, it means absolutely nothing! Using a bit of intuition I thought it might be an authentication problem, so I just ticked all the boxes in the &lt;span style="font-style: italic;"&gt;"Authentication"&lt;/span&gt; tab in the VPN configuration dialog and... it worked! I have a VPN connection to my workplace!&lt;br /&gt;&lt;br /&gt;Just for wrap up, here's what I didn't like about all this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It's a lot of work for something so common.&lt;/li&gt;&lt;li&gt;Because the WEP is in the keyring I must enter the keyring password each time I login.&lt;/li&gt;&lt;li&gt;I must use roaming for my wireless connection. This means the router must do the configuration, and my routers suck at that.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PPTP logs are there for the people who know the code or the protocol by heart.&lt;/li&gt;&lt;li&gt;&lt;strike&gt;I'll probably just revert to my old configuration and try a new way of connecting via VPN.&lt;/strike&gt;I got back to my old configuration and managed to &lt;a href="http://kutuma.blogspot.com/2007/05/vpn-in-ubuntu.html"&gt;configure the VPN&lt;/a&gt; in a different way.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-3614025356386321528?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/3614025356386321528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=3614025356386321528' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/3614025356386321528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/3614025356386321528'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/05/vpn-to-windows-network-in-ubuntu.html' title='VPN in Ubuntu using Network Manager'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-3463004565775549238</id><published>2007-05-26T11:59:00.000+01:00</published><updated>2007-05-26T12:33:39.136+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu, NVidia and Automatic updates</title><content type='html'>So you have your &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; system up and running, you click the button to do an innocent software update and suddenly... Bye bye X! What happened?&lt;br /&gt;&lt;br /&gt;Well, during my &lt;a href="http://kutuma.blogspot.com/2007/04/upgrading-to-feisty.html"&gt;upgrade to Feisty&lt;/a&gt; I installed the &lt;a href="http://www.nvidia.com/page/home.html"&gt;NVidia&lt;/a&gt; drivers' packages and they were updated. And since for some reason Ubuntu's NVidia drivers still don't work, I lost my X! So, once again, it's back to &lt;a href="http://w3m.sourceforge.net/"&gt;w3m&lt;/a&gt; to download and install the &lt;a href="http://us.download.nvidia.com/XFree86/Linux-x86/1.0-9755/NVIDIA-Linux-x86-1.0-9755-pkg1.run"&gt;NVidia drivers&lt;/a&gt; from NVidia's website...&lt;br /&gt;&lt;br /&gt;This is easy to solve, but I would rather that it didn't happen again. So I removed the Ubuntu packages from my installation.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get remove nvidia-glx&lt;br /&gt;sudo apt-get remove nvidia-kernel-common&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;After doing this you must reinstall the NVidia drivers, because removing these packages also deletes a bunch of required files. As a bonus, you win about 100Mb of free space. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-3463004565775549238?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/3463004565775549238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=3463004565775549238' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/3463004565775549238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/3463004565775549238'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/05/ubuntu-nvidia-and-automatic-updates.html' title='Ubuntu, NVidia and Automatic updates'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-882610204334888779</id><published>2007-05-20T12:06:00.000+01:00</published><updated>2007-05-20T14:38:18.219+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Automate Everything!</title><content type='html'>The other day, while waiting for another computer reboot or something similar, I grabbed &lt;a href="http://www.pragmaticprogrammer.com/ppbook/index.shtml"&gt;The Pragmatic Programmer&lt;/a&gt; from the shelf. I already read the book, so I was just quickly browsing the &lt;a href="http://www.pragmaticprogrammer.com/ppbook/extracts/rule_list.html"&gt;tips in the book&lt;/a&gt; when I found this one: "Automate Everything". (you can find it by looking for "Don't Use Manual Procedures" in the previous link).&lt;br /&gt;&lt;br /&gt;I already do this at work, but I started thinking it would be a really good idea to start applying this principle to my home projects. Take my &lt;a href="http://www.margaridatovar.com/"&gt;sister's in law website&lt;/a&gt;. Here's the procedure I use to upload it to the server:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open googleanalytics.txt and copy the contents&lt;/li&gt;&lt;li&gt;Open pageend.php and paste googleanalytics.txt content&lt;/li&gt;&lt;li&gt;Open &lt;a href="http://gftp.seul.org/"&gt;gFTP&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Open &lt;a href="http://keepassx.sourceforge.net/"&gt;KeePassX&lt;/a&gt; to fetch the site's password&lt;/li&gt;&lt;li&gt;Use gFTP to transfer some of the directories in the development folder (this actually counts as about 10 steps!)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Check if I didn't make a mistake in the gFTP 10 steps!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Open pageend.php and remove googleanalytics.txt content&lt;/li&gt;&lt;/ol&gt;Some notes on these procedures: I never did steps 1, 2 and 7. It was too much work so I  never actually got &lt;a href="http://www.google.com/analytics"&gt;Google Analytics&lt;/a&gt; to work until yesterday. I'm not kidding about step 5 being about 10 steps... I actually uploaded the folders one by one to make sure I got all the right files and that the .svn folders weren't copied. This may seem rather stupid, but since I executed this procedure about once a month it wasn't really a problem, just a nuisance.&lt;br /&gt;&lt;br /&gt;Still I decided to automate everything. I did a shell script and right now I have a one step procedure to upload the site:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Run ./publish.sh&lt;/li&gt;&lt;/ol&gt;And what did I gain with this 2 hour or so investment?&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I learned more about &lt;a href="http://www.gnu.org/software/bash/"&gt;bash&lt;/a&gt; programming&lt;/li&gt;&lt;li&gt;I learned how &lt;a href="http://www.gnu.org/software/sed/"&gt;sed&lt;/a&gt; works&lt;/li&gt;&lt;li&gt;I learned about &lt;a href="http://wput.sourceforge.net/"&gt;wput&lt;/a&gt;&lt;/li&gt;&lt;li&gt;I got Google Analytics working on the website&lt;/li&gt;&lt;li&gt;I'll be doing no more mistakes while uploading the site&lt;/li&gt;&lt;li&gt;I can make small changes to the site without thinking about the dreaded upload process&lt;/li&gt;&lt;li&gt;I feel like a better &lt;a href="http://catandgirl.com/view.php?loc=94"&gt;geek&lt;/a&gt;! :)&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-882610204334888779?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/882610204334888779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=882610204334888779' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/882610204334888779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/882610204334888779'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/05/automate-everything.html' title='Automate Everything!'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-9024487796841236313</id><published>2007-05-12T18:40:00.000+01:00</published><updated>2007-05-20T14:37:20.272+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Sandboxie</title><content type='html'>Are you looking for the best free text editor? Looking for the best wma to mp3 converter? It is quite easy to find free software to do these tasks, the problem is that after you install and test them all, your Windows installation is suddenly filled with registry entries and software you really don't want!&lt;br /&gt;&lt;br /&gt;A while a go while browsing &lt;a href="http://lifehacker.com/"&gt;LifeHacker&lt;/a&gt; I read an article about a software that promised to end these troubles: &lt;a href="http://www.sandboxie.com/"&gt;Sandboxie&lt;/a&gt;. So I gave it a try.&lt;br /&gt;&lt;br /&gt;I had some wma files to convert to MP3 files and found this &lt;a href="http://www.wma-mp3.org/"&gt;free converter&lt;/a&gt;, so I installed Sandboxie and run the installer of the software. Everything went OK and the software was installed. I then run the free converter inside the Sandboxie and converted the files. Sure enough the converted files only appeared in the special folder selected by Sandboxie to be the sandbox.&lt;br /&gt;&lt;br /&gt;I copied the MP3 files to a real folder on disk, turned off and cleared the contentes of the sandbox. And my Windows installation was exactly what it was before I installed the converter!&lt;br /&gt;&lt;br /&gt;I only wished I knew about this software before testing 14 different text editors and totally trashing my Windows installation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-9024487796841236313?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/9024487796841236313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=9024487796841236313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/9024487796841236313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/9024487796841236313'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/05/sandboxie.html' title='Sandboxie'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-8105830803631501929</id><published>2007-04-28T21:30:00.000+01:00</published><updated>2007-04-28T22:44:52.760+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Upgrading to Feisty</title><content type='html'>With all the media coverage &lt;a href="http://www.ubuntu.com/news/congratulations-ubuntu-7.04"&gt;Ubuntu Feisty&lt;/a&gt; is getting in &lt;a href="http://slashdot.org/search.pl?query=feisty"&gt;slashdot&lt;/a&gt;, &lt;a href="http://www.digg.com/search?section=news&amp;s=feisty"&gt;digg&lt;/a&gt; and others, I started thinking about doing the upgrade myself. I was just thinking how great it would be if there was just a simple button to click when I got the usual desktop notification from the &lt;a href="http://people.ubuntulinux.org/%7Emako/docteam/quickguide/ch05.html#qg-ubuntu-update-manager"&gt;Update Manager&lt;/a&gt;. And guess what? It had a button to upgrade to Feisty! So I clicked it.&lt;br /&gt;&lt;br /&gt;What I loved about the upgrade:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The button!&lt;/li&gt;&lt;li&gt;The warnings about low disk space at the start, and not 20 minutes into the installation&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The download speed (it took about 25 minutes to download... I didn't know my ISP could do 900kb/s!)&lt;/li&gt;&lt;li&gt;After the upgrade, stuff that wasn't working on my box started working again (Picasa)&lt;/li&gt;&lt;/ol&gt;What I didn't like so much:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The warning about the disk space tells you how much space you need to free up, not how much space you need free (who reads the fine print anyway?)&lt;/li&gt;&lt;li&gt;There are dialog boxes in the middle of the installation. It was late at night when I started the installation, and the estimated time was 45 minutes, so I went to sleep. When I woke up there was a question waiting for me and 40 more minutes of installation time.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;My &lt;a href="http://www.nvidia.com/page/home.html"&gt;NVidia&lt;/a&gt; graphics adapter wasn't working after the upgrade. And installing it with &lt;span style="font-family: courier new;"&gt;apt-get&lt;/span&gt; didn't work either. I had to get the drivers from the NVidia web site, not an easy task when all you have is a text console and &lt;a href="http://w3m.sourceforge.net/"&gt;w3m&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;But all in all everything went fine and I've been using my brand new Ubuntu release since morning. If you're using Ubuntu, click the button!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-8105830803631501929?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/8105830803631501929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=8105830803631501929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/8105830803631501929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/8105830803631501929'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/04/upgrading-to-feisty.html' title='Upgrading to Feisty'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-1895864876222962447</id><published>2007-04-21T23:02:00.000+01:00</published><updated>2007-04-21T23:48:00.912+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>3 Cheers for Open Source!</title><content type='html'>I'm a great user and adept of &lt;a href="http://www.fsf.org/"&gt;free software&lt;/a&gt;, but I must confess that I'm more attracted to the "&lt;a href="http://c2.com/cgi/wiki?FreeAsInBeer"&gt;free beer&lt;/a&gt;" side of things rather than the "&lt;a href="http://c2.com/cgi/wiki?FreeAsInSpeech"&gt;free speech&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;But for some reason each time I change a bit of open source code and make things work just like I want them to, it gives me an enormous satisfaction! There's 3 episodes that I really enjoyed on my open source adventures:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.&lt;/b&gt; I patched the linux kernel! It was just a small patch to make my CD-Rom drive work, but it was tremendously rewarding to see the little light blink on that drive! (I didn't publish this one because it was a really old cartridge 1x CD-Rom drive)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.&lt;/b&gt; I patched &lt;a href="http://www.kannel.org/"&gt;Kannel&lt;/a&gt;. This was amazing because I did the patch at the same time someone &lt;a href="http://www.mail-archive.com/devel@kannel.3glab.org/msg05412.html"&gt;asked for it&lt;/a&gt; on the mailing list. So I send it to the mailing list and it is now part of the &lt;a href="http://www.kannel.org/download/1.2.1/gateway-1.2.1/ChangeLog"&gt;Kannel code&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.&lt;/b&gt; I've been trying out &lt;a href="http://www.ghisler.com/"&gt;Total Commander&lt;/a&gt; on Windows. It's a really good file manager and has an &lt;a href="http://www.totalcmd.net/plugring/ipod.html"&gt;iPod Plugin&lt;/a&gt;. Turns out the plugin doesn't work with newer iPods. But since the source is available at the &lt;a href="http://www.jonas-baehr.de/news.php"&gt;author's site&lt;/a&gt;, I downloaded it and fixed the problem! (I'm now talking with the author to get the patch published)&lt;br /&gt;&lt;br /&gt;The funny thing is I believe I would've done the same even if the software wasn't free as in "free beer". Actually I would be thrilled to be able to fix some bugs and annoyances in some paid applications. Unfortunately I don't have access to the source code, so I'll just have to live with them...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-1895864876222962447?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/1895864876222962447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=1895864876222962447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1895864876222962447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1895864876222962447'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/04/3-cheers-for-open-source.html' title='3 Cheers for Open Source!'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-532139186444059992</id><published>2007-04-06T16:29:00.000+01:00</published><updated>2007-04-06T16:58:41.173+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drawing'/><title type='text'>Wacom Graphire 4</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_cLyDgbVAqWo/RhZt6VAQqxI/AAAAAAAAAEQ/iXJKZsXopx8/s1600-h/mouse.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_cLyDgbVAqWo/RhZt6VAQqxI/AAAAAAAAAEQ/iXJKZsXopx8/s200/mouse.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5050344880980667154" /&gt;&lt;/a&gt;I bought a &lt;a href="http://www.wacom-europe.com/int/products/graphire4/index.asp?lang=en&amp;pdx=10"&gt;Wacom Graphire 4&lt;/a&gt;! I'm an engineer, not a designer, but I do like to make the occasional drawing and I was on the lookout for a pen tablet for a while.&lt;br /&gt;&lt;br /&gt;I bought it yesterday and installing it was as smooth as you would expect... just plug it in and it works, add a few drivers and you can use all features (so far I only installed it on Windows). I was very happy to see that neither the pen nor the tablet need bateries. Just plug in to the USB port and everything is working.&lt;br /&gt;&lt;br /&gt;I installed &lt;a href="http://www.corel.com/servlet/Satellite/us/en/Product/1152105062012"&gt;Corel Painter Essentials 3&lt;/a&gt; (it is bundled with the pen tablet) and started sketching. It's really awkward when you start, because you keep doing "mouse gestures" all the time. I raised my hand, moved it to the left and when I placed it down again I was surprised to see the pointer going way to the left instead of staying in the same place!&lt;br /&gt;&lt;br /&gt;But I eventually got used to it and draw the mouse that you see here... My very first pen tablet drawing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-532139186444059992?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/532139186444059992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=532139186444059992' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/532139186444059992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/532139186444059992'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/04/wacom-graphire-4.html' title='Wacom Graphire 4'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_cLyDgbVAqWo/RhZt6VAQqxI/AAAAAAAAAEQ/iXJKZsXopx8/s72-c/mouse.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-430981240739133672</id><published>2007-03-28T20:00:00.000+01:00</published><updated>2007-03-29T18:28:58.738+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='OutSystems'/><title type='text'>OutSystems Express Edition</title><content type='html'>If you're looking for a fast way to build an enterprise application, if you want to be able to change it even faster and if you want it &lt;b&gt;for free&lt;/b&gt;, &lt;a href="http://express.outsystems.com/"&gt;OutSystems Express Edition&lt;/a&gt; is the answer!&lt;br /&gt;&lt;br /&gt;I've got to be honest here. I work for &lt;a href="http://www.outsystems.com/"&gt;OutSystems&lt;/a&gt; so you may consider my opinion to be a little biased. But the great thing is that by subscribing to the beta program you can see for yourself how fast it is to create a web application using the &lt;a href="http://express.outsystems.com/site/PlatformHome.aspx"&gt;OutSystems Platform&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So go ahead! &lt;a href="http://express.outsystems.com/"&gt;Register now for the beta program&lt;/a&gt;, wait impatiently for the &lt;i&gt;"Welcome to the Beta program email"&lt;/i&gt;, take a look at the bundled IT Asset Manager and build your own web application!&lt;br /&gt;&lt;br /&gt;Don't forget to send us all your feedback about the OutSystems Express Edition so we can improve the product! And feel free to exchange ideas with other OutSystems users at the &lt;a href="http://community.outsystems.com/"&gt;OutSystems Community&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Happy developing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-430981240739133672?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/430981240739133672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=430981240739133672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/430981240739133672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/430981240739133672'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/03/outsystems-express-edition.html' title='OutSystems Express Edition'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-9077582946340488279</id><published>2007-03-07T23:00:00.000Z</published><updated>2007-03-07T23:11:00.565Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Change Gnome Splash Screen</title><content type='html'>So you just changed your entire Gnome theme, your Ubuntu installation is finally that great shade of blue you really love, you customized your login screen to use transparent png's and it just sparkles and... After you login the gnome splash screen is still Ubuntu brown!&lt;br /&gt;&lt;br /&gt;Don't worry! It can be fixed... and tested! Just create an image (jpg or png) and copy it to &lt;code&gt;/usr/share/pixmaps/splash/&lt;/code&gt;. Now launch a terminal window and type &lt;code&gt;gconf-editor&lt;/code&gt;. This will launch the Gnome Configuration Editor.&lt;br /&gt;&lt;br /&gt;Navigate to &lt;b&gt;apps &gt;&gt; gnome-session &gt;&gt; options&lt;/b&gt; and change the &lt;code&gt;splash_image&lt;/code&gt; to your image name. That's it!&lt;br /&gt;&lt;br /&gt;Now to test it without logging out. First install &lt;a href="http://en.wikipedia.org/wiki/Xnest"&gt;Xnest&lt;/a&gt;: &lt;code&gt;sudo apt-get install xnest&lt;/code&gt;. Now go to a terminal window and type &lt;code&gt;gdmflexiserver --xnest&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;This will launch another login session inside a window, so you don't have to keep logging in and out to test your new splash screen!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-9077582946340488279?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/9077582946340488279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=9077582946340488279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/9077582946340488279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/9077582946340488279'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/03/change-gnome-splash-screen.html' title='Change Gnome Splash Screen'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-6397285098887537923</id><published>2007-03-02T18:51:00.000Z</published><updated>2007-03-02T19:31:03.677Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='beryl'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Beryl: Desktop Fireworks</title><content type='html'>If you want to make your Ubuntu desktop really come to live, &lt;a href="http://www.beryl-project.org/"&gt;Beryl&lt;/a&gt; is the answer. It's an accelerated OpenGL desktop manager that gives you a lot of &lt;strike&gt;bells and whistles&lt;/strike&gt; visual feedback on your window manager operations.&lt;br /&gt;&lt;br /&gt;Installing is not as simple as you might wish, but it isn't too hard either. On the &lt;a href="http://wiki.beryl-project.org/wiki/Main_Page"&gt;Beryl wiki&lt;/a&gt; there's an entry on how to &lt;a href="http://wiki.beryl-project.org/wiki/Install_Beryl_on_Ubuntu_Edgy_with_AIGLX"&gt;install Beryl on Ubuntu&lt;/a&gt; and you can basically follow that.&lt;br /&gt;&lt;br /&gt;The only notes I have on the installations steps are:&lt;br /&gt;&lt;br /&gt;I had an error message while starting Beryl. As a consequence I had no window manager! The message was:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;beryl: No GLXFBConfig for depth 32&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;After doing some searches on the web I found a &lt;a href="http://www.ubuntuforums.org/showthread.php?p=2050655"&gt;post&lt;/a&gt; that gave a solution to this problem. Just add the following to "Device" section on your &lt;code&gt;/etc/X11/xorg.conf&lt;/code&gt; file:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Option "AddARGBGLXVisuals" "True"&lt;br /&gt;Option "DisableGLXRootClipping" "True"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Also I skipped the entire "Configuring Beryl" section and just added &lt;code&gt;beryl-manager&lt;/code&gt; to my &lt;b&gt;Startup Programs&lt;/b&gt; in &lt;b&gt;System &gt; Preferences &gt; Sessions&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Next you have to configure Beryl. There's a ton of options, animations, keyboard shortcuts, themes, etc, etc that you can tweak with to make your desktop look exactly like you want it to! And if you have a bit of patience and 28Mb of spare memory to run Beryl, it's really worth the trouble.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-6397285098887537923?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/6397285098887537923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=6397285098887537923' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/6397285098887537923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/6397285098887537923'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/03/beryl-desktop-fireworks.html' title='Beryl: Desktop Fireworks'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-805442219663456569</id><published>2007-02-24T13:37:00.000Z</published><updated>2007-02-24T13:55:06.333Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='touchpad'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Touchpad in Ubuntu</title><content type='html'>Ubuntu installations come with a mouse setup software, but it is a generic software that only allows  you to setup stuff like double-click timeout, pointers, speed, etc. If you have a touchpad and want to setup other parameters like tapping speed, you'll have to install &lt;span style="font-weight:bold;"&gt;GSynaptics&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;sudo apt-get install gsynaptics&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;After installing the software you can find it in the &lt;span style="font-style:italic;"&gt;System/Preferences/Touchpad&lt;/span&gt; menu. Try to click it and you'll get an error message!&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;GSynaptics couldn't initialize.&lt;br /&gt;You have to set 'SHMConfig' 'true' in xorg.conf or XF86Config to use GSynaptics&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To fix this you need to edit your &lt;code&gt;/etc/X11/xorg.conf&lt;/code&gt; file (e.g. &lt;code&gt;sudo gedit /etc/X11/xorg.conf&lt;/code&gt;) and find a section like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Section "InputDevice"&lt;br /&gt;    Identifier     "Synaptics Touchpad"&lt;br /&gt;    Driver         "synaptics"&lt;br /&gt;    Option         "SendCoreEvents" "true"&lt;br /&gt;    Option         "Device" "/dev/psaux"&lt;br /&gt;    Option         "Protocol" "auto-dev"&lt;br /&gt;    Option         "HorizScrollDelta" "0"&lt;br /&gt;EndSection&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Before the &lt;code&gt;EndSection&lt;/code&gt; add an option with the code &lt;code&gt;Option "SHMConfig" "on"&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Now you need to restart X. Make sure you &lt;span style="font-weight:bold;"&gt;save all your work&lt;/span&gt;, because restarting X will log you out. Now press &lt;code&gt;ctrl-alt-backspace&lt;/code&gt;. Login and you should now be able to run &lt;span style="font-style:italic;"&gt;System/Preferences/Touchpad&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;If you still have problems using your touchpad, refer to this &lt;a href="http://www.debuntu.org/2006/06/18/67-how-to-setting-up-touchpad-on-a-laptop-a-complete-guide"&gt;complete guide&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-805442219663456569?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/805442219663456569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=805442219663456569' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/805442219663456569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/805442219663456569'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/02/touchpad-in-ubuntu.html' title='Touchpad in Ubuntu'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-1788214684287268713</id><published>2007-02-19T19:22:00.000Z</published><updated>2007-02-19T19:33:34.433Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='google earth'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Google Earth on Ubuntu</title><content type='html'>&lt;a href="http://earth.google.com/index.html"&gt;Google Earth&lt;/a&gt; is a great software to explore your home planet and your neighborhood. But if you have an &lt;a href="http://www.nvidia.com/page/home.html"&gt;nVidia&lt;/a&gt; video card in Ubuntu you may experience some... rather strange results!&lt;br /&gt;&lt;br /&gt;To solve this problem all you have to do is update to the latest nVidia drivers. But if you're lazy like me you're probably asking &lt;span style="font-style:italic;"&gt;"Isn't there an easier way?"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Well, the answer is both &lt;span style="font-style:italic;"&gt;yes&lt;/span&gt; and &lt;span style="font-style:italic;"&gt;no&lt;/span&gt;. You do have to update the nVidia drivers, but &lt;a href="http://albertomilone.com/index.html"&gt;Alberto Milone&lt;/a&gt; has a great script called &lt;span style="font-weight:bold;"&gt;&lt;a href="http://www.albertomilone.com/nvidia_scripts1.html"&gt;Envy&lt;/a&gt;&lt;/span&gt; that does all the hard work for you.&lt;br /&gt;&lt;br /&gt;Just follow the instructions on the website and in 5 minutes you should have Google Earth running without a scratch!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-1788214684287268713?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/1788214684287268713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=1788214684287268713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1788214684287268713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/1788214684287268713'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/02/google-earth-on-ubuntu.html' title='Google Earth on Ubuntu'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-6159726592232856132</id><published>2007-02-13T23:19:00.000Z</published><updated>2007-02-13T23:19:43.949Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='hosting'/><title type='text'>ICDSoft Appraisal</title><content type='html'>If you're looking for a hosting server, my advice goes to &lt;a href="http://www2.icdsoft.com/"&gt;ICDSoft&lt;/a&gt;. I host my sister's in law &lt;a href="http://www.margaridatovar.com"&gt;website&lt;/a&gt; there and it has all the features I need (PHP, MySql, Ruby, email accounts galore, ...) and I never had a problem with it.&lt;br /&gt;&lt;br /&gt;Of course not having problems isn't good enough reason to recommend a hosting service. That's the minimum they can do for you! The reason why I recommend ICDSoft is for their &lt;a href="https://www2.suresupport.com/"&gt;support&lt;/a&gt;. Let me tell you about my two experiences with them:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ticket 1:&lt;/b&gt; I tried to place a &lt;a href="http://www.rubyonrails.org/"&gt;Rails&lt;/a&gt; application on the website. For some reason I wasn't able to make it work, so I decided to contact support. In &lt;b&gt;5 minutes&lt;/b&gt; I had a reply with all the required instructions to make my application work.&lt;br /&gt;&lt;br /&gt;Being new to Rails I didn't really understand the response... So I told them something like &lt;span style="font-style:italic;"&gt;"I couldn't make it work. Please poke my code and see what is wrong. And fixe it while your at it"&lt;/span&gt;. And can you believe it? They did look into my code, corrected my scripts, changed the permissions to make it all work and sent me a reply with all they had done... &lt;b&gt;In less than 45 minutes!&lt;/b&gt; Now that is great support...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ticket 2:&lt;/b&gt; Still working on my sister's in law Rails version of the website I decided to use &lt;a href="http://rmagick.rubyforge.org/"&gt;RMagick&lt;/a&gt; to resize the images and create the thumbnails. I uploaded the website to my account to test it and it didn't work. ICDSoft doesn't have RMagick installed.&lt;br /&gt;&lt;br /&gt;So I contacted support. I don't know how long they took to reply, but I think it was about 5 minutes like the first time. The reply said something like &lt;span style="font-style:italic;"&gt;"We're talking to the sysadmins and we will contact you soon"&lt;/span&gt;. And they did!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Less than 30 minutes&lt;/b&gt; later I had a reply stating that the sysadmins had installed RMagick. I tested my website again and RMagick was really working!&lt;br /&gt;&lt;br /&gt;As a client, my feeling was that they were there working just for me! They edited my code, they installed a package on the server because I asked them to. Never a support service made me feel this pampered!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-6159726592232856132?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/6159726592232856132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=6159726592232856132' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/6159726592232856132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/6159726592232856132'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/02/icdsoft-appraisal.html' title='ICDSoft Appraisal'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-2107839883639147526</id><published>2007-02-07T10:45:00.000Z</published><updated>2007-02-07T13:58:50.450Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='drivel'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Compiling Drivel in Ubuntu</title><content type='html'>So you want to use &lt;a href="http://www.dropline.net/drivel/"&gt;Drivel&lt;/a&gt; to add your posts to &lt;a href="http://www.blogger.com"&gt;Blogger&lt;/a&gt;, right? By this time you probably noticed that Drivel doesn't work with the new version of Blogger. Shame...&lt;br /&gt;&lt;br /&gt;If you look around you'll probably find rumors that the CVS version of Drivel supports the new Blogger login... This is &lt;span style="font-weight:bold;"&gt;not true&lt;/span&gt;, but if you care to compile Drivel anyway here are the steps to do it:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Get CVS: &lt;code&gt;sudo apt-get install cvs&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Get the gnome development environment: &lt;code&gt;sudo apt-get install gnome-devel&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Install libsoup. This should be easy, something like &lt;code&gt;sudo apt-get install libsoup2.2-dev&lt;/code&gt;. Unfortunately it's not so easy. The Ubuntu version of libsoup is 2.2.96 and Drivel needs version 2.2.97! You must go to &lt;a href="http://packages.debian.org"&gt;Debian&lt;/a&gt; and search for the needed packages. I've downloaded and installed &lt;a href="http://packages.debian.org/testing/devel/libsoup2.2-dev"&gt;this one&lt;/a&gt;, plus dependencies.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;For some reason during the installation of the libsoup dependencies (the libxml) I had to do a &lt;code&gt;apt-get install -f&lt;/code&gt;. This made some libs disappear, so I had to run &lt;code&gt;sudo apt-get install gnome-devel&lt;/code&gt; again.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now get the Drivel source from CVS. Instructions on how to do this can be found at &lt;a href="http://www.dropline.net/drivel/development.php"&gt;their site&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now just type &lt;code&gt;./autogen.sh&lt;/code&gt; followed by &lt;code&gt;make&lt;/code&gt;.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;You can now start hacking the code and add support for the new Blogger Login API! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-2107839883639147526?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/2107839883639147526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=2107839883639147526' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/2107839883639147526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/2107839883639147526'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/02/compiling-drivel-in-ubuntu.html' title='Compiling Drivel in Ubuntu'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-7354193493252108223</id><published>2007-02-06T14:00:00.000Z</published><updated>2007-02-06T14:05:27.172Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Registry Tips</title><content type='html'>Here's some tricks you can use to make the Windows Registry work for you:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Add a command to the context menu&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Add a key to the &lt;code&gt;HKEY_CLASSES_ROOT\[EXTENSION]\shell&lt;/code&gt; with the name of the application you'll be using (e.g. SourceEdit). In the default value, insert the name you want to appear in the context menu (e.g. "SourceEdit").&lt;br /&gt;&lt;br /&gt;Inside the currently created key, add another key called "command". In the default value of the command key, add the command that will be invoked (e.g. &lt;code&gt;"c:\Program Files\Source Edit\SrcEdit.exe" %1&lt;/code&gt;).&lt;br /&gt;&lt;br /&gt;Note: [EXTENSION]can be "*" for all files.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Setting command completion in cmd&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In the key &lt;code&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor&lt;/code&gt; set the value of &lt;code&gt;CompletionChar&lt;/code&gt; to 9.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Setting an application path to launch from the "run" window&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In the key &lt;code&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths&lt;/code&gt; create a new key with the name of the application you want to launch (e.g. ue.exe). Set the default entry to the application you REALLY want to launch (e.g. &lt;code&gt;c:\Program Files\UltraEdit\uedit32.exe&lt;/code&gt;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;.reg Files&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Adding an entry:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;REGEDIT4&lt;br /&gt;&lt;br /&gt;[HKEY_CURRENT_USER\DummyTree]&lt;br /&gt;"ValueToBeRemoved"="Value"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Removing a tree:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;REGEDIT4&lt;br /&gt;&lt;br /&gt;[-HKEY_CURRENT_USER\DummyTree]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Remove an entry:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;REGEDIT4&lt;br /&gt;&lt;br /&gt;[HKEY_CURRENT_USER\DummyTree]&lt;br /&gt;"ValueToBeRemoved"=-&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-7354193493252108223?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/7354193493252108223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=7354193493252108223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/7354193493252108223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/7354193493252108223'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/02/registry-tips.html' title='Registry Tips'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-6554201345343155293</id><published>2007-02-01T22:12:00.000Z</published><updated>2007-02-04T14:13:07.492Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='div'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Vertically align images</title><content type='html'>Ever tried to vertically align an image inside a div? I tried to find an easy solution for this problem but couldn't find anything that worked on the web, so here's the solution I found.&lt;br /&gt;&lt;br /&gt;But first, let me go back to the problem. Imagine you're creating a photo gallery website. Being a  Web 2.0 kind of guy you place the thumbnails inside divs, something like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;div class="thumb"&amp;gt;&lt;br /&gt; &amp;lt;img src="mythumb.jpg" /&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Your css might look something like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;.thumb {&lt;br /&gt; width: 120px;&lt;br /&gt; height: 120px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.thumb img {&lt;br /&gt; vertical-align: middle;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If your thumbs aren't all the same size (and 120x120) this approach will not work! All your thumbs will be top aligned instead of middle aligned.&lt;br /&gt;&lt;br /&gt;The problem here is that the image is being aligned relatively to the height of the contents of the div rather than to the div height. To solve this problem we have to make sure the content of the div has the same height as the div itself.&lt;br /&gt;&lt;br /&gt;The hack you can use to "fool" the div is to create an empty image with height 100%:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;div class="thumb"&amp;gt;&lt;br /&gt; &amp;lt;img width="0" height="100%" /&amp;gt;&lt;br /&gt; &amp;lt;img src="mythumb.jpg" /&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The first image has no width nor source, to make sure it stays invisible. Because the height is 100% it will have the same height as the div (120px in this case). This means the content of the div has 120px height, so the "mythumb.jpg" image will be properly aligned.&lt;br /&gt;&lt;br /&gt;I tried this trick with Firefox 2.0 and IE 7.0 and it worked fine. If you find any browser where this doesn't work, please let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-6554201345343155293?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/6554201345343155293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=6554201345343155293' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/6554201345343155293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/6554201345343155293'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/02/vertically-align-images.html' title='Vertically align images'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7754525275646824833.post-7833000797634637339</id><published>2007-01-31T20:50:00.000Z</published><updated>2007-03-29T18:30:06.884+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Image Size on Ruby</title><content type='html'>If you need to know the dimensions of an image file in ruby, for example because you want to set the "width" and "height" properties of an image on a web page, here's how to do it:&lt;br /&gt;&lt;br /&gt;Start by getting &lt;b&gt;libimage-size&lt;/b&gt;. If you're using Ubuntu you can fetch it using &lt;code&gt;sudo apt-get install libimage-size-ruby&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;You can now use the &lt;code&gt;ImageSize&lt;/code&gt; class to fetch the width and height of your image. There are several ways of doing this, so here's one:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;open(image_path) do |fh|&lt;br /&gt;      img_size = ImageSize.new(fh)&lt;br /&gt;end&lt;br /&gt;puts "Width: #{img_size.get_width} Height: #{img_size.get_height}"&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7754525275646824833-7833000797634637339?l=kutuma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kutuma.blogspot.com/feeds/7833000797634637339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7754525275646824833&amp;postID=7833000797634637339' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/7833000797634637339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7754525275646824833/posts/default/7833000797634637339'/><link rel='alternate' type='text/html' href='http://kutuma.blogspot.com/2007/01/image-size-on-ruby.html' title='Image Size on Ruby'/><author><name>Kutuma</name><uri>http://www.blogger.com/profile/04576269769073593956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_cLyDgbVAqWo/TSHO4ZhOgyI/AAAAAAAAAZ0/zHa_roQ-D6k/S220/DSC_5136.JPG'/></author><thr:total>1</thr:total></entry></feed>
