<?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;C08GQ3s8eCp7ImA9WxNVFUQ.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577</id><updated>2009-10-27T08:17:02.570+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>104</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/NeverReadPassively" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><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'/&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'/&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'/&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'/&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'/&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'/&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'/&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'/&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="11 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">11</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'/&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="0 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">0</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'/&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'/&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'/&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'/&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'/&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'/&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'/&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'/&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'/&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'/&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'/&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><entry gd:etag="W/&quot;D0ABRng-eyp7ImA9WxRbGEQ.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-6124194733784200919</id><published>2008-12-10T17:23:00.011+11:00</published><updated>2008-12-10T18:55:57.653+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-10T18:55:57.653+11:00</app:edited><title>Rationalizing the choice of ruby for code examples</title><content type="html">I am writing copy for a technical book that will present concepts predominately as example code in the &lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby Programming Language&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;I recently explained the concept to some old colleagues which resulted in a discussion on the rationale for selecting ruby over math, pseudo code, or no examples at all. I'm not even going to try to justify the choice objectively (perhaps parsimony, prominence, popularity, etc.), rather I'm going to discuss some factors that influenced the decision.&lt;br /&gt;&lt;br /&gt;It is a book by a programmer for programmers, that is people used to thinking about systems from a computational perspective. It is a natural fit therefore to communicate computation notions programmaticly. Further, to do so with small, sharp, and executable code examples ultimately makes the end product more engaging (at least it does when I project myself as a consumer).&lt;br /&gt;&lt;br /&gt;Firstly I chose code examples over mathematical expressions. Equations can present concepts very compactly although generally at the cost of time and readability, at least for the types of things I'm interested in (systems and procedures). I made the same decision to use code snippets to express concepts in my dissertation, primarily because I felt a snippet was faster to write, faster to verify, and easier to read.&lt;br /&gt;&lt;br /&gt;Secondly, I chose code over diagrams because I find most diagrams for conveying computation to be wasteful with regard to space and time. They have their place in design, but when communicating a programming concept I prefer short and sharp code snippets of conditional execution paths or an object and its use, over flow charts and class diagrams.&lt;br /&gt;&lt;br /&gt;Given that I decided upon code examples, I chose to write snippets in a real language over a fictitious one (pseudo code) because I want code that can be executed. This is a no brainer, executable code adds substance to examples for the reader and provides an important verification step into the production of copy. The important decision here is the choice of language for general readability by programmer types.&lt;br /&gt;&lt;br /&gt;I chose Ruby primarily because it is concise and reads well, two features it shares with pseudo code. The ruby syntax is quite general for modern languages, and procedures almost read like conversations between entities. The conciseness and readability come in part from the mixture of procedural, object-oriented, and functional features it supports, the blurred line between expressions and statements, and the fact that it is dynamically typed. Further, programming in Ruby "is fun", which is not surprising given that it was principled to be &lt;a href="http://en.wikipedia.org/wiki/Ruby_%28programming_language%29#Philosophy"&gt;productive and enjoyable for programmers&lt;/a&gt; to work with.&lt;br /&gt;&lt;br /&gt;To recap: code over mathematics for readability of computation, code over diagrams for conciseness, real over fictitious code for executability, ruby over other languages for its power and generality of syntax.&lt;br /&gt;&lt;br /&gt;Ruby is a moderately popular language, although more readers will be unfamiliar than familiar with the specifics of its syntax. This can be addressed by providing a primer of 'Ruby for programmers' in the book, and limiting the use of features that do not align to the average C/C++/C#/Java programmers world view. It seems that a fine balance must to be negotiated here because constructs like closure's can significantly simplify examples in some cases. This is an important caveat to acknowledge because examples in a non-milk language (C or Java) may have been a deal breaker for the younger less experienced me of ten years ago.&lt;br /&gt;&lt;br /&gt;Ruby does have &lt;a href="http://en.wikipedia.org/wiki/Ruby_%28programming_language%29"&gt;some criticisms&lt;/a&gt; over other languages, the most relevant of which is execution speed. Some ruby interpreters are faster than others (checkout this &lt;a href="http://antoniocangiano.com/2008/12/09/the-great-ruby-shootout-december-2008/"&gt;great shootout&lt;/a&gt;), although ultimately the executable ruby examples are intended for education, not production. Speed of execution is happily sacrificed given that the intended readability of examples means code can be realized on demand for a problem and language of choice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-6124194733784200919?l=www.neverreadpassively.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/i-paZgfAbE4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/6124194733784200919/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=6124194733784200919" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/6124194733784200919?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/6124194733784200919?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/i-paZgfAbE4/rationalizing-choice-of-ruby-for-code.html" title="Rationalizing the choice of ruby for code examples" /><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/2008/12/rationalizing-choice-of-ruby-for-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIERno5eCp7ImA9WxRbF0w.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-1846729940602486358</id><published>2008-12-08T16:00:00.009+11:00</published><updated>2008-12-08T17:41:47.420+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-08T17:41:47.420+11:00</app:edited><title>Thoughts on writing a book and self publishing</title><content type="html">I have started preparing copy for a book idea I've been noodling on for a long time. I'll go into the premise soon enough (in some future random post), although at this stage I've been thinking about the method of distribution I want to use. Without going too deeply into it, my first pass lead me to the current crop of self-publishing services.&lt;br /&gt;&lt;br /&gt;I am a big believer in the notion that "&lt;span style="font-weight: bold;"&gt;obscurity is a far greater threat to authors and creative artists than piracy&lt;/span&gt;" espoused by Tim O'Reilly in a post &lt;a href="http://www.openp2p.com/lpt/a/3015"&gt;Piracy is Progressive Taxation&lt;/a&gt; (2002). I am motivated to write because I want people to read and comment on what I have to say. I want to capture attention, inspire, and shed light in facets I think are truly interesting.&lt;br /&gt;&lt;br /&gt;My planed book is technical. As a consumer of technical material my typically use case these days involves a search on google (web, scholar, books), visiting a small set of sources that have the potential of addressing my needs, and reading the slices of the opened sources relevant to my needs. When I was an enthusiastic kid with an interest in technical subjects (mostly programming related) my typical use case was very similar to what it us now, although it more typically ended with my completing a small code tutorial to grasp the concept or principle I was interested in at the time (the target audience and premise of the proposed book).&lt;br /&gt;&lt;br /&gt;The commonality between these two examples is that I typically only ever needed a slice of the source that addressed my need a the time, not the source in its entirety. Services like &lt;a href="http://books.google.com/"&gt;google book search&lt;/a&gt; and similar are wonderful tools towards this end. A critical elaboration to these ideas is that when I locate a source I keep revisiting and/or a source I or peers respect, I typically acquire it. I buy the PDF or the dead tree book because I expect possessing the source will be more efficient for addressing my future needs. This is typically the case, although in non-linear ways such as concept seeding and discovery during a cover-to-cover read.&lt;br /&gt;&lt;br /&gt;These thoughts lead me to the decision that I want to release the entire book as a series of web pages. The book idea is modular, so would translate neatly into a series of articles or posts on a dedicated website. The posts would be index by search engines, and if any good (referenced by readers) will float up in the search results and naturally accrue a readership. The webpage approach is intended to addresses the specific needs of searchers, and is intended to provide a gateway to the book as a consumer product. The web content would be free, and at this stage the e-book and dead tree version would be have to be purchased.&lt;br /&gt;&lt;br /&gt;Self publishing appears to be a good approach for fiction authors that are able to promote their own product. I think natural promotion through search engines and careful SEO falls under this category, especially for the niche technical domain and market for which I am writing.&lt;br /&gt;&lt;br /&gt;There are many-many print on demand (POD) services out there, although some of the newer or more popular sites I have uncovered include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.lulu.com/"&gt;LuLu&lt;/a&gt;: A range of self-publishing services not limited to hosting, printing, syndication, and transaction management. Lulu offer more advanced features like analysis, cover design, and a range of editing and page layout service starting around $350 USD.&lt;/li&gt;&lt;li&gt;&lt;a href="https://www.createspace.com/"&gt;CreateSpace&lt;/a&gt;: Apparently &lt;a href="http://www.readwriteweb.com/archives/amazon_launches_createspace.php"&gt;acquired by Amazon&lt;/a&gt;, offering integration into Amazon's listings. According to their &lt;a href="https://www.createspace.com/Products/BooksPrices.jsp"&gt;prices&lt;/a&gt;, createspace's approach involves taking a small fixed cut as well as a percentage from the list price.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I hear a lot about LuLu, and their site and services look great! The website promotion and/or POD models really appeal to me as I have seen them in action and have participated as a consumer a number of times. For example:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Kevin Kelly's &lt;a href="http://www.kk.org/outofcontrol/"&gt;Out of Control&lt;/a&gt; (1995). A book basically about complexity science that can be purchased like a regular dead tree book or can be &lt;a href="http://www.kk.org/outofcontrol/contents.php"&gt;read online&lt;/a&gt;. What I like about the online version is that it has been broken up for piecewise consumption, although not necessarily suitable to read end-to-end making me want to buy it. Note that there is nothing stopping you from reading the whole thing online other than convenience.&lt;/li&gt;&lt;li&gt;&lt;a href="http://craphound.com/"&gt;Cory Doctorow's fiction&lt;/a&gt;. I've read many of Doctorow's books by downloading, printing, and binding the PDF's. The easy access to a spiral binder as a postgrad made this an attractive option, although now that I do not have such access I am more than happy to buy new books as they come out.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gp-field-guide.org.uk/"&gt;A Field Guide to Genetic Programming&lt;/a&gt; (2008). A technical book on a machine learning technique released for free as an ebook and print on demand. A truly progressive move by these academics, which &lt;a href="http://www.gp-field-guide.org.uk/2008/11/odyssy-20001.html"&gt;as of the end of November 2008&lt;/a&gt; has seen more that 20k downloads in 8 months with 1.3% as &lt;a href="http://www.lulu.com/content/2167025"&gt;POD purchases&lt;/a&gt; at approximately $13USD per copy.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I intended to spend my southern hemisphere summer focusing on writing the bulk of the copy for the book. There are some unsolved technical issues coming up which I'm looking forward to addressing including selection of appropriate (read: "nice looking") latex packages for type setting the book and sample code, and effectively managing the editing process.&lt;br /&gt;&lt;br /&gt;I really want to split test the book and article format online, but I'm concerned that it would take away from professionalism of the final site and product. I suspect I will exploit the fall back position of enlisting a large pool of technical editors to achieve the same ends.&lt;br /&gt;&lt;i&gt;&lt;a name="lesson1"&gt;&lt;i&gt;&lt;/i&gt;&lt;/a&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-1846729940602486358?l=www.neverreadpassively.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/1a0JTXYOpb0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/1846729940602486358/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=1846729940602486358" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/1846729940602486358?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/1846729940602486358?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/1a0JTXYOpb0/thoughts-on-writing-book-and-self.html" title="Thoughts on writing a book and self publishing" /><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/thoughts-on-writing-book-and-self.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8CSHo9fyp7ImA9WxRUGE8.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-1342134291434692856</id><published>2008-11-28T09:36:00.003+11:00</published><updated>2008-11-28T10:01:09.467+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-28T10:01:09.467+11:00</app:edited><title>Computational Intelligence in the wind</title><content type="html">There seems to be a lot of chatter about &lt;a href="http://en.wikipedia.org/wiki/Genetic_algorithm"&gt;genetic algorithms&lt;/a&gt; in recent days, for example:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ejohn.org/blog/genetic-ab-testing-with-javascript/"&gt;Genetic A/B Testing with JavaScript&lt;/a&gt;: a discussion by &lt;a href="http://ejohn.org/about/"&gt;John Resig&lt;/a&gt; about reverse engineering the Genetify service that seemingly uses a genetic algorithm to drive split testing. Seems like a problematic approach to me, good for sampling the space, but poor for confidence-based decision making over what design to choose.&lt;/li&gt;&lt;li&gt;&lt;a href="http://somanyschemes.com/2008/11/26/cssevolve-guided-stylesheet-evolution/"&gt;CSSEvolve: guided stylesheet evolution&lt;/a&gt;: an introduction by &lt;a href="http://andrewcantino.com/"&gt;Andrew Cantino&lt;/a&gt; to &lt;a href="http://iterationprojects.com/evolve/"&gt;CSS Evolve&lt;/a&gt; service by &lt;a href="http://iterationlabs.com/"&gt;IterationLabs&lt;/a&gt; that provides an interactive GA for basic sampling CSS designs for a given page (varies fonts, colors, etc). Interesting notion, and likely a good application for an interactive evolutionary algorithm.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://scienceblogs.com/goodmath/2008/11/evolution_produces_better_ante.php"&gt;Evolution Produces Better Antenna; Casey Luskin Very Upset&lt;/a&gt;: on &lt;a href="http://scienceblogs.com/goodmath/"&gt;Good Math, Bad Math&lt;/a&gt; by Mark Chu-Carroll discussing how &lt;a href="http://www.evolutionnews.org/2008/11/biologic_explores_the_successe.html#more"&gt;some intelligent design evangelist&lt;/a&gt; talking about the post of &lt;a href="http://biologicinstitute.org/2008/10/17/the-genius-behind-the-ingenious/"&gt;another evangelist&lt;/a&gt;, both of which were unhappy by the (awesome) &lt;a href="http://www.nasa.gov/centers/ames/news/releases/2004/04_55AR.html"&gt;GA-designed antenna&lt;/a&gt; work at NASA from 2004 (old news).&lt;/li&gt;&lt;/ul&gt;For some reason (I was procrastinating), all of this GA talk motivated me to update the wikipedia page for the general and specific fields of research for my doctoral work. I definition and techniques sections as well as cleaned up the &lt;a href="http://en.wikipedia.org/wiki/Artificial_immune_system"&gt;Artificial Immune Systems&lt;/a&gt; page, and kicked off a new &lt;a href="http://en.wikipedia.org/wiki/Clonal_Selection_Algorithm"&gt;Clonal Selection Algorithms&lt;/a&gt; wiki entry. All very basic, but I expect to add more content over the coming days.&lt;br /&gt;&lt;br /&gt;Although I've &lt;a href="http://en.wikipedia.org/wiki/Extremal_optimization"&gt;created wiki pages before&lt;/a&gt;, this recent bout got me thinking how useful this service could be if it were elaborated by experts in the field. Although it's an encyclopedia, it would be within scope to motivate fields of research, even highlight open problems and provide sample code and test data. Wiki pages could be a useful valuable scientific resources, rather than a #1 Google result that is ignored by those in the field. I'm now thinking how &lt;a href="http://knol.google.com/k"&gt;Knol&lt;/a&gt; fits into these perspective...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-1342134291434692856?l=www.neverreadpassively.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/xQ4xmMDjN9Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/1342134291434692856/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=1342134291434692856" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/1342134291434692856?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/1342134291434692856?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/xQ4xmMDjN9Q/computational-intelligence-in-wind.html" title="Computational Intelligence in the wind" /><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/2008/11/computational-intelligence-in-wind.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUMQ34yfyp7ImA9WxRUFU0.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-6299906839782353900</id><published>2008-11-24T14:00:00.003+11:00</published><updated>2008-11-24T17:31:22.097+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-24T17:31:22.097+11:00</app:edited><title>More Video Lectures</title><content type="html">I've watched a few more video lectures recently, mostly focused around Complex Systems and Machine Learning. I haven't figured out the best process to internalise from this medium, although I suspect I will progress to something like &lt;a href="http://www.catonmat.net/"&gt;Peteris Krumins&lt;/a&gt;' approach (for example, his &lt;a href="http://www.catonmat.net/blog/mit-introduction-to-algorithms-part-nine/"&gt;analysis of Introduction to Algorithms&lt;/a&gt;). Anyway, some notes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://videolectures.net/acai05_filipic_ssm/"&gt;Stochastic Search Methods&lt;/a&gt; by &lt;a href="http://dis.ijs.si/filipic/"&gt;Bogdan Filipič&lt;/a&gt; (2005). Provides an introduction into search methods that use randomness, differentiated from calculus methods (like gradient decent) and enumerative methods (like exhaustive search and dynamic programming). The general field is motivated as approximation methods for knowledge discovery in high-dimensional and multi-modal search spaces (where calculus and enumerative methods break down). Focused introduction to Simulated Annealing and Evolutionary Algorithms including Evolution Strategies, Genetic Algorithm, and Genetic Programming.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://videolectures.net/aaai07_balogh_daevo/"&gt;Dance Evolution&lt;/a&gt; by undergraduate students at the &lt;a href="http://eplex.cs.ucf.edu/"&gt;Evolutionary Complexity Lab&lt;/a&gt;, University of Central Florida (2007). Short demonstration of 3D dancers comprised of neural networks trained with an interactive genetic algorithm, specifically a variant of &lt;a href="http://nn.cs.utexas.edu/project-view.php?ProjID=14"&gt;NEAT&lt;/a&gt;. More information and videos available on the &lt;a href="http://eplex.cs.ucf.edu/dance_evolution/"&gt;project page&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://videolectures.net/aaai07_karpov_nero/"&gt;NERO 2.0: Neuro Evolving Robotic Operatives&lt;/a&gt;. An introduction to the nero game for interactively developing controllers for agent simulations using genetic algorithms and neural networks. I remember a keynote on this at a conference back in 2006 - looks like a lot of fun! &lt;a href="http://nerogame.org/"&gt;Official page&lt;/a&gt; and &lt;a href="http://nn.cs.utexas.edu/project-view.php?ProjID=68"&gt;project page&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://videolectures.net/eccs08_cohen_apcstis/"&gt;A Paradigmatic Complex System: The Immune System&lt;/a&gt; by &lt;a href="http://www.weizmann.ac.il/immunology/iruncohen/"&gt;Irun Cohen&lt;/a&gt; (2008). The presentation of the immune system as a model complex system, managing the subsuming complex system of the host organism. The immune system as computation, cytokine networks, and the system properties being degenerate, pleiotropic, and redundant. The increase in complexity can result in an increase in fragility (invertebrate versus vertebrate immune systems). There was also a great graph showing the trend of complexity against evolutionary time. I'm quite familiar with Cohen's take on the immune system, I researched it for a while for my dissertation, specifically the &lt;a href="http://jason.brownlee05.googlepages.com/TR22-2007.pdf"&gt;cognitive paradigm of immunity&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://videolectures.net/ephdcs08_sole_eocibn/"&gt;Emergence of complexity in biological networks: from selection to tinkering&lt;/a&gt; by &lt;a href="http://complex.upf.es/%7Ericard/"&gt;Ricard V. Solé&lt;/a&gt; (2008). Considers the pervasiveness of networks in complex systems, and considers the development of such networks under selection (optimization in some cases) and tinkering (working with what is available without foresight). Examples including protein interaction networks and word co-occurrences, each with model systems. The talk pointed me to an interesting paper entitled &lt;a href="http://www.gvsu.edu/cms3/assets/6D2549F6-ED41-142A-2D7251DEDEE796B4/Evolution%20and%20tinkering.pdf"&gt;Evolution and Tinkering&lt;/a&gt; (1977) by &lt;a href="http://en.wikipedia.org/wiki/Fran%C3%A7ois_Jacob"&gt;François Jacob&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://videolectures.net/sscs06_bullock_ics/"&gt;Introduction to Complexity Science&lt;/a&gt; by &lt;a href="http://www.ecs.soton.ac.uk/people/sgb"&gt;Seth Bullock&lt;/a&gt;. Provides an introduction into complex systems with examples including termite mounds, the brain, developmental biology, and evolution. He provides an interesting case for the now pervasive use of evolution as an explanation and/or terminology out side of the field, a role that used to be taken by physics. A good rant at the end about biologically inspired techniques needing to be justified based on their innate suitability rather than their inspiration, tempered with the observation that we can still use tools that we do not fully understand (I ranted on this myself in my dissertation).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I have also been thinking about getting into some technical communication. I started with the notion of a book or an ebook providing an introduction to computational intelligence search techniques (something like &lt;a href="http://www-igm.univ-mlv.fr/%7Elecroq/"&gt;Thierry Lecroq&lt;/a&gt;'s book for &lt;a href="http://www-igm.univ-mlv.fr/%7Elecroq/livres.html"&gt;String Algorithms&lt;/a&gt; and associated &lt;a href="http://www-igm.univ-mlv.fr/%7Elecroq/string/index.html"&gt;Java examples&lt;/a&gt;). Thinking that the presentation was a bit dry, my thoughts shifted to a blog or mini-ebook based approach (like &lt;a href="http://peepcode.com/"&gt;Peepcode&lt;/a&gt; for ruby on rails development). I also think a screen cast medium would be effective for tutorials and demonstrations (like peepcode and &lt;a href="http://railscasts.com/"&gt;railscasts&lt;/a&gt;). I want to find a good mix of interestingness, monetizability in a medium to present a set of discrete related topics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-6299906839782353900?l=www.neverreadpassively.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/SLuf2XXZ0ZA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/6299906839782353900/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=6299906839782353900" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/6299906839782353900?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/6299906839782353900?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/SLuf2XXZ0ZA/more-video-lectures.html" title="More Video Lectures" /><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/2008/11/more-video-lectures.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYHQX86eSp7ImA9WxRUEk4.&quot;"><id>tag:blogger.com,1999:blog-946587890062083577.post-8337600481673835179</id><published>2008-11-20T11:00:00.004+11:00</published><updated>2008-11-21T12:15:30.111+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-21T12:15:30.111+11:00</app:edited><title>Complexity Research in Australia</title><content type="html">I have been doing a little reading in the complexity sciences of late, and have uncovered a network of local (Australia) organisations, projects, and labs focused on this field of research. I presume I had not detected their presence before given my focus on learning and adaptation  processes. This subtle influence lead me through &lt;a href="http://jason.brownlee05.googlepages.com/TR06-2007.pdf"&gt;adaptationism vs selectionism&lt;/a&gt;, &lt;a href="http://jason.brownlee05.googlepages.com/TR34-2007.pdf"&gt;selectionist theories&lt;/a&gt;, &lt;a href="http://jason.brownlee05.googlepages.com/TR10-2007.pdf"&gt;adaptive system formalisms&lt;/a&gt; and ultimately to &lt;a href="http://jason.brownlee05.googlepages.com/TR05-2007.pdf"&gt;complex adaptive systems&lt;/a&gt;, all of which played a critical role in my doctoral dissertation. The difference is that &lt;a href="http://en.wikipedia.org/wiki/Complex_system"&gt;complexity sciences&lt;/a&gt; is broader than &lt;a href="http://en.wikipedia.org/wiki/Adaptation"&gt;adaptation&lt;/a&gt; by a complex system, where systems can have the attributes of complexity (impervious to reductionism, non-linear interactions between components, emergent phenomena, etc) irrespective of 'improving their performance in an environment'  - such concerns are irrelevant in systems such as climate systems, cosmological systems, and other physical systems.&lt;br /&gt;&lt;br /&gt;Anyway, I started with Professor &lt;a href="http://www.csse.monash.edu.au/%7Edgreen/index.html"&gt;David Green&lt;/a&gt; at Monash who has a &lt;a href="http://www.csse.monash.edu.au/%7Edgreen/publications.html"&gt;long histroy&lt;/a&gt; of complex systems research, including a recent book on &lt;a href="http://www.csse.monash.edu.au/%7Edgreen/books/springer/"&gt;landscape ecology&lt;/a&gt; looking at networks in ecosystems. Green's lab has setup &lt;a href="http://vlab.infotech.monash.edu.au/"&gt;VLAB&lt;/a&gt;, a virtual laboratory for complexity research intended to market some of the more interactive aspects of the field to a broader audience including a &lt;a href="http://vlab.infotech.monash.edu.au/simulations/"&gt;large number of in-browser simulations&lt;/a&gt; (Java applets).&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.arc.gov.au/"&gt;Australian Research Council&lt;/a&gt; (ARC) appear to have at least three web presences for their interests in complex systems, specifically the &lt;a href="http://www.complexsystems.net.au/"&gt;Complex Open Systems Research Network&lt;/a&gt; (COSNet) that seems to be a network of researches involved in ARC funded complex research, and the &lt;a href="http://www.accs.uq.edu.au/"&gt;ARC Center for Complex Systems&lt;/a&gt; (ACCS) hosted at UQ, and the ARC &lt;a href="http://www.complex.org.au/"&gt;Centre of Excellence for Mathematics and Statistics of Complex Systems&lt;/a&gt; (MASCOS). The COSNet site seems the more elaborate of the three, not limited to some insight into the &lt;a href="http://www.complexsystems.net.au/content/history"&gt;history&lt;/a&gt; of the center, its &lt;a href="http://www.complexsystems.net.au/content/vision"&gt;vision&lt;/a&gt; that motivates the field of inquiry, and more interestingly &lt;a href="http://www.complexsystems.net.au/content/software"&gt;example software&lt;/a&gt;. I am &lt;a href="http://www.hcsnet.edu.au/arcnetworks"&gt;unclear of the relationship&lt;/a&gt; between the ACCS, MASCOS, and COSNet other than an obvious overlap in the source of funding and in some cases center members.&lt;br /&gt;&lt;br /&gt;The Commonwealth Scientific and Industrial Research Organisation (CSIRO) also has an interest in complexity, demarcating &lt;a href="http://www.dar.csiro.au/css/"&gt;complex systems science as an emerging science area&lt;/a&gt;, and setting up the &lt;a href="http://www.csiro.au/org/CSS.html"&gt;CSIRO Centre for Complex Systems Science&lt;/a&gt; (CSS) directed by &lt;a href="http://www.csiro.au/people/John.Finnigan.html"&gt;John Finnigan&lt;/a&gt;. The CSS motivate the field well with specific divisions in &lt;a href="http://www.csiro.au/science/ComplexBiologicalSystems.html"&gt;biological&lt;/a&gt;, &lt;a href="http://www.csiro.au/science/ComplexPhysicalSystems.html"&gt;physical&lt;/a&gt;, and &lt;a href="http://www.csiro.au/science/ComplexSocial-EcologicalSystems.html"&gt;social-ecological&lt;/a&gt; systems as well as the &lt;a href="http://www.csiro.au/org/CMISoverview.html"&gt;fundamentals&lt;/a&gt;. The 'emerging science area' site does have some interesting descriptions, presentations, and software downloads, although you have to dig deep into their mesh of pages.&lt;br /&gt;&lt;br /&gt;Interestingly some of these organisations have emerged from theoretical physics an atmospheric research, which makes sense given the cross-disciplinary nature of the field and that what are now defined as complex systems are prevalent in such fields. This community seems larger and more motivated in this country (to do: test this assumption) than the field of computational intelligence that I previously chose to pursue, likely given the broader aims of complexity science that clearly have a strong overlap with (encompass?) my field.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/946587890062083577-8337600481673835179?l=www.neverreadpassively.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeverReadPassively/~4/7oFH_ie6SFE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neverreadpassively.com/feeds/8337600481673835179/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=946587890062083577&amp;postID=8337600481673835179" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/8337600481673835179?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/946587890062083577/posts/default/8337600481673835179?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NeverReadPassively/~3/7oFH_ie6SFE/complexity-sciences-research-in.html" title="Complexity Research in Australia" /><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/2008/11/complexity-sciences-research-in.html</feedburner:origLink></entry></feed>
