Elf Version History |
Elf began life as a quick-and-dirty composition finder, written in Java. The original motivation was to assist in providing quarter-peal compositions for the AJB half-lead spliced project, and the Campanophile articles that this triggered. Because the program was written from scratch in pure 1.1-compatible Java, the opportunity existed to adapt it for delivery via the web. Thus Elf, the world's first online composing engine, was born.
For a list of changes in the latest build, click here.
| Half-Lead Spliced Composer | 28 Jan 2002 | Work begins on a half-lead spliced composing program, to support Campanophile article 2. Initial program runs as an application with methods hardwired into the code and a naive search algorithm generating every change. |
| 29 Jan 2002 | First compositions produced. Optimisation work begins. Search algorithm uprated to use half-lead and leadhead permutations rather than generate every change. | |
| Early Feb 2002 | Most of the time spent on composition runs - some of the 5-part quarter-peal searches last up to two weeks. Experimentation with different pruning techniques. | |
| 15 Feb 2002 | Calls implemented. Over the next two weeks most of the touches required for Campanophile article 2 are produced and checked. | |
| 26 Feb 2002 | Decision taken to prepare for conversion to applet delivery. Heavy optimisation work required, since browser VMs are known to be much slower than the Sun Hotspot VM used by the application up till this point. Node-table algorithm introduced; data structure and bytecode optimisation; proving and music checking unit optimised. Applet Tracker code imported from 2001 Bronze Age project. Over the next two days the applet and supporting web pages and scripts take shape. | |
| Elf Elenwë build | 28 Feb 2002 | Elf is born. Method library and "Add Method" page implemented. Uprated place notation and row generation code imported from 2000 JavaRing project. Output layout improved. Heuristic pruning algorithm implemented to support simpler user interface options. |
| 1 Mar 2002 | Graphics and web-design work begun in preparation for the early-access release. Node-table build optimised. (Elf is now some 20 times faster than the early composer application). First FTP to the webserver on 2 March. | |
| 3 Mar 2002 | Web design work completed, Elf Help pages written. Early-access release of the Elenwë build uploaded. Beta test program begins! | |
| Elf Eärwen build | 5 Mar 2002 | Work begins on second beta. Web-page content and layout improved; implemented multiple selection for Add and Remove methods. The next couple of days are spent exploring further optimisation ideas - getting harder to find now, and not all work, but a two- to three-fold speed increase achieved overall by using more pre-allocated objects (no garbage collection), pre-calculated music tables (created on the fly to avoid increasing table build time), and rearrangements and code optimisation of the inner composing loop. |
| 7 Mar 2002 | In response to beta-test feedback, implemented configurable music types: created Elf Music dialog page and updated Elf Help. Archived off Elenwë build - note old builds are still available from the build title links in this History page, but they should be treated as obsolete. | |
| 8 Mar 2002 | Implemented pause/resume. Composition output improved - the current top ten compositions can be viewed in a separate text window; only the best composition is shown on the main composer page. This has two advantages: firstly, the layout of the main page is much better, and secondly, the output window is very easy to save to disk, and because it shows a fixed snapshot of the compositions so far, this can be done safely without pausing the search. | |
| 11 Mar 2002 | Experimented with the rotational sort algorithm - made some progress but decided to delay full implementation because integration with the pruning options is fairly difficult. Instead started work on Microsiril method library import in response to user request. | |
| 13 Mar 2002 | Finished MicroSiril library import feature. Most of the initial user feedback from the Elenwë build has now been addressed, in addition to a major performance enhancement. A quick tart-up of some loose ends and Eärwen is ready for upload! | |
| Elf Indis build | 14 Mar 2002 | Soak tests in preparation for the release reveal a critical bug in Eärwen's calls search - this is fixed, but please do not use Eärwen for compositions with calls. During the test runs the slow table build becomes increasingly frustrating, so that becomes a target of tuning work. The way to get a 1.1 browser VM to go at full compiled speed is by now blindingly obvious - simply avoid String creation, and prevent the garbage collector from having to work by using static memory allocation. Initial table build (run once-only when Elf first loads) is reduced from 6 to 3 seconds on the benchmark machine. Even better, the method table populate (for 8-spliced) is reduced from 31 to 6 seconds - a five-fold improvement. |
| 15 Mar 2002 | In response to user request, added Nice Part-Ends for 10 parts, and improved the layout and sizing of the Music and Method Library pages. Over the following weekend it becomes obvious that the ability to do conventional leadhead spliced searches would be extremely popular! Some time spent doing a prototype implementation - it proves best to spawn off a third composing loop. | |
| 18 Mar 2002 | Started a thorough refactoring of the code to reduce applet size and improve download time. In parallel with this two major algorithmic enhancements are begun, both of which will be beneficial for the longer searches possible with leadhead-only spliced. The earlier rotational-sort code from 11 March is debugged and integrated; benchmarks show good results from the new algorithm - e.g. 8-spliced (half-lead) ATW down from 29 to 10 minutes. A start is also made on a "whole-lead" search algorithm. This uses "composite" methods made up of different first and second halves, to allow the search to proceed lead-by-lead, and also to provide an optimal leadhead-only search. This approach has only now become practical due to the extra headroom provided in the last round of table-build optimisations. | |
| 19 Mar 2002 | Over the next couple of days the rotational sort, leadhead-only search, and composite-method algorithms are debugged and optimised - probably the most difficult work of the entire project. The search efficiency of the rotational sort puts more pressure on the music-and-proof check unit, so this is tuned. Finally, better proof pruning is implemented, which should be effective for longer searches, especially for LH-only spliced. | |
| 22 Mar 2002 | By the end of play on Friday 22, the new algorithms are working smoothly and the 8-spliced ATW search is down to 6 minutes; this compares to approximately 29 minutes for Eärwen and 85 minutes for Elenwë. | |
| 26 Mar 2002 | The weekend is spent arranging proper web hosting for Elf under its own top-level bronze-age.org domain. An important decision is also made, to make the project open source; however this will be delayed until the next build whilst the source code is documented more fully. The final job before the upload of Indis is to extend and simplify the method library page, and the design work and most of the implementation for this are complete by the end of play on the 26th. | |
| 29 Mar 2002 | The previous week sees the finishing of the new method library dialogs, together with corresponding Elf Help. Some other minor fixes are made, including improved percentage-complete calcations, and the applet cab is knocked down to 34k (smaller than Elenwë!) using a Java class file obfuscator. After further testing, and last-minute website touch-ups including provision of a composition "Examples" page, the latest Microsiril libraries, and the archiving of Eärwen, the Indis preview edition finally goes live on Friday 29th March. | |
| Elf Tinúviel build | 2 Apr 2002 | Mike Ovenden has realised that the new LH-only capability makes the engine suitable for single-method composition! This reveals a couple of bugs in the minimum COM calculations, which are fixed. Work also starts on improving the % complete calculation. |
| 15 Apr 2002 | Very little time is spent on Tinúviel during April due to other commitments. However a day or two is spent bringing the project javadoc up to standard, in preparation for the open-source release. | |
| 29 Apr 2002 | Some class design improvements are carried out, again with the open-source release in mind. Primarily this involves migrating the three inner search loops into separate Composer subclasses. Although this approach is theoretically worse both for performance (virtual method calls required) and size (two new classes created) in practice there is no significant difference once obfuscation has taken place. | |
| 1 May 2002 | Implemented a major enhancement to the heuristic pruning algorithm, based on method balance. Previously the method balance measurement was based solely on the overall number of half-leads of each method, and did not take into account the distribution of methods between the first and second half-leads. The only way to influence the latter distribution was with the "optimum balance" composing option. The pruning code to support "optimum balance" added a fair overhead to the composing loop, but was never used if the option was unchecked. By improving the balance measurement to take account of half-lead distribution, it became possible for the heuristic mechanism to use the balance-pruning code to tighten down the search as compositions with increasingly good balance scores are found. Note that as a result of this change composition scores and balance percentages are no longer directly comparable with earlier versions of Elf. | |
| 7 May 2002 | Made the weighting given to COM and method balance in the overall composition score configurable via the Music dialog. Also fixed a minor bug which prevented score weighting values of more than 9; up to 999 is now allowed. | |
| 3 Mar 2003 | One year to the day from the date of the initial web launch of Elenwë, and it is finally time to release Tinúviel! No major work has been carried out since May 2002, although at some point work started on the Elf White Paper. This is now finished, and the open source documentation integrated into the site. Because several people have had problems with VMs, in particular the Sun plug-in, an extra Java help page is written, and a VM check made on the Elf page to inform the user gracefully of any problems. Finally, the latest Microsiril libraries are downloaded, Indis is archived off, and Tinúviel is uploaded at last. | |
| Elf Tinúviel-B | 17 Apr 2003 | A feature request from Julian Parker: he wants to list more than just the "top ten" compositions, so I've made the number of comps to keep customisable in the Java code; this should be easy to expose from the Elf web page at a later date. Also discovered a minor bug affecting the initial minimum COM - it was being set too high in some cases, preventing for example some very short touches of half-lead spliced from being found. |
| Elf Undómiel-A | 19 Nov 2007 | Tinúviel has been running strong with zero maintenance for many years, however it is increasingly being left behind by changes in the browser market, with fewer and fewer people able to run it following Microsoft's abandonment of their JVM: I haven't been able to run it myself for two or three years. So, not before time, I revisit the DHTML to see what can be done to support modern browsers and Sun's JVM plugin. Rather embarrassingly, the fixes required turn out to be very straightforward, and Elf is up and running in Firefox in a couple of hours. |
| 21 Nov 2007 | It's clearly time for a new release, so I spend a couple more days fixing remaining browser compatibility issues and tarting up the look-and-feel for what will hopefully be a new decade of Elf operation. On November 21 2007 Undómiel-A is ready for upload. | |
| Elf Undómiel-B | 22 Nov 2007 | The Undómiel-A preview release has been a great success, with operation verified on IE, Mozilla and Netscape, and on various platforms including XP, Vista, Ubuntu Linux and Mac. One or two bugs surface as a result of beta-testing, and I make a few more small improvements to the site. A performance problem appears with the new "top N" feature - storing more compositions means the bottom composition is lower-scoring and hence music pruning less effective. I decide to leave the feature, but add a warning to the user if "N" is raised over 20. It's hard to explain that the slow-down occurs as an effect of reduced pruning, rather than any overhead in storing more compositions, but I try and describe this in the Elf Help pages. |
| 5 Dec 2007 | Peter King noticed that Elf will accept the place notation for Plain or Alliance methods (as long as they are symmetrical and the treble reaches the back at the half-lead). However, the composition length calculations go astray with these method types. I decide to implement this properly, so the UI now correctly calculates the composition length based on the method types chosen, displaying a range of lengths where appropriate. If different lengths are possible, a new pair of input controls appears, allowing the user to control minimum and maximum composition lengths. This is wired through to the composing loop, although the length test is only performed at the final, composition-checking stage - a future improvement could be to make use of it for search pruning. Finally, Plain and Alliance libraries are added, and all the libraries updated from the latest Microsiril download. | |
| 6 Dec 2007 | Fred Bone notices that the "top N" list does not display properly in Safari. I investigate and discover that Safari (Windows beta version) does not honour the "text/plain" MIME type set on the "top N" window. As a workaround, I output as text/html for Safari, with <pre>- formatted content. After sorting that, I decide it's time to release Undomiel-B, so upload to the server. |
| Elf is Copyright 2002 MBD. |