I too would like to be able to submit some small changes and additions to
ECJ. It would be great if we could all work on changes together using a
public CVS tree, and final changes could be approved before committing.

I have been sitting on code changes to ECJ that others may find benefit in
for quite a while, and it would be nice to be able to share.

I also mirror Mr. Philippe's desire to clean up some of ECJs java structure,
and I also agree that using ANT in lieu of MAKE would benefit those who work
with ECJ.

I do disagree on one point, and that is converting the code to use Java 1.5.
I think that should be a slower change. I have used ECJ on different
computers using JVM versions as far back as 1.3. While not everyone will use
the backward compatibility, I think it is important for the university

Well that’s my 2 cents.

-Travis Silvers

>From: Colbert Philippe <[log in to unmask]>
>Reply-To: ECJ Evolutionary Computation Toolkit
><[log in to unmask]>
>To: [log in to unmask]
>Subject: To Sean Luke - Updating ECJ.
>Date: Sat, 22 Oct 2005 06:16:36 -0400
>MIME-Version: 1.0
>Received: from ([]) by with
>Microsoft SMTPSVC(6.0.3790.211); Sat, 22 Oct 2005 03:29:23 -0700
>Received: from LISTSERV.GMU.EDU ( [])by
> (8.11.7p1+Sun/8.11.6) with ESMTP id j9MAQbd16329;Sat, 22 Oct
>2005 06:26:37 -0400 (EDT)
>release          1.8e) with spool id 438046 for
>[log in to unmask]; Sat,          22 Oct 2005 06:26:37 -0400
>Received: from LISTSERV.GMU.EDU ( []) by
> (8.11.7p1+Sun/8.11.6) with ESMTP id j9MAGad16273; Sat,
>      22 Oct 2005 06:16:36 -0400 (EDT)
>X-Message-Info: 0jbW5ANosZI3+efEpyMaC4Urlf67+VNZFhThV9hpJuw=
>X-MIME-Autoconverted: from quoted-printable to 8bit by id
>                   j9MAGbd16274
>Comments: To: [log in to unmask]
>Precedence: list
>Return-Path: [log in to unmask]
>X-OriginalArrivalTime: 22 Oct 2005 10:29:23.0287 (UTC)
>Hello Mr. Sean Luke!
>I am very pleased to hear back from you.   As you can see, I created an
>account on LISTSERV.GMU and will send all my letters there unless you tell
>me otherwise.
>My previous letters to you were not very structured.  Some of the things I
>wrote, like the XML feature, were not a suggestion to put into ECJ.   It
>was just a description of what I did already.   I will be more structured
>in the future.
>My ultimate goal is to make minor changes to ECJ to bring it up-to-date
>with current Java technology and to be able to run ECJ on personal
>computers (Windows or Linux) or to run ECJ on Grid servers.   That is a
>realistic goal.  I would like to do as much changes as possible in
>collaboration with you.  But obviously some on the changes will be done
>privately by me for my own private purposes.
>I was hoping first we could do the minor things in collaboration.  I have
>another list of more involved changes but I hope we can talk about it
>after dealing with the minor things.
>Here is list of the minor things that I see is necessary to do on ECJ and
>the justification for them.
>1) Change ECJ library structure (like I explained before).  This
>change is cosmetic but it would make other java programmers feel more
>familiar with the ECJ project.   If you look at other open-source projects
>on Jakarta or SourceForge, you will recognize a common directory
>structure.   This structure is described in an official Sun Java
>documentation.   ECJ would benefit to adopt this directory structure.
>For the fun of it, I privately changed the ECJ directory to the standard
>one.  It took about 2 minutes to do and the benefits are substantial.
>The source directories are less cluttered and more easily navigable.  A
>final Jar library is generated.
>2) Use the ANT builder on ECJ.   If you wish, you can distribute a
>MAKE and an ANT builder.  You will find that most Java programmers use
>ANT.  ANT is not more complicated than MAKE.  I included an ANT file made
>from your MAKE file.  It works wonderfully.  The ANT file is at the end of
>this email.  ANT is already deeply established in the Java programming
>culture.  Again, if you look at other projects including Jakarta,
>SourceForge, Eclipse, you will see that they use ANT.  ANT brings along
>other benefits like testing, documentation generation, visual dependency
>3) Use a format parser like Jalopy to bring all ECJ source code to
>use the Sun Java formatting style.  Currently ECJ uses an archaic C
>formatting style.  For people accustomed to reading Java code, ECJ looks a
>little strange because of that.  Sun suggests a formatting style for
>Java.  It is possible to use a formatter like Jalopy to format all source
>code without affecting the language syntax.   The operation last only a
>few seconds and does not change the integrity of the source code.
>4) Bring ECJ to the latest Java Compiler version (Java 1.5).   The
>justification for that is that ECJ needs to adopt the Java 1.5 features
>(like typed containers, advanced JVM, ..etc) in order to be maintainable
>for the future and to work properly with other Java libraries.  For this
>change, I will need your help because it is a delicate change.
>Please, let me know what you think of this.  I welcome your comments.   I
>am willing to do all these changes.   If you give me your absolute latest
>version of ECJ, I propose to do points 1, 2, 3 and give you back a copy
>that compiles exactly like before.   Point number 4 is more demanding and
>will require more communication between us.
>Colbert Philippe
>EXAMPLE OF ANT BUILD FILE FOR ECJ (prototype just for fun)
><project name="ECJ" default="archive5" basedir=".">
>     <!—This other build.xml file has declaration of often used libraries
>and builds -->
>     <import file="E:/Projects/_0000_Common/Matrix/build.xml" />
>     <target name="init" depends="commoninit">
>         <property file=""/>
>         <!-- define path for classpath  -->
>         <path id="project.classpath">
>             <pathelement location="${classes.dir}" />
>             <pathelement location="${lib.dir}/${}.jar" />
>             <path refid="project.common.classpath" />
>         </path>
>         <patternset id="source.files">
>             <include name="${project.path}/*.java"/>
>             <include name="${project.path}/app/ant/*.java"/>
>             <include name="${project.path}/app/ant/func/*.java"/>
>             <include name="${project.path}/app/ecsuite/*.java"/>
>             <include name="${project.path}/app/edge/*.java"/>
>             <include name="${project.path}/app/edge/func/*.java"/>
>             <include name="${project.path}/app/lawnmower/*.java"/>
>             <include name="${project.path}/app/lawnmower/func/*.java"/>
>             <include name="${project.path}/app/multiplexer/*.java"/>
>             <include name="${project.path}/app/multiplexer/func/*.java"/>
>             <include name="${project.path}/app/multiplexerslow/*.java"/>
>             <include
>             <include name="${project.path}/app/parity/*.java"/>
>             <include name="${project.path}/app/parity/func/*.java"/>
>             <include name="${project.path}/app/regression/*.java"/>
>             <include name="${project.path}/app/regression/func/*.java"/>
>             <include name="${project.path}/app/sum/*.java"/>
>             <include name="${project.path}/app/tutorial1/*.java"/>
>             <include name="${project.path}/app/tutorial2/*.java"/>
>             <include name="${project.path}/app/tutorial3/*.java"/>
>             <include name="${project.path}/app/tutorial4/*.java"/>
>             <include name="${project.path}/app/coevolve1/*.java"/>
>             <include name="${project.path}/app/coevolve2/*.java"/>
>             <include name="${project.path}/app/twobox/*.java"/>
>             <include name="${project.path}/app/twobox/func/*.java"/>
>             <include name="${project.path}/breed/*.java"/>
>             <include name="${project.path}/coevolve/*.java"/>
>             <include name="${project.path}/es/*.java"/>
>             <include name="${project.path}/eval/*.java"/>
>             <include name="${project.path}/exchange/*.java"/>
>             <include name="${project.path}/gp/*.java"/>
>             <include name="${project.path}/gp/breed/*.java"/>
>             <include name="${project.path}/gp/build/*.java"/>
>             <include name="${project.path}/gp/koza/*.java"/>
>             <include name="${project.path}/multiobjective/*.java"/>
>             <include name="${project.path}/select/*.java"/>
>             <include name="${project.path}/simple/*.java"/>
>             <include name="${project.path}/steadystate/*.java"/>
>             <include name="${project.path}/util/*.java"/>
>             <include name="${project.path}/vector/*.java"/>
>             <include name="${project.path}/vector/breed/*.java"/>
>             <include name="${project.path}/parsimony/*.java"/>
>             <include name="${project.path}/rule/*.java"/>
>             <include name="${project.path}/rule/breed/*.java"/>
>             <include name="${project.path}/multiobjective/spea2/*.java"/>
>             <include name="${project.path}/display/*.java"/>
>             <include name="${project.path}/display/portrayal/*.java"/>
>         </patternset>
>     </target>