Dan Ellard's Project Interests
If you think that you're interested in any of these topics but aren't
sure what in the world I'm talking about, send me email and I'll try to
- Fun with ANT
- The ANT architecture is a potential goldmine of project ideas.
- Adding new instructions (or replacing current
instructions) to make the ANT machine better
for some particular application, and then
coding up some or all of that application.
For example, adding instructions to do
floating point arithmetic.
- You can do a suprising amount of stuff with
only 256 instructions and 256 bytes of
memory. Surprise me!
- Build a wonderful set of programming tools
to help ANT programmers.
- Create an entirely new virtual machine.
- UNIX System Programming
- If you want to write something like a shell (or to a lesser
extent, something involving networking) you'll need to learn
something about UNIX system calls and related libraries.
- What services does UNIX provide to programs?
- How can one program run another program?
- How do pipes work?
- Where does malloc really get memory from?
- How can one program communicate with or control another?
- How can I write a program that continues running even after
it seg faults, produces a bus error, divides by
zero, or the user types control-C?
- When the programs I write (perhaps those behave in the way
described in the former item) run amok,
how can I stop them before I get in big trouble?
- Languages and their Interpretation
- If you want to write an interpreter (or compiler, if you
feel ambitious) for some language (such as BASIC or
some language you invent yourself), you'll find it
very useful to explore this area.
- What is parsing, and how is it done?
- How can the state of a computation be represented?
If I want my language to have variables, how can
I keep track of their values? If I want my language
to allow function calls, how do I do call-by-value
(or whatever model I prefer)? When I execute a
return statement, how do I know where
to return to?
- How do I design a language (or pick a subset of an
existing language) that's small enough to implement
as a final project without going nuts?
- Fun with Data Structures and Algorithms
- This is the good stuff! Some of these topics are related many
possible final projects; the last few would be excellent final
projects all by themselves.
- How can I store a binary tree in a file (so that
when I read it again, I get the same tree again)?
- How can I store a set of records in a file? How can
I do this in such a way that the storage method is
robust and doesn't depend at all on the
nature of the data being stored?
- What is a trie? What is a hash table?
What is a skip list? Why should I care?
- How can I organize a file so that I can read the
records in again very quickly?
- How can I split a large file into N smaller files
in such a way that if I lose any one of the small
files, I can still reconstruct the entire original file (even
though the sum of the sizes of the N small files is
only a little larger than the length of the original file)?
- How do data compression algorithms (like the ones
used by gzip and stuffit) really work?
Please bring any errors or inconsistencies in this document
to the attention of the author.
Dan Ellard <email@example.com>