<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0UGQ385fip7ImA9WhRUGUg.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921</id><updated>2012-01-30T21:20:22.126+02:00</updated><category term="Fail" /><category term="Airport" /><category term="Subversion" /><category term="Hong Kong" /><category term="Patch" /><category term="Xorg" /><category term="Nokia" /><category term="X Developers Conference" /><category term="Christmas" /><category term="Winter" /><category term="Bug" /><category term="New Zealand" /><category term="Vacation" /><category term="Trinity" /><category term="Maesum" /><category term="Quake 3" /><category term="Development" /><category term="Hell" /><category term="XreaL" /><category term="Git" /><category term="Clang" /><category term="N900" /><category term="Coverity" /><category term="Anonymous StopACTA StopSOPA" /><category term="Airport Hotel" /><category term="Helsinki" /><category term="Radeon" /><category term="Helsinki Summer" /><category term="Movies" /><category term="Snellmaninkatu" /><category term="Maemo Summit" /><category term="Analysis" /><category term="Books" /><title>Oliver's Blog</title><subtitle type="html">This machine will, will not communicate; These thoughts and the strain I am under...</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://omcfadde.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/OliverMcfadden" /><feedburner:info uri="olivermcfadden" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>OliverMcfadden</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;C0UGQ384eyp7ImA9WhRUGUg.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-8547119887979959246</id><published>2012-01-30T21:13:00.001+02:00</published><updated>2012-01-30T21:20:22.133+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-30T21:20:22.133+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Anonymous StopACTA StopSOPA" /><title>STOP ACTA...</title><content type="html">I suspect that I'll be receiving quite a few more hits here given the recent retweets. Unfortunately I haven't had much time to update my blog... In fact, I may not have &lt;i&gt;any&lt;/i&gt; time in the future.&lt;br /&gt;
&lt;br /&gt;
On a more positive note, I am much more active on Twitter, so you can follow me there (@omcfadde)&lt;br /&gt;
&lt;br /&gt;
Of course the topics we're discussing, SOPA, ACTA, etc are definitely not pleasant or positive. Let's show them we mean business and that we &lt;b&gt;will not&lt;/b&gt; accept these agreements!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://www.stopacta.info/"&gt;STOP ACTA&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Updates (possibly) coming in the future.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;br /&gt;
Epäilen, että tulen saa melkoisesti lisää osumia tässä äskettäisten retweets. Valitettavasti minulla ei ole ollut paljon aikaa päivittää blogiin ... Itse en ehkä ole mitään aikaa jatkossa.&lt;br /&gt;
&lt;br /&gt;
Myönteistä huomata, olen paljon enemmän aktiivisia Twitterissä, jotta voit seurata minua sinne (@omcfadde)&lt;br /&gt;
&lt;br /&gt;
Tietenkin aiheita olemme keskustelleet, SOPA, ACTA jne. eivät varmasti miellyttävä tai positiivinen. Katsotaanpa näytä heille että olemme tosissamme ja että me ei hyväksy näitä sopimuksia!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://www.stopacta.info/"&gt;STOP ACTA&lt;/a&gt;&lt;/b&gt; (In Englanti - Lue!)&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Päivitykset (mahdollisesti) tulossa tulevaisuudessa.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-8547119887979959246?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rhZjrYqQTsb9mlLSAZ6CI4WBlgI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rhZjrYqQTsb9mlLSAZ6CI4WBlgI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rhZjrYqQTsb9mlLSAZ6CI4WBlgI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rhZjrYqQTsb9mlLSAZ6CI4WBlgI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/ik6k0Zbhoh0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/8547119887979959246/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2012/01/stop-acta.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/8547119887979959246?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/8547119887979959246?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/ik6k0Zbhoh0/stop-acta.html" title="STOP ACTA..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>0</thr:total><georss:featurename>Helsinki, Finland</georss:featurename><georss:point>60.169845 24.93855080000003</georss:point><georss:box>60.169845 24.93855080000003 60.169845 24.93855080000003</georss:box><feedburner:origLink>http://omcfadde.blogspot.com/2012/01/stop-acta.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QHQH0-fSp7ImA9WhdRGUw.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-4905131190356872255</id><published>2011-08-09T22:38:00.001+03:00</published><updated>2011-08-09T22:48:51.355+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-09T22:48:51.355+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><title /><content type="html">&lt;i&gt;I was originally going to post this as a tweet, but verbosity got the better of me. Colleagues whom I have worked with (you know who you are) will attest to this fact...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
I frequently consider how things may have turned differently based on my own choices; jumping directly into employment versus attending university. Choosing a career as a software engineer as apposed to pursuing interests in chemistry and biology.&lt;br /&gt;
&lt;br /&gt;
I like to think that all-in-all everything worked out okay... On the other hand, there are so many possibilities that I will no longer be able to explore, and that is very disappointing. I will likely never know what it would be like to attend a university, graduate with a PhD (which would probably be in computer science, chemistry and/or biology -- the two being closely related.)&lt;br /&gt;
&lt;br /&gt;
I have even contemplated the idea of assembling a small team for developing small to medium scale games. I don't think there is a way for a small group to compete with triple-A titles, which again is disappointing. Of course this is a pipe-dream. I don't know artists capable of creating the media required, nor any software engineers who would be willing to participate project which has an unknown chance of commercial success. I think these kinds of projects are a Euro short and a decade late.&lt;br /&gt;
&lt;br /&gt;
Well, maybe not a decade late, but at least I don't have the means to bankroll such an endeavor from my personal account. Perhaps it would be interesting to sketch out a graph of my life based on decisions made and not made and see what the projections look like...&lt;br /&gt;
&lt;br /&gt;
If only for more productive hours in the day; but that is another brain-dump entirely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-4905131190356872255?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dTDT125g2VkvnOFp8b2vXX7Mj8w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dTDT125g2VkvnOFp8b2vXX7Mj8w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dTDT125g2VkvnOFp8b2vXX7Mj8w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dTDT125g2VkvnOFp8b2vXX7Mj8w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/zx6ztCtAYNg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/4905131190356872255/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2011/08/i-was-originally-going-to-post-this-as.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/4905131190356872255?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/4905131190356872255?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/zx6ztCtAYNg/i-was-originally-going-to-post-this-as.html" title="" /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>1</thr:total><georss:featurename>Helsinki, Finland</georss:featurename><georss:point>60.16981249999999 24.93824010000003</georss:point><georss:box>60.031373499999994 24.70242710000003 60.30825149999999 25.17405310000003</georss:box><feedburner:origLink>http://omcfadde.blogspot.com/2011/08/i-was-originally-going-to-post-this-as.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcMQng7fyp7ImA9WhdTFE0.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-3641216320722166610</id><published>2011-07-11T20:58:00.000+03:00</published><updated>2011-07-11T20:58:03.607+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-11T20:58:03.607+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Trinity" /><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Xorg" /><title>Using dlopen() for fast engine prototyping...</title><content type="html">I recently became tired of the cycle of hacking on the renderer, starting the whole engine, checking where and how it's failing, exiting the engine and the pointless time wasted during this process. Typically it's only a specific area I'm working on, thus perhaps one or two C source code files are actually changed, so it doesn't make sense to reload the entire engine and all media assets.&lt;br /&gt;
&lt;br /&gt;
I started working on a smaller project for rapid-fire prototyping, μEngine. Currently it's a pretty basic project. It provides the basic framework for detecting that a shared object has changed, unloading the current version from memory, loading the new library, resolving the required symbols, and continuing the "rendering" loop &lt;i&gt;(which actually doesn't perform any OpenGL rendering yet.)&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Here's an example of the engine running:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;~/uengine/src (master) $ make &amp;amp;&amp;amp; ./uengine 
make: Nothing to be done for `all'.
... .libs/libuengine.so
0xdeadbeef
0xdeadbeef
0xdeadbeef
0xdeadbeef
... .libs/libuengine.so
0xcafebabe
0xcafebabe
0xcafebabe
0xcafebabe
... .libs/libuengine.so
0x0
$ &lt;/pre&gt;&lt;br /&gt;
While the engine was running, I edited &lt;i&gt;libuengine.c&lt;/i&gt;, which is compiled by Automake into a shared object:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ sed -i 's/0xdeadbeef/0xcafebabe/' libuengine.c &amp;amp;&amp;amp; make
  CC     libuengine.lo
  CCLD   libuengine.la&lt;/pre&gt;&lt;br /&gt;
Now I want to terminate the program (and I'm too lazy to have written a signal handler yet) so μEngine's main-loop is setup to terminate when &lt;i&gt;dlsym_main&lt;/i&gt; returns a zero value.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ sed -i 's/0xcafebabe/0x0/' libuengine.c &amp;amp;&amp;amp; make 
  CC     libuengine.lo
  CCLD   libuengine.la&lt;/pre&gt;&lt;br /&gt;
μEngine also links with &lt;i&gt;libengine&lt;/i&gt; (which provides all of the math/geometry/etc functionality for Trinity), &lt;i&gt;libdecl&lt;/i&gt; (which provides access to &lt;i&gt;id Software&lt;/i&gt; style declaration files), and &lt;i&gt;liblwo2&lt;/i&gt; (which, well, loads LWO2 model files.)&lt;br /&gt;
&lt;br /&gt;
This little experiment is far from complete. I still need to setup an OpenGL and GLX context, handle X11 input, and keep track of any ARB fp/vp or GLSL programs loaded. GPU programs will be reloaded in much the same way as the shared object itself.&lt;br /&gt;
&lt;br /&gt;
There is of course a few frames delay between invocation of &lt;i&gt;make&lt;/i&gt; and the new library being loaded, because should &lt;i&gt;stat&lt;/i&gt; fail to obtain the file modification time (because it's still being written out) μEngine just continues with the old shared library until &lt;i&gt;stat&lt;/i&gt; succeeds. The modification time is checked every "frame."&lt;br /&gt;
&lt;br /&gt;
I think this should help with faster prototyping, since μEngine has the ability to access all of the assets and &lt;i&gt;libengine&lt;/i&gt; library functions that Trinity can, but without the requirement of loading all the assets for a full world map into memory at start up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-3641216320722166610?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BcsLOzi9Po6mcmH5ryoqUkqtZjQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BcsLOzi9Po6mcmH5ryoqUkqtZjQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BcsLOzi9Po6mcmH5ryoqUkqtZjQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BcsLOzi9Po6mcmH5ryoqUkqtZjQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/3uZS2Iqw8Y4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/3641216320722166610/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2011/07/using-dlopen-for-fast-engine.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/3641216320722166610?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/3641216320722166610?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/3uZS2Iqw8Y4/using-dlopen-for-fast-engine.html" title="Using dlopen() for fast engine prototyping..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>0</thr:total><georss:featurename>Helsinki, Finland</georss:featurename><georss:point>60.16981249999999 24.93824010000003</georss:point><georss:box>60.031373499999994 24.70242710000003 60.30825149999999 25.17405310000003</georss:box><feedburner:origLink>http://omcfadde.blogspot.com/2011/07/using-dlopen-for-fast-engine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIERXk_cCp7ImA9WhZVFkw.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-5439971637282716580</id><published>2011-05-28T22:55:00.000+03:00</published><updated>2011-05-28T22:55:04.748+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-28T22:55:04.748+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Trinity" /><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><title>More BSP compiler hacking...</title><content type="html">I've started working on my engine's BSP compiler (based on Q3Map2/XMAP2) looking to add proper shader parsing and areaportal detection. Currently the shaders are all parsed by &lt;i&gt;libdecl&lt;/i&gt; which avoids duplication of code between the engine and utilities.&lt;br /&gt;
&lt;br /&gt;
The engine does &lt;b&gt;not yet&lt;/b&gt; use portal based rendering (which is why you can see light clipping through the wall in the images.) The BSP compiler has portal debugging enabled, which outputs an extra surface with a translucent shader for areaportal visualization and debugging.&lt;br /&gt;
&lt;br /&gt;
This is a very simple demo map, however you can already see several issues. The BSP compiler needs to carve the polygons into discrete areas (e.g. the floor polygon should not span two areas.) There are still a few areaportal bugs in the BSP compiler, and of course the engine must be updated to use areaportal based rendering.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-NdIK4impimU/TeFNTvEjtXI/AAAAAAAAATw/zPFGzAY5VRA/s1600/shot0003.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-NdIK4impimU/TeFNTvEjtXI/AAAAAAAAATw/zPFGzAY5VRA/s200/shot0003.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;Image showing light leaking through the wall/areaportal.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ugDv24aeZMQ/TeFNVuNmEpI/AAAAAAAAAT0/Zd9k_w1QMsk/s1600/shot0004.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-ugDv24aeZMQ/TeFNVuNmEpI/AAAAAAAAAT0/Zd9k_w1QMsk/s200/shot0004.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Image showing the triangles rendered; the floor and walls should be carved at the areaportal boundary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Who knows, maybe I'll even get this finished before id Tech 4 is (hopefully) released under the GNU General Public License.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-5439971637282716580?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/F19-fSXRorFra5Vpfrf_BARtylY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F19-fSXRorFra5Vpfrf_BARtylY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/F19-fSXRorFra5Vpfrf_BARtylY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F19-fSXRorFra5Vpfrf_BARtylY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/spyfuwquCgo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/5439971637282716580/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2011/05/more-bsp-compiler-hacking.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/5439971637282716580?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/5439971637282716580?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/spyfuwquCgo/more-bsp-compiler-hacking.html" title="More BSP compiler hacking..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-NdIK4impimU/TeFNTvEjtXI/AAAAAAAAATw/zPFGzAY5VRA/s72-c/shot0003.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2011/05/more-bsp-compiler-hacking.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MCRXo4eSp7ImA9WhZQFEQ.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-89224722488275271</id><published>2011-04-22T19:57:00.000+03:00</published><updated>2011-04-22T19:57:44.431+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-22T19:57:44.431+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Helsinki" /><title>HP LaserJet Pro CP1525nw Review</title><content type="html">I received the CP1525nw on Thursday, and it turns out this is a really great printer for GNU/Linux (which probably means the other HP network-compatible printers are good, too.)&lt;br /&gt;
&lt;br /&gt;
Basically I unpacked it, plugged in Ethernet and power cables, it fetched an IP address from DHCP and displayed it on the small LCD. You can do some basic configuration through this LCD/few-button interface, but it's not worth the trouble; just note the IP address, enter it into a browser, and setup from there.&lt;br /&gt;
&lt;br /&gt;
You can't setup the wireless via the LCD interface (unless you make use of this silly PIN code system which my router doesn't support anyway.)&lt;br /&gt;
&lt;br /&gt;
Everything is configurable over the web interface, and by default mostly everything is enabled and unsecured. I disabled features I wouldn't use, configured the wireless, assigned a static IP, and secured the interface with a password.&lt;br /&gt;
&lt;br /&gt;
Note that while you can configure the wireless it won't actually become active until the Ethernet cable is disconnected. You can't use both interfaces (Ethernet and WiFi) at the same time.&lt;br /&gt;
&lt;br /&gt;
Everything went very smoothly and you &lt;b&gt;don't&lt;/b&gt; need any proprietary software, even for setup, which is wonderful. :-)&lt;br /&gt;
&lt;br /&gt;
Complaints thus far, although I haven't had the chance to use it much due to only having a few sheets of blank paper lying around, are as follows:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;No duplex printing, although you can of course manually duplex your documents by printing even/odd pages in separate jobs.&lt;/li&gt;
&lt;li&gt;Paper tray is a bit small: 150 sheets. It would be nice to have a 500 sheet tray which would accomidate an entire ream of paper.&lt;/li&gt;
&lt;/ul&gt;Not big issues, and the print quality is very good, so I would recommend this printer. CUPS configuration was quick and painless, and CUPS has a built-in driver.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-89224722488275271?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hTGzrD5dXR0_HBiNDPMMqjI9S0o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hTGzrD5dXR0_HBiNDPMMqjI9S0o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hTGzrD5dXR0_HBiNDPMMqjI9S0o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hTGzrD5dXR0_HBiNDPMMqjI9S0o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/iVZKeANXReo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/89224722488275271/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2011/04/hp-laserjet-pro-cp1525nw-review.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/89224722488275271?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/89224722488275271?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/iVZKeANXReo/hp-laserjet-pro-cp1525nw-review.html" title="HP LaserJet Pro CP1525nw Review" /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>5</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2011/04/hp-laserjet-pro-cp1525nw-review.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8HQH8-eip7ImA9WhZRE0k.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-5544366271565705834</id><published>2011-04-09T14:17:00.000+03:00</published><updated>2011-04-09T14:17:11.152+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-09T14:17:11.152+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Helsinki" /><title>Ultrasonic modem update</title><content type="html">I did a little more digging into underwater ultrasonic digital communication. There is a &lt;a href="http://oai.dtic.mil/oai/oai?verb=getRecord&amp;amp;metadataPrefix=html&amp;amp;identifier=ADA499556"&gt;publication from DTIC&lt;/a&gt; which looks interesting. It includes some rather boring source code, but provides a lot of good advice in the text.&lt;br /&gt;
&lt;br /&gt;
Available for purchase is &lt;i&gt;&lt;a href="http://www.springerlink.com/content/f655n1w00677jgk5"&gt;An Ultrasonic Sensor Based Low-Power Acoustic Modem for Underwater Communication in Underwater Wireless Sensor Networks&lt;/a&gt;&lt;/i&gt; by Heungwoo Nam and Sunshin An. It's €25 for the publication, so I'll probably purchase it (unless some anonymous person with access would email me.)&lt;br /&gt;
&lt;br /&gt;
Of course, this is leading to the ultimate conclusion of setting up an EE workbench and buying a bunch of expensive equipment (solder station, oscilloscope, function generator, multimeter, etc.)&lt;br /&gt;
&lt;br /&gt;
I seem to have expensive hobbies. :-( I should really spend some money on a good vacation, which I sorely need.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-5544366271565705834?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2ad2snCOAuDEVTnGnnky4gpZicI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2ad2snCOAuDEVTnGnnky4gpZicI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2ad2snCOAuDEVTnGnnky4gpZicI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2ad2snCOAuDEVTnGnnky4gpZicI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/lVX2zE_3TGM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/5544366271565705834/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2011/04/ultrasonic-modem-update.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/5544366271565705834?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/5544366271565705834?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/lVX2zE_3TGM/ultrasonic-modem-update.html" title="Ultrasonic modem update" /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>1</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2011/04/ultrasonic-modem-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8NSXk7fip7ImA9WhZREUg.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-1374592817164307312</id><published>2011-04-07T09:35:00.001+03:00</published><updated>2011-04-07T09:48:18.706+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-07T09:48:18.706+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Helsinki" /><title>Printer for Home Office...</title><content type="html">Dear Lazyweb,&lt;br /&gt;
&lt;br /&gt;
I'm currently looking for a printer for my home so that I don't have to wait until I'm at the office and use the printers there... Unfortunately it seems many laser printers (especially Canon, which Verkkokauppa are pushing to sell) either don't have Linux support, or have only proprietary drivers. What ever happened to just accepting a Postscript file?&lt;br /&gt;
&lt;br /&gt;
Canon are especially nasty in that they provide a "source" package, which is really just the source code for some of the utilities, but the core library is still proprietary. &lt;i&gt;Every time I see a shared object or binary inside a source package, I die a little inside...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Besides Xerox printers (very expensive) HP seem to have a couple of good options:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.verkkokauppa.com/popups/prodinfo.php?id=17822"&gt;HP LaserJet Pro CP1525n Color Printer&lt;/a&gt; (Ethernet)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.verkkokauppa.com/popups/prodinfo.php?id=18267"&gt;HP LaserJet Pro CP1525n&lt;b&gt;w&lt;/b&gt; Color Printer&lt;/a&gt; (Ethernet + 802.11b/g/n)&lt;/li&gt;
&lt;/ul&gt;Both accept the following languages:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;HP PCL 6&lt;/li&gt;
&lt;li&gt;HP PCL 5c&lt;/li&gt;
&lt;li&gt;HP Postscript Level 3 Emulation&lt;/li&gt;
&lt;/ul&gt;According to this &lt;a href="http://ubuntuforums.org/showpost.php?p=10511826&amp;amp;postcount=8"&gt;forum post&lt;/a&gt; it looks like it should work out-of-the-box with CUPS, &lt;b&gt;without any proprietary drivers&lt;/b&gt; which is a precondition for my purchase...&lt;br /&gt;
&lt;br /&gt;
Verkkokauppa have a rather silly return policy. Maybe this was inaccurate as I only asked one of their sales people, but apparently should you purchase something from their shop in person, then you do not have the option to return it (except if the product is defective.) However, should you purchase online (even to pick-up from the store) you have a 2 week return period...&lt;br /&gt;
&lt;br /&gt;
I am leaning towards the CP1525nw because it seems like it will work with CUPS without proprietary crap, and the wireless network feature means I can put the printer in a walk-in closet or similar and keep it out of the way. Unfortunately it's a 1-2 week order time from the supplier.&lt;br /&gt;
&lt;br /&gt;
It seems a reasonable deal for around the €200 to €300 range.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-1374592817164307312?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cApw6JraSwiFS2IvyMuGchkX8gw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cApw6JraSwiFS2IvyMuGchkX8gw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cApw6JraSwiFS2IvyMuGchkX8gw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cApw6JraSwiFS2IvyMuGchkX8gw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/TjKgCC3P_UA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/1374592817164307312/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2011/04/printer-for-home-office.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/1374592817164307312?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/1374592817164307312?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/TjKgCC3P_UA/printer-for-home-office.html" title="Printer for Home Office..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>7</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2011/04/printer-for-home-office.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EFQXo8eSp7ImA9WhZSGE8.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-1603111864054342565</id><published>2011-04-03T13:13:00.000+03:00</published><updated>2011-04-03T13:13:30.471+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-03T13:13:30.471+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Trinity" /><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Helsinki" /><title>Expression parsing and evaluation...</title><content type="html">Something which has been annoying for me for a while was the lack of proper expression parsing in &lt;i&gt;libdecl&lt;/i&gt;, my engine's declaration parsing library.&lt;br /&gt;
&lt;br /&gt;
This library is responsible for parsing the &lt;a href="http://www.iddevnet.com/doom3/sounds.php"&gt;sound&lt;/a&gt; and &lt;a href="http://www.iddevnet.com/doom3/materials.php"&gt;table/material&lt;/a&gt; declarations as defined by id Software, and making them available to the renderer (or other backend: sound engine, etc) in easy to read structures guaranteed to have sane and correct values. &lt;i&gt;libdecl&lt;/i&gt; is the component which will complain about your syntax, the backend doesn't have to care about any of this. Really makes the code look a lot nicer. :-)&lt;br /&gt;
&lt;br /&gt;
I was debating the best way to parse expressions, because they can either be very simple, or quite complicated. I realized that I could not rely on line terminators, because it's very common to see an expression span multiple lines with all kinds of tabs and white-space in the file... Of course the lexer ignores white-space, but keeps track of the line count.&lt;br /&gt;
&lt;br /&gt;
After a bit of thinking about this, I decided to rip out the current shunting yard algorithm from the renderer, move it into &lt;i&gt;libdecl&lt;/i&gt;, clean it up and rework it quite a bit. Now, it does the following:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Get a token from the lexer,&lt;/li&gt;
&lt;li&gt; Check this token matches our expected rules,&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;the token is an operator or operand, or&lt;/li&gt;
&lt;li&gt;the token is a table name. (Detected from 1st-pass.)&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt; If our checks pass, go ahead with the normal algorithm, otherwise,&lt;/li&gt;
&lt;li&gt;Push the token back to the lexer, and return the completed expression in Postfix notation.&lt;/li&gt;
&lt;/ol&gt;Here's a hypothetical example that I wrote with more comments than necessary...&lt;br /&gt;
&lt;hr /&gt;&lt;pre&gt;/* "material" keyword is optional when inside the material directory */
material textures/screenBlur
{
        sort postProcess

        /* first stage */
        {
                if glslPrograms != 0 &amp;&amp;
                        !isMultiplayer  /* don't blur the screen in multi-player */
                map textures/blur       /* any image format supported */
        }

        /* ... */
}&lt;/pre&gt;&lt;hr /&gt;Obviously simply parsing the "if" expression until the end of the line would fail, furthermore, "if" expressions may be written as &lt;i&gt;if ...&lt;/i&gt; or &lt;i&gt;if (...)&lt;/i&gt;, so matching on parentheses won't work either.&lt;br /&gt;
&lt;br /&gt;
It turns out the easiest thing to do is first a pre-pass which only looks at tables (so that we know "foobarTable" is valid), then a secondary pass which looks at everything (sounds, tables, materials.)&lt;br /&gt;
&lt;br /&gt;
In this example "glslPrograms" and "isMultiplayer" are built-in variables which the parser correctly detects as operands. Therefore we'll only stop parsing after reading the "map" token, realize it's not a valid operator or operand, push it back to the lexer, and return the expression (after some processing.)&lt;br /&gt;
&lt;br /&gt;
This solution seems to be quite elegant, despite the 2-pass algorithm, and handles all the cases correctly.&lt;br /&gt;
&lt;br /&gt;
The next step is to get rid of static stack allocation. Some expressions are very long, so the stack is setup for 64 elements, but this is ridiculous for "&lt;i&gt;time * 0.001&lt;/i&gt;" (for example.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-1603111864054342565?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p5GqxLDUkS3BaBE8c02_8K-FWPY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p5GqxLDUkS3BaBE8c02_8K-FWPY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p5GqxLDUkS3BaBE8c02_8K-FWPY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p5GqxLDUkS3BaBE8c02_8K-FWPY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/naQNlH09bx4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/1603111864054342565/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2011/04/expression-parsing-and-evaluation.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/1603111864054342565?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/1603111864054342565?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/naQNlH09bx4/expression-parsing-and-evaluation.html" title="Expression parsing and evaluation..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>1</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2011/04/expression-parsing-and-evaluation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8HRn08fyp7ImA9WhZTGU0.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-7677583538228433144</id><published>2011-03-23T11:58:00.001+02:00</published><updated>2011-03-23T21:33:57.377+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-23T21:33:57.377+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Helsinki" /><title>The Matrix at your local Apotek?</title><content type="html">Couldn't help but laugh when I opened these (Paracetamol and Ibuprofen) as I usually buy a different brand of Ibuprofen which is your standard white pill.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://goo.gl/photos/oO9cvRuj8P" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="https://lh3.googleusercontent.com/_SwNjMGn1QH0/TYkRMWGUmWI/AAAAAAAAAQI/RkMHaHrFv0I/s320/matrix_reallife.jpg" width="313" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;That's&lt;/i&gt; why they are cost approximately 8 euros for 30 tablets! Damn, I don't need it decorated like an Easter egg, as long as it works...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-7677583538228433144?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xB--QiZnciD17lusq2-e8Mcxo_s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xB--QiZnciD17lusq2-e8Mcxo_s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xB--QiZnciD17lusq2-e8Mcxo_s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xB--QiZnciD17lusq2-e8Mcxo_s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/OefkKz3yp9g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/7677583538228433144/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2011/03/matrix-at-your-local-apotek.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/7677583538228433144?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/7677583538228433144?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/OefkKz3yp9g/matrix-at-your-local-apotek.html" title="The Matrix at your local Apotek?" /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/_SwNjMGn1QH0/TYkRMWGUmWI/AAAAAAAAAQI/RkMHaHrFv0I/s72-c/matrix_reallife.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2011/03/matrix-at-your-local-apotek.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUECQ3g9eSp7ImA9Wx9bEUo.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-4741194341146973891</id><published>2011-02-20T05:47:00.000+02:00</published><updated>2011-02-20T05:47:42.661+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-20T05:47:42.661+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="Radeon" /><title>New home for Revenge (Radeon Reverse Engineering Tool)</title><content type="html">Thanks to Marek Olšák for having a backup copy of my Git repository online! The hard drive containing much of my personal code which was on &lt;i&gt;people.freedesktop.org&lt;/i&gt; (until those directories were lost) is half way around the world.&lt;br /&gt;
&lt;br /&gt;
Revenge now has a new home on &lt;a href="http://gitorious.org/omcfadde/revenge"&gt;http://gitorious.org/omcfadde/revenge&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I have bumped the version to 2.0.0, which introduces some minor configure.ac fixes: mostly &lt;i&gt;PKG_CHECK_MODULES&lt;/i&gt; for &lt;i&gt;libpci&lt;/i&gt;, &lt;i&gt;sdl&lt;/i&gt;, and &lt;i&gt;zlib&lt;/i&gt;. I have also updated email addresses and revenge.sh for non-developers.&lt;br /&gt;
&lt;br /&gt;
Honestly I do not expect this code to get much interest now that we have documentation from AMD; but it's useful for historical/nostalgic reasons.&lt;br /&gt;
&lt;br /&gt;
If I were to do it over again today: I would start with the kernel MMIO tracer (which would deal with the fglrx kernel module) then extend this to handle dumping MMIO access from a userspace process too. The kernel is the perfect place to do so, and would be far more reliable than userspace.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or bug reports, feel free to ask them here and I will try to provide you with timely answers/fixes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-4741194341146973891?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/T3abF7pAzkBLXGCzN_JOugHiHas/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T3abF7pAzkBLXGCzN_JOugHiHas/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/T3abF7pAzkBLXGCzN_JOugHiHas/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T3abF7pAzkBLXGCzN_JOugHiHas/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/Q1zCb6IeczA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/4741194341146973891/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2011/02/new-home-for-revenge-radeon-reverse.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/4741194341146973891?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/4741194341146973891?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/Q1zCb6IeczA/new-home-for-revenge-radeon-reverse.html" title="New home for Revenge (Radeon Reverse Engineering Tool)" /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>1</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2011/02/new-home-for-revenge-radeon-reverse.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YBQ3oycSp7ImA9Wx9bEU8.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-5805445130583971105</id><published>2011-02-19T15:12:00.000+02:00</published><updated>2011-02-19T15:12:32.499+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-19T15:12:32.499+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Analysis" /><title>Math function micro-optimization...</title><content type="html">&lt;b&gt;Preamble for &lt;a href="http://planet.freedesktop.org/"&gt;planet.freedesktop.org&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Sorry about the poor formatting on &lt;a href="http://planet.freedesktop.org/"&gt;planet.freedesktop.org&lt;/a&gt;; it seems it and BlogSpot don't quite get along, therefor you won't see any color hilights. It looks much better (and easier to read) on my actual blog page, honest!&lt;br /&gt;
&lt;br /&gt;
Updated version includes float-to-int optimization and comments; sorry if this bumps this rather long post to the top again; this is not my intention. planet.freedesktop.org admins: is there some way to disable bumping when a post is updated? (Perhaps selectively, in case the bump is important. e.g. updated dates for an event.)&lt;br /&gt;
&lt;hr /&gt;&lt;br /&gt;
This analysis was performed using a modified version of &lt;a href="http://www.lomont.org/"&gt;Chris Lomont's&lt;/a&gt; inverse square-root testing code. The &lt;a href="http://www.lomont.org/math/papers/2003/invsqrt.pdf"&gt;accompanying publication&lt;/a&gt; is worth reading before looking at any of this data.&lt;br /&gt;
&lt;br /&gt;
I've started looking into whether there would be any performance difference in a few optimized math functions should &lt;b&gt;-fstrict-aliasing&lt;/b&gt; be enabled. I did not believe strict-aliasing would have much of an effect on these optimized functions (and it turns out I was correct) but the benefit is seen when compiling other code which includes these inline functions.&lt;br /&gt;
&lt;br /&gt;
Without strict-aliasing compatibility, including the header file containing the incompatible functions/macros taints the entire file, meaning you cannot use &lt;b&gt;-fstrict-aliasing&lt;/b&gt; where it may be helpful for your general code.&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;br /&gt;
Here are the results for the standard &lt;i&gt;1.0 / sqrt(x)&lt;/i&gt; frequently used in graphics engines. Even though today's renderers typically use carefully crafted SIMD functions for the critical path, this is still useful for quickly normalizing vectors in game code, etc.&lt;br /&gt;
&lt;br /&gt;
The Lomont version of the function is a tiny bit faster and a tiny bit more accurate, but nothing to write home about.&lt;br /&gt;
&lt;br /&gt;
Clearly it can be seen that this micro-optimization is an excellent for x86 and x86_64. Don't try it on ARM; it's &lt;i&gt;far&lt;/i&gt; slower than just taking the hit on &lt;i&gt;1.0 / sqrt(x)&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
I don't know whether this optimization could be modified for ARM; any assembly experts out there?&lt;br /&gt;
&lt;blockquote&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Timing Exact function&lt;br /&gt;
1752 ms used for 100000000 passes, avg 1.752e-05 ms&lt;/b&gt;&lt;/div&gt;&lt;div style="color: green;"&gt;&lt;b&gt;Timing Carmack function&lt;br /&gt;
463 ms used for 100000000 passes, avg 4.63e-06 ms&lt;br /&gt;
Timing Carmack function (strict-aliasing)&lt;br /&gt;
455 ms used for 100000000 passes, avg 4.55e-06 ms&lt;br /&gt;
Timing Lomont function&lt;br /&gt;
453 ms used for 100000000 passes, avg 4.53e-06 ms&lt;br /&gt;
Timing Lomont function (strict-aliasing)&lt;br /&gt;
455 ms used for 100000000 passes, avg 4.55e-06 ms&lt;/b&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;hr /&gt;The absolute value function is mostly used for comparisons (e.g. &lt;i&gt;fabs(y - x) &amp;gt; epsilon&lt;/i&gt; and some other specialized functions: finding on which side of a plane an AABB resides, it's distance from said plane, AABB radius, etc. Therefor it's useful to optimize this function where possible...&lt;br /&gt;
&lt;blockquote&gt;&lt;div style="color: green;"&gt;&lt;b&gt;Timing Exact fabsf function&lt;br /&gt;
268 ms used for 100000000 passes, avg 2.68e-06 ms&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Timing Bit-Masking fabsf function&lt;br /&gt;
304 ms used for 100000000 passes, avg 3.04e-06 ms&lt;br /&gt;
Timing Bit-Masking fabsf function (strict-aliasing)&lt;br /&gt;
305 ms used for 100000000 passes, avg 3.05e-06 ms&lt;/b&gt;&lt;/div&gt;&lt;/blockquote&gt;However, apparently it's quite a bit faster to just call libc's &lt;i&gt;fabsf&lt;/i&gt; function! I saw this originally in the Quake 3 Arena source code, so maybe things were different with the compilers and hardware of the time.&lt;br /&gt;
&lt;hr /&gt;These macros/functions are used when you want to know the sign of a float (i.e.  is the value positive or negative) without performing any comparison (for performance reasons.) It seems that the strict-aliasing versions perform about identical to the macros.&lt;br /&gt;
&lt;blockquote&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Timing Exact float sign bit not set function&lt;br /&gt;
327 ms used for 100000000 passes, avg 3.27e-06 ms&lt;/b&gt;&lt;/div&gt;&lt;div style="color: green;"&gt;&lt;b&gt;Timing FLOATSIGNBITNOTSET macro&lt;br /&gt;
313 ms used for 100000000 passes, avg 3.13e-06 ms&lt;br /&gt;
Timing Bit-Masking float sign bit not set function (strict-aliasing)&lt;br /&gt;
312 ms used for 100000000 passes, avg 3.12e-06 ms&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;b&gt;Timing Exact float sign bit set function&lt;br /&gt;
342 ms used for 100000000 passes, avg 3.42e-06 ms&lt;/b&gt;&lt;/div&gt;&lt;div style="color: green;"&gt;&lt;b&gt;Timing FLOATSIGNBITSET macro&lt;br /&gt;
305 ms used for 100000000 passes, avg 3.05e-06 ms&lt;br /&gt;
Timing Bit-Masking float sign bit set function (strict-aliasing)&lt;br /&gt;
305 ms used for 100000000 passes, avg 3.05e-06 ms&lt;/b&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;hr /&gt;Don't use "&lt;i&gt;d = (int) f&lt;/i&gt;" if you want fast code. &lt;i&gt;fld&lt;/i&gt; and &lt;i&gt;fistp&lt;/i&gt; work nicely on x86 and x86_64.&lt;br /&gt;
&lt;blockquote&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Timing Exact float-to-int function&lt;br /&gt;
1252 ms used for 100000000 passes, avg 1.252e-05 ms&lt;/b&gt;&lt;/div&gt;&lt;div style="color: green;"&gt;&lt;b&gt;Timing Fast float-to-int function&lt;br /&gt;
336 ms used for 100000000 passes, avg 3.36e-06 ms&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
Done. By Chris Lomont 2003. Modified by Oliver McFadden 2011&lt;/blockquote&gt;These measurements were taken on my laptop with an &lt;i&gt;Intel(R) Core(TM)2 Duo CPU P9500 @ 2.53GHz&lt;/i&gt; processor and the test program compiled with &lt;i&gt;gcc version 4.4.5 (Debian 4.4.5-6)&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;br /&gt;
Whether this makes any huge difference in frames-per-second is debatable, really I had a bit of time and was bored. :-) Anyway, I wouldn't say anything until testing under real-world conditions.&lt;br /&gt;
&lt;br /&gt;
It does look like the bit-masking &lt;i&gt;fabs&lt;/i&gt; can be thrown away, though, and the fast float-to-int is a major win (although beware of possible rounding differences.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-5805445130583971105?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_ekUFdY0-Hf9pseKlO25ULdW9ps/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_ekUFdY0-Hf9pseKlO25ULdW9ps/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_ekUFdY0-Hf9pseKlO25ULdW9ps/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_ekUFdY0-Hf9pseKlO25ULdW9ps/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/-5PvOMhNTNA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/5805445130583971105/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2011/02/math-function-micro-optimization.html#comment-form" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/5805445130583971105?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/5805445130583971105?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/-5PvOMhNTNA/math-function-micro-optimization.html" title="Math function micro-optimization..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>9</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2011/02/math-function-micro-optimization.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MMR3g4fip7ImA9Wx9bEUw.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-7598443295376181029</id><published>2011-02-19T14:44:00.000+02:00</published><updated>2011-02-19T14:44:46.636+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-19T14:44:46.636+02:00</app:edited><title>Looking for a copy of my Revenge tool</title><content type="html">Dear Lazyweb,&lt;br /&gt;
&lt;br /&gt;
If anyone happens to have a copy of the Revenge (Radeon Reverse-Engineering Tool) Git repository, tarball, or code in any format, please comment on this post.&lt;br /&gt;
&lt;br /&gt;
I know one released tarball was named "revenge-1.0.1.tar.gz", but it is unfortunately lost due to the home directories being lost on people.freedesktop.org. I believe there were newer versions, too.&lt;br /&gt;
&lt;br /&gt;
I am reasonably (~90%) sure that I have the Git repository stored on one of my computers, unfortunately the computer in question is currently half the world away, and not online.&lt;br /&gt;
&lt;br /&gt;
Perhaps this post will serve as a reminder to backup your code in more than one location (excluding your workstation.) Yeah, my bad. :-(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-7598443295376181029?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wOjyMAkvK4EgkuBNeS5DsNmpdL4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wOjyMAkvK4EgkuBNeS5DsNmpdL4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wOjyMAkvK4EgkuBNeS5DsNmpdL4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wOjyMAkvK4EgkuBNeS5DsNmpdL4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/xxy2nXAlORk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/7598443295376181029/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2011/02/looking-for-copy-of-my-revenge-tool.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/7598443295376181029?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/7598443295376181029?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/xxy2nXAlORk/looking-for-copy-of-my-revenge-tool.html" title="Looking for a copy of my Revenge tool" /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>3</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2011/02/looking-for-copy-of-my-revenge-tool.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4HRX88fyp7ImA9Wx9bEEU.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-8549612954906947903</id><published>2011-02-19T05:08:00.000+02:00</published><updated>2011-02-19T05:08:54.177+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-19T05:08:54.177+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><title>Underwater ultrasonic data modulation?</title><content type="html">I'm currently looking for a bit of a combination hardware and software project to fill the boredom, so I've been thinking about underwater ROV's. Traditionally these use a surface tether for command communication (presumably with some basic protocol) and a feed from the camera and sensors.&lt;br /&gt;
&lt;br /&gt;
I'm wondering what kind of distance I could get with modulated ultrasonic transducers?&lt;br /&gt;
&lt;br /&gt;
I am quite sure how to design a suitable protocol; in fact I can reuse a lot of the bit-message code used in Quake 3 (there are lots of gems in there.) That provides me with compact messages, and with Huffman compression and an optimized table (based on either simulated or real-world packet capture) the compression ratio becomes pretty good. I think it would even be possible to send the surface a low-resolution/low-FPS video feed, while recording the high-resolution real-time feed to a solid-state drive.&lt;br /&gt;
&lt;br /&gt;
The challenging part would be modulating the data; I have no idea how to choose a carrier frequency and modulation scheme for low-frequency (longer range, less ambient noise) ultrasonic transducers.&lt;br /&gt;
&lt;br /&gt;
Furthermore, assuming the ROV and surface use the same frequency, the link would be half-duplex. This should be fine in theory as the protocol could be designed around this, but ultrasonic is still sound, so picking up an echo is a definite possibility (less so in open water.) I don't see this being too much of a problem (famous last words) because the protocol would be designed to be inherently unreliable: packet sequence number checking, CRC check, sanity check on values.&lt;br /&gt;
&lt;br /&gt;
Far more concerning would be the potential to output too much power and thus be damaging to divers ears underwater. I guess that would just be a matter of capping the output power at the maximum exposure limit for the length of the dive, minus an N percent safety margin.&lt;br /&gt;
&lt;br /&gt;
At least those Full Face Mask underwater communication systems seem to work very well for voice, and do not have any exposure limits that I know about. Quick Google search shows one rated for &lt;i&gt;"50 to 500 meters depending on Sea Conditions and noise levels."&lt;/i&gt; Of course, this is voice which is much higher bandwidth than a simple command stream and perhaps 640x480 compressed 1 FPS video.&lt;br /&gt;
&lt;br /&gt;
Anyone out there know about modulation schemes? There's a little on Google, but not too much; possibly I don't know what I'm looking for, though.&lt;br /&gt;
&lt;br /&gt;
Just a random brain-dump idea I've been thinking over; at least writing this post breaks the boredom somewhat and might even motivate me to work on code for the sinking ship that is Nokia. Last I checked the stock was down ~20% and dropping since Stephen Elop's announcement. Ah, back to my general state of pessimistic realism.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-8549612954906947903?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jgqHLC6-8-eQdj-kBKuCn4CNeKc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jgqHLC6-8-eQdj-kBKuCn4CNeKc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jgqHLC6-8-eQdj-kBKuCn4CNeKc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jgqHLC6-8-eQdj-kBKuCn4CNeKc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/CbutVLgGlEQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/8549612954906947903/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2011/02/underwater-ultrasonic-data-modulation.html#comment-form" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/8549612954906947903?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/8549612954906947903?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/CbutVLgGlEQ/underwater-ultrasonic-data-modulation.html" title="Underwater ultrasonic data modulation?" /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>9</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2011/02/underwater-ultrasonic-data-modulation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkABSXo9fip7ImA9Wx9VE00.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-4444403362821354321</id><published>2011-01-29T13:32:00.000+02:00</published><updated>2011-01-29T13:32:38.466+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-29T13:32:38.466+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Hell" /><category scheme="http://www.blogger.com/atom/ns#" term="New Zealand" /><title>!@#$ing drunkards outside...</title><content type="html">Yet another early morning reminder of how much I dislike New Zealand and it's people...&lt;br /&gt;
&lt;br /&gt;
I think if I should ever manage to return to living in Finland I'm going to buy our team many rounds of beer. See you guys sometime in the next few decades. :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-4444403362821354321?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zxYCu4wbzKydjCRCkydSOCDHDvA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zxYCu4wbzKydjCRCkydSOCDHDvA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zxYCu4wbzKydjCRCkydSOCDHDvA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zxYCu4wbzKydjCRCkydSOCDHDvA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/f_UnT2Th6JY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/4444403362821354321/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2011/01/ing-drunkards-outside.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/4444403362821354321?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/4444403362821354321?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/f_UnT2Th6JY/ing-drunkards-outside.html" title="!@#$ing drunkards outside..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>2</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2011/01/ing-drunkards-outside.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8BR3w7eCp7ImA9Wx9TEU8.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-7069348243339992643</id><published>2010-11-19T01:27:00.000+02:00</published><updated>2010-11-19T01:27:36.200+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-19T01:27:36.200+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Quake 3" /><category scheme="http://www.blogger.com/atom/ns#" term="Vacation" /><category scheme="http://www.blogger.com/atom/ns#" term="Airport" /><title>To the airport...</title><content type="html">Just FYI for anyone who is interested in the N900 ioquake3 work (there seems to be some interest lately.) I'm taking a short vacation where I'll be completely offline for about 6 days. See you when I'm back.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-7069348243339992643?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CDPpAI-ZaYwtSvcoSg1t-bCYk94/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CDPpAI-ZaYwtSvcoSg1t-bCYk94/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CDPpAI-ZaYwtSvcoSg1t-bCYk94/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CDPpAI-ZaYwtSvcoSg1t-bCYk94/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/c4n-RHcQ30c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/7069348243339992643/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2010/11/to-airport.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/7069348243339992643?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/7069348243339992643?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/c4n-RHcQ30c/to-airport.html" title="To the airport..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>4</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2010/11/to-airport.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcDSHY7fyp7ImA9Wx5XEEo.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-897963893021111973</id><published>2010-09-10T02:47:00.000+03:00</published><updated>2010-09-10T02:47:59.807+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-10T02:47:59.807+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Quake 3" /><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Hong Kong" /><category scheme="http://www.blogger.com/atom/ns#" term="XreaL" /><category scheme="http://www.blogger.com/atom/ns#" term="Airport Hotel" /><title>Quake 3 qgl API</title><content type="html">I'm sure having the qgl API made sense at some point in time (GL 1.x) however now it's just a pain for doing any kind of porting. The qgl API is a set of function pointers which are initialized by the renderer to point to the real gl API functions (or logging wrappers.) e.g. glClear() becomes qglClear()&lt;br /&gt;
&lt;br /&gt;
I think the original reason for this was logging GL calls (a valid reason, at the time) and handling extensions. IMHO logging could be implemented easier using a GL tracing library (there are a few; Google) and GREMEDY_string_marker for renderer specific messages (begin of function foobar(), etc.)&lt;br /&gt;
&lt;br /&gt;
Actually this is what Robert is doing for XreaL-ET branch, however it's not on the mainline branch yet. I think I'll cherry pick these changes over before doing more work on GLES2 for XreaL. Otherwise the qgl API is going to turn GLES2 support into a massive ifdef mess...&lt;br /&gt;
&lt;br /&gt;
I am quite interested to see what kind of performance SGX can get out of a real VBO optimized renderer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-897963893021111973?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3qNr3Fq0G5zS4UqexsWd21MbKpo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3qNr3Fq0G5zS4UqexsWd21MbKpo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3qNr3Fq0G5zS4UqexsWd21MbKpo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3qNr3Fq0G5zS4UqexsWd21MbKpo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/XllocjiseMU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/897963893021111973/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2010/09/quake-3-qgl-api.html#comment-form" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/897963893021111973?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/897963893021111973?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/XllocjiseMU/quake-3-qgl-api.html" title="Quake 3 qgl API" /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>11</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2010/09/quake-3-qgl-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUCSXwyfip7ImA9Wx5QF0w.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-8844885359366988379</id><published>2010-09-05T23:07:00.000+03:00</published><updated>2010-09-05T23:07:48.296+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-05T23:07:48.296+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Fail" /><category scheme="http://www.blogger.com/atom/ns#" term="New Zealand" /><title>Me, travel, and fail</title><content type="html">&lt;a href="http://goo.gl/photos/b7qg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="111" src="http://lh6.ggpht.com/_SwNjMGn1QH0/TIP3uoEcnKI/AAAAAAAAANU/-tBgYx2rZ8c/s200/_48980642_newzealand_earthquake2_0910.gif.gif" width="200" /&gt;&lt;/a&gt;It seems I'm rather prone to running into some kind of fail during my travels. Previously the Icelandic Volcanic ash Cloud, and now a &lt;a href="http://www.bbc.co.uk/news/world-asia-pacific-11183685"&gt;rather strong earthquake&lt;/a&gt; has hit Christchurch several days before my flight there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-8844885359366988379?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MKD1ji3hCd2esJbXjCnz0o42anQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MKD1ji3hCd2esJbXjCnz0o42anQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MKD1ji3hCd2esJbXjCnz0o42anQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MKD1ji3hCd2esJbXjCnz0o42anQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/91_j9Csq19U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/8844885359366988379/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2010/09/me-travel-and-fail.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/8844885359366988379?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/8844885359366988379?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/91_j9Csq19U/me-travel-and-fail.html" title="Me, travel, and fail" /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_SwNjMGn1QH0/TIP3uoEcnKI/AAAAAAAAANU/-tBgYx2rZ8c/s72-c/_48980642_newzealand_earthquake2_0910.gif.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2010/09/me-travel-and-fail.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUNSX8zeSp7ImA9WxFUEEs.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-1989551939952840397</id><published>2010-06-20T22:58:00.002+03:00</published><updated>2010-06-20T23:04:58.181+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-20T23:04:58.181+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Quake 3" /><category scheme="http://www.blogger.com/atom/ns#" term="Nokia" /><category scheme="http://www.blogger.com/atom/ns#" term="N900" /><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Helsinki" /><title>N900 Quake 3 isn't dead yet...</title><content type="html">It's been a while since I've had some free time to hack around with Quake 3 on the N900, and strictly speaking that is still the case, but I've started to look into some issues now. Lightmap support, fixing up the input, and adding support for SixAxis/Dual Shock 3 controllers. :)&lt;br /&gt;
&lt;br /&gt;
Okay, at this point I just have the hardware and basic input working on the device thanks entirely to &lt;a href="http://tomasz.sterna.tv/2010/02/play-games-on-nokia-n900-with-ps3-sixaxis-controller/"&gt;Tomasz Sterna (and others) work&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I hope tomorrow to get some tangible code added to ioquake3 N900 branch as well as testing out the possible lightmapping fixes and refining touchscreen based input for those who don't have PS3 controllers; I only brought mine today. Btw, does anyone else consider it a bit cheap of Sony not to include a USB to Mini-B cable with the controller, or does the PS3 console come with more than one cable?&lt;br /&gt;
&lt;br /&gt;
Yes, I know it's been a long time, and yes the TS input is currently &lt;strike&gt;slightly&lt;/strike&gt; broken. But well, you know the deal with free-time (or rather the lack thereof) projects...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-1989551939952840397?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MtPYHua9JJuRjU11l7GEi3HnGu8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MtPYHua9JJuRjU11l7GEi3HnGu8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MtPYHua9JJuRjU11l7GEi3HnGu8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MtPYHua9JJuRjU11l7GEi3HnGu8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/e6RsOafjRG0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/1989551939952840397/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2010/06/n900-quake-3-isnt-dead-yet.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/1989551939952840397?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/1989551939952840397?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/e6RsOafjRG0/n900-quake-3-isnt-dead-yet.html" title="N900 Quake 3 isn't dead yet..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>7</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2010/06/n900-quake-3-isnt-dead-yet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8NQnk6fip7ImA9WxFXFUk.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-7153439504094365261</id><published>2010-05-22T18:41:00.000+03:00</published><updated>2010-05-22T18:41:33.716+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-22T18:41:33.716+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Helsinki Summer" /><title>Rain in Helsinki...</title><content type="html">Apparently the forecast got it wrong, but none the less it's nice to hear the sound of thunder and rain in Helsinki (which doesn't seem to happen very often.)&lt;br /&gt;
&lt;br /&gt;
Unfortunately I've yet to buy any groceries, and now it's starting to look more like the great deluge out there...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-7153439504094365261?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/r2VIHtca9SLaF96kdrYM2pZrUZg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r2VIHtca9SLaF96kdrYM2pZrUZg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/r2VIHtca9SLaF96kdrYM2pZrUZg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r2VIHtca9SLaF96kdrYM2pZrUZg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/0srcTRzigrI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/7153439504094365261/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2010/05/rain-in-helsinki.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/7153439504094365261?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/7153439504094365261?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/0srcTRzigrI/rain-in-helsinki.html" title="Rain in Helsinki..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2010/05/rain-in-helsinki.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UASXs5fCp7ImA9WxFRE0U.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-2973481876511368074</id><published>2010-04-27T20:27:00.000+03:00</published><updated>2010-04-27T20:27:28.524+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-27T20:27:28.524+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Helsinki" /><category scheme="http://www.blogger.com/atom/ns#" term="New Zealand" /><category scheme="http://www.blogger.com/atom/ns#" term="Vacation" /><category scheme="http://www.blogger.com/atom/ns#" term="Airport" /><title>Airports ftw... yeah...</title><content type="html">I've finally made it back to Helsinki although my dislike for airports has probably reached monumental levels by now... Unfortunately I had a lot of bad transfers; most of them about 6 hours. Long enough to be annoying, but too short to get a hotel and some sleep. Next time, I'll plan a multi-stop journey so that I can actually sleep during the ~36+ hour journey. Bill Hicks is right on the money when it comes to children on airplanes.&lt;br /&gt;
&lt;br /&gt;
I didn't take many pictures during my vacation, but here's a good reason to remember to fill out the "stop delivering junk mail" form &lt;i&gt;before&lt;/i&gt; leaving for over a month. I also have to replace my house plant. The post office apparently doesn't use any no-junk-mail stickers. Quite fun sorting through that to find the important mails...&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/_SwNjMGn1QH0/S9cYh3fWszI/AAAAAAAAAJs/s-txyWrAxao/s1600/20100427_002.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://3.bp.blogspot.com/_SwNjMGn1QH0/S9cYh3fWszI/AAAAAAAAAJs/s-txyWrAxao/s320/20100427_002.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;
I brought back some nice teas from Australia: Indian Spice and Turkish Apple. Which is really just sugar, citric acid, and other flavorings (well, it tastes nice anyway.)&lt;br /&gt;
&lt;br /&gt;
Apparently it must have &lt;a href="http://alcoholism.about.com/od/heroin/ig/heroin/heroin_closeup.htm"&gt;looked interesting enough&lt;/a&gt; for customs to open my suitcase. The tea box was left open, but they were nice enough to not rummage through everything... The resemblance is uncanny though.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/_SwNjMGn1QH0/S9caxCvF1QI/AAAAAAAAAJ0/F7C3ixmP7Bw/s1600/20100427_004.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="179" src="http://3.bp.blogspot.com/_SwNjMGn1QH0/S9caxCvF1QI/AAAAAAAAAJ0/F7C3ixmP7Bw/s320/20100427_004.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Now just to sort out paper-work and other miscellaneous things, then back to the office tomorrow (hopefully not totally jet-lagged.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-2973481876511368074?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5gig6ZqX1RQr24nCKBL5tygD1gI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5gig6ZqX1RQr24nCKBL5tygD1gI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5gig6ZqX1RQr24nCKBL5tygD1gI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5gig6ZqX1RQr24nCKBL5tygD1gI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/k20XSLgPe2w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/2973481876511368074/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2010/04/airports-ftw-yeah.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/2973481876511368074?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/2973481876511368074?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/k20XSLgPe2w/airports-ftw-yeah.html" title="Airports ftw... yeah..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_SwNjMGn1QH0/S9cYh3fWszI/AAAAAAAAAJs/s-txyWrAxao/s72-c/20100427_002.jpg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2010/04/airports-ftw-yeah.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEGQHsyeyp7ImA9WxFUFkU.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-8472421060836221421</id><published>2010-04-19T16:51:00.001+03:00</published><updated>2010-06-28T04:30:21.593+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-28T04:30:21.593+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Hong Kong" /><category scheme="http://www.blogger.com/atom/ns#" term="Fail" /><category scheme="http://www.blogger.com/atom/ns#" term="New Zealand" /><category scheme="http://www.blogger.com/atom/ns#" term="Vacation" /><category scheme="http://www.blogger.com/atom/ns#" term="Airport" /><title>Mother Nature's a cold hearted bitch...</title><content type="html">&lt;a href="http://picasaweb.google.com/lh/photo/twvkV18RtwcJjm7uu-1N1g?feat=blogger" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://lh4.ggpht.com/_SwNjMGn1QH0/TCf4Ta63hXI/AAAAAAAAAKg/a_dy-W7SKlg/s320/20100417_003.jpg" width="320" /&gt;&lt;/a&gt;Unfortunately due to the EU airspace being closed because of the volcanic ash cloud I wasn't able to make it back to Helsinki; I ended up getting stuck in Hong Kong for a night (which was kind of cool; apart from the exceptionally expensive Airport Hotel.)&lt;br /&gt;
&lt;br /&gt;
Yeah, I was lazy and got the closest place, optimistically thinking this might only last a day or two. Finally I decided to get a flight back to New Zealand rather than stay for an unknown period of time in Hong Kong. I don't even want to think about the number of timezones I've crossed in the course of this fiasco... I'm sure the jet-lag will hit hard.&lt;br /&gt;
&lt;br /&gt;
Finnair are offering a refund for unused tickets (once they get around to processing it) so hopefully I will get at least some of my airfair back.&lt;br /&gt;
&lt;br /&gt;
Oh, and if I never hear the words &lt;i&gt;"final boarding call"&lt;/i&gt; or &lt;i&gt;"passengers on flight..."&lt;/i&gt; again, it will be far too soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-8472421060836221421?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kXm1HU75SYCOS7Ir9qCLq1XUKx4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kXm1HU75SYCOS7Ir9qCLq1XUKx4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kXm1HU75SYCOS7Ir9qCLq1XUKx4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kXm1HU75SYCOS7Ir9qCLq1XUKx4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/sjzGiLL35KI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/8472421060836221421/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2010/04/mother-natures-cold-hearted-bitch.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/8472421060836221421?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/8472421060836221421?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/sjzGiLL35KI/mother-natures-cold-hearted-bitch.html" title="Mother Nature's a cold hearted bitch..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_SwNjMGn1QH0/TCf4Ta63hXI/AAAAAAAAAKg/a_dy-W7SKlg/s72-c/20100417_003.jpg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2010/04/mother-natures-cold-hearted-bitch.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IFRHw9eip7ImA9WxBbFko.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-5509490892110937160</id><published>2010-03-15T19:51:00.000+02:00</published><updated>2010-03-15T19:51:55.262+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-15T19:51:55.262+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><category scheme="http://www.blogger.com/atom/ns#" term="New Zealand" /><category scheme="http://www.blogger.com/atom/ns#" term="Vacation" /><title>Start of my vacation in New Zealand...</title><content type="html">After the initial ~35 hours worth of flying and airports (I swear the food gets worse every international flight) and accidentally letting my visa lapse, resulting in a fine from Finnish immigration, I've made it back to New Zealand. (Well, actually a couple of days ago, but I was lazy about updating.)&lt;br /&gt;
&lt;br /&gt;
Fortunately I had an overnight lay-over in Sydney so I was able to get a hotel room for the night, have a shower, and sleep on a real bed. My schedule doesn't look so good on the return flight, though.&lt;br /&gt;
&lt;br /&gt;
I'm having a fairly relaxing vacation so far, with the exception that I'm going to need to have some wisdom teeth removed. The dentist in Helsinki thought they would be fine, but considering pain is the body's way of telling the mind something is wrong, and after seeing the X-ray myself, I'm going with the second opinion. Hopefully this won't ruin my planned trip to Melbourne too much; apparently the recovery time is about a week.&lt;br /&gt;
&lt;br /&gt;
I have been doing a little programming on personal projects, even though I said I wouldn't... :-) The next book that I want to read, &lt;a href="http://www.amazon.com/Sleepless-Novel-Charlie-Huston/dp/0345501136"&gt;Sleepless by Charlie Huston&lt;/a&gt; doesn't seem to be available in any bookstores in NZ yet. Perhaps I can pick that up in Melbourne; it's not worth the shipping costs for a single book from Amazon (UK or US) to New Zealand (although to Helsinki from the UK site is quite reasonable.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-5509490892110937160?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PKdQkzH8nAP1zR81hK0O6Q6sEL8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PKdQkzH8nAP1zR81hK0O6Q6sEL8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PKdQkzH8nAP1zR81hK0O6Q6sEL8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PKdQkzH8nAP1zR81hK0O6Q6sEL8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/33Ty7P7Gh1k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/5509490892110937160/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2010/03/start-of-my-vacation-in-new-zealand.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/5509490892110937160?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/5509490892110937160?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/33Ty7P7Gh1k/start-of-my-vacation-in-new-zealand.html" title="Start of my vacation in New Zealand..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>2</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2010/03/start-of-my-vacation-in-new-zealand.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8MSHc5eip7ImA9WxBbEk0.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-4098641084580444349</id><published>2010-03-10T09:41:00.000+02:00</published><updated>2010-03-10T09:41:29.922+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-10T09:41:29.922+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Quake 3" /><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Helsinki" /><title>Maemo 5/ioquake3 with native QVM's...</title><content type="html">A number of people have asked me questions along the lines of "can I play my favorite Quake 3 mod with your package on Maemo?" The answer &lt;i&gt;used to be&lt;/i&gt; that you could not, due to changes in the Client Game (cgame) module. I've now fixes these issues (mostly absolute vs. relative touchscreen events) so that an unmodified cgame will work correctly.&lt;br /&gt;
&lt;br /&gt;
The short answer: &lt;b&gt;yes, your favorite mod &lt;i&gt;should&lt;/i&gt; now work.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
I have done absolutely no testing other than checking that the vanilla, unmodified QVM's shipped on the Quake 3 CD work as expected. So your millage may vary.&lt;br /&gt;
&lt;br /&gt;
There are still a couple of issues with UI interaction, but since this is a highly requested feature, and I have a flight to catch in some hours, I'm pushing ioquake3 (1558-maemo6) to extras-devel now.&lt;br /&gt;
&lt;br /&gt;
Also, there are two cvar's you might like to tweak: sensitivity and accel_sensitivity.&lt;br /&gt;
&lt;br /&gt;
Pro-tip: the key combination "Fn (Blue Arrow) + =" is Escape, and "Fn + Sym" is console up/down. Yes, eventually I will write some better release notes. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-4098641084580444349?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2cP_LjL_NsxSZZd55nWLbpRbd6Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2cP_LjL_NsxSZZd55nWLbpRbd6Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2cP_LjL_NsxSZZd55nWLbpRbd6Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2cP_LjL_NsxSZZd55nWLbpRbd6Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/hJPZYadXE3g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/4098641084580444349/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2010/03/maemo-5ioquake3-with-native-qvms.html#comment-form" title="17 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/4098641084580444349?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/4098641084580444349?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/hJPZYadXE3g/maemo-5ioquake3-with-native-qvms.html" title="Maemo 5/ioquake3 with native QVM's..." /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>17</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2010/03/maemo-5ioquake3-with-native-qvms.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEERXs4fip7ImA9WxBUE0g.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-8656769954838858146</id><published>2010-02-28T14:02:00.001+02:00</published><updated>2010-02-28T14:03:24.536+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-28T14:03:24.536+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Helsinki" /><category scheme="http://www.blogger.com/atom/ns#" term="Winter" /><category scheme="http://www.blogger.com/atom/ns#" term="Vacation" /><title>Helsinki: Fun in the Sun... or Not</title><content type="html">It's been a bit longer between updates than I had hoped; busy with Maemo 6, random hacking projects, and of course (attempting to) have a life away from said activities. I have &lt;i&gt;finally&lt;/i&gt; booked my vacation back to New Zealand (and will also be visiting a friend in Melbourne, Australia.)&lt;br /&gt;
&lt;br /&gt;
I probably picked the worst day to do my pre-vacation shopping; the weather in Helsinki has warmed up just enough (+1 degrees C) that everything on the ground has turned into a slippery slush:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Number of times almost doing an unintentional back flip (or other such acrobatics): ~6.&lt;/li&gt;
&lt;li&gt;Number of times sprayed by passing cars: 2 (one of which I saw coming, but couldn't move out of the way...)&lt;/li&gt;
&lt;/ul&gt;However, it seems the Finns are not totally immune to walking on slush; I saw one unfortunate person do a back-slide into a melted puddle.&lt;br /&gt;
&lt;br /&gt;
This was just walking from Kaisaniemi to Rautatientori (&lt;a href="http://www.cityforum.fi/"&gt;Forum&lt;/a&gt;) and back; I still need to pickup a few things at Verkkokauppa. Unfortunately it doesn't look like the slush will be freezing again any time soon (more likely it melts slowly over time) so my vacation has turned out to be quite well timed. I'm leaving on the 10th.&lt;br /&gt;
&lt;br /&gt;
Since I tend not to get out nearly as much as I should, I'm going to attempt to try some things I've never done before. Currently &lt;a href="http://www.skydivingnz.com/tandem-skydiving/"&gt;tandem skydiving&lt;/a&gt; is something I'm considering; I figure jumping out of an airplane is about as far away from software engineering as you can get. ;-) (Yes, I know about &lt;a href="http://maemo.org/packages/view/n900fly/"&gt;n900fly&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
Anyone who has some ideas for things to do in Australia or New Zealand, please, leave a comment. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-8656769954838858146?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mk-BNcLX7d7FrD5maNdJgYDle9E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mk-BNcLX7d7FrD5maNdJgYDle9E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mk-BNcLX7d7FrD5maNdJgYDle9E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mk-BNcLX7d7FrD5maNdJgYDle9E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/mgF963VbuHA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/8656769954838858146/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2010/02/helsinki-fun-in-sun-or-not.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/8656769954838858146?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/8656769954838858146?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/mgF963VbuHA/helsinki-fun-in-sun-or-not.html" title="Helsinki: Fun in the Sun... or Not" /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><thr:total>3</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2010/02/helsinki-fun-in-sun-or-not.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUHQXY8cSp7ImA9WxBQGEg.&quot;"><id>tag:blogger.com,1999:blog-5203830418461309921.post-3586424019371706705</id><published>2010-01-18T09:00:00.002+02:00</published><updated>2010-01-19T00:03:50.879+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-19T00:03:50.879+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Quake 3" /><category scheme="http://www.blogger.com/atom/ns#" term="Nokia" /><category scheme="http://www.blogger.com/atom/ns#" term="N900" /><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Helsinki" /><title>ioquake3 on the N900</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_SwNjMGn1QH0/S1QIzjsEwWI/AAAAAAAAAGk/kEFIN72IGmM/s1600-h/20100118_007.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_SwNjMGn1QH0/S1QIzjsEwWI/AAAAAAAAAGk/kEFIN72IGmM/s200/20100118_007.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;Apparently my little after work project was cool enough to make the &lt;a href="http://ioquake3.org/2010/01/17/ioquake3-on-the-nokia-n900/"&gt;news page over at ioquake3.org&lt;/a&gt;. :-) I just thought I'd mention here that you can read some more about it in my earlier (first actually) blog post, and there are &lt;a href="http://picasaweb.google.com/omcfadde/OliverMcFadden#slideshow/5427959691542366642"&gt;more pictures over here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks again to &lt;a href="http://www.idsoftware.com/"&gt;id Software&lt;/a&gt; and &lt;a href="http://ioquake3.org/"&gt;ioquake3&lt;/a&gt; for a great code base! And to the people at Nokia and Maemo Summit for support and encouragement.&lt;br /&gt;
&lt;br /&gt;
Btw, if you do own an N900 and have played with the ioquake3 port, please leave your comments and suggestions for improvements in case I feel the urge for another weekend hacking session. (I am aware there have been problems installing the package in the past, but they &lt;i&gt;should&lt;/i&gt; now be fixed.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5203830418461309921-3586424019371706705?l=omcfadde.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Nw6LzkYn1tyl4Rtz6kouuHjA5Qo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Nw6LzkYn1tyl4Rtz6kouuHjA5Qo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Nw6LzkYn1tyl4Rtz6kouuHjA5Qo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Nw6LzkYn1tyl4Rtz6kouuHjA5Qo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OliverMcfadden/~4/mFZ-RpkvlOk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://omcfadde.blogspot.com/feeds/3586424019371706705/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://omcfadde.blogspot.com/2010/01/ioquake3-on-n900.html#comment-form" title="27 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/3586424019371706705?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5203830418461309921/posts/default/3586424019371706705?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OliverMcfadden/~3/mFZ-RpkvlOk/ioquake3-on-n900.html" title="ioquake3 on the N900" /><author><name>Oliver McFadden</name><uri>http://www.blogger.com/profile/06947239359915728130</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-9xrCJ5fwEKk/TbVZskRLEhI/AAAAAAAAARg/mEPupRGqenM/s220/South%2BPark%2BAvatar%2B2.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_SwNjMGn1QH0/S1QIzjsEwWI/AAAAAAAAAGk/kEFIN72IGmM/s72-c/20100118_007.jpg" height="72" width="72" /><thr:total>27</thr:total><feedburner:origLink>http://omcfadde.blogspot.com/2010/01/ioquake3-on-n900.html</feedburner:origLink></entry></feed>

