<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>bugflux.org &#187; en</title>
	<atom:link href="http://bugflux.org/category/blog/en/feed/" rel="self" type="application/rss+xml" />
	<link>http://bugflux.org</link>
	<description>André Prata, nDray</description>
	<lastBuildDate>Fri, 16 Sep 2011 07:54:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>pacman: like, +1, upvote, digg, &#8230;</title>
		<link>http://bugflux.org/blog/1538:pacman-like-1-upvote-digg/</link>
		<comments>http://bugflux.org/blog/1538:pacman-like-1-upvote-digg/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 16:43:18 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1538</guid>
		<description><![CDATA[i have been a quite happy archlinux user for a few years now. one of the reasons is surely pacman and, today, i have turned a little bit happier about it. quite often, when working on a project, i have &#8230; <a href="http://bugflux.org/blog/1538:pacman-like-1-upvote-digg/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>i have been a quite happy archlinux user for a few years now. one of the reasons is surely pacman and, today, i have turned a little bit happier about it.</p>
<p>quite often, when working on a project, i have to install several packages and libraries that, most certainly, i&#8217;ll never use again after the project is done, so i need to remember to remove them. what i usually did was:</p>
<ol>
<li>install the packages as dependencies (<strong>pacman -S &#8211;asdeps</strong>) and then,</li>
<li>later, when project is done, check my database for all installed packages that depended on no other explicitly installed package (<strong>pacman -Qdt</strong>).</li>
</ol>
<p><span class="Apple-style-span" style="color: #444444; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px;">the thing is that, over time, and many simultaneous projects, the listing gets crowded, and mixed up with optional dependencies for packages that i use (i install them as dependencies so they get removed when i remove the main package (<strong>pacman -Rncs</strong>)).</span></p>
<p>what i needed was a feature to &#8220;mark this installation with a reason: this project&#8221;. no, pacman does not support that, afaik. but it does support something perhaps better: meta-packages! for example, for the <a title="odtone @ helios.av.it.pt" href="http://helios.av.it.pt/embedded/odtone/index.html">odtone</a> project (my thesis depends on), i created the <strong>odtone-meta</strong> package that depends on all the packages that are needed, and has no particular source! thus, all i need to do is install the package, all dependencies are managed automatically! the PKGBUILD:</p>
<pre class="brush: bash; title: ; notranslate">pkgname=odtone-meta
pkgver=001
pkgrel=1
pkgdesc=&quot;This package depends on all necessary packages for odtone&quot;
arch=('any')
url=&quot;http://helios.av.it.pt/embedded/odtone/index.html&quot;
license=('LGPL')
depends=('boost' 'boost-libs' 'rasqal' 'raptor' 'redland' 'redland-storage-sqlite')</pre>
<p>this way, when the project is finished, i just remove the odtone-meta package, and everything that isn&#8217;t a dependency for another package is just removed!</p>
<p>neat!!</p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1538:pacman-like-1-upvote-digg/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>unintended (dis)honesty</title>
		<link>http://bugflux.org/blog/1528:unintended-dishonesty/</link>
		<comments>http://bugflux.org/blog/1528:unintended-dishonesty/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 16:42:05 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1528</guid>
		<description><![CDATA[this morning i slipped to my boss/coordinator/teacher that i don&#8217;t have aspirations of going too far in my professional career. well, given some thought, that&#8217;s sort of a lie. what i usually mean by this is that i don&#8217;t want &#8230; <a href="http://bugflux.org/blog/1528:unintended-dishonesty/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>this morning i slipped to my <a title="diogogomes.com" href="http://diogogomes.com/" target="_blank">boss/coordinator/teacher</a> that i don&#8217;t have aspirations of going too far in my professional career. well, given some thought, that&#8217;s sort of a lie. what i usually mean by this is that i don&#8217;t want to be the head of something too large to handle on the nine to five schedule! for as long as i&#8217;ve known myself, i always felt great for being complimented. i often get that for being good at what i do, so i&#8217;ll keep trying!</p>
<p>for the next &#8220;year&#8221;, the big thesis road, my mind is more or less settled on working on top of <a title="odtone @ atnog.av.it.pt" href="http://atnog.av.it.pt/projects/odtone" target="_blank">odtone</a>. maybe you laptop-owner-linux-user will read my name in a few manpages in the future! =)</p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1528:unintended-dishonesty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>my own hdr tutorial</title>
		<link>http://bugflux.org/blog/en/1523:my-own-hdr-tutorial/</link>
		<comments>http://bugflux.org/blog/en/1523:my-own-hdr-tutorial/#comments</comments>
		<pubDate>Sat, 11 Jun 2011 11:01:05 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[en]]></category>
		<category><![CDATA[photography]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1523</guid>
		<description><![CDATA[in the past, before owning a camera, i&#8217;d seen some samples of hdr art. everyone likes it, there&#8217;s something about all that fake colors that makes us dream. well, but it seemed a hard and tough result to achieve, i &#8230; <a href="http://bugflux.org/blog/en/1523:my-own-hdr-tutorial/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>in the past, before owning a camera, i&#8217;d seen some samples of <a title="hdr ppol @ flickr.com" href="http://www.flickr.com/groups/hdr/pool/">hdr art</a>. everyone likes it, there&#8217;s something about all that fake colors that makes us dream.</p>
<p>well, but it seemed a hard and tough result to achieve, i had read some tutorials for photoshop and gimp, and it looked like a pain in the arse. well, not anymore. i&#8217;m going to guide you through a few easy steps in order to achieve those amazing results!<span id="more-1523"></span></p>
<h2>step one:</h2>
<p>get luminance hdr: <a href="http://qtpfsgui.sourceforge.net/">http://qtpfsgui.sourceforge.net/</a></p>
<h2>step two:</h2>
<p>use it!</p>
<h2>result:</h2>
<p>this is <a title="summer rise @ flickr.com" href="http://www.flickr.com/photos/bugflux/5820870840/in/photostream/lightbox/">my first experience</a>. i barely looked in the viewfinder, i just downloaded luminance hdr and ran out to get this scene. one of the main reasons i didn&#8217;t get the d3100 instead of this d7000 was the stupid absence of automatic bracketing&#8230; even at 5fps the scene, or my hand, moves, so having to change the exposure automatically and align the images must be really boring&#8230; yeah, i don&#8217;t own a tripod, yet. neither i would carry it at all times, even if i had&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/en/1523:my-own-hdr-tutorial/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>wohoa, bada gets phonegap!</title>
		<link>http://bugflux.org/blog/1510:wohoa-bada-gets-phonegap/</link>
		<comments>http://bugflux.org/blog/1510:wohoa-bada-gets-phonegap/#comments</comments>
		<pubDate>Mon, 02 May 2011 22:17:57 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[science]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1510</guid>
		<description><![CDATA[nice!! https://github.com/phonegap/phonegap/tree/master/Bada]]></description>
			<content:encoded><![CDATA[<p>nice!!</p>
<p><a href="https://github.com/phonegap/phonegap/tree/master/Bada">https://github.com/phonegap/phonegap/tree/master/Bada</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1510:wohoa-bada-gets-phonegap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>but not for long</title>
		<link>http://bugflux.org/blog/1505:but-not-for-long/</link>
		<comments>http://bugflux.org/blog/1505:but-not-for-long/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 21:45:16 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[photography]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1505</guid>
		<description><![CDATA[it was just a few days ago that i complained about not being able to spend big to get big. well, it&#8217;s been about 6 years now, and i finally bought a real camera. browsing for prices this weekend i &#8230; <a href="http://bugflux.org/blog/1505:but-not-for-long/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://bugflux.org/wp/wp-content/uploads/2011/03/iam.png"><img class="aligncenter size-medium wp-image-1507" title="iam" src="http://bugflux.org/wp/wp-content/uploads/2011/03/iam-300x45.png" alt="" width="300" height="45" /></a></p>
<p>it was just <a title="stuck" href="/?p=1499">a few days ago</a> that i complained about not being able to spend big to get big. well, it&#8217;s been about 6 years now, and i finally bought a real camera. browsing for prices this weekend i ended up on the mediamarkt.pt shitty website, which advertised a sale for today: no vat! i couldn&#8217;t resist, it had to be now. and it was. and i&#8217;m glad!</p>
<p>23%, thanks jose socrates, means that i bought the d7000 + 18-105mm kit, and get a few hundred bucks left. these will be spent there on a 35mm f/1.8, plus a memory card and we&#8217;ll see what else. probably a bag!</p>
<p>i didn&#8217;t want the 18-105 anyway, i don&#8217;t fancy the plastic bayonet, but no body-only option was available. i take it as a good thing, though, being forced to buy a general purpose zoom lens. buying just the 35mm could be a bad option since i don&#8217;t want to spend any more money on this any time soon. besides the card and the bag, i still need a polarizing and nd filter, and a tripod, and i&#8217;m done for years to come!</p>
<p>many thanks, unknowingly, go to <a title="kenrockwell.com" href="http://kenrockwell.com/" target="_blank">ken rockwell</a> and <a title="florian.freundt.org" href="http://florian.freundt.org/" target="_blank">florian freundt</a>! of course, <a title="dpreview.com" href="http://dpreview.com/" target="_blank">dpreview</a> as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1505:but-not-for-long/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>stuck</title>
		<link>http://bugflux.org/blog/en/1499:stuck/</link>
		<comments>http://bugflux.org/blog/en/1499:stuck/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 10:20:59 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[en]]></category>
		<category><![CDATA[economy]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[psicology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1499</guid>
		<description><![CDATA[for a long time i have assumed, as one of my most best kept qualities, that i&#8217;m capable of deferring gratification. well, i&#8217;m certainly capable of it, but i actually thought that it was an internal wiring of my decisions! &#8230; <a href="http://bugflux.org/blog/en/1499:stuck/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/andrewgrill/3931839695/"><img class="alignleft" title="derren brown stuck" src="http://bugflux.org/wp/wp-content/uploads/2011/03/derren-brown-stuck-300x222.jpg" alt="" width="300" height="222" /></a>for a long time i have assumed, as one of my most best kept qualities, that i&#8217;m capable of deferring gratification. well, i&#8217;m certainly capable of it, but i actually thought that it was an internal wiring of my decisions! :p</p>
<p>recently, though, i&#8217;ve come to think that this is perhaps not the case. i have something wired, but it no longer looks like delayed gratification.</p>
<p>it behaves more like a disappointment paralysis!<span id="more-1499"></span></p>
<p>in a sentence, i freeze the desire of applying large investments on new things that i&#8217;ve been dreaming for years now, but i&#8217;m very keen on the idea of investing those same volumes for others. it means that i don&#8217;t care about the value involved, just as long as i don&#8217;t end up knowing that it was a bad move! fear of failure, huh?</p>
<p>well, it&#8217;s still a part of me, and it&#8217;s probably still a good thing, getting me here so far, but!</p>
<p>it sucks!!</p>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/en/1499:stuck/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>all work, no play</title>
		<link>http://bugflux.org/blog/1418:all-work-no-play/</link>
		<comments>http://bugflux.org/blog/1418:all-work-no-play/#comments</comments>
		<pubDate>Sat, 13 Nov 2010 14:49:09 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1418</guid>
		<description><![CDATA[i finally went around buying a new computer. i actually waited a couple of days to start writing this in the new laptop and, my god, this keyboard is an absolute delight to type on&#8230; i scanned the market a &#8230; <a href="http://bugflux.org/blog/1418:all-work-no-play/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>i finally went around buying a new computer. i actually waited a couple of days to start writing this in the new laptop and, my god, this keyboard is an absolute delight to type on&#8230;</p>
<p>i scanned the market a lot, as always. at first i was hoping to buy a <a title="macbook pro @ apple.com" href="http://www.apple.com/macbookpro/" target="_blank">macbook pro</a>. the pros were battery life, operating system, and good design/construction. the problem is that, more than that, i always look for a good performance/cost compromise. current 13&#8221; mbps aren&#8217;t the case, and i&#8217;d have to wait more than a couple more months for a then-outdated spec list.<span id="more-1418"></span></p>
<p>so, having crossed macbooks off the list, i started looking everywhere else, even leaving <a title="laptop reliability @ gizmodo.com" href="http://gizmodo.com/5406415/laptop-reliability-study-asus-and-toshiba-come-out-on-top" target="_blank">brand prejudice</a> aside. i was very glad to read about the new <a title="new dell studio xps @ dell.com" href="http://www.dell.com/us/p/xps-14/pd.aspx" target="_blank">dell xps powerhouses</a>. i wanted the 14 incher, but then, as they were (and still are) taking too long to arrive to portugal, i gave the laptop a lot of thought and ended giving up on it. (and it was actually pretty difficult to get in touch with portuguese dell to find out. i couldn&#8217;t find such information on almost 20 minutes of calls). it just wasn&#8217;t right for my present/future concerns.</p>
<p>why? i started giving less and less importance to graphics and multimedia capabilities to prefer mobility and business-oriented service. that&#8217;s when i put the <a title="portégé r700 @ toshiba.com" href="http://us.toshiba.com/computers/laptops/portege/R700" target="_blank">toshiba r700</a> and the <a title="elitebook 8440p @ hp.com" href="http://h10010.www1.hp.com/wwpc/uk/en/sm/WF06b/321957-321957-64295-3955549-3955549-4095872-4156585.html" target="_blank">hp elitebook 8440p</a> on the table. i&#8217;m now typing on the latter, due to the first being slightly less spec&#8217;ed for a higher price, although it tops this one easily in the mobility department.</p>
<p>this laptop is the absolute category winner. what i needed to replace my old one, now soon-to-be stationed back home, was a bump in memory, storage and processor speed. this laptop provides all that on top of an excellent accessory list. it is a 4-thread (2-core) <a title="core i7 620m @ intel.com" href="http://ark.intel.com/Product.aspx?id=43560" target="_blank">620m intel processor</a>, an almost outdated <a title="nvs @ nvidia.com" href="http://www.nvidia.com/object/nvs_techspecs.html" target="_blank">nvs 3100</a> cuda enabled nvidia graphics card, <a title="momentus xt @ seagate.com" href="http://www.seagate.com/www/en-us/products/laptops/laptop-hdd" target="_blank">320gb momentus xt</a> hybrid drive (home upgrade), 4gb ram. all of this on top of a perfectly linux compatible docking station. at the end the boxes went for almost as much as i had paid for my previous <a title="a8js @ asus.com" href="http://www.asus.com/product.aspx?P_ID=pNLoBhyc0e3u6osr" target="_blank">a8js</a>. it&#8217;s not just the performance increase, it&#8217;s the service quality:</p>
<p>a nicely rugged laptop. the aluminum feels cold and solid. the laptop does feel a bit light for what it looks like, but it&#8217;s by no means light, it is almost as heavy as my previous one, and almost doubles the r700&#8242;s mark. not that i care. besides the solid feel, i am entitled to a 3-year (battery included!) next business day on site repairs with toll-free 24&#215;7 phone support. <span style="text-decoration: line-through;">this is not a <a title="boston-power.com" href="http://www.boston-power.com/" target="_blank">boston technology</a> battery (i guess, i have to check the papers more carefully), so the warranty is only one year.<br />
</span></p>
<p>i had only troubles trying to boot archlinux from a pen, the bios would freeze. that was with a dd&#8217;ed hybrid image. it worked when i flashed the stick with universal usb installer, so i might just be headed for a <a title="bugs @ archlinux.org" href="https://bugs.archlinux.org/" target="_blank">flyspray bug report</a>.</p>
<p>many people whined about this touchpad. it is not a good one, it&#8217;s small and a bit too much sunk, and i can&#8217;t two-finger-scroll in linux, though it is possible in windows. the buttons are hinged. i didn&#8217;t even know what that meant until i clicked them, but i don&#8217;t see why that&#8217;s bad, i actually like it. the point-stick (or clitoris, as it is more widely known) isn&#8217;t very much usable for me, and it sometimes gets in the way of typing, but that could be just me.</p>
<p>the keys have a _very_ good response, a long and solid stroke, but with a smooth feeling. this is a very good keyboard and though i haven&#8217;t used a thinkpad&#8217;s before, i think they don&#8217;t provide the smooth feeling with the solid stroke combo. this is really nice. i&#8217;m portuguese, but i could only get a decent deal on this with a gbr layout. not that i care, it might actually help me work, and so far didn&#8217;t get in the way of typing with the portuguese layout.</p>
<p>battery-life-wise, i have been writing and browsing for a almost an hour with low brightness and a powersave cpu frequency governor (booted and browsed a few minutes with ondemand and maximum brightness), and the battery is now around 70%. it&#8217;s not spectacular, but it&#8217;s more than i could ever expect from my previous laptop, and i will use it mostly as a power failure backup mechanism, so that&#8217;s a good mark. (mind that the newly installed hard-drive drains a few more watts than the original momentus shipped inside).</p>
<p>i can&#8217;t tell if the momentus xt is paying its dues. some applications do feel faster to go up, but the new processor and memory coupled with an anyway 7200rpm hard drive certainly make the difference compared to the previous machine.</p>
<p><strong>edit:</strong></p>
<p>sorry, i forgot to mention the keyboard flex&#8230; oh, wait: no, i didn&#8217;t!</p>
<p><strong>edit 2:</strong></p>
<p>this _is_ the hp long life 6 cell 51 whr li-ion battery! so yes: boston technology, 3 year warranty. boy, am i glad/lucky!!</p>
<p><strong>a couple of things i did forget to mention:</strong></p>
<p>this momentus xt is fairly noisy. i haven&#8217;t had laptop with a 7200rpm before, so i&#8217;m not sure if this was true for the shipped drive as well.</p>
<p>but, most important, the screen. the contrast sucks, there&#8217;s no other way to put it. it can&#8217;t be used for image/video work. it isn&#8217;t very bright and the colors might surprise you in the output. but the truth is that a bad matte screen is easily better for me than a reasonable glossy one. i see no reflections here, and this is a very good point on this screen.</p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1418:all-work-no-play/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sign here, here, and here</title>
		<link>http://bugflux.org/blog/1412:sign-here-here-and-here/</link>
		<comments>http://bugflux.org/blog/1412:sign-here-here-and-here/#comments</comments>
		<pubDate>Sat, 30 Oct 2010 20:15:19 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1412</guid>
		<description><![CDATA[a few days ago i sold my soul to the institute of telecommunications, here in aveiro. this means a couple of months of android, for starters. i remember saying something about how stupidly android handles applications, compared to bada. well, &#8230; <a href="http://bugflux.org/blog/1412:sign-here-here-and-here/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>a few days ago i sold my soul to the <a title="it.pt" href="http://www.it.pt/" target="_self">institute of telecommunications</a>, here in aveiro. this means a couple of months of android, for starters. i remember saying something about how stupidly android handles applications, compared to bada. well, yesterday i was reading some stuff about it and, my god, this all makes a whole lot of sense to me. it&#8217;s a little different approach to the concept of applications. android might just be the next best thing to search, from google. it&#8217;s a shame that this is java (i&#8217;d still like to see some efficiency data compared to c++, or other <em>real language</em>) and google can&#8217;t sell (remember google wave? buzz, what&#8217;s that?).</p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1412:sign-here-here-and-here/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>no comment</title>
		<link>http://bugflux.org/blog/1199:no-comment/</link>
		<comments>http://bugflux.org/blog/1199:no-comment/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 09:17:09 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[pt]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1199</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://bugflux.org/wp/wp-content/uploads/2010/07/trends.png"><img class="aligncenter size-full wp-image-1200" title="trends" src="http://bugflux.org/wp/wp-content/uploads/2010/07/trends.png" alt="" width="585" height="217" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1199:no-comment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>inverse perspective mapping</title>
		<link>http://bugflux.org/blog/1103:inverse-perspective-mapping/</link>
		<comments>http://bugflux.org/blog/1103:inverse-perspective-mapping/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 18:55:35 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1103</guid>
		<description><![CDATA[one of this year&#8217;s projects, and also the subject of my mini-research scholarship, was automating the process of obtaining an inverse perspective map (ipm) for an autonomous driving robot. autonomous driving robots frequently use cameras for object and road detection. &#8230; <a href="http://bugflux.org/blog/1103:inverse-perspective-mapping/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>one of this year&#8217;s projects, and also the subject of my mini-research scholarship, was automating the process of obtaining an inverse perspective map (ipm) for an autonomous driving robot.</p>
<p>autonomous driving robots frequently use cameras for object and road detection. after detecting such elements in an image it must be able to locate them in the real world, or else the image serves no purpose. that&#8217;s the ipm: a means of associating points in an image to points in the car coordinate system. to do obtain it, one only has to understand the transformations that occur when points are projected in an image and undo all those steps, for each point of the image, thus obtaining the real coordinates of each pixel.</p>
<p><span id="more-1103"></span></p>
<h2>a little geometry:</h2>
<p>the first transformation to consider is the one relative to the mechanics of the camera, the way it was constructed. correction of these values comprehends the calibration of the focal distance and the alignment of the lens relative to the projective plane, the image sensor. this requires finding 4 unknowns, that are used in this way:</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bc%7D%20%20x%5C%5C%20%20y%5C%5C%20%20w%20%20%5Cend%7Barray%7D%20%5Cright%5D%20%3D%20%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bccc%7D%20%20f_x%20%26%200%20%26%20c_x%5C%5C%20%200%20%26%20f_y%20%26%20c_y%5C%5C%20%200%20%26%200%20%26%201%20%20%5Cend%7Barray%7D%20%5Cright%5D%20%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bc%7D%20%20X%5C%5C%20%20Y%5C%5C%20%20Z%20%20%5Cend%7Barray%7D%20%5Cright%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\left[ \begin{array}{c}  x\\  y\\  w  \end{array} \right] = \left[ \begin{array}{ccc}  f_x &amp; 0 &amp; c_x\\  0 &amp; f_y &amp; c_y\\  0 &amp; 0 &amp; 1  \end{array} \right] \left[ \begin{array}{c}  X\\  Y\\  Z  \end{array} \right]' title='\left[ \begin{array}{c}  x\\  y\\  w  \end{array} \right] = \left[ \begin{array}{ccc}  f_x &amp; 0 &amp; c_x\\  0 &amp; f_y &amp; c_y\\  0 &amp; 0 &amp; 1  \end{array} \right] \left[ \begin{array}{c}  X\\  Y\\  Z  \end{array} \right]' class='latex' /></p>
<p>the left part contains the corrected points and the right part the original point coordinates in the real world, multiplied by a matrix. this matrix <a title="transformation matrix @ wikipedia.org" href="http://en.wikipedia.org/wiki/Transformation_matrix" target="_blank">describes</a> a change in scale as well as a translation. this operation gives us an image that is equivalent to the one obtained if we were using a pinhole camera.</p>
<p>the camera is now perfect, but the lens is still uncorrected. usually lenses produce radial distortion in the projection. this distortion is quite intense if using fisheye lenses. that&#8217;s actually the case in the considered robot. due to mechanical constraints, the camera is quite close to the road, and using a normal lens would yield a fairly small field of view. on top of that, some might consider that in practice it is hard to have the lens perfectly parallel to the image sensor, which is a requirement for an undistorted projection. these two problems are solved with 5 new parameters, as corrected by the first few terms of a taylor expansion around the center of the lens [<a title="learning opencv @ oreilly.com" href="http://oreilly.com/catalog/9780596516130" target="_blank">bradski, kaehler</a>]:</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bc%7D%20%20x_%7Bcorrected%7D%5C%5C%20%20y_%7Bcorrected%7D%20%20%5Cend%7Barray%7D%20%5Cright%5D%20%3D%20%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bc%7D%20%20x%5C%5C%20%20y%20%20%5Cend%7Barray%7D%20%5Cright%5D%20%281%20%2B%20k_1%20r%5E2%20%2B%20k_2%20r%5E4%20%2B%20k_3%20r%5E6%29%20%2B%20%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bc%7D%20%202%20p_1%20xy%20%2B%20p_2%20%28r%5E2%20%2B%202%20x%5E2%29%5C%5C%20%20p_1%20%28r%5E2%20%2B%202%20y%5E2%29%20%2B%202%20p_2%20xy%20%20%5Cend%7Barray%7D%20%5Cright%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\left[ \begin{array}{c}  x_{corrected}\\  y_{corrected}  \end{array} \right] = \left[ \begin{array}{c}  x\\  y  \end{array} \right] (1 + k_1 r^2 + k_2 r^4 + k_3 r^6) + \left[ \begin{array}{c}  2 p_1 xy + p_2 (r^2 + 2 x^2)\\  p_1 (r^2 + 2 y^2) + 2 p_2 xy  \end{array} \right]' title='\left[ \begin{array}{c}  x_{corrected}\\  y_{corrected}  \end{array} \right] = \left[ \begin{array}{c}  x\\  y  \end{array} \right] (1 + k_1 r^2 + k_2 r^4 + k_3 r^6) + \left[ \begin{array}{c}  2 p_1 xy + p_2 (r^2 + 2 x^2)\\  p_1 (r^2 + 2 y^2) + 2 p_2 xy  \end{array} \right]' class='latex' /></p>
<p>after these two transformations we say that the camera is calibrated for the intrinsic parameters. at this point, if we know the position of the camera relative to the floor, elementary geometry allows us to solve the position of each point. usually, though, it&#8217;s hard to mount a camera with a specific angle to the floor, at a fixed height. to find these parameters we need to solve for the perspective transformation. this transformation basically will allow us to obtain a bird&#8217;s eye view of whatever the camera is capturing. this transform is given by the following operation [<a title="automatic perspective calibration @ ieeexplore.ieee.org" href="http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4756061" target="_blank">bevilacqua, gherardi, carozza</a>]:</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bc%7D%20%20x%27%5C%5C%20%20y%27%5C%5C%20%201%20%20%5Cend%7Barray%7D%20%5Cright%5D%20%3D%20%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bccc%7D%20%20h_%7B11%7D%20%26%20h_%7B12%7D%20%26%20h_%7B13%7D%5C%5C%20%20h_%7B21%7D%20%26%20h_%7B22%7D%20%26%20h_%7B23%7D%5C%5C%20%20h_%7B31%7D%20%26%20h_%7B32%7D%20%26%20h_%7B33%7D%20%20%5Cend%7Barray%7D%20%5Cright%5D%20%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bc%7D%20%20x%5C%5C%20%20y%5C%5C%20%201%20%20%5Cend%7Barray%7D%20%5Cright%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\left[ \begin{array}{c}  x&#039;\\  y&#039;\\  1  \end{array} \right] = \left[ \begin{array}{ccc}  h_{11} &amp; h_{12} &amp; h_{13}\\  h_{21} &amp; h_{22} &amp; h_{23}\\  h_{31} &amp; h_{32} &amp; h_{33}  \end{array} \right] \left[ \begin{array}{c}  x\\  y\\  1  \end{array} \right]' title='\left[ \begin{array}{c}  x&#039;\\  y&#039;\\  1  \end{array} \right] = \left[ \begin{array}{ccc}  h_{11} &amp; h_{12} &amp; h_{13}\\  h_{21} &amp; h_{22} &amp; h_{23}\\  h_{31} &amp; h_{32} &amp; h_{33}  \end{array} \right] \left[ \begin{array}{c}  x\\  y\\  1  \end{array} \right]' class='latex' /></p>
<p>on the left we have the corrected image point, on the right the matrix that describes its rotations and translations, and the uncorrected image point. these rotations and translations are the unknowns, called the extrinsic parameters. once we have a bird&#8217;s eye view of the scene we can infer distances between points. we just need to locate one point, so we&#8217;ll be able to define a fixed coordinate for all points.</p>
<h2>a little code:</h2>
<p>when you don&#8217;t know these parameters, because cameras don&#8217;t have a datasheet stating the angle between the lens and the sensor, or how much the lens distorts the image, you can obtain them capturing know objects with identifiable points. chessboards are a good example. fortunately i had to do very little with this math introduction to calibrate the image, because <a title="opencv @ willowgarage.com" href="http://opencv.willowgarage.com/wiki/">opencv</a> solved most of these problems with just a few function calls. anyway, i didn&#8217;t know that until i studied image projection, and it eventually came handy to know the inner works.</p>
<p>so, opencv provides me: a way of detecting chessboard corners, those referred easily identifiable points; given a series of chessboards, the intrinsic parameters; given four image points and their corrected projection, the extrinsic parameters.</p>
<p>detecting chessboard corners is a call away from <strong>cvFindChessboardCorners()</strong>. this accepts an image and returns a list of points. this list of points can be used, along with the image that produced them, to call <strong>cvFindCornerSubPix()</strong>, and get subpixel accuracy on those same points.</p>
<p>given a series of captures of different images from chessboards, which will produce a series of lists of points, opencv provides <strong>cvCalibrateCamera2()</strong>, that calculates the rotations and translations of the chessboard between captures, thus fixing all 9 intrinsic parameters. it should be noted that, for better results, at least 10 chessboard captures should be done. using <strong>cvUndistort2()</strong> one is able to see the result of correcting an image for the intrinsic parameters. this is easily evaluated for fisheye lenses, since after the calibration no visible distortion should be noticed. straight lines should remain straight [<a title="straight lines have to be straight @ springerlink.com" href="http://www.springerlink.com/content/m9cx2b2au3eyj8gp/?p=6697af31dc5442cf8f391e11387d6e26" target="_blank">devernay, faugeras</a>]. <strong>cvUndistortPoints()</strong> corrects a sparse set of points instead of a whole image.</p>
<p>once calibrated for the intrinsic parameters, we can find all 8 extrinsic parameters (the matrix is normalized so that <img src='http://s.wordpress.com/latex.php?latex=h_%7B33%7D%20%3D%201&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='h_{33} = 1' title='h_{33} = 1' class='latex' />) using 4 collinear points (their ideal and distorted positions). one can do this laying a chessboard on the road and detecting the outermost corners. we know that these form a rectangle, so we can fix 4 coordinates that form a rectangle where those corners should be projected. opencv allows us to do this using <strong>cvGetPerspectiveTransform()</strong>. the result can be observed with a call to <strong>cvWarpPerspective()</strong>, which yields the referred bird&#8217;s eye view (or the result of any other calculated perspective transform). <strong>cvPerspectiveTransform()</strong> corrects a sparse set of points instead of a whole image.</p>
<p>so, since we now have a bird&#8217;s eye view, we only need to locate one point in the image and indicate its real coordinates. this will allow us to both find the relation between distances in pixels and distances in the real world and also fix the location of all the points.</p>
<h2>conclusion:</h2>
<p>this is pretty much an overview what i&#8217;ve been doing, and is greatly based on &#8220;<a title="learning opencv @ oreilly.com" href="http://oreilly.com/catalog/9780596516130" target="_blank">learning opencv: computer vision with the opencv library</a>&#8220;, from o&#8217;reilly media. further steps include making use of this map to abstract algorithms such as &#8220;lane detection&#8221;, &#8220;car positioning&#8221;, to work at a car coordinate level, instead of image coordinates. this will not only make it easier for the programmer to produce algorithms but will also facilitate porting solutions to other architectures, and different camera mounts.</p>
<p>the project code is not public <em>per se</em>, but i&#8217;m free to disclose any requested parts.</p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1103:inverse-perspective-mapping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

