Operational Dynamics
Research and Development   |   Projects   |   Blogs   |   Source Code   |   Linux
January
Mon Tue Wed Thu Fri Sat Sun
       

hackergotchi
This section:

Blog postings by Operational Dynamics partners and staff

Use the links at top left for a consolidated feed of all the posts made on this site.

Please note the disclaimer at the bottom of this page.

RSS 2.0 Atom 0.3

Thu, 25 Jan 2007

A Japanese pub in Hong Kong

restaurant sign

I was introduced to a really wonderful Japanese restaurant in Hong Kong last week. The service is cheerful, the restaurant clean, and the cuisine has considerable breadth in its selection. They had a number of unique house specialities and took great pride in their offerings.

(“Unique” and “house speciality” regrettably don’t go together that often — in North America “house speciality” usually means “we changed the oil in the deep fryer this week, so we’re going to charge more”)

We had a group of 25 or so, and unlike the typical “stuck in some claustrophobic back room that has nothing to do with the place”, the proprietor was there at the door to greet us with a friendly “sit wherever you like” at any of the tables tucked away along the side of the restaurant. We had a cozy, warm, and delightful dinner. And sake. Lots and lots of sake.

Highly recommended.

Not far from Causeway Bay MTR station. Their website is in both English and Japanese and has a map.

AfC

Fri, 05 Jan 2007

First tarball in the java-gnome 4.0 series released!

After 9 months of design, engineering, and mad coding, I am pleased at long last to make the first public release of the new java-gnome bindings.

We are now at the state where we have not just a theory but a working architecture that has been validated through interaction online and at conferences with the community around the world. My firm, Operational Dynamics, has sponsored the work to this point, and we are now seeking revenue to carry out the engineering necessary to take the bindings from a prototype with coverage of 0.1% to the level where it will be a fully usable binding. If you think your firm would be interested in engaging us to this end, or to ensure a piece of GNOME that you need is present, then please contact Andrew Cowie, andrew@operationaldynamics.com.

If it isn’t obvious, there’s still quite a bit of fluidity, and so I recommend to our downstream that it’s not quite yet time to package up java-gnome 4.0 for your distro. I’ll be in touch with the individual package maintainers in the coming months. Likewise for developers, yes, it’s exciting, but no, it’s not really ready for writing full apps with (though one guy did write something to show the cricket scores!). So while it is not really prime time (indeed, me even blogging about it smacks a bit of preemption), the open source vibe has ever been to release early and often so that others can participate. If you want to have a voice in the shape of the Java bindings for GTK and GNOME, you’re welcome to get involved.

The rest of this blog post is the release note from the NEWS file which you can read online or in the sources, of course!


java-gnome 4.0.1 (05 Jan 2007)

It’s not really a prototype anymore! the design works, and so the code that is here is forming the foundation of the new Java bindings for GTK and GNOME.

While there are some significant pieces of engineering that are yet to be done, and of course a universe of coverage yet to write, we’re pleased to mark the milestone of the prototype having proved itself to be stable and the strong foundation that we need. In this release:

Project documentation

Import project documentation, initially consisting of the re-engineering emails written by Andrew Cowie to the java-gnome-hackers mailing list, and expanded to include top level README and HACKING files, and a style guide for contributors to follow. All documentation [re]formatted in Markdown syntax so as to be renderable to web pages. See doc/design/ and doc/style/.

Project website

Create an entirely new website for http://java-gnome.sourceforge.net/, introducing sections “About”, “Documentation”, “Download” and “Interact” to discuss the the project as a whole, to be a home for the documentation, to provide instructions on how to get java-gnome, and information about the mailing lists and IRC channel, respectively. Also include a page thanking the previous generations of maintainers for their hard work and noting that the 2.x bindings have been unmaintained for some time now and are formally deprecated.

The website is no longer a wiki but is entirely within the source code of java-gnome itself. See the web/public/ directory; improvements welcome.

Major engineering

Quite significantly, the infrastructure to get a Proxy or Constant instance for any arbitrary C side pointer or enum is complete, involving significant work to the Plumbing classes, along with the corresponding C side code, especially in GValue.c

This was a necessary building block in order to complete the generalized getProperty() mechanism that, while hidden from public view, is nevertheless a major aspect of the GObject tool chest and is usable by bindings hackers when necessary. The generalized instance mechanism was the last major engineering hurdle that needed to be achieved in order to prove the new bindings design.

New coverage

Label, Fixed, Box, VBox, HBox and corresponding [working] mockup translation and native code.

Compliments to Srichand Pendyala from Bangalore, India for being the first external hacker to have a patch accepted to mainline! He contributed methods to Label and initiated the implementation of the Fixed class. In so doing, he also helped work the bugs out of the bzr bundle submission process. Awesome.

Build improvements

java-gnome now builds on Ubuntu and OpenSolaris in addition to its home turf of Gentoo. Thanks to John Rice of Sun Microsystems who provided the guidance allowing us to port Equivalence to Solaris some months ago, and Laszlo Peter, also of Sun Ireland, for several fixes to allow configure to recognize a wider range of Solaris environments.

The tiny example program that we have been using to validate the code, Experiment is now compiled by the build system if you so request. Try make demo.

API documentation

Extensive attention has been paid to the JavaDoc for the few methods that are presented so as to clearly set the standard required. The canonical JavaDoc for the project is available at the website with a stable URL and can be linked to.

All source code [comments, ie JavaDoc] have been spell checked! Initial top level overview.html and package.html files have also been written to help round out the JavaDoc.

java-gnome 4.0.0 (26 Nov 2006)

Initial release of the java-gnome 4.0 prototype, corresponding to the first public demonstration of the new bindings done at foss.in/2006 at Bangalore, India.

The prototype is fully functional and is intended to prove the design and architecture we have arrived at as a result of the re-engineering process. It includes both real wrapper layer classes that are the seed from which our public API will grow, along with the infrastructure that the wrapper layer depends on.

Initial coverage

Wrapper layer presenting the public API to developers: Widget, Container, Bin, Button, Window, along with complete translation layer implementations.

At present the bindings mock up the code that will be generated with temporarily hand written substitutes (ie, those in italics above) for both translation (Java) and native (C) layers. These will do until we receive the funding to make the code generator a reality; we certainly don’t want to be writing much more translation layer Java and C code by hand. Yuk.

Signal API

The defining aspect of GUI programming is, of course, that it is event driven. In addition to the “forward” direction of making calls to the native library and having return values bubble back up, there is the “reverse” direction of connecting callback handlers to the various signals that different Widgets offer, and having those signal events result in those handlers being invoked.

java-gnome 4.0 has an entirely new and redesigned signal connection and callback API. This functionality was demonstrated, and coverage of Button.CLICKED and Window.DELETE is now present and functional! The APIs used by GNOME language bindings to achieve this are some of the most voodoo I have ever seen. But it’s hooked up, and it works. It’s like black magic :)

Build

java-gnome is configured and built using Andrew Cowie’s Equivalence build scripts. It builds on Gentoo and should build on a Debian or Fedora derived system as well. See README for further details.

At the moment, java-gnome is a single source package. That may or may not change.

The source code is available via bzr. Again, see README.


You can download java-gnome from ftp.gnome.org but at this stage you’re just as well off to get the code from mainline in our DVCS. I’m pleased to say it’s moving quickly. :)

AfC

Thu, 04 Jan 2007

Spell checking Java source code

Dammit, Jim, I’m an Engineer, not an English major!

API documentation is incredibly important, but unlike tutorials or other reference documents that can be written in conventional text editors or word processors with nice built in spell checkers, the public API of a Java project is conveyed through JavaDoc comments that are contained in source code right next to each class and method as they are declared. We necessarily find ourselves with tons of generated web pages covered in prose… and full of spelling mistakes.

So I’ve had it in mind for a while to run aspell over the java-gnome sources. Raving insanity, that’s for sure. Spell check source code? Are you mad?

Well, being suitable euphoric on New Year’s Day, I decided “what the hell, why not” and gave it a try. One thing that was obvious was that I was going to end up with a ridiculous number of unknown words that were going to need adding. Rather than filling my personal dictionary (the one in $HOME) with tons of project specific crud, I used aspell’s -p option to specify a new word list in the project’s top level directory. Easy enough with bzr — they’ve got a bzr root command that tells you the path of the project root. Nice.

Here’s the command line I used:

aspell -x -c -p `bzr root`/.aspell.en.pws -H Button.java

It worked pretty well. The tokens sure did add up in a hurry, though. Java language keywords? Ok, no problem. Class names? Sure, makes sense to add them — many had already turned up when spell-checking other documentation in the project. But uh oh: it wants to know about getLabel( and num and x and every other bit of source code. Yikes. Quite the pain to add all that stuff while working through the files just to get to the JavaDoc and normal comments in order to fix the spelling in the text there.

But worth it… we now have spell checked API documentation!

What would really be neat is to write a little module for aspell that adds a mode that understands to only spell check stuff between /* and */ characters. The -H flag above tells aspell to ignore HTML markup, and there are modes for LaTeX and others. So hopefully a “source code” mode would be feasible, and I could start again and have a slightly better signal-to-noise ratio :)

Happy New Year!

AfC


RSS 2.0 Atom 0.3 Category Specific Feeds. Use these links for an RSS or ATOM feed limited to this category and its descendants. Technorati Profile


Material on this site copyright © 2005-2008 Operational Dynamics Consulting Pty Ltd, unless otherwise noted. All rights reserved. Not for redistribution or attribution without permission in writing.

We make this service available to our staff in order to promote the discourse of ideas especially as relates to the development of Open Source worldwide. Blog entries on this site, however, are the musings of the authors as individuals and do not represent the views of Operational Dynamics. All times UTC.