Another approach to UML diagramming. This time publicised in Martin Fowler’s Blicki: MF Bliki: UmlSketchingTools. UMLGraph uses a mixure of javadoc tags and pic macros to do the hard work. Dr Spinelis argues for his declaritive approch in “On the Declarative Specification of Models, IEEE Software, 20(2):94-96, March/April 2003 which is on-line in PDF format at Worth a look I think — as is the author’s (Domidis Spinellis) book Code Reading.

Visual Thought

Jeremy Rayner’s June 15 blog entry directed me to another free drawing tool for UML diagrams. Thanks for the link!


p>I mentioned violet a couple of days ago. It is really simple, unfortunately it doesn’t have the ability to move classes around once positioned. This makes it a a bit hard to use. It is open source so that could be fixed of course!


p>Visual Thought is a drawing tool so it has the same advantages as Visio in that it’s not designed for MDA or for code generation, so you can happily use it for agile modelling. As I have some modelling to do over the summer as I rewrite my Client-Server Programming in Java Module, I’ll let you know how it goes!

Suggestions for teaching Java

Not quite on topic, but well worth considering:

“If I were sitting down to design a course today, I’d put at the top of my paper: What can I do to make them curious and interested? What can I do to get them to where they can be creative? And finally, What can I do to help them feel like THEY kick ass, as opposed to thinking that I kick ass? (too many teachers try to impress the students with how smart the teacher is, but IMHO it’s way better for everyone if the students leave your class impressed with how smart THEY are).”

  • Kathy Sierra

Experiments with CVS modules

I have a plan to refactor the lab exercises for EG-140 in readiness for automated submission and marking. The first step was to put the BlueJ projects that students upload into a new repository. However I wanted the repository to be such that all the projects would be within the eg-140-laboratory project but different subsets could be delivered to various audiences. For example, students starting a week’s work should be able to get hold of just a single project as in

cvs -d cvs_repository co naive-ticket-machine

or a whole week’s exercises as in

cvs -d cvs_repository co eg-140-week2


Here is my project structure:

+– week2
+– better-ticket-machine
+– src
+– test
+– bluej
+– files that students upload (a bluej project)


p>After some reading in Essential CVS and the CVS official manual I discovered how to use modules for this. Here is my module file:

Three different line formats are valid:

key -a aliases…

key [options] directory

key [options] directory files…

Where “options” are composed of:

-i prog Run “prog” on “cvs commit” from top-level of module.

-o prog Run “prog” on “cvs checkout” of module.

-e prog Run “prog” on “cvs export” of module.

-t prog Run “prog” on “cvs rtag” of module.

-u prog Run “prog” on “cvs update” of module.

-d dir Place module in directory “dir” instead of module name.

-l Top-level directory only — do not recurse.

NOTE: If you change any of the “Run” options above, you’ll have to

release and re-checkout any working directories of these modules.

And “directory” is a path to a directory relative to $CVSROOT.

The “-a” option specifies an alias. An alias is interpreted as if

everything on the right of the “-a” had been typed on the command line.

You can encode a module within a module by using the special ‘&’

character to interpose another module into the current module. This

can be useful for creating a module that consists of many directories

spread out over the entire source repository.


The modules file itself

modules CVSROOT modules

EG-140 Laboratory: only available to staff!

eg-140-laboratory eg-140-laboratory

Student projects: incomplete projects that have to be edited

Essentially the BlueJ projects provided with Barnes and Koelling

Week 2: the individual projects

better-ticket-machine eg-140-laboratory/week2/better-ticket-machine/bluej
naive-ticket-machine eg-140-laboratory/week2/naive-ticket-machine/bluej
book-exercise eg-140-laboratory/week2/book-exercise/bluej

Week 2: all together

eg-140-week2 -d week2 &naive-ticket-machine &better-ticket-machine &book-exercise

As you can see, we set up the bluej folder in each sub-project to be a module, named as
they are in Barnes and Kölling. We then have a combined module to bring together all the projects in a week’s labs (corresponding to a chapter in the book) as a CVS module eg-140-week2. When we check out this project, it creates a CVS sandbox named week2 which contains the three projects.


p>The next extension will be to get the staff-only version with worked solutions and JUnit tests working.


p>A couple of questions for later

  • If we want students to check-in changes to their own repository, how can we do it? The CVSROOT where the original code comes from would be inappropriate … effectively want each student to have his/own repository. CVS can probably do this so back to the book!
  • How can I get the compiled tests into the bluej folders without breaking version dependencies?