home | 163 . 202 . 244 . 253 . 355 | courses | advisees | faq | honesty | jupiter files | schedule | webpage help | unix help | c++ help | vb help | assembly help

   axe hex editor

I've gathered some information about AXE, (Advanced heX Editor) that is a great tool for exploring how information is encoded and stored on a computer. AXE is shareware and it might be interesting to know what kind of effort is involved in creating a product such as this. You can download it at www.jbrowse.com. axe screen Here is some additional information about AXE that might give you a little more insight into the software development process.


Development Time: [From Benjamin Peterson, the devoper of AXE]
Creating the core codebase for AXE took about three months, four days a week, about six hours a day. Remember that AXE is written in MFC, which is staggeringly inefficient in terms of developer time and complexity. The change from AXE 2 to AXE 3 (which took place at least 3 years later) took about four months, two days a week, four hours a day. Small versions have taken 20-80 hours each. However, this is only *coding* time; as you know, the time spent to create a project is far more than just the coding time. I would estimate that creating web pages and docs took several hundred hours, and testing (including finding and communicating with beta testers) takes an unknown but perhaps larger amount of time. However, the schedule is very flexible.


LOC:
[From Benjamin Peterson, the devoper of AXE]
Axe contains about 45,000 LOC in about 150 classes. Of these, about 10,000 LOC are not by me (modified public domain code) and not all the code is actually used (some is experimental, some is public domain code files that I only use partly). The use of PD code significantly reduced the time taken to develop AXE, and I release PD code back to the community (although not the AXE code).

Because of the ugliness of MFC, the code in AXE is distributed in a peculiar way and is longer than it would be in almost any other framework. In C#, AXE would only be about 2/3 as long.


Development Environment:
[From Benjamin Peterson, the devoper of AXE]
AXE is MFC, because that was the standard Windows framework when AXE was started and at that time I worked as an MFC programmer. I would never start a new project in MFC now; I'd almost certainly use C#, which is what AXE 4 will use. MFC is hard to maintain and sometimes requires vast knowledge to do the simplest things. AXE supports windows 95/98/me but this is a legacy thing and the price for supporting them is really too high (e.g. no unicode). AXE was begun with MSVC 5 and is now built on MSVC 6. AXE4 will use VS.NET or possibly just the raw C# dev tools.


Documentation:
[From Benjamin Peterson, the devoper of AXE]
AXE is usually heavily-commented, using the following standards:

  • Comments are versioned (i.e. comments show what version a change was made in) and the version numbers can be grepped easily
  • 'FIXME' and 'TODO' comments are used to mark areas that must be changed
  • Areas that don't do what you expect contain a readable description of what the problem is and how it is being worked around
  • Non-trivial classes have a brief overview at the top of the file
  • Long methods are commented step-by-step
For a project that spans years and years, and may have gaps of years and years in development, this sort of thing is essential. Naturally, some parts were done in more of a rush than others, but in general there's a lot of commenting in there.

When AXE was started there were no internal documentation products like NDoc and Doxygen, but if I were starting a new project now I would certainly use one. AXE uses Visual Source Safe. I would like to move to Subversion at some point.


Maintenance:
[From Benjamin Peterson, the devoper of AXE] I know I will want to replace AXE some day, so maintenance is carried out on the assumption that it is okay to become unmaintainable at some point. This is a policy; projects have life cycles and AXE is now at least 6 years old and toward the end of its life cycle. Version 4 will be a new start. Some of the earlier code, for structures in particular, is just awful and I'm not sure why. I must be imperfect :)


Creating a "REAL" Product
[From Benjamin Peterson, the devoper of AXE] AXE is not a *real* real product. The challenges of a project like AXE are very unlike those I meet in my day job. AXE is developed (almost) singlehanded, with no deadlines and no fixed requirements. This doesn't necessarily make it easier, just different. If I had to give some advice on projects like AXE, it'd be:

  • Even with a private project like AXE, coding is still only about 3/5 of the total effort and skill set
  • People will circumvent any anti-piracy system you put in, so don't bother
  • When you finish the program, that's when you start the hard part: web pages, search engines, payment systems, users, advertising, beta testers, packaging, uploading, versioning... you never really finish, you just reach a stable level of maintenance.
  • Even if (like me) you decide to charge for your product, try to get involved with free/public domain/GPL software. It's an important community and you can learn -- and contribute -- much.
One of my free projects is at www.jbrowse.com/svgnet, but there are others here and there.