<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-34594713</id><updated>2012-01-10T18:09:46.167+11:00</updated><title type='text'>NoFoodHere</title><subtitle type='html'>A Software Engineer in search of free food blogs his way to fame and fortune. This is the showcase of what I do with myself while I am 'studying' at Uni.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nofoodhere.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nofoodhere.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jordan</name><uri>http://www.blogger.com/profile/15482038960284712137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-34594713.post-4701332369522671623</id><published>2007-07-19T18:45:00.000+10:00</published><updated>2007-07-19T22:47:39.612+10:00</updated><title type='text'>NoFoodHere Search (beta)</title><content type='html'>&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;NoFoodHere&lt;/span&gt; Search (beta), the newest and coolest search engine, is now online as a public beta, and is set to &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;revolutionise&lt;/span&gt; the way we search the web.&lt;br /&gt;&lt;br /&gt;The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;NoFoodHere&lt;/span&gt; search is the same, but different. It's main new feature, that differentiates it from virtually every other search engine is that it does not return &lt;span style="font-weight: bold;"&gt;pages&lt;/span&gt; of results. Rather, it streams them to users as required, and dynamically presents more and more results as the user scrolls down the page.&lt;br /&gt;&lt;br /&gt;Give it a whirl at &lt;a href="http://nofoodhere.com/"&gt;http://nofoodhere.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34594713-4701332369522671623?l=nofoodhere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/4701332369522671623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/4701332369522671623'/><link rel='alternate' type='text/html' href='http://nofoodhere.blogspot.com/2007/07/nofoodhere-search.html' title='NoFoodHere Search (beta)'/><author><name>Jordan</name><uri>http://www.blogger.com/profile/15482038960284712137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-34594713.post-116384559824176010</id><published>2006-11-18T21:15:00.000+11:00</published><updated>2006-11-18T21:26:38.296+11:00</updated><title type='text'>Two Open-source Projects Released!</title><content type='html'>I am pleased to announce that I have been able to (very quickly) release two of my projects as open-source, released under the &lt;a href="http://www.gnu.org/licenses/gpl.html" rel="nofollow"&gt;GNU General Public License 2.0&lt;/a&gt;.&lt;br /&gt;&lt;a href="http://code.google.com/p/newstrends/"&gt;Global News Trends&lt;/a&gt;, the Java news grapher, and &lt;a href="http://code.google.com/p/orionsniffer/"&gt;Orion&lt;/a&gt;, a flexible TCP/IP realtime image sniffer. So please feel free to take a look at these projects - all feedback, contributions (as in code) etc are more than welcome!&lt;br /&gt;&lt;br /&gt;I am planning to progressively release more of my projects as I slowly work through my archives and clean things up.&lt;br /&gt;&lt;br /&gt;I have just started work on a new 3D imaging technology that aims to reconstruct 3D scenes based on 2 or more still frames from a movie. Imagine taking a movie of your holiday, then being able to view it in 3D! Thats the goal at least, and I will keep you posted as I go.&lt;br /&gt;&lt;br /&gt;Speaking of goals, I only have 1 exam to go, Logic &amp; Computation (Predicate Calculus, Prolog, etc...), so I can soon focus more on my programming over the summer break. ('&lt;em&gt;Goal'&lt;/em&gt; is a logic/prolog reference in case you didn't get it...just a lame pun)&lt;br /&gt;&lt;br /&gt;Anyway, hope you are enjoy the code!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34594713-116384559824176010?l=nofoodhere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nofoodhere.blogspot.com/feeds/116384559824176010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34594713&amp;postID=116384559824176010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/116384559824176010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/116384559824176010'/><link rel='alternate' type='text/html' href='http://nofoodhere.blogspot.com/2006/11/two-open-source-projects-released.html' title='Two Open-source Projects Released!'/><author><name>Jordan</name><uri>http://www.blogger.com/profile/15482038960284712137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34594713.post-116061948989534217</id><published>2006-10-12T12:18:00.000+10:00</published><updated>2006-10-12T12:19:12.483+10:00</updated><title type='text'>New Idea</title><content type='html'>I have just started working on a new idea. Without giving it away just yet, it will be a collaborative Google Gadget. I've been trying to see if it is feasible, primarily the bandwidth contraints! I will offload as much data as possible to Google Pages. But even so, it might only work for a short period of time. This Gadget will be very graphical. The actual coding is the easy part this time! Unfortunately, I have exams in a few weeks, but I am still aiming to complete this latest project by Q1 2007.  I will blog my progress as I go!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34594713-116061948989534217?l=nofoodhere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/116061948989534217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/116061948989534217'/><link rel='alternate' type='text/html' href='http://nofoodhere.blogspot.com/2006/10/new-idea.html' title='New Idea'/><author><name>Jordan</name><uri>http://www.blogger.com/profile/15482038960284712137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-34594713.post-115892039886025012</id><published>2006-09-22T20:01:00.000+10:00</published><updated>2006-09-22T20:41:41.716+10:00</updated><title type='text'>Latest Google Searches Gadget (beta)</title><content type='html'>Wouldn't it be cool to see what types of things people are searching for? Google have a projection of the current Google searches at the Googleplex (so I have read), so I thought it would be cool to make this into a Google Personalized Homepage widget. Again, it uses a PHP/MySQL backend, but a different AJAX technique. I wrote this as an inline gadget.&lt;br /&gt;&lt;br /&gt;You can check out the webpage at &lt;a href="http://search.gadgets.googlepages.com/"&gt;http://search.gadgets.googlepages.com/&lt;/a&gt;. If you want to take it for a spin, click here: &lt;a href="http://fusion.google.com/add?moduleurl=http%3A//search.gadgets.googlepages.com/gadget.xml" align="absmiddle"&gt;&lt;img height="17" alt="Add to Google" src="http://buttons.googlesyndication.com/fusion/add.gif" width="104" border="0" /&gt;&lt;/a&gt;. Only one catch: if you use the Gadget, your searches will also be recorded, but in a completely anonymous form. No personal information is recorded. None.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/screenshot.0.png"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/7967/3813/320/screenshot.0.png" border="0" /&gt;&lt;/a&gt;So I think that's about it for me and Google Gadgets. They are really fun, and a great idea! But this last Gadget will definitely kill my hosting! Good thing its a new month soon, so I will have some more bandwidth available!&lt;br /&gt;&lt;br /&gt;I really want to enhance the Gadget to include some neat effects when it updates the queries, eg: a fade/fly-in effect for new queries. If there is enough interest in the Gadget then I will definitely improve it! I have written it in with the objective of usability and reducing the bandwidth load on my PHP server, so it is nothing fancy.&lt;br /&gt;&lt;br /&gt;You can specify how often it updates (lowest to every 10s, again, for bandwidth reasons). If/when I make the improvements it will update in realtime and will look really cool.&lt;br /&gt;&lt;br /&gt;I wish I worked for Google! I would have so much fun stuff to do in my 20% time!&lt;br /&gt;&lt;br /&gt;Please email me any feedback, either good or bad. Unlike my previous gadget, this one doesn't require the XmlHttp object (rather, it dynamically creates script tags), so it should work with more browsers. This is still very beta, but it has been tested in Firefox 1.5 and Internet Explorer 6. I might just leave this as 'beta' for a while...It seams that might be a pre-requisite to working for Google! And nothing on a Google page is truly complete until you add that magic 4-letter word! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34594713-115892039886025012?l=nofoodhere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nofoodhere.blogspot.com/feeds/115892039886025012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34594713&amp;postID=115892039886025012' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115892039886025012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115892039886025012'/><link rel='alternate' type='text/html' href='http://nofoodhere.blogspot.com/2006/09/latest-google-searches-gadget-beta.html' title='Latest Google Searches Gadget (beta)'/><author><name>Jordan</name><uri>http://www.blogger.com/profile/15482038960284712137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34594713.post-115884667415516016</id><published>2006-09-21T23:45:00.000+10:00</published><updated>2006-10-12T16:28:25.293+10:00</updated><title type='text'>Have Your Say! Google Gagdet</title><content type='html'>I decided to make a Google Personalized Homepage Gadget for some fun.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/screenshot.png"&gt;&lt;/a&gt;It is a very simple Gadget, it lets you post a message that other people using the gadget can see. I only records the last 5 or so posts. You can choose a nickname, an emoticon and it records your country. I also does some basic filtering to remove foul language.&lt;br /&gt;&lt;br /&gt;To give it a go, click this button &lt;a href="http://fusion.google.com/add?moduleurl=http%3A//shout.gagdets.googlepages.com/shout.xml" align="absmiddle"&gt;&lt;img height="17" alt="Add to Google" src="http://buttons.googlesyndication.com/fusion/add.gif" width="104" border="0" /&gt;&lt;/a&gt; to add it to your Google Personalized Homepage.&lt;br /&gt;&lt;br /&gt;It is running on my development server, and I only have 200 MB bandwidth/month, with will not go far, so use it while you can! And if it disappears, wait until the start of next month! Sorry, but I am a poor student, and this is the best hosting I can afford at the moment!&lt;br /&gt;&lt;br /&gt;It uses a PHP/MySQL backend, CSS/JavaScript (AJAX) client side. I hacked it together quickly, so there are probably some bugs. Sorry about that. For info, goto &lt;a href="http://shout.gadgets.googlepages.com"&gt;http://shout.gadgets.googlepages.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34594713-115884667415516016?l=nofoodhere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115884667415516016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115884667415516016'/><link rel='alternate' type='text/html' href='http://nofoodhere.blogspot.com/2006/09/have-your-say-google-gagdet.html' title='Have Your Say! Google Gagdet'/><author><name>Jordan</name><uri>http://www.blogger.com/profile/15482038960284712137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-34594713.post-115858269902428950</id><published>2006-09-18T22:20:00.000+10:00</published><updated>2006-09-18T23:20:23.646+10:00</updated><title type='text'>Global News Trends</title><content type='html'>I thought it would be interesting to globally map the news. So I developed a Java app to aggregate 16 news feeds for different regions in the world, and devised an algorithm to contextually rank the individual news articles, and then calculate a rank for each region. The news score (&lt;em&gt;NS&lt;/em&gt;) was then normalized. A &lt;em&gt;NS&lt;/em&gt; of -100 means very bad news, 100 means very good news, -10 means bad, 0 means roughly neutral etc. The more negative the number, the more negative the news.&lt;br /&gt;&lt;br /&gt;Using these normalized values (in the range [0,1]), I wrote a Java Servlet to generated a colour-coded world map. Hovering over different regions display the region news statistics (AJAX client-side, Java servlet and daemon server-side). The results were quite interesting. The data is generated every 10 minutes.&lt;br /&gt;&lt;br /&gt;The scale at the bottom of the image is interpreted as: blue=really good news, red=really bad news, pink = neutral news.&lt;br /&gt;&lt;br /&gt;I used the &lt;a href="http://news.yahoo.com/rss"&gt;Yahoo! RSS news feed&lt;/a&gt; (since &lt;a href="http://news.google.com/"&gt;Google&lt;/a&gt; sadly doesn't supply one yet) and a small database I developed of positive and negative words. Eg: war's negative, peace is positive.&lt;br /&gt;&lt;br /&gt;Below is a pretty picture showing the map.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/news.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/7967/3813/320/news.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34594713-115858269902428950?l=nofoodhere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115858269902428950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115858269902428950'/><link rel='alternate' type='text/html' href='http://nofoodhere.blogspot.com/2006/09/global-news-trends.html' title='Global News Trends'/><author><name>Jordan</name><uri>http://www.blogger.com/profile/15482038960284712137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-34594713.post-115857511541988601</id><published>2006-08-28T18:19:00.000+10:00</published><updated>2006-09-18T23:21:09.493+10:00</updated><title type='text'>Real-time Mosaic</title><content type='html'>This is one of my coolest projects so far.&lt;br /&gt;&lt;br /&gt;I have been interested in graphics algorithms for some time, and spent a few weeks writing real-time mosaic code. Basically, this turns an image (generally captured from a web-cam) into a matrix made up of smaller images. These images are matched to the original image pixels, to give the illusion of a single, normal picture. Anyway, doing this was not difficult. I decided to implement this in C++, using OpenGL for high speed blitting. I only had access to a Windows box, so I wrote a frame grabber to capture the data from a standard USB webcam, using the Microsoft directional API. Fun fun fun. (Actually, using DirectX gives me a headache, it is a frustrating, annoying and blotted API that simply takes the fun away from anything!)&lt;br /&gt;&lt;br /&gt;I chose C++ because the Mosaic lends itself to OO design, particularly with my picture in a picture in a picture in a picture idea.... Also, I need some speed, so C++ suited nicely. Now, the real challenge was making this work in &lt;strong&gt;real-time&lt;/strong&gt;. Generating a static image is easy, and doesn't require a elegant solution.&lt;br /&gt;&lt;br /&gt;I finally produced an algorithm that could create a 1024 x 768 mosaic in &lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/rtmosaic.png"&gt;&lt;/a&gt;real-time (approximately 20 fps). The bottleneck was in the sub-image selection - I use a minimum of 2000 frames, and have to find the closest match to every pixel. I ended up writing an extension of the traditional binary search algorithm, modified to sort based on RGB color and include a tolerance range. Simple put, sorting based on average color is difficult, so the binary search converges on a range of images by comparing the sum of the pictures RGB values. Then a more complex formula is applied to the closest matching set, and the closest image selected. For those Computer Scientists out there, it is &lt;em&gt;O(&lt;/em&gt;log&lt;em&gt;n + N)&lt;/em&gt;, when 0 &lt;= &lt;em&gt;N&lt;/em&gt; &lt;= 16 and &lt;em&gt;n&lt;/em&gt; is the number of elements to sort. This algorithm results in a good trade-off between running time and the quality of the matches.&lt;br /&gt;&lt;br /&gt;The result of all this is RTMosaic. I have included some frames from the file Madagascar as the basis, and a webcam pointed at myself. One of the cool features is the 'infinite complexity' in the final image. These frames were grabbed in real-time from the Mosaic, progressively zooming into my mouth. Remember, &lt;strong&gt;everything&lt;/strong&gt; is in real-time! ;)&lt;br /&gt;&lt;br /&gt;Note: These images have not been touched up at all. They are real screen-shots.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/test.1.jpg"&gt;&lt;img style="WIDTH: 100px; CURSOR: hand; HEIGHT: 80px" height="80" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/test.1.jpg" width="117" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/frame211.5.jpg"&gt;&lt;img style="WIDTH: 100px; CURSOR: hand; HEIGHT: 80px" height="80" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/frame211.5.jpg" width="177" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/frame291.5.jpg"&gt;&lt;img style="WIDTH: 100px; CURSOR: hand; HEIGHT: 80px" height="80" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/frame291.5.jpg" width="200" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/frame363.5.jpg"&gt;&lt;img style="WIDTH: 100px; CURSOR: hand; HEIGHT: 80px" height="80" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/frame363.5.jpg" width="200" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/frame435.5.jpg"&gt;&lt;img style="WIDTH: 100px; CURSOR: hand; HEIGHT: 80px" height="80" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/frame435.5.jpg" width="113" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/frame563.jpg"&gt;&lt;img style="WIDTH: 100px; CURSOR: hand; HEIGHT: 80px" height="80" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/frame563.jpg" width="124" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34594713-115857511541988601?l=nofoodhere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115857511541988601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115857511541988601'/><link rel='alternate' type='text/html' href='http://nofoodhere.blogspot.com/2006/08/real-time-mosaic.html' title='Real-time Mosaic'/><author><name>Jordan</name><uri>http://www.blogger.com/profile/15482038960284712137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-34594713.post-115857969207383259</id><published>2006-08-19T20:34:00.000+10:00</published><updated>2006-09-18T23:22:18.550+10:00</updated><title type='text'>Brownian Motion in Three Dimensions</title><content type='html'>I saw a Blog a while back talking about Brownian Motion in 3D, so I decided to try it out for myself.&lt;br /&gt;I extended 1D Brownian motion to 3D by applying the equation to each of the X,Y and Z components. I then implemented a radial version (not really Brownian Motion anymore), where the particle direction vector can rotate by a fixed amount each iteration.&lt;br /&gt;&lt;br /&gt;The C++/OpenGL code simply using STL lists to keep track of the particles position, and plots its path with a varying HSB colour based on the iteration index.&lt;br /&gt;&lt;br /&gt;Below are some screenshots. I added trackball rotation and zoom, so it can be oriented and zoomed in 3D. Pretty cool...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/brownian2.0.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/brownian2.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/brownian3.0.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/brownian3.0.jpg" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/brownian.0.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/brownian.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34594713-115857969207383259?l=nofoodhere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115857969207383259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115857969207383259'/><link rel='alternate' type='text/html' href='http://nofoodhere.blogspot.com/2006/08/brownian-motion-in-three-dimensions.html' title='Brownian Motion in Three Dimensions'/><author><name>Jordan</name><uri>http://www.blogger.com/profile/15482038960284712137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-34594713.post-115858044691779864</id><published>2006-08-05T19:44:00.000+10:00</published><updated>2006-09-18T23:23:57.253+10:00</updated><title type='text'>Visualization of Inter-Related Information</title><content type='html'>What is the best way to view the relationship between multiple entities? This is a question that I asked myself, specifically I was interested in using the &lt;a href="http://www.google.com/apis/"&gt;Google SOAP Search API&lt;/a&gt; to show the links between websites.&lt;br /&gt;&lt;br /&gt;I wanted something that would let entities be represented as shapes, with lines connecting them. I also didn't want them to collide, and I wanted some cool animation effects....&lt;br /&gt;&lt;br /&gt;...and believe it or not, the answer lies with first year Physics! I am so glad I didn't sleep through that subject! Actually, I found Physics really interesting, but didn't expected to use my knowledge for this!&lt;br /&gt;&lt;br /&gt;I represent each webpage (entity) as a particle. Related particles are connected by a line which models the physics of a spring (remember F=kx and all that?) This lets related nodes stay attached, because of this force. To stop particles colliding, I model them as electro-statically charged particles, each with the same charge. The force repels close particle, so the particles maintain an event spacing, and the particles positions equalizes.&lt;br /&gt;&lt;br /&gt;I decided to write this as a Java applet, just for a change. I used the Graphics2D API.&lt;br /&gt;&lt;br /&gt;Clicking on an entity triggers a SOAP query, and then the entity 'explodes' with the first 10 related webpages springing out from it. And so on. The entity color is from the HSB colour wheel, and the more similar the colors, the closer related the entities are. Hovering over an entity shows the entities name (webpage title). Entities can also be 'detached' from their children by quickly pulling them away. Moving them close again will 're-link' them together.&lt;br /&gt;&lt;br /&gt;Below are some screenshots:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/nodes2.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/nodes2.jpg" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/nodes1.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/nodes1.jpg" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/nodes3.jpg"&gt;&lt;img style="WIDTH: 200px; CURSOR: hand; HEIGHT: 145px" height="186" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/nodes3.jpg" width="200" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34594713-115858044691779864?l=nofoodhere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115858044691779864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115858044691779864'/><link rel='alternate' type='text/html' href='http://nofoodhere.blogspot.com/2006/08/visualization-of-inter-related.html' title='Visualization of Inter-Related Information'/><author><name>Jordan</name><uri>http://www.blogger.com/profile/15482038960284712137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-34594713.post-115858424808457071</id><published>2005-10-01T18:25:00.000+10:00</published><updated>2006-09-18T23:24:23.426+10:00</updated><title type='text'>Nexus2: OpenGL 3D Island</title><content type='html'>What started as some modification to GreatEngine (link?), an Open Source OpenGL terrain renderer, quickly grew into a full project in its own right.&lt;br /&gt;&lt;br /&gt;I extended GreatEngine (C++/OpenGL) to add:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Plugin-based abstracted texture loader (BMP, JPG, PNG, DDS, RAW, RGB etc)&lt;/li&gt;&lt;li&gt;Sky dome, with moving clouds&lt;/li&gt;&lt;li&gt;Improved reflections&lt;/li&gt;&lt;li&gt;Horizon&lt;/li&gt;&lt;li&gt;Sun, which lens flair&lt;/li&gt;&lt;li&gt;Billboarded Dynamic LOD vegetation (smooth fading, fields of grass)&lt;/li&gt;&lt;li&gt;Tides&lt;/li&gt;&lt;li&gt;Dynamic terrain generation from height-map (3D texturing based on elevation, slope)&lt;/li&gt;&lt;li&gt;Dynamic terrain shadowing (dot3 based, vertex colouring)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Below are some screenshots:&lt;/p&gt;&lt;p&gt;&lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/nexus2.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/nexus2.jpg" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/nexus1.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/nexus1.jpg" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/nexus4.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/nexus4.jpg" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/7967/3813/1600/nexus3.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/7967/3813/200/nexus3.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34594713-115858424808457071?l=nofoodhere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115858424808457071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34594713/posts/default/115858424808457071'/><link rel='alternate' type='text/html' href='http://nofoodhere.blogspot.com/2005/10/nexus2-opengl-3d-island.html' title='Nexus2: OpenGL 3D Island'/><author><name>Jordan</name><uri>http://www.blogger.com/profile/15482038960284712137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
