Table of Contents
Here I list goals I want to achieve and projects I want to work on (or start if they don't already exist). There is more here than I can do by myself in one lifetime and hence I'm hoping to work as part of a team to achieve these goals.
This document is primarily for my own benefit to clarify my own goals. However it may be useful to others who are trying to understand me or my ideas.
I would like to do much more than I could possibly have time for, and to prioritise my time I have a system which is loosely based on maximising karma while I still enjoy myself.
Total karma equals the level of help provided multiplied by the number of people helped.
Helping someone who is helping others multiplies your karma by the number of people they help.
Helping disadvantaged people brings more karma than helping people in less need.
Your help is more valuable if few others can provide the same gift. Consequently greater karma comes when you use your unique skills to help others.
Pick projects that improve yourself. By making yourself more skilled you are increasing the level of help you can provide to others.
Pick projects you enjoy because life is to be enjoyed and you are more effective when you are enjoying yourself.
The closer someone is to me, the more likely I am to help them. Hence I focus on my family, then friends, then my community, then strangers.
I gain huge pleasure out of giving to people. I greater the gift, the more I enjoy it. My gifts are rarely financial. I give of my time, mainly to the projects listed here.
I love Open Source Software. When I use Open Source Software I feel the love that went into creating it. When I write Open Source, I enjoy the karma of giving to all the potential uses of the software. Usually when writing Open Source I've been part of a team and have enjoyed the comradeship you gain when working toward a common goal.
I love solving problems, which is probably why I ended up a Software Engineer.
I feel I gained a lot from society. I have a good education, a comfortable lifestyle and a good job, and I'd like to give something back to society. Preferably something really good that will really help lots of people.
The environment is very important to me. Protecting the environment is helping future generations of society and is worthy of lots of karma.
I enjoy being in the limelight. I enjoy hamming it up. I've given plenty of interviews to media related to promoting cycling and have enjoyed it.
This section describes projects I'd like to get involved in. Some already exist, some I may start myself. Some may be started by you after reading this page. :)
Geotools2 provides the core geographic functions needed for the Community Map Builder project.
It is currently being written well by a very competent group of programmers.
This project is attracting more and more programmers and I expect it will become the core product behind many geographic applications in the future. Hopefully, this will be of benefit to me in my future career.
On this project I'm editing the Developer's Guide and Design documentation. As well as being interesting, this is providing me valuable experience for my career path.
I'm writing software and gaining java programming and object oriented design pattern experience.
GeoAPI is a set of interfaces to geographic objects. It doesn't provide any implementation code, that will be provided by other projects. This will ensure that projects that conform to GeoAPI interfaces should be interchangeable which should ease system engineering of higher level applications.
In this project I intend to contribute interfaces which result from my work in Geotools.
I see this project as an opportunity to refine the Developer's Guide and Design Documentation from the Geotools project as a first step toward developing Generic Processes.
This project will produce generic process sections which can be mixed and matched together to produce a master set of processes for a company or project.
Processes provide guidelines to a team or company on how to get things done. They can include things like:
Suggested development tools and best ways to use them.
Conventions to use when building a release.
How to fix the photo copier.
Developing guidelines for a project is a lot of work. I know, I'm editor of the Geotools 2 Developers Guide. If the guide is written in a generic fashion, a significant portion of the guide can be reused by another project. Companies often reuse their processes however standards are not often shared between Open Source projects.
Much has already been written on processes and there are templates for some of them. SYSTEMS ENGINEERING PROCESS OFFICE (SEPO) have high level processes documented. They may be interested in sponsoring light processes to help Open Source projects.
Processes (like a Developers Guide) will be stored in separate section. Eg, Java Coding Standards, C Coding Standards, Documentation using Docbook, Documentation using RTF, etc. Each section will be maintained separately with it's own version.
Projects using the Generic Processes will create a master document which imports the sections that are relevant to the project. Project specific sections can be referenced locally.
If uses of the Generic Processes need to write extra generic sections for their project, they will be encouraged to feed these sections back in to the Generic Processes.
Uses of the Generic Processes will be encouraged to add any extra sections they write back into Generic Processes.
The documentation should be written in XML docbook, ideally simple docbook. Docbook is standards compliant and is being used by the major open source documentation projects. There are good tools available for linking multiple docbook sections together.
This project will grow out of experience documenting processes in other projects.
Integrated Open Source Applications will probably grow out of this project.
I've editor of the Geotools Developer's Guide, and plan to become editor of the GeoAPI and Community Map Builder guides. With the experience of a couple of projects I should be able to create the first generic Developers Guide and help start this project (if someone hasn't already started something similar first).
This project will catalog applications types required for a process, show the relationships between the applications and specify standard interfaces for application types if standards don't exist.
While there are some good open source applications available, developing an integrated suite of open source applications for development, management, accounting, etc is still difficult if even possible. Large companies like Microsoft and Rational have done a reasonable job integrating some of their tools. Integrating tools from different companies or open source projects is often difficult due to different requirements and interfaces.
For instance, employees fill in time sheets to feed into the accounting and payroll systems. Software development managers want accurate time sheet information to track project progress and collect metrics which can be used gage productivity and improve estimation. In most companies I've worked in, these systems are not integrated. The problem is that the Software Engineer cannot solve his problems without also having to ensure the Accounting System is not adversely effected.
This project will enable Open Source Tools to become integrated in a similar fashion.
This project will probably grow out of the Generic Processes project.
To define the requirements for each tool involves System Engineering and breaking down of requirements using a Requirements tracing tool.
The GeoAPI project is a sub-project which fits into this project.
The key to successful integration of applications is that all key modules (like a time sheet module) should contain an interface which conforms with other implementations of similar types of modules. That means, developers of similar applications should get together and develop common open interfaces for their applications.
Standard open interfaces has already been done to some extent. There is a common API to databases, there is a standard format for interfacing to UML tools. The GeoAPI project is another instance.
The advantage of standard interfaces is that applications can be mixed and matched. New applications can be written which only have to connect to one database interface rather than customise interfaces to many databases. Integrating legacy applications becomes significantly easier if the legacy application can provide a standard interface.
This project needs to attract people from many different projects and standards bodies to succeed. Some of this is already in place and all that is required is to follow their lead.
Research existing initiatives. Join up with other projects if they exist, help start one if not. Network. Work on one or two of the applications.
Create an open source requirement tracing tool which can be used to link docbook XML documents.
Requirement Tracing is a process system engineers use to break high level requirements down into low level requirements and implementation. It usually involves tracking from document to document. It is done on most large commercial and defence projects but rarely seen in open source projects. However, requirement tracing would be very useful for open source projects which are implementing an open standard - providing a mechanism to trace how the standard has been satisfied.
Docbook XML is an open format for storing text and diagrams that has become the format of choice for many of the key open source projects. Being XML based means that links from one document to another would be easy.
I envisage the tool will be a docbook editor which shows to docbook files side by side. A user will be able to click on a section in one document and drag to the other document to create a trace from one to the other.
Links between documents will be stored in a separate XML document.
There is already a good free What You See Is What You Mean docbook editor called XXE which would be good as the editor. The authors of XXE may be convinced to extend the functionality of XXE to include Requirements Tracing.
I suspect that developing the Requirements Tracing Tool on top of netbeans would be useful. Sun may even be convinced to sponsor the work on netbeans. Designing on top of netbeans would be more work, but could be done as an open source project.
This project will be very useful for the Integrated Open Source Applications project.
I'm hoping that by suggesting the idea, someone else will want to implement it. :)
I'm happy to help out with setting up use cases and be a beta tester.
If no one writes something like this for a while I may eventually start the project myself, however it is not my top priority.
I could be convinced to work on this project if someone paid me to work on it.
This project will provide tools and a process to link Trouble Reporting tools with CVS.
Concurrent Versions System (CVS) has become the de-facto standard used for configuration management of open source projects. It allows projects to track different versions of their source code.
Projects usually also use a Trouble Reporting system to track bugs and changes in a project. Unfortunately, there is no formal means to link Trouble Reports to the CVS repository. This is particularly important during the maintenance phase of a project when the following questions are asked:
"Which version of the software was Bug XXX fixed in?"
"What bugs are outstanding in release X.X of the software?"
Once software has become mature, often there are multiple versions of the software being maintained at once: stable, beta, development, etc. It is often desirable to control updates to the stable releases of the software. For example, only fixes to critical bugs are to be applied to the stable version. This is controlled by a build manager who specifies which trouble reports can be fixed, and developers are only allowed to apply fixes to the stable version which fix this trouble report.
An application needs to be written which wraps both CVS and a Trouble Report system. The Trouble Report program should be accessed through a standard protocol, probably XML based. Ideally the Trouble Reporting Access Protocol will already be defined. If not, this should be initiated though the Integrated Open Source Applications project. Success of this project will be greatly increased if it can interface with multiple Trouble Reporting Systems, which is best achieved by getting all Trouble Reporting Systems to support a standard interface protocol.
I've written a proprietary version of this product before and so understand the use cases required. I can provide use cases, specifications for the tool. I might be able to get an employer to pay me to write and open source this tool.
The Community Map Builder will provide an Open Source framework which will allow communities to jointly build geographic databases and share them over the web.
It will be particularly useful where geographic knowledge is spread across a large group of people. For instance:
Mapping favourite off-street bicycle routes in a city. (My personal interest in this project.)
Collecting animal sightings
Mapping bush fire and walking trails
This project will largely be an extension of the Geotools project.
I've already set up a Sourceforge project for this, however the project is on hold until sufficient capability is available in geotools.
After the geotools project has sufficient capabilities, I plan to move my focus from geotools to this project.
I expect to be involved in both software development and networking to attract users and developers.
If I'm lucky, I may be able to find sponsors who will pay me to enhance and install this application.
Create maps of bicycle routes with the end goal of fostering greener transport choices.
I've spent a lot of time promoting cycling in Sydney and have found that many potential cyclists don't ride because the streets are too dangerous for bicycles. However, with a street map and a bit of time I have been able to find safe bicycle routes which travel along quiet streets for almost all the routes I want to travel.
By mapping and publishing quality bicycle routes a substantial number of people could be encouraged to cycle for transport.
Once maps are available, deficiencies in bicycle routes will be highlighted, activists will have reliable information to lobby for better facilities, and governments will have tools to determine where to focus improvements.
Knowledge of all the bicycle routes in a city is scattered across many people so collecting all this information and keeping it current is a difficult task for a single organisation. The best way to collect the information is to allow bike riders to enter the bike routes themselves using the Community Map Builder project.
Set up and install a Community Map Builder.
Promote map entry and use through networking and publicity.
While my initial focus is on Bicycle Maps, Free Geographic Maps for all sorts of applications is the next goal.
Create an audio and video documentary promoting cycling.
Some of the work I've done to promote cycling included putting together 30 pages of facts related to the benefits of cycling.
I'd like to put all these facts together into an interesting, informative documentary.
I don't expect to get onto this project for a while since I have a few other things I'd like to do first and I have no expertise in documentaries. I may get involved as an advisor to others who have more talents in this area.
I want to learn more about:
Mil Std 498, ISO12207 processes and how to apply them.
Earned Value Management (EVM).
Team Leading Requirements
Estimation Techniques, including "function point analysis", cocomo, etc.
Designing using the full UML suite of diagrams.
Currently I'm focused mainly on software development. I've tried a little management and didn't find it as challenging as software development and design. I'd like my job to be primarily technical rather than managerial.
I'd suspect my career path will involve software development, team leading, system architecture, developing and applying processes.
Hopefully I'll be able to weave my pet projects into paid work.
I have a wife and two young boys who I love dearly. It is important to me to be a good family man, which means putting family before work and spending lots of time with them. While my children are young I hope to avoid international business travel so I can play my children every day.
I have other family goals but they I'm only listing issues which effect my other goals.