I'm done with the semester, and back on Asaph. Completed a bunch of work on 0.4.3 over the past few days, including more work on the APIs, and a workaround for the Mac OS X text metrics issue. I isolated the problem somewhat and sent a bug report to Apple (#3511887 in their bug database). On the model API side, I added a BinaryField format that will be useful for audio clips and other arbitrary data, plus several other more minor changes. The APIs are now effectively in a final candidate stage. I'm still pondering a few minor updates to the Plugin API, including support for detaching plugins. However, any additional changes between now and version 0.5 will probably be minor.
I think I'm going to release 0.4.3 as it is now (or, more precisely, as it will be in a few days after a little more testing) and put off the plugin stress test and other stuff to the next prerelease. So you can expect the release of version 0.4.3 in a few days. The current plan is to then release version 0.5 around the end of January.
One other thing I forgot to mention. I'm currently looking for help in three areas. These are, I think, fairly small projects so they shouldn't require too much commitment for the most part.
(1) Currently the Windows releases are rather primitive: I'm providing a .bat file that issues the appropriate command to launch the JVM with the provided jar file, but otherwise there isn't very good integration into the Windows environment. I recently got around to creating an application wrapper for Mac OS X that makes Asaph look like a real Mac application, but I can't do that on Windows, simply because I don't have a Windows machine or Windows development tools. So I'm looking for a volunteer to do an application wrapper and/or installer that will improve the experience of using Asaph on Windows.
(2) Asaph needs a logo and icon. I was going to do this myself at some point, but I'm not a graphic designer by trade, so I figured someone else could probably do a better job. So if you like doing icons, send me one, or two, or ten. I'll collect any submissions I get over a period of time, and after a while (I'm not yet sure when, but it will definitely be end of January at the earliest), I'll choose one to use. Any icons you submit must be provided both in 128x128 size (for Mac OS X), and in whatever size Windows uses (I'm not sure what that is... 32x32? 48x48?). Also, while you keep copyright ownership of any icons you submit, by submitting an icon you also agree to its use in Asaph under the GPL, as if you were contributing source code.
(3) Finally, the Asaph user interface will need to be localized (translated) into languages other than English. Translation is not an easy task, and can be a bit tedious, but it does not require any programming knowledge. You'd just need at text editor and a good grasp of both English and another language (and preferably some experience with other software programs in the other language so you're familiar with the conventions of how the various buttons and menus are usually labeled.) Contact me if you're interested in helping translate Asaph into your language. This won't be started until Asaph reaches beta, likely February or March of 2004.
Quite a bit of work has been done on 0.4.3 over the past week (when I should have been working on my history paper, but oh well...) Added the plugin directory, look-and-feel, and notation locale to the preferences window. A few other minor adjustments to the GUI. More substantially, there have been several more model API changes intended to further genericize the model, and there have been corresponding changes to the XML schema. So the file format will again change in 0.4.3, but again the new version will be able to open files as far back as 0.2. At some point, however, I'll want to remove all the legacy code from the parsers, so if you are an early-access user, please keep your existing databases up-to-date. I've also made several more improvements to the interfaces into the Virtuoso Utilities library (which affects the model and plugin APIs in a few cases). Finally, the build script now generates disk images (.dmg files) on Mac OS X.
I also posted the current JavaDocs. These reflect the current (unreleased, but available in CVS) interfaces for 0.4.3.
I'm going to take about two weeks off from Asaph at this point for final papers and exams, and get back to it in December, and I hope to release 0.4.3 before Christmas. Remaining on the to-do list for 0.4.3 are the following. First, there's a layout problem on Mac OS X where chords and words can be off by as much as several pixels, and I'm not yet sure why. It may end up being a bug in Apple's font metrics. Second, I'm still running into a few problems with parse error reporting, and I think the mechanism may need to be simplified. Third, I still need to do a plugin stress test to make sure all the classloading voodoo I'm doing to link APIs properly actually has a chance of working.
I've released Asaph 0.4.2 on SourceForge. This version corrects a few more bugs, including some layout issues, German notation, and some plugin issues. It also includes some fairly significant behind-the-scenes improvements, including a redesign and generalization of the notation mechanism, and filling gaps in the plugin interfaces. I've also added a specific Mac OS X build. Version 0.4.2 can be downloaded here.
Work is already starting on version 0.4.3. Planned are additional preferences, Javadoc cleanup and expansion, and some lingering bug fixes in the editor. I also hope to stress test the plugin system. (So far, I've verified that simple external plugins work, but I haven't yet tried complex dependencies.)
The notation mechanism redesign is now complete, and I have a German localization of the notation system working. I also added a Mac OS X application bundle target to the build script, so I will now be able to release a Mac OS X version that looks like a real Mac OS X application. These improvements, plus some more javadoc updates, will be present in the 0.4.2 release, which should come out within a week.
As Asaph moves from alpha into beta, I'm looking for help with testing. My development machine is a PowerBook G4 running Mac OS X 10.3.1, and that is the platform on which most of the testing is taking place. However, I expect most users will be running Windows, and a few more on Linux and other unix-like platforms, and testing on those platforms is still lacking (because my access limited to an occasional bumming off friends), so if you are having problems with Asaph, especially under Windows or Linux, please, please file bug reports on SourceForge.
I've been working with a user in Germany who reminded me that the German notation system is different from the American system. In Germany, the note "H" is used where Americans use B-natural, and "B" is used where Americans use B-flat. To deal with this, I'm redesigning and generalizing of the note and chord mechanism and parsers to handle localization issues better. This will result in some model and API changes.
I released version 0.4.1 on Sourceforge. It can be downloaded here. Version 0.4.1 is a minor update providing several key bug fixes and minor changes, including an important fix for Mac OS X users. It also provides better developer support, including somewhat expanded Javadoc, and an Ant script for building Asaph. From now on, Ant will be the preferred tool for development on Asaph.
I now have my new machine set up: a 15" Powerbook G4 (the 1.25GHz aluminum version). Work on 0.5 is going to proceed slowly over the next couple months, since I have to spend most of my time studying. I don't think there will be a whole lot of time-consuming work--just clean-up, bug fixing, documenting, and ensuring the model and APIs are sane.
I discovered that version 0.4 currently fails on Mac OS X with the updated version of Java 1.4.1. It throws an exception when you try to use the "Open database" menu command. The original release of Apple's java works, but the update fails; I suspect a bug introduced in the java update. I'll try to release an update to Asaph with a workaround in a few days.
Classes have started at Regent College, so my free time has dropped significantly. I'm also holding off on doing a lot of Asaph work until I can get a new machine, an updated Powerbook, which, rumor has it, may be introduced on the 16th. I think the mobility will enable me to split my time up more effectively.
I posted a draft of the API javadocs here. I'll be fleshing out the javadocs as work on version 0.5 poceeds.
Version 0.4 is now live! It can be downloaded here. 0.4 is a major milestone intended to be nearly feature complete as far as version 1.0 features are concerned. Highlights since 0.3 include a much more robust and efficient database model, a database search feature, preferences, localization support, and numerous smaller features and fixes to the user interface.
The next milestone is version 0.5, which is the lockdown point for the XML schemas and the APIs. I'll start publishing the current APIs in Javadoc form on this website shortly. From now until the 1.0 release, I will fix bugs and clean up GUI roughness, but otherwise, no more new features will be added unless they are very minor or very high priority.
I implemented dragging of chords in the editor, and fixed a rather bad model bug in which a few (albeit uncommon) constructs were not well-represented in XML, usually resulting in unopenable XML. The fix required a new XML tag to be added to the DTD, but it's a backwards compatible change that shouldn't affect existing databases. I'll spend a little more time testing, and expect to release 0.4 on Monday.
The search engine and gui are now working. The screenshots page shows a screenshot of the search gui in action. I still have a little bit of gui cleanup to do on search, and I'm just going to do a simple copy-paste style interface for song copying, and I'll release 0.4 shortly.
Apologies for the lack of updates over the past few weeks. I've been busy with seminary preparation and other summer activities. I rode the Seattle To Portland a week ago, and I'll be at Creation West this week.
I have gotten a little bit of work done. Repackaged the source tree from virtuoso.* to com.virtuosotechnologies.* to reflect my new domain name, and did some work on the search engine. I'm considering scrapping a 0.3.3 release and just going directly to 0.4 in order to compress the schedule. Either way, I probably won't have the next release ready until early to mid August.
I've been taking a couple of weeks off from working on Asaph to handle a few other matters that have required my attention. One of them: I'm headed back to school! Specifically, the two-year program at Regent College, a well-known seminary located in Vancouver, B.C. I'll be starting in September. What will this mean for Asaph? Well, obviously, starting in September, I'll be a full-time student who won't have as much time to work on the code as I've had this spring and summer. However, it's still my current pet project and I will continue to work on it. In addition, I hope to have version 1.0 released by then.
So I've been rather busy over the past two weeks, but I've gotten most of it done now, and I hope to resume work on the search gui Monday or Tuesday.
Implemented automatic smart quotes and related preferences. Currently designing the search gui.
Work on 0.3.3 is proceding quickly. I have the preferences window working and servicing settings for the main window. Also added a "Comment" field useful for subtitles. Next on the list is support for automatic "education" of quotes, and then the search gui.
I'm having some problems figuring out how to do the song copying gui. I wanted to use drag-and-drop, but I've had problems with bugs, strange behavior and limitations in the drag-and-drop mechanism in the past, and it doesn't look like they've been fully addressed yet. I may end up having to write a custom drag-and-drop system. Another alternative is to implement "copy/paste" for songs.
Version 0.3.2 is now released! You can download it here. This release should be at least as stable as 0.3 was, so it should be ready for early-access users who have been using 0.2 and 0.3. Remember that, as noted in the readme, the XML schema has changed in this release. Asaph will automatically convert old databases to the new format, but once this conversion has been done, earlier versions of Asaph will not open the database.
Work is beginning on the features scheduled for 0.3.3. These include the preferences system, song copying, and a first cut at the search gui. I'm hoping to have 0.3.3 ready by the end of the month.
I also posted a few more screenshots, this time running on Windows XP with the new Windows XP look-and-feel shipping with the Java 1.4.2 beta. See the screenshots page.
I've been testing builds of 0.3.2 over the past few days, looking for bugs in the model implementation and editor. It's now looking pretty stable, probably at least as stable as 0.3. I'll keep testing over the weekend, and there are one or two more features I wanted to sneak into 0.3.2, and I'll probably release it on Monday.
*sigh*... Made one more adjustment to the xml schema: establishing some namespaces. This was another somewhat "non-essential" modification for today's feature list, but I think it may be useful further down the road.
For now, I set up the parsers so they'll recognize either namespaced or non-namespaced xml files, but in the interest of cleanliness, I removed Asaph 0.3.1 from the downloads page (it doesn't look like anyone's downloaded it yet) so that there isn't a version of the 0.3 -> 0.4 auto-conversion code out there that doesn't generate the appropriate namespace declarations. When I release 0.3.2, its auto-conversion mechanism will create namespaced xml files.
Also improved the handling of character encodings, such that Asaph should be capable of handling files encoded in either UTF-8 or UTF-16, and 16-bit characters are properly escaped in UTF-8 encoded files. This should, among other things, finally allow Asaph to handle smart quotes properly.
One more feature I added is a Window menu that includes all the open internal frames in the MDI desktop. This should be especially useful for people who like to maximize all their internal frames.
Completed preliminary localization support (moved all locale-dependent user-visible strings to resource bundles). The default resource bundles are localized for U.S. English. There's still a little bit of localization support I haven't yet figured out how to do: specifically, I don't know if chord markings are translatable. Is an F# still an F# in French, or Russian, or Thai, or any other language that Asaph may be applicable to? Can anyone enlighten me? I may also need to modify the file i/o code at some point to support different character encodings; currently, the code assumes UTF-8 or similar 8-bit encodings.
Other than testing the localization code and further testing of the model, the change list for 0.3.2 is short. I have a few improvements to error reporting I need to add, and a couple of minor Gui improvements. I should be able to put out 0.3.2 in a week or so.
In other news, I now have limited access to a Windows XP machine for testing, thanks to a friend. I'll see if I can post some screen shots in the next few days. The beta of Java 1.4.2 has a Windows XP look-and-feel.
I'm back, and I'll be starting on the 0.3.2 features this weekend.
Version 0.3.1 is now released. The model seems to be reasonably stable, but I haven't yet put it through as much torture as the old model. So if you need to play it safe, first of all you probably shouldn't be using these prereleases at all, :) but if you are, you may want to stick with 0.3 for the time being. However, if you like to be on the "cutting edge", 0.3.1 is a little nicer, and has a few more minor features including URL databases, "safe" save, and a few more editor niceties.
I'm going to be traveling between Wednesday the 21st and Friday the 30th, so I don't expect to get much done during that time. And I may be a little slow answering email.
Now that I've reworked parts of the model interfaces and changed the XML schema, I decided that I might as well go the whole way and make the rest of the changes that I've been considering over the past few months. So I made another generalizing modification to the model interfaces, this time to fields. Special fields like the song title no longer have their own methods in the Song interface, but instead have a well-known field name; and I added the ability for arbitrary fields to have StringList values. Corresponding changes have been made to the XML schema. This is all to make adding more fields (such as CCLI number) in the future a cleaner process.
Also added the support for loading read-only databases from URLs.
I've been using builds with the new model implementation for the past few days to add to my personal song database (now at 76 songs and counting-- it should eventually reach around 400) and it seems to be pretty stable already. Barring problems, I should be able to release 0.3.1 tomorrow (Tuesday the 20th). My current travel plans involve leaving on Wednesday the 21st and arriving back in town Friday the 30th, so I don't anticipate getting much if anything done on Asaph during that time, and it may be difficult to reach me on email as well.
I also updated the roadmap with a tentative schedule for the 0.3.x interim releases.
Integration and initial testing of the standard model is done, and I've removed the DOM model from CVS. I've also completed the model modifications I had planned. The filtering interfaces and the strange method SongDatabase.getMainTitles() are removed and generalized into a SongOperation interface and mechanism. I also introduced the interface SongIDResultSet to represent sets of songs along with optional meta-information. Any operation performed on sets of songs now uses these new interfaces. These modifications will provide the extensibility framework for the SongDatabase interface to support searching and other features.
As you can probably tell, I'm still feeling my way around the design of the model APIs. I think it's converging; getMainTitles() was the last "really bad" method at the database level of the interfaces. However, the design will still be a little fluid until I lock the API down in version 0.5.
Feature-wise, 0.3.1 is nearly complete. I still want to add the gui for connecting to web-based databases, but that's basically it for features. However, I need to pound on it for a few days from a testing standpoint, because I've literally rewritten the entire model implementation from the ground up over the past two weeks. I'm still not sure whether I'll have it releaseable before I start traveling about midweek next week.
The standard model implementation is pretty much complete, but I'm still in the process of adapting the code that hooks into maingui (i.e. porting the old DOMModelPlugin class). The standard model implementation and its support code is designed to be much more robust against corruption than the DOM implementation was. All saving operations are "safe" in that old XML files are backed up before new ones are written, and there is better error checking and correction in parsing, especially for indexed databases. In addition, the standard model implementation will provide some additional features such as loading databases from URLs (websites), and better caching for the index.
I'm making several changes to the XML schema and the file name conventions in the process. They aren't major changes, and probably aren't strictly necessary, but they do clean things up quite a bit, especially with safe save. There is code in place that will automatically translate 0.2/0.3 format databases to the new format when the databases are opened. Once converted, the earlier versions (0.2 and 0.3) will not be able to open them. I'm not sure how long I'll leave the conversion code in, so once I get a new release out, it would probably be a good idea to convert existing databases sooner rather than later.
Speaking of new releases, the immediate plan is to release 0.3.1 as soon as the standard model implementation is stable. User-visible changes in 0.3.1 will be minimal, besides the database format conversion. However, a few new features will probably sneak in, including likely opening immutable databases from website URLs. Ideally, 0.3.1 will be done next week sometime, but my schedule is up in the air for the next couple of weeks. I have a wedding and a funeral to go to, both out of state, and the date for the latter hasn't been determined yet. So the end of May is more likely for 0.3.1. Once that release is done, the rest of the gui features for 0.4 should follow more quickly.
I've been working on the standard model implementation over the past few days. It's going fairly well. I hope to have it complete around the end of the week. The plan is to remove DOMModelPlugin and replace it with two plugins: StandardModelPlugin and XMLDatabasePlugin. The former will provide the raw model implementations and is designed to be reused in the future to support other database implementations such as the SQL model. The latter will provide the hooks into the file system and will interface with MainGui. I'm also making a few more changes to the model interfaces in an attempt to further genericize them.
Version 0.3 is out the door! You can download it here. The song editor is now pretty much complete. I spent the past few days pounding on it, fixing bugs and improving usability.
I posted a few more screenshots of version 0.3 in action: here, here and here. They're all taken on Mac OS X for now because... well, since my job went away, I'm limited to my home computer (which is a Mac) for development work for the time being.
The next major milestone will be version 0.4. The theme for this milestone is feature completeness and GUI usability. Key tasks include:
- Standard model refactor, replacing the DOM model with a more efficient implementation.
- Search mechanism and GUI for finding songs by author, keyword, contained text, and other criteria.
- Additional features in the main gui, such as copying songs from one database to another.
- Localization support.
- Preferences mechanism and gui.
- Any other features that seem important enough to include for the 1.0 release.
This is the homestretch as far as features are concerned, so if you have feedback that you think is important for the 1.0 release, please let me know ASAP. You should also refer to the roadmap page for a list of major features planned for 1.0 and for later versions.
The code base and internal interfaces are quite a bit more stable now than with previous releases, which should make it possible for me to release minor versions more often. So I'll probably release several 0.3.x versions on the way to 0.4 for people who want to test new features early. This will also be a mechanism for providing bug fixes prior to 0.4, since I don't yet have a good idea of how long 0.4 will take to complete.
The to-do list for 0.3 is down to six items, which I hope to have done today or early tomorrow. I'm going to leave another day for final testing, so barring unexpected emergencies, I'll release 0.3 on Thursday.
Fixed a bunch of bugs involving the clipboard, and implemented a number of additional editor features for keyboard navigation and editing. I've written down the list of features and fixes that need to go into 0.3. It's pretty short now, mostly various editor features, and I anticipate version 0.3 should be out midweek next week.
I've also started the to-do list for 0.4. The first task is what I hope will be the last major refactor: creating a "standard model" implementation with SAX-based XML parsers to replace the current DOM-based implementation. DOM's idiosyncrasies have caused me no end of frustration, and I've just about had enough. A simple implementation of the model interfaces based on Java objects (rather than a DOM tree) should be easier to maintain and more memory-efficient anyway. Luckily, everything else talks to the model through the model interfaces, so I should be able to replace the implementation without touching the rest of the code.
Clipboard support is now working in principle. There are a few minor things that need to be cleaned up (particularly involving setting the selection properly after paste), but it otherwise looks good. I'll be doing more tests on the clipboard support, as well as implementing more keystroke actions, over the next few days. Version 0.3 looks good to go for the end of April.
The model utils plugin is coded, including the engine for clipboard support. It's only minimally tested, and I haven't moved the usages over from util.model yet. I'll be working on the integration over the next few days, as well as enhancing the editor.
Finished porting the DOM model and standard gui plugins to the new architecture, and checked into CVS. I had to touch a lot of code to do the ports (in particular, maingui has been completely rearranged and much of it rewritten), so there may be a little bit of instability in CVS over the next week or so as I start working on the editor enhancements and continue to test the ported code.
The next task is to pull out util.model into a plugin, and add facilities to deal with transferables containing song data. This will be necessary for clipboard support as well as several other editor cleanups such as dealing with the enter key correctly.
The port to the new plugin architecture is not yet done but is going well. I'm turning MainGui into a plugin, and the interfaces that were in virtuoso.asaph.plugin are being cleaned up and turned into the APIs exported by MainGui. I'll also be moving some of the stuff that was in virtuoso.asaph.util into plugins so that they can be accessed more cleanly. Eventually, the hope is to eliminate the util package altogether so that plugins communicate only through the model interfaces and through their respective APIs.
I should have most of the port done in a few days, enough to have the tool working again so I can start on the remaining editor features.
Yow! Well, I have good news and bad news. The good news is, I'm going to have a lot more time to work on Asaph over the coming weeks. The bad news is the reason: the startup I work for folded and closed up shop yesterday, and I'm once again unemployed. Gotta love the software industry. Anyone looking to hire a talented Christian software engineer in the Seattle area? :-)
The development pace is quickening. I had an unexpected day off from work last week, and used it to get the rest of the new plugin architecture coded; currently, I'm working on porting the existing core plugins. I'm very excited about the new architecture-- it's looking like this will be the extensible, modular plugin mechanism I've been hoping to have from the start. It's cleaning up a lot of the interfaces in the code, and should make it much easier to develop plugins independently. In particular, it should make it easier to develop some of the remaining pieces of the editor.
Current plans are to try to get 0.3 done around the end of April. After that point, I think the architecture should be stable enough for me to do releases more often, so you may see some 0.3.x versions come out as I make progress on the 0.4 feature set. For more info on what to expect from the upcoming prereleases, see the roadmap.
Version 0.2 is now released! Yeah! You can download it here. The main new feature since the first demo version, 0.1, is an early version of the song editor, which is now usable but not quite feature complete. I played with it quite a bit over the weekend to test it, entering songs into my personal song database. It can still use some improvement, but it's already quite a bit faster and easier than editing XML directly. The next prerelease, version 0.3, will feature the final version of the editor, so please email me if you have suggestions for it.
Also over the weekend, I made some improvements to the Mac OS X integration, including integrating the main menus with the system-wide menu bar, and putting in workarounds for a couple of bugs in Apple's Java implementation. These shouldn't affect Asaph's operation on other platforms.
Work has already started on 0.3, which I hope to have done at the end of April. Some of the interfaces for the new plugin model are already checked in.
Version 0.2 is now code complete! Implemented insert chords, shift chords and comment/uncomment, and fixed a ton and a half of bugs, mostly involving undo (ugh!). Over the next few days, I'll be doing more testing of the editor, and I need to update the examples and readmes for 0.2. If all goes well, I expect to release it on Monday.
Got typing from the keyboard working for both text and chords. Also fixed a bunch of problems related to chord parsing. There are still two features that need to be implemented for 0.2: inserting chords and inserting comments. I think I can get those finished and a little bit of cleanup done within a week, and then version 0.2 can be released (at last!).
I overhauled the selection model, centralizing selection to make it more general and less error-prone. Several commands are implemented, including adding and removing blocks and lines, and changing indentation. Some of the infrastructure for handling typing text is now in place, but it's not fully working yet. I also made some model adjustments, including allowing "null" chords and chord markings without an attached note, and I added "getNth..." methods to the interfaces.
I posted a couple more editor screenshots here and here.
The editor is a lot more complex than I'd anticipated, and in the interest of getting something working out the door more quickly, I've decided to rearrange the alpha releases, splitting implementation of the editor between versions 0.2 and 0.3. The 0.2 editor will include a minimal set of features necessary for entering and editing songs, but will have some features missing (including clipboard support, as well as other text editor-like niceties such as being able to split a line in half by hitting enter.) I expect version 0.2 to be ready within a few weeks. The remaining features will be released several weeks later in a new version 0.3. I'm re-versioning the original 0.3 and 0.4 milestones to 0.4 and 0.5, respectively.
In other news, Apple recently released the first cut at their Java 1.4.1 implementation for Mac OS X. I was testing their prereleases, and I've also been evaluating the final release. It's close, but still buggy in places, and I can't recommend using it with Asaph quite yet.
I had to take some time off from Asaph to handle a couple of personal things, but I'm back now. Over the past week and a half or so, I got the selection model completed, and keyboard and mouse navigation done. The next step is to start implementing insert and delete commands for blocks and lines, and after that for text and chords. I should be able to work on those off and on for the next couple weeks.
I have some general ideas concerning how to handle the clipboard now. However, I am considering deferring clipboard support to 0.3, depending on how quickly I can get the rest of the editor functional.
I've also been working on a better plugin framework on the side, a design that will allow plugins to define their own APIs and provide services to other plugins. It should make the system more modular, and make it easier to develop additional capabilities for Asaph. If it works out, I'll probably port the existing code over to it for 0.3.
Yes, work continues slowly on the editor. I posted an early screenshot of the song body editor, showing a line selected. It's running the current Java prerelease for Mac OS X.
Yes, I know I was predicting I'd get 0.2 out around year's end. So I was wrong. But don't fear: progress (albeit slow) is being made. I had to heavily modify my line layout algorithm in order to support the needs of the editor, and the selection model turned out to be much more complex than I'd anticipated. And I still have no idea how to handle the clipboard. But I should have some early screenshots ready in a few days.
I'm through making predictions on dates, though. It'll be ready when it's ready.
I apologize for the lack of updates over the past couple weeks. It was the Deadline That Just Wouldn't Die at work... :-( I have some time off for the holiday, however, and intend to use it to get the editor coded at long last.
Checkins over the past few days included a couple bug fixes to indexed database loading and URI generation, as well as additional progress on the outer editor classes. I'll also be using my PowerMac G4 as the primary development machine for the next couple weeks, so you'll be treated to Aqua-fied screen shots for the most part.
On a completely random and unrelated note, if you haven't seen The Two Towers yet, go see it. It's quite a spectacle.
Nothing checked in over the past week, but I do now have a pretty good design for the editor GUI, and I've done some preliminary work on the outer classes. We should see the editor taking shape over the next few weeks. You'll have to bear with me a little, though. This is definitely the most sophisticated awt/swing text layout code I've ever attempted to write. Hopefully it will be worth it.
Checked in a few of the outer classes for the song body editor, and I'm designing how interaction with the editor will work. I'm going to be traveling for the (U.S.) Thanksgiving holiday this week, so I probably won't get to much coding on the editor until next week, but I hope to have the design well in hand by then.
I apologize if you tried to reach this page over the past few days and couldn't. It looks like I screwed up the permissions on some of my php files, and at the same time Sourceforge was relocating their hardware, and they disabled writes to the file system so I couldn't fix it until now.
At my workplace, we have a deadline this Friday so it looks I'll be kept busy until then. I'll resume work on the editor for Asaph next week. The WYSIWYG song editor is the last feature scheduled for the next alpha version, 0.2, so if all goes well, I should have the 0.2 release available sometime in December.
We have a critical deadline looming at my workplace, so I don't anticipate getting a lot done on Asaph for the next week or so.
My real job has gotten extremely busy lately, so work on the editor is going slowly. I have the variation and chord system editors more or less working. Here is a screenshot of that editor tab, running on Linux. I still need to squash a few bugs in the form-based editors, and then I'll start working on the real challenge: the WYSIWYG editor for the song body itself.
Implemented an info window for databases. Hooked up the song field editors (title, copyright, keywords, etc.) and currently working on the rest of the editor but not much is checked in yet.
I also had a chance to try Asaph on a developer preview release of Java 1.4.1 for Mac OS X. There are still a few caveats, but the Asaph already compiles and seems to run pretty well on the Java prerelease. Assuming Apple does ship the final version of its Java implementation reasonably soon, Mac OS X will be a supported platform for Asaph. Here is a screenshot, showing the Aqua look-and-feel.
Cleaned up the toplevel classes in standardgui and removed the temporary (XML text) editor in preparation for putting in the new editor. A few bits and pieces of the editor are implemented, but nothing is hooked up yet and the editor is still blank.
I've gotten some good feedback from several people over the past several weeks regarding the long-term direction for Asaph. (Thanks-- you know who you are!) Based on this, I made some adjustments to the model interfaces to support features I expect to add down the road. In particular, there is now a way to serialize references to chord systems, variations and song blocks, and there is also a URI scheme for identifying databases. The plugin interfaces support getting the URI for a database and opening databases by URI. Unfortunately, this made it necessary to modify the XML schema, so databases that worked in version 0.1 will no longer open. I made these changes now in order to minimize the need for API changes or especially file format changes later.
Did some miscellaneous cleanup of the plugin interfaces and javadoc.
Added a menu item for getting info on a database, and also mapped double-click to it. DOMModelPlugin doesn't yet do anything when it receives a get-info command, but that's coming soon.
I don't have much to report this week. Checked in a few classes towards the editor, but it will probably be another few weeks before I have anything really working.
Posted a development roadmap listing the major planned features for the next few prereleases.
I did some initial work on the search APIs in the model. This is the last major change to the model APIs scheduled before version 1.0.
The version 0.1 alpha-quality prerelease is now out! You can download it from sourceforge at http://sourceforge.net/projects/asaph. Work is beginning on the features scheduled for 0.2.
A bunch of updates over the past few days. I fixed up the licensese text, and uploaded some initial material towards the alpha release (READMEs, etc.) I still need to finish the sample databases for the release.
I also made some last minute model additions, including Variation (which allows multiple versions of a Song with alternate verses). And I decided that the Plugin interfaces needed to be consolidated.
Version 0.1 should be ready for posting over the next week or so.
Printing is now much smarter. It centers the song on the page, and detects if the song is too large and presents the user with a choice of scaling the song to fit, or flowing it onto multiple pages and/or columns. You can see a screenshot of this feature here.
In addition, several more bugs have been fixed, and I threaded a few more functions in the gui, including opening songs and printing.
The version 0.1 alpha release is starting to get close. I think pretty much all the major features I wanted in the alpha are now in. The next week or two are going to be dedicated to fixing bugs, figuring out how to do the releases, assembling the alpha release, and putting together a roadmap for development work through version 1.0.
Another really busy week at my real job... I got the multithreading gui working for the most part. There are still some holes, parts of the gui code that don't respond that well to being called from outside the AWT thread, but I'll fix them as they come up.
Also fixed a few bugs, and implemented an about box and a splash screen.
The major to-do item for the 0.1 release is to handle the case of the rendering exceeding the page size during print. I'm going to put off doing work on the real editor until after version 0.1.
Tested and fixed a number of bugs in the two DOM database implementations. They should be more or less stable now. Also did a little more work on the gui, including adding icons to database list elements, double-click to open the viewer, save-and-retrieve for layouts, and a few more layout options.
I realized I need a mechanism for spawning off jobs in separate threads, showing progress bars and synchronizing with the gui. That's the project for this next week...
Got snowed under with a bunch of work in my real job, so I didn't get a lot done on asaph this week. Fixed a few bugs, and did a first pass at implementing the multi-file database (but it's not very well tested yet.)
Plans for the next week include doing some more testing on the two database implementations, and trying to finish up the viewer gui. At some point I'll also see about putting together a list of things that need to be done before the first alpha version can be released.
I've been busily working on the viewer GUI. Implemented zoom, arbitrary key changes, more rendering options, font adjusting and spacing adjusting. Also added a pane displaying auxiliary song information such as alternate titles and keywords.
Several changes were made on the model side as well, mostly cleanup and minor new features in the model interface. Several bugs fixed.
I posted two more in-progress screenshots. Here is a view of the program as it stands now, running under RedHat 7.1. Here is a view of the program running under Windows 2000, using the native Windows look-and-feel.
The immediate to-do list includes:
- Additional work on the viewer GUI, including additional control over rendering and layout
- More control over printing, including determining what to do when the rendering is too large for the page (either scale, flow within the page, or flow onto another page.)
- A directory-based database implementation where each song is an individual XML file. Should be more scalable than the existing monolithic XML database.
The major change is that the song viewer now renders nicely antialiased and positioned text, and printing now works for the most part. There isn't much in layout options yet (in particular, if the song is too long, it will print off the bottom of the page.)
In other news, I'm continuing to make model adjustments. I also solved my preferences problem. Looks like Java's file locking doesn't like my NFS setup for some reason-- I haven't tracked it down in detail, but it may be something we can call a bug in the JRE.
I also posted the first in-progress screenshot. Click here for a view of the tool as it stands now. It's running under RedHat 7.1.
Made some initial checkins over the past couple of days. I have the tool working end-to-end, more or less (minus printing, and also minus a real editor.) However, there's still a lot of work needed before I'm comfortable calling it even alpha quality.
A first cut at the model interfaces is complete. There are still a few holes in the interfaces. The biggest is a language for searching for songs in the database. (I envision a language of sorts that implementations can parse and implement some types of queries in an optimized manner, while defaulting the remaining queries to a implementation-independent default mechanism.) I also anticipate some tweaking will be necessary later as I implement the editor.
The default model implementation as an XML DOM is pretty much complete. It stores an entire database as a single XML file, and loads the entire thing into memory, which was simple to code but won't scale very well for large databases. Thus, I'm also planning a variation that stores each song as a separate XML file and loads them only as needed. In the further future, I'll implement a JDBC model that can talk to SQL databases.
A first cut at the model plugin and gui plugin interfaces is complete. I implemented a model plugin for the XML/DOM model, and implemented a first pass at the standard gui plugin that will provide basic viewing and editing facilities.
The viewer currently renders as plain monospaced text, since I don't yet have the real renderer complete. It lets you choose the chord system, and transposes to the keys specified by the chord system as preferred keys (but not yet all keys). Printing is not yet implemented.
The editor is really bare-bones. You currently have to edit the song as XML in a text editor. Obviously, this will change in the release product, but this will probably be the most difficult part of the tool to design. I'm going to hold off on tackling it until I have a really good viewer and have figured out how to do rendering well.
A problem I'm running into is that java.util.preferences doesn't seem to be working properly on my RedHat 7.1 system, so I can't get preferences saved. Trying to flush preferences hangs the JVM; you need to kill -9 to get it to go away. I'm not yet sure why this is happening.
Last updated on April 04, 2004