code-immersion software overview (part 1) – package files

October 6, 2009
by Ian McEwen (ihm08)

Also posted to my personal blog at

This post will go through each of the files of the code-immersion package and describe their function within the package. Files are in no particular order, but hopefully hopefully minimal things will rely on stuff described in files later in the list.

  • COPYING and README: These should be the most transparent: COPYING is the license for code-immersion (it’s licensed under AGPLv3; for more information see the Free Software Foundation site README is the horrible underfunded help file I created, which needs improvement (that is, I need to write a real manual… someday).
  • and The first of these files is an example configuration file. The latter is the actual configuration file. This determines some universal things like one’s name, the location of the server and daemon, ports, and more low-level things. Almost everything else relies on the configuration, understandably.
  • This has some basic definitions which aren’t really configuration parameters, but which shouldn’t be defined in multiple places either. Stuff in here is used by all of,, and
  • This defines the data-storage system(s). Currently, only the daemon actually uses this, but it’s something which could easily be useful for other programs, so I decided to separate it out. At the writing of this, the only type of datastore is a hashtable datastore (and an aborted attempt at a list datastore), but this could be extended (and probably should be).
  • Here’s the first file that has the real guts of the software. This is where everything that actually makes the server work resides. In fact, this is only four functions specific to this file (it uses and as well): register-client (which makes sure that a client (daemon, really) gets added to the list of places to send code and text), get-output-port-list (an internal function used by…), dispatch (which actually sends code and text out to daemons), and server (which is the server, which rolls all of this together and makes it useful).
  • Here lies the first half of what you-the-user know as the client. The daemon is the section of the client which registers with the server, receives code from it, and which stores things for the other half of the client to use, providing ways to access this data.
  • The other half of the client. This provides all the functions by which one sends text and code to the server and by which one retrieves text and code from the daemon (and additional functions to evaluate code after it’s retrieved).
  • and The first two of the convenience programs for actually using the software. runs the server without requiring any futzing-about with configuration files or explicitly starting anything. runs the daemon in a similar way, but asks for information for the configuration file which individual users might want to provide.
  • The final convenience file, this doesn’t really do anything; it’s just a stub of a file which uses a (require …) form to allow someone opening and running it to use all the functions provided by This is where end-users who don’t know much of anything actually write code and use the software.

Questions/comments/concerns should go in the comments section below!


Leave a Reply

You must be logged in to post a comment.