Sunday, 22 July 2007

XML and ASN.1

In 2002 -- 5 years ago! -- I spent a year working with Steven Legg on establishing a decent mapping between ASN.1 (the standard for directory structures) and an appropriate encoding in XML. Since then I have gone onto other things, but Steven has continued to work away and last week this work reached IETF request for comment status:

        RFC 4910


Title: Robust XML Encoding Rules (RXER)
for Abstract Syntax Notation One (ASN.1)

Author: S. Legg, D. Prager

Status: Experimental

Date: July 2007


Congratulations, Steven!

Tuesday, 10 July 2007

Parsimony in Design

William Clinger writes in the introduction to the revisions to the Scheme programming language standards (my emphasis):
Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary. Scheme demonstrates that a very small number of rules for forming expressions, with no restrictions on how they are composed, suffice to form a practical and efficient programming language that is flexible enough to support most of the major programming paradigms in use today.
It would be great to be able to similarly say:
Applications should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary. Rationale demonstrates that a small number of rules for forming structures, with minimal restrictions on how they are employed, suffice to form a practical and efficient application that is flexible enough to support most of the major decision-making paradigms in use today.
Step 2: Make it so!

Monday, 2 July 2007

Taking stock

I have been working at Austhink now for a little under two years. I am not sure what my employee number is, but it is less than 10.

My job title says "Senior Software Developer", but Austhink is or was a start-up, and at a start-up everyone chips in where-ever they can. What have I actually been up to?

Project Management / Team Leadership
  • I have been the senior hands-on guy in an Agile Team
    • Estimating and clarifying use-cases / user stories
    • Mentoring other team members (and learning from them too), largely through pair-work and mostly daily meetings
    • Working with Andy Bulka -- our Technical Director -- to create and sustain an effective and productive atmosphere
  • I have acted as second-level support
Software Design
I have contributed to the detailed design Austhink's flagship product, Rationale, and associated licensing system. Examples of my touch include my on-going crusade against modes, and searching for simplifications, such as the use of an integrated page-preview instead of a separate print-preview window. And let us not forget the humourous messages that appear on start-up.

I have made many more suggestions and performed many more experiments than have made it into the final product, but I believe that the objective is creativity and net output, rather than high hit rate (but lower output).

Architecture
I have made several key contributions to the architecture of the software including:
  • Researched options and made technology recommendations. E.g.
    • Make: The development of a home-grown graph visualization layer (not using Windows Forms) rather than building on top of a third-party product.
    • Buy: The purchase of DotNetBar's Office 2007-style Ribbon Interface tool rather than using more traditional Windows menus, in early 2006
  • The use of a programming language syntax (Python) for our file-format -- instead of the more obvious choice of XML -- an idea borrowed from Lisp which has provided several dividends:
    • Our API became our file-format, rather than a separate interface
    • Identical format is used for copy / paste
    • Allowed an elegant solution (also mine) to the problem of forward-compatibility (i.e. opening up a file from a later version of the application in an older copy of the software leads to graceful degradation, including an error report)
  • Found a way to combine Windows drag-and-drop with our own system (almost, but not quite seamlessly)
  • Designed a functional-programming style animation sub-system that is being incrementally introduced into Rationale
  • The extension of the Command Pattern with nestable Begin and End "blocks" to solve the problem of placing compound expressions on the undo/redo-stack that effectively solved the problem of making necessarily sequential multi-step actions easily undo-able and re-doable in a simple fashion.. This was a considerable improvement on our previous "solutions" which were slowing development and increasing complexity.
  • The use of digital-signing as part of our licensing-system
Software Implementation
  • Have taught and coached the use of effective techniques such as Test-Driven Development, Design-by-Contract, and Refactoring to generate a fairly robust, efficient and featureful product in quick time.
  • Have written or co-written much of the algorithmic code myself, especially in the advanced aspects of the workspace area (drop-zones, overview window)
  • Have managed to stay out of some areas to allow junior colleagues some freedom to develop without "constant" interference
  • I have found and fixed or worked around several nasty bugs, including one doozy in the Microsoft's .NET framework
Intellectual Property
  • I have helped liaise and collaborated with our PhD student Peter Sbarski on his algorithmic work
  • Invented a means for drawing "organic edges" used in Analysis Mode
  • Invented a repulsion algorithm (in conjunction with Ben Loft)
  • Invented a way to relax the Picture Rail Principle (which Peter has since generalized)
  • Helped draft a patent application
Business Stuff
  • Suggested simplifications to business processes, especially to licensing. E.g.
    • Observed that we did not need to define a separate product from upgrading ReasonAble users, but could use the Coupon system instead
  • Entered the winning suggestion for the name of the monthly Rationale newsletter, Ratatouille
  • Monitored the web for relevant trends (i.e. read reddit and Y-Combinator news :-)
People Stuff
  • Assisted the Technical Director interview for permanent staff and contractors
  • Initiated the tradition of bi-weekly lunches in Lygon Street
  • Contributed to the Rationale mailing list
  • Supplied festive food (e.g. cheesecake) on culturally significant occasions
  • Hosted the 2006 Austhink X-mas party

So that is some of what I have been doing for the last two years. On the personal side I became a father for the second time, received my second-degree black belt in Jiu-Jitsu (and first-degree in Judo), continued to run my martial arts club (now in its third year), started two blogs, and begun to develop a very basic competence in spoken Hebrew.

Next stop is to plan a bit of what I would like to do in the next couple of years.

Goal #1: Completion of toilet training.