Software


1. Knowledge Fractal

1.1. Description

A general browser-based implementation of Rudy Rucker's fractal text idea. Technologically trivial and nothing new, but it is more of a paradigm shift. (Why fractal? Tim Berners-Lee on the fractal nature of the Web.) Realizing Rucker's lifebox/life fractal idea is as simple as doing a "Fractal In" search in a blog. One can also imagine adding to the Knowledge Fractal some URLs to blog-specific search engines, thesauruses or even Google Scholar/News. The knowledge fractal is exquisitely rich in its intricacy. How to use the Knowledge Fractal:

  1. Just right-mouse click any selected phrase in Firefox.
  2. Choose "X Fractal In for..." to query similar knowledge from the same site with search engine X.
  3. Choose "X Fractal Out for..." to query similar knowledge from the whole web with search engine X.
  4. Go to "Tools" -> "Extensions" -> Select "Knowledge Fractal" & click on "Options" to modify preferences.

1.2. Screenshot

Knowledge Fractal

1.3. Download

Directly install the extension from either:

My gracious thanks to the Mozdev group, Mozilla Update and The Extensions Mirror for the mirrors.

1.4. Status

February 9, 2005: KF has been discontinued. For Firefox 1.1 and above, I strongly recommend using Conquery and writing your own simple plugins with the tips below. Thanks for all the support. You may also find a paper on KF here.

December 10, 2004: Version 2.1.0, which is pretty decent and works for Firefox 1.0. Supports 10 search engines, including Google (even the define operator), Yahoo! and Dogpile by default (so it overrides all user settings from previous versions). Completed error handling. The license in the XPI file says I'm not responsible for usage of the software ;)

1.5. Release Notes

If you want the MPL-covered source code, just open the XPI file with a zip utility. I'm greatly indebted to Jaap A. Haitsma for his work on Dictionary Search, of which my work is only a modification; please see 'license.txt' in the XPI file for details.

1.6. Tips & Tricks

(Preferably only for those who won't hold me responsible for every risk they take!)

  1. For "Help" on modifying your "Options": go to "Options" and then click on the "Help" button in the resulting dialog box.
  2. To remove an engine you don't like: go to "Options" and delete all text from the "Text", "Access Key", "URL" fields from the corresponding engine.
  3. To add/replace an engine (go to Step 1 above for more details):
    1. "Fractal In" engines:
      1. Google Images:
        1. Text: Google Images Fractal In for "$"
        2. Access Key: I
        3. URL: http://images.google.com/images?q=$+site:#&hl=en&btnG=Google+Search
      2. Google News:
        1. Text: Google News for "$"
        2. Access Key: N
        3. URL: http://news.google.com/news?hl=en&ned=us&q=$&btnG=Search+News
      3. Google Groups:
        1. Text: Google Groups for "$"
        2. Access Key: G
        3. URL: http://groups-beta.google.com/groups?hl=en&q=$&qt_s=Search+Groups
      4. Google Froogle:
        1. Text: Google Froogle for "$"
        2. Access Key: F
        3. URL: http://www.google.com/froogle?q=$&btnG=Search+Froogle
      5. Google Video:
        1. Text: Google Video for "$"
        2. Access Key: V
        3. URL: http://video.google.com/videosearch?q=$
      6. Google Scholar:
        1. Text: Google Scholar for "$"
        2. Access Key: S
        3. URL: http://scholar.google.com/scholar?q=$&ie=UTF-8&oe=UTF-8&hl=en&btnG=Search
    2. "Fractal Out" engines:
      1. Google Images:
        1. Text: Google Images Fractal Out for "$"
        2. Access Key: O
        3. URL: http://images.google.com/images?q=$&hl=en&btnG=Google+Search

Modifying these tips & tricks for use with Conquery should be obvious with some reading up of its documentation.

2. Grouping

2.1. Description

So walking back from lunch, I was thinking about how to detect groups, given a set of points within a boundary. You know, like how I can roughly say: this group of people ahead of me is distinct from that group across the street. So I set about working on a simple Java algorithm to perform grouping based on no other information other than a radius of neighbourhood (although you could add other information as well, like social interaction). Along the way, I simplified the problem to 2 dimensions (although it should be generalizable to more) and added the concepts of metagroups (groups of groups), metametagroups (groups of (groups of groups))...somewhat like the notion of galaxies, clusters, superclusters and so on in astronomy. It is perhaps embarassing to say that despite ~24 hours of (non-continuous) work and some embarassing bugs, I've come up with a grouping algorithm that seems to work well for small scales but doesn't do so efficiently for large scales. I suspect people must have found better algorithms already (say, via statistical clustering, perhaps) in the field of pattern recognition, so the problem doesn't seem worth the trouble.

2.2. Download

(For programmers only!) JAR (with MIT-License-governed Java 5.0 source code and application inside).

2.3. Usage

java -jar Grouping.jar <numofPoints> <XBound> <YBound> <radiusOfGroup>

2.4. Release Notes

December 18, 2004: Just look at the source code and run the application for a while and you'll soon get the point of it. Hijack the printing to System.out or redirect it to check results. Most importantly, devise a better algorithm! You can easily imagine how a MetaGroup is just like a Point (with its <x,y> being the average of all the points in the Group) and so on; take advantage of this for maximum object oriented programming effect. In any case, I'm mentally exhausted and grouping has been distracting me too much from my main research project (terrads), so I'm not gonna work on it anymore for a while. I haven't proven that the algorithm is correct, so feel free to find any mistakes and kindly tell me about it.

3. QuakeAlert

3.1. Description

You probably already know about the earthquake by now. I set about creating a Java program called QuakeAlert, which will process information about the most recently detected quakes from the Internet and try to predict whether or not you're probably at risk. Such a program will enable anyone, anywhere to get early enough warnings — provided that the information online is issued in a timely manner — from the Internet, which is designed to be robust enough to stand the effects of wars and natural disasters. I am not sure how useful the program will be but I hope it will help people somehow. There's absolutely nothing new about this program: for the moment, it's just got a different user interface than most other monitors, that's all; to be unique, it must have predictive capabilities and other new calculations with the RSS feeds.

3.2. Screenshot

QuakeAlert

3.3. Dedication

QuakeAlert is dedicated to the tragedy of the tragic earthquake series of December 26, 2004 and the sheer ingenuity of the people at the USGS who are changing the changing world for the better.

3.4. Run

The Java Applet, which is self-signed, so your browser is most likely going to ask you whether you trust it (say yes to get useful results, but remember: the choice is entirely your responsibility). Don't worry, I've written no malicious code and the signature is only valid for the next 6 months. (Programmers: Download the JAR with the MIT-License-governed source code and acknowledgements). You will need at least JRE 5.0 Update 1.

3.5. Status

Proof-of-concept released on December 28, 2004. GUI added on December 29, 2004. HTML support and Earthquake Travel Times added on December 30, 2004. Cosmetic changes and Realtime Tsunami Bulletins added on January 11, 2005.

3.6. Release Notes

By default, the program's latitude and longitude is set to that of Galle, Sri Lanka and searches for earthquakes up to 2,000 km away. The program works by comparing the distances between your preferred latitude and longitude points and those of the most recently detected earthquakes with data available from the USGS. I am not saying that this is the best way to infer information from known earthquakes, but I intentionally used to this rough heuristic just to show proof of concept. You can, of course, do more complex data-processing, such as calculating whether an earthquake at a given latitude, longitude might create tsunamis that will affect you.

3.7. Things To Do

  1. GUI: I should add a frequency to retrieve information from the Internet. My friend, Mari Annika, suggested sending out alerts via pop up windows, emails or SMSes, which I think is a great idea.
  2. Better prediction rules: rules that use probability or physics of earthquakes and so on...

4. SurroundVideo

4.1. Description

Once, my friend, Leena Devi, showed me tonnes of her pictures and it reminded me of some hitherto dormant ideas of cameras I had. One of them was "surround video": simply an extension of surround audio, where multiple cameras record different viewpoints of the same event simultaneously. Later, you'd playback and see the event from any recorded viewpoint you wish. The collective viewpoints could be arranged as a circle, box, sphere or some other valid geometrical shape. Actually, this idea has already been developed independently, albeit with different, better implementations by other people. So, enjoy the following trivial implementation.

4.2. Screenshot

SurroundVideo

4.3. Download

For programmers only!

4.4. Usage

java -jar SurroundVideo.jar

If something doesn't work, change the parameters in the source file (to fit the path to the video files, for example) and recompile or write any other Java tricks you like. Preferably, the videos should be of the same length, of course. I think the reports of "corrupt JPEG data" are thanks to the way the camera made the movies.

4.5. Release Notes

January 4, 2005: Just look at the source code and run the application for a while and you'll soon get the point of it. This is most likely the first and final version of my SurroundVideo.

5. NoisyMIDI

5.1. Description

Just when I thought I couldn't possibly create another useless application, I went about and did it again! NoisyMIDI is simply a trivial Java program that uses noise to play with MIDI. At the moment of writing, it uses two noise streams: one is the typical random number generator and the other is the intriguing Perlin noise. Regarding the former, well, it didn't kick much for me, but it did confirm my earlier belief that playing random notes with random velocities on random instruments can deliver ghostly/bewildering effects. Regarding the latter, well, I just wanted to hear what it sounded like. In any case, using Perlin noise delivers the usual, handsome properties about it, including getting the same noise output for the same input parameters. Also, it sure is interesting to listen to Perlin noise, just like listening to cellular automata evolutions!

5.2. Screenshot

NoisyMIDI

5.3. Download

(For programmers only!) JAR (with Java 5.0 source code and application inside).

5.4. Usage

java -jar NoisyMIDI.jar

5.5. Release Notes

January 28, 2005: Just look at the source code and run the application for a while and you'll soon get the point of it. I'm pretty sure that good imagination as well as a musical background will produce some very interesting applications of music with Perlin noise: however, I lack both, so I leave it to the curious reader to go on from here.

6. WiseGuy

6.1. Description

Read this.

6.2. Screenshot

WiseGuy

6.3. Download

(For programmers only!) Zipped JAR & JAD (Java 5.0).

6.4. Release Notes

February 22, 2005: This is a really childish version 0.0.1. I've only had the time to write one simple rule for WiseGuy (scan continuously for superordinates so that profiles may be switched). I don't know how to switch phone profiles (Silent, Discreet, General, etc.) with CLDC 1.1 and MIDP 2.0, so I leave it to the curious reader to develop WiseGuy into a more, shall we say, refined application.

7. MoodSensor

7.1. Description

Read this.

7.2. Screenshot

MoodSensor

7.3. Download

(For programmers only!) JAR with MIT License (for Java 5.0).

7.4. Release Notes

I would have liked to write this directly as a plugin for some standard instant messenger — unfortunately, there isn't any quite yet. Although there's the pretty cool Jabber, there are a great number of nonstandard clients for it. Besides, this program is just a rough, trivial hack (and I really am getting sick of writing insignificant, tiny programs), so I'm not really interested in writing it for any particular instant messenger. You can pick it up from here if you like.

8. Sparx

8.1. Description

Read this.

8.2. Screenshot

Sparx

8.3. Download

(For programmers only! And with Java 5.0!)

  1. Get JavaView ≥ 3.8.4 and set "javaview.jar" to your classpath.
  2. Get sparx.zip and decompress it to some directory.
  3. Recompile, if necessary, and run "java MyApplet".

8.4. Release Notes

It's a little buggy! So the MIT License should save my butt from any trouble. But seriously, Sparx was made out of sheer boredom and curiosity and I've kind of run out of the latter. Some outstanding bugs:

  1. Each State[][][] is colored depending on state. This should be easy thanks to JavaView.
  2. Fix the mildly annoying but seemingly inconsequential "index > numVertices" bug with a debugger.
  3. If you Rotate Orbit during animation, animation doesn't work anymore, unless you Rotate Orbit without releasing mouse button.
  4. Why don't the 3 PuInteger panels show up automagically on Animation Dialog? I think I've gotta write that Information Panel.
  5. Last vertex of cracker itself keeps disappearing. This is an unearthly abomination that must be neutered!

9. BoidCam

9.1. Description

Read this.

9.2. Screenshot

BoidCam with the Lego Mindstorms

9.3. Download

Prerequisites:

  1. A Lego Mindstorms kit. (Mine's RIS 2.0.)
  2. Lejos 2.1.0.
  3. JDK 1.1-1.5. (JDK 1.5 seems to be work fine for me.)
  4. A camera connected to the PC and JMF to access it.

Download:

  1. Source code. (May 31 2005)

Compiling and uploading to the RCX bot:

  1. cd rcx
  2. lejosc -source 1.2 BoidCam.java
  3. lejos -verbose BoidCam

Compiling and running the PC-side "server" for receiving camera commands:

  1. cd pc
  2. javac PcCamera.java
  3. java PcCamera

First run PcCamera on the PC, then get BoidCam running on the RCX.

9.4. Release Notes

May 31, 2005: Boids code seems okay; owner/leader is imaginary at the moment; vision code seems to work (Vision.snapshot() seems to do nothing to save any pictures on my PC). Vector.hashCode() may be a little buggy, related to memory perhaps.

10. GvY

10.1. Description

Read this.

10.2. Screenshot

GvY

10.3. Download

Prerequisities:

  1. Google API/license key.
  2. Yahoo! API/application ID.
  3. Log4j-1.2.11.
  4. JFreeChart-1.0.0-rc1.

Download

  1. Source Code
  2. wordlist.txt (Dictionary)

Usage

11. knowledgefractal.py

Just read this. And download this.

12. Ann-O-Tate phi(1)

Just read this. And download:

Output sample: rss.xml

13. The Pomegranate compiler for the Erigone model checker

For MSCS thesis, built with Ada 2005 a Promela compiler (Pomegranate) for Erigone, a SPIN-like model checker. Wrote parser with homegrown FIRST/FOLLOW set computer. Compiled Promela programs, which model distributed systems, to NFA. Designed a stack VM, inspired by JVM, to simulate NFA.

14. Monocole

README


<<< Home

03-02-2006 - 19:57