This used to be the web page for Walend Enterprises Distributed Computing. Half way through 2002 I needed a mortgage. Mortgage companies hate the self-employed. It's been my turn to have the job with benefits ever since. Running the business was fun. I'd do it again if the stars lined up as well as they did in early 2001.
I still specialize in designing, creating and supporting reliable distributed applications in Java for benefits and food money. I have fourteen years experience using Java to develop tools for financial analysis, commerce, military planning, telephony and software development. I focus on repeated reliable testing, continuously available demonstrations and frequent client feedback to quickly produce the working, supportable system the client wants.
Here's a more formal resume.
I'm using this web page as a place to hang links to my open source projects and my blog on java.net.
Live Open Source Projects
JDigraph is a Java library for representing and working with directed graphs and paths. I started this project in my second algorithms class at Tufts in 1996. The JDigraph API is patterned after the Java Collections API. I used this project to study what APIs work well, and to learn and explore the limits of generics. I wrote a series of blogs and gave a mini talk at JavaOne on what I'd learned. I'd like to bring that part of the project to a close, but need Java to let me encapsulate and reference type specifiers before I can say it's done. Scala might have the language features I need. I'm currently working more with tying JDigraph to the Graphviz drawing programs, but may shift that work to TokenArranger.
SomnifugiJMS is an implementation of JMS that works inside a single JVM to send JMS messages between Threads. SomnifugiJMS is particularly useful for isolating the AWT Thread so that the user interface will stay lively, for decoupling calls to external resources such as database connections, and for speeding up systems of generic JMS clients by allowing decoupled JMS clients to share memory and bypass the database. Internally SomnifugiJMS is built on java.util.concurrent.BlockingQueues. I started this project in 2000 to help test message-oriented middleware at Time0. I used it to learn concurrent programming, explore configuration styles, and (most recently) JMX instrumentation.
SalutafugiJMS is an implementation of JMS on top of ZeroConf to send messages between virtual machines with as little configuration as possible. I started this project in 2007 after seeing a ZeroConf talk at JavaOne, building on top of SomnifugiJMS. It's gone extremely well; SalutafugiJMS has no more configuration than SomnifugiJMS on the local subnet.
AdamTaglet -- Architecture Driven Assisted Modeling Taglet -- is a JavaDoc taglet that generates class diagrams from a custom tag that holds a list of the leaf classes for the diagram and a list of "forbidden parent classes" to stop growing the graph. AdamTaglet uses a JDigraph Digraph to build the relationships between classes, and Graphviz to create a jpeg and an imap file. I started this project as an experiment to get something useful out of UML. The jpegs look a little warty to me. I'd hoped to use svg, but svg viewers are not yet universal. I intend to switch use the project to learn either JavaFX or an applet and the scenegraph API very soon.
TokenArranger is a library of code for creating applications for displaying, arranging, and connecting icons. So far it includes a package for panning and zooming across a user interface. It will include packages for turning low-level mouse gestures into higher-level events, and for relating icons to each other by drag/drop gestures and by connecting edges. It's fun to work on this project, but the code underneath it has been shifting a lot. The next step is to switch to the scenegraph and animation APIs that will reach their first release early this fall.
Project Ideas
Operator Overloading for Semirings: I want to use Scala to rebuild the semiring package in JDigraph, using operator overloading. It seems like a better fit. Scala's take on generics should be better able to handle encapsulating the type specifiers, so it shouldn't hit the same blow-up that I found in Java. It'll be a solid project to start learning the language.
Scala Actors via JMS: I'd like to build a JMS-based back-end for Scala's actors. It'll teach me scala's event-style programming from the inside, and should help others distribute their work.
Graphviz interface for TokenArranger: I've managed to build the graphviz-java library on a few different machines. I'd like to use that to hook up JDigraph Digraphs to the graphviz libraries, instead of the string-and-process based approach I use in JDigraph. It'll revive my JNI experience, give me some experience with the scenegraph and animation APIs and JavaFX scripting. For work I'd like to make a beautiful picture using this and NASA's WorldWinds.
Real telemetry: I had a great time playing with SunSPOTs at JavaOne this year. I'd love to do something with them. I have an interest in working with telemetry and raw data feeds. SunSPOTs might be the way to do that. I can tie one to my ankle while I work out, then look at how I'm accelerating.
Robotics: I also spent some time programming Bruce Boyles' Trackbots. It was a fun puzzle. I think I could build an OK bot using two SunSPOTs and some old bits of toys from my childhood. After I finish the basement, I can set up my underground lab and build robot minions.
Handwriting recognition for Fortress: Long-term I'm very interested in Fortress. Using it will mean reviving math skills I haven't used since 1996.
JavaDoc Link Helper: I'd like to set up a tool to do a better job linking javadoc. I'd add some standard data to javadoc files, set up a standard way to define repositories of information on the internet, and make it easier to link one set of javadoc to another. I'd set it up so that I could mine the whole works for information and show a huge graph of how different projects depend and leverage each other.
Completed Open Source Projects
I'm happy to say that some projects reach their end-of-life after a while. They are superseded by better technology. A time comes to let them be a historical footnote. They still serve a purpose as resume fodder.
JXTAfugiJMS is an implementation of JMS on top of JXTA. I started this project about ten months before starting SalutafugiJMS. It was a battle. The JXTA APIs are really difficult to use, and difficult to use in a repeatable position. I got further in four weeks (a real release) using the ZeroConf APIs on SalutafugiJMS than I did fighting JXTA for all those months. The JXTA experts I contacted didn't have solid answers and couldn't point to working examples. Lesson learned: API must be about using the software, not about the software. It wasn't fun, so I've set it aside. I'll focus this energy on SalutafugiJMS from here on.
Cricket Cage automatically created JUnit TestCases for repeatable bugs and test scenarios. Including Cricket Cage's AspectJ code in a compilation installs the code generator. Running the scenario generates the TestCase from a Velocity template. Adding the new TestCase to an ant build script insures that every successful build passes that test, so no code changes break the scenario. Cricket Cage worked great for me when I created it in 2002. However, the AspectJ syntax is brutally difficult to learn and use. When the AspectJ crew changed their language in 2004 I stopped maintaining the project.
JEnum is a Java runtime jar for working with enumerated types, as described in Josh Bloch's Effective Java Item 21, and a one-way code generator to create the needed classes from xml and Velocity templates. The API is patterned after the Java Collections API. Enums are part of the language in Java5. I learned a lot about code generation, XML and templating from this project, but I'm happy to let the sun set on it.
Lyophilizer provides a robust generic kit of interfaces so that developers can create algorithms and systems of POJOs without worrying about different kinds of persistence back ends. Lyophilizer uses the "interface and driver" pattern extensively to insulate developer's interesting code from changes in the system's distribution, persistence, security or transaction support. In this project I predicted most of the major features of JDO. When I read the JDO specification, I new Lyophilizer was done. Now JDO has been superseded by JPA, which fits gently into EJBs.
http://www.walend.net
mailto:david@walend.net
88 Ripley St
Newton MA 02459
617 916 2763