



In my ripe middle age I have come to understand and accept that I like to have a half-dozen or so simultaneous active projects in my “stuff to do for fun” pile. Most of them will be abandoned before I accomplish anything substantial. Sometimes I go back and revive previously-abandoned projects and work on them some more. Rather than being depressed about the “half-finished” status of most of my playtime projects, I now just live with it; doing so has made me a happier person. This, of course, is not my approach to life in general — just things I do for fun.
Like most people who operate in a similar way, I have lots of potential project ideas sitting around (most of which will never even reach the stage where they get abandoned). This page lists some of them. When and if I start working on a particular project idea in more depth, it will get its own page.
This list is laughably big. Life is too short and too narrow.
![]() |
|
Like many computer geeks, I have a lifelong fascination with the Mandelbrot Set. How can such a simple formula give rise to so much intriguing and varied detail?
Writing a program to view the Mandelbrot Set is a rewarding and relatively simple task. The primary objective is entertainment, although it is a decent way to become familiar with the technical details of different parallel computing technologies.
I have already built a version for multi-core (and multi-processor) SSE-capable computer systems. Besides making some improvements to that version, I would like to make a version that can run on graphics cards with double precision math capabilities (like the ATI/AMD HD 48xx series).
![]() |
|
Games and other simulations strive toward more and more accurate models of people — what they look like, how they move, how they interact with their environment, how they walk, how they talk, their gestures, facial expressions, how they comb their hair.
What a great opportunity and challenge for a self-described modelling junkie — and what a huge economic opportunity for success. Over the next couple decades many billions of dollars will be poured into the production of realistic virtual humans and it’s a pure modelling challenge.
It might be worthwhile to take on that challenge.
![]() |
|
Stanford University hosts a competition for General Game Playing, in which computer programs read the rules of newly-invented games and then compete against each other at the games. I’m a sucker for games and contests. The idea of modelling games in general appeals to me as an interesting challenge.
![]() |
|
I do stuff and, probably like most people, that stuff is mostly repetitive: I am a creture of habit. There’s a lot of stuff that I buy over and over. I go to work and come home on weekdays. I check my list of blogs most days. I get my hair cut if I think of it. I go on vacation sometimes (like to AGI-09 in March!). I take my wife out to dinner, check out what music kids these days are listening to, and so on.
I think a computer system that had a decent model of what life is like for people like me could fit my life into that model pretty well just by watching what I do. And then it could help me do it or improve on it. Suppose for example that the system had a good actionable model for comparison shopping online. If I tell that system “I want to buy a new Camcorder” it might be able to help me figure out which one to buy… but even if that is too ambitious, if I tell it I want a Canon Vixio HF10 it can save me half an hour by looking around among vendors with a good reputation for the best price of an in-stock item and order it for me.
This kind of “personal assistant” could do all kinds of things for me… make sure I don’t run out of toothpaste, remind me to pick up my clothes from the dry cleaner, write and print a letter to my congressman (with envelope), and on and on. Futher, imagine combining models induced from many users of the system (gathered anonymously) into a huge library of ways that a personal assistant can help me.
If done smart, if done right, the life-modelling digital assistant might be used by millions of people.
![]() |
|
Back in my graduate student days, my abandoned thesis work included the invention of a particular computing substrate consisting of an interconnected network of processing units, each of which contains internal state and updates that state and its outputs with an iterated sequence of matrix multiplications. Although my thoughts have drifted quite a bit since then to include more and different requirements, it would be good therapy for me to play around with an actual implementation.
The processing units were called “cogs”, but that rather obvious name has been used for many AI-related things since then, so I’ll call them “gizmos” instead.
![]() |
|
Probably the most popular and hopelessly difficult task: predict the stock market (or some other similar thing like the price of commodity futures). Assuming that when the 2008 financial crisis is over we will still have markets and regulations thereon that resemble what they have been, it would be very fun to try putting modelling techniques to work on the market.
![]() |
|
Hypothesis: Multiple independent models of some phenomenon (built on different model substrates) can sum up to more than their individual results.
This project involves empirically testing that hypothesis by picking some interesting phenomenon and modelling it with several different techniques. Once that is done, I will try to see what if any synergies arise from bouncing back and forth between different models. That’s not very specific but I really don’t know what to expect.
![]() |
|
In 1978, Patrick Hayes published “The Naive Physics Manifesto”, in which he challenged Artificial Intellgence researchers to build knowledge representation and reasoning methods sufficient to understand qualitative aspects of the physical world — the kind of common sense that helps humans move through our complex world, and which probably forms the basis for much of our analogical reasoning abilities.
Although some work was actually done on solving this problem, it basically was abandoned because it is too hard. That interests me.
The first step is to try to precisely define the task. To my knowledge this has never actually been done, resulting in some confusion about what the task actually means. Then I would like to try to build a system that learns naive physics from interaction with a detailed virtual reality simulation.
The odds of success for a project this ambitious are quite small, but since it’s all for fun, failure doesn’t particularly frighten me.
![]() |
|
Nothing groundbreaking here really, at least to start. I would just like to build a small portable computer with a camera / heads-up display and overlay graphics on top of the view. This concept is called “Augmented Reality” and lots of cool kids are experimenting with it these days. It sounds really fun and difficult but doable for a hobbyist like me to join in.
![]() |
|
In informal but precise-as-reasonable terms, I’d like to introspect on what I do when I build mental models of new phenomena, by recording and analyzing my thoughts as the process unfolds.
To do this, I need to read about what other people think are the best ways to capture introspection, which seems like a very hard problem. Then do a bunch of examples and finally try to make some sense out of the data.
This is an extremely speculative project for a variety of reasons, not the least of which is the untrustworthiness of introspection itself. Still, I’m intrigued by the idea.
![]() |
|
The purpose of this project is to begin implementation of the “Super-AM” task described here. The starting point of such a project is to build a system capable of representing and proving a core set of mathematical concepts. Much work has done on this type of task by academic mathematicians, so the starting point involves studying and adapting some of that work.
Since there are many different ways of thinking about mathematics, this task might be an ideal case for studying multi-model integration.
![]() |
|
A modelling substrate is a formal system designed for the purpose of making a particular class of models easy to express, manage, and manipulate.
The purpose of this project is to build tools for rapidly constructing
and experimenting with different modelling substrates.
The hope is that lessons can be learned about the process in general,
leading to deeper understanding. E.g.:
Additionally, this project will lead to a useful substrate code library plus core competency in working with different substrate formalisms.
![]() |
|
I have a vague, probably pointless, notion for a learning system that sort of generalizes Hebbian learning. The basic idea of Hebbian learning is that when “things” (neurons, concepts, nodes of a semantec net, whatever) tend to be active together, a “link” binding them (and presumably causing further co-activation) should be strengthened. I wonder about generalizing the nature of that link and the nature of the co-activation that strengthens it to include more complicated relationships than co-activation.
It probably doesn’t even make sense, just a throwaway concept dredged out of a half-asleep mind, but I’d like to play with the idea some more. Someday.
![]() |
|
Traditional genetic programming does not really parallelize well on SIMD architectures like the latest commodity graphics cards. How about designing languages to try to make that not true? I think the basic mechanism would be to make the root language super-risc (that is, reduce the number of different instructions). Can clever ways be found to make the same instruction do different types of things?
Even if such an approach leads to unintuitive “programming languages” that may resemble networks of finite state machines more than Pascal programs, it doesn’t matter.
What a fun thing to play around with!
![]() |
|
Goofy and pointless as it is, it might be fun to make an entry for the Loebner Prize. There are some very interesting modelling aspects involved: modelling dialog, modelling language production, modelling one or more subject areas, theory of mind as a modelling task, etc.
The relationship between language and domain modelling is extremely important and challenging.
Despite its history and its laughingstock status, I’m a sucker for contests and competitions so building a Loebner Prize entry could be an entertaining task.
![]() |
|
Bayesian statistics is a field that can be put to great use in modelling the world. Bayes’s formula gives the probability of a thing being true given a set of circumstances. Observations update the statistics, so in a limited sense the updating cycle is an automatic model building mechanism.
I’d like to at least skim the very large literature on this topic and think about the ways that this model adaptation can be put to good use.
![]() |
|
Living cells are intricate and fascinating. Much of medicine is based on understanding how they function and malfunction. Given the large amount of research that has been done into cellular biology, building a model of a cell is a great test case for the model-building process, as well as being inherently interesting.
Additionally, since cell models can be built from a number of different angles, and at several different levels of detail, it’s an interesting domain for studying how multiple modelling techniques relate to each other. Can several independent models sum up to more than their individual results?
![]() |
|
I have always been fascinated by little media units that catch on. That Youtube video that people pass on to each other, an email that gets forwarded in an expanding pattern, and so on. I think of these things as “memetic viruses”. I’m pretty sure that viewpoint is not original, though I’m not sure where I read about it (hmm, the concept of “memetic virus” might itself be a memetic virus).
There are lots of interesting issues: why do some things catch on and spread like wildfire, but most do not? What do the infection patterns look like and why?
Can I use the results of such analysis to help create successful memetic viruses of my own? How can the results of those experiments be measured? Is it ethically acceptable to do this, or was the creation of the dancing macaroni screensaver a crime against humanity?
I imagine that there must be published material related to these questions so the first step in this project will be to perform a literature/internet search and plow into research.
![]() |
|
I have built a number of robots and have a couple of designs on the board for advanced robotics research platforms. I have even collected a variety of parts toward this end — brushless motors, PID controllers, high tech gearboxes, etc.
So this project involves finalizing a design and actually building the robot. I want the result to be robust, nimble, have reasonably rich sensor feedback, provoke a strong reaction in observers, and provide a useful testbed for real-world physical environment modelling.
![]() |
|
Creating little computer games is a sometimes-hobby of mine. I’m not really a “gamer”, but creating these little self-contained works of programming art amuses me.
My favorite type of game is probably best described as “action puzzle”. The early arcade games of the 1980s were often this type, and a lot of current “casual games” fit into the same general category.
I would like to try to capture the general features of games of this type in a model and automatically generate new games from the model. Besides being fun, it’s an interesting and unusual test case of the model-building process.
How “big” would a model of something like this be? What modelling method(s) can be effective? Can the funness of a game be predicted based on its characteristics? This project would be a real gas but is probably a long shot to produce anything impressive.
![]() |
|
This project experiments with the ways that a computer program might model itself. This could include things like its use of system resources, its structure and pieces, its code, its origin, its purpose, the way it works, and so on.
A library of self-modelling techniques exposing various different capabilities could be a useful thing for any programmer to have.
![]() |
|
A very concrete, somewhat mundane project. The idea is to build a library of generally-useful things that can make good use of parallel hardware (multicore CPUs and manycore graphics cards). Versions for popular hardware.
The specific set of library functions is not known right now. Perhaps just simple things like convolutions, neural nets, bayes nets, etc. The main purpose is to build competence in parallel programming.
![]() |
|
The idea of this project is to start with some arbitrarily-chosen representative tasks requiring intelligence, and imagine computer applications that would help me perform the tasks using methods that could be thought of as increasing my intelligence. The more general-purpose these applications can be, the better.
If I choose tasks that are in some way relevant to my general goals, this project could increase my productivity in the future. In fact, that is exactly how the results of this project should be judged.
![]() |
|
Since this blog first started, I have been trying to collect the things that conceptual models “do”. My idea of what a concept is remains vague and their requirements are the result of sloppy introspection and not-very-careful reasoning. Nevertheless, I’d like to start writing down my thoughts on the subject, with the eventual aim of producing a “requirements document” of the type sometimes used in the software development process.
Conceptual modelling seems to be an important type of modelling used by humans, so coming up with something similar on a computer could be useful. I don’t really care whether the result accurately reflects exactly what human brains do… this is an engineering task designed purely to eventually produce a useful programming library.
![]() |
|
One of my hobbies is music — composition and playing instruments. I am not particularly talented but I enjoy the process and like most people I love music.
I have used some software to create sounds and compose music, but the tools rarely have any depth as far as their models of musical concepts. What novel musical tools can be developed from knowledge-rich models of acoustic, physiological, music-theoretic, and genre-conventional concepts?
Besides being amusing, it’s a test case for studying the depth and efficiency of the model-building process.
![]() |
|
Nuts and bolts. There are many “modelling techniques” in the world. In fact, the term is so general that almost anything could count. Nevertheless, if one of my goals is to be able to parachute into a new task domain and rapidly model the important things about it, it will be helpful to have a library of methods ready to hand.
Beyond just collecting or writing batches of code, this project would focus on the general way to describe a “modelling technique”. What sort of common interfaces would be useful? How can I efficiently try some alternatives? How can results be measured? By only counting actual code, there is no room for hand-waving on these points.
![]() |
|
I’ve always been intrigued by the idea of automated searches through “program space”, whether by a form of evolution or some other type of search. This is of course a well-studied field. The particular part of it that interests me the most is inventing programming languages that produce evolvable programs; that is, the fitness landscapes tend to be smooth. This is one aspect of an idea often called “soft computing”.
I’d like to play around with those ideas, see what other people have done, monkey around with implementation, maybe have an original thought or two.
![]() |
|
I have sometimes wondered whether it would be fun to operate a large number of tiny businesses. Each one would only have occasional work or else frequent but very short time commitments. The biggest obstacle to pursuing such a lifestyle is the overhead of running a business. Details like bookkeeping (and taxes), time management, filing, and so on are time sinks, and the details get forgotten if not often reinforced, making them very inefficient. Additionally, details of the business cycle like market research, physical process management, marketing, sales, shipping, customer support, etc, could be streamlined if a detailed, flexible, and intuitive business model could be developed.
This is an example of building a specific model and hopefully learning some generally-useful things from the experience.
![]() |
|
Given a robot with actuators and a sufficient batch of sensors, it seems as if a program should be able to learn to control that robot — produce smooth effective locomotion. I’m thinking mainly about legged robots but I suppose wheeled ones would count as well.
Such a system should also be able to deal robustly with changes in the robot’s sensors or actuators — joints that become wobblier, motors that become less efficient, sensors that drift or become noisier, and so on.
Besides being an interesting test case for learning, sensor integration, reasoning about time, world modelling, and other robotics issues, the result could be quite useful. If robots can be tolerant of sloppy gear systems and can adapt to damage and degradation, the cost of robot construction and maintenance should decline sharply. I love precise zero-backlash devices like harmonic drives (I collect them compulsively, in fact!). But the future belongs to smarter software and cheaper hardware.
![]() |
|
For some reason, I’m fascinated by the idea of writing a computer program that can watch television. I’m not even sure exactly what that means, but I imagine the program matching a TV signal to an internal model of television — identifying things like commercials, scene changes, dialog, staging, the location of outdoor shots (or identification of landmarks), identifying actors, and so on.
Once functional, the TV watcher can be used for various purposes like generating indexes of TV programs. It can also watch TV for me, saving me lots of tedious hours. Heh.
![]() |
|
Search. Few concepts are so important to advanced computer applications, and few processes gobble computing resources so voraciously. As a pure nuts and bolts project, it would be interesting to build a library of search techniques optimized for execution on commodity multicore and manycore hardware.
It’s just code, but it might be useful code.
![]() |
|
Try to come up with simple computer programs or other constructs that “improve themselves”.
This project will just play with some toy systems, and the intent is really to encourage thinking flexibly about the nature of computing systems.
![]() |
|
Commonly-available physics libraries are not really ideal for the types of simulation that interest me most. I would like to have highly-detailed simulations of soft, deformable bodies controlled by muscles, I need it to provide accurate feedback of various parameters on dense proprioceptive maps, and I want the model to run on massively parallel commodity graphics hardware.
Why do I want all this? Well, for one thing, consider the C. Elegans worm. Biologists have mapped all the synapses of its several-hundred-neuron nervous system, but how does one test a neural model? This physics system could be adapted to “sim-worm”, providing a realistic body and muddy environment for simple creatures.
Similarly, a simulated robot arm would be a lot more interesting if it provided highly detailed feedback from simulated skin and if it deformed realistically when interacting with a simulated environment.
Only one way to get this great stuff: build it!
![]() |
|
Most computer geeks are drawn to the idea of “programs that write programs” like moths to flame. I have so far avoided immolation but I do feel the pull. I’d like to start by studying how this idea is actually used in practice — language features, runtime libraries, and applications.
![]() |
|
The way an organism develops is kind of interesting — from a zygote and a genetic blueprint, cell division and specialization leads to the final form through a developmental process. This developmental process puts a layer of indirection between the genetic specification and the final output. Intuitively it seems to me that the extra layer does interesting and useful things to the shape of a fitness landscape by providing methods for mapping small genetic changes onto either small or large phenotypical variation.
Can this idea be applied to computing systems such as soft computing networks? What are interesting ways to represent a developmental program?
![]() |
|
Given the detailed soft-body physics simulation project, it would be interesting to push for the emulation of the nematode worm C. Elegans. This is a rather obvious project and was proposed at least one time before.
Even if somebody else is already doing it, it’s a cool well-defined easily-understandable project. It could be undertaken at several different levels of abstraction, perhaps going so far as to include the Cell Model project described above.
![]() |
|
I like the idea of being able to spit out machine code on the fly for whatever purpose — to be able to compile a sequence of desired actions directly into bare-metal instructions. To facilitate this, I would like to build a model of a basic computer system (memory, registers, I/O channels, and a communication conduit) and then formally describe the x86 instruction set in terms of the modifications the instructions make to the machine model. This allows reasoning about the function of machine code.
Other people often want cleaner, simpler abstractions for this sort of thing. I like my virtual machines as raw as I can stomach.
![]() |
|
For a long time I have been intrigued at the thought of compiling a bunch of tools to perform “data analysis” in a sort of generic way. Given some blob of data, extract interesting descriptions of this data. Part of that is “data mining”, but also I imagine doing things like being able to guess at hierarchical file formats, find embedded dates and times… a bunch of general and specific techniques for answering “what is this data?”
It’s the sort of software that computer geeks in movies use all the time. While not quite as bad as the magical image processing software that can crisply zoom arbitrarily far into a digital photograph (usually by saying “enhance”), it’s still unreasonably effective. But can superintelligent software like this be approximated? How good can a human+program be at analyzing arbitrary data?
![]() |
|
There are many codebases designed to help people construct “virtual worlds”. Unfortunately, none of them focus on the things that I think are most important — detail and richness. Usually the focus is on interoperability, ease of use, device/OS independence, and other garbage aimed at the lazy.
I think that virtual worlds as testbeds for modelling systems or artificial intelligence agents could be useful, but the important thing is breadth of linkage to the huge cascade of concepts and pre-concepts that the world provides. Not just some primitive groups of polygons where we point to a system that notices that the z coordinate of the polygons of one cube are larger than the polygons of another cube and invent an “above” concept to cover this case… and then fool ourselves that we are learning the nature of the world from such trivialities.
So I am interested in detail. I want the best physics simulation I can manage to build, probably on top of expensive manycore hardware platforms. Besides just the usual collision, friction, and so on, I want objects that break, fluid that flows right, string that gets tangled properly, surfaces that get dented and scratched, patches of dirt, smudges, dust motes… real stuff.
The “bodies” of agents in this world should have real senses of touch with thousands of points in skin maps. It should have many channels of proprioceptive data, and visual fields that look like the world, not like the pretty but causally empty surface from video game. That’s a world worth actually using, rather than just being an afterthought cost-saving concession to laziness, a world that doesn’t hide the hard problems in the name of expediency.










More Options ...

Categories
Tag Cloud
Blog RSS
Comments RSS


Void (Default)
Life
Earth
Wind
Water
Fire
Lightweight