"The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents." -Nathaniel Borenstein
Adieu Before Closing Curtains8/20/08
Quite a bit has happened in the weeks since the last entry. Yana and I decided to drop the history search project in favor of focusing on the spell checker. This has included finalizing its integration with the trunk and several changes including:
Though this is the last entry for gsoc '08 I've enjoyed my time with this development community and plan to continue with the project as able. The spell checker has yet to be committed and there's an on-going discussion about providing a better means of updating dictionaries. Once this and the keybindings patch have been resolved I'll finally start on the history search.
Last Hurrah for Keybindings?8/4/08
After twelve days of tweaking they keybindings service I've finished the suggested modifications which included:
Merging the keybindingchooser caused a chicken-and-egg issue with the Swing look & feel initialization that was resolved by merging both with the UI service. This isn't a perfect solution in that plugins can't access it as a normal service and it's bad for modularity. For now the service's handle is provided via the UIService. Perhaps we'll figure out a better solution later but for now this isn't a terribly big whoop.
'I thought it was done' you say? Bah, I wouldn't be a developer if there wasn't some feature creep! Contrary to convention, though, the inclusion of JOrtho should simplify the code rather than complicate due to the introduction of an interface abstraction for the spell checkers.
I just got JOrtho working in a standalone spell checker, which wasn't quite as simple as it sounds. In an overzealous effort to hide implementation details the API only provides functionality at the UI level. Unfortunately this limits our control and prevents it from working within the plugin. Hence the source needed some tweaking to provide access to the underlying dictionaries. Once this was done it provided a nice, basic interface similar to JMySpell (and was trivial to introduce as a replacement).
In my opinion it was a mistake on the part of JOrtho's developers to hide the basic spell checking API but I'm happy they did. Though FOSS advocates often tout customization as a major benefit of having the source code this was my first time to take advantage of it. Viva la libre code!
The major benefit of using JOrtho is that its dictionaries are generated via Wiktionary. In theory this takes advantage of the wisdom of crowds in contrast to the conventional design by committee, better reflecting language as both living and evolving. Unfortunately some of these benefits are lost in that the API doesn't include the code for generating the dictionaries. Hence this lacks recent additions and the spell checker's dependent on the developers providing periodic updates. Still, this seems like an interesting method of generating word lists and certainly worth including as an alternative spell checker. In other news:
Spell Checker Finished!7/11/08
Hazaa! The main features of the spell checker are now done, including on-demand retrieval of non-English dictionaries and a management dialog for custom word lists (ie, the words users add). The former has the various dictionary repositories defined in an xml file, which are cached with the user's preferences when requested. Currently this supports 54 locales, and an additional 35 are available but evidently incompatible with the spell checker. I'm guessing that for a dozen this is simply an issue with recognizing tarballs (which would be easy to fix). For the zip archives, though, I haven't a clue what's wrong. It's possible this is an issue with a formatting change being made with Open Office (the source of the dictionaries).
Subversion failed rather spetacularly, corrupting this project's repository and a bit of my faith in version control systems. The problem appears localized to the image and language resources and until it's fixed they can be downloaded here. The undo and alternative spell checker issues still remain and I'm planning to look into using JOrtho next.
Basic Spell Checker Integrated6/29/08
My svn repository now has a functional spell checker that corrects as you go. It took several changes to the gui service to accommodate the plugin, mostly changes to the Chat interface and additional listeners for aspects of the UI the plugin's interested in. Remaining issues include the following:
Early Spelling Component6/11/08
After a break to work on a model for my research project I'm back to coding, now working on the spell checker component. While the discussion on the dev list leaned toward using HTML for rich text formatting this is a very expensive solution, both in terms of rendering and stripping the tags to access the text. Instead I'm using the JTextPane (a subclass of the JEditorPane) which is designed to handle font attributes.
Checking a word's spelling is both a fairly sizable and time critical operation (users would be understandably upset if the spell checker noticed mistakes after a message was sent). To work on this I've written a demo class that exemplifies what we want to do except that its
The DocumentListener that watches for changes only checks words around the caret. In addition, in the common case of adding text to the end it holds off on checking the last word until the word ends or the caret moves away. This still has the following issues:
After a week of work I'm on the verge of finishing the keybinding chooser integration. It took quite a bit longer than I'd hoped due to my stubborn insistence on learning things the hard way rather than utilizing the pretty how-to documentation provided on the site. Cest la vi. The addition consists of two components:
Welcome to my first stab at a blog! As mentioned above I'll be making three contributions to the Sip Communicator this summer. The first is the integration of the KeybindingUtil project to provide a centralized listing of keybindings and give the user the ability to configure them. However, it's currently the middle of 'dead week' (the week before finals) so work will be rather slim as classes and research wraps up.
Next for a belated introduction. I'm Damian, a Masters student currently attending WSU and researching simulation development using FPS game engines. The vast majority of my development experience is with Java, most recently in writing utilities for high performance interlaced hexagonal boards (rotation, distance, collisions, display, etc) for my Noc Norade project. I've worked a fair bit with Swing, JOGL (OpenGL Java bindings), Python, and PHP.
A little while ago I started getting the itch to become involved with a large scale Open Source project and begin doing work that might have meaning to others (something I've never had in academia). IP communication stuck me as an especially interesting field since it included the mythical convergence of multiple modes of communication into general purpose devices (much like MythTV for media). About a year ago I looked into joining Gaim (it wasn't renamed to Pidgin yet) but all my background is in Java rather than C/C++, providing an extra barrier to the already intimidating prospect of joining a large project.
I was thrilled when I stumbled the SIP Communicator since it provides everything I was looking for in an introduction to Open Source community, namely a communication framework like Pidgin but with the convergence of multiple modes of communication in Java. I'm ecstatic about being selected and looking forward to starting!