<?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-6898080540985418194</id><updated>2011-07-08T01:45:21.841+01:00</updated><category term='ruby'/><category term='internships'/><category term='UNIX'/><category term='computer graphics'/><category term='Microsoft'/><category term='data mining'/><category term='Sony'/><category term='Mac OS X Leopard'/><category term='web'/><category term='Office'/><category term='recruiting'/><category term='Numbers'/><category term='software understanding'/><category term='blu-ray'/><category term='web development'/><category term='high-definition video war'/><category term='hd dvd'/><category term='Google Treasure Hunt 2008'/><category term='Tips'/><category term='MacOS X'/><category term='Apple'/><category term='MacOS X Leopard'/><category term='Office 2008'/><category term='Excel 2008'/><category term='GMailFS'/><category term='Toshiba'/><category term='NFS'/><category term='ruby on rails'/><category term='accessibility'/><category term='Directory Utility'/><category term='Visualisation Paradigms'/><category term='user interface design'/><category term='Yahoo'/><category term='usability'/><category term='Master&apos;s Thesis'/><category term='maturity'/><category term='MacPorts'/><category term='Excel'/><title type='text'>Za Waarudo</title><subtitle type='html'>A blog dedicated to this world</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-2469579493001859540</id><published>2009-01-18T06:32:00.003Z</published><updated>2010-06-11T15:25:09.619+01:00</updated><title type='text'>Welcome ~San, You're Logined!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_0wzf4r9GIwU/SXLNKuGdjcI/AAAAAAAAACY/N5xc-ttP87w/s1600-h/Picture+1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 237px; height: 400px;" src="http://4.bp.blogspot.com/_0wzf4r9GIwU/SXLNKuGdjcI/AAAAAAAAACY/N5xc-ttP87w/s400/Picture+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5292518096171273666" /&gt;&lt;/a&gt;&lt;br /&gt;No comments!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-2469579493001859540?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/2469579493001859540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=2469579493001859540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/2469579493001859540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/2469579493001859540'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2009/01/welcome-san-youre-logined.html' title='Welcome ~San, You&apos;re Logined!'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_0wzf4r9GIwU/SXLNKuGdjcI/AAAAAAAAACY/N5xc-ttP87w/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-6974931171043773570</id><published>2008-09-06T19:06:00.003+01:00</published><updated>2008-09-06T21:33:55.684+01:00</updated><title type='text'>NDrive and iPhone</title><content type='html'>It's no good what Apple is doing to the Automotive Navigation Industry. No one really understands what's "behind the curtain", but according to what is stated in the iPhone SDK License Agreement, Section 3.3.7, and I quote:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;applications may not be designed or marketed for real time route guidance&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;What is their intent doing this? Some say they want to prevent "rivals" from doing navigation software, but it's no fun.&lt;br /&gt;&lt;br /&gt;I have contacted Apple using their website a long time ago, regarding these issues but they have completely ignored my questions.&lt;br /&gt;&lt;br /&gt;Nevertheless, a video from NDrive, an example of a navigation software, &lt;a href="http://tvtel.pt/50410/ndrive_iphone.mov"&gt;running on an iPhone&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's a shame that NDrive and other navigation software (iGo, TomTom, etc.) are not allowed to provide real-time route guidance for the iPhone, and even worse when we see no official words from Apple regarding this matter or their future plans.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-6974931171043773570?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/6974931171043773570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=6974931171043773570' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/6974931171043773570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/6974931171043773570'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/09/ndrive-and-iphone.html' title='NDrive and iPhone'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-3237072471513670674</id><published>2008-08-03T13:45:00.002+01:00</published><updated>2008-08-03T14:29:28.981+01:00</updated><title type='text'>Porting applications to the iPhone OS 2.0</title><content type='html'>Lately I have been porting a considerably complex application using the iPhone OS 2.0 SDK. In the past, I have been developing mobile applications for WinCE, PocketPC, and Symbian. With regards to WinCE/PPC, I believe that Visual Studio is a great IDE, but a great IDE is not always the most important factor when developing mobile software. Speaking of Symbian OS (S60 platform), the most popular IDE is Carbide, built upon the Eclipse IDE platform, which I'm not really a big fan of. One very good thing about S60 is the OpenC library, an extensive collection of POSIX and other well-known C libraries, which makes it easier to port for this platform. However, in my personal experience, the development for the Symbian OS (mainly porting) was kind of traumatising when combining the IDE with the platform and the mobile hardware. First, the emulator is bad, slow and works horribly when comparing to the same application deployed in a mobile phone. Secondly, although you can do it graphically after pressing a thousand menus and buttons, you have to write a makefile-like with a lot of tricks/hacks, in order for the compilation to be successful.&lt;br /&gt;&lt;br /&gt;Although Xcode is still not as good as Visual Studio, it is far much better in the sense that it seamlessly integrates with the iPhone Simulator, deploying and running applications in a fast and efficient manner. In terms of porting existing code to the iPhone OS 2.0, it was not very painful, mainly because there is not much of a difference between developing for the iPhone and for the MacOS X.&lt;br /&gt;&lt;br /&gt;Summarising what I think about the 3 platforms:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-style:italic;"&gt;WinCE/Pocket PC:&lt;/span&gt; Great IDE / Very specific platform. Threading and memory maps work horribly / Emulator? Does it even work? / Deployment (slow slow slow)... "90% del tiempo perdido en tonterías"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-style:italic;"&gt;Symbian OS (S60):&lt;/span&gt; Complicated IDE / OpenC is a plus / Emulator? Does not work properly and it is very slow / Deployment could be more straightforward&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-style:italic;"&gt;iPhone OS 2.0 SDK:&lt;/span&gt; Not as full-featured as VStudio but still does a great integration with debugging and deployment / UNIX-like development, UIKit/FoundationKit and Objective-C++ are a big plus! / Fast deployment, debugging and simulation (emulation)!&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The most important factor about iPhone OS 2.0 platform that makes it superb for development is that it supports Objective-C++, making it very easy to port existing UNIX applications since you can mix Objective-C with C/C++ code just by renaming the files to ".mm" (instead of Objective-C's ".m" extension).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-3237072471513670674?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/3237072471513670674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=3237072471513670674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/3237072471513670674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/3237072471513670674'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/08/porting-applications-to-iphone-os-20.html' title='Porting applications to the iPhone OS 2.0'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-5178329175158062187</id><published>2008-07-04T22:33:00.004+01:00</published><updated>2008-07-04T23:05:18.130+01:00</updated><title type='text'></title><content type='html'>While I was googling today, I came across a hilarious video of Steve Balmer, Microsoft from January, 2007:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/C5oGaZIKYvo&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/C5oGaZIKYvo&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;br /&gt;"500 dollars? Fully subsidised? With a plan? (...) And it doesn't appeal to business customers because it doesn't have a keyboard, which makes it not a very good email machine". &lt;br /&gt;&lt;br /&gt;Did you notice the decreasing tone in the last part of this sentence? It sounds a bit like:&lt;br /&gt;&lt;br /&gt;"And it doesn't appeal to business customers because it doesn't have a (...) KEYBOARD (...)".&lt;br /&gt;&lt;br /&gt;This sounds a little off-topic especially if you didn't read the &lt;a href="http://zawaarudo.blogspot.com/2008/07/innovations-in-excel-2008.html"&gt;my previous post&lt;/a&gt; but, according to the &lt;a href="http://www.microsoft.com/mac/products/Office2008/shop-now.mspx"&gt;official site&lt;/a&gt;:&lt;br /&gt;Office 2008 for Mac Home and Student Edition $149.95&lt;br /&gt;Office 2008 for Mac $399.95&lt;br /&gt;Office 2008 for Mac Special Media Edition $499.95&lt;br /&gt;&lt;br /&gt;Let me tell you this straight:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;150 / 400 / 500 dollars for Office 2008 for the Mac? With "editions" (you pay for every kilogram of software you get)? And &lt;a href="http://zawaarudo.blogspot.com/2008/07/innovations-in-excel-2008.html"&gt;without crash recovery or undo after save features&lt;/a&gt;?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No thanks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-5178329175158062187?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/5178329175158062187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=5178329175158062187' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/5178329175158062187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/5178329175158062187'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/07/while-i-was-googling-today-i-came.html' title=''/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-787151923361229807</id><published>2008-07-02T22:58:00.009+01:00</published><updated>2008-07-03T13:20:41.075+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Office 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X Leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='MacOS X'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Office'/><category scheme='http://www.blogger.com/atom/ns#' term='Numbers'/><title type='text'>Innovations (?) in Excel 2008</title><content type='html'>Lately I've been rather busy with my Master's Thesis. Because of that, I've been working a lot with charts. My choice is naturally Excel, since it produces good graphics much better than Numbers.&lt;br /&gt;&lt;br /&gt;Before proceeding to "innovations", I would like to call your attention to the following screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_0wzf4r9GIwU/SGv9KLhN3sI/AAAAAAAAAB4/zN2AYhcLQTE/s1600-h/Picture+1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_0wzf4r9GIwU/SGv9KLhN3sI/AAAAAAAAAB4/zN2AYhcLQTE/s400/Picture+1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5218542944571481794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Can you see what's wrong with it? Well, apparently the answer is "nothing". Yes, except Microsoft apparently considers that &lt;span style="font-weight:bold;"&gt;when  users save their worksheet, they don't need an undo feature anymore&lt;/span&gt;!&lt;br /&gt;I thought &lt;span style="font-weight:bold;"&gt;undo&lt;/span&gt; was meant to be used when you made an action you didn't plan or intended to, i.e. a mistake.&lt;br /&gt;&lt;br /&gt;I don't call it a bug, I call it innovation!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After Excel 2008 crashes for your Mac, you might be rewarded with the following message:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_0wzf4r9GIwU/SGzDnNJPMjI/AAAAAAAAACA/C4SOdxhUf7k/s1600-h/Picture+1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_0wzf4r9GIwU/SGzDnNJPMjI/AAAAAAAAACA/C4SOdxhUf7k/s400/Picture+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5218761146526282290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Don't worry. Microsoft has thought of everything! You can recover it with Excel 2007 for Windows XP:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_0wzf4r9GIwU/SGzDy0QOclI/AAAAAAAAACI/67f8OPEYBBo/s1600-h/Picture+2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_0wzf4r9GIwU/SGzDy0QOclI/AAAAAAAAACI/67f8OPEYBBo/s400/Picture+2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5218761346003137106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope Microsoft first fixes and delivers high quality products before &lt;a href="http://www.appleinsider.com/articles/08/06/24/microsoft_expanding_mac_team_ahead_of_new_products.html"&gt;expanding to a whole new family of products for the Mac&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-787151923361229807?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/787151923361229807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=787151923361229807' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/787151923361229807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/787151923361229807'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/07/innovations-in-excel-2008.html' title='Innovations (?) in Excel 2008'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_0wzf4r9GIwU/SGv9KLhN3sI/AAAAAAAAAB4/zN2AYhcLQTE/s72-c/Picture+1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-6749943246941088264</id><published>2008-07-01T23:23:00.013+01:00</published><updated>2008-07-02T00:54:21.223+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GMailFS'/><category scheme='http://www.blogger.com/atom/ns#' term='MacPorts'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X Leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='MacOS X'/><title type='text'>GmailFS with MacPorts</title><content type='html'>Hi everyone!&lt;br /&gt;&lt;br /&gt;I've been using &lt;a href="http://www.macports.org/"&gt;MacPorts&lt;/a&gt; for quite some time, and I have been very pleased with its simplicity, specially since I am much more used to FreeBSD's amazing ports system. For those who don't know, &lt;span style="font-weight:bold;"&gt;MacPorts&lt;/span&gt; is basically a system of tools that makes it easier for you and everyone to keep a great collection of UNIX software applications up-to-date, without the annoying task of managing all the dependencies or patching some software project (hence the word "port") that was intended to run on Linux or other platform, and that could easily run on a Mac just by changing a line in some file (I'm not exagerating).&lt;br /&gt;&lt;br /&gt;These days I've become interested in &lt;a href="http://richard.jones.name/google-hacks/gmail-filesystem/gmail-filesystem.html"&gt;GMailFS&lt;/a&gt;, a software package that allows you to see (technically "mount") a directory in your filesystem (inside your home directory for example) in user space (i.e., outside the kernel space), so you can mount it without any privileges. GMailFS sits on top of FUSE (Filesystem in Userspace), more specifically on top of MacFUSE which in turn was ported by Google, and allows you to see your GMail account as a set of files and directories so you can actually download and upload files to your account with a couple of drag-n-drops with Finder :)&lt;br /&gt;&lt;br /&gt;Since I was having problems installing this on my Mac, I've seen many forums with discussions regarding the installation procedures. In the end it all involved a lot of tricks and hacks, and never worked for the latest software versions of the packages that are required to set up GMailFS.&lt;br /&gt;&lt;br /&gt;For these reasons I decided to stick with MacPorts (which I believe is a much cleaner and elegant way to manage sofware). Since there was no GMailFS port in MacPorts, not even support for most dependencies, I got in contact with the development team (thanks &lt;a href="http://trac.macports.org/wiki/raimue"&gt;Raim&lt;/a&gt;), and provided feedback enough so a port with all the dependencies for GMailFS was created :)&lt;br /&gt;&lt;br /&gt;For those who might be wondering how to get GMailFS working with MacPorts:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Download a fresh copy of &lt;a href="http://www.macports.org/"&gt;MacPorts&lt;/a&gt; from &lt;a href="http://www.macports.org/install.php"&gt;here&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Update your MacPorts tree of ports by opening a terminal and issuing the command &lt;span style="font-weight:bold;"&gt;sudo port sync&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Install GMailFS by issuing the command &lt;span style="font-weight:bold;"&gt;sudo port install gmailfs&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Please make sure you have python2.5 selected by default, if you don't know or don't have, you can try the following:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Install python_select by issuing the command &lt;span style="font-weight:bold;"&gt;sudo port install python_select&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Select python2.5 as the default python interpreter &lt;span style="font-weight:bold;"&gt;sudo python_select python25&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Along the way you will be asked for your password in your Terminal, after you issue a &lt;span style="font-weight:bold;"&gt;sudo&lt;/span&gt; command. This is equivalent to MacOS X's GUI prompt for a password every time you install an application with some installer.&lt;br /&gt;&lt;br /&gt;Then you can just create a hidden GMailFS configuration file in your home directory as &lt;span style="font-weight:bold;"&gt;~/.gmailfs&lt;/span&gt; with a content similar to:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[connection]&lt;br /&gt;# The proxy URL&lt;br /&gt;#proxy = http://user:pass@proxyhost:port&lt;br /&gt;# or just &lt;br /&gt;#proxy = http://proxyhost:port&lt;br /&gt;&lt;br /&gt;# The number or retries for the proxy connection.&lt;br /&gt;#retries = 3&lt;br /&gt;&lt;br /&gt;[account]&lt;br /&gt;username = your_username&lt;br /&gt;password = your_password_in_plaintext&lt;br /&gt;&lt;br /&gt;[filesystem]&lt;br /&gt;fsname = zOlRRaXPTOzOlRRa&lt;br /&gt;&lt;br /&gt;[references]&lt;br /&gt;# reference = filesystem:username:password&lt;br /&gt;&lt;br /&gt;[logs]&lt;br /&gt;# Change this to DEBUG for verbose output (useful for debugging)&lt;br /&gt;level = INFO&lt;br /&gt;&lt;br /&gt;# if you'd like logs to go to stdout, comment out this variable.&lt;br /&gt;# For logging to, say, stderr, use /dev/stderr of your system's&lt;br /&gt;# equivalent for it&lt;br /&gt;logfile = /dev/stderr&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;After this, you can mount your GMailFS issuing a command like:&lt;br /&gt;&lt;b&gt;&lt;pre&gt;&lt;br /&gt;mount -ovolname=gmail,ping_diskarb -t gmailfs /opt/local/share/gmailfs/gmailfs.py path_for_the_directory_where_you_want_to_mount_your_gmailfs&lt;br /&gt;&lt;/pre&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;After you have mounted the filesystem, you can copy files from and to it, and you will see your gmail account populated with "weird" emails. That's where the string &lt;span style="font-weight:bold;"&gt;zOlRRaXPTOzOlRRa&lt;/span&gt; I used in the sample configuration file above comes in (by the way, you can change this string to anything else): GMailFS will keep emails in your account with subjects containing the word &lt;span style="font-weight:bold;"&gt;zOlRRaXPTOzOlRRa&lt;/span&gt;. Since such emails in your Inbox can become distracting, you can filter them out by archiving them with a GMail filter like the following:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_0wzf4r9GIwU/SGrDC6M_DoI/AAAAAAAAABw/kCbhIbc7z_c/s1600-h/Picture+1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_0wzf4r9GIwU/SGrDC6M_DoI/AAAAAAAAABw/kCbhIbc7z_c/s400/Picture+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5218197573013016194" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please note that I added &lt;span style="font-weight:bold;"&gt;__g__zOlRRaXPTOzOlRRa__h__&lt;/span&gt; instead of just &lt;span style="font-weight:bold;"&gt;zOlRRaXPTOzOlRRa&lt;/span&gt;, since the real email in your inbox will contain a word with a prefix and suffix, making the word become like this.&lt;br /&gt;&lt;br /&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-6749943246941088264?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/6749943246941088264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=6749943246941088264' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/6749943246941088264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/6749943246941088264'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/07/gmailfs-with-macports.html' title='GmailFS with MacPorts'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_0wzf4r9GIwU/SGrDC6M_DoI/AAAAAAAAABw/kCbhIbc7z_c/s72-c/Picture+1.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-8502759100147613644</id><published>2008-06-28T16:25:00.009+01:00</published><updated>2008-06-28T17:51:29.194+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='MacOS X Leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='MacOS X'/><title type='text'>Assorted (not so known) tips on MacOSX</title><content type='html'>I just came across these two tips recently, so you can find them either officially documented or in public forums like I did.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tip #1: Dashboard widgets on your Desktop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dashboard is one of those features that I believe are not very well explored in terms of desktop interaction, in MacOSX. I mean, many times it happened me (and I believe with most of you) to play a bit with some dashboard widgets but quickly end up forgetting about their existence, since one needs to change between dashboard mode and desktop mode. This tip I found out about a couple of days ago, when I first came across with a software review of &lt;a href="http://www.amnestywidgets.com/Singles.html"&gt;Amnesty Singles&lt;/a&gt;. This piece of software basically allows you to transform any widget into a "standard" application. Nevertheless, if you are not willing to pay for such great software, there is quick and dirty tip that pretty much does the same thing (&lt;a href="http://www.macosxhints.com/article.php?story=20050422172929402"&gt;original link&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Preparation (1st time):&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Open &lt;span style="font-weight:bold;"&gt;Terminal&lt;/span&gt; (just type "Terminal" in Spotlight, or alternately open &lt;span style="font-weight:bold;"&gt;Applications-&gt;Utilities-&gt;Terminal&lt;/span&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;While in &lt;span style="font-weight:bold;"&gt;Terminal&lt;/span&gt;, type: &lt;span style="font-weight:bold;"&gt;defaults write com.apple.dashboard devmode YES&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Logout&lt;/span&gt;, for the previous command to take effect, &lt;span style="font-weight:bold;"&gt;and Login&lt;/span&gt; again.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Everytime you want to add a widget to your desktop:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Press &lt;span style="font-weight:bold;"&gt;F12&lt;/span&gt; to open Dashboard.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Press the mouse down to drag&lt;/span&gt; the widget of your choice.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Without releasing the mouse button, press F12&lt;/span&gt; again to return to desktop mode.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When in desktop, you may &lt;span style="font-weight:bold;"&gt;release the mouse button&lt;/span&gt; and the widget will remain in your desktop!&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Everytime you want to remove a widget from your desktop:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Press the mouse down to drag&lt;/span&gt; the widget of your choice.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Without releasing the mouse button, press F12&lt;/span&gt; again to open Dashboard.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When in Dashboard, you may &lt;span style="font-weight:bold;"&gt;release the mouse button&lt;/span&gt; and the widget will return to it!&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Not everything is perfect with this method. For instance, the widget will remain "always on top" and there is no way to minimise  it to the Dock temporarily. The best thing you can do with most of them is to "reduce" their window size. This is why you should consider paying for &lt;a href="http://www.amnestywidgets.com/Singles.html"&gt;Amnesty Singles&lt;/a&gt; if you are not satisfied with these limitations.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tip #2: MacBook/Pro with open/closed lid, built-in display off (not dimmed) and external display (external USB keyboard not required)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Many of you usually prefer an external display, especially if you use your MacBook/Pro in a daily basis. Either because you find it distracting when using an external display or if you don't need your built-in display and want to save its life, you might find this tip useful. The option of whether to leave the lid open or closed is up to you, but the main reason to leave it open is to make the MacBook/Pro ventilate better. Some people even argue that with older Mac laptops such as PowerBooks, leaving the lid closed might cause it to melt under heat.&lt;br /&gt;&lt;br /&gt;Ok, so here's the tip (&lt;a href="http://www.macosxhints.com/article.php?story=20060607121656766"&gt;original link&lt;/a&gt;):&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;First, make sure to &lt;span style="font-weight:bold;"&gt;connect your MacBook/Pro's power adaptor to a power source&lt;/span&gt;, if it's not already.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Plug in your external monitor&lt;/span&gt; to your MacBook/Pro. &lt;span style="font-weight:bold;"&gt;Turn the monitor on&lt;/span&gt;, if it's not already.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;After a while, if an image does not appear in your external monitor, go to &lt;span style="font-weight:bold;"&gt;System Preferences-&gt;Displays&lt;/span&gt; and click a button entitled &lt;span style="font-weight:bold;"&gt;Detect Displays&lt;/span&gt;. An image should appear in your external monitor.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now, the image that appears in your external monitor should represent either a mirrored desktop or an extended desktop. It is essencial that your MacBook/Pro is set to &lt;span style="font-weight:bold;"&gt;Mirrored Mode&lt;/span&gt;. &lt;span style="font-weight:bold;"&gt;If it is not, press F7&lt;/span&gt; once and it should turn to "Mirrored Mode".&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Close the lid&lt;/span&gt; of your MacBook/Pro and it will go to sleep&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now, &lt;span style="font-weight:bold;"&gt;plug in any USB device&lt;/span&gt; (e.g., an external keyboard, a mouse, a pen drive will also do it). If you already have an external mouse or keyboard attached to your laptop, you just need to press some key or button. This will make your MacBook/Pro awake from sleep and use the external screen as the main display.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When the external display shows your Desktop again or your MacBook/Pro prompts for a password (if you activated this security feature for protection), then you can &lt;span style="font-weight:bold;"&gt;open the lid&lt;/span&gt;, if you want your laptop to dissipate better.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Voilá! Your built-in display is turned off (not dimmed), your MacBook/Pro is not sleeping, and you can either use its built-in keyboard and mouse pad if you don't want to use an external USB mouse/keyboard like many forums advocate as necessary!&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;If you want to turn your built-in display back again:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Go to &lt;span style="font-weight:bold;"&gt;System Preferences-&gt;Displays&lt;/span&gt; and click a button entitled &lt;span style="font-weight:bold;"&gt;Detect Displays&lt;/span&gt;. The built-in screen should turn on again.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-8502759100147613644?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/8502759100147613644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=8502759100147613644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/8502759100147613644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/8502759100147613644'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/06/assorted-not-so-known-tips-on-macosx.html' title='Assorted (not so known) tips on MacOSX'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-6869477471195980573</id><published>2008-06-08T13:30:00.010+01:00</published><updated>2008-06-08T15:13:48.763+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UNIX'/><category scheme='http://www.blogger.com/atom/ns#' term='NFS'/><category scheme='http://www.blogger.com/atom/ns#' term='Directory Utility'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X Leopard'/><title type='text'>Directory Utility and remote NFS mounts on Mac OS X Leopard</title><content type='html'>One of the graphical utilities I usually like to use on Mac OS X Leopard, in order to avoid unnecessary command-line tasks, is &lt;span style="font-weight:bold;"&gt;Directory Utility&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Directory Utility allows you to easily manage local/remote services and file systems. With this tool you can mount remote NFS file systems from *BSD, Linux and other UNIX-based Operating Systems. Although it only takes one command-line call to mount a remote filesystem, that's already very well documented in many Operating System manuals, so that is not the purpose of this post.&lt;br /&gt;&lt;br /&gt;If you are wondering how to do it, or having problems doing it, you should launch &lt;span style="font-weight:bold;"&gt;Directory Utility&lt;/span&gt; first. You can access it through the &lt;span style="font-weight:bold;"&gt;Applications-&gt;Utilities&lt;/span&gt; folder or you can use Spotlight for that purpose (typing "Directory Utility").&lt;br /&gt;If you want to add a mount, click in the following order after &lt;span style="font-weight:bold;"&gt;Directory Utility&lt;/span&gt; window appears:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_0wzf4r9GIwU/SEveuHqPU6I/AAAAAAAAABg/HUihOMKz7as/s1600-h/dirutility1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_0wzf4r9GIwU/SEveuHqPU6I/AAAAAAAAABg/HUihOMKz7as/s400/dirutility1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5209502277895672738" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The following dialog appears, and you should fill the fields in a similar way to the following:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_0wzf4r9GIwU/SEvfHsqArpI/AAAAAAAAABo/81ooGnshmZk/s1600-h/dirutility2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_0wzf4r9GIwU/SEvfHsqArpI/AAAAAAAAABo/81ooGnshmZk/s400/dirutility2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5209502717323554450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you are wondering what &lt;span style="font-weight:bold;"&gt;-P&lt;/span&gt; is, it's basically an indication to use a reserved socket port number. Many people claim this flag prevents connectivity problems associated to &lt;span style="font-weight:bold;"&gt;Directory Utility&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;NFS&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;If your Mac does not verify your NFS mount and you are positively sure you entered everything correctly, then it's probably because you are connecting to a NFS server that only works with UDP protocol. You can either click &lt;span style="font-weight:bold;"&gt;Don't verify&lt;/span&gt; button while &lt;span style="font-weight:bold;"&gt;Directory Utility&lt;/span&gt; is searching for the NFS server; or, if you are the administrator of the NFS server, you can add support for TCP transports by appending the &lt;span style="font-weight:bold;"&gt;-t&lt;/span&gt; flag when you call &lt;span style="font-weight:bold;"&gt;nfsd&lt;/span&gt;. After you restart the NFS server and retry adding the mount, &lt;span style="font-weight:bold;"&gt;Directory Utility&lt;/span&gt; will probably be able to verify it successfully.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-6869477471195980573?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/6869477471195980573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=6869477471195980573' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/6869477471195980573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/6869477471195980573'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/06/directory-utility-and-remote-nfs-mounts.html' title='Directory Utility and remote NFS mounts on Mac OS X Leopard'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_0wzf4r9GIwU/SEveuHqPU6I/AAAAAAAAABg/HUihOMKz7as/s72-c/dirutility1.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-2459685549312129522</id><published>2008-06-04T00:26:00.014+01:00</published><updated>2008-06-04T14:33:38.266+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Treasure Hunt 2008'/><title type='text'>Google Treasure Hunt 2008, 4th and last Puzzle</title><content type='html'>Two days ago, the 4th and last puzzle of GTH2008 was announced by Google, I suppose at 23:15 UTC/GMT.&lt;br /&gt;&lt;br /&gt;I have to confess I didn't solve this problem in one shot. The first half of it was done before I got stoned of drowsiness! The second half was solved after a few hours of sleep. Shame on me... the problem was not difficult at all, and I'm not saying this because I have already solved it! It really was simple...&lt;br /&gt;&lt;br /&gt;It can be said that the last puzzle could be, in my opinion, made up of two small puzzles:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;first, how to deal with prime number generation and/or how to perform primality tests (quickly!)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;second, how to sum the numbers correctly and find the smallest prime sum of consecutive prime numbers (quickly and hopefully without any mistake!)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;I spent like 4 hours solving the whole puzzle in the first half but invested most of it in the first "small" puzzle. My solution for the first "small" puzzle was already fast enough for the problem at hand but I always got the program asking for **more and more** prime numbers... I was generating like millions and millions of prime numbers and even so it never seemed to find a result... My question was for the numbers [11, 83, 183, 631, 1037]. I thought that the sum of each set of 11, 83, 183, 631, and 1037 consecutive prime numbers to be simultaneously equal and a prime number itself would be the reason why it was taking so many prime numbers...  &lt;br /&gt;&lt;br /&gt;In the second half, after a deserved time sleeping, I decided to "attack" the second "small" puzzle when I immediately noticed a big mess.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Forth problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When I decided to follow the ancient algorithm of the &lt;a href="http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes"&gt;Sieve of Eratosthenes&lt;/a&gt; to pre-compute all the prime numbers up to a specified integer, I could see that second "small" puzzle was "lagging" the whole thing and not the first... &lt;br /&gt;&lt;br /&gt;According to the reasoning I used in the algorithm to find the smallest sum of prime numbers, we must keep an eye on the current "smallest sum possible". This is to say that, if we start with two sets (call it "strings") of 3 and 7 consecutive prime numbers the initial smallest sum possible is defined by the first 7 primes (equals 41) because it is impossible for the sum of 7 consecutive prime numbers to be less than the first 7 primes.&lt;br /&gt;&lt;br /&gt;Trying to put it simply:&lt;br /&gt;The algorithm tries to shift every string of consecutive prime numbers (a string of length 3, and a string a length 7) by one prime number to the right if the sum of that string is smaller than the current "smallest sum possible". If a string is found whose sum is greater than the current "smallest sum possible", then it means the current "smallest sum possible" kind of "overflowed" and it is not possible to find two strings of length 3 and 7 whose sums are equal and up to the current "smallest sum possible". When this "overflow" happens, the current "smallest sum possible" must be updated to the minimum of the sums of the current strings.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Code for the solution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The following solution is written in C++ and sacrifices a lot of memory. As you will see, it even stores whether odd numbers, zero and one are prime or not which is not needed, as I didn't care much about it... Another problem with the program is that it does not ensure the defined MAX_NUMBER of prime numbers is enough to solve the problem, nor it tests that condition. If it is not enough, you will get a beautiful "segmentation fault", "bus error" or other crash =) Just set the value high enough paying attention to memory limits. The default value of 10000000 should be more than enough for all or most problems for the 4th puzzle.&lt;br /&gt;&lt;strike&gt;Nevertheless, the program computes the solution for [11, 83, 183, 631, 1037] and others in about 4 seconds&lt;/strike&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update: &lt;/span&gt;&lt;br /&gt;I've just updated my solution removing support for biging library as it is not required at all! My solution now takes a total of 0.233 seconds to print the result (0.221172 seconds for the prime generation up to 8000000 plus 0.00250829 seconds for the second "small" puzzle):&lt;br /&gt;&lt;br /&gt;$ time ./sumprimes&lt;br /&gt;Precalculating...&lt;br /&gt;348513 primes pre-calculated&lt;br /&gt;Took 0.224782 seconds&lt;br /&gt;Result: *******&lt;br /&gt;Took 0.00254872 seconds&lt;br /&gt;&lt;br /&gt;real 0m0.233s&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/**&lt;br /&gt; * Google Treasure Hunt 2008 - Question 4&lt;br /&gt; * by Mário Freitas (imkira at gmail dot com)&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;// standard libraries&lt;br /&gt;#include &lt;string&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;&lt;br /&gt;#import &lt;mach/mach_time.h&gt;&lt;br /&gt;&lt;br /&gt;// support for big integers&lt;br /&gt;#include "BigInteger.hh"&lt;br /&gt;#include "BigIntegerUtils.hh"&lt;br /&gt;&lt;br /&gt;// please change as desired&lt;br /&gt;#define MAX_NUMBER  8000000&lt;br /&gt;#define NUM_NTH_PRIMES 5000000&lt;br /&gt;&lt;br /&gt;// number of strings&lt;br /&gt;#define NUM_STRINGS 5&lt;br /&gt;&lt;br /&gt;typedef unsigned long long Counter;&lt;br /&gt;&lt;br /&gt;// sarifice space for prime numbers...&lt;br /&gt;bool gIsPrime[MAX_NUMBER+1];&lt;br /&gt;Counter gMaxNumber(MAX_NUMBER);&lt;br /&gt;Counter gMaxNthPrime(NUM_NTH_PRIMES);&lt;br /&gt;Counter gNthPrimes[NUM_NTH_PRIMES+1];&lt;br /&gt;Counter gSumIndices[NUM_STRINGS];&lt;br /&gt;Counter gSumLengths[NUM_STRINGS];&lt;br /&gt;Counter gSumTotals[NUM_STRINGS];&lt;br /&gt;&lt;br /&gt;void buildPrimesErastothenes ()&lt;br /&gt;{&lt;br /&gt; Counter lNumber = 2, j, lTwo = 2;&lt;br /&gt; &lt;br /&gt; // initialize array to true&lt;br /&gt; memset(&amp;gIsPrime, 1, sizeof(gIsPrime));&lt;br /&gt; gIsPrime[0] = gIsPrime[1] = false;&lt;br /&gt; &lt;br /&gt; // do not care about even numbers, zero or one...&lt;br /&gt; // just calculate if an integer is prime or not!&lt;br /&gt; while ((lNumber * lNumber) &lt;= gMaxNumber)&lt;br /&gt; {&lt;br /&gt;  j = lNumber * lTwo;&lt;br /&gt;  &lt;br /&gt;  while (j &lt;= gMaxNumber)&lt;br /&gt;  {   &lt;br /&gt;   gIsPrime[j] = false;&lt;br /&gt;   j += lNumber;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  ++lNumber;&lt;br /&gt;  &lt;br /&gt;  while ((lNumber &lt;= gMaxNumber) &amp;&amp; (!gIsPrime[lNumber]))&lt;br /&gt;  {&lt;br /&gt;   ++lNumber;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; j = 0;&lt;br /&gt; &lt;br /&gt; // calculate an array which contains the Nth prime numbers&lt;br /&gt; for (Counter i = 0; i &lt;= gMaxNthPrime; ++i)&lt;br /&gt; {&lt;br /&gt;  if (gIsPrime[i])&lt;br /&gt;  {&lt;br /&gt;   gNthPrimes[j] = i;&lt;br /&gt;   ++j;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; std::cout &lt;&lt; j &lt;&lt; " primes pre-calculated\n";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Counter sumConsecutivePrimes (Counter aNth, Counter aLength)&lt;br /&gt;{&lt;br /&gt; Counter lSum = 0, i = aNth;&lt;br /&gt; &lt;br /&gt; aLength = i + aLength;&lt;br /&gt; &lt;br /&gt; while (i &lt; aLength)&lt;br /&gt; {&lt;br /&gt;  lSum += gNthPrimes[i];&lt;br /&gt;  ++i;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; return lSum;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main (int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt; Counter lOne = 1, lMinimumSum, lNewMinimumSum;&lt;br /&gt; int i = 0, j = 0;&lt;br /&gt; uint64_t t0, t1, t;&lt;br /&gt; mach_timebase_info_data_t info;&lt;br /&gt; double nano, seconds;&lt;br /&gt; &lt;br /&gt; // precalculate prime numbers up to MAX_NUMBER&lt;br /&gt; printf("Precalculating...\n");&lt;br /&gt; t0 = mach_absolute_time();&lt;br /&gt; buildPrimesErastothenes();&lt;br /&gt; t1 = mach_absolute_time();&lt;br /&gt; t = t1 - t0;&lt;br /&gt; &lt;br /&gt; mach_timebase_info(&amp;info);&lt;br /&gt; nano = 1e-9 * ( (double) info.numer) / ((double) info.denom);&lt;br /&gt; seconds = (double)t * nano;&lt;br /&gt; &lt;br /&gt; std::cout &lt;&lt; "Took " &lt;&lt; seconds &lt;&lt; " seconds" &lt;&lt; std::endl;&lt;br /&gt;&lt;br /&gt; // initialize the size of each string&lt;br /&gt; gSumLengths[0] = 11;&lt;br /&gt; gSumLengths[1] = 83;&lt;br /&gt; gSumLengths[2] = 183;&lt;br /&gt; gSumLengths[3] = 631;&lt;br /&gt; gSumLengths[4] = 1037;&lt;br /&gt; &lt;br /&gt; t0 = mach_absolute_time();&lt;br /&gt; // initialize the sums and starting offsets of all strings of consecutive primes &lt;br /&gt; for (i = 0; i &lt; NUM_STRINGS; ++i)&lt;br /&gt; {&lt;br /&gt;  gSumIndices[i] = 0;&lt;br /&gt;  gSumTotals[i] = sumConsecutivePrimes(gSumIndices[i], gSumLengths[i]);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; // calculate the initial "smallest sum possible"&lt;br /&gt; lMinimumSum = gSumTotals[NUM_STRINGS-1];&lt;br /&gt; &lt;br /&gt; // while the sums are not simultaneously equal and a prime number...&lt;br /&gt; while ((j != 0) || (!gIsPrime[gSumTotals[NUM_STRINGS-1]]))&lt;br /&gt; {&lt;br /&gt;  i = j = 0;&lt;br /&gt;  for (i = 0; i &lt; NUM_STRINGS; ++i)&lt;br /&gt;  {&lt;br /&gt;   // keep the "smallest sum possible"&lt;br /&gt;   lNewMinimumSum = lMinimumSum;&lt;br /&gt;   &lt;br /&gt;   // the sum of the string is too small?&lt;br /&gt;   if (gSumTotals[i] &lt; lMinimumSum)&lt;br /&gt;   {&lt;br /&gt;    // remove the leftmost element of the sum&lt;br /&gt;    gSumTotals[i] -= gNthPrimes[gSumIndices[i]];&lt;br /&gt;    // shift the string to the right&lt;br /&gt;    ++gSumIndices[i];&lt;br /&gt;    // add the new rightmost element to the sum&lt;br /&gt;    gSumTotals[i] += gNthPrimes[gSumIndices[i] + gSumLengths[i] - lOne];&lt;br /&gt;    // a mismatch was found...&lt;br /&gt;    ++j;&lt;br /&gt;   }&lt;br /&gt;   else&lt;br /&gt;   // the sum of the string overflowed?&lt;br /&gt;   if (gSumTotals[i] &gt; lMinimumSum)&lt;br /&gt;   {&lt;br /&gt;    // find the minimum "smallest sum possible" of the current strings&lt;br /&gt;    if (lNewMinimumSum == lMinimumSum)&lt;br /&gt;    {&lt;br /&gt;     lNewMinimumSum = gSumTotals[i];&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    if (gSumTotals[i] &lt; lNewMinimumSum)&lt;br /&gt;    {&lt;br /&gt;     lNewMinimumSum = gSumTotals[i];&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    // a mismatch was found...&lt;br /&gt;    ++j;&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   // update the "smallest sum possible"...&lt;br /&gt;   lMinimumSum = lNewMinimumSum;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; t1 = mach_absolute_time();&lt;br /&gt; t = t1 - t0; &lt;br /&gt; &lt;br /&gt; // print the result!&lt;br /&gt; std::cout &lt;&lt; "Result: " &lt;&lt; gSumTotals[NUM_STRINGS-1] &lt;&lt; std::endl;&lt;br /&gt;&lt;br /&gt; mach_timebase_info(&amp;info);&lt;br /&gt; nano = 1e-9 * ( (double) info.numer) / ((double) info.denom);&lt;br /&gt; seconds = (double)t * nano;&lt;br /&gt; &lt;br /&gt; std::cout &lt;&lt; "Took " &lt;&lt; seconds &lt;&lt; " seconds" &lt;&lt; std::endl;&lt;br /&gt;&lt;br /&gt; exit(0);&lt;br /&gt;}&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/6898080540985418194-2459685549312129522?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/2459685549312129522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=2459685549312129522' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/2459685549312129522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/2459685549312129522'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/06/google-treasure-hunt-2008-4th-and-last.html' title='Google Treasure Hunt 2008, 4th and last Puzzle'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-5594976614687728034</id><published>2008-06-01T23:56:00.010+01:00</published><updated>2008-06-02T15:22:46.646+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Treasure Hunt 2008'/><title type='text'>Google Treasure Hunt 2008, 3rd Puzzle</title><content type='html'>The 3rd puzzle was announced today.&lt;br /&gt;I don't know why but I have the feeling I liked the first problem the most. I suppose the correct labelling for each puzzle type would be:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Robot Maze: &lt;span style="font-style:italic;"&gt;computer-science&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Product of sums: &lt;span style="font-style:italic;"&gt;low-level UNIX trivia&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Routing table: &lt;span style="font-style:italic;"&gt;networking&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;What will be the 4th and last puzzle about? Maybe a mix of all the three topics?&lt;br /&gt;&lt;br /&gt;Quoting the last post at Google Blog:&lt;br /&gt;&lt;span style="font-style:italic;"&gt; The fourth and final puzzle will be released at 1212448500&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And after solving the 3rd problem:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;Your answer was correct! Congratulations, you're part-way there.&lt;br /&gt;There will more questions over the coming weeks, and the first person to answer them all correctly will win a prize, so keep trying!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If I am not mistaken, the number 1212448500 points to June 3, 2008 at 00:15:00 (like... tomorrow ???)&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update: &lt;/span&gt; The time is expressed as GMT+1, equivalent to 23:15:00 GMT+0.&lt;br /&gt;&lt;br /&gt;I feel a bit sorry for getting to know about this contest only one month after it was launched - since I'm not used to reading the Official Google Blog - so it's already too late for me to think about prizes... but I feel like it was kind of fun to solve such problems :)&lt;br /&gt;&lt;br /&gt;Like the first two problems, I'll be posting the solution to the third, although I believe you won't need much help solving it by yourself:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Third Problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A "pseudo-algorithm" for the mechanism which describes the path taken by a network packet from a known node (call it S - source) to another node (call it D - destination) should be:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;1- Start at node S&lt;/li&gt;&lt;br /&gt;&lt;li&gt;2- First, add the current network node to the path. If D is the current network node the algorithm outputs the path and ends since the packet was just delivered to D. Otherwise advance to the next step.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;3- Iterate each routing table entry:&lt;/li&gt;&lt;br /&gt;&lt;li&gt;4- D matches the Nth entry's network? Set the current node as the Nth entry's target gateway and Jump to step 2&lt;/li&gt;&lt;br /&gt;&lt;li&gt;5- D does *not* match any of the routing table entries? Set the current node as the current &lt;span style="font-style:italic;"&gt;default gateway&lt;/span&gt; and Jump to step 2&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update:&lt;/span&gt;&lt;br /&gt;Just for those who might be wondering how to calculate network addresses using netmasks (/24 etc.), I used &lt;a href="http://jodies.de/ipcalc"&gt;ipcalc&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-5594976614687728034?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/5594976614687728034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=5594976614687728034' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/5594976614687728034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/5594976614687728034'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/06/google-treasure-hunt-2008-3rd-puzzle.html' title='Google Treasure Hunt 2008, 3rd Puzzle'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-1316084012313357162</id><published>2008-05-30T18:50:00.004+01:00</published><updated>2008-06-02T00:42:58.241+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><category scheme='http://www.blogger.com/atom/ns#' term='software understanding'/><title type='text'>Reviving an old project! Well, kind of...</title><content type='html'>Back in 2006, when I was a &lt;del&gt;3rd-year&lt;/del&gt; 4th-year student at the &lt;a href="http://www.fe.up.pt/si_uk/WEB_PAGE.INICIAL"&gt;Faculty of Engineering, University of Porto&lt;/a&gt;,  I was involved in one of the academic assignments I liked most for a course subject entitled &lt;span style="font-style:italic;"&gt;Software Engineering Laboratory&lt;/span&gt;. It was a project involving 4 teams, each responsible for developing a module of a sole system. We called it &lt;span style="font-weight:bold;"&gt;SU&lt;/span&gt; which basically stands for &lt;span style="font-style:italic;"&gt;Software Understanding&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I have kind of "revived" part the project. I mean, I have downloaded most of the required software in order to be able to run SU, including but not limited to Postgres, outdated versions of Ruby, Ruby on Rails and other modules...&lt;br /&gt;&lt;br /&gt;I have decided to record a &lt;a href="http://tvtel.pt/50410/SU%20screencast.mov"&gt;screencast&lt;/a&gt; because I thought it was kind of funny to remember it again and also to make you all know about it. I did not include a voice track in the &lt;a href="http://tvtel.pt/50410/SU%20screencast.mov"&gt;screencast&lt;/a&gt; because I didn't want to spend much time preparing the script.&lt;br /&gt;&lt;br /&gt;You will also notice that there are some typos, translation errors, and some serious usability issues that should have been solved.&lt;br /&gt;&lt;br /&gt;Well, I hope you &lt;a href="http://tvtel.pt/50410/SU%20screencast.mov"&gt;enjoy it&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-1316084012313357162?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/1316084012313357162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=1316084012313357162' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/1316084012313357162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/1316084012313357162'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/05/reviving-old-project-well-kind-of.html' title='Reviving an old project! Well, kind of...'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-5034201495599426714</id><published>2008-05-23T15:36:00.010+01:00</published><updated>2008-05-24T13:30:44.066+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Treasure Hunt 2008'/><title type='text'>Google Treasure Hunt 2008</title><content type='html'>Just some days ago I found out about &lt;a href="http://googleblog.blogspot.com/2008/05/google-treasure-hunt-update.html"&gt;Google Treasure Hunt 2008&lt;/a&gt;, a fun series of questions to exercise problem-solving skills regarding &lt;span style="font-style:italic;"&gt;computer science, networking, and low-level UNIX trivia&lt;/span&gt;. I just solved the first two problems, and I will be posting my solutions below, so be please do not read if you still plan on solving them (&lt;span style="font-weight:bold;"&gt;**spoilers below**&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;First problem&lt;/span&gt;&lt;br /&gt;The first problem is about a robot and a rectangular grid  (with variable dimensions). The robot starts in the top-left corner and must proceed to the bottom-right corner by moving only to the right or downwards (i.e, it cannot move back to the left or upwards). Our mission is to answer how many possible paths can the robot take given the dimensions of the grid.&lt;br /&gt;&lt;br /&gt;After I solved the problem, I was curious for other solutions, and &lt;span style="font-style:italic;"&gt;googled&lt;/span&gt; a bit. Interestingly, most people correctly found the relationship of this problem with the sequences obtained by the &lt;a href="http://en.wikipedia.org/wiki/Pascal%27s_triangle"&gt;Pascal's Triangle&lt;/a&gt;. In fact, I couldn't remember this fact, so I tried a more "visual" and "computer science" oriented approach.&lt;br /&gt;&lt;br /&gt;The first attempt was to code the algorithm for moving right/down until the robot reached the bottom-right corner for a 50x57 grid. I ran the program but I noticed my naive approach would take me an infinite time to get an answer because the program would never return from recursion...&lt;br /&gt;&lt;br /&gt;For the second attempt, I realized the number of possible paths from the cell at [X1, Y1] to the goal cell could be expressed as a &lt;span style="font-style:italic;"&gt;constant&lt;/span&gt; number: the sum of the paths to the right and downwards (number of paths from [X1 + 1, Y1] plus number of paths [X1, Y1+1]). For that purpose, I created a matrix where the results are stored when they are first calculated. If they are found already calculated, there is no need to proceed to the goal, we can just use that result and sum it to the current subtotal. This made the program result immediately, instead of taking infinite time even for very large grids. I submitted this result to the Google Treasure Hunt 2008 website, but it was not correct. I decided to debug the program and I found out that the subtotals integers were being overflowed, because the answers to the problem indeed involved big numbers that neither 32 nor 64 bit would be enough to hold them. To solve this issue, I used &lt;a href="http://mattmccutchen.net/bigint/"&gt;Matt McCutchen's C++ Big Integer Library&lt;/a&gt; and converted my "unsigned long long" (64 bit number) to a BigUnsigned object, so that I could deal with  virtually unlimited precision integers capable of storing a large sum, which is the case of the robot in a maze. Google Treasure Hunt 2008 accepted my submission after this change.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Second problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The second problem involved downloading a zip file containing directories and text files. Our mission can be described by the following steps:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Finding each file whose relative path name matches a certain pattern&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Reading a certain line (e.g.: 1st,2nd,3rd,4th, ... depending on the pattern) which should hold a number in text format (not binary)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sum each set of numbers for each pattern (e.g. sum all numbers in the 3rd line for all *foo*.pdf path names, sum all numbers in the 5th line for all *bar*.rtf path names)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Answer: The result of multiplying all sums together (i.e.: sum1 * sum2 * ... * sumN) for all N patterns&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Well, I believe the second problem could just involve UNIX &lt;span style="font-style:italic;"&gt;shell scripting&lt;/span&gt;, but I did not want to mess with complicated expressions, filters or pipes... I decided to take a different approach from the first problem,  and writing the solution in the Ruby language, which is easy to code, read and understand, and combined it with the UNIX &lt;span style="font-style:italic;"&gt;find&lt;/span&gt; command to search for files that match a certain pattern, so I didn't have to deal with that. I realised that searching for just "*foo*.pdf" files would not be enough because the "*foo*" pattern would not match directories as required, just filenames, so many files would be ignored with such call. A complete call would be &lt;span style="font-style:italic;"&gt;find . -ipath "*foo*" -iname "*.pdf"&lt;/span&gt; so the command would retrieve both "foo/bar/x.pdf" and "bar/foo.pdf", not just the latter.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Code for the solutions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Problem 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Save the file as &lt;span style="font-style:italic;"&gt;robot.cpp&lt;/span&gt;, download and extract the &lt;a href="http://mattmccutchen.net/bigint/"&gt;bigint library&lt;/a&gt; to the same directory and compile the program with:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;g++ -Wall robot.cpp bigint/BigInteger.o bigint/BigIntegerUtils.o bigint/BigUnsigned.o bigint/BigUnsignedInABase.o -I bigint -o robot&lt;/span&gt;. You can call the program as &lt;span style="font-style:italic;"&gt;./robot 50 57&lt;/span&gt; for a 50x57 grid.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/**&lt;br /&gt; * Google Treasure Hunt 2008 - Question 1&lt;br /&gt; * by Mário Freitas (imkira at gmail dot com)&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;// standard libraries&lt;br /&gt;#include &lt;string&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;&lt;br /&gt;// support for big integers&lt;br /&gt;#include "BigInteger.hh"&lt;br /&gt;#include "BigIntegerUtils.hh"&lt;br /&gt;&lt;br /&gt;typedef BigUnsigned Counter;&lt;br /&gt;&lt;br /&gt;Counter **gMatrix;&lt;br /&gt;long gNumMatrixColumns, gNumMatrixRows;&lt;br /&gt;&lt;br /&gt;inline Counter move (int x, int y)&lt;br /&gt;{&lt;br /&gt; // number of paths already calculated?&lt;br /&gt; if (gMatrix[x-1][y-1] != Counter(0))&lt;br /&gt; {&lt;br /&gt;  // we don't need to calculate it again, we can return it&lt;br /&gt;  return gMatrix[x-1][y-1];&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // number of paths for each direction&lt;br /&gt; Counter lNumRightPaths = 0, lNumDownPaths = 0;&lt;br /&gt; &lt;br /&gt; // can it move right?&lt;br /&gt; if (x &lt; gNumMatrixColumns)&lt;br /&gt; {&lt;br /&gt;  lNumRightPaths = move(x+1, y);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; // can it move down?&lt;br /&gt; if (y &lt; gNumMatrixRows)&lt;br /&gt; {&lt;br /&gt;  lNumDownPaths = move(x, y+1);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; // remember this result for the following iterations&lt;br /&gt; gMatrix[x-1][y-1] = lNumRightPaths + lNumDownPaths;&lt;br /&gt; &lt;br /&gt; // and return it&lt;br /&gt; return gMatrix[x-1][y-1];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main (int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt; // correct command line syntax?&lt;br /&gt; if (argc != 3)&lt;br /&gt; {&lt;br /&gt;  printf("Usage: &lt;number of columns&gt; &lt;number of rows&gt;\n");&lt;br /&gt;  exit(1);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; // read number of columns and rows&lt;br /&gt; gNumMatrixColumns = strtol(argv[1], (char **)NULL, 10);&lt;br /&gt; gNumMatrixRows = strtol(argv[2], (char **)NULL, 10);&lt;br /&gt; &lt;br /&gt; // correct number of columns and rows?&lt;br /&gt; if ((gNumMatrixColumns &lt;= 0) || (gNumMatrixRows &lt;= 0))&lt;br /&gt; {&lt;br /&gt;  printf("Invalid number of columns or rows\n");&lt;br /&gt;  exit(1);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; // create the matrix&lt;br /&gt; gMatrix = new Counter*[gNumMatrixColumns];&lt;br /&gt; for (int i = 0; i &lt; gNumMatrixColumns; ++i)&lt;br /&gt; {&lt;br /&gt;  // the default constructor should set the numbers to 0&lt;br /&gt;  gMatrix[i] = new Counter[gNumMatrixRows];&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; // there is only one path from the goal cell to itself (i.e, by not moving)&lt;br /&gt; // this is used as the first stopping point for the recursive algorithm&lt;br /&gt; gMatrix[gNumMatrixColumns-1][gNumMatrixRows-1] = 1;&lt;br /&gt; &lt;br /&gt; // start at 1,1, move towards the goal and print the number of paths&lt;br /&gt; std::cout &lt;&lt; move(1, 1) &lt;&lt; std::endl;&lt;br /&gt; &lt;br /&gt; // destroy the matrix&lt;br /&gt; for (int i = 0; i &lt; gNumMatrixColumns; ++i)&lt;br /&gt; {&lt;br /&gt;  delete[] gMatrix[i];&lt;br /&gt; }&lt;br /&gt; delete[] gMatrix;&lt;br /&gt; &lt;br /&gt; exit(0);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Problem 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Save the file as &lt;span style="font-style:italic;"&gt;filesums.rb&lt;/span&gt; inside the directory that is created after extracting the zip file you downloaded from Google Treasure Hunt 2008. Change the &lt;span style="font-style:italic;"&gt;sum_patterns&lt;/span&gt; code structure to reflect the patterns and line numbers for the problem in question. Run the program by calling &lt;span style="font-style:italic;"&gt;ruby ./filesums.rb&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#! /usr/bin/ruby&lt;br /&gt;# Google Treasure Hunt 2008 - Question 2&lt;br /&gt;# by Mário Freitas (imkira at gmail dot com)&lt;br /&gt;&lt;br /&gt;# list of patterns:&lt;br /&gt;# =&gt; line: the line number where to obtain the sum&lt;br /&gt;# =&gt; find_file_pattern: the find command syntax that retrieves a list of files matching a pattern&lt;br /&gt;sum_patterns = [&lt;br /&gt;  { :line =&gt; 3, :find_file_pattern =&gt; 'find . -ipath "*foo*" -iname "*.pdf"' },&lt;br /&gt;  { :line =&gt; 5, :find_file_pattern =&gt; 'find . -ipath "*zzz*" -iname "*.rtf"' }&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;# the product is initialized to 1&lt;br /&gt;sums_product = 1&lt;br /&gt;&lt;br /&gt;# iterate each file pattern&lt;br /&gt;sum_patterns.each do |sum_pattern|&lt;br /&gt;  # sum for current file pattern is initialized to 0&lt;br /&gt;  current_sum = 0&lt;br /&gt;  &lt;br /&gt;  # find the list of files that match the current file pattern&lt;br /&gt;  IO.popen(sum_pattern[:find_file_pattern]) do |pipe|&lt;br /&gt;    &lt;br /&gt;    # read the list of files that match the current file pattern&lt;br /&gt;    file_paths = pipe.readlines&lt;br /&gt;    &lt;br /&gt;    # iterate each file&lt;br /&gt;    file_paths.each do |file_path|&lt;br /&gt;      # read the line where the sum is stored&lt;br /&gt;      some_number = IO.readlines(file_path.chomp)[sum_pattern[:line] - 1]&lt;br /&gt;      &lt;br /&gt;      # increment the sum unless the line did not exist&lt;br /&gt;      current_sum += some_number.to_i unless some_number.nil?&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  sums_product *= current_sum&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts "The product of sums is #{sums_product}"&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/6898080540985418194-5034201495599426714?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/5034201495599426714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=5034201495599426714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/5034201495599426714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/5034201495599426714'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/05/google-treasure-hunt-2008.html' title='Google Treasure Hunt 2008'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-8426762599446812119</id><published>2008-05-04T15:19:00.003+01:00</published><updated>2008-05-04T15:48:14.281+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Master&apos;s Thesis'/><category scheme='http://www.blogger.com/atom/ns#' term='Visualisation Paradigms'/><title type='text'>Master Thesis on Visualisation Paradigms for 3D Map-Based Mobile Services</title><content type='html'>Right now, I'm partially undergoing supervised practical training at &lt;a href="http://www.ndrive.com/"&gt;NDrive Navigation Systems, SA&lt;/a&gt;, and simultaneously writing my Master's Thesis with this title.&lt;br /&gt;&lt;br /&gt;The main goal of my thesis is to find a theoretical explanation to what should be the best visualisation paradigm for 3D map-based mobile maps. There are many works and surveys about this and that aspect, but there are no general theories that unify all visualisation aspects involved in all kinds of tasks maps are used for such as navigation and exploration.&lt;br /&gt;&lt;br /&gt;I'm also developing a prototype to materialise the concepts and ideas that will support my theory for 3D map-based mobile maps. The prototype runs on UNIX, Symbian OS and PocketPC/WinCE platforms using OpenGL ES 1.1 for the graphics API. I believe it will be a breakthrough in the navigation systems industry. I have to say the results are looking very promising and I'm very excited with it, although I cannot disclose anything for the time being :)&lt;br /&gt;&lt;br /&gt;It's kind of unfortunate that I only have 20 weeks to do everything alone (writing the thesis, making the prototype, an other paperwork). I wish I had more time for this...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-8426762599446812119?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/8426762599446812119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=8426762599446812119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/8426762599446812119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/8426762599446812119'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/05/master-thesis-on-visualisation.html' title='Master Thesis on Visualisation Paradigms for 3D Map-Based Mobile Services'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-265677532870719930</id><published>2008-02-21T09:25:00.004Z</published><updated>2008-02-22T09:36:11.544Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Yahoo will be Microsoft's</title><content type='html'>This is my prediction. I've been thinking about this for quite a long time, and I have enough confidence to predict that Yahoo will accept Microsoft's proposal. Why? So much has already been told out there - in many of the most highly respectable sites on the Internet and even newspapers all over the world - whose main ideas are completely opposite to each other, and therefore I have a theory of my own about the outcome of this "billion dollar game".&lt;br /&gt;Yahoo is doing like &lt;span style="font-weight:bold;"&gt;Oh come on Microsoft... you have a great chance to take us over and you won't like Google screwing us all... Maybe I should show you some signs of being interested on some "News Corp" and get a higher bid from you... Come on... I will start saying my employees will fear of being fired and dislike your proposal... I even did my best to raise our stock price while yours was dropping...&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Seriously... it's a game between both companies. I've never heard so much about Yahoo these past 2 months... I bet many kids out there never even heard about Yahoo in the first place, since we're all so much used to Google anyway... Google takes pride in what they do and I don't believe they really need Yahoo so much... Microsoft has a golden chance to enter this new market...&lt;br /&gt;More updates are sure to come!&lt;br /&gt;&lt;br /&gt;Update (22 Feb, 2008):&lt;br /&gt;Bill Gates made recently the following statements: "We have a strategy for competing in the search space that Google dominates today, that we'll pursue that we had before we made the Yahoo offer, and that we can pursue without that. It involves breakthrough engineering. We think that the combination with Yahoo would accelerate things in a very exciting way, because they do have great engineers, they have done a lot of great work. So, if you combine their work and our work, the speed at which you can innovate and get things done is just dramatically more rapid. So, it's really about the people there that want to join in and create a better search, better portal for a very broad set of customers. That's the vision that's behind saying, hey, wouldn't this be a great combination."&lt;br /&gt;Does this support my opinion that they need each other as they share a common vision and ideologies, and a same wish to fight Google "threat"?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-265677532870719930?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/265677532870719930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=265677532870719930' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/265677532870719930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/265677532870719930'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/02/yahoo-will-be-microsofts.html' title='Yahoo will be Microsoft&apos;s'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-1910638453233765591</id><published>2008-01-06T17:41:00.001Z</published><updated>2008-02-17T13:28:08.039Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='high-definition video war'/><category scheme='http://www.blogger.com/atom/ns#' term='Toshiba'/><category scheme='http://www.blogger.com/atom/ns#' term='hd dvd'/><category scheme='http://www.blogger.com/atom/ns#' term='blu-ray'/><category scheme='http://www.blogger.com/atom/ns#' term='Sony'/><title type='text'>Blu-ray did it?</title><content type='html'>The first time I heard about Blu-ray was from Sony. 2 or 3 years ago, I first heard them trying to "sell" the world a new format for high definition video, during the early stages of the Playstation 3's inception, while marketing their Blu-ray players. At the same time, Toshiba's HD DVD format looked more attractive to most people and even companies.&lt;br /&gt;Although I'm still uncertain if the format "war" is already over or not, as of the 4th of January 2008, Sony seems to have won the competition after Warner Bros' public announcement: the company will drop support for HD DVD in favor or Blu-ray. If all the other major film producers follow Warner Bros' steps, in favor of a more globalized/generalized format, what will Toshiba do?&lt;br /&gt;Can we say this war is over?&lt;br /&gt;&lt;br /&gt;Update (08 Jan, 2008):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_0wzf4r9GIwU/R4QLh3GhUiI/AAAAAAAAAA0/sTLAdTMr_Zk/s1600-h/dominoes.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_0wzf4r9GIwU/R4QLh3GhUiI/AAAAAAAAAA0/sTLAdTMr_Zk/s320/dominoes.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5153256549973578274" /&gt;&lt;/a&gt;&lt;br /&gt;It was surprising for me how quickly this happened, but as of today Paramount Pictures, another major film production company, announced in the Financial Times that it is "poised to drop support of the HD DVD", in favor of the Blu-ray format, 4 days after Warner Bros announced their decision. It's unquestionable that Paramount Pictures made up their mind, in order to compete in the market with the same standards, even after once having signed an exclusivity agreement with the HD-DVD consortium, dropping Blu-Ray format.&lt;br /&gt;More updates are sure to come!&lt;br /&gt;&lt;br /&gt;Update (10 Jan, 2008):&lt;br /&gt;According to &lt;a href="http://www.variety.com/article/VR1117978760.html?categoryid=20&amp;cs=1"&gt;Variety&lt;/a&gt;, it seems that Universal's exclusivity contract to backing HD-DVD format has ended. This and the fact that Paramount had found a clause in their contract with the HD-DVD consortium that allows them to escape the exclusivity obligation, could mean that the outcome of the "high definition video format war" may be already as good as over, since the Blu-ray backers are already too much and too powerful.&lt;br /&gt;&lt;br /&gt;Update (17 Feb, 2008):&lt;br /&gt;The death of HD-DVD was made official, after Wal-Mart decided it would no longer carry HD-DVD media. Although it seems that the winner of this "battle" was Sony, it is still questionable wether Blu-Ray will be successful or not...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-1910638453233765591?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/1910638453233765591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=1910638453233765591' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/1910638453233765591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/1910638453233765591'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/01/blu-ray-did-it.html' title='Blu-ray did it?'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_0wzf4r9GIwU/R4QLh3GhUiI/AAAAAAAAAA0/sTLAdTMr_Zk/s72-c/dominoes.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-9035000377843726038</id><published>2008-01-04T22:15:00.000Z</published><updated>2008-01-05T00:22:25.550Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='maturity'/><category scheme='http://www.blogger.com/atom/ns#' term='internships'/><category scheme='http://www.blogger.com/atom/ns#' term='recruiting'/><title type='text'>Recruiting processes for internships at Portugal</title><content type='html'>I don't know much about the rest of the world concerning internships for university students (though I'm a bit curious about it) but here at Europe, and Portugal in particular, most (?) "integrated master" programmes in Engineering specify a requirement for students before they can get their master's degree: to write a thesis or to apply to a company/organization's project and make an internship. When taking the latter into consideration, the "funny" part comes when the companies implement their respective recruiting process, in order to recruit students for internships. That's what I'm going to talk about, here, after what I've experienced, and after what I've seen happening with friends and colleagues of mine.&lt;br /&gt;Some of the things that happened were simply ridiculous, others ironic, most of them just regular, and just one of them I can call it simply "splendid". Obviously, I will not spoil any companies' names here, but rather draw out some conclusions and personal opinions about the maturity and efficiency of the recruiting processes and also take the companies' reputation into account.&lt;br /&gt;All started a month before (If I'm not mistaken) the list of projects for internships came out, when there were already a couple of companies that were trying to recruit students for internship programmes. From the beginning, the first of those companies was very professional: they sent several emails to students, made phone calls, sent letters, offered flight tickets to Lisbon and payed lodgings expenses for students who went there to apply for an exam, in order to be able to join the internship programme of that company. The students that couldn't pass the test also heard the "why" and "what could be better" from the persons who interviewed them. I admit this was one of the companies that was highly regarded as very professional, and was far much better than my expectations. At the same time, there was also a huge company (also as in famous) whose recruiting process standards and maturity levels didn't live up too much for my expectations: first they didn't personally contact the students to announce themselves like "We're from _company here_"; second, they made their recruiting process solely based on the students' resumes, this means no interviews, no tests, nothing; and, finally, they didn't spend 15 minutes writing an email to the students who were not selected. Absolutely ridiculous. The last one of the companies that started recruiting a little before the lists came out, made a big show off at the presentation to the students, as it is regarded as a very powerful international company. Students were happy to think they had the chance to apply for that company, but that company made a big mistake in my opinion: they pressed the students too much. They demanded a YES/NO from the students who were selected by them and asked them to immediately start working 1 month before the internship is supposed to initiate, when students are preparing for exams. To the students who were refused, they sent a poorly written email stating something like "I'm sorry you were not huuuuh.... selected. Sincerely, _signature here_". The students asked them for a delay, but the company said that they were going on Christmas vacations and they couldn't wait any longer (1 week before the lists with all the companies came out). Most of the students said no, and few said yes. The 3rd of January, 2008 I found out they are still looking for students. After watching most of my friends saying "NO", who happen to be great students and very competent in my opinion, I doubt that this "technique" that the company enforced had any positive effect at all! Guess what? Most of  those students already selected the company where they're going to work, which does not have the same reputation but shows much more expertise than these so called "big international companies". There were some companies who sent emails to the students stating something like "You'll have to be present at the interview at 9 o'clock AM at _Cú-de-Judas_" instead of asking them if that's fine for them by phone, since email may not always be the fastest way to contact someone during the Christmas' and New Year's period. I don't know the best equivalent expression for "Cú-de-Judas" (in Portuguese) but it's like a place/location no one ever heard of, not even the postman knows where it is (as in far and unknown)!&lt;br /&gt;All of this just to say that (just my opinion), from what I could experience, the "big" and "famous" factors for companies do not actually mean they employ a professional recruiting process. It's not a matter of 1+1=2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-9035000377843726038?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/9035000377843726038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=9035000377843726038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/9035000377843726038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/9035000377843726038'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/01/recruiting-processes-for-internships-at.html' title='Recruiting processes for internships at Portugal'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-470167405046366963</id><published>2008-01-04T00:25:00.000Z</published><updated>2008-01-04T13:44:08.941Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><title type='text'>"The Top 10 Reasons:  The Ruby Programming Language : Sucks!"</title><content type='html'>Today, while I was surfing the web, I came across one of the most interesting presentations I ever found, as far as I can remember (don't trust my memory, please). Not just because it's about the Ruby programming language, which I really like very much, but also due to the design and sarcasm that was put into the presentation.&lt;br /&gt;The presentation is from RubyConf 2003, by Yukihiro Matsumoto (a.k.a "Matz") - the creator of Ruby - and can be found at slideshare:&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px;text-align:left" id="__ss_11281"&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=the-top-10-reasons-the-ruby-programming-language-sucks-9132"/&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=the-top-10-reasons-the-ruby-programming-language-sucks-9132" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/&gt;&lt;/a&gt; | &lt;a href="http://www.slideshare.net/vishnu/the-top-10-reasons-the-ruby-programming-language-sucks" title="View 'The Top 10 Reasons The Ruby Programming Language Sucks' on SlideShare"&gt;View&lt;/a&gt; | &lt;a href="http://www.slideshare.net/upload"&gt;Upload your own&lt;/a&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/6898080540985418194-470167405046366963?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/470167405046366963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=470167405046366963' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/470167405046366963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/470167405046366963'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2008/01/top-10-reasons-ruby-programming.html' title='&quot;The Top 10 Reasons:  The Ruby Programming Language : Sucks!&quot;'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-6128324146788225282</id><published>2007-12-15T21:04:00.000Z</published><updated>2008-01-04T13:44:37.881Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='user interface design'/><title type='text'>"Transfer time is less than 109 minutes with a 28.8 modem"</title><content type='html'>This was the message I was presented with, when I was sending a file to a friend of mine through Microsoft Messenger (v6.0.3 for Mac). This kind of messages is what I consider to be an interesting point of discussion about how interfaces are designed and often forgotten.&lt;br /&gt;Of course this kind of message was always there, either in this application or in another, but the fact that I never payed too much attention to it makes me think that this kind of message was never relevant in the first place (at least for me). It would be considerably more interesting if the information was appropriate and adapted to the current situation, i.e., if it wants to go further and guess how much time it will take to perform a file transfer, at least should do it by using any of the following strategies (in my opinion):&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;"Learning" the connection speed from past transfers;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Simply calculating the speed based on connection settings specified by the user (like many video/audio streaming or P2P software);&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Asking" the operating system how fast is the connection speed;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;By giving some sort of estimation using a connection speed as a base for comparison.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Messenger decided to follow the last option, and unfortunately either the persons who did it, already understood how useful that message was that they even forgot it is still there... or they still use 28.8 modems in 2007...&lt;br /&gt;&lt;br /&gt;Of course this was only a starting point of discussion, and many follow this example. There are many software applications nowadays that are very feature-rich but so feature-fat that developers often forget about the user interface designing challenges and issues. Developers often focus on how their software is so feature-rich that if they applied a GUI profiler to analyze the user interaction with their software, like web developers do with web loggers, they would notice how many mistakes are performed and how much (big) the part of the software that is completely unused due to the lack of interest and effort on how interfaces are designed.&lt;br /&gt;Some people say software should be feature-rich, if it is to be useful; others say that it should be simple, and easy to use; and others, like myself, think that it should be a mix of both worlds: it should be feature-rich, yet hiding all that is unnecessary for the current condition of use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-6128324146788225282?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/6128324146788225282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=6128324146788225282' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/6128324146788225282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/6128324146788225282'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2007/12/transfer-time-is-less-than-109-minutes.html' title='&quot;Transfer time is less than 109 minutes with a 28.8 modem&quot;'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-5557035023673679296</id><published>2007-12-09T23:10:00.000Z</published><updated>2008-01-04T13:45:00.210Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='data mining'/><title type='text'>Diabetes classification</title><content type='html'>The purpose of my current assignment at university is to correctly find an automatic way to perform a diagnosis based on some patient attributes and test results. The field of &lt;span style="font-style:italic;"&gt;Knowledge Discovery and Data Mining&lt;/span&gt; has always fascinated me namely the challenges that are imposed to us when we decide to take an analysis like this first of mine.&lt;br /&gt;The diagnosis is about &lt;span style="font-weight:bold;"&gt;Diabetes Mellitus&lt;/span&gt;, a common disease which affects millions of people in the whole world. Much is already known about it and much is already scientifically documented by the &lt;span style="font-style:italic;"&gt;World Health Organization&lt;/span&gt;, so there's no big deal what we are to discover except the fun we get by looking at the results.&lt;br /&gt;&lt;br /&gt;The most interesting rule I got because of its simplicity, and the one I would like to share with you, may be taken as a "warning" (or a joke if you wish) and I can only speculate if the rule is true or not. The rule states the following:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;If your Body Mass Index (BMI in SI units) is higher than 27.3 and you're at least 29 then you are diabetes positive.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For reference, the formula for BMI is simply to divide (your weight (kg)) for your (height (m) raised to the power of 2)). For instance, if you are 1.7m and 65kg the result should be approximately 22.49.&lt;br /&gt;Additionally, the table that maps ranges to categories is the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Category&lt;/span&gt; - &lt;span style="font-weight:bold;"&gt;BMI range&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Starvation&lt;/span&gt;- less than 15&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Underweight&lt;/span&gt; - from 15 to 18.5&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Normal&lt;/span&gt; - from 18.5 to 25&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Overweight&lt;/span&gt; - from 25 to 30&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Obese&lt;/span&gt; - from 30 to 40&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Morbidly Obese&lt;/span&gt; - greater than 40&lt;br /&gt;&lt;br /&gt;Of course this rule is very simple, and you shouldn't take it seriously, of course. &lt;br /&gt;It is interesting however that it yielded an accuracy of 70% in my data set and the only thing I can speculate is that it may be revelatory of a pre-diabetic state or even a natural tendency for most (?) patients.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-5557035023673679296?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/5557035023673679296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=5557035023673679296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/5557035023673679296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/5557035023673679296'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2007/12/diabetes-classification.html' title='Diabetes classification'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-3993976567330858436</id><published>2007-11-19T22:57:00.000Z</published><updated>2008-01-04T13:45:28.560Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>24 hours Web Development on Rails</title><content type='html'>I'm currently attending the &lt;span style="font-style:italic;"&gt;Masters Degree in Informatics and Computing Engineering&lt;/span&gt; at &lt;a href="http://www.fe.up.pt"&gt;FEUP&lt;/a&gt; and there's an amazing thing (NOT really now that I think about it again...) that I have to do preferably until the 23th of this month: developing a so called "home page".&lt;br /&gt;I'm going to use the &lt;a href="http://www.rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt;' Agile Web Development approach for the time being and I'll try to get everything up until there... if not, then I will use my &lt;span style="font-weight:bold;"&gt;trump card&lt;/span&gt;, which in portuguese language would be called "desenrascanço". I would really like to be able to translate this word but I don't really don't know that... sorry :) I already have something for the web page like the visual design, so... still much work left to do :)&lt;br /&gt;More updates, about my crusade against time dealing with Rails and making a web page in 24 hours, coming soon...&lt;br /&gt;&lt;br /&gt;Update at 22:06 (+1 day)&lt;br /&gt;Well, it seems I got something working. One of the challenges was localization support, since I will be supporting 3 languages. I didn't spend too much time looking for rails plugins that provide localization support, but the ad hoc approach looked like a charm :) I pretty much used filters which select the correct language texts based on the current language.&lt;br /&gt;Gotta go! I have a lot of localization still left to do!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-3993976567330858436?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/3993976567330858436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=3993976567330858436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/3993976567330858436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/3993976567330858436'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2007/11/24-hours-web-development-on-rails.html' title='24 hours Web Development on Rails'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-1271990071475424144</id><published>2007-11-09T23:27:00.000Z</published><updated>2007-11-15T14:10:42.424Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='accessibility'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><title type='text'>DSAI 2007 - Software Development for Enhancing Accessibility and Fighting Info-exclusion</title><content type='html'>Today, I had the best experience of my life about being aware of a software quality attribute, often forgotten or not simply taken into account when developing or planning software, called &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Accessibility&lt;/span&gt;. I would even subjectively speculate that, although Accessibility is a subgroup of a larger group called &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Usability&lt;/span&gt;, the former one is so vast and complex that may have a life of its own.&lt;div&gt;I was invited to participate in the organization of a workshop and its presentation to address the problem of Usability and Accessibility of mobile communication/navigation devices.&lt;/div&gt;&lt;div&gt;Instead of describing in full detail the ideas/issues that came from brainstorming and many of the concepts which I've acquired by participating in this event, I will just present a list of them along with a brief comment for each:&lt;/div&gt;&lt;ul id=""&gt;&lt;li&gt; Always consider an &lt;span class="Apple-style-span" style="font-style: italic;"&gt;inclusive-design&lt;/span&gt; approach, i.e., if you consider your software product will have to work with all kinds of people with disabilities (e.g., visual impaired, paraplegic,  etc.), your product will naturally perform superb with all kinds of users, in terms of user interaction and experience;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Even people who don't have any kind of disabilities can be often considered temporarily in that situation (e.g., imagine the scenario where you're driving a car: normally you are naturally less able to talk and listen to the other passengers in the car; your vision orientation is often directed to the front;  you cannot often take your feet off the car's brake or accelerator or remove one or two hands from the steering wheel... In this situation, what's the difference between a person without and a person with disabilities? Almost none);&lt;/li&gt;&lt;li&gt;Allow the user to "blindly" interact with the navigation device and the reality that is presented to him, without even having to physically touch the device, by using the screen or hardware buttons (e.g., using speech recognition to instruct the device or ask from it information about the reality);&lt;/li&gt;&lt;li&gt;When visual interaction is desired, it is of extreme importance to correctly but also easily have a matching between what can be observed from the reality and from the device display;&lt;/li&gt;&lt;li&gt;and many other ideas/problems, so I placed the presentation online, for you to enjoy it :)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="width:425px;text-align:left" id="__ss_161892"&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=usability-accessibility-of-mobile-mobile-communicationnavigation-devices-1194783613583282-5"/&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=usability-accessibility-of-mobile-mobile-communicationnavigation-devices-1194783613583282-5" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&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/6898080540985418194-1271990071475424144?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/1271990071475424144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=1271990071475424144' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/1271990071475424144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/1271990071475424144'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2007/11/dsai-2007-development-for-enhancing.html' title='DSAI 2007 - Software Development for Enhancing Accessibility and Fighting Info-exclusion'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898080540985418194.post-8205033704650792394</id><published>2007-11-05T00:47:00.000Z</published><updated>2008-01-04T13:45:49.558Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='computer graphics'/><title type='text'>The Big World Syndrome</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://quimby.gnus.org/circus/jukebox.php?image=display.jpg&amp;amp;group=Joe%20Jackson&amp;amp;album=Big%20World"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://quimby.gnus.org/circus/jukebox.php?image=display.jpg&amp;amp;group=Joe%20Jackson&amp;amp;album=Big%20World" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is actually the worst title I could come up with for my first post in this blog.&lt;br /&gt;Anyway, these past months I've been struggling to develop some decent and acceptable 3D computer graphics for embedded devices such as PDAs and PNAVs (Personal NAVigation devices) to be implemented in automobile navigation systems. Although there are not so many APIs available for this purpose (and even if there were!) there are so many challenges one has to be aware of and address, when developing applications for this kind of devices. For instance, there's no such thing as a FPU (Floating Point Unit) in most of them, which leaves us apparently with only one option, if we are to deal with high precision numbers for calculations: software floating point support. Unless you are OK with extremely low frame refresh rates, actually this is so slow that, in most cases, floating point software support is not an option. Other issues also arise from using this kind of devices, which are not relevant to this post or that I'm not (fortunately) still aware of.&lt;br /&gt;The problem I've been addressing lately is what I like to call it &lt;span style="font-weight: bold;"&gt;The Big World Syndrome&lt;/span&gt;. If you want to get a  big picture of this world, I invite you to close your eyes and imagine it for a while. Now open them... or you won't be able to read the rest of this post :) Now, think about this... If you are to represent everything in the world with an acceptable (high) precision, i.e. with an error not easily noticeable by the human eye, using very precision-limited numbers which are enough to represent the whole world but not to accommodate for all the calculations you have to perform until you reach the final result... you will eventually arrive at the same conclusion I did: that the world is to big to represent, using a "naive" approach. I'm still thinking about this issue, and I haven't still arrived at a final solution, but I'm addressing it using a little bit similar approach that has been followed by other projects like &lt;a href="http://www.geovrml.org/"&gt;GeoVRML&lt;/a&gt;. I've been influenced by some of the ideas and came up with different ones. It basically defines a way to declare coordinates for the world, using not only one global coordinate system but many of them using relative coordinates. Assuming the fact that when you're looking closer at a piece of the world map, you want to view it in higher detail, using these local coordinate systems you will get much higher precision.&lt;br /&gt;Of course this is just the tip of the iceberg since we will have to deal with some of the trade-offs involved.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6898080540985418194-8205033704650792394?l=zawaarudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zawaarudo.blogspot.com/feeds/8205033704650792394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6898080540985418194&amp;postID=8205033704650792394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/8205033704650792394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898080540985418194/posts/default/8205033704650792394'/><link rel='alternate' type='text/html' href='http://zawaarudo.blogspot.com/2007/11/big-world-syndrome.html' title='The Big World Syndrome'/><author><name>imkira</name><uri>http://www.blogger.com/profile/16795440823590464255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
