Thursday, July 19, 2007

NoFoodHere Search (beta)

NoFoodHere Search (beta), the newest and coolest search engine, is now online as a public beta, and is set to revolutionise the way we search the web.

The NoFoodHere 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 pages of results. Rather, it streams them to users as required, and dynamically presents more and more results as the user scrolls down the page.

Give it a whirl at http://nofoodhere.com

Saturday, November 18, 2006

Two Open-source Projects Released!

I am pleased to announce that I have been able to (very quickly) release two of my projects as open-source, released under the GNU General Public License 2.0.
Global News Trends, the Java news grapher, and Orion, 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!

I am planning to progressively release more of my projects as I slowly work through my archives and clean things up.

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.

Speaking of goals, I only have 1 exam to go, Logic & Computation (Predicate Calculus, Prolog, etc...), so I can soon focus more on my programming over the summer break. ('Goal' is a logic/prolog reference in case you didn't get it...just a lame pun)

Anyway, hope you are enjoy the code!

Thursday, October 12, 2006

New Idea

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!

Friday, September 22, 2006

Latest Google Searches Gadget (beta)

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.

You can check out the webpage at http://search.gadgets.googlepages.com/. If you want to take it for a spin, click here: Add to Google. 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.

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!

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.

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.

I wish I worked for Google! I would have so much fun stuff to do in my 20% time!

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! :)

Thursday, September 21, 2006

Have Your Say! Google Gagdet

I decided to make a Google Personalized Homepage Gadget for some fun.

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.

To give it a go, click this button Add to Google to add it to your Google Personalized Homepage.

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!

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 http://shout.gadgets.googlepages.com.

Monday, September 18, 2006

Global News Trends

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 (NS) was then normalized. A NS 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.

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.

The scale at the bottom of the image is interpreted as: blue=really good news, red=really bad news, pink = neutral news.

I used the Yahoo! RSS news feed (since Google sadly doesn't supply one yet) and a small database I developed of positive and negative words. Eg: war's negative, peace is positive.

Below is a pretty picture showing the map.

Monday, August 28, 2006

Real-time Mosaic

This is one of my coolest projects so far.

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!)

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 real-time. Generating a static image is easy, and doesn't require a elegant solution.

I finally produced an algorithm that could create a 1024 x 768 mosaic in 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 O(logn + N), when 0 <= N <= 16 and n is the number of elements to sort. This algorithm results in a good trade-off between running time and the quality of the matches.

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, everything is in real-time! ;)

Note: These images have not been touched up at all. They are real screen-shots.