<?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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0QERHk5cCp7ImA9WxBXFE4.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577</id><updated>2010-01-26T03:01:45.728+11:00</updated><title>Never Read Passively</title><subtitle type="html">Document everything obsessively. Synthesize new ideas constantly. Never read passively. &lt;small&gt;&lt;a href="http://www.neverreadpassively.com/2008/03/how-to-think.html"&gt;[?]&lt;/a&gt;&lt;/small&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.neverreadpassively.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>109</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/NeverReadPassively" /><feedburner:info uri="neverreadpassively" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;CEQGR3w7eCp7ImA9WxBQGUg.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-5939729335055029151</id><published>2010-01-20T10:17:00.002+11:00</published><updated>2010-01-20T12:52:06.200+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-20T12:52:06.200+11:00</app:edited><title>My New iMac: The Five Year Plan</title><content type="html">After a lot of deliberation and research, I purchased a new Apple iMac for my home computer. The deliberation was because of the cost - I needed to&amp;nbsp;rationalize&amp;nbsp;the expense and suitability against the need.&lt;br /&gt;
&lt;br /&gt;
I have been using an iBook G4 since&amp;nbsp;late&amp;nbsp;2005 as my home machine, and now, a little more than 4 years later, the poor little laptop does not cut it. For comparison purposes, my old machine was a 1.33GHz PPC, with 512MB of RAM, a 12" screen, and a 40GB HDD. According to the &lt;a href="http://en.wikipedia.org/wiki/IBook"&gt;iBook Wikipedia entry&lt;/a&gt;, it was the last PPC model iBook. It didn't even have the capability to write DVDs, and at the time I purchased it, I was downgrading from a beast of a desktop PC to the&amp;nbsp;convenience&amp;nbsp;and elegance of an Apple laptop.&lt;br /&gt;
&lt;br /&gt;
It was time for an upgrade, and so I bought a top-of-the-line Apple all-in-one desktop machine: the &lt;a href="http://www.apple.com/au/imac/specs.html"&gt;27" iMac&lt;/a&gt;. I purcahsed it pre-upgraded with a 2.8Ghz quad-core Intel Core i7 and an extra 4GB RAM, totalling 8GB. I chose the 64-bit&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Intel_Core_i7"&gt;Intel Core i7&lt;/a&gt; based on the comparative performance to the Core i5 and Core 2 Duo in the benchmarks (&lt;a href="http://timon-royer.com/en/35/apple-27-imac-late-2009-core-i5-and-core-i7-benchmarks-are-out/"&gt;1&lt;/a&gt;, &lt;a href="http://www.barefeats.com/imi7.html"&gt;2&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.gizmodo.com.au/2009/11/27-inch-imac-benchmarks-core-i7-vs-core-i5/"&gt;3&lt;/a&gt;),&amp;nbsp;primarily&amp;nbsp;because of the so-called &lt;a href="http://en.wikipedia.org/wiki/Turbo_Boost"&gt;Turbo Boost&lt;/a&gt; dynamic performance that pushes the cores up to 3.46GHz and &lt;a href="http://en.wikipedia.org/wiki/Hyper-threading"&gt;Hyper-Threading&lt;/a&gt; which results in up to eight virtual cores. Other specifications include the bluetooth &lt;a href="http://www.apple.com/au/keyboard/"&gt;keyboard&lt;/a&gt; and &lt;a href="http://www.apple.com/au/magicmouse/"&gt;magic mouse&lt;/a&gt;, 1TB HDD, a DVDR/CDR, ATI &lt;a href="http://en.wikipedia.org/wiki/Radeon_hd_4850#Radeon_HD_4800"&gt;Radeon HD 4850&lt;/a&gt; graphics card with 512MB of GDDR3 memory, and a&amp;nbsp;gorgeous &lt;a href="http://en.wikipedia.org/wiki/LED-backlit_LCD_television#LED_Backlighting_Techniques"&gt;LED-backlit &lt;/a&gt;27-inch &lt;a href="http://en.wikipedia.org/wiki/TFT_LCD"&gt;TFT active-matrix&lt;/a&gt; liquid crystal display with &lt;a href="http://en.wikipedia.org/wiki/TFT_LCD#In-plane_switching_.28IPS.29"&gt;IPS technology&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The machine looks beautiful and is a computational beast. Needless to say, I'm happy with the purchase. I've been working on it a lot over the last week, re-building&amp;nbsp;my development environments and testing compilation and execution times, and have been very&amp;nbsp;pleased. I've had none of the&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Imac#27_inch_iMac_flickering_and_blackout_issues"&gt;alleged&amp;nbsp;problems&lt;/a&gt; that have been reported about this model iMac.&lt;br /&gt;
&lt;br /&gt;
I'm in it for the long haul. I've purchased Apples extended&amp;nbsp;warranty&amp;nbsp;(Apple Care) to cover me for three years and expect it to be useful until 2014 or 2015, perhaps with a&amp;nbsp;supplementary&amp;nbsp;laptop purchase between now and then.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-5939729335055029151?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/o1AFvPVZHIk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/5939729335055029151/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=5939729335055029151" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/5939729335055029151?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/5939729335055029151?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/o1AFvPVZHIk/my-new-imac-five-year-plan.html" title="My New iMac: The Five Year Plan" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2010/01/my-new-imac-five-year-plan.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUEQXg4eSp7ImA9WxBSEUw.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-4648181316399925204</id><published>2009-12-18T16:30:00.000+11:00</published><updated>2009-12-18T16:30:00.631+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-18T16:30:00.631+11:00</app:edited><title>A Genetic Algorithm in Google's Go Language</title><content type="html">Like many programmers, I tracked &lt;a href="http://www.readwriteweb.com/archives/google_go_open_source_language.php"&gt;the announcement&lt;/a&gt; of the &lt;a href="http://golang.org/"&gt;Go Programming Language&lt;/a&gt; by Google last month, and like many programmers, I've been having a play around with it. Because of the newness of the language, there is very little code to look at to get a feeling for the language. I spent what time I could find looking through the code for the &lt;a href="http://golang.org/pkg/"&gt;golang API&lt;/a&gt; in an attempt to gleam useful idioms. I've started a &lt;a href="http://github.com/jbrownlee/learning-go"&gt;learning-go project&lt;/a&gt; for myself on github to collect links and code from &lt;a href="http://golang.org/doc/go_tutorial.html"&gt;tutorials&lt;/a&gt; and &lt;a href="http://golang.org/doc/effective_go.html"&gt;examples&lt;/a&gt; I come across.&lt;br /&gt;
&lt;br /&gt;
Beyond the syntax, I'm interested in exploring how to make effective use of &lt;a href="http://golang.org/doc/effective_go.html#goroutines"&gt;goroutines&lt;/a&gt; and &lt;a href="http://golang.org/doc/effective_go.html#channels"&gt;channels&lt;/a&gt; in program design. I've spent some free time over the last week or so writing a &lt;a href="http://github.com/jbrownlee/learning-go/blob/master/geneticalgorithm.go"&gt;simple genetic algorithm in go&lt;/a&gt;, and now that it compiles and looks ok-enough to talk about, I think that making good use of this language requires a slight shift in thinking about an application toward flows of information.&lt;br /&gt;
&lt;br /&gt;
Having spent so many years researching computational intelligence and&amp;nbsp;evolutionary&amp;nbsp;computation, the genetic algorithm is burned into my brain. It's one of the first simple non-trivial programs I like to build to play-test a new language or platform (for example, see &lt;a href="http://www.neverreadpassively.com/2009/12/genetic-algorithm-in-lua.html"&gt;a genetic algorithm in lua&lt;/a&gt; from earlier this month).&lt;br /&gt;
&lt;br /&gt;
The algorithm implemented is the classical Genetic Algorithm (GA) applied to the onemax problem, where the system must induce a bitstring of unity (all ones) from a cost function that only specifies the number of ones located anywhere in a candidate solution without specifying where the errors are located. The algorithm uses a bitstring representation, one-point crossover, point mutations, and tournament selection.&amp;nbsp;The file is located in my &lt;a href="http://github.com/jbrownlee/learning-go"&gt;learning go project&lt;/a&gt;, or you can access the &lt;a href="http://github.com/jbrownlee/learning-go/blob/master/geneticalgorithm.go"&gt;go file for the genetic algorithm&lt;/a&gt; directly. See below for an embedded gist version of the file (sorry to those in RSS feed readers that don't like javascript).&lt;br /&gt;
&lt;br /&gt;
&lt;script src="http://gist.github.com/259307.js?file=geneticalgorithm.go"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
I started out by trying to build an object-oriented version of the algorithm, but shifted to a procedural implementation for simplicity. Go does have objects, but they involve defining a struct for data and&amp;nbsp;associating&amp;nbsp;functions with the struct.&amp;nbsp;Inheritance&amp;nbsp;is not provided in favor for a compositional pattern. The language is young but it already has (what initially feels like)&amp;nbsp;inconsistent&amp;nbsp;rules for things like semi-colons and multiple ways for doing the simplest things like variable declarations. Nevertheless, the script-language like feel quickly becomes comfortable (compared to some ANSI C which I've been using at work recently).&lt;br /&gt;
&lt;br /&gt;
My algorithm implementation is not optimal or efficient, and it's not event that pretty. What it does show is basically a port of a procedural implementation of a genetic algorithm in go language syntax. The code has examples of objects (solution), multiple return values, some library usage (data structures and random numbers) and some of the concurrent features. A genetic algorithm is&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Embarrassingly_parallel"&gt;embarrassingly&amp;nbsp;parallel&lt;/a&gt;, so there are&amp;nbsp;numerous&amp;nbsp;ways to implement the algorithm to exploit this. I chose a simple step-wise multiplexing of operations like fitness evaluation, selection, and reproduction that used goroutnes to issue the work to execute in parallel and used a channel in a barrier pattern to wait for and collect the aggregation of these tasks.&lt;br /&gt;
&lt;br /&gt;
I really like the ease with which one can manage tasks in parallel without resorting to explicit synchronisation blocks and patterns or booting threads. What became apparent while lashing my GA together was that this ease of parallelism promotes a different structure to programming. Rather than writing a linear&amp;nbsp;procedural&amp;nbsp;application and marking-up the parallelisable parts of the code after the fact, one should better design a program to exploit the parallel constructs (no shit!). This is obvious in retrospect, and would have been if I'd sat down and actually designed a parallel simple genetic algorithm.&lt;br /&gt;
&lt;br /&gt;
This leads me to thoughts about the flow of information in the program. These observations should&amp;nbsp;resonate&amp;nbsp;if you've worked with message passing or event-driven infrastructure. Consider th&lt;a href="http://golang.org/doc/go_tutorial.html"&gt;e prime number filter&lt;/a&gt; provided on the go website (or &lt;a href="http://github.com/jbrownlee/learning-go/blob/master/primes.go"&gt;my&amp;nbsp;implementation&lt;/a&gt;), it provides a great example of this type of thinking where goroutines manage the branching in the flow of data down through the filters, and channels bring the results back to where they are needed. The same pattern may be adopted for the GA, where each iteration of the algorithm may be represented as a pipeline of channels and data reservoirs where goroutnes consume, compute, and produce moving candidate solutions through to the next iteration. If I find some time, I'll wire up an example.&lt;br /&gt;
&lt;br /&gt;
Enough from me, &lt;a href="http://golang.org/"&gt;go play!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-4648181316399925204?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/C4VtPw0yVfk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/4648181316399925204/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=4648181316399925204" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/4648181316399925204?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/4648181316399925204?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/C4VtPw0yVfk/genetic-algorithm-in-googles-go.html" title="A Genetic Algorithm in Google's Go Language" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/12/genetic-algorithm-in-googles-go.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEERng7fSp7ImA9WxNaGUw.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-4177187297119995779</id><published>2009-12-04T19:00:00.003+11:00</published><updated>2009-12-04T19:00:07.605+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-04T19:00:07.605+11:00</app:edited><title>Great Science and Technology Podcasts</title><content type="html">I've had a few people asking me what podcasts I consume so I thought I'd put it in a post.&lt;br /&gt;&lt;br /&gt;I've been a heavy podcast consumer since about the time I bought my first iPod (a first generation back 2GB &lt;a href="http://en.wikipedia.org/wiki/Ipod_nano"&gt;ipod nano&lt;/a&gt;, bought in 2004 or 2005). I've always listened to podcast's on my run (a few times a week). When working on &lt;a href="http://www.it.swin.edu.au/personal/jbrownlee/"&gt;my research&lt;/a&gt;, I used to go for an hour long walk each day for lunch and consume. These days, I'll consume on my daily commute to and from my day job.&lt;br /&gt;&lt;br /&gt;In no particular order of priority, here are the awesome podcasts I consume:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Science&lt;/span&gt;&lt;br /&gt;I removed Science, and the Naked Scientist feeds from by diet about 2-3 years ago, there was far too much redundancy in the science stories when listened in conjunction with Nature, The Science Show, SciFri, and Science Times.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.nature.com/nature/podcast/"&gt;Nature&lt;/a&gt;. Weekly science news, and interviews with authors from nature articles. One of the best science podcasts around!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.abc.net.au/rn/scienceshow/default.htm"&gt;Science Show&lt;/a&gt;. Australian science show with a &lt;a href="http://en.wikipedia.org/wiki/Robyn_Williams"&gt;veteran science reporter&lt;/a&gt;. My favourite because it's great quality with a local twist.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sciencemag.org/about/podcast.dtl"&gt;Science&lt;/a&gt;. Similar format to Nature, although not quiet as good. Format may have changed as I haven't listened to it in quite some time.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.thenakedscientists.com/HTML/podcasts/"&gt;The Naked Scientists&lt;/a&gt;. Great format with 'live' experiments at schools, science news, and interviews. At the time when I was listening to this (a few years ago), there was a lot of overlap with nature, I think because some of the same people were working on both podcasts. Things may be different now.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nytimes.com/ref/multimedia/podcasts-free.html"&gt;NY Science Times&lt;/a&gt;. I am really into the format of this brief podcast. They have science news, health information, and reporting with columnists for the science part of the NYTimes. They also don't just focus on hard science and include health and social sciences.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sciencefriday.com/"&gt;NPR Science Friday&lt;/a&gt;. A callback science show on NPR with another &lt;a href="http://en.wikipedia.org/wiki/Ira_Flatow"&gt;veteran science reporter&lt;/a&gt;. I have always enjoy this show because of the mixture of hard and softer science shows. This weekly show typically consists of interviews with the scientists involved with the breaking science stories of the week or upcoming science books and shows. The call in questions are typically cringe-worthy.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Technology&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://itc.conversationsnetwork.org/"&gt;ITConversations&lt;/a&gt;. This is a fire hose of technology conferences. I subscribe to the master feed and filter ruthlessly with my skip-track button. I've also back-listened on many of the O'Reilly conferences. Some (weekly?) fixtures I enjoy the most include: &lt;a href="http://en.wikipedia.org/wiki/Jon_Udell"&gt;Jon Udell&lt;/a&gt;'s &lt;a href="http://itc.conversationsnetwork.org/series/innovators.html"&gt;Interviews With Innovators&lt;/a&gt;, &lt;a href="http://www.windley.com/"&gt;Phil Windley&lt;/a&gt;'s &lt;a href="http://itc.conversationsnetwork.org/series/technometria.html"&gt;Technometria&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/Moira_Gunn"&gt;Moira Gunn&lt;/a&gt;'s &lt;a href="http://itc.conversationsnetwork.org/series/technation.html"&gt;tech nation&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.robotspodcast.com/"&gt;Robots&lt;/a&gt;. News and interviews in the field of robotics. I'm not a huge robot freak, but I really do appreciate the application of artificial intelligence and machine learning techniques in physical systems. These guys are a little amateurish (English as a second language?), although the science is hard the way I like it and their intro soundtrack is awesome!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://se-radio.net/"&gt;Software Engineering Radio&lt;/a&gt;. Interviews and discussions on software engineering topics. I'm new to this one, so I cannot accurately comment. It seems good so far, although sometimes a little dry or textbook (maybe a little too close to my undergrad).&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ict.csiro.au/hail/"&gt;CSIRO HAIL Seminar Series&lt;/a&gt;. &lt;a href="http://en.wikipedia.org/wiki/CSIRO"&gt;CSIRO&lt;/a&gt; is a premiere government research institution in Australian and HAIL stands for Human Factors, Artificial Intelligence, Language Technology. There are occasional gems in this stream on AI and interesting research, although many lectures are in topics I am not that interested in listening through on a run. &lt;a href="http://www.csiro.au/products/CSIROpod.html"&gt;CSIROpod&lt;/a&gt; is a new podcast on the scene from the same organization and I'm itching to give it a try.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.singularitysummit.com/"&gt;Singularity Summit&lt;/a&gt;. Talks from the annual conference on the &lt;a href="http://en.wikipedia.org/wiki/Technological_singularity"&gt;technological singularity&lt;/a&gt;. The talks provide interesting insight into the current frontiers of Artificial Intelligence and I always get a lot out of them! They can be slow at releasing the audio for the talks, but here are links to the files for &lt;a href="http://singinst.org/media/singularitysummit2006"&gt;2006&lt;/a&gt;, &lt;a href="http://singinst.org/media/singularitysummit2007"&gt;2007&lt;/a&gt; and &lt;a href="http://singinst.org/media/singularitysummit2008"&gt;2008&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Other&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.abc.net.au/rn/boyerlectures/default.htm"&gt;The Boyer Lectures&lt;/a&gt;. An &lt;a href="http://en.wikipedia.org/wiki/Boyer_lectures"&gt;annual lecture series&lt;/a&gt; delivered by prominent Australians. The 2008 series by &lt;a href="http://www.abc.net.au/rn/boyerlectures/index/date2008.htm"&gt;Rupert Murdoch on the changes to journalism&lt;/a&gt; where particularly interesting.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/A_Short_History_of_Nearly_Everything"&gt;A Short History of Nearly Everything&lt;/a&gt;, by Bill Bryson (check itunes or amazon). This is an excellent book, and an excellent audio book on the history of science. I used to get through a chapter or two on a long run, and I think I've listened to it at least twice. &lt;/li&gt;&lt;/ul&gt;I also remember listening to a few semesters of biology lectures one year. I can't remember which school, but it was likely somewhere in the mess of &lt;a href="http://ocw.mit.edu/OcwWeb/web/home/home/index.htm"&gt;MIT Open Courseware&lt;/a&gt;. I remember the content being very detailed and learning a lot about plant reproduction, genomes, and detailed critique of Darwin's origin of species.&lt;br /&gt;&lt;br /&gt;There may be others, but these are all the great one's that come to mind. If you listen to any similarly awesome podcasts on science or technology, please spreed the word!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-4177187297119995779?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/ar8Fo42qXtc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/4177187297119995779/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=4177187297119995779" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/4177187297119995779?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/4177187297119995779?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/ar8Fo42qXtc/great-science-and-technology-podcasts.html" title="Great Science and Technology Podcasts" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/12/great-science-and-technology-podcasts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cEQXg8cCp7ImA9WxNaGE8.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-590963968539779555</id><published>2009-12-03T19:30:00.002+11:00</published><updated>2009-12-03T19:30:00.678+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-03T19:30:00.678+11:00</app:edited><title>A Genetic Algorithm in Lua</title><content type="html">I've been evaluating the &lt;a href="http://www.lua.org/"&gt;Lua Programming Language&lt;/a&gt; at work for some embedded project. I really like this scripting language, if for nothing else other than it is so small and lightweight, yet almost as expressive as Ruby.&lt;br /&gt;&lt;br /&gt;Anyway, I've created a small '&lt;a href="http://github.com/jbrownlee/learning-lua"&gt;learning lua&lt;/a&gt;' project on github and collected a bunch of useful resources for developers to get started. I also made an attempt to use the language in anger and wrote a &lt;a href="http://github.com/jbrownlee/learning-lua"&gt;simple genetic algorithm in lua&lt;/a&gt;. If there are any Lua pro's out there, I'd love to hear about tweaks and idioms I could use to improve the example. I've copied the code into a gist and embedded it below, enjoy:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/247952.js?file=genetic_algorithm.lua"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;The genetic algorithm uses tournament selection, one-point crossover, point mutations and a binary string representation. The algorithm is applied to the classical OneMax problem. Some exercises for the reader my include changing the bitstring representation to &lt;a href="http://www.lua.org/manual/5.1/manual.html#5.5"&gt;tables&lt;/a&gt;, and to change the organization of the algorithm to use &lt;a href="http://lua-users.org/wiki/ObjectOrientedProgramming"&gt;objects&lt;/a&gt; in a &lt;a href="http://en.wikipedia.org/wiki/Strategy_pattern"&gt;strategy pattern&lt;/a&gt; (for the problem and the algorithm).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-590963968539779555?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/LPponT6fIb8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/590963968539779555/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=590963968539779555" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/590963968539779555?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/590963968539779555?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/LPponT6fIb8/genetic-algorithm-in-lua.html" title="A Genetic Algorithm in Lua" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/12/genetic-algorithm-in-lua.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMMQX0yeCp7ImA9WxNaFUo.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-2702234318937797729</id><published>2009-11-30T21:38:00.000+11:00</published><updated>2009-11-30T21:38:00.390+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-30T21:38:00.390+11:00</app:edited><title>Random Project Ideas</title><content type="html">I've done very little on the side project front since coming back &lt;a href="http://www.neverreadpassively.com/2009/10/back-from-china-trip.html"&gt;from china&lt;/a&gt;. The trip shifted my focus to more tangible things and I've had trouble finding motivation to work on more abstract projects, especially after putting in eight hours at &lt;a href="http://aosgrp.com/"&gt;my day job&lt;/a&gt;. I've been using twitter (&lt;a href="http://twitter.com/jbrownlee"&gt;follow me!&lt;/a&gt;) as a release valve, but I yearn for a meaty side project again.&lt;br /&gt;&lt;br /&gt;Anyway, I thought I'd describe some moderately sized projects that have been jostling around in my head over the last month:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Bot Book&lt;/span&gt;. A friend recently posted a list of skills he'd like to acquire before finishing his PhD and one of them was to write a Quake bot using a neural network. I pointed out my old &lt;a href="http://www.scribd.com/doc/18650673/Ecosystem-Constructing-a-simple-selfperpetuating-society-of-adaptable-agents"&gt;ecosystem project in Quake2&lt;/a&gt;, &lt;a href="http://homepages.paradise.net.nz/nickamy/neuralbot/nb_about.htm"&gt;Neural Bot&lt;/a&gt;, and &lt;a href="http://neuralnetworks.ai-depot.com/bots/"&gt;UN Bot&lt;/a&gt; as places to get started. Briefly looking at those projects got me thinking about how much I was into trying to understand and build quake bots all those years ago. I've recently been working in the area of &lt;a href="http://en.wikipedia.org/wiki/Belief-Desire-Intention_software_model"&gt;BDI intelligent agents&lt;/a&gt; and I started thinking about comparing and contrasting these two approaches of autonomous control. My vision is to dig up the source code for all of the Quake, Quake2, and Quake3 bots I can find and study each in turn, describing the main sub-systems and most importantly the structures used to realise autonomous control (most commonly as hierarchical finite state machines). The book would be a summary of each of these studies and finally an abstraction of the general approach. The title might be something like: Bots: &lt;span style="font-style: italic;"&gt;Lessons about autonomous control from computer game bots&lt;/span&gt; (or something more catchy). Each bot represents a different individual programmers approach to the problem, and there were a lot of bots made for these games. I'm really interested in the abstraction of all of these studies contrasted to more academically rigorous BDI, are there some great ideas in there not being exploited as much as they should in other domains?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Bioinformatics&lt;/span&gt;. I cannot shake my interest in the field. I've been poking around computational biology for many years now, hacking on &lt;a href="http://www.scribd.com/doc/22946886/Protein-Folding-A-Benchmark-Combinatorial-Optimization-Problem"&gt;protein folding prediction&lt;/a&gt;, and sniffing around related problems and suitable machine learning algorithms. I've been thinking pretty seriously about getting into a night course such as a graduate diploma or masters program in bioinformatics. The cost is AU$20K upwards, and I look back on the fist full of degrees I've already accumulated and think that maybe a more direct approach would be warranted. Although a night class can provide the structure and commitment to acquire the new skills required to work in the field, I'm sure self education and on the job learning would be enough, given good mentoring. There is no doubt to me that this field is a rising star (unlike applied computational intelligence), even in the technology backwater where I live. I think a reasonable first step would be to bash out a series of blog post (reports) on the field in general, open problems, learning materials, and local/world renown institutions, just to boost general familiarity with the field before more substantial (costs) steps are taken.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Canvas (HTML 5.0)&lt;/span&gt;. The new &lt;a href="http://en.wikipedia.org/wiki/Canvas_%28HTML_element%29"&gt;canvas&lt;/a&gt; element in HTML 5 is a graphical context allowing free-form 2D and 3D graphics in the browser (written in javascript). The demos have had me excited for a while now, but it is libraries like &lt;a href="http://processingjs.org/"&gt;processing.js&lt;/a&gt; that have pushed me over the edge. Rather than &lt;a href="http://github.com/jbrownlee/natural-selection"&gt;hacking on native iPhone apps&lt;/a&gt;, I would much rather realize &lt;a href="http://www.neverreadpassively.com/2009/03/iphone-resurrection-and-new-iphone-app.html"&gt;my dreams&lt;/a&gt; of a distributed creature morphology evolution simulator (game) in the browser capable of running of any web-capable device. I'm sure there would be some hard work getting the physics engine (collision detection solver) running fast enough in interpreted javascript, but I believe the problems are solvable, even if one resorts to faster interpreters and faster CPU's to drive them.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;LISP&lt;/span&gt;. Frankly, if you're a programmer you will eventually come to realise LISP is awesome. Although I've &lt;a href="http://github.com/jbrownlee/learning-lisp"&gt;started my pilgrimage&lt;/a&gt;, I am a long way from mastering, let alone being productive in a dialect. I need to stop dancing around and either build something big and real in the language or to work through a book end-to-end (&lt;a href="http://gigamonkeys.com/book/"&gt;practical common lisp&lt;/a&gt; of course). Both of these strategies have worked for me before in rapidly acquiring new languages. I was thinking of dedicating the Christmas break to one of these tasks, we'll see...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Stackoverflow&lt;/span&gt;. I consume a lot of podcasts during my commute and while running. I subscribe to &lt;a href="http://itc.conversationsnetwork.org/"&gt;itconversations&lt;/a&gt;, and occasionally a stackoverflow podcast will find it's way into my playlist. I just about always skip it. The guys maybe smart dudes, or a the very least write about &lt;a href="http://www.joelonsoftware.com/"&gt;interesting&lt;/a&gt; &lt;a href="http://www.codinghorror.com/blog/"&gt;things&lt;/a&gt; on occasion, but they produce a really crap podcast. Anyway, their joint venture - the &lt;a href="http://stackoverflow.com/"&gt;stackoverflow site&lt;/a&gt; - is a pretty kick ass programmer Q/A repository. I have not contributed to it at all, but I have started searching various &lt;a href="http://stackoverflow.com/questions/tagged/artificial-neural-network"&gt;keywords&lt;/a&gt; and &lt;a href="http://stackoverflow.com/questions/tagged/genetic-algorithms"&gt;tags&lt;/a&gt; and I think I could contribute a lot, some of which might even be coherent or useful. What's holding me back is the investment. Each answer would be about the same investment as would be required for a small wikipedia entry (which &lt;a href="http://en.wikipedia.org/wiki/User:Jasonb05"&gt;I've been known to write&lt;/a&gt;). My problem is whether or not there is any return on that investment (as I think there is with wikipedia). Is it ego-fulfilling research (like making a slashdot/reddit/hackernews comment) or is it truly a contribution to the a community (however niche)? &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Algorithms Book&lt;/span&gt;. I feel guilty. I want to write and publish a book (&lt;a href="http://www.scribd.com/doc/18118700/Clonal-Selection-as-an-Inspiration-for-Adaptive-and-Distributed-Information-Processing"&gt;thesis&lt;/a&gt; doesn't count) before I turn 30. My &lt;a href="http://www.neverreadpassively.com/2009/01/new-project-inspired-algorithms.html"&gt;inspired algorithms project&lt;/a&gt; was my concerted effort this year towards that goal, a project I started this time last year while job searching. I still have a bunch of copy (in latex) and code (in ruby) on my drive, some of which is &lt;a href="http://www.inspiredalgorithms.com/"&gt;on the web&lt;/a&gt;. I am less convinced anyone will want (pay for) the book, even after &lt;a href="http://www.neverreadpassively.com/2009/08/what-is-good-optimization-algorithm.html"&gt;my efforts to optimize its content&lt;/a&gt;. Nevertheless, I do still believe it's a book I would want to have on my desk about 5-10 years ago. A book for a hack of a programmer interested in AI. I need to get off my ass, cut the scope of the book, and push out a complete 1.0 to friends (the web?) for comment, or weasel out and kill the project.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;MapReduce and Evolutionary Computation&lt;/span&gt;. The map reduce paradigm for distributed problem solving is interesting enough, but I've noticed more and more &lt;a href="http://lucene.apache.org/mahout/"&gt;machine learning algorithms being ported&lt;/a&gt; to the approach to run on platforms like &lt;a href="http://en.wikipedia.org/wiki/Hadoop"&gt;Hadoop&lt;/a&gt;. I am specifically interested in the approaches to map evolutionary algorithms to the paradigm as my intuition tells me there are a myriad of ways this could be achieved. I want to read the &lt;a href="http://www.google.com.au/#hl=en&amp;amp;q=map+reduce+genetic+algorithm"&gt;literature&lt;/a&gt; and bash out a few ways in small case studies (ruby) and see if there is something truly interesting to it, or if it really is equivalent to the classical parallel approach. New computational paradigms typically open up interesting avenues on classical approaches, and this has happened before with EC with the implementation of the algorithm to multiple-CPU and multiple-machine computing platforms in the 80's and 90's resulting in a sub-field of diffuse and parallel evolutionary algorithms.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;There are some good ideas here, but I need to pick one or two and get to work (thoughts?). I don't want to sit around &lt;a href="http://www.scribd.com/doc/22949565/Unexplored-Territory-Seeds-For-Future-Research-Investigations"&gt;thinking up cool project ideas&lt;/a&gt; forever and end up doing nothing. &lt;span style="font-weight: bold;"&gt;I'm a maker, I need to build things!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-2702234318937797729?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/Qm54v5wA2Y4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/2702234318937797729/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=2702234318937797729" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/2702234318937797729?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/2702234318937797729?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/Qm54v5wA2Y4/random-project-ideas.html" title="Random Project Ideas" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/11/random-project-ideas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQERnk4eip7ImA9WxNVEEU.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-5329857616230205444</id><published>2009-10-21T11:40:00.000+11:00</published><updated>2009-10-21T11:51:47.732+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-21T11:51:47.732+11:00</app:edited><title>Back from China Trip</title><content type="html">Well I'm back from a month long holiday in China. The goal was to spend time with my wife's family and then relax on a sort of honeymoon.&lt;br /&gt;&lt;br /&gt;We spent the first two weeks in &lt;a href="http://en.wikipedia.org/wiki/Beijing"&gt;Beijing&lt;/a&gt; (east of china), staying in a family apartment in &lt;strong style="font-weight: normal;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Nanmencang&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Hutong&lt;/span&gt; (near ghost street, the military hospital, and the old &lt;/strong&gt;grain warehouses from the Yuan Dynasty&lt;strong style="font-weight: normal;"&gt;)&lt;/strong&gt;, only 20 minutes walk from &lt;a href="http://en.wikipedia.org/wiki/Tiananmen_Square"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Tiananmen&lt;/span&gt; Square&lt;/a&gt; and the &lt;a href="http://en.wikipedia.org/wiki/Forbidden_city"&gt;Forbidden City&lt;/a&gt;. We visited many of the sights including the &lt;a href="http://en.wikipedia.org/wiki/Great_wall"&gt;Great Wall&lt;/a&gt; at &lt;a href="http://en.wikipedia.org/wiki/Badaling"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Badaling&lt;/span&gt;&lt;/a&gt;, the &lt;a href="http://en.wikipedia.org/wiki/Summer_palace"&gt;Summer Palace&lt;/a&gt;, the &lt;a href="http://en.wikipedia.org/wiki/Forbidden_city"&gt;Forbidden City&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Beihai_Park"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Beihai&lt;/span&gt; Park&lt;/a&gt;, the &lt;a href="http://en.wikipedia.org/wiki/Temple_of_heaven"&gt;Temple of Heaven&lt;/a&gt;, the &lt;a href="http://en.wikipedia.org/wiki/Beijing_National_Stadium"&gt;Bird's Nest&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Beijing_National_Aquatics_Center"&gt;Water Cube&lt;/a&gt;, and lots of markets (I bought mostly clothes, gifts, and a cool microlight helicopter for pocket change).&lt;br /&gt;&lt;br /&gt;The markets were really interesting from the perspective of the selling culture. Every purchase involved a little dance of the seller trying to talk up the product and extract as much cash as possible from the buyer, and the buyer faining disinterest in the product, questioning the quality, and attempting to achieve the lowest price possible. Too aggressive, and the dance abruptly finished. From trinkets to bags of fake polo shirts to fake watches, a balance had to be negotiated to ensure the seller got their margin and the customer walked away happy. Once you achieved a purchase, tested each others metal, you could then bargain for other items the seller was pushing with a lot less resistance.&lt;br /&gt;&lt;br /&gt;The interesting part for me was the aggressiveness of the sellers to push their wares, from yelling at you to grabbing you, to putting products in your bag and asking for the money. A '&lt;span style="font-style: italic;"&gt;get a sale at any cost&lt;/span&gt;' mentality. I was also very impressed that these young girls could switch languages and be functional (persuasive) so rapidly. Mandarin and English were the main two, but I was cases of girls trying Russian, German, and Spanish. More than that, I could clearly see differences in persuasive strategy between nationalities. More coy and playful with European men, child like to Russian men, confrontational with Chinese women, etc.&lt;br /&gt;&lt;br /&gt;Besides the the tourist thing I was watching out for technology and captured some observations:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mobile phones were everywhere from the tourists, to the shoppers in department stalls, to grandmas riding bicycles through the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;hutong&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Most phones were simple handsets, although i did see a handful of unrecognizable smart phones and even a few &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;iPhones&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Sales staff in small shops and department stalls glued to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;PC's&lt;/span&gt; either watching &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;divx&lt;/span&gt; TV shows or on chat clients. I learned that chat is used a lot for direct Q&amp;amp;A with stores. We even used it ourselves to ask questions about flights and tours.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A friend spent some time in a poor village where a boy used the hold music on his &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;telecom&lt;/span&gt; service number as a radio (an interesting case of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;exaptation&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;I saw a heap of fake &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;iPhones&lt;/span&gt; in the markets although failed to make the effort to see any in action&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;October 1st was the national day and marked &lt;a href="http://www.nytimes.com/2009/10/02/world/asia/02china.html"&gt;60 years since liberation&lt;/a&gt; (communists oust the nationals in the &lt;a href="http://en.wikipedia.org/wiki/Chinese_Civil_War"&gt;Chinese Civil War&lt;/a&gt; A.K.A. war of liberation). In the preceding weeks, security at train stations, tourist sites, and in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;CBD&lt;/span&gt; (down town) was &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;ramping&lt;/span&gt; up with x-ray bag checks and soldiers on street corners. Around the square where the action took place there were a clear and strong military presence - I'm talking big guys waring armor with big scary guns. The city went into lock down the day before and even the airport was shutdown on the day of the celebration.&lt;br /&gt;&lt;br /&gt;We watched the parade on TV (city residents were instructed to stay indoors, or so I was told) and could see the jets and helicopters buzzing through the city just before they appeared on the telecast. It was quite a thing to watch, and we all had fun watching, eating, and drinking the local beer.&lt;br /&gt;&lt;br /&gt;After Beijing we went to &lt;a href="http://en.wikipedia.org/wiki/Xi%27an"&gt;Xian&lt;/a&gt; (middle of china) and saw the &lt;a href="http://en.wikipedia.org/wiki/Terracotta_Army"&gt;Terracotta Warriors&lt;/a&gt;, climbed &lt;a href="http://en.wikipedia.org/wiki/Mount_Hua"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Hua&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Shan&lt;/span&gt;&lt;/a&gt;, and played around in the city for a few days including a bicycle ride around the &lt;a href="http://en.wikipedia.org/wiki/City_wall_of_Xi%27an"&gt;old city wall&lt;/a&gt; which was great fun.&lt;br /&gt;&lt;br /&gt;Finally, we spent just under a week in &lt;a href="http://en.wikipedia.org/wiki/Lijiang_City"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Lijiang&lt;/span&gt;&lt;/a&gt; (south west near Tibet) in &lt;a href="http://en.wikipedia.org/wiki/Yunnan"&gt;Yunnan&lt;/a&gt; province. We stayed in a quiet hotel right in &lt;a href="http://en.wikipedia.org/wiki/Old_Town_of_Lijiang"&gt;old town&lt;/a&gt;. Yunnan has some of the most beautiful geography in China, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Lijiang&lt;/span&gt; has one of the most beautiful vistas in the country (at the &lt;a href="http://en.wikipedia.org/wiki/Black_Dragon_Pool"&gt;black dragon pool&lt;/a&gt;). Old town is an ancient village that has been converted into a tourist town with old cobbled roads, each with a little canal. At night, the town is lit up with lanterns, and the restaurants are accessed with little bridges - all very romantic and relaxing.  We climbed the &lt;a href="http://en.wikipedia.org/wiki/Jade_Dragon_Snow_Mountain"&gt;Jade Dragon Snow Mountain&lt;/a&gt; (4500 of its 5500 meters, yes they sell oxygen up there), visited the &lt;a href="http://en.wikipedia.org/wiki/Tiger_Leaping_Gorge"&gt;Tiger Leaping Gorge&lt;/a&gt;, and went boating and horse riding in a near by valley.&lt;br /&gt;&lt;br /&gt;A thoroughly relaxing time all in all, and I found some time to catch up on some reading and science &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;podcasts&lt;/span&gt; which I should blog about soon enough. It's good to be home.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-5329857616230205444?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/iD4kZd45nHE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/5329857616230205444/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=5329857616230205444" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/5329857616230205444?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/5329857616230205444?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/iD4kZd45nHE/back-from-china-trip.html" title="Back from China Trip" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/10/back-from-china-trip.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQGQH0zeSp7ImA9WxNSGE0.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-8866849933039577310</id><published>2009-09-01T21:00:00.001+10:00</published><updated>2009-09-01T21:25:21.381+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-01T21:25:21.381+10:00</app:edited><title>Competition hacking with Ruby and Objective-C</title><content type="html">During August, &lt;a href="http://github.com/"&gt;github&lt;/a&gt; ran a &lt;a href="http://contest.github.com/"&gt;recommendation engine contest&lt;/a&gt;. An objective of the contest was to generate a number of open source projects (on github) providing white label recommendation systems (a noble goal). A suite of github user data was provided including ~120K repository definitions and a corpus of nearly half a million user-repository relationships. Entries had to be hosted on github and released under an open source license. Assessment involved making predictions against a test set of more than 4700 users of between 0 and 10 recommended repositories. Submission involved setting up a post-commit hook for your codebase and committing a results.txt to your repository. The results file was automatically evaluated and you score updated on the competition &lt;a href="http://contest.github.com/leaderboard"&gt;leaderboard&lt;/a&gt;. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I tracked the announcement of the competition and associated commentary. Around mid-August I got an itch an decided to hack on the contest. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After downloading the 4MB dataset, I started by writing some ruby code to parse the files and load them into an RDBMS. Halfway through munging (active record outside of rails) I realized the stupidity of the approach. I was managing for (the unnecessary) scarcity of memory. Even with bloated datatypes, the 4MB of provided data could easily fit into main memory many times over. After having participated in many of these AI-programming competitions in years past, I felt severely out of practice an quickly pushed on.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;I chose ruby because I felt I still had much to learn about it and hadn't had a real chance to use it in anger, other than some rails hacking. I bashed out some code to parse the files and build a simple data model in memory. I started processing the data model with a &lt;a href="http://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm"&gt;k-NN&lt;/a&gt; toward making basic predictions and quickly hit the wall. I got some strange results with my hashmap's and began to mistrust my assumptions about Ruby's dynamic typing, resulting in lots explicit casts and other savage hacking - an artifact of my inexperience. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The real problem was speed. Runs were taking waaaay toooo loooooooong on my &lt;a href="http://en.wikipedia.org/wiki/IBook_G4#iBook_G4"&gt;1920's era iBook&lt;/a&gt;. I started looking into optimizing the code, &lt;a href="http://jruby.org/"&gt;compilation options&lt;/a&gt; and even tried running on &lt;a href="http://www.ruby-lang.org/en/downloads/"&gt;updated&lt;/a&gt; and &lt;a href="http://www.macruby.org/"&gt;optimized builds of the Ruby interpreter&lt;/a&gt;. I got improvements, but not enough.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The thing about prototyping is that you need to hack around to find a stable definition of the problem your solving while defining your solution. I could have hacked together my algorithms in C and called them from ruby, but I was not confident on exactly what I wanted to do.  Having been breast fed on ANSI C, I had a feeling for how long these small files should take to load from disk and how long the should take take to crunch for crazy n^2 experiments. I dropped tools and switched to another language I've been looking for an excuse to use in anger, Objective-C.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Writing header files in C++ always felt like duplication of effort to me. Not only did I get this feeling with Objective-C, but it was far worse. Coming directly from ruby, the Objective-C verbosity was &lt;i&gt;distressingly laughable&lt;/i&gt;! I had &lt;a href="http://www.neverreadpassively.com/2009/05/natural-selection-project-status-update.html"&gt;used Objective-C before&lt;/a&gt;, but I was improvising then, rather than directed and problem solving. Finally, the Objective-C standard library (&lt;a href="http://developer.apple.com/cocoa/"&gt;Cocoa&lt;/a&gt;) is painfully minimal compared to Java or C++ (at least for simple things like string manipulation and collections). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I hung in there. I got used to the bracket syntax and the approach memory management was quite familiar. I aggressively used memory pools in data processing experiments, although I often felt the desire to peer into the framework code to see exactly what kind of wasteful things it was doing in the name of convenience. I had the second edition of Kochan's "&lt;a href="http://www.amazon.com/gp/product/0321566157?ie=UTF8&amp;amp;tag=pensiveponder-20&amp;amp;link_code=as3&amp;amp;camp=211189&amp;amp;creative=373489&amp;amp;creativeASIN=0321566157"&gt;Programming in Objective-C 2.0&lt;/a&gt;" open on the desk - which I found almost useless. What I needed was a API description and a summary of gotchas - basically an O'Reilly book. As I mentioned, my machine is a piece of shit, so I use VI or textmate, not XCode. I tried to use the Apple interface to the Cocoa API docs online, but their organization was useless (learn from javadocs already!). I resorted to googling class names and my ad hoc functional requirements to figure out how to do things. &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Although I'd read some text books on datamining (like 10 years ago) and &lt;a href="http://wekaclassalgos.sourceforge.net/"&gt;wrote some plugins for WEKA&lt;/a&gt;, I knew very little about recommendation systems and collaborative filtering. I'd followed the Netflix competition, reading the papers and such (I even ran some simple stats over the provided dataset loaded into a Postgresql instance). Also, I'd read up on &lt;a href="http://en.wikipedia.org/wiki/Singular_value_decomposition"&gt;SVD&lt;/a&gt; before for some text processing hacking, and knew it could have a role to play in feature detection. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My general approach involved thinking hard about the data and the domain, proposing indicators and heuristic predictions, and testing them via direct submissions. I partitioned indicators and heuristics at three levels: user, group (using a k-NN), and global. I tried rank based indicators (for example: global repository watch rank) which performed poorly. I then tried some probabilistic indicators (for example: probability of this user watching a repository with this owner) which got much better results. I tried indicators to confirm/disapprove assumptions then played with the weighting factors for combining them. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I was in the competition to hack (string code together outside of work) and to learn. To learn more about these languages, and to learn something about practical collaborative filtering (building one from scratch). The beauty of this competition was the openness. Not everyone checked in code during the competition, submitting just the results.txt. Others checked in most or their entire code base (I sure as hell did), and this provided an opportunity to poke around the indicators and algorithms used by others. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For me, the most useful lessons from poking around others code was how to structure a flexible recommendation pipeline. Algorithms are awesome, and there is a lot of work in tuning them to the dataset, but having well-structured recommendation pipeline allows you to add in new indicators, heuristics, algorithms and pre-processing steps with minimum disruption. The readme associated with &lt;a href="http://github.com/jeremybarnes/github_contest/tree/master"&gt;jeremybarnes&lt;/a&gt;' project was very insightful for both the algorithms one should be thinking about, as well as the concerns on the information processing pipeline one should be building.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The pipeline I converged to was something like the following:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Parse sources, build first order data model&lt;/li&gt;&lt;li&gt;Second order data model processing (stats, clustering, etc)&lt;/li&gt;&lt;li&gt;Process test users one at a time&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Generate a candidate set (sub-set of all possible recommendations)&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Filter candidate set&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Apply indicators (blended, voting, whatever)&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Sort by scoring, and recommend&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;There may be some generality in this pipeline, although it's clearly specific to smalls scale recommendation engines, not for anything of scale (at least not in this form). Also, serializing the results of second order data model processing is also a great speedup. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I thought I could get some gains by building deep prediction models. Objective-C provides a convenient &lt;a href="http://cocoadevcentral.com/articles/000024.php"&gt;bridge to Java&lt;/a&gt; by booting an in-process JVM. I used this to hack in some classifiers I prepared in &lt;a href="http://www.cs.waikato.ac.nz/ml/weka/"&gt;WEKA&lt;/a&gt; into my pipeline with no appreciable success. It was a fun exercise, and I tried a number of decision tree algorithms and configurations. I'm sure with the selection of appropriate predictive indicators at an appropriate level (cluster or user) that the approach would be great. &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Toward the end of the project I started reading introductory papers to collaborative filtering and recommender systems. I'd had plenty of contact with vector space processing, so I was aware of dimensionally reduction approaches and also expected an array of vector distance measures for clustering. I was aware of the phrase 'item-based recommendation' but the realities of the approach were a lot more apparent after piecing together my toy system. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next time I'll hit the ground running:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Use C++ and using in line C functions for raw power and maybe script the pipeline, experiments, or indicator weighting using something fun like Ruby.&lt;/li&gt;&lt;li&gt;Use SVD or similar to dimensionality reduction and use the resulting features for user and item clustering. I'll also use an off the shelf implementation.&lt;/li&gt;&lt;li&gt;Create an explicit offline test set and an automated testing process. Automation is key here, and &lt;a href="http://en.wikipedia.org/wiki/Cross-validation_(statistics)"&gt;cross-validation&lt;/a&gt; of the offline test set with statistical tests for significance will be a powerful addition.&lt;/li&gt;&lt;li&gt;&lt;a href="http://aws.amazon.com/ec2/"&gt;EC2&lt;/a&gt; server time, contingent on an robust test automation process. EC2 is cheap and worth the pocket change needed to cover a competition or pet project like this one.&lt;/li&gt;&lt;li&gt;Test the effects of different clustering algorithms (KMeans, raw k-NN, arrays of distance metrics)&lt;/li&gt;&lt;li&gt;Be more scientific regarding the testing of indicators and the testing of indicator combinations. I recorded results, but I could have been more careful, tested more things, and deduced trends that were only found by bugs or by reading other peoples submission code.&lt;/li&gt;&lt;li&gt;Visualize the dataset and indicator trends, using &lt;a href="http://www.r-project.org/"&gt;R&lt;/a&gt; or at the very least WEKA or excel.&lt;/li&gt;&lt;li&gt;Optimize indicator combination using &lt;a href="http://en.wikipedia.org/wiki/Gradient_descent"&gt;gradient decent&lt;/a&gt; or a genetic algorithm. &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;As the deadline approached I tried all kinds of random hacks and managed to get a boost to just over 40% (my personal goal), and then on to 48.57% correct recommendations. I managed to place 15th the night before the competition closed (Aust. time), although ultimately finished with a place of 18th. It seemed that a number of people got involved late in the game using blending approaches on the leader's results files. Fun I'm sure, although not in the same league. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can see &lt;a href="http://github.com/jbrownlee/github-contest/tree/master"&gt;my code&lt;/a&gt; (with a summary of my strategy in the readme), a &lt;a href="http://contest.github.com/p/jbrownlee/github-contest"&gt;history of my submissions&lt;/a&gt;, and the overall &lt;a href="http://contest.github.com/leaderboard"&gt;competition leaderboard&lt;/a&gt;. Github have not yet officially finalized the results and selected a winner.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I had fun, and the project was an excellent catalyst for me to get back into my off-hours programming groove.  I'm kicking myself for not getting off my ass and at least participating in the &lt;a href="http://www.engineyard.com/blog/2009/programming-contest-win-iphone-3gs-2k-cloud-credit/"&gt;Engine Yard competition&lt;/a&gt; or the &lt;a href="http://julian.togelius.com/mariocompetition2009/"&gt;Mario AI competition&lt;/a&gt;, the latter of which I believe is still open (second round).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-8866849933039577310?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/xbQZShAezuI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/8866849933039577310/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=8866849933039577310" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/8866849933039577310?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/8866849933039577310?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/xbQZShAezuI/competition-hacking-with-ruby-and.html" title="Competition hacking with Ruby and Objective-C" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/09/competition-hacking-with-ruby-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMGQXs-fip7ImA9WxNTFUk.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-5869467098267614525</id><published>2009-08-17T21:00:00.007+10:00</published><updated>2009-08-18T08:33:40.556+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-18T08:33:40.556+10:00</app:edited><title>Setting Old Projects Free</title><content type="html">I've been pushing my source code to the web since I started pulling together &lt;a href="http://jason.brownlee05.googlepages.com/home23"&gt;game mods and apps&lt;/a&gt; I thought others could learn from or use. About a year ago I got together with a bunch of guys and hacked on a bunch of webapps with lofty ideas of starting a startup. One year on, only two apps are still ticking along (&lt;a href="http://spicyelephant.com/"&gt;spicyelephant&lt;/a&gt; and &lt;a href="http://fivesecondtest.com/"&gt;5st&lt;/a&gt;), the rest are defunct and have been rotting in private SVN repositories. What better way to do a final justice to the hard work we put in than by and give something back - by open sourcing the projects.&lt;br /&gt;&lt;br /&gt;Over the last few days I've pushed three of the &lt;a href="http://www.mayhemmethod.com/"&gt;mayhem method&lt;/a&gt; projects to my &lt;a href="http://github.com/jbrownlee"&gt;github&lt;/a&gt; account. Like a free &lt;a href="http://en.wikipedia.org/wiki/Garage_sale"&gt;garage sale&lt;/a&gt;, have a browse below - maybe there is something you will find useful.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Screen Sponge&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://github.com/jbrownlee/screensponge"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 240px; height: 153px;" src="http://farm3.static.flickr.com/2425/3824690301_188ab03787_m.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="http://github.com/jbrownlee/screensponge"&gt;Screen Sponge&lt;/a&gt; is a movie management web site where you manage all the movies and television shows you have, want, and have seen. Screen Sponge provides an online community, connecting your broader circle of friends to trade shows they have that you want, write reviews, and discus the shows you love.&lt;br /&gt;&lt;/div&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;&lt;div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Comment Is King&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://github.com/jbrownlee/commentisking"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 240px; height: 146px;" src="http://farm4.static.flickr.com/3506/3828943753_1d14857bb9_m.jpg" alt="" border="0" /&gt;&lt;/a&gt;"...the conversation has left the blogsphere", meaning that increasingly the conversations regarding online content are occurring offsite. &lt;a href="http://github.com/jbrownlee/commentisking"&gt;Comment is King&lt;/a&gt; is an online tool for blog authors and other content producers for finding and participating in the broader conversations around their content from disparate services such as Reddit, Digg, Delicious, FriendFeed, and Twitter.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;gantDB&lt;/span&gt;&lt;br /&gt;&lt;a href="http://github.com/jbrownlee/gnatdb"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://github.com/jbrownlee/gnatdb"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 240px; height: 142px;" src="http://farm3.static.flickr.com/2460/3823123282_b84e752d55_m.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="http://github.com/jbrownlee/gnatdb"&gt;gnatDB&lt;/a&gt; is a lightweight personal data tracking service that encourages users to record everything and add meaning to collected data at some later date. gnatDB collects daily data points (data, context, and tags), for example: 10 pushups, exercise, arms and 5.50 hamburger, food, purchase, junk.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have also pushed some of my other personal project from the start of last year, as follows:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Human TSP Solver&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://github.com/jbrownlee/humantspsolver"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: left; cursor: pointer; width: 240px; height: 166px;" src="http://farm3.static.flickr.com/2549/3822897734_61b08c670f_m.jpg" alt="" border="0" /&gt;&lt;/a&gt;The &lt;a href="http://github.com/jbrownlee/humantspsolver"&gt;humanTSPsolver&lt;/a&gt; site was built to investigate the question: &lt;span style="font-style: italic;"&gt;Can human spatial intelligence be harnessed to solve instances of the Travelling Salesman Problem?&lt;/span&gt; The approach taken involved: (1) partitioning TSP instances into sub-problems, (2) allowing users to make contributions in the context of the sub-problems, and (3) aggregating the contributions into a holistic solution.&lt;span style="font-style: italic;"&gt;  &lt;/span&gt;&lt;span style="font-style: italic;"&gt;Note&lt;/span&gt;: a database dump of one years worth of user contributions is included in this project!&lt;br /&gt;&lt;/div&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;&lt;div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Thick Profile&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://github.com/jbrownlee/thickprofile"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 240px; height: 167px;" src="http://farm3.static.flickr.com/2611/3823936845_26507b59a7_m.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="http://github.com/jbrownlee/thickprofile"&gt;Thick Profile&lt;/a&gt; is an experiment into the preparation and exploitation of a deep digital profile of an online user. The approach involved constructing a model of a user based on the users specification of written contributions such as websites, technical reports, research papers, and blog posts. The development effort involved the preparation of code to parse such data sources, construct a model, and visualizing that model as a graph or tag cloud.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I decided to release all code under the less-restrictive &lt;a href="http://en.wikipedia.org/wiki/MIT_License"&gt;MIT License&lt;/a&gt;, especially after the issues I had with companies wanting to exploit some of my &lt;a href="http://optalgtoolkit.sourceforge.net/"&gt;other&lt;/a&gt; &lt;a href="http://wekaclassalgos.sourceforge.net/"&gt;projects&lt;/a&gt; on sourceforge released under GPL and now LGPL.&lt;br /&gt;&lt;br /&gt;I am a big fan of github. It is slick, simple, and unlike google code that also fits this bill, it uses &lt;a href="http://en.wikipedia.org/wiki/Git_%28software%29"&gt;git&lt;/a&gt;! I expect to use github for small-public work going forward. Like hacking with Ruby, it is a pleasure to use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-5869467098267614525?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/wmFfGBQQ3rE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/5869467098267614525/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=5869467098267614525" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/5869467098267614525?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/5869467098267614525?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/wmFfGBQQ3rE/setting-old-projects-free.html" title="Setting Old Projects Free" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/08/setting-old-projects-free.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYGQXc5eip7ImA9WxJaEUQ.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-7366249103895715523</id><published>2009-08-02T11:30:00.002+10:00</published><updated>2009-08-02T16:55:20.922+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T16:55:20.922+10:00</app:edited><title>What is a good optimization algorithm? A data-driven method for algorithm selection</title><content type="html">I have been writing a book on &lt;span style="font-style: italic;"&gt;unconventional optimization algorithms&lt;/span&gt; (for the lack of a better well known name). The phrase I use is "&lt;span style="font-style: italic;"&gt;inspired algorithms&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;, although people in the know may recognize the techniques drawn from fields such as &lt;a href="http://en.wikipedia.org/wiki/Computational_intelligence"&gt;computational intelligence algorithms&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Metaheuristics"&gt;metaheuristics&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Biologically_inspired_computing"&gt;biologically inspired algorithms&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Natural_computation"&gt;natural algorithms&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Biomimetic"&gt;biomimetic algorithms&lt;/a&gt;, and others. These are the type of global optimization methods used when traditional techniques are unavailable, ineffective, and/or do not meet the broader constraints of the problem (need a good enough result and need it fast). They are also typically easy to understand and interesting to investigate.&lt;br /&gt;&lt;br /&gt;My &lt;a href="http://www.inspiredalgorithms.com/2009/01/welcome-to-inspired-algorithms.html"&gt;vision&lt;/a&gt; for the book project has centered on producing a reference text, where a large and diverse set of algorithms (50+) are presented in a useful and consistent way (inspiration, strategy, procedure, configuration heuristics, etc.). Additionally, I have intended to provide working code for each technique (ruby), hoping that the final text would be useful to interested amateurs, programmers, and research scientists. Really, it's a book I'm writing for the enthusiastic ignorant kid with an aptitude for programming I was 10 years ago.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Problem&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;I have 'started' writing this book more than 6 times over the last year, and some incarnations have &lt;a href="http://www.inspiredalgorithms.com/"&gt;made it online&lt;/a&gt;, although at this point are not representative of what I am trying to achieve. In my most recent effort, I started by questioning the set of algorithms I'd previously selected to write about. I'd originally listed all algorithms I could think of and selected a subset of 50 that I felt were sufficiently diverse, interesting, and useful. The decision making process was purely subjective, based on and biased by my experiences,  exposures &lt;a href="http://optalgtoolkit.sourceforge.net/"&gt;and hacking&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This challenge lead to the question: &lt;blockquote style="font-weight: bold;"&gt;Is it possible to select a diverse, interesting, and useful set of inspired algorithms using a simple data driven method?&lt;/blockquote&gt;An ideal selection method would choose algorithms based on metrics that captured relative algorithm efficiency, efficacy, quality of research, and maybe even scope of innovation. Algorithms may ideally be grouped by relative similarity in computational process and problem class suitability. Unfortunately, many if not most of such measures are intractable, especially for the amount of time I'm willing to put in and for the expected benefit such a list would offer.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;I need a metaheuristic for preparing a list of metaheuristics&lt;/span&gt;.&lt;/blockquote&gt;Superficially, the problem of preparing a set of algorithms to write about in a book is very much like the problem of selecting a set of algorithms to apply to a given problem (presuming suitability criteria listed above are met - that you are resorting to an unconventional search algorithms for defensible reasons). Such algorithms are (typically in my experience) easy to describe, easy to understand, easy to program, and easy to get some kind of solution quickly. The algorithms one selects to apply are strongly biased by what the books, colleagues, and experiences one has had with such algorithms, much like the bias a guy like me has in selecting algorithms to write about in a book. This suggests that a data driven algorithm selection method may be useful for a practitioner trying solving a problem.&lt;br /&gt;&lt;br /&gt;This further raises the question as to how to assess a produced 'set of selected algorithms'. Why is one set better than another? Is it the number of books sold? Is it the number of in-references achieved after 2, 5, or 10 years? If one were solving a problem and applying an array of techniques, is one technique better than another because it produced a slightly better solution? Are you sure it was coded correctly, that it was sufficiently tuned to the specifics of the domain?&lt;br /&gt;&lt;br /&gt;Some 'algorithms' are more general methods than strict procedures. If one were considering array sorting algorithms, one could prepare an extensive list of known algorithms and compare each precisely by min, max, avg, etc computational complexity over resources like space and time. This is because such algorithms can be precisely described mathematically and then programmatically. I presume this applies to the so-called heuristic methods of fields like operations research and (linear, quadratic, ...) programming for the same reasons. This generally does not apply to so-called metaheuristics either because the field has chosen not to do so, or (as I think is more likely) because it is not possible because their generality is a core strength.&lt;br /&gt;&lt;br /&gt;Nevertheless, comparing the resultant sets of selected algorithm may not be tractable, and if it is, it may not be meaningful.&lt;br /&gt;&lt;br /&gt;Rather than walk away from this challenge, I decided to have a crack at it. I likely got it wrong, but wrong can be fixed and at least we'll (I'll) have a base for improvement (no doubt an axiom of the general fields that originally produced these algorithms in the face of hard optimization problems).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Method&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;I'll call this method the 'Google method' or the 'common usage' method as it somewhat resembles &lt;a href="http://www.citris-uc.org/CDS-Sept-25-2006"&gt;the principle Google use&lt;/a&gt; to offer suggested corrections to misspelled search queries, as well as their translation services. The principle of my algorithm evaluation and selection method is:&lt;br /&gt;&lt;blockquote style="font-weight: bold;"&gt;An algorithm or method is as good its name, as useful and interesting as it is abundant.&lt;/blockquote&gt;A good optimization method is used a lot, and people write about using it. Further, a method that is used a lot stabilizes into a canonical form and coalesces under a common name. A corollary of this assumption that relates to the previous discussion is that those techniques that are not well described or implement correctly are not used and do not propagate. They are simplified and re-communicated for use or lost in the ever increasing flood of new material.&lt;blockquote style="font-style: italic;"&gt;An algorithm that is used (written about) is an algorithm that is useful (worth knowing about).&lt;/blockquote&gt;The proposed data-driven method involves 1) eliciting an extensive list of algorithm names, 2) selecting algorithm names in a consistent manner, 3) tallying the number of search results hits for the exact algorithm name across a number of domains, and 4) compressing the tally measure into an ordinal algorithm ranking metric. The set or sets of useful and interesting algorithms may then be drawn from the the ranked listing.&lt;br /&gt;&lt;br /&gt;It feels like an algorithm popularity contest, because that is exactly what it is, although popularity is re-measured across somewhat bounded to domains. A thread of research on an algorithm may publish and/or perish irrespective of the methods inherent qualities, and that may be the core argument against the proposed method.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Experiment&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Here is what I did (a few hours a day between Wednesday 29th and yesterday):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Wrote down all the algorithms I could think of, generally limited to algorithms for finding something in a domain (optimization or search) that broadly fit into the fields listed at the beginning of this post (excluding traditional heuristics like &lt;a href="http://en.wikipedia.org/wiki/Branch_and_bound"&gt;branch and bound&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/A*"&gt;A*&lt;/a&gt; and popular computational intelligence fields like &lt;a href="http://en.wikipedia.org/wiki/Fuzzy_logic"&gt;fuzzy logic&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Artificial_neural_network"&gt;artificial neural networks&lt;/a&gt;).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I &lt;a href="http://twitter.com/jbrownlee/status/2918610299"&gt;tweeted my followers&lt;/a&gt; and emailed colleagues to send me a listing of their top 10 computational intelligence and metaheuristic algorithms, where the definition of favorite was left open. When domain experts start talking about their favorite things about their domain, one should listen: &lt;span style="font-style: italic;"&gt;the collected survey data is valuable&lt;/span&gt;. I originally thought that I could construct a list from this survey data alone, although the lack of volume meant that at best I could do (at this point) is use it to update the master algorithm list.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Normalized algorithm names to their full unabbreviated form. No acronyms wherever reasonably possible.&lt;/li&gt;&lt;li&gt;Assigned each algorithm a superficial grouping or kingdom (I thought for use in a book chapter structure) based on general observation and intuition. Kingdom names were generally based on the motivation for the methods strategy, including: evolutionary, immunological, swarm, physical, probabilistic, and stochastic.&lt;/li&gt;&lt;li&gt;Recorded the estimated-total number of search results for the exact algorithm name (quoted) in &lt;a href="http://www.google.com/"&gt;Google Web Search&lt;/a&gt;, &lt;a href="http://scholar.google.com/"&gt;Google Scholar Search&lt;/a&gt;, &lt;a href="http://books.google.com/"&gt;Google Book Search&lt;/a&gt;, &lt;a href="http://www.springerlink.com/"&gt;Springer Search&lt;/a&gt;, and &lt;a href="http://www.scirus.com/"&gt;Scirus Search&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Calculated the relative algorithm rank metric as the sum of the normalized search result measures.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Results&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;The raw results including all data collected is provided in a Google docs spreadsheet (note: with multiple sheets/tabs), entitled simply &lt;a href="http://spreadsheets.google.com/ccc?key=0AveQg1gvDvwUdDVmeVdxWHZCSEhCNkpuY2tBMWhGVnc&amp;amp;hl=en"&gt;Algorithm List&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Have a play with the data (if you're that way inclined) and postulate some improvements in the comments of this post. If their is moderate interest, I'll update the algorithm listing, ranking equation, et cetera and edit/re-post the results. If there is significant interest, I bash out a web application to allow open algorithm name submission and automated assessment and rankings (I hope so!).&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;There are a lot of things that can be drawn from the collected data, at the very least the top 10 algorithms in each of the imposed algorithm groups (at least those groups with more than 10 algorithms). Pay heed optimization algorithm &lt;a href="http://starwars.wikia.com/wiki/Padawan"&gt;padawans&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Top 10 Algorithms&lt;/span&gt;: Genetic Algorithm, Simulated Annealing, Genetic Programming, Random Search, Tabu Search, Evolutionary Programming, Evolution Strategies, Particle Swarm Optimization, Expectation-maximization algorithm, Bayesian Optimization Algorithm&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Top 10 Evolutionary Algorithms&lt;/span&gt;: Genetic Algorithm, Genetic Programming, Evolutionary Programming, Evolution Strategies, Differential Evolution, Grammatical Evolution, Learning Classifier System, Non-dominated Sorting Genetic Algorithm, Strength Pareto Evolutionary Algorithm, Messy Genetic Algorithm&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Top 10 Swarm Algorithms&lt;/span&gt;:Particle Swarm Optimization, Ant System, Ant Colony System, AntNet, MAX-MIN Ant System, Multiple ant colony system, Population-based Ant Colony Optimization, Bees Algorithm, Rank-Based Ant System, Bee Colony Optimization&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Top 10 Probabilistic Algorithms&lt;/span&gt;: Expectation-maximization algorithm, Bayesian Optimization Algorithm, Compact Genetic Algorithm, Extended Compact Genetic Algorithm, Cross-entropy method, Population-based incremental learning, Hierarchical Bayesian Optimization Algorithm, Probabilistic Incremental Program Evolution, Univariate Marginal Distribution Algorithm, Bivariate Marginal Distribution Algorithm&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Top 10 Stochastic Algorithms&lt;/span&gt;:Random Search, Tabu Search, Scatter Search, Hill Climbing Search, Iterated Local Search, Guided Local Search, Greedy Randomized Adaptive Search Procedure, Variable Neighbourhood Search, Adaptive Random Search, Stochastic gradient descent algorithm&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Observations&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Algorithm relevance&lt;/span&gt;. How wrong is the compiled list of algorithms? A factor of 2 or 3 (likely)? An order of 1 or 2 (it's possible)? I have seen many cases &lt;a href="http://jason.brownlee05.googlepages.com/TR02-2007.pdf"&gt;in my own trawling&lt;/a&gt; where researchers have renamed an algorithm for each paper published. How relevant are such algorithms to the practitioner they may claim to facilitate if one cannot name them to find them? One might argue that if an approach cannot be found (or cannot be understood) by those who might use or extend it, then it may as well not exist. I am not ignoring the converse argument that such published nuggets may be found and exploited at a later date (I guess like &lt;a href="http://en.wikipedia.org/wiki/Mendel"&gt;mendel&lt;/a&gt;'s post hoc initiation of the &lt;a href="http://en.wikipedia.org/wiki/Modern_synthesis"&gt;modern synthesis&lt;/a&gt;), I think it is moot given the shear abundance of publications. There could be explicit contributions to the thread of research as well as explicit contributions to engineering (practitioner) without confusing both sides. (end rant, and yes of course I have been part of the problem in the past)&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Algorithm awareness&lt;/span&gt;. How many algorithms does the average researcher or even research group know about? One may research a field, generate an algorithm and miss the observation that the same general computation had already been investigated in one or more closely related sister fields. Further, there is a lot of algorithm racing in the field, &lt;a href="http://jason.brownlee05.googlepages.com/TR01-2007.pdf"&gt;which is a shame&lt;/a&gt;. The utility of such racing is further diminished if you consider the limited scope of possible comparisons in the average racing paper. The general field/s will continue to spin their wheels until they start extending and fixing the broken techniques that came before, rather than re-proposing them.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Potential research opportunities&lt;/span&gt;. The low raking algorithms and fields may represent new approaches that have the potential to rise. At the very least, they may represent an opportunity for new and interesting research. A related observation is that the popularity approach used to collate the top algorithms may result in a bland and already over-represented algorithm compendium. This is a crucial observation which I will come back to.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Limitations&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;The following are the areas for improvement based on observed (and obvious) limitations:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;A more extensive algorithm list&lt;/span&gt;. The listing is biased by my graduate experience with evolutionary computation and artificial immune systems, and my exposure to swarm algorithms. There are a lot more optimization algorithms in the published literature, and more importantly, there are a lot more algorithms that should appear on this list. I hope I can find or be made aware of them (unsubtle appeal!).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;An algorithm naming or search strategy that avoids ambiguity&lt;/span&gt;. There are algorithm names that are a subset of many other algorithm names, and thus receive their &lt;a href="http://www.techzilo.com/what-is-google-juice/"&gt;Google Juice&lt;/a&gt;. Additionally, there are likely algorithms in the list that are not using their most common name, and algorithms in the list that are more commonly known by their acronym. A consistent algorithm naming convention is the cornerstone of the adopted method. The list requires careful cleaning and the searches require careful exclusion, both of which require a reliable method in their own right.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Algorithm grouping could (should) be data driven&lt;/span&gt;. A set of 'fields of study' of varying generality could be assembled and search in conjunction with each algorithm name to locate each has the higher level of association. Such fields could then be distilled into appropriate groups.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;More measures&lt;/span&gt;. The domains and their measures were selected for convenience. Additional search domains may be used to add fidelity to the calculated ranking. Additional algorithm measures may be used, such as citation rank of seminal papers, articles, and books.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;A relative algorithm rank metric that exploits the importance of the search domain&lt;/span&gt;. An algorithm references on a webpage means less than a mention in a research paper, which again is less valuable than a mention in a book. Google's index is not complete, and it is quite possible that the book and scholar indexes are not direct subsets of the web search. The metric must be updated such that the known relationship between the measures is accounted for in an algorithms rank.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;An absolute algorithm rank metric from the collected absolute measures&lt;/span&gt;. The measures collected are absolute, and although relative inferences can be drawn a metric that exploited the absolute nature of the collected measures may be more robust and additionally amenable broader comparison.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Statistical significance in tally measures and resultant ranking metric&lt;/span&gt;. Algorithms are ordered by their relative rank, although there is no account of the statistical significance of measures or the metric, only their ordinal relationship. For example, algorithms in the current listing may be assigned different ranking metrics, the difference between which is not a significant basis for discrimination.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Outcomes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;It took this micro-study for me to realize what may be apparent: the role of a book such as the one I want to write should be to educate and enlighten. The expertise I bring to the editing of the book - such as the choice and presentation of algorithms and sub-fields - is the key and true contribution of the text, more than the distillation of the research on each specific subject.&lt;br /&gt;&lt;br /&gt;I will continue to curate the list, I think it is still interesting. At the very least, it will provoke reasonable attention to algorithms and sub-fields that I had thought less relevant and depressed others that I thought were more extensive than they possibly are.&lt;br /&gt;&lt;br /&gt;Algorithm popularity alone will not define the contents of the book. Reflecting, I can remember books like &lt;a href="http://www.amazon.com/gp/product/0077095065?ie=UTF8&amp;amp;tag=pensiveponder-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0077095065"&gt;New Ideas and Optimisation&lt;/a&gt; and first reading about Differential Evolution. I remember colleagues discovering algorithms in a similar manner that eventually took on large roles in their own research agendas. The skill in preparing this book will come in finding those nuggets,  those under represented techniques that are interesting and could propagate.&lt;br /&gt;&lt;br /&gt;Using a blog post as a publication medium for ad hoc experiment and rant is liberating! Thanks to those kind enough to send in your top 10 lists, and thanks to &lt;a href="http://www.itee.uq.edu.au/%7Euqdangus/"&gt;Dan Angus&lt;/a&gt; for giving my algorithm list a nice boost.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-7366249103895715523?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/b6ta6ASp1L4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/7366249103895715523/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=7366249103895715523" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/7366249103895715523?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/7366249103895715523?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/b6ta6ASp1L4/what-is-good-optimization-algorithm.html" title="What is a good optimization algorithm? A data-driven method for algorithm selection" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/08/what-is-good-optimization-algorithm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEFRXY5eip7ImA9WxJSEUo.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-7620582290866662428</id><published>2009-05-01T19:30:00.001+10:00</published><updated>2009-05-01T19:36:54.822+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-01T19:36:54.822+10:00</app:edited><title>Natural Selection: Project Status Update</title><content type="html">It is the start of a new month and it feels like an appropriate time to write a project status update for my &lt;a href="http://www.neverreadpassively.com/2009/03/iphone-resurrection-and-new-iphone-app.html"&gt;Natural Selection iPhone game project&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I've been keeping keen records for this after-hours project which may interest number junkies:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I started the project (tracking time) 44 days ago on March 18th 2009.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I have worked a total of 109 man-hours on the project, which is 13.64 man-days (nearly 3 man weeks).&lt;/li&gt;&lt;li&gt;I have averaged 2.48 man-hours a day and peaked at 8 man hours on some weekends&lt;/li&gt;&lt;li&gt;I have spent 46 man-hours (5.75 man-days) on the code base and the remaining 63 man-days on documentation and R&amp;amp;D, although this ratio is sure to correct with time&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I am (under-)charging my time at a graduate salary ($25AUD/hour) totalling my time at $2,725.00.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The sum of expenses to-date is a little more than  $5,000AUD (2 iPhones &lt;a href="http://www.neverreadpassively.com/2009/03/so-i-bricked-my-iphone.html"&gt;sadly&lt;/a&gt;, apple dev program, phone case, and chargeable time).&lt;/li&gt;&lt;li&gt;Weddings and other random commitments aside, a first cut by July with a launch soon after would be reasonable.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Nm8O-3rVrk0/SfqYMxq8AiI/AAAAAAAAAE0/m4xCPMl4EDo/s1600-h/productivity.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 244px;" src="http://4.bp.blogspot.com/_Nm8O-3rVrk0/SfqYMxq8AiI/AAAAAAAAAE0/m4xCPMl4EDo/s320/productivity.png" alt="" id="BLOGGER_PHOTO_ID_5330740454205686306" border="0" /&gt;&lt;/a&gt;Progress has been reasonable, although could have been better. Efforts on the code base did not begin until a &lt;a href="http://www.neverreadpassively.com/2009/04/dropping-dimension-cocos2d-and-box2d-on.html"&gt;physics engine and game engine were selected&lt;/a&gt;. I spent a fair amount of time (nearly a calender month or approximately 42 man-hours) researching, testing, and evaluating physics engines, &lt;a href="http://www.neverreadpassively.com/2009/04/oolong-engine-for-iphone-first-look.html"&gt;graphics engines&lt;/a&gt;, and &lt;a href="http://www.neverreadpassively.com/2009/03/review-of-iphone-3d-engines.html"&gt;game engines&lt;/a&gt;. I think my saving grace was my support network.&lt;br /&gt;&lt;br /&gt;At the start of the project (20th March) I organized an on-going developer meet-up with the other &lt;a href="http://www.mayhemmethod.com/"&gt;mayhem&lt;/a&gt; guys. The goal was to spend 2 hours, every fortnight to discuss progress with our respective side-projects and offer ideas and support. We had our first meeting on the 25th March, and by our second meeting just before Easter (8th April) I felt self-conscious still chatting about requirements documents and my progress on engine evaluations. It was this second meeting that kicked me into gear. I got pragmatic over the Easter break, started the build, and real-progress has been steady since.&lt;br /&gt;&lt;br /&gt;The following two images are screenshots of my app taken from my iPhone. The first (left) is an early version of the prototype taken April 20th and shows basic rendering of a two shape creature in a box world with functioning physics. The second shot (right) was taken today and shows a simple background (thanks &lt;a href="http://www.gimp.org/"&gt;Gimp&lt;/a&gt;) and a functioning creature and world definition/management and the start of an evolutionary process (goal is to reach the flag).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Nm8O-3rVrk0/SfqgoelL9lI/AAAAAAAAAFM/azNZmDiH_uY/s1600-h/photo%282%29.jpg"&gt;&lt;img style="cursor: pointer; width: 134px; height: 200px;" src="http://1.bp.blogspot.com/_Nm8O-3rVrk0/SfqgoelL9lI/AAAAAAAAAFM/azNZmDiH_uY/s200/photo%282%29.jpg" alt="" id="BLOGGER_PHOTO_ID_5330749726210651730" border="0" /&gt;&lt;/a&gt;             &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Nm8O-3rVrk0/Sfqgu883mRI/AAAAAAAAAFU/_SbtTQwV_Ow/s1600-h/photo.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 134px;" src="http://3.bp.blogspot.com/_Nm8O-3rVrk0/Sfqgu883mRI/AAAAAAAAAFU/_SbtTQwV_Ow/s200/photo.jpg" alt="" id="BLOGGER_PHOTO_ID_5330749837442259218" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;My medium term plan is to elaborate the evolutionary process some more and then start to flesh out the 'game' features. I am going to add some basic menus for selecting the proto-creatures from which to start an evolutionary process as well as the environments (levels) where the process will take place. Longer term, I want to start to develop a 'look' for the game, and start seriously developing/acquiring the assets (images, sounds, music). I'm thinking creative commons and sites like &lt;a href="http://99designs.com/"&gt;99designs&lt;/a&gt; might be useful.&lt;br /&gt;&lt;br /&gt;Most importantly, I'm having fun. Classical ANSI C and C++ memory management is still as painful as I remember, although objective-C is new to me and interesting as a different take on the OO paradigm.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-7620582290866662428?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/o8Ss3gsCAMo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/7620582290866662428/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=7620582290866662428" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/7620582290866662428?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/7620582290866662428?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/o8Ss3gsCAMo/natural-selection-project-status-update.html" title="Natural Selection: Project Status Update" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_Nm8O-3rVrk0/SfqYMxq8AiI/AAAAAAAAAE0/m4xCPMl4EDo/s72-c/productivity.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/05/natural-selection-project-status-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEMQnk9cCp7ImA9WxJTEU8.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-9203318767927043672</id><published>2009-04-19T16:30:00.001+10:00</published><updated>2009-04-19T16:31:23.768+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-19T16:31:23.768+10:00</app:edited><title>Dropping a Dimension: Cocos2D and Box2D on iPhone</title><content type="html">Over Easter I decided to drop a dimension in &lt;a href="http://www.neverreadpassively.com/2009/03/iphone-resurrection-and-new-iphone-app.html"&gt;my iPhone project&lt;/a&gt; to go from a 3D evolution game simulator to 2D.&lt;br /&gt;&lt;br /&gt;I started out playing with the &lt;a href="http://wiki.slembcke.net/main/published/Chipmunk"&gt;Chipmunk physics engine&lt;/a&gt;, just out of curiosity.  I watched some &lt;a href="http://files.slembcke.net/chipmunk/movies/"&gt;videos&lt;/a&gt; of the engine in action, read the &lt;a href="http://www.slembcke.net/forums/viewforum.php?f=1"&gt;forums&lt;/a&gt; and &lt;a href="http://code.google.com/p/chipmunk-physics/"&gt;downloaded&lt;/a&gt; the code base and example &lt;a href="http://files.slembcke.net/chipmunk/tutorials/MoonBuggyTutorial.tar.gz"&gt;moon buggy&lt;/a&gt; project. The code comes with an Xcode project and the 8 demos make working with the engine look easy.&lt;br /&gt;&lt;br /&gt;I started playing around with &lt;a href="http://code.google.com/p/cocos2d-iphone/"&gt;cocos2d for the iphone&lt;/a&gt; because it came with Chipmunk already ported. I hacked on the chipmunk demos (also ported to cocos2d) and found the lack of OO-design frustrating and the speed terrible, even after reading tweaks from the cocos2d &lt;a href="http://groups.google.com/group/cocos2d-iphone-discuss"&gt;forum&lt;/a&gt; and &lt;a href="http://blog.sapusmedia.com/search/label/cocos2d"&gt;blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I kept seeing references to the &lt;a href="http://www.box2d.org/"&gt;Box2d physics engine&lt;/a&gt; (elements of which Chipmunk is based) and eventually dropped what I was working on and grabbed a copy of the &lt;a href="http://sourceforge.net/projects/box2d"&gt;code base&lt;/a&gt;. The code also had an Xcode project and I was impressed by the number and variety of demos. I dug deeper and came across the &lt;a href="http://www.handcircus.com/2009/01/15/iphone-port-of-box2d-testbed-now-available/"&gt;box2d port to iphone&lt;/a&gt; donated by &lt;a href="http://www.simonoliver.com/blog/"&gt;Simon Oliver&lt;/a&gt; who built Rolando using Box2D. I graped the port from the box2D SVN server and started developing my game. I started fleshing out a basic game engine with physics and rendering call backs each frame, tweaked based on some &lt;a href="http://www.71squared.co.uk/2009/03/iphone-game-programming-tutorial-1/"&gt;game&lt;/a&gt; &lt;a href="http://www.71squared.co.uk/2009/03/iphone-game-programming-tutorial-2-image-class/"&gt;tutorial&lt;/a&gt; &lt;a href="http://www.71squared.co.uk/2009/03/iphone-game-programming-tutorial-3-spritesheet-class/"&gt;screencasts&lt;/a&gt; on &lt;a href="http://www.71squared.co.uk"&gt;71^2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The speed of the demos was still not good enough, but the object-oriented design sat right and I assumed I could optimize my application into submission (I have so far). While googling fixes for the issues and questions I was having in my basic game engine I kept coming back to the cocos2d forums and codebase. It was obvious that cocos2d had already solved the problem of a simple game engine, and then some.&lt;br /&gt;&lt;br /&gt;I was decided. The rapid progress I was able to affect in 2D with both chipmunk and box2d as well as the ready-to-exploit and well documented cocos2d game engine convinced me.&lt;br /&gt;&lt;br /&gt;The following is the dead-simple procedure I wrote down for manually &lt;span style="font-weight: bold;"&gt;integrating the box2D physics engine into the cocos2d game engine for the iPhone&lt;/span&gt;:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Check-out &lt;a href="http://code.google.com/p/cocos2d-iphone/source/checkout"&gt;cocos2d-iphone from SVN&lt;/a&gt;. This is because the downloadable archive from the site does not allow one to decouple Chipmunk as easily.&lt;/li&gt;&lt;li&gt;Check-out &lt;a href="http://box2d.svn.sourceforge.net/viewvc/box2d/trunk/"&gt;box2d physics engine from SVN&lt;/a&gt;. This is because the downloadable archive is outdated and does not include the iPhone port (and subsequent changes to the codebase?).&lt;/li&gt;&lt;li&gt;Create a new Xcode project for cocos2d based on &lt;a href="http://monoclestudios.com/"&gt;Monocle Studios&lt;/a&gt; - &lt;a href="http://monoclestudios.com/cocos2d_whitepaper.html"&gt;Introduction to Cocos2d iPhone Whitepaper&lt;/a&gt;. I only included the cocos2d directory (no Chipmunk for example), and I tweaked a few things a long the way (OpenGL-based project as a starting point, names of things, etc).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Because Chipmunk is no longer in my codebase I used the &lt;a href="http://code.google.com/p/cocos2d-iphone/issues/detail?id=290"&gt;new replacement macros&lt;/a&gt; whenever the old Chipmunk macros were referred to (such as in forum posts and in the new cocos2d project tutorial in the previous step).&lt;/li&gt;&lt;li&gt;Add the box2d source to the project, specifically the '&lt;span style="font-style: italic;"&gt;include&lt;/span&gt;' and '&lt;span style="font-style: italic;"&gt;sources&lt;/span&gt;' directories.&lt;/li&gt;&lt;li&gt;The first build had some compile issues (a &lt;span style="font-style: italic;"&gt;'FALSE'&lt;/span&gt; rather than a '&lt;span style="font-style: italic;"&gt;false'&lt;/span&gt; and missing ';') that required minor fixes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The first thing I did was create a custom Box2D cocos2d layer that ran the physics engine and generated a basic world with cute 2-box creature (big box with a little box flipper).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I used the rendering code listed in the box2D iPhone port (GLES-Render.mm) for drawing shapes, segments and points, and used the debug-drawing engine in the box2D core (&lt;span style="font-style: italic;"&gt;b2World.cpp&lt;/span&gt;) as the basis for traversing world elements for drawing each frame. I considered using the cocos2d primitives (&lt;span style="font-style: italic;"&gt;ChipmunkDemo/main.m&lt;/span&gt;) as is done in the ported Chipmunk examples, but I figured I am going to need custom drawing routines anyway, so the simple custom OpenGL drawing routines were a good base. I also ripped the mouse/touch code from the iPhone port of Box2D which works great.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I had some initial problems importing Box2D.h into my Objective-C++ header files. The &lt;a href="http://www.box2d.org/forum/viewtopic.php?f=7&amp;amp;t=1283"&gt;solution was simple enough&lt;/a&gt;, involving #ifdef __cplusplus/#endif around the cpp header.&lt;/li&gt;&lt;li&gt;Finally, when compiling for iPhone hardware I had some additional errors in Box2D ('finite' was not declared in this scope), that were &lt;a href="http://www.box2d.org/forum/viewtopic.php?f=7&amp;amp;t=893"&gt;easily fixed&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;I'm sure there are easier/better ways to get up and running with Box2D in cocos2d-iPhone (tell me please!) and millage may vary as the code bases change (I checked out the working copies of each project), although it has worked well enough for me thus far. If there is sufficient demand, I'll create an opensource project with the bare-bones project, or even just open up my current codebase. Let me know.&lt;br /&gt;&lt;br /&gt;I'm currently struggling with the fabled "&lt;span style="font-style: italic;"&gt;codesign failed with exit code 1&lt;/span&gt;" while trying to push my application to my iPhone device, specifically "&lt;span style="font-style: italic;"&gt;object file format invalid or unsuitable&lt;/span&gt;". I've dropped 6 hours into this problem already and am still nowhere, although I'm reasonably sure it is not project specific. I will get there, but it is so damn frustrating!&lt;br /&gt;&lt;br /&gt;Reading has turned up an array of interesting snippets. Cocos2d game engine was &lt;a href="http://www.cocos2d.org/"&gt;originally written in Python&lt;/a&gt; and ported to Objective-C for the iPhone. &lt;a href="http://lethain.com/entry/2008/oct/03/notes-on-cocos2d-iphone-development/"&gt;Notes on Cocos2d iPhone Development&lt;/a&gt; provide a great intro to cocos2d and specifically the arrangement of scenes, layers and nodes. Box2D has been ported all over the place including &lt;a href="http://box2dflash.sourceforge.net/"&gt;to Flash&lt;/a&gt;, and there are lots of useful box2d-flash related posts that are directly useful (like &lt;a href="http://www.blogcatalog.com/blogs/emanuele-feronato/posts/tag/box2d/"&gt;this lot&lt;/a&gt; that helped me figure out &lt;a href="http://www.box2d.org/manual.html#d0e1034"&gt;Revolute Joints&lt;/a&gt;). I have also seen lots of discussion about &lt;a href="http://www.box2d.org/forum/viewtopic.php?f=3&amp;amp;t=2064"&gt;tuning box2d for performance&lt;/a&gt; (like &lt;a href="http://www.box2d.org/wiki/index.php?title=FAQ#How_do_I_convert_pixels_to_meters_units"&gt;1m bodies are the sweet spot&lt;/a&gt;) and interesting &lt;a href="http://linuxuser.at/node/29"&gt;physics engine comparisons&lt;/a&gt; and &lt;a href="http://wiki.laptop.org/go/Physic_Engines/Speed_Tests"&gt;speed tests&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My current plan is to continue to realize the procedural creature generation and evolutionary engine for my project in 2D and play-test the hell out of it. If something fun drops out I will polish and push it to the app store and/or consider a port to 3D. The raw computation required for any meaningful morphology/controller evolutionary process is still my biggest technical risk. I am still not convinced it is viable on this hardware. I've got some thoughts regarding work-arounds (pre-evaluated strata in the search space, amazon EC2 compute servers, etc), although I am also thinking about a creature app without evolution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-9203318767927043672?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/myxe9UmMqVE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/9203318767927043672/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=9203318767927043672" title="10 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/9203318767927043672?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/9203318767927043672?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/myxe9UmMqVE/dropping-dimension-cocos2d-and-box2d-on.html" title="Dropping a Dimension: Cocos2D and Box2D on iPhone" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">10</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/04/dropping-dimension-cocos2d-and-box2d-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIASHw6eip7ImA9WxVbGUw.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-8332510444204081584</id><published>2009-04-05T17:30:00.002+10:00</published><updated>2009-04-05T17:45:49.212+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-05T17:45:49.212+10:00</app:edited><title>Oolong Engine for the iPhone: A First Look</title><content type="html">I set a side some time this weekend  to have a look at the Oolong Engine for the iPhone and one thing is clear - it is the domain of the graphics programmer, hardcore or otherwise (note: not me).&lt;br /&gt;&lt;br /&gt;The project started as a side project by &lt;a href="http://www.linkedin.com/in/wolfgangengel"&gt;Wolfgang Engel&lt;/a&gt; exploring graphics programming on the iPhone and iPod Touch, seemingly initiated in late 2007. The project went by the name &lt;span style="font-weight: bold;"&gt;iGDK&lt;/span&gt; (the iPhone Game Development Kit), was located on &lt;a href="http://code.google.com/p/igdk/"&gt;google code,&lt;/a&gt; and got some &lt;a href="http://www.iphoneblog.de/2007/12/21/igdk/"&gt;early attention&lt;/a&gt; given that the official iPhone SDK was at that time unreleased. Still in late 2007, Wolfgang renamed the project to the &lt;span style="font-weight: bold;"&gt;Oolong Engine&lt;/span&gt;, seemingly &lt;a href="http://www.iphoneworld.ca/news/2008/01/05/oolong-formerly-igdk-iphone-games-development-engine-now-closed-source/"&gt;changed the license agreement&lt;/a&gt; to the MIT License and created the still current &lt;a href="http://code.google.com/p/oolongengine/"&gt;google code project&lt;/a&gt; and &lt;a href="http://www.oolongengine.com/"&gt;public facing website&lt;/a&gt;. A &lt;a href="http://lists.oolongengine.com/listinfo.cgi/oolong-oolongengine.com"&gt;mailing list&lt;/a&gt; followed soon after and is now the primarily means of support containing almost 12 months of user interest discussions.&lt;br /&gt;&lt;br /&gt;The main form of documentation for the project is Wolfgang's blog entitled "&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/"&gt;Diary of a Graphics Programmer&lt;/a&gt;", that details (among other things) insight into his progress on the project as a free-time exercise, as well as a series of (at last count) 9 iPhone programming tips released at then end of 2008 (approximately one year after the project was initiated).&lt;br /&gt;&lt;br /&gt;For completeness, the following list the Oolong related posts from the blog:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2007/12/iphone-graphics-programming.html"&gt;iPhone Graphics Programming&lt;/a&gt; (Dec 2007), started looking into iPhone graphics programming&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2007/12/porting-open-source-engine-to-iphone.html"&gt;Porting an Open-Source Engine to the iPhone?&lt;/a&gt; (Dec 2007), thoughts on porting an existing 3D engine to the platform&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2007/12/oolong-engine.html"&gt;Oolong Engine&lt;/a&gt; (Dec 2007), announce the Oolong project named after his favourite tea&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2008/01/san-angeles-observation-on-iphone.html"&gt;San Angeles Observation on the iPhone&lt;/a&gt; (Jan 2008), the porting of a graphics demonstration by &lt;a href="http://jet.ro/"&gt;Jetro Lauha&lt;/a&gt; called San Angeles&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2008/04/ported-my-iphone-engine-to-os-20.html"&gt;Ported my iPhone Engine to OS 2.0&lt;/a&gt; (Apr 2008), as the title suggests, the engine is ported to a beta of the 2.0 iPhone operating system&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2008/07/iphone-development-oolong-engine.html"&gt;iPhone development - Oolong Engine&lt;/a&gt; (Jul 2008), project now a real platform for iPhone game development with published titles&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2008/12/major-oolong-update.html"&gt;Major Oolong Update&lt;/a&gt; (Dec 2008), a number of updates to the code base including a new math library&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Interpreted as an attempt at induction for programmers new to the platform and his engine, Wolfgang's wrote a series of iPhone and iPod Touch (iP*) programming tips from November 2008 to January 2009. Wolfgang's contribution in the &lt;a href="http://code.google.com/p/quake3-iphone/"&gt;Quake III Arena port to the iPhone&lt;/a&gt; shines through in some of these articles.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2008/11/ip-programming-tip-1.html"&gt;iP* programming tip #1&lt;/a&gt;, summary of the underlying hardware on the iPhone&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2008/12/ip-programming-tip-2.html"&gt;iP* programming tip #2&lt;/a&gt;, setting up Xcode including all-in-one-mode&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2008/12/ip-programming-tip-3.html"&gt;iP* programming tip #3&lt;/a&gt;, review of folders in an application (project organization)&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2008/12/ip-programming-tip-4.html"&gt;iP* programming tip #4&lt;/a&gt;, the basic Oolong app, bridging objective-C and C/C++&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2008/12/ip-programming-tip-5.html"&gt;iP* programming tip #5&lt;/a&gt;, on pixel shader's and references the 'Per-Pixel Lighting' example&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2008/12/ip-programming-tip-6.html"&gt;iP* programming tip #6&lt;/a&gt;, on Matrix Palettes and the related code example&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2008/12/ip-programming-tip-7.html"&gt;iP* programming tip #7&lt;/a&gt;, on Point Sprites and the code example of a particle system&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2008/12/ip-programming-tip-8.html"&gt;iP* programming tip #8&lt;/a&gt;, handling the touch interface in a game&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/2009/01/ip-programming-tip-9.html"&gt;iP* programming tip #9&lt;/a&gt;, VFP assembly programming&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;From the blog posts and news entries on the projects webpage, one may deduce that the Wolfgang's contributions to the project peaked early to mid 2008 (around the launch and resultant integration with the iPhone 2.0 SDK) and have simmered down since, except for an interest in VFP and the writing of programming tips over the 2008 Christmas period. The google project also lists &lt;a href="http://www.linkedin.com/in/erwincoumans"&gt;Erwin Coumans&lt;/a&gt; from the &lt;a href="http://www.bulletphysics.com/Bullet/wordpress/"&gt;Bullet Physics&lt;/a&gt; project as a second project owner, and there are number of additional members listed as contributing to the effort.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Oolong is the side project and domain of serious graphics and game physics programmers, and as such code is what this project is all about&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The project incorporates a number of sister open source projects and offers a suite of example projects. There is no documentation provided with the project other than some out-dated and vapid readme files for the examples and some reasonable in-line comments littered throughout the examples and the core engine code.&lt;br /&gt;&lt;br /&gt;The leveraged third-party open source projects that were listed (or that I could deduce) and integrated into the code base are as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.bulletphysics.com/Bullet/wordpress/"&gt;Bullet Physics&lt;/a&gt; (2.73), for 3D physics simulation&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Memory Manager, apparently by &lt;a href="http://www.FluidStudios.com"&gt;Fluid Studios&lt;/a&gt; although seemingly previously listed on &lt;a href="http://www.flipcode.com"&gt;Flip Code&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://silverspaceship.com/src/iprof/"&gt;IPROF&lt;/a&gt;, A Portable Industrial-Strength Interactive Profiler for C++ and C, by Sean Barrett&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://enet.bespin.org/"&gt;enet&lt;/a&gt;, the network subsystem used in &lt;a href="http://cubeengine.com/"&gt;cube&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/vfpmathlibrary/"&gt;VFP math library&lt;/a&gt; (also by Wolfgang Engel) offering math functions in iPhone-friendly ASM&lt;/li&gt;&lt;li&gt;OpenAL sound engine/wrapper, (?)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The &lt;span style="font-family: courier new;"&gt;/Examples&lt;/span&gt; directory offers a number of discrete example Xcode projects logically grouped into sub-directories. Many of the examples worked for me (in the iPhone Simulator), although some failed to demonstrate their intended feature, some black-screened (is that a thing?), and a number crashed (specifically the 10 Ported PowerVR Examples under the &lt;span style="font-family: courier new;"&gt;Renderer&lt;/span&gt; directory). Initially I thought that the 10 'Ported PowerVR Examples' were a direct porting of the 10 Imagination Technologies &lt;a href="http://www.imgtec.com/powervr/insider/sdk/KhronosOpenGLES1xMBX.asp"&gt;Khronos OpenGL ES 1.x SDK for POWERVR MBX&lt;/a&gt; examples, although this may not be the case given the the names of the examples do not clearly align.&lt;br /&gt;&lt;br /&gt;Given my newness to the platform, I am unsure whether the failing example projects were an artifact of the '&lt;span style="font-style: italic;"&gt;project in flux&lt;/span&gt;' or my iPhone SDK that was &lt;a href="http://alblue.blogspot.com/2008/12/enabling-iphone-development-on-ppc-macs.html"&gt;hacked&lt;/a&gt; to run on my PPC iBook G4 (yep, non-Intel). Additionally, the PowerVR Examples use code optimized for the iPhone hardware and so may need to be deployed to the device for execution. Given that I tested the examples in the simulator, this is a third possible cause for the examples that crashed out.&lt;br /&gt;&lt;br /&gt;I am in no position to assess the efficiency of the engines rendering pipeline, but I bet it is smokingly fast relative to competing engines. What is clear to me is that the engine is bare-bones, requiring the programmer to do a lot of work to realize the (in principle) simplest 3D scenes. I am not a graphics programmer and I've been spoiled recently by frameworks in other domains that have delivered big wins with modest effort. I'm not giving up, but I want to hedge my engine betting. My next objective is to assess &lt;a href="http://sio2interactive.com"&gt;SIO2&lt;/a&gt; and see what it can offer in terms of a more scripted (&lt;a href="http://sio2interactive.forumotion.net/about-the-sdk-f1/how-does-oolong-compare-to-sio2-t230.htm"&gt;ready to write game code&lt;/a&gt;) solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-8332510444204081584?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/J323RN8FPiQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/8332510444204081584/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=8332510444204081584" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/8332510444204081584?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/8332510444204081584?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/J323RN8FPiQ/oolong-engine-for-iphone-first-look.html" title="Oolong Engine for the iPhone: A First Look" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/04/oolong-engine-for-iphone-first-look.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEACQXkyfyp7ImA9WxVbE0s.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-6462144466084315153</id><published>2009-03-28T11:30:00.004+11:00</published><updated>2009-03-30T08:39:20.797+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-30T08:39:20.797+11:00</app:edited><title>Review of 3D Engines for the iPhone</title><content type="html">I need a 3D engine for &lt;a href="http://www.neverreadpassively.com/2009/03/iphone-resurrection-and-new-iphone-app.html"&gt;my iPhone project&lt;/a&gt;. I've hacked together my own 2D engines for rendering and physics in the past, but I have done very little OpenGL, and all the time I spent hacking around in the Quake, Quake2, Quake3 engines was focused on game logic and AI. This means that it is hard for me to define suitable requirements upon which to discriminate between available iPhone 3D engine middleware.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Requirements&lt;/span&gt;&lt;br /&gt;Generally, I think my needs are modest (although still too rough to prepare a feature matrix comparison):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;3D rendering and &lt;a href="http://en.wikipedia.org/wiki/Rigid_body_dynamics"&gt;rigid body&lt;/a&gt; 3D physics&lt;/li&gt;&lt;li&gt;Demonstrated iPhone integration and deployment (technically possible and apple has permitted deployment)&lt;/li&gt;&lt;li&gt;Low polygon counts regarding world entities, robust physics simulation (one creature as a dozen or so cuboids connected by simulated muscles)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Facility to execute physics simulations in a/the world without rendering (at the same time as rendering would be really nice but implausible given the hardware)&lt;/li&gt;&lt;li&gt;Programmatic management of 3D world entities (definition, instantiation, post-simulation manipulation)&lt;/li&gt;&lt;li&gt;No cost (I don't mind open sourcing my project if it is permitted by the conditions of the Apple AppStore)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Candidates&lt;/span&gt;&lt;br /&gt;Two clear candidates have emerged that may satisfy my needs, as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.sio2interactive.com/HOME/HOME.html"&gt;SIO2 Interactive, SIO2&lt;/a&gt;: An opensource (&lt;a href="http://en.wikipedia.org/wiki/LGPL"&gt;LGPL&lt;/a&gt;) game engine for the iPhone. It uses the &lt;a href="http://www.bulletphysics.com/Bullet/wordpress/"&gt;Bullet physics library&lt;/a&gt; and 3D objects and scenes are prepared using the opensource tool &lt;a href="http://www.blender.org/"&gt;Blender&lt;/a&gt;. The project offers &lt;a href="http://www.sio2interactive.com/TECHNOLOGY.html"&gt;many tutorials&lt;/a&gt; (16) some of which are screencasts. The project also boasts a healthy number (15) of &lt;a href="http://www.sio2interactive.com/GAMES.html"&gt;deployed iPhone applications&lt;/a&gt; available in the AppStore. The engine has a free version that imposes a flash screen (advertisement for the engine), an indie version is available without this restriction for $50USD. The volume of developer documentation in the form of tutorials is great, although the seeming dependence on Blender to prepare the 3D models and scenes used by the engine may be a deal breaker if there is no programmatic workaround.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.oolongengine.com/"&gt;Oolong Game Engine&lt;/a&gt; (on &lt;a href="http://code.google.com/p/oolongengine/"&gt;google code&lt;/a&gt;): An opensource  (&lt;a href="http://en.wikipedia.org/wiki/MIT_License"&gt;MIT License&lt;/a&gt;) game engine for the iPhone with some credibility given that it was developed in large part by &lt;a href="http://diaryofagraphicsprogrammer.blogspot.com/"&gt;Wolfgang Engel&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Rockstar_Games"&gt;Rockstar Games&lt;/a&gt;' lead graphics programmer. It uses the &lt;a href="http://www.bulletphysics.com/Bullet/wordpress/"&gt;Bullet Physics Library&lt;/a&gt; for 3D physics and &lt;a href="http://www.fluidstudios.com/"&gt;fluid studios&lt;/a&gt; for memory management. It has seemingly been used in a small number of titles (3?) currently available in the AppStore and proposes that it was used as the basis for the iTorque Game Builder. The source code comes with a number of demonstrations, although developer support documentation and tutorials are really lacking, and the mailing list is quite empty. This might be an engine for hard core developers.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Missed the cut&lt;/span&gt;&lt;br /&gt;I came across four engines that missed the cut only because of an associated cost or maturity. I may reconsider selecting one of these engines if (and only if) it can be demonstrated that their adoption will save me time (or money - yes I'm keeping timesheets) on this project.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://unity3d.com/"&gt;Unity 3D Engine&lt;/a&gt; (Unity Technologies): A cross platform engine that offers &lt;a href="http://unity3d.com/unity/features/iphone-publishing"&gt;iPhone integration&lt;/a&gt; features and support. A &lt;a href="http://unity3d.com/gallery/game-list/"&gt;large number of titles&lt;/a&gt; use the engine and presumably some of which are available in the AppStore. The core engine costs $199.00USD (Indie) plus there is a cost of $399USD (Basic) for iPhone integration totalling at least $600USD to get up and running. The cost buys support both in terms of documentation and a company that will return your support emails and calls. The engine looks slick and it seems &lt;a href="http://www.developmag.com/news/30932/200-companies-license-Unity-for-iPhone"&gt;a lot of people&lt;/a&gt; are using it.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.garagegames.com/products/torque-2d/iphone"&gt;tTGB - the iTorque Game Builder &lt;/a&gt;(Garage Games):  The Torque engine has been ported to the iPhone and is offered as two products: &lt;a href="http://www.garagegames.com/products/torque-2d/iphone"&gt;iTGB for 2D games&lt;/a&gt; which is available now for $500USD (presumably built on the old TGEA platform), and a planned but as yet un-released T3D that presumably will have iPhone support. The software is both a builder software for making the game (WYSIWYG 2D editor) as well as an engine and packing tools for deploying your game. As with Unity 3D, the cost of iTGB is for the documentation and human support, and also like that engine it looks really slick. It was unclear to me how may titles have been built using this product and are available in the AppStore.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.stonetrip.com/shiva/publish-3d-game-on-iphone.html"&gt;Ston3D Engine&lt;/a&gt; (ShiVa): The Ston3D engine offers iPhone integration support as a free add-on after purchasing the core product called &lt;a href="http://www.stonetrip.com/index.php"&gt;ShiVa&lt;/a&gt; for $169.00GBP (about $244USD). ShiVa is a Windows-based game development product (like the Torque product) and offers a crippled free version that prevents publishing created games. A number (at least 8) of iPhone titles have been released based on the engine and are available in the AppStore.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cubicvr.org/"&gt;CubicVR Engine&lt;/a&gt; (on &lt;a href="http://sourceforge.net/projects/cubicvr/"&gt;sourceforge&lt;/a&gt;): An opensource (&lt;a href="http://en.wikipedia.org/wiki/LGPL"&gt;LGPL&lt;/a&gt;) game engine with no clear stable builds (only SVN access). There are some iPhone demonstration projects provided with the source code. It uses the &lt;a href="http://www.bulletphysics.com/Bullet/wordpress/"&gt;Bullet physics library&lt;/a&gt; and supports other mobile and console platforms. The code base is seemingly the basis for the &lt;a href="http://www.appstoreapps.com/2008/09/21/pockethoops/"&gt;Pocket Hoops&lt;/a&gt; game in the AppStore. The project does not seem very mature and there are no clear tutorials or support documentation for starting a game project. As such, it did not make the cut.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Out of Scope&lt;/span&gt;&lt;br /&gt;I came across a number of related projects that partially addressed some of my needs, but ultimately were out of scope. They are listed here for completeness, or in case I miss-interpreted the projects.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://irrlicht.sourceforge.net/"&gt;Irrlicht Engine&lt;/a&gt;: An opensource engine with a reasonably large community. At least&lt;a href="http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=30134"&gt; one iPhone game&lt;/a&gt; has been released based on a private port of this engine although judging from &lt;a href="http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=30134&amp;amp;highlight=iphone"&gt;some&lt;/a&gt; &lt;a href="http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?p=181454&amp;amp;sid=1c6a55573e37e70dc6b497c6390fe695"&gt;discussions&lt;/a&gt;, the port does not appear to have been released.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/cocos2d-iphone/"&gt;Cocos2D&lt;/a&gt;: A very cute 2D iPhone engine that uses the &lt;a href="http://code.google.com/p/chipmunk-physics/"&gt;Chipmunk physics engine&lt;/a&gt;. Offers a &lt;a href="http://code.google.com/p/cocos2d-iphone/wiki/FAQ"&gt;FAQ&lt;/a&gt; and development &lt;a href="http://code.google.com/p/cocos2d-iphone/wiki/BestPractices"&gt;best practices&lt;/a&gt;. The platform boasts a &lt;a href="http://code.google.com/p/cocos2d-iphone/wiki/GamesUsingCocos2d"&gt;heap of games&lt;/a&gt; based on the engine and if I decide to go 2D instead of 3D, I'll give this engine serious consideration.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.kevindoolan.net/blog/post/2009/01/24/iPhone-3D-Engine-Development.aspx"&gt;UtopiaGL&lt;/a&gt;: A private 3D iPhone engine project by &lt;a href="http://www.kevindoolan.net/blog/"&gt;Kevin Doolan&lt;/a&gt;. He does not appear to have plans on releasing the code although is &lt;a href="http://www.kevindoolan.net/blog/post/2009/01/24/iPhone-3D-Engine-Development.aspx"&gt;tale of development&lt;/a&gt; is worth the read.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.icarusstudios.com/"&gt;Icarus Studios&lt;/a&gt;: No product yet, but they have some cash behind them and were mentioned on &lt;a href="http://venturebeat.com/2008/09/16/iphone-gets-3d-engine-middleware/"&gt;VentureBeat&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://livingarcana.com/projects"&gt;Living Arcana&lt;/a&gt;: Lots of early discussion (2007) about building an opensource 3D engine for the iPhone, appears to be vapor.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.marcogiorgini.com/articoli.asp?art=112"&gt;Yeti3D&lt;/a&gt;: A port of an engine by Derek John Evans for the Gameboy Advance. Ported and released as a product by &lt;a href="http://www.marcogiorgini.com/"&gt;Marco Giorgini&lt;/a&gt; called &lt;a href="http://www.marcogiorgini.com/articoli.asp?art=114"&gt;iPac3D&lt;/a&gt;. Does not use OpenGL. It seems it was for jailbroken phones (&lt;a href="http://iphone.sleepers.net/moreinfo/Yeti3D.php"&gt;accessible via Installer&lt;/a&gt;).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cubeengine.com/cube.php4"&gt;Cube&lt;/a&gt;: A first person shooter computer game (&lt;a href="http://en.wikipedia.org/wiki/Cube_%28video_game%29"&gt;wikipedia entry&lt;/a&gt;) was &lt;a href="http://www.fernlightning.com/doku.php?id=iphone:cube:start"&gt;ported to the iPhone&lt;/a&gt; and is available in the Apple AppStore for free. The engine is opensource (&lt;a href="http://en.wikipedia.org/wiki/Zlib/libpng_license"&gt;zlib/libpng License&lt;/a&gt;) and the source code for the port is &lt;a href="http://www.fernlightning.com/doku.php?id=iphone:cube:source_code"&gt;available&lt;/a&gt;. This is not an iPhone 3D engine and was not appropriate or mature enough to be in scope.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Alternatives&lt;/span&gt;&lt;br /&gt;Some alternatives popped into my head while '&lt;span style="font-style: italic;"&gt;deep googling&lt;/span&gt;' this problem and I thought I'd list them in the event I do decide to re-scope the project.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Write my own&lt;/span&gt;: One option that I briefly considered and dismissed given the time it would consume is to write a 3D rendering engine myself. I might be able to piece together the things I need from tutorial sites like &lt;a href="http://nehe.gamedev.net/"&gt;Nehe&lt;/a&gt; and &lt;a href="http://www.zeuscmd.com/tutorials/opengles/index.php"&gt;OpenGL ES&lt;/a&gt;. For the physics I could use an off-the-shelf solution like &lt;a href="http://www.box2d.org/"&gt;Box2D&lt;/a&gt; (&lt;a href="http://www.box2d.org/forum/viewtopic.php?f=6&amp;amp;t=1051"&gt;used for Rolando&lt;/a&gt;) or &lt;a href="http://www.bulletphysics.com/Bullet/wordpress/"&gt;Bullet&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Port an engine&lt;/span&gt;: There are many great 3D engines out there just ready and waiting to be ported to the iPhone. May of the communities of those engines have manifest demand, are discussing, or have already started the porting process like &lt;a href="http://irrlicht.sourceforge.net/"&gt;Irrlicht&lt;/a&gt;, &lt;a href="http://www.ogre3d.org/"&gt;OGRE&lt;/a&gt;, and &lt;a href="http://alleg.sourceforge.net/"&gt;Allegro&lt;/a&gt;. Frankly, I do not have the current chops or inclination to get into a port.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Use a Quake&lt;/span&gt;: Both the opensource (&lt;a href="http://en.wikipedia.org/wiki/GPL"&gt;GPL&lt;/a&gt;) &lt;a href="http://en.wikipedia.org/wiki/Quake"&gt;Quake&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Quake_III_Arena"&gt;Quake III Arena&lt;/a&gt; game engines have been ported to the iPhone and are available on jailbroken phones via Cydia. Both engines are 3D, have long histories of community involvement (mods and engine ports), and the source code of their ports are available (&lt;a href="http://www.zodttd.com/wiki/index.php/Quake4iphone"&gt;quake4iphone&lt;/a&gt; and &lt;a href="http://code.google.com/p/quake3-iphone/"&gt;quake3-iphone&lt;/a&gt;). Also, id Software &lt;a href="http://www.idsoftware.com/wolfenstein3dclassic/wolfdevelopment.htm"&gt;might be releasing these titles&lt;/a&gt; officially soon enough. I've had experience with these engines before, but not regarding the simulation and rendering of arbitrary programmatic generated world entities. As such I may have more trouble than a conventional 3D engine in trying to shoehorn non-quake techniques into the engine (maybe a good fallback position).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;span style="font-weight: bold;"&gt;The Plan&lt;/span&gt;&lt;br /&gt;As a warm up I was thinking of writing some tutorials on how to compile and deploy wolf3d, doom, quake, and quake3 for the iPhone. I suspect they will not be too hard to write given the sources are out there, and I expect it'll provide a good opportunity for getting up-to-speed on the environment.&lt;br /&gt;&lt;br /&gt;Regarding my choice of 3D engine, &lt;span style="font-weight: bold;"&gt;I want to go with Oolong for as long as possible and fallback to SIO2 if progress proves too slow&lt;/span&gt;. I have booted the sample programs from both projects in the iPhone simulator, and have started to get a feeling for how one might map the algorithms and data structures from &lt;a href="http://www.neverreadpassively.com/2009/03/3d-virtual-creature-evolution-part-1.html"&gt;morphology evolution research&lt;/a&gt; into a 3D world. This brief research into available engines gives me some alternatives if the scope of the project changes or if I get fed up and decide I require developer documentation and support. I'm looking forward to starting the build early next month, after I finalize some GUI and algorithm designs.&lt;br /&gt;&lt;br /&gt;Check out a similar round-up by &lt;a href="http://digitalbreed.com/"&gt;Matthias Gall&lt;/a&gt; from September 2008 entitled "&lt;a href="http://digitalbreed.com/2008/3d-engines-on-iphone-ipod"&gt;3D Engines on iPhone / iPod&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Please drop me a comment or email if you know of any further 3D engines or related resources.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-6462144466084315153?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/9axUYhIST9w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/6462144466084315153/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=6462144466084315153" title="12 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/6462144466084315153?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/6462144466084315153?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/9axUYhIST9w/review-of-iphone-3d-engines.html" title="Review of 3D Engines for the iPhone" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">12</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/03/review-of-iphone-3d-engines.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcMR385eSp7ImA9WxVUGUo.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-6655237333470138886</id><published>2009-03-25T21:10:00.000+11:00</published><updated>2009-03-25T21:31:26.121+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-25T21:31:26.121+11:00</app:edited><title>Not Reading Passively: iPhone Links</title><content type="html">In the spirit of &lt;span style="font-style: italic;"&gt;not reading passively&lt;/span&gt;, I've been trying hard to write summaries of all the iPhone related links I've been reading. Here are a recent mix from the last week of high-level iPhone propaganda and low level technical details:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://electronmobile.tumblr.com/post/88814772/iphone-sdk-3-0-a-new-beginning"&gt;iPhone SDK 3.0: A New Beginning&lt;/a&gt;: The new 3.0 iPhone OS as the new desktop. iPhone apps are more like simple desktop apps than conventional mobile apps. Android is a long way behind re developer base/app maturity. Constraints on the iPhone are liberating. iPhone is secure, no viruses like windows mobile and blackberry. Lots of fanboy spam in this post as well.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.techcrunch.com/2009/03/22/should-an-iphone-app-developer-charge-or-run-ads-galaxy-impact-case-study/"&gt;Should An iPhone App Developer Charge Or Run Ads? (Galaxy Impact Case Study)&lt;/a&gt;: TechCrunch post on paid apps versus free app with advertising. Example app tanked after releasing for free then charging a dollar then free again. Lesson is to pick the right model at the start and stick with it.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.techcrunch.com/2009/02/19/pinch-media-data-shows-the-average-shelf-life-of-an-iphone-app-is-less-than-30-days/"&gt;Pinch Media Data Shows The Average Shelf Life Of An iPhone App Is Less Than 30 Days&lt;/a&gt;: Only 20% of users return to app after initial download. After 30 days, 5% of users still use app. Return is about 70c per user, equiv with free app is an $8 CPM (most are 0.50 to 2.00).&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.wired.com/gadgets/2009/02/shoot-is-iphone.html"&gt;Coder's Half-Million-Dollar Baby Proves iPhone Gold Rush Is Still On&lt;/a&gt;: Wired article on the iShoot case study (lucky bastard). &gt;600K in a month, 37K a day as number one in app store.&lt;/li&gt;&lt;li&gt;&lt;a href="http://weblog.bignerdranch.com/?p=56"&gt;Good iPhone Practices&lt;/a&gt;: Discussion of managing buttons in UITableViewCells. Only use a XIB file only for a complicated interface. Discussion of instantiating UIViewController subclasses.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mikeash.com/?page=pyblog/friday-qa-2009-03-13-intro-to-the-objective-c-runtime.html"&gt;Intro to the Objective-C Runtime&lt;/a&gt;: How objective c works at the run time level.  A class is a struct. An object is a pointer to a struct, the first variable of which is a pointer to its class. Struct contains compatibility info for older operating systems, built on top of C, can go rooting around to see how it works/hangs together.&lt;/li&gt;&lt;li&gt;&lt;a href="http://gamesfromwithin.com/?p=318"&gt;Using Multiple OpenGL Views And UIKit&lt;/a&gt;: Discussion on how to mix openGL views with UIKit controls/views. Apple suggest to avoid doing transformations with opengl views, avoid putting transparent buttons on them. Stop doing frame updates when opengl view is not visible. Discussion of opengl view, mixed with uiview, mixed with multiple opengl views.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mobileorchard.com/cocos2d-open-source-2d-game-engine-for-iphone-developers/"&gt;Cocos2D: Open Source 2D Game Engine for iPhone Developers&lt;/a&gt;: Engine for easy development of 2d games for the iphone. Open source, built in physics engine (chipmunk).&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.atrexis.com/index.cfm/2008/9/29/Interface-Builder-Tutorial"&gt;iPhone - Interface Builder Tutorial&lt;/a&gt;: Excellent interface builder tutorial that was recommended by someone/where. Step-by-step, very clear.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mobileorchard.com/tutorial-json-over-http-on-the-iphone/"&gt;Tutorial: JSON Over HTTP On The iPhone&lt;/a&gt;: Tutorial that demonstrates how to consume, parse, and display a JSON feed from the web in an iPhone app.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mysmartrend.com/briefs.asp?nwdate=20090324&amp;amp;story=21"&gt;Apple iPhone Makes Up Half Of U.S. Smart Phone Web Traffic&lt;/a&gt;: Study that suggests that 50% of smart phone traffic on the web is coming from iPhones. Up from 10% in August 2008. Android is at 5% in the same market.&lt;/li&gt;&lt;li&gt;&lt;a href="http://arstechnica.com/apple/news/2009/03/engineers-show-off-no-jailbreak-iphone-keyboard-hack.ars"&gt;Engineers show off "no jailbreak" iPhone keyboard hack&lt;/a&gt;: What I liked about this article was the clever workaround for interfacing with the phone, specifically by using the headphone port (WTF?). It "allows two-way transmission of data using frequency shift keying, the same method used in early modems". Awesome.&lt;/li&gt;&lt;li&gt;&lt;a href="http://kotaku.com/5181471/apple-putting-the-squeeze-on-iphone-developers"&gt;Apple Putting The Squeeze On iPhone Developers&lt;/a&gt;: A rumour site. Describes an amendment to the iPhone developer contract that forces developers to submit to a 90 day refund policy for apps in the app store. Developers would have to cover apples 30% cut as well, leaving them out of pocket (how could that be?). Although the clause may have &lt;a href="http://www.pocketgamer.co.uk/r/iPhone/iPhone+news/news.asp?c=12333"&gt;always been in the contract&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://phonegap.com/"&gt;PhoneGap&lt;/a&gt;: A very interesting project focused on automatically generating native (!) iPhone (and other) apps from javascript. Way Cool! You can access device features. Oh yeah, it's open source. Check the video.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-6655237333470138886?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/Fi8Wgbn7eb8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/6655237333470138886/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=6655237333470138886" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/6655237333470138886?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/6655237333470138886?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/Fi8Wgbn7eb8/not-reading-passively-iphone-links.html" title="Not Reading Passively: iPhone Links" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/03/not-reading-passively-iphone-links.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYGRns6eCp7ImA9WxVUGE0.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-6172785139419799967</id><published>2009-03-23T21:10:00.001+11:00</published><updated>2009-03-23T21:12:07.510+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-23T21:12:07.510+11:00</app:edited><title>Running a Genetic Algorithm on the iPhone</title><content type="html">I saw a post the other morning on the &lt;a href="http://geneticargonaut.blogspot.com/"&gt;Genetic Argonaut&lt;/a&gt; blog entitled "&lt;a href="http://geneticargonaut.blogspot.com/2009/03/running-genetic-algorithms-on-cellphone.html"&gt;Running Genetic Algorithms On A Cellphone&lt;/a&gt;". The post described the work by &lt;a href="http://pyevolve.sourceforge.net/wordpress/"&gt;Christian Perone&lt;/a&gt; running a &lt;a href="http://pyevolve.sourceforge.net/wordpress/?p=350"&gt;genetic algorithm in python on a mobile phone&lt;/a&gt;, specifically a Nokia N73 with Symbian and &lt;a href="https://garage.maemo.org/projects/pys60"&gt;PyS60&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;Cool&lt;/span&gt;" I thought. "&lt;span style="font-style: italic;"&gt;I can do something like that!&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Nm8O-3rVrk0/ScddyFHNqzI/AAAAAAAAAD8/cQUlH6fBz9A/s1600-h/photo.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 214px;" src="http://3.bp.blogspot.com/_Nm8O-3rVrk0/ScddyFHNqzI/AAAAAAAAAD8/cQUlH6fBz9A/s320/photo.jpg" alt="" id="BLOGGER_PHOTO_ID_5316321000081435442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I uploaded an old genetic algorithm script I wrote in Ruby for my &lt;a href="http://inspiredalgorithms.com/"&gt;Intelligent Algorithms&lt;/a&gt; project and it ran first time under iPhone Ruby (installed by Cydia), no problems at all. The above image is a screen shot I took in my jailbroken iPhone console running my GA script on a simple two-dimensional ("sphere") function optimization problem.&lt;br /&gt;&lt;br /&gt;Not a big deal really. Wait until you can &lt;a href="http://www.neverreadpassively.com/2009/03/iphone-resurrection-and-new-iphone-app.html"&gt;play with evolved 3D creatures on the iPhone&lt;/a&gt;, that will turn some heads!&lt;br /&gt;&lt;br /&gt;If anyone wants the ruby script, shoot me an email.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-6172785139419799967?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/cm24pMmrsV4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/6172785139419799967/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=6172785139419799967" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/6172785139419799967?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/6172785139419799967?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/cm24pMmrsV4/running-genetic-algorithm-on-iphone.html" title="Running a Genetic Algorithm on the iPhone" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_Nm8O-3rVrk0/ScddyFHNqzI/AAAAAAAAAD8/cQUlH6fBz9A/s72-c/photo.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/03/running-genetic-algorithm-on-iphone.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcAQHszcSp7ImA9WxVUGE0.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-2476778800641184328</id><published>2009-03-23T20:00:00.000+11:00</published><updated>2009-03-23T20:20:41.589+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-23T20:20:41.589+11:00</app:edited><title>3D Virtual Creature Evolution Part 1: Videos</title><content type="html">Inspiration is an important concern for &lt;span style="font-weight: bold; font-style: italic;"&gt;Natural Selection&lt;/span&gt;, my current &lt;a href="http://www.neverreadpassively.com/2009/03/iphone-resurrection-and-new-iphone-app.html"&gt;iPhone application under development&lt;/a&gt;. In communicating the inspiration for the app over recent weeks, I have reverted to accompanying any description I write with a link to a YouTube clip of Karl Sim's early 1990's research. I thought I would take some time to elaborate on this inspiration and dig up a bunch of related motivational resources.&lt;br /&gt;&lt;br /&gt;I'm breaking this down into two posts, the first (this one) provides a collection of YouTube links to the results of 3D creature evolution, and the second longer more academic most summarises the state of research with lots of links to people and papers (I'll publish it in about a week).&lt;br /&gt;&lt;br /&gt;An important element of broader success of the field of virtual creature evolution (and &lt;a href="http://en.wikipedia.org/wiki/Artificial_life"&gt;ALife&lt;/a&gt;) is the visual results it provides. &lt;a href="http://en.wikipedia.org/wiki/Karl_Sims"&gt;Karl Sims&lt;/a&gt; is commonly referred to as &lt;a href="http://www.karlsims.com/evolved-virtual-creatures.html"&gt;the godfather&lt;/a&gt; of the of the study of evolved virtual creatures not because he released the first papers on the topic (he didn't), but because he (or someone close) ensured that digital videos of the work were released and popularised. Importantly, these videos are still around on the web and are held aloft as the seminal examples of this and the broader field can produce.&lt;br /&gt;&lt;br /&gt;The two great video's of Sims' work I often share around are the following (they both have narration):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=oCXzcPNsqGA"&gt;Simulation of Evolution by Natural Selection&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=b1rHS3R0llU"&gt;Daniel Dennett - Is Evolution an Algorithmic Process? Part 4&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Sims' creatures are adapted to address very specific and narrow goals in simulated 3D environments including: swimming speed, walking (distance from origin, total distance traveled), jumping, light following, and block possession.&lt;br /&gt;&lt;br /&gt;Any searching of this topic on YouTube will very quickly turn up results related to &lt;a href="http://www.stellaralchemy.com/lee/"&gt;Lee Graham&lt;/a&gt;'s &lt;a href="http://www.stellaralchemy.com/lee/virtual_creatures.html"&gt;3D Virtual Creature Evolution&lt;/a&gt; (3DVCE) project. The project offers software to design and run experiments for creature evolution as well as a distributed environment for more elaborate experiments. A very clever marketing strategy adopted by Graham (intentionally or otherwise) was to exploit YouTube to both publicise the fruits of his efforts, and as a database for the &lt;a href="http://www.stellaralchemy.com/lee/vce3d_favorites.html"&gt;favourites&lt;/a&gt; and the '&lt;a href="http://www.stellaralchemy.com/lee/vce3d_the_zoo.html"&gt;zoo&lt;/a&gt;' of user submitted creatures. The effect is a near dominance of video-based searching on the topic.&lt;br /&gt;&lt;br /&gt;There are far too many videos to list (and I have watched a large number of those that are out there). I've listed a broad pseudo-popular and interesting collection, as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/view_play_list?p=7C4B2844076AB581"&gt;Presentation to the Purdue Skeptics Society, April 2008&lt;/a&gt; (6 parts including an overview of &lt;a href="http://en.wikipedia.org/wiki/Evolutionary_computation"&gt;evolutionary computation&lt;/a&gt; and his project)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=hkQ_pOehyzw"&gt;Darwin Day 2008 - Evolved virtual creature compilation video&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=l-qOBi2tAnI"&gt;End-over-end Worm - Evolved Virtual Creature&lt;/a&gt; (simply awesome!)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=j2lSPg2kY-c"&gt;Frog - Evolved Virtual Creature&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=F-GnKr4rw4M"&gt;TAM6 - Evolved Virtual Creatures Video&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=_OGq3Ru-TbA"&gt;Virtual creature evolved for flat terrain&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/view_play_list?p=BE43E0586C077DB9"&gt;HOW-TO Videos for 3D Virtual Creature Evolution&lt;/a&gt; (14 parts, interesting if you what to know details about the software)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Graham also links to an impressive number of &lt;a href="http://www.stellaralchemy.com/lee/vce3d_related_projects.html"&gt;related projects&lt;/a&gt;, providing an excellent summary of the state of web-available projects in the field.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.irit.fr/%7ENicolas.Lassabe/"&gt;Nicolas Lassabe&lt;/a&gt; has some interesting challenges involving walking, stair climbing, block pushing, walking across blocks, and even skateboarding:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=d4BGLp0wcdE"&gt;Evolving artificial creatures&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://evorunners.blogspot.com/"&gt;Evo Runners&lt;/a&gt; (I can't access their blog either) provides some good videos, some with some excellent production quality, including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=uS57VNvq0o4"&gt;EvoRunners - result of 1000 generations&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=yZ309UntxMQ"&gt;EvoRunners Creatures&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=aAoeHAKLOBc"&gt;EvoRunners Orgy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=GRWJBDcaFq0"&gt;EvoRunners - Generations&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The &lt;a href="http://animatlab.lip6.fr/RoburEvolvingEn"&gt;AnimatLab&lt;/a&gt; have a very interesting video involving the evolution of different flapping strategies in a simulated bird:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=BfY4jRtcE4c"&gt;Evolution of neuro-controllers for a flapping-wing animat&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I really love the videos by &lt;a href="http://www.tylerstreeter.net/"&gt;Tyler Streeter&lt;/a&gt; of his evolved humanoid jumping behaviour. It makes me laugh out loud every time!&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=PColfw4pSHQ"&gt;Jumping GA Man&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://video.google.com.au/videoplay?docid=1002062030982551847"&gt;Artificial Evolution of Humanoid Jumping Behavior&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://video.google.com.au/videoplay?docid=-2510462304066175045"&gt;Artificial Evolution of Humanoid Standing Behavior&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Finally, here are some additional random clips I came across and thought worthy of a look:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=_m97_kL4ox0"&gt;Polyworld: Using Evolution to Design Artificial Intelligence&lt;/a&gt; (google tech talk)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=0_8tNGKm87U"&gt;Evolved virtual creatures (2007)&lt;/a&gt; (by &lt;a href="http://ero.matfyz.cz/"&gt;ERO&lt;/a&gt; including walking, swimming, and following)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=6WCm7iOR7Ig"&gt;Springs World 3D - Virtual Reality&lt;/a&gt; (using &lt;a href="http://www.sw3d.net"&gt;Springs World 3D&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=7j1D89YIa8Y"&gt;Evolving Virtual Catapults&lt;/a&gt; (Hitting a block as far as possible)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;An excellent aggregation of videos and links in this field (inspiring this post) was compiled and published by &lt;a href="http://aigamedev.com/author"&gt;Alex Champandard&lt;/a&gt; of &lt;a href="http://aigamedev.com/"&gt;AIGameDev&lt;/a&gt; last February entitled: &lt;a href="http://aigamedev.com/videos/evolving-virtual-creatures"&gt;Evolving Virtual Creatures: The Definitive Guide&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Please, if you know of some more/better videos of three dimensional creature evolution leave a comment or get into contact with me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-2476778800641184328?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/iHUSppTyc1I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/2476778800641184328/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=2476778800641184328" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/2476778800641184328?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/2476778800641184328?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/iHUSppTyc1I/3d-virtual-creature-evolution-part-1.html" title="3D Virtual Creature Evolution Part 1: Videos" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/03/3d-virtual-creature-evolution-part-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UHQXgzfCp7ImA9WxVUFkU.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-8846065731528783074</id><published>2009-03-22T10:38:00.005+11:00</published><updated>2009-03-22T11:20:30.684+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-22T11:20:30.684+11:00</app:edited><title>iPhone Resurrection and New iPhone App Project</title><content type="html">After &lt;a href="http://www.neverreadpassively.com/2009/03/so-i-bricked-my-iphone.html"&gt;my iPhone fall from grace&lt;/a&gt;, I &lt;a href="http://en.wikipedia.org/wiki/Bite_the_bullet"&gt;bit the bullet&lt;/a&gt; and bought a new iPhone. It sucks, I'm out of pocket. I'm trying to get over it and I'm optimistically looking to the future. I've &lt;a href="http://www.neverreadpassively.com/2009/01/so-i-jailbroke-my-iphone.html"&gt;jailbroken&lt;/a&gt; again, and I'm &lt;span style="font-weight: bold;"&gt;very aggressively developing a new iPhone application&lt;/span&gt; (out side work hours) with an estimated launch mid year.&lt;br /&gt;&lt;br /&gt;I have been noodling around the idea for a while and &lt;a href="http://www.neverreadpassively.com/2009/01/artificial-intelligence-on-iphone.html"&gt;even mentioned it before&lt;/a&gt; on this blog. I started development it on &lt;span style="font-style: italic;"&gt;Wednesday 18th March&lt;/span&gt;, and since that time I've bashed out: 1) a project plan, 2) a functional requirements specification, and 3) draft technical designs for four major technical risks in my project (&lt;span style="font-style: italic;"&gt;should one do business plan for a self-managed iPhone game?&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;I have been debating with myself over the last few days how much information to publicly release on my ramp up to build. I've tendered comment on functional spec from &lt;a href="http://www.mayhemmethod.com/"&gt;mayhem&lt;/a&gt; and some developer friends, with excellent results so far. Frankly, I'm afraid that some kid with 6 months more ObjectiveC/OpenGL experience than me will see my idea and scoop me. I want to make some cash out of this (cover the cost of the phone/s), but more than the money (I have a good job in the real world) I want this app to exist in the world &lt;span style="font-weight: bold;"&gt;so that I can burn phone cycles (and my phone battery) playing with it&lt;/span&gt;. This latter need supersedes my concerns, so I'm going to release general descriptions of what I'm working on and release more (like the docs) to those who show an interest.&lt;br /&gt;&lt;br /&gt;The code name for my project is '&lt;span style="font-weight: bold; font-style: italic;"&gt;Natural Selection&lt;/span&gt;', although &lt;a href="http://www.neverreadpassively.com/2009/03/so-i-bricked-my-iphone.html"&gt;iPity&lt;/a&gt; or &lt;span style="font-style: italic;"&gt;iPhone Resurrection&lt;/span&gt; may be more appropriate project code names. The app is based on my obsession with &lt;a href="http://www.karlsims.com/"&gt;simulated morphology evolution&lt;/a&gt; over the last 10 years, way before I dropped out of the world to do my &lt;a href="http://jason.brownlee05.googlepages.com/home2"&gt;Masters&lt;/a&gt; and &lt;a href="http://jason.brownlee05.googlepages.com/home22"&gt;PhD&lt;/a&gt; in &lt;a href="http://en.wikipedia.org/wiki/Computational_intelligence"&gt;Computational Intelligence&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The description from the head of my functional requirements specification is as follows:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;The 'natural selection' iPhone application is an evolution simulator for the iPhone and iTouch platforms, providing light entertainment in a game like environment.&lt;br /&gt;&lt;br /&gt;Natural Selection provides a selection of 3D environments and challenges for a virtual creature to adapt to and solve using an evolutionary process. Example environments include walking, swimming, flying, jumping, following, carrying an object, and fighting. The environment defines a virtual 3D space including a plane, obstacles, gravity, friction, and weather. Creatures are defined by a base body plan (head, body, arms, legs) in terms of 3D geometrical shapes that are connected via simulated muscles. The evolutionary process operates upon a genetic code that defines a given creatures body plan and muscle sensor-to-actuator configuration.&lt;br /&gt;&lt;br /&gt;The user selects an environment and a base body plan from their respective libraries and watches as the creature adapts, specialising to the constraints of an environment under an evolutionary process. The user interacts with the process passively by moving the camera around the environment as the creatures evolve, and directly by manipulating the parameters of the evolutionary process. The parameters for the environment can be modified in real-time, changing the objective and constraints imposed on the creature under the evolutionary process.&lt;br /&gt;&lt;br /&gt;Creatures and environments can be saved with screenshot and a symbolic name that can be used to load the creatures and/or environments in a later simulation. Creatures can be shared with friends via electronic communication such as email.&lt;/blockquote&gt;Naturally, there is more to it, especially along the lines of making it a 'game' (thanks Dave) and interactivity toward reinforcing behaviour (thanks Nigel). If you're at all interested, I hope that the description wets your appetite. &lt;span style="font-weight: bold;"&gt;Contact me if you want to know more, or get involved in some way!&lt;/span&gt; In the medium term I'm starting to evaluate 3D and physics engines for the iPhone platform (to give me a leg up), and I'm desperately going to need a source for sweet iPhone-esk graphics and music in coming weeks and months.&lt;br /&gt;&lt;br /&gt;I think an iPhone or OpenGL hacker could whip something up in a few weeks to scoop me. Right now as I type this I think &lt;span style="font-weight: bold;"&gt;I would be pissed off&lt;/span&gt; (emotional brain). Nevertheless my rational brain keeps kicking in reminding me of the 10 years of my life I have dedicated to studding to this domain and the 5 years of that I spent designing building these kind of systems. &lt;span style="font-weight: bold;"&gt;I've got the heuristic and algorithmic savvy as well as the passion to pull this app off well, maybe better than potential scooping competitors&lt;/span&gt;. And if this &lt;a href="http://en.wikipedia.org/wiki/Suspension_of_disbelief"&gt;suspension of disbelief&lt;/a&gt; fails me, at least there will be some incarnations of the idea out there in the wild (hopefully) for me to play with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-8846065731528783074?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/VygPNdGoD5g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/8846065731528783074/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=8846065731528783074" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/8846065731528783074?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/8846065731528783074?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/VygPNdGoD5g/iphone-resurrection-and-new-iphone-app.html" title="iPhone Resurrection and New iPhone App Project" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/03/iphone-resurrection-and-new-iphone-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEFQ3YycSp7ImA9WxVVGE0.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-1771232322098363682</id><published>2009-03-11T18:42:00.007+11:00</published><updated>2009-03-12T08:40:12.899+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-12T08:40:12.899+11:00</app:edited><title>So I bricked my iPhone...</title><content type="html">My &lt;a href="http://www.neverreadpassively.com/2008/12/my-iphone-initiation.html"&gt;brand new iPhone&lt;/a&gt; is basically a write off, and I'm sad.&lt;br /&gt;&lt;br /&gt;The story begins a little over a month ago. It was my birthday, there was a BBQ in the park, there were water balloons, and I had my iPhone in my pocket (super dumb in retrospect). When I got home I noticed that my clothes were quite damp, although the phone was relatively dry, so I thought little of it. Later that evening I played around with it and noticed the home button was not responding. Thinking that a little bit of moisture must have found its way inside the button, I switched it off for the night and left it alone (what I should have done is put it in a container of rice).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The home button was stuffed&lt;/span&gt;. No matter what I did, the home button would not work. I tried restoring. I tried pressing hard and pressing soft. I tried fiddling around with the button in case it was stuck. I started to get that sinking feeling in my stomach that a birthday afternoon of horsing around had fatally damaged my pride and joy.&lt;br /&gt;&lt;br /&gt;I waited a week for the break of following weekend and took it to the geneses at the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Chadstone&lt;/span&gt; apple store. I had &lt;a href="http://www.neverreadpassively.com/2009/01/so-i-jailbroke-my-iphone.html"&gt;recently &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;jailbroken&lt;/span&gt; the phone&lt;/a&gt;, so I restored the device using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;iTunes&lt;/span&gt; back to a virgin state for the trip - this step also retrospectively was a poor move. The dude listened to my '&lt;span style="font-style: italic;"&gt;it doesn't work&lt;/span&gt;' story, inspected the water exposure indicators on the top and bottom of the device and said '&lt;span style="font-style: italic;"&gt;you have exposed it to water, we can't touch it&lt;/span&gt;'. Now, I concede that the home button must have got some moisture in there, although the damn phone was far from immersed! At most it would have been as much as few drops of rain if I were to use it briefly during bad weather. I pushed the point and the dude said that officially the water indicators were not completely triggered, the top was clear and the bottom indicator was partially indicating water exposure. I could have scraped the indicator and gone back on another day to try again - this retrospectively would have been worth a shot.&lt;br /&gt;&lt;br /&gt;A new iPhone. Almost 2 months of use. Next to useless given fragile electronics, and apple tells me I'm on my own. I was a little sad at this point. I accepted the situation, more specifically my causal role, and optimistically began researching the next step: &lt;span style="font-weight: bold;"&gt;third party repair&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I researched the general class of problem from two perspectives: water damaged iPhone and broken home button. I read lots of similar problems and questions on iPhone related forums including a &lt;a href="http://blogs.myspace.com/index.cfm?fuseaction=blog.view&amp;amp;friendID=416062563&amp;amp;blogID=435512784"&gt;most impressive successful iPhone resurrection saga&lt;/a&gt; that involved (among other things) baking the phone in the oven!&lt;br /&gt;&lt;br /&gt;I researched the components that I may need to replace and their prices: home button, flex cable assembly, etc. I also collected a long list of local third party iPhone repair stores and got quotes for fixing the general problem (in the order of $60 to $80 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;AUD&lt;/span&gt; for a home button replacement).&lt;br /&gt;&lt;br /&gt;I picked a guy and dropped off the phone. Unfortunately, replacing the home button did not fix the problem. My guy deduced that it must be the flex cable assembly that the home button interfaces. He ordered an assembly from China, and I waited a number of weeks. The part finally arrived, although swapping out the flex cable assembly and the home button did not fix the problem. My guy deduced that the problem is likely the main board, and the cost would be close to half the value of a new phone. At this point I put a halt to the experiment, and took the device back. Fortunately, my guys policy is '&lt;span style="font-style: italic;"&gt;no fix, no pay&lt;/span&gt;', although unfortunately upon receiving the handset back the speaker no longer works and the screen no longer sits snug in the case. I plan on re-visiting my guy soon to resolve these issues, hoping that the speaker issue is simply a matter of a loose connection, and the screen can be reset in the case better than it was.&lt;br /&gt;&lt;br /&gt;My fall back position was to use the device without a working home button, and use a software solution to close apps. I mean, the only thing the button is for is to close apps. That is what I thought until I went to re-jailbreak the phone so that I could install said software. The finally nail in the coffin is that I cannot re-install a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;jailbroken&lt;/span&gt; firmware on the device because I cannot enter &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;DFU&lt;/span&gt; mode, a step needed in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;quickpwn&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;jailbreaking&lt;/span&gt; process. There was a way to &lt;a href="http://limitededitioniphone.com/how-to-put-the-iphone-into-dfu-mode/"&gt;get into &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;DFU&lt;/span&gt; mode without a home button&lt;/a&gt; using software and &lt;a href="http://www.modmyi.com/forums/ipod-touch-jailbreak-upgrade-downgrade-restore/515371-dfu-without-home-button.html"&gt;hints of alternative &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;jailbreaking&lt;/span&gt; software&lt;/a&gt; (&lt;a href="http://www.ziphone.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;ZiPhone&lt;/span&gt;&lt;/a&gt; or &lt;a href="http://george.insideiphone.com/index.php/iliberty/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;iLIBERTY&lt;/span&gt;&lt;/a&gt;) that may operate this way, but thus far these have not offered a viable path. Therefore: &lt;span style="font-weight: bold;"&gt;No home button, no &lt;/span&gt;&lt;span style="font-weight: bold;" class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;DFU&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; mode, no &lt;/span&gt;&lt;span style="font-weight: bold;" class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;jailbreaking&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;, and thus a bricked iPhone&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Options have eroded and my thoughts have settled on the following for my iPhone finale:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Continuing to use the iPhone as is&lt;/span&gt;. Maybe a software based &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;DFU&lt;/span&gt; mode will come along allowing me to jailbreak and install a software based home button solution (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Bossprefs&lt;/span&gt; or something). I might be able to install an older firmware and then use a software &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;DFU&lt;/span&gt; mode solution. The phone would be a constant reminder of the penalty of not being careful enough with edge technology. The down side is that until a home button solution is found, I have to turn the phone off and on any time I want to change applications, which is VERY ANNOYING!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Selling the iPhone&lt;/span&gt;. I am seriously considering selling the lot for parts on eBay and forking out the cash for either a brand new/secondhand iPhone or more likely a G1 (or equivalent) Android based phone.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Rebuild from Parts&lt;/span&gt;. A third and final option may be to buy another broken phone from eBay - one with a broken screen (my screen is fine) and give them both to an iPhone repair guy to construct a viable phone. Slim chance of a payoff, although cheaper than a new phone.&lt;/li&gt;&lt;/ol&gt;My iPhone situation is dire, and I've had it locked in a draw for the last few weeks so that I didn't have to address it directly (also I was out of the country on business). It is time for me to move on I think, to bury my fallen comrade. Moving to a new (albeit less aesthetic) phone platform seems attractive at this glum point in time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-1771232322098363682?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/KuzrHDlCgp8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/1771232322098363682/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=1771232322098363682" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/1771232322098363682?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/1771232322098363682?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/KuzrHDlCgp8/so-i-bricked-my-iphone.html" title="So I bricked my iPhone..." /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/03/so-i-bricked-my-iphone.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQXo-eip7ImA9WxVRGU8.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-6953210395571767947</id><published>2009-01-26T11:00:00.015+11:00</published><updated>2009-01-26T11:00:00.452+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-26T11:00:00.452+11:00</app:edited><title>Intelligent Agents for Problem Solving</title><content type="html">I have just finished my first week at a new job. The place is called &lt;a href="http://aosgrp.com.au/"&gt;Agent Oriented Software&lt;/a&gt; (or the AOS Group), and they are a 10 year old &lt;a href="http://aosgrp.com.au/contact_us/index.html"&gt;multinational&lt;/a&gt; product/consulting firm focused on the application of intelligent agents (and related technology) to problem solving, &lt;a href="http://aosgrp.com.au/applications/index.html"&gt;seemingly&lt;/a&gt; mostly for R&amp;amp;D and defence. The company core product is called &lt;a href="http://aosgrp.com.au/products/jack/index.html"&gt;JACK&lt;/a&gt;, which is an agent-based platform for autonomous decision making and provides the basis for a host of &lt;a href="http://aosgrp.com.au/products/index.html"&gt;extension products&lt;/a&gt; including team-based behaviour, simulation, cognitive behaviour, and more.&lt;br /&gt;&lt;br /&gt;I had been exposed to &lt;a href="http://en.wikipedia.org/wiki/Intelligent_agent"&gt;intelligent agents&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Multi-agent_system"&gt;multi-agent systems&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/Agent-based_model"&gt;agent-based modelling&lt;/a&gt; before, taking a course in my undergraduate, and reading some if the literature that came out our sister research group while completing my PhD on &lt;a href="http://en.wikipedia.org/wiki/Computational_intelligence"&gt;computational intelligence&lt;/a&gt;. I am only now starting to grasp the true nature of this movement as a new paradigm for software-based problem solving. So-called methodology for designing and building autonomous decision making software systems, now called &lt;span style="font-style: italic; font-weight: bold;"&gt;agent-oriented programming&lt;/span&gt; and &lt;span style="font-style: italic; font-weight: bold;"&gt;agent-oriented software engineering&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;There is an IEEE special interest group focused on standardizing such systems called the &lt;a href="http://www.fipa.org"&gt;Foundation of Intelligent Physical Agents&lt;/a&gt; (FIPA) providing a &lt;a href="http://www.fipa.org/repository/standardspecs.html"&gt;suite of specifications&lt;/a&gt; promoting interoperability. Interestingly, the now-defunct &lt;span style="font-style: italic;"&gt;Australian Artificial Intelligence Institute&lt;/span&gt; (AAII) from what I can tell used to play an influential role in this country and to the field. Given that contributions have trailed off since the early 2000's, I have been poking around the history and projected trajectory of this field.&lt;br /&gt;&lt;br /&gt;Intelligent agents and related technologies still feature in the research curriculum at some universities in my immediate vicinity, for example:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.agentlab.unimelb.edu.au/"&gt;Intelligent Agent Laboratory&lt;/a&gt; (Agentlab) at Melbourne University, including an &lt;a href="http://www.cs.mu.oz.au/research/ai.html"&gt;Autonomous and Intelligent Systems Group&lt;/a&gt; and an &lt;a href="http://www.dis.unimelb.edu.au/research/groups/agent/index.htm"&gt;Agents Group&lt;/a&gt;. Interestingly, AOS was a start-up that spun out of this group and is still affiliated.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.swin.edu.au/ict/research/citr/iamas/index.php"&gt;Intelligent Agents and Multi-Agent Systems&lt;/a&gt; (IAMAS) at Swinburne University, seemingly now integrated into the &lt;a href="http://www.swinburne.edu.au/ict/research/cs3/"&gt;Centre for Complex Software Systems and Services&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rmit.edu.au/agents/www/"&gt;Agent Group&lt;/a&gt; at RMIT responsible for the &lt;a href="http://www.cs.rmit.edu.au/agents/prometheus/"&gt;prometheus methodology&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I'm on the lookout for good inductive texts, other than the classics like &lt;a href="http://www.amazon.com/gp/product/0262731312?ie=UTF8&amp;amp;tag=pensiveponder-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0262731312"&gt;Multiagent Systems: A Modern Approach to Distributed Artificial Intelligence&lt;/a&gt;, and more recent additions such as &lt;a href="http://www.amazon.com/gp/product/0470861207?ie=UTF8&amp;amp;tag=pensiveponder-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0470861207"&gt;Developing Intelligent Agent Systems: A Practical Guide&lt;/a&gt;. I'm interested in cutting through the research agendas in the literature and better grasping the applicable niche for the approach. It seems that so-called &lt;span style="font-style: italic;"&gt;agent-oriented programming&lt;/span&gt; is presented as an extension to object-oriented programming to address the complexity of problem solving with software, where the unit of modelling has shifted from the &lt;span style="font-style: italic;"&gt;object&lt;/span&gt; to the &lt;span style="font-style: italic;"&gt;agent&lt;/span&gt; and its interactions. One can achieve autonomous decision making without the application of an agent metaphor, so I'm interested in the specific benefits the approach can deliver. At the moment, the technology appears more complex than the problems it's trying to solve, I'm personally trying to figure out if it is overly so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-6953210395571767947?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/_-49QzYfeMc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/6953210395571767947/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=6953210395571767947" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/6953210395571767947?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/6953210395571767947?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/_-49QzYfeMc/intelligent-agents-for-problem-solving.html" title="Intelligent Agents for Problem Solving" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/01/intelligent-agents-for-problem-solving.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYESHgyeip7ImA9WxVREUU.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-2380670835402081894</id><published>2009-01-17T19:00:00.004+11:00</published><updated>2009-01-17T19:15:09.692+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-17T19:15:09.692+11:00</app:edited><title>So I jailbroke my iPhone...</title><content type="html">I've had &lt;a href="http://www.neverreadpassively.com/2008/12/my-iphone-initiation.html"&gt;my iPhone&lt;/a&gt; for about a month now, and although the novelty has not worn off, my mind has been on pushing this little computer. I have been slowly been designing some &lt;a href="http://www.neverreadpassively.com/2009/01/artificial-intelligence-on-iphone.html"&gt;AI-centric iPhone apps&lt;/a&gt;, although more than anything else the idea of jail breaking my iPhone has been weighing on me - &lt;a href="http://www.readwriteweb.com/archives/why_you_have_to_jailbreak_the_iphone.php"&gt;coaxing me&lt;/a&gt;, slowly wearing me down&lt;a href="http://www.readwriteweb.com/archives/why_you_have_to_jailbreak_the_iphone.php"&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Before taking the leap, I had some questions that needed to be addressed.&lt;br /&gt;&lt;br /&gt;Would I loose my current configuration and apps? (no) Could I still use &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;AppStore&lt;/span&gt;? (yes) Could I still manage and sync with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;iTunes&lt;/span&gt;? (yes), Could I restore to a virgin &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;un&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;jailbroken&lt;/span&gt; state? (yes), Could I upgrade when future apple updates come down the pipe? (yes) Could I use the phone for development after the break? (yes)&lt;br /&gt;&lt;br /&gt;I found these answers mostly piecewise, some on mentioned on guides, some from direct searching, and generally most of the answers came from iPhone/jailbreak-focused forms such as &lt;a href="http://www.hackint0sh.org/forum/forumdisplay.php?f=123"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Hackint&lt;/span&gt;0sh&lt;/a&gt;, &lt;a href="http://forums.whirlpool.net.au/forum-threads.cfm?f=128"&gt;Whirlpool iPhone&lt;/a&gt;, and &lt;a href="http://www.iphone-hacks.com/forums/"&gt;iPhone Hacks&lt;/a&gt;. There are some bad stories on some of those forums, which I tried to ignore, although reading through fixes for potential problems armed with some level of confidence if things went south. &lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Jailbreaking&lt;/span&gt; was all about changing small properties in software the runs the phone. Software like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;iTunes&lt;/span&gt; doesn't know or care about such modifications after they are made, allowing you to restore, restore from backup, sync, and continue life as per normal. I was satisfied about the process in general and turned my attention to the software used for the breaking. Who wrote it and where are the latest versions?&lt;br /&gt;&lt;br /&gt;There may be a few iPhone cracking movements out there, although I focused on the most popular of the few who call themselves the &lt;a href="http://en.wikipedia.org/wiki/IPhone_Dev_Team"&gt;iPhone Dev Team&lt;/a&gt;. They have a &lt;a href="http://blog.iphone-dev.org/"&gt;blog&lt;/a&gt;, a &lt;a href="http://wikee.iphwn.org/"&gt;wiki&lt;/a&gt;, &lt;a href="http://twitter.com/iphone_dev"&gt;are on twitter&lt;/a&gt;, and most importantly maintain a list of the &lt;a href="http://thepiratebay.org/user/iphonedev/"&gt;most recent versions&lt;/a&gt; of the required software. Some further reading taught me &lt;a href="http://en.wikipedia.org/wiki/Jailbreak_%28iPhone%29"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;jailbreaking&lt;/span&gt;&lt;/a&gt; refers to acquiring the ability to install and execute unsigned code on the iPhone (basically &lt;a href="http://en.wikipedia.org/wiki/Homebrew_%28video_games%29"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;homebrew&lt;/span&gt; apps&lt;/a&gt; and modified versions of proprietary apps). Another concern of this &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;dev&lt;/span&gt; group is "&lt;span style="font-style: italic;"&gt;unlocking&lt;/span&gt;" that refers to modifying a more specific aspect of the phone (it's modem or talking to the network &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;thingo&lt;/span&gt;) and acquiring the ability to use &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;sim&lt;/span&gt; cards from additional carriers (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;sim&lt;/span&gt; unlocking).&lt;br /&gt;&lt;br /&gt;I was already familiar with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;jailbreaking&lt;/span&gt; although under a different name. I knew about &lt;a href="http://en.wikipedia.org/wiki/Modding"&gt;modding&lt;/a&gt; in the context of game consoles, and had enjoyed the freedoms of watching movies across my network with a modded first generation &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;XBOX&lt;/span&gt; for the 6 or more years.&lt;br /&gt;&lt;br /&gt;I was only interested in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;jailbreaking&lt;/span&gt; my phone, not unlocking it. I discovered that there were two software tools to assist me with the process of liberating my phone: &lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;PwnageTool&lt;/span&gt;&lt;/span&gt; which is a is a wizard-like program for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;jailbreaking&lt;/span&gt; an iPhone by installing custom firmware through &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;iTunes&lt;/span&gt;, and &lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;Quickpwn&lt;/span&gt;&lt;/span&gt; which is a tool to quickly and easily jailbreak an IPhone without as many steps (or as much control) as with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;PwnageTool&lt;/span&gt;. I believe &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;PwnageTool&lt;/span&gt; is all about designing and constructing a custom firmware to push to the phone, whereas &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;quickpwn&lt;/span&gt; is all about going with the defaults or the best practices.&lt;br /&gt;&lt;br /&gt;I already had the most recent firmware installed on my 3G phone, and for the sake of simplicity I went with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;Quickpwn&lt;/span&gt;, using this outdated &lt;a href="http://www.iphone-hacks.com/2008/09/18/how-to-use-quickpwn-11-to-jailbreak-iphone-iphone-3g-guide/"&gt;guide for the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;Quickpwn&lt;/span&gt; on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;OSX&lt;/span&gt;&lt;/a&gt;. I chose this guide for the clear and visual presentation of the steps required to get the firmware on the phone, specifically the combination and timing of button presses needed to get the phone into &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;DFU&lt;/span&gt; mode. In retrospect, a quick read through the guide prior to running the software would have been all that would have been needed, as the wizard in the software provides sufficient detail.&lt;br /&gt;&lt;br /&gt;I followed the instructions and still messed up the button combinations needed to get into &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;DFU&lt;/span&gt; mode. I left &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;iTunes&lt;/span&gt; running in the background, and it complained halfway through  the process with a big ugly error message, which I ignored. Finally, at the end of the process, after the new firmware was uploaded, and after it rebooted and ran some on-phone updates, the phone sat in a cycle of rebooting and vibrating. After an impatient 10 minutes, I assumed the process was finished and pulled the cable out of the phone. It completed another reboot cycle and started up as per normal, although with the new &lt;a href="http://en.wikipedia.org/wiki/Cydia_%28iPhone_OS%29"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;Cydia&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://iphone.nullriver.com/beta/"&gt;Installer&lt;/a&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;homebrew&lt;/span&gt; apps installed. Success!&lt;br /&gt;&lt;br /&gt;I've been &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;jailbroken&lt;/span&gt; for a few days and have not had a single problem. Immediately after the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;jailbreaking&lt;/span&gt; process I tested &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;wifi&lt;/span&gt;, 3G, inbound, and outbound calls. I proceeded to install an array of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;pre&lt;/span&gt;-researched/recommended &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;homebrew&lt;/span&gt; apps through &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;Cydia&lt;/span&gt;, not limited to: &lt;a href="http://cydia.saurik.com/info/cycorder/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;Cycorder&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://code.google.com/p/bossprefs/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;bossprefs&lt;/span&gt;&lt;/a&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;SBSettings&lt;/span&gt;, Doom, Quake, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;MXTube&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;mobilefinder&lt;/span&gt;, SSH, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;winterboard&lt;/span&gt;, Backgrounder, and many others. I have not yet installed any game console emulators, but they are high on my &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;todo&lt;/span&gt; list. There are &lt;a href="http://www.installerapps.com/2008/04/28/the-top-50-iphone-applications/"&gt;a lot of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;homebrew&lt;/span&gt; apps&lt;/a&gt; our there, and I'm always open to recommendations! In fact this has been the only way I have been able to navigate the avalanche!&lt;br /&gt;&lt;br /&gt;From what I could read, the core application-centric motivation to jailbreak is to acquire functionalities such as recording video, streaming video from the phone, a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;zoomable&lt;/span&gt; camera, to use the phone as a modem (tethering), adding themes, and customizing the base system. They are fair reasons. In all truth think '&lt;span style="font-style: italic;"&gt;taking control&lt;/span&gt;' of the device and its software was a core motivation for me, and I think &lt;a href="http://appulo.us/appdb/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;AppStore&lt;/span&gt; Piracy&lt;/a&gt; (&lt;a href="http://www.iphonedownloadblog.com/2008/08/04/how-to-add-ipa-apps-to-your-iphone/"&gt;and installation&lt;/a&gt;) is the core reason why an average Joe would jailbreak their phone.&lt;br /&gt;&lt;br /&gt;I am really interested in pushing my own unsigned apps to my phone, and there are &lt;a href="http://hackint0sh.org/forum/showpost.php?p=342736&amp;amp;postcount=53"&gt;guides&lt;/a&gt; &lt;a href="http://hackint0sh.org/forum/showpost.php?s=7080c546638b6e9f9acbfd41f6fcf90d&amp;amp;p=343126&amp;amp;postcount=3"&gt;available&lt;/a&gt;. I am also interested in more &lt;a href="http://code.google.com/p/quake3-iphone/"&gt;edge &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;homebrew&lt;/span&gt; apps&lt;/a&gt; that I have to compile and deploy myself. I'm thinking about getting involves in a few, just as learning exercise - maybe I'll port an open source game or two. We'll see.&lt;br /&gt;&lt;br /&gt;If you are even remotely technical, &lt;span style="font-weight: bold;"&gt;jailbreak your iPhone already!&lt;/span&gt; You will know you made the right decision when you're killing processes from the command line and browsing the file system in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;MobileFinder&lt;/span&gt;. Just feels good knowing you can go there if you need to. Safe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-2380670835402081894?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/26wNi5yd-CI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/2380670835402081894/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=2380670835402081894" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/2380670835402081894?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/2380670835402081894?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/26wNi5yd-CI/so-i-jailbroke-my-iphone.html" title="So I jailbroke my iPhone..." /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/01/so-i-jailbroke-my-iphone.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMASHgzeSp7ImA9WxVSFk4.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-544895893561445564</id><published>2009-01-11T11:00:00.000+11:00</published><updated>2009-01-11T11:07:29.681+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-11T11:07:29.681+11:00</app:edited><title>New Project: Inspired Algorithms</title><content type="html">I am happy to announce my new hobby project for 2009: &lt;a href="http://www.inspiredalgorithms.com/"&gt;Inspired Algorithms&lt;/a&gt; located at &lt;a href="http://www.inspiredalgorithms.com/"&gt;www.InspiredAlgorithms.com&lt;/a&gt;. As I outlined in the &lt;a href="http://www.inspiredalgorithms.com/2009/01/welcome-to-inspired-algorithms.html"&gt;first post&lt;/a&gt; and enshrined in the web pages title bar, the goal of the project is to &lt;span style="font-weight: bold;"&gt;write and offer the largest set of explained and executable computational intelligence algorithms on the planet&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I have been writing copy for this project for about a month with the &lt;a href="http://www.neverreadpassively.com/2008/12/thoughts-on-writing-book-and-self.html"&gt;intention of releasing a self published book&lt;/a&gt;. The new year rolled around and I looked at my mess of private LaTeX files locked away on my hard drive and knew that the project needed to change. The important change in direction I made was the decision to start to release the content of the book &lt;span style="font-style: italic;"&gt;piecewise&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;online&lt;/span&gt;, and &lt;span style="font-style: italic;"&gt;for free&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;My intention is to release 2 or 3 '&lt;span style="font-style: italic;"&gt;inspired algorithm guides&lt;/span&gt;' per week for at least the next 6 months (8-10 per month), with the goal of amassing no less than 50 good quality guides by July 1st 2009. I then intend to release a book version shortly soon after, both in the form of a free PDF e-book and a paid (print on demand) hard copy book.&lt;br /&gt;&lt;br /&gt;It is an ambitious project that I expect to contribute to in the evenings and weekends, channelling my so-called &lt;a href="http://www.shirky.com/herecomeseverybody/2008/04/looking-for-the-mouse.html"&gt;cognitive surplus&lt;/a&gt; toward something real and potentially useful to a wider audience. Already having a backlog of copy provides me with some buffer and slack to ride through any meatspace interruptions. I am also drawing heavily on my previous open source computational projects and my PhD research.&lt;br /&gt;&lt;br /&gt;Already I have noticed a natural refinement of the copy from the dry guides I had written for myself to the more human and readable forms posted online. I have disabled comments on the blog as I don't think they're appropriate, and I've setup an &lt;a href="http://groups.google.com/group/inspired-algorithms"&gt;Inspired Algorithms Discussion Group&lt;/a&gt; which I hope will generate some discussion and feedback that works towards further refining the the quality and accessibility of the content. I have also setup an &lt;a href="http://code.google.com/p/inspired-algorithms/"&gt;Inspired Algorithms Open Source Project&lt;/a&gt; to maintain all ruby source code from the guides.&lt;br /&gt;&lt;br /&gt;One of my concerns with using a blogger blog to host the project was how to effectively manage source code examples snippets in posts. I arrived at a somewhat antiquated solution that importantly looks pretty. I'm following a mixture advice from &lt;a href="http://sunday-lab.blogspot.com/2007/10/source-code-high-light-in-blogger.html"&gt;here&lt;/a&gt; that exploits the &lt;a href="http://code.google.com/p/google-code-prettify/"&gt;google-code-prettify&lt;/a&gt; project that offers javascript and style sheets specialised for &lt;span style="font-style: italic;"&gt;syntax highlighting of code snippets in a web pages&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The setup process involved my adding the prettify links to the head of my blogger template (linked from the subversion trunk) and calling the &lt;span style="font-family: courier new;"&gt;prettyPrint()&lt;/span&gt; function in the &lt;span style="font-family: courier new;"&gt;onload&lt;/span&gt; of the page. Code sample inclusion involves writing the copy of  guide first then editing the HTML and inserting the &lt;span style="font-family: courier new;"&gt;pre&lt;/span&gt; tags with the formatted code inside, then publishing immediately. I find that if I add the code and then view the draft post in compose mode that it messes up the indenting of the code. This is a real pain in the ass for maintaining a set of pre-prepared posts. The code looks really pretty in the blog posts, although sadly the effect is lost on those who subscribe via their feed reader.&lt;br /&gt;&lt;br /&gt;I'm really excited about this project and the potential for building and refining a useful knowledge base of computational intelligence algorithms and explanations. I look forward to the challenge off my aggressive post schedule!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-544895893561445564?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/4DSVB0xlODQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/544895893561445564/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=544895893561445564" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/544895893561445564?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/544895893561445564?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/4DSVB0xlODQ/new-project-inspired-algorithms.html" title="New Project: Inspired Algorithms" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/01/new-project-inspired-algorithms.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08HRHc-cSp7ImA9WxVSEko.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-9002761876042286045</id><published>2009-01-06T12:33:00.006+11:00</published><updated>2009-01-07T09:10:35.959+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-07T09:10:35.959+11:00</app:edited><title>I'm Looking for a Job</title><content type="html">Since finishing up my PhD in Artificial Intelligence in June last year, I've been &lt;a href="http://www.neverreadpassively.com/2008/08/my-experiences-on-one-month-startup.html"&gt;working&lt;/a&gt; with a &lt;a href="http://www.mayhemmethod.com/"&gt;group of guys&lt;/a&gt; on a number of websites with the intent of starting a profitable business. An agreement I made with my girlfriend way back in mid 2008 was that if my ventures were not financially viable or looking like they would be viable soon that I would seek gainful employment in the new year. That time has come. It's a new year and I'm looking for work.&lt;br /&gt;&lt;br /&gt;I started some preparation toward the end of last year, contacting and organising professional referees, re-writing my resume in LaTeX, and setting up email alerts for key terms on local job sites. Initially I was unsure of the space of job sites in Australia. I built a small list and checked traffic on &lt;a href="http://www.alexa.com/"&gt;Alexa&lt;/a&gt; to ensure I wasn't wasting my time. &lt;a href="http://seek.com.au/"&gt;Seek&lt;/a&gt; is still the dominant player with an estimated more than double the page views than the &lt;a href="http://mycareer.com.au/"&gt;next&lt;/a&gt; &lt;a href="http://careerone.com.au/"&gt;two&lt;/a&gt; competitors.&lt;br /&gt;&lt;br /&gt;Re-writing my resume forced me to consolidate my research work and more recent entrepreneurial aspirations into a communicable form which I found useful for really fleshing out the core take-aways. For me the PhD was a true apprenticeship in basic research, the scientific method and technical writing. Co-founding a number of website businesses was a crash course in product development and brand management with sprinkles of team coordination.&lt;br /&gt;&lt;br /&gt;I condensed my resume and used the content to update my &lt;a href="http://www.linkedin.com/in/jasonbrownlee"&gt;linkedin&lt;/a&gt; and &lt;a href="http://www.facebook.com/people/Jason-Brownlee/216800002"&gt;facebook&lt;/a&gt; profiles in the off-chance that a potential employer does a background check. Like this blog post, I exploited my social networks to broadcast that fact that I'm looking for work using the linkedin and facebook status messages, as well as &lt;a href="http://twitter.com/jbrownlee/status/1095859568"&gt;twitter&lt;/a&gt;. Although, unlike those social networking sites, this blog is far less of an advertisement and more a synthesis of ideas.&lt;br /&gt;&lt;br /&gt;I've been thinking a lot about the kind of work I want to do. I'm a trained and experienced software engineer and research scientist and so dream jobs fall into the spectrum of programming complex intelligent systems. This observation ties in closely with a post I wrote back in March 2008 entitled "&lt;a href="http://www.neverreadpassively.com/2008/03/cycling-hobbies-to-day-jobs-personal.html"&gt;Cycling Hobbies to Day Jobs: A Personal Assessment of Starting a Startup&lt;/a&gt;". In that post I made the observation that in the past I had cycled between software engineer and AI researcher and that an ideal job would be to build such systems for a living. I now believe that I'm broadly suited to jobs within the spectrum defined on the boundaries between full time academic and full time software engineer. I am not convinced that jobs in the sweet spot such as 'AI research for development' or 'development of complex intelligent systems' is any better or worse suited than 'research scientist' or 'programmer analyst'. They all effectively exploit the skill set that has been accreted over the last 10 years, and I feel confident that so-called hobby projects can fill in any gaps not covered by a real job.&lt;br /&gt;&lt;br /&gt;I still maintain aspirations of building and owning my own business, but I have seen hungry entrepreneurs and I don't think I'm one of them. Socialising and working with some of these guys in Melbourne as highlighted that what I desired from my own startup is the ability to call the shots. What I think I currently lack is the business experience (or perhaps discipline) to map hard work to financial independence. I am also not convinced that a service based business is the way to go. The bulk of my professional, personal, and creative projects have been produce and release. A business, especially a service-based business is focused on maintenance after release, not abandonment.&lt;br /&gt;&lt;br /&gt;I attended a handful of interviews in the declining weeks of 2008. The positions where predominately at the edges of my spectrum of interest and the conversations during those interviews really woke me up. Paraphrased: "&lt;span style="font-style: italic;"&gt;we're after a career academic, why so few publications? will you teach?&lt;/span&gt;" or "&lt;span style="font-style: italic;"&gt;we're after a senior developer/team leader, how does your 4 year absence from this profession make you competitive?&lt;/span&gt;". Valid questions without a doubt which I addressed, although I can't help but think that being a specialist for the last 10 years and not having to answer such questions would be a better position. Perhaps not. Nevertheless I'm preparing for the long haul.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-9002761876042286045?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/QdW-Ejw2F6A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/9002761876042286045/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=9002761876042286045" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/9002761876042286045?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/9002761876042286045?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/QdW-Ejw2F6A/im-looking-for-job.html" title="I'm Looking for a Job" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/01/im-looking-for-job.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIASXw9eip7ImA9WxVTF0U.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-1558162462719456369</id><published>2009-01-01T13:15:00.006+11:00</published><updated>2009-01-01T14:29:08.262+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-01T14:29:08.262+11:00</app:edited><title>Artificial Intelligence on the iPhone</title><content type="html">On a first pass, the iPhone appears to be the perfect platform to deliver on the promise of the field of &lt;a href="http://en.wikipedia.org/wiki/Intelligent_agents"&gt;Intelligent Agents&lt;/a&gt;. It's a moderately powerful computer with a number of integrated sensors in meatspace (touch, orientation, location, audio, and visual) as well as connectivity to the web and relevant virtual sensors (search, subscription, message passing, etc). The platform could host the ultimate interactive intelligent software agent, but like the vagaries of the field from which this promise came, it is not clear what actions and behaviours such a virtual personal assistant can or should mediate.&lt;br /&gt;&lt;br /&gt;I've had my eye out for any iPhone apps that directly utilize some form of artificial intelligence. I say 'directly' because unlike apps that indirectly exploit such technologies, those that advertise the far are easier for me to find via search.&lt;br /&gt;&lt;br /&gt;I have come across a number of demonstration apps that appear to be written by enthusiasts. There are &lt;a href="http://en.wikipedia.org/wiki/Cellular_automata"&gt;cellular automata&lt;/a&gt; simulations such as &lt;a href="http://iphone.alpheccar.org/LifeGame_%28en%29.html"&gt;Lifegame&lt;/a&gt; that provides an implementation of &lt;a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life"&gt;Conway's game of Life&lt;/a&gt;. There are &lt;a href="http://en.wikipedia.org/wiki/Fractal"&gt;fractal geometry&lt;/a&gt; implementations that use the touch screen interface to zoom such as &lt;a href="http://iphone.alpheccar.org/"&gt;Mandelbrot&lt;/a&gt;. There is at least one &lt;a href="http://en.wikipedia.org/wiki/Chat_bot"&gt;chat bot&lt;/a&gt; app called &lt;a href="http://www.future-apps.net/Amy_A.I./Amy_A.I..html"&gt;Amy AI&lt;/a&gt;. Other examples include speech recognition like &lt;a href="http://www.google.com/mobile/apple/"&gt;google mobile app&lt;/a&gt;, image recognition like &lt;a href="http://www.snaptell.com"&gt;SnapTell&lt;/a&gt;, and &lt;a href="http://www.thinkartificial.org/machine-interfaces/augmented-reality-iphone/"&gt;talk&lt;/a&gt;&lt;a href="http://www.thinkartificial.org/machine-interfaces/augmented-reality-iphone/"&gt; of augmented reality&lt;/a&gt; applications on the horizon. There are also related science applications like programming references, graphics calculators, circuit simulators, and many others.&lt;br /&gt;&lt;br /&gt;I keep finding I have free time to burn on the phone, but find the games pointless. I have been thinking that the iPhone platform would be perfect for so-called &lt;a href="http://www.gwap.com/gwap/"&gt;games with a purpose&lt;/a&gt; as a more meaningful diversion. I have also been thinking that interactive computational intelligence approaches may be a lot of fun, especially applied to open ended problems like automated controller design and simulation in 2D or 3D environments (like &lt;a href="http://sodarace.net/"&gt;soda race&lt;/a&gt;) or morphology evolution (like &lt;a href="http://www.karlsims.com/evolved-virtual-creatures.html"&gt;Karl Sims classical works&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I've idly been looking into this and have stared poking around some open source 3D engines for the iPhone such as &lt;a href="http://www.oolongengine.com/"&gt;Oolong&lt;/a&gt; and &lt;a href="http://www.sio2interactive.com/HOME/HOME.html"&gt;SIO2&lt;/a&gt;. Not sure where this will go, but I would much rather be exploited as a subjective human fitness function while killing a spare 20 minutes on a train than play another round at a vapid arcade game.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-1558162462719456369?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/xE5aa7JvPis" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/1558162462719456369/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=1558162462719456369" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/1558162462719456369?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/1558162462719456369?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/xE5aa7JvPis/artificial-intelligence-on-iphone.html" title="Artificial Intelligence on the iPhone" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2009/01/artificial-intelligence-on-iphone.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQBSHczeyp7ImA9WxRaF04.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-5365084700621347099</id><published>2008-12-20T10:00:00.000+11:00</published><updated>2008-12-20T10:45:59.983+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-20T10:45:59.983+11:00</app:edited><title>My iPhone Initiation</title><content type="html">Santa came early this year for me. On Tuesday (16th Dec) my girlfriend came home from work and presented me with a brand new iPhone. After some messing around with sim cards and pixels I've had a good two days of use with this slick device and thought I would capture my impressions.&lt;br /&gt;&lt;br /&gt;The phone came home without a 3G sim card. Apparently the sales chick forgot to give us one. I didn't mind too much and postponed opening the packaging of the phone until the following day. On the Wednesday night I released the phone from its cardboard and cellophane prison and slapped the new sim in. Two more problems, the sim didn't work (my number didn't transfer nor was the sim activated on the network) and the phone itself had two dodgy pixels. I googled &lt;a href="http://en.wikipedia.org/wiki/Dead_pixel"&gt;dead pixels&lt;/a&gt; and came to the conclusion that they were likely 'hot' or 'stuck' (brighter than the rest of the screen under all conditions), and tried various methods of &lt;a href="http://www.ebaspace.com/iphone-app"&gt;flashing colors&lt;/a&gt; to wake them up, getting nowhere.&lt;br /&gt;&lt;br /&gt;I stormed back to the phone store on the third day, got a new (and this time working) sim card and was bounced to the &lt;a href="http://www.apple.com/au/retail/chadstone"&gt;Apple store at Chadstone&lt;/a&gt; to get the replacement handset. I'd never been to the one and only apple store in my city and was surprised when I was told I needed an appointment (WTF?). I spent my 15 minute wait chatting to some other random worker about his iPhone. I interrogated him about cases and cool applications and he eventually sold me a &lt;a href="http://www.powersupportusa.com/products/iphone3G_airjack.php"&gt;Power Support Air Jacket for iPhone 3G&lt;/a&gt; for $40AUD. He had apparently been through three different cases, arriving on the clear version of this case with the crystal rather than glare resistant film. I chose the black backing for the more grippy feel, the clear and naked iPhone felt way too slippery to me. Anyway, I saw the '&lt;span style="font-style: italic;"&gt;genius&lt;/span&gt;' tech support guy who immediately switched out my phone leaving me a fully functional iPhone 3G, finally.&lt;br /&gt;&lt;br /&gt;I was pretty ignorant about the device when I got it, so naturally I did some research reading &lt;a href="http://en.wikipedia.org/wiki/Iphone"&gt;iPhone&lt;/a&gt; on Wikipedia, the Apple &lt;a href="http://www.apple.com/iphone/"&gt;propaganda page&lt;/a&gt; and videos, the &lt;a href="http://support.apple.com/manuals/#iphone"&gt;PDF user guides&lt;/a&gt; some of which came with the phone, and the &lt;a href="http://www.apple.com/au/support/iphone"&gt;technical support page&lt;/a&gt; with some general information on specifications, resetting, and &lt;a href="http://www.apple.com/batteries/iphone.html"&gt;battery management&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Some details of this pocket computer: It is a black 16GB model (contrasted to the 8GB model) with a 9cm liquid crystal display with a resolution of 320x240. It runs a 620MHz CPU supposedly underclocked to 412MHz and has 128MB of RAM. The touchscreen is &lt;a href="http://en.wikipedia.org/wiki/Touchscreen#Capacitive"&gt;capacitive&lt;/a&gt; meaning it is requires human skin to operate (no glove or stylus). It has a 16GB flash drive (not a HDD), runs an iPhone OS (a derivative of OS X), use a powerVR 3D graphics chipset and has a 2 mega pixel camera. The Chadstone store gave me a 3 month warranty on the device, and Apple has a one year limited warranty.&lt;br /&gt;&lt;br /&gt;Compared to the first generation iPhone, this second generation device has the addition of a plastic backing for improved reception, support for &lt;a href="http://en.wikipedia.org/wiki/3G"&gt;3G&lt;/a&gt; connectivity for voice and broadband, and has built in &lt;a href="http://en.wikipedia.org/wiki/Assisted_GPS"&gt;assisted GPS&lt;/a&gt;. Some common criticisms of the device include: the lack of flash and Java in the web browser, crippled bluetooth, no video, no MMS, no cut/copy/paste functionality, and the low resolution camera with no flash, zoom, or autofocus.&lt;br /&gt;&lt;br /&gt;The carrier is &lt;a href="http://www.optus.com.au/iphone"&gt;Optus&lt;/a&gt; who have &lt;a href="http://www.optus.com.au/coveragemaps"&gt;good 3G coverage&lt;/a&gt; in major cities. The handset is apparently sim locked to the carrier, although Optus will remove this lock for free if requested. I'm on a 12 month contract with 100MB data and $50 of calls per month with a minimum of $19 of calls and a $65 contribution to the cost of the phone per month. Specifically: $0 up front, phone cost (12*$65=$780), min call costs (12*$19=$228), totalling ($780+$228=$1008) over the next 12 months. Call costs are step at 47c per 30 seconds, 35c flag fall, and 25c per text all in AUD.&lt;br /&gt;&lt;br /&gt;Physically the phone is big. It fills my jeans pocket and is too big for my jacket pocket. I feel like a dick in public clumsily retrieving it from my pocket to change songs or answer a call because it is so big. I presume I'll get over this. The battery has been fine so far, giving me about a day of goofing around installing applications, listening to music, calling people, and playing games. About what I'd expect given heavy usage.&lt;br /&gt;&lt;br /&gt;The interface is slick. I love the flick gestures for lists, and I love touching buttons and controls rather than using a disjoint keyboard and mouse. Mail hooked into my GMail account just fine, and AppStore is simple and intuitive to use. I've had applications crash on me a few times making me think a lot about how the OS is managing application serialization when I press the home key and later reinitialization. I had a situation where no third party application would open no matter what I did. I tried resetting, force restarting, and clearing settings all with no luck. I eventually restored the phone (basically a format) which initially pissed me off, although iTunes is set up to cache all the data I care about on the phone meaning after the restore and the subsequent transfer the phone was back to the way I had set it up - now with working third party apps. I had installed a lot of apps in 2 days (about 2 1/2 screens or about 40) and i suspect one of the apps wrote some data where it shouldn't have, stuffing things up for all the other apps.&lt;br /&gt;&lt;br /&gt;I went to a dinner party the other night and an interesting situation occurred where almost everyone there had an iPhone. Almost all second generation, although there was one first generation phone. We all sat around playing on our phones, chatting about what cool applications we had tried or heard of recently, and playing games. Anti-social yet social. I got a lot of suggestions for cool apps and use cases for when device had proven useful in life situations (time tables and guides mostly). I was interested in the first gen phone. It was jail broken, meaning it had a modified firmware installed that allowed unsigned applications to be installed, much like modded xbox's (a domain I'm familiar with). He had a lot more flexibility with the phone, still accessing standard applications, as well as home brew apps like emulators and the array of games they provide.&lt;br /&gt;&lt;br /&gt;The device is a computer in my eyes, and phone and mp3 features are secondary. I'm interested in applications, and more specifically applications that can exploit the features of the device such as multi-touch interface, 3-axis accelerometer, camera, GPS, and 2G/3G/wifi/bluetooth communication. Two days of app sampling is not long, but a few standouts so far include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.google.com/mobile/apple/app.html"&gt;Google Mobile App&lt;/a&gt; - for the voice search where you hold the device to your ear and mouth like a phone and vocalize a search query. It just works.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.midomi.com/"&gt;Midomi&lt;/a&gt; - where you hum or sing a tune and it guesses what song and/or artist it is.&lt;/li&gt;&lt;li&gt;&lt;a href="http://topple.ngmoco.com/"&gt;Topple&lt;/a&gt; - simple block game. I like it for the cool graphics, music, and use of multi-touch for block rotation. It was the first game I came across that gave me an impression of what this device could do. In fact, the few games I've tried by &lt;a href="http://blog.ngmoco.com/"&gt;ngmoco:)&lt;/a&gt; have been impressive.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://aurorafeint.com/"&gt;Aurora Feint&lt;/a&gt; - An RPG/puzzle game with great graphics, music and gameplay. Really quite immerse for such a simple game.&lt;/li&gt;&lt;/ul&gt;I use &lt;a href="http://www.fring.com/"&gt;Fring&lt;/a&gt; for IM and skype, &lt;a href="http://tapulous.com/twinkle/"&gt;Twinkle&lt;/a&gt; for twitter, and the built in Mail for my GMail. I'm not too interested in reading my RSS feeds on the device yet, I'm guessing it may be too small. Photo's are geocoded by default, and so are my twitter messages. Besides those two cases, I haven't seen many good uses of the GPS or the mobility/portability of the device. A '&lt;span style="font-style: italic;"&gt;help me find Apple in Chadstone&lt;/span&gt;' app would have been useful. I can never interpret shopping center maps accurately - I think it's the scale.&lt;br /&gt;&lt;br /&gt;I'm on the lookout for a public transport trip planner like &lt;a href="http://www.metlinkmelbourne.com.au/"&gt;Metlink Melbourne&lt;/a&gt;, a local TV guide application (don't watch all that much TV really), and a good movie trailers app (youtube is good, but there is lots of crap on there). The following are some applications that have been recommended to me from more than one source that I'm contemplating buying, mostly games to test the limits of the device:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://spore.eamobile.com/spore_community/home_assembled.jsp?lang=en"&gt;Spore Origins&lt;/a&gt; - graphics, music, and game play are meant to be great, although it looks expensive.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.freeverse.com/games/game/?id=8006"&gt;Moto Chaser&lt;/a&gt; - this is the motorbike game advertised on the TV where the accelerometer is used to control the bike.&lt;/li&gt;&lt;li&gt;&lt;a href="http://au.wireless.ign.com/articles/939/939447p1.html?RSSwhen2008-12-17_172500&amp;amp;RSSid=939447"&gt;Iron Man: Aerial Assault&lt;/a&gt; - looks ok to me, but this 'guy flying around' game was recommended as being lots of fun&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.pangeasoft.net/iphone/cromag/"&gt;Cro-Mag Rally&lt;/a&gt; - cave man driving game, I think it was on the iPhone TV add as well.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.pangeasoft.net/enigmo/index.html"&gt;Enigmo&lt;/a&gt; - similar in nature to &lt;a href="http://en.wikipedia.org/wiki/The_Incredible_Machine"&gt;The Incredible Machine&lt;/a&gt; although with water&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://icekey.net/metro/Metro.html"&gt;Metro Melbourne&lt;/a&gt; - public transport timetables in Melbourne with time/location filtering for convenience&lt;/li&gt;&lt;li&gt;&lt;a href="itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=294706770&amp;amp;mt=8"&gt;App Sniper&lt;/a&gt; - monitor free applications and changes in price, great for finding app store bargains (the apple store guy loved this app!)&lt;/li&gt;&lt;li&gt;&lt;a href="http://ocarina.smule.com/"&gt;Ocarina&lt;/a&gt; - blow into the microphone and use the device like a musical instrument - seems interesting&lt;/li&gt;&lt;li&gt;&lt;a href="http://ajnaware.wordpress.com/2008/08/13/about-the-oz-weather-iphone-web-application/"&gt;Oz Weather&lt;/a&gt; - for useful weather information (yahoo is crap) from the &lt;a href="http://www.bom.gov.au/"&gt;Australian BOM&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I am trying to postpone app purchases until I understand more about the scope of the free applications out there. As a computer it is about as powerful as something I had 6-8 or so years ago, and I'd expect the apps to reflect that. Where is doom or quake? Where is the old classics like lemmings or the original incredible machine? Where is the Optus usage monitor application so I can see how many calls and how much data I have left for the month (I have to infer from general statistics in the phone).&lt;br /&gt;&lt;br /&gt;Apparently there are about 13 million of these devices out there (both generations), and the development platform has been available for about a year now. I suspect the applications will only get better and better, and hopefully more innovative. Going forward I'm going to try lots more apps. I'm also going to further investigate jail breaking the phone and the home brew scene. Finally, I'm interested in getting into some iPhone development. I have a few ideas, although my old PPC iBook G4 and Tiger OS X are not immediately compatible with the iPhone development platform. I'm looking into &lt;a href="http://alblue.blogspot.com/2008/12/enabling-iphone-development-on-ppc-macs.html"&gt;some workarounds&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-5365084700621347099?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/hx1A4mvpRQY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/5365084700621347099/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=5365084700621347099" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/5365084700621347099?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/5365084700621347099?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/hx1A4mvpRQY/my-iphone-initiation.html" title="My iPhone Initiation" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2008/12/my-iphone-initiation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4MRXczfyp7ImA9WxRbGUo.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-4638654901910373046</id><published>2008-12-11T17:05:00.003+11:00</published><updated>2008-12-11T17:46:24.987+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-11T17:46:24.987+11:00</app:edited><title>Evolutionary computation is popular in the holidays</title><content type="html">It seems to me that so-called exotic computer science topics become popular each holiday season, at least in the context of the news sources I consume. I eluded to this in a &lt;a href="http://www.neverreadpassively.com/2008/11/computational-intelligence-in-wind.html"&gt;recent post&lt;/a&gt;, in particular computational intelligence. Now it seems the trend is evolutionary computation. Some highlights that have cropped up recently include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.wreck.devisland.net/ga/"&gt;Genetic algorithm for building a car&lt;/a&gt;: A flash program that begins execution on page load toward evolving a two-wheeled car in a two-dimensional landscape. The objective function appears to based on keeping the red circles from touching the ground, time, and perhaps distance travelled.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mona-lisa/"&gt;Genetic Programming: Evolution of Mona Lisa&lt;/a&gt;: Example by Roger Alsing of using genetic programming to evolve a set of 50 polygons to represent a source image, specifically the Mona Lisa. A &lt;a href="http://rogeralsing.com/2008/12/09/genetic-programming-mona-lisa-faq/"&gt;FAQ&lt;/a&gt; is provided that comments that the objective function is the sum error between the generated image and the source image, meaning the result is an approximation of the source.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://alteredqualia.com/visualization/evolve/"&gt;Image Evolution&lt;/a&gt;: A web application that uses simulated annealing to optimize the color, number of vertices, and orientation of a set of 50 polygons on an HTML canvas element to represent a given image, the default of which is Mona Lisa. Inspired by the popularity of the above approach.&lt;/li&gt;&lt;li&gt;&lt;a href="http://anyall.org/blog/2008/12/statistics-vs-machine-learning-fight/"&gt;Statistics vs. Machine Learning, fight!&lt;/a&gt; A great overview comparing and contrasting machine learning and statistics. This argument crops up every year or so, some good points though.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gamedev.net/reference/articles/article1175.asp"&gt;Application of Genetic Programming to the "Snake Game"&lt;/a&gt;: The resurgence of this 2000 tutorial on using genetic programming to evolve a controller to successfully play snake.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Give the theme, there have been a number of recent requests for good &lt;a href="http://www.reddit.com/r/programming/comments/7ic6x/does_anyknow_one_where_i_can_get_a_good_tutorial/"&gt;tutorials&lt;/a&gt;, &lt;a href="http://www.reddit.com/r/programming/comments/7hbm9/oss_parallel_genetic_algorithmmachine_learning/"&gt;frameworks&lt;/a&gt;, and &lt;a href="http://www.reddit.com/r/programming/comments/7i9s9/ask_proggit_inspired_by_the_genetic_car_algorithm/"&gt;resources&lt;/a&gt; for learning about evolutionary computation and machine learning. Most are pretty crap, I'm sure this represents an opportunity, now that sites like &lt;a href="http://ai-depot.com/"&gt;ai-depot&lt;/a&gt; and &lt;a href="http://www.generation5.org/"&gt;generation5&lt;/a&gt; are defunct.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-4638654901910373046?l=www.neverreadpassively.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/SyKb9ZbTl3E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/4638654901910373046/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=4638654901910373046" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/4638654901910373046?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/4638654901910373046?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/SyKb9ZbTl3E/evolutionary-computation-is-popular-in.html" title="Evolutionary computation is popular in the holidays" /><author><name>Jason</name><uri>http://www.blogger.com/profile/11283603094324243247</uri><email>jason.brownlee05@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11867812671395170949" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.neverreadpassively.com/2008/12/evolutionary-computation-is-popular-in.html</feedburner:origLink></entry></feed>
