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!
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:
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 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:
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.
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
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
- 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
- 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
- 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 :-)
- 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.
Subscribe to:
Posts (Atom)