Author Archive

D2G Cricket Settings on CyanogenMod 7.1.0

I recently installed the CyanogenMod ROM on my Droid 2 Global.  Up to now, I’ve had to take the phone to the Cricket guy to change the settings so that the 3G data connection would work.  Perhaps I could have done it myself then, but I didn’t take the time to figure it out.  Anyway, I can now do it without that occult, crufty, Windows-centric method.  I learned the basics from here:

http://www.droidforums.net/forum/droid-general-discussions/86800-custom-roms-cricket-network.html#post886957

which is a post-flash version of this:

http://www.howardforums.com/showthread.php/1643218-Motorola-Droid-Full-Solution-Updated

I modified the process a bit, though.  So, here’s what I did:

  1. Get http://www.whiterabbit.org/android/u2nl.zip
  2. Push u2nl.zip onto the sdcard either with ADB or USB mount.
  3. Shell into the D2G with ADB or use the Term.app and mount the /system “rw”:
    mount -o rw,remount -t ext3 /dev/block/mmcblk1p21 /system
  4. Unzip the contents of u2nl.zip onto the sdcard:
    cd /sdcard; unzip u2nl.zip
  5. Copy the u2nl executable to /system/bin:
    cp /sdcard/u2nl/u2nl /system/bin/
    chmod 755 /system/bin/u2nl
  6. Create a startup script to execute the commands in autostart.sh:
    cp /sdcard/u2nl/autostart/motodroid/cricket/autostart.sh /etc/init.d/99cricket
    chmod 750 /etc/init.d/99cricket
    chgrp shell /etc/init.d/99cricket
  7. Delete the exit 0 on the last line of the 99cricket script.
  8. Exit the Term.app or the ADB shell.
  9. Menu->Settings->Wireless & Networks->Mobile Networks->Access Point Names
  10. Add the following APN:
    • Name - Cricket
    • APN - internet
    • Proxy - wap.mycricket.com
    • Port - 8080
    • Username - yourphonenumber@mycricket.com
    • Password - cricket
    • Server - wap.mycricket.com
    • MMSC - http://mms.mycricket.com/servlets/mms
    • MMS Proxy - wap.mycricket.com
    • MMS Port - 8080
    • MCC - 310
    • MNC - 004
    • Authentication Type - PAP or CHAP
    • APN type - <Not set>

    And don’t forget to hit Menu->Save.

  11. Reboot

And just for reference, the commands in the autostart.sh/99cricket file are:


#!/system/bin/sh

## set up the iptables for cricket

export PATH="$PATH:/system/bin"
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -A OUTPUT -o ppp0 -p 6 ! -d 10.132.25.254 -j REDIRECT --to-port 1025
u2nl 10.132.25.254 8080 127.0.0.1 1025 >/dev/null 2>&1 &
sh -c "sleep 5;kill `ps|grep nk.bla.android.autostart|grep -v grep|awk '{print $2}'`" &

Thanks to http://www.whiterabbit.org/android/.

Axiom of Regularity and AFA theorem decidability

Below are some thoughts I had in relation to an e-mail discussion where the following question arose: What is a representation? The arching context of this discussion was a seminar exploring the psychological theory that feelings are a form of self-perception. I.e. if self-perception theory is true, this would explain the abundance of clinical evidence showing that feelings follow behaviors rather than preceding them.

In any case, the group has a large contingent of technical types and the discussion of representation eventually raised the question of the difference between processes and things, verbs and nouns, [en|de]coders and an encoding, or code and data. The underlying itch seems to be the concept of self-modifying processes or, in computer science terms, code as data and data as code. It seemed to me the holistic thinkers see an aspect to living things, organisms, that is not present in machines. (This inarticulate distinction isn’t new, of course. Great minds have been trying to tease them apart for millenia. And my puny mind won’t add anything to what they’ve already done. But this blog has gotten a bit stale; so I must post something.)

The group seemed to have stalled at the ontological status of a representation. Such a thing seems to have an autonomy all on its own. For example, if you scratch an image of your grandmother into a piece of granite, then humanity goes extinct, do those scratches on the granite still represent your grandmother? Or are they then just meaningless scratches on a rock? To what extent is the decoding process required for an encoded artifact to still be meaningful?

Anyway, this obviously raises all sorts of questions for anyone who likes to think deeply or completely. But the (shallow and incomplete) question it raises to me is fairly common to all the philosophical problems I think about: circular reference. In logic, an impredicative definition is one that defines an object using a quantification over all the other objects like the object being defined. In other words, it’s a self-referencing definition. It’s im-predicative simply because it’s not predicative. In the foundations of math, it boils down to von Neumann’s Axiom of Regularity, which states that sets cannot have elements that, when cracked open, contain elements present anywhere in the cumulative hierarchy of sets above them. In other words, the set hierarchy cannot contain loops.

It seems to me that an organism, and in particular those of us who are capable of using symbols to communicate with one another, is impredicatively defined in terms of its environment. The symbols used are in constant redefinition as the organism and its environment evolve. Hence, any representation, e.g. of the environment by the organism or of the organism by the environment, will be self-referential and inseparable from its context.

So, this leads me to ask why we ascribe ontological status to representations? Why do we think the image of a grandmother scratched into a rock will persist as a representation? I think the answer lies in how we count, which is (probably) based on the fact that we have fingers, digits. We count ordinally: 1, 2, 3 …. And because we do so, our intuitive concept of numbers and sets of things is constructive. Abstractly, math is about grammar, sentences, consistency, and completeness. But concretely, math is about how we relate large bunches of things to small bunches of things, 100 cows to 10 bails of hay, 10 fingers to a billion stars, etc.

When considering these relationships, abstract or concrete, various problems arise like how to represent nothing, the result of taking away 6 cows from a total of 6 cows to give you no cows. How does one represent no cows? Infinity and density are other such problems. What lies after the largest number to which you can count? What lies between two very close numbers? Etc.

In the course of handling some of these issues, von Neumann formulated a constraint (regularity) to avoid unconstructable, cyclic set hierarchies. Later, Turing came up with the “halting problem”: given a step-by-step procedure, decide whether the procedure halts or continues forever. These sorts of problem obviously depend critically on construction. Whether you can tell if a procedure will halt depends on whether and how it can be constructed.

It is this sense of constructability and automatic deduction (no consciousness required), that I think leads to ascribing more ontological status to representations/encodings than is objectively warranted. Another interesting twist arises because so many people use the computer as a metaphor for organisms, the hardware is likened to the body and the software is likened to the mind. But again, this metaphor raises the hackles of those who think organisms are categorically different from machines.

We can seamlessly use the term “representation” to mean a thought in the mind of an organism and an encoding in the software of a machine. But the character of the term changes between the two usages. Saying “the computer uses a representation of your grandmother” is very different to an ordinary layperson than saying “you have a representation of your grandmother in your mind”.

Perhaps this goes back to the axiom of regularity in that the most common modern computer architecture is the von Neumann architecture, where the CPU (process) is categorically distinct from the memory (objects) upon which it operates. These modern computers function by counting, constructing one state from previous states. That separation between the CPU and the memory disallows cyclic sets. At any given time, the objects in the memory can be enumerated, which would not be true without the axiom of regularity. No register can be a member of itself.

Of course, we can simulate circularity by first enumerating some of the set, then moving the CPU pointer back to a register it already finished reading and letting it read again from that same register. But this is not a circular or impredicative definition because at any particular time, the memory is completely, acyclically, enumerable. I take this to imply that a von Neumann architecture is incapable of realizing a non-well-founded set.

Of course, I’m not really a mathematician and I’m certainly not a meta-mathematician. So, my intuition and/or reasoning could be completely off. One discussant pointed out that an alternative set of axioms, called AFA (Anti-Foundation Axiom, which refers to the ZFC without the axiom of regularity plus the anti-foundation axiom) is just as consistent as ZFC (Zermelo-Fraenkel plus the Axiom of Choice). And others[1] point out that AFA and ZFC are shown to be “mutually interpretable”. So, perhaps this means that a sentence in AFA, involving a cyclic set (not possible in ZFC), can be “constructed” by first transforming the sentence into some equivalent in ZFC, constructing that in the normal way, then transforming it back. This would mean that a von Neumann architecture machine, although based in the intuitive counting-based construction with which we’re familiar, would still be able to compute AFA sentences … kinda like transforming a problem from the time domain into the frequency domain, solving it there, and transforming it back. I don’t know. But it sure seems suspicious to me.

In any case, perhaps my suspicion is evidence that I’ve bought into the false dichotomy von Neumann so insidiously implanted in our modern, digitally myopic minds? Perhaps representations (or symbols, in general) really do become entirely meaningless when violently torn from their context?

[1] http://research.microsoft.com/pubs/70350/tr-2006-138.pdf

Plain text message composition citation color in Thunderbird

Because it took me awhile to find this, I want to document it here. You can change much of the preferences in Thunderbird through the GUI. And you can change them directly with the Edit -> Preferences -> Advanced -> General -> Config Editor. But there doesn’t seem to be a way to set the color of the cited text in a plain text reply. In order to change that, you have to edit/create this file:

/home/[username]/.mozilla-thunderbird/[profile].default/chrome/userContent.css

In that file, place the following CSS clause:

span[_moz_quote=true] {
color: pink ! important;
}

But shut Thunderbird down before you edit that file. Thanks to this forum thread for the answer.

Ubuntu Maverick (10.10) EC2 images

There were two obscure tricks to getting new EC2 Ubuntu Maverick (10.10) images for running our In Silico Liver Simulation:

  1. change /boot/grub/menu.lst root=LABEL=uec-rootfs to root=/dev/sda1, and
  2. copying some kernel modules so that nfs-kernel-server will work. link

Expanding an VirtualBox XP system disk

After spending an extraordinary amount of time trying to figure out why I couldn’t get NTFSResize to work, I finally found Seppe vanden Broucke’s log entry. For posterity, I’ll record what I did, here, following partly the instructions in the original post and one commenter’s modification:

  1. Get the SysRescCD ISO image. (Any live linux CD should work, including Knoppix.)
  2. Create a new (larger) VirtualBox disk image (*.vdi) from within VirtualBox.
  3. In the VirtualBox Details tab for your Windows instance, set your original VDI as the IDE Primary Master.
  4. Set the new (empty) VDI as the IDE Primary Slave.
  5. And set the linux ISO as the CD/DVD IDE Secondary Master.
  6. Ensure that the instance is set to boot from the CD/DVD first in System->Boot Order.
  7. Boot the instance.
  8. At the command line, run
    fdisk -l /dev/sda
    You should see a partition there of type 7, NTFS.
  9. Then run
    fdisk -l /dev/sdb
    You should see an error message that says there is no partition on that device.
  10. Then run the command:
    dd if=/dev/sda of=/dev/sdb
    This will take a long time. It means copy from the input file /dev/sda to the output file /dev/sdb.
  11. Shutdown the system with:
    shutdown -h now
  12. Change the Storage->IDE Secondary Master (CD/DVD) from the ISO image to your regular optical drive, or remove it completely so that it will boot into the original (small) Windows image.
  13. In Windows, select Start->Run… and type:
    diskpart.exe
  14. Type:
    select disk 1
    to select the (large) disk.
  15. Type:
    list disk
    to see that you’ve selected the right one with the right size.
  16. Type:
    select partition 1
    to select the 1st partition on that disk.
  17. Type:
    list partition
    to see that you’ve selected the right partition.
  18. Type:
    extend
    to extend the volume all the way to the end of the device.
  19. Turn off the virtual instance and select the new (larger) VDI as the Storage->IDE Primary Master.
  20. Boot the instance again and you should have a larger system (C:) disk.

Tracing Multiscale Mechanisms of Drug Disposition in Normal and Diseased Livers

Our second ISL tracing paper has been published online as a JPET FastForward Article Tracing Multiscale Mechanisms of Drug Disposition in Normal and Diseased Livers.

I’ll repeat the brief blurb on my agent based modeling website.

This paper talks in relative detail about how hypothesis formulation and falsification (failed validation) can be done at a fine grain when only coarse grained validation data is available. Because our in silico liver (ISL) is an analog built in software, we can trace its internals. And because the internals of the analog were designed to map to the internal structure and dynamics of its referent (wet-lab liver perfusion experiments), traces of the ISL become detailed hypotheses about the internals of the liver. However, those detailed hypotheses are not falsifiable, except to the extent that they fail to reproduce the coarse validation data. Nothing can be done about that until we design wet-lab experiments to perform on real livers. In the meantime, though, we can alter the ISL mechanisms so that the coarse grained data matches that taken from wet-lab experiments under different conditions. In this case, we build 3 ISLs that generate the outflow profiles for drug and a sucrose marker for: 1) normal healthy livers, 2) alcohol damaged livers, and 3) carbon tetrachloride damaged livers. With the traces for each of the 3 ISLs, based upon the validated (i.e. not proven true, of course, but proven true enough) mechanisms of the ISL, we can formulate ‘proto-theories’ for the translation of an experimental liver from a healthy to a diseased (cirrhotic) state.

Note that the particulars of the ‘proto-theories’ suggested by these traces are not as sophisticated as those that might be generated by an expert hepatologist. In fact, these ‘proto-theories’ may even seem bizarre or patently false to such an expert (though I believe they don’t seem so to the experts). Indeed, as Box’s aphorism says,

… all models are wrong; the practical question is how wrong do they have to be to not be useful.

The point is not to build computer programs that attempt to compete with the hypothesis formulation of experts. This is not an AI project. The point is to build devices, with whatever tools are available including computers, that make the experts more efficient and effective. By formulating these ‘proto-theories’ about the translation of healthy livers to diseased livers (and vice versa), models like the ISLs provide a foil or sounding board to help sharpen the theories developed by the experts.

In Silico Liver port to MASON

I set this task aside awhile back. When I returned to it, we had moved the source repository to a different machine. I had lots of changes in my local sandbox. Several of the prerequisite libraries had been upgraded. Etc. After doing all the catch-up work and checking it in, however, it compiled and ran right out of the box! I’m always surprised when that sort of thing happens.

Way early ISL in MASON mock-up.

Windows Vista using a CUPS PDF printer hosted on Debian

So, every time I upgrade my system, it seems like my printers break.  I don’t know if it’s bad management of the cups debian packages, the peculiarity of windows, or my own incompetence.  The breaks have wildly varying symptoms.  So, I haven’t seen a pattern in them that allows me to fix things gracefully.  Sometimes Samba is to blame.  Sometimes CUPS (-PDF) is to blame.  And sometimes Windows is to blame.  Well, when I upgraded from Lenny to Squeeze awhile back, of course it broke my virtual PDF printer that I use to generate electronic invoices.  When I’d try to connect to the printer (as configured in Lenny), I got the following error:

Windows cannot connect to the printer. Operation
could not be completed (error 0×0000000d).

(No, it wasn’t in those colors or with that background… but I figured I’d try to find a way to make you, dear reader, feel as annoyed as I felt when I saw the error.) Anyway, with such a wonderfully informative error, I didn’t know quite where to turn. The logs (cups, samba, auth.log, syslog, etc.) on the server gave no indication that anyone had tried to connect. And I could browse the other shares from the vista machine nicely and those connections did show up in the logs. So, I had a strong indicator that the problem was NOT my upgrade from Lenny to Squeeze. But, being the stubborn idiot that I am, I started fiddling around with the printer and samba configs anyway…. which lead nowhere, of course. The upside is that I am just a smidgeon more familiar with cups and samba. [sigh]

When I finally typed the error into a search engine, I found the answer provided by some participants of Microsoft TechNet, which I repeat here for posterity:

From: AHarsent

I've seen this problem with a few printers now, not
consistantly[sic] between any particular makes or
models. However, I have found a consistant[sic]
fix to connect to any network printer from vista:

Run a command prompt and type the following:

   net use LPT2: \\servername\printer

This sets up a behind-the-scenes connection to
the printer.

Then go through the add printer wizard, choose to
add a local printer, and choose port LPT2… It will
probably ask for a printer driver, and you can just
choose whatever XP driver you might have been using
before. The printer is then installed without any errors,
and works just fine.

Of course, since I’m using CUPS-PDF, I don’t have a printer driver. I just use the Generic MS Publisher Imagesetter, which seems to work nicely. And now that I’ve made the right sacrifices to the right gods, I’m back to being able to generate PDFs from any program on the windows machine.

Dual coordinate plots in R

The default plot functions in R don’t seem to facilitate plotting two dependent variables using different scales on the same plot, against the same independent axis. But it’s not that difficult, as I learned from: Jim Lemon’s “Kickstarting R”. But even his example isn’t simple enough for me. So, I generated this:

par(mar=c(5,4,4,4))
plot(1:11, 1:11, ylab="", col="green", axes=F)
axis(1,1:11)
axis(2,1:11, col="green")
par(new=T)
plot(1:11, 5:-5, ylab="", axes=FALSE, pch=3, col="blue")
axis(4, -5:5, col="blue")
par(new=F)

which produces this:

p4_error: Could not gethostbyname for host

For awhile now, we’ve been unable to run using the “-nolocal” flag to the mpirun command in order to execute our simulation across the slave nodes without also treating the master as a slave. When I would run with:

$ mpirun -nolocal -np 7 ./simulation 

I would see an error like the following:

p0_10460: p4_error: Could not gethostbyname for host hostname; may be. invalid name

Being lazy, I spent quite a bit of time trawling the intertubes looking for a canned solution and found many dead-ends talking about the resolver, nsswitch.com, etc/hosts, etc. So, I finally sighed and reluctantly pulled out my programming hat and wrote the following:

#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <malloc.h>
int main(int argc, char *argv[])
{
  char *user_host = calloc(32, sizeof(char));
  int error = gethostname(user_host,32);
  if (error != 0) {
    printf(”gethostname failed with error %d\n”, error);
    return error;
  } else
    printf(”user_host = %s\n”, user_host);

  struct addrinfo *res0, hint;
  memset(&hint, 0, sizeof(hint));
  hint.ai_family = PF_UNSPEC;
  hint.ai_flags = AI_CANONNAME;
  error = getaddrinfo(user_host, NULL, &hint, &res0);
  if (error != 0) {
    printf(”getaddrinfo failed with error %d.\n”, error);
  }

  struct hostent *he;
  he = gethostbyname(user_host);
  if (!he)
    printf(”gethostbyname(gethostname()) failed\n”);
  else
    printf(”gethostbyname(gethostname()) = %s\n”, he->h_name);

  free(user_host);
  user_host = “hostname”;
  he = gethostbyname(user_host);
  if (!he)
    printf(”hostname(/*hardcoded*/ \”hostname\”) failed\n”);
  else
    printf(”hostname(/*hardcoded*/ \”hostname\”) = %s\n”, he->h_name);
  return 0;
}

And that showed me that the string returned by gethostname() was flawed in some way… some insidiously evil and occult way that doesn’t show up on the terminal screen. Redirecting the output to a file and editing that file with vi showed me that there was a SPACE on the end of the string returned by gethostname(). Ugh.

Other symptoms you might see if you have cruft in your /etc/hostname entry:

sudo: unable to resolve host
hostname => hostname
hostname -f => Unknown host
hostname -a => Unknown host

Converting Android 1.5 “Camcorder” videos with SAMR audio codec on Ubuntu Jaunty with ffmpeg

So, T-Mobile pushed the Android 1.5 update to me last Sunday (I think).  I installed it and subsequently had to record a video with the new Camcorder application.  It works well; but produces videos with the audio track in AMR format.  The standard ffmpeg distributed with Ubuntu doesn’t have AMR compiled in because the AMR codec isn’t liberated/free.  I followed Chez’ instructions with a few modifications to get a tweaked ffmpeg that will convert videos recorded with my G1 phone.

  • Run the standard ffmpeg to get the configure options used to compile it.
  • apt-get install libmp3lame-dev libgsm1-dev libshroedinger-dev libspeex-dev libtheora-dev libvorbis-dev libdc1395-22-dev.
  • Download, unpack, configure [--prefix=/usr/local/amr], make && make install both libamr-nb and -wb.
  • svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg-2009-06-02.
  • configure [*], make && make install ffmpeg.
  • export LD_LIBRARY_PATH=/usr/local/amr/lib:/usr/local/ffmpeg/lib:$LD_LIBRARY_PATH
  • /usr/local/ffmpeg/bin/ffmpeg -i video.3gp -ar 44100 vide.mpg

[*] I ended up using the following configure command for ffmpeg:
./configure –enable-gpl –enable-postproc –enable-x11grab –prefix=/usr/local/ffmpeg –enable-avfilter –enable-avfilter-lavf –enable-libgsm –enable-libschroedinger –enable-libspeex –enable-libtheora –enable-libvorbis –enable-pthreads –disable-stripping –enable-libdc1394 –disable-armv5te –disable-armv6 –disable-armv6t2 –disable-armvfp –disable-neon –disable-altivec –disable-vis –enable-shared –disable-static –enable-libamr-nb –enable-libamr-wb –enable-nonfree –extra-cflags=-I/usr/local/amr/include –extra-ldflags=-L/usr/local/amr/lib

Matlab C API, engdemo.c, and JMatLink “Can’t start MATLAB engine.”

OK.  Since I stupidly spent too much time on this problem, I feel like I have to write about it here in the hopes that I can decrease the stupidity in the world.

I’ve written a GUI for a Matlab simulation.  On Linux, we use the JMatLink bridge between Java and Matlab.  At some point, when doing a dist-upgrade on my Ubuntu laptop, the JMatLink bridge stopped working, yielding the uninformative error:

Can't start MATLAB engine.

Well, I proceeded to hack JMatLink, turn on debugging for it, futzing with my LD_LIBRARY_PATH, and my PATH, changing JDKs (since there is a problem with the Sun JDKs and the X11 library libxcb (see here and here for more info on that — I finally downgraded to the gutsy libx11-6 and libx11-dev), etc.

In any case, my fog finally lifted and I decided to try the engdemo.c file provided by Mathworks as the canonical demonstration of calling Matlab from C. And, sure enough, I get the same uninformative error: Can’t start MATLAB engine.” So, I Ask.com’ed (no I don’t usually use the Eye of Sauron for searching) for URLs with this text in them and found: this post by “Mohammed Hasan”. Sure enough, I did an:

$ sudo apt-get install csh

and all is now well. [sigh]

Lost passwords on Mac OS X

So, I inherited TDI’s MacBook from Cosmo who acquired a new one. He was nice enough to set up my user account with no password. Well, of course, that was untenable. So, I immediately set my password. … Time passed because I was occupied with other things. And, of course, I forgot the password. (As usual, this episode allowed the Mac vs. PC argument to bubble to the surface again. I rejoice in such arguments because diversity is the key to agility and dissent is the primary marker for diversity.)

Most websites claim you need an OS X install CD to reset the password. But, the helpful “Dr. Michael” showed us the unix way to do it, with which I’m so much more comfortable. In case that post disappears, here is a modified version of what he said that worked for me:

  1. boot into single user mode (holding command s)
  2. execute the two recommended commands

    /sbin/fsck -fy <return>

    and

    /sbin/mount -wu / <return>
  3. type

    passwd <username>
  4. type the new password <return>
  5. confirm the new password <return>
  6. restart with

    reboot <return>

Swarm’s configure script: Can’t find threads

We recently settled on Ubuntu as a common operating system for the machines on which we run biological models. That meant I have to reinstall Swarm and we encountered the same error Jim cites here.  Our failure is because the configure script doesn’t test for the amd64 platform.  I added the following lines to the configure (after line 19,539):

elif test -d ${jdkdir}/jre/lib/amd64/native_threads; then
threads=native
JAVACMD="\${jdkdir}/jre/bin/java"

That seems to have fixed our problem, perhaps it will help others who encounter the same error.

Cellular Automata Video Synthesizer

Finished assembling my CAVS from Critter and Guitari.

Here it is in action:
CA Video Synthesizer in action

It’s more difficult than I expected to find a stable, interesting CA. But, although at first annoying, the audio helps find stable and interesting CAs.

http://agent-based-modeling.com

Since TDI is such a wide ranging beast, we’ve created a more targeted website for the agent-based modeling work TDI does.  Check it out.

Almost ready to work

I’m almost ready to work here in our new “office”!

1228866215328
1228866199630
1228866175307
1228866155459

Enzyme Induction paper published in Complexity.

Our paper Enzyme Induction paper has finally been published!  Woohoo!

Agent-Directed Simulation Symposium

As usual, we’ll be participating (to some extent) in the ADS symposium.

The theme of ADS’09 is based on the observation of the following premises.

  1. The growth of new advanced distributed computing standards along with the rapid rise of e-commerce are providing a new context that acts as a critical driver for the development of next generation systems. These standards revolve around service-oriented technologies, pervasive computing, web-services, Grid, autonomic computing, ambient intelligence etc. The supporting role that intelligent agents play in the development of such systems is becoming pervasive, and simulation plays a critical role in the analysis and design of such systems.
  2. The use of emergent agent technologies at the organization, interaction (e.g., coordination, negotiation, communication) and agent levels (i.e. reasoning, autonomy) are expected to advance the state of the art in various application domains. However, modeling and testing complex agent systems that are based on such technologies is difficult. Using agent-supported simulation techniques for testing complex agent systems is up and coming field.
  3. To facilitate bridging the gap between research and application, there is a need for tools, agent programming languages, and methodologies to analyze, design, and implement complex, non-trivial agent-based simulations. Existing agent-based simulation tools are still not mature enough to enable developing agents with varying degrees cognitive and reasoning capabilities.

Ptolemy II Webcam App

My partners got so excited about the ease with which one can create data-driven programs using QuartzComposer for the Mac that I just had to demonstrate to them that Apple doesn’t have any kind of lock on this domain. In fact, it brought to my mind a very old Mac OS 9 (or earlier I guess) visual programming language called Prograph, which has now become Marten and a handy little signal processing tool called Cantata, which has now become VisiQuest (look at the tutorials near the bottom of the page). And, of course, that’s not to mention the many other packages out there like PureData, LabView, etc.

Anyway, here’s my demonstration using Ptolemy II 7.0.1 over the top of FMJ (forget JMF - “Oh Sun Microsystems, why have you forsaken us?”):

At our company meeting, we were playing with a USB microscope Don borrowed from a friend of his. And one must admit that’s a much cooler thing to play with than a webcam. But, hey, my point can be made without the fancy hardware. ;-)

Return top