Alvin Alexander | Java, Scala, Unix, Perl, Mac OS X

I just started working with a product named yGuard. yGuard is a Java obfuscator that can also be built into your Ant build process. My initial experiment using it in an Ant build process has been very successful. I haven't tried decompiling my class files yet, but I can see that several/many of the class files have been renamed, and the app runs fine from the obfuscated Jar file.


Here's a link to a sample 242-page requirements document. This is a real world example, full of use cases, requirements, and a few other things.

The following three links are web site references from Joel Spolsky's book "User Interface Design for Programmers".

Another link I want to remember is I found some useful info here the other day on Windows XP shortcuts.


A co-worked gave me this URL today for low-cost magazine subscriptions. As much as I like to read (and save money) this could be a lot of fun.

Yahoo keeps a list of Mutual funds that are sorted by several categories, including one that I'm most interested in: Mutual funds ranked by top performers.

LaTeX question: For a technical document I'm creating with LaTeX, there are a lot of sections that have a repeated/consistent format. This is exactly what I want, but for a 160 page document, I ended up with a 15-page table of contents (TOC). Is there are way to control the "depth" of the table of contents?

After a little research ... yes, I can. Here's some sample code that I put in the LaTeX preamble, just before the \tablofcontents tag:

After days of deep requirements documents and use cases, here's a LaTeX FAQ that was most useful: The UK List of TeX FAQs. (Cheers)

Here is a brief list of UML-related products for the Java environment. Some may work with IntelliJ or JBuilder ... I'm about to find out. My *real* interest here, however, is in reverse-engineering source code into sequence diagrams.

I got back to working on my anti-spam program again two nights ago. I included a lesson learned on the growth of a software application here.

It's interesting how, when a software program grows, it may not evolve exactly as it should.

I was working on my anti-spam program two nights ago, and I noticed it had this growth problem. When I first starting creating the program it was supposed to mark email messages w/ varying levels of suspicion, kind of a Bayesian algorithm. But, in practice, I found that this wan't really necessary; a message was either spam, or it wasn't.

However, as my program grew I ended up leaving code in it like this:

Linux sed FAQ: How can I use the sed command to modify many files at one time?

Here's a Linux/Unix sed command file that I just used to modify a bunch of files:


I put those three lines in a text file named sed.cmds.

After that, I call that sed script from a simple shell script. Here are the contents of the shell script:

One of my co-workers told me about a cool Alphaworks project that can analyze the structure of a Java project, and report interesting structural metrics/stats. I just found the project; it's named "Structural Analysis for Java".

I don't know of any direct commands to do this, but this cat command works:

cat /etc/redhat-release

You can also take a look at the uname command, which can provide a lot of Linux version information.

I've created a list of some common vim commands that I need to remember. The most important of these vim commands are related to vim syntax highlighting, auto-indent, and showing line numbers.

Here's a short list of these vi commands, all of which can be issued while you are in vi "command mode":

Here's a link to some JavaScript code I found that let's a user double-click anywhere on a web page to get back to the top of the page. This way, if you're half-way down a very long page, you can just double-click anywhere and move back to the top. This seemed like an interesting idea, and I did not want to lose it. Many thanks to the folks at for this idea.

Here's some JavaScript code I found today while poking around the net. Embed this JavaScript code in a web page, and a user can simply double-click anywhere on the page to automatically move back to the beginning of the page. Pretty cool idea. Here's the code:

There are dates/times like last night, and again this morning, that my unified theory of software development seems to be coming together. My latest concepts, documented here just so I won't forget them :), involve:

Here are a couple of links as I found yesteday as I continue my personal "software quality" quest:

Here's a link to a good Unofficial Java Web Start FAQ I found while in the need this morning. The If I were King page is also good.

Here's the source code for a Java memory eating program I've written. Its purpose is to consume all of the memory (RAM) on a PC. It tries to allocate 1 MB byte arrays until it runs out of RAM.