jamesh is currently certified at Master level.

Name: James Henstridge
Member since: N/A
Last Login: 2008-03-29 00:44:08

FOAF RDF Share This

Homepage: http://www.jamesh.id.au/

Notes:

A GNOME hacker. Author of gnorpm, gnome-python, libglade, pygtk and others. Former maintainer of dia. Contributor to various gnome packages.

[New diary entry] [Planet Gnome] [Planet Ubuntu] [Technorati Profile]

Projects

Articles Posted by jamesh

Recent blog entries by jamesh

Syndication: RSS 2.0

29 Aug 2008 »

Storm 0.13

Yesterday, Thomas rolled the 0.13 release of Storm, which can be downloaded from Launchpad.  Storm is the object relational mapper for Python used by Launchpad and Landscape, so it is capable of supporting quite large scale applications.  It is seven months since the last release, so there is a lot of improvements.  Here are a few simple statistics:
0.12 0.13 Change
Tarball size (KB) 117 155 38
Mainline revisions 213 262 49
Revisions in ancestry 552 875 323

So it is a fairly significant update by any of these metrics.  Among the new features are:

  • Infrastructure for tracing the SQL statements issued by Storm.  Sample tracer implementations are provided to implement bounded statement run times and for logging statements (both features used for QA of Launchpad).
  • A validation framework.  The property constructors take a validator keyword argument, which should be a function taking arguments (object, attr_name, value) and return the value to set.  If the function raises an exception, it can prevent a value from being set.  By returning something different to its third argument it can transform values.
  • The find() and ResultSet API has been extended to make it possible to generate queries that use GROUP BY and HAVING.  The primary use case for result sets that contain an object plus some aggregates associated with that object.
  • Some core parts of Storm have been accelerated through a C extension.  This code is turned off by default, but can be enabled by defining the STORM_CEXTENSIONS environment variable to 1.  While it is disabled by default, it is pretty stable.  Barring any serious problems reported over the next release cycle, I’d expect it to be enabled by default for the next release.
  • The minimum dependencies of the storm.zope.zstorm module have been reduced to just the zope.interface and transaction modules.  This makes it easier to use the per-thread store management code and global transaction management outside of Zope apps (e.g. for integrating with Django).

It doesn’t include my Django integration code though, since that isn’t fully baked.  I’ll post some more about that later.

Syndicated 2008-08-29 08:21:20 from James Henstridge

14 Aug 2008 »

Double the Fist

For anyone that cares, the new series of Double the Fist is starting tonight at 9:30pm on ABC2 (and repeated tomorrow on ABC1 for those who don’t get ABC2).  It has been a long time coming (4 years since the previous series), so will hopefully be worth it.  I guess it will be available on the internet shortly after for those outside of Australia.

It is also good to see Roy and HG covering the Olympics again, even if it is only on the radio this time rather than television.  The shows are being posted on the website after airing.

Syndicated 2008-08-14 08:32:19 from James Henstridge

5 Aug 2008 »

In Orlando

I’ve just finished the first day of the Ubuntu online services sprint in Orlando, Florida.  I didn’t repeat last year’s trick of falling asleep at the airport, so the trip was only about 29 hours all up.

We’ve got a great team that I am looking forward to working with, so it’ll be interesting to see what we do over the next little while.

Syndicated 2008-08-05 01:42:14 from James Henstridge

1 Aug 2008 »

Using Storm with Django

I’ve been playing around with Django a bit for work recently, which has been interesting to see what choices they’ve made differently to Zope 3.  There were a few things that surprised me:

  • The ORM and database layer defaults to autocommit mode rather than using transactions.  This seems like an odd choice given that all the major free databases support transactions these days.  While autocommit might work fine when a web application is under light use, it is a recipe for problems at higher loads.  By using transactions that last for the duration of the request, the testing you do is more likely to help with the high load situations.
  • While there is a middleware class to enable request-duration transactions, it only covers the database connection.  There is no global transaction manager to coordinate multiple DB connections or other resources.
  • The ORM appears to only support a single connection for a request.  While this is the most common case and should be easy to code with, allowing an application to expand past this limit seems prudent.
  • The tutorial promotes schema generation from Python models, which I feel is the wrong choice for any application that is likely to evolve over time (i.e. pretty much every application).  I’ve written about this previously and believe that migration based schema management is a more workable solution.
  • It poorly reinvents thread local storage in a few places.  This isn’t too surprising for things that existed prior to Python 2.4, and probably isn’t a problem for its default mode of operation.

Other than these things I’ve noticed so far, it looks like a nice framework.

Integrating Storm

I’ve been doing a bit of work to make it easy to use Storm with Django.  I posted some initial details on the mailing list.  The initial code has been published on Launchpad but is not yet ready to merge. Some of the main details include:

  • A middleware class that integrates the Zope global transaction manager.  There doesn’t appear to be any equivalent functionality in Django, and this made it possible to reuse the existing integration code (an approach that has been taken to use Storm with Pylons).  It will also make it easier to take advantage of other future improvements (e.g. only committing stores that are used in a transaction, two phase commit).
  • Stores can be configured through the application’s Django settings file, and are managed as long lived per-thread connections.
  • A simple get_store(name) function is provided for accessing per-thread stores within view code.

What this doesn’t do yet is provide much integration with existing Django functionality (e.g. django.contrib.admin).  I plan to try and get some of these bits working in the near future.

Syndicated 2008-08-01 09:23:16 from James Henstridge

31 Jul 2008 »

Metrics for success of a DVCS

One thing that has been mentioned in the GNOME DVCS debate was that it is as easy to do “git diff” as it is to do “svn diff” so the learning curve issue is moot.  I’d have to disagree here.

Traditional Centralised Version Control

With traditional version control systems  (e.g. CVS and Subversion) as used by Free Software projects like GNOME, there are effectively two classes of users that I will refer to as “committers” and “patch contributors”:

Centralised VCS Users

Patch contributors are limited to read only access to the version control system.  They can check out a working copy to make changes, and then produce a patch with the “diff” command to submit to a bug tracker or send to a mailing list.  This is where new contributors start, so it is important that it be easy to get started in this mode.

Once a contributor is trusted enough, they may be given write access to the repository moving them to the committers group. They now have access to more functionality from the VCS, including the ability to checkpoint changes into focused commits, possibly on branches.  The contributor may still be required to go through patch review before committing, or may be given free reign to commit changes as they see fit.

Some problems with this arrangement include:

  • New developers are given a very limited set of tools to do their work.
  • If a developer goes to the trouble of learning the advanced features of the version control system, they are still limited to the read only subset if they decide to start contributing to another project.

Distributed Workflow

A DVCS allows anyone to commit to their own branches and provides the full feature set to all users.  This splits the “committers” class into two classes:

Distributed VCS Users

The social aspect of the “committers” group now becomes the group of people who can commit to the main line of the project – the core developers. Outside this group, we have people who make use of the same features of the VCS as the core developers but do not have write access to the main line: their changes must be reviewed and merged by a core developer.

I’ve left the “patch contributor” class in the above diagram because not all contributors will bother learning the details of the VCS.  For projects I’ve worked on that used a DVCS, I’ve still seen people send simple patches (either from the “xxx diff” command, or as diffs against a tarball release) and I don’t think that is likely to change.

Measuring Success

Making the lives of core developers better is often brought up as a reason to switch to a DVCS (e.g. through features like offline commits, local cache of history, etc).  I’d argue that making life easier for non core contributors is at least as important.  One way we can measure this is by looking at whether such contributors are actually using VCS features beyond what they could with a traditional centralised setup.

By looking at the relative numbers of contributors who submit regular patches and those that either publish branches or submit changesets we can get an idea of how much of the VCS they have used.

It’d be interesting to see the results of a study based on contributions to various projects that have already adopted DVCS.  Although I don’t have any reliable numbers, I can guess at two things that might affect the results:

  1. Familiarity for existing developers.  There is a lot of cross pollination in Free Software, so it isn’t uncommon for a new contributor to have worked on another project before hand.  Using a VCS with a familiar command set can help here (or using the same VCS).
  2. A gradual learning curve.  New contributors should be able to get going with a small command set, and easily learn more features as they need them.

I am sure that there are other things that would affect the results, but these are the ones that I think would have the most noticeable effects.

Syndicated 2008-07-31 09:40:32 from James Henstridge

266 older entries...

 

jamesh certified others as follows:

  • jamesh certified miguel as Master
  • jamesh certified DV as Journeyer
  • jamesh certified federico as Master
  • jamesh certified hp as Master
  • jamesh certified timg as Journeyer
  • jamesh certified vicious as Master
  • jamesh certified terral as Journeyer
  • jamesh certified raph as Master
  • jamesh certified itp as Journeyer
  • jamesh certified yakk as Master
  • jamesh certified mathieu as Journeyer
  • jamesh certified dcm as Master
  • jamesh certified mjs as Master
  • jamesh certified bernhard as Journeyer
  • jamesh certified MJ as Journeyer
  • jamesh certified listen as Journeyer
  • jamesh certified campd as Journeyer
  • jamesh certified advogato as Master
  • jamesh certified sopwith as Master
  • jamesh certified lupus as Journeyer
  • jamesh certified rakholh as Journeyer
  • jamesh certified asmodai as Journeyer
  • jamesh certified alex as Master
  • jamesh certified mbp as Journeyer
  • jamesh certified harold as Journeyer
  • jamesh certified Raphael as Journeyer
  • jamesh certified Radagast as Journeyer
  • jamesh certified LotR as Journeyer
  • jamesh certified goran as Journeyer
  • jamesh certified BeeWarlock as Apprentice
  • jamesh certified krylan as Apprentice
  • jamesh certified msw as Master
  • jamesh certified amk as Journeyer
  • jamesh certified lauris as Master
  • jamesh certified andersca as Master
  • jamesh certified thom as Apprentice
  • jamesh certified fdrake as Journeyer
  • jamesh certified Sarah as Apprentice
  • jamesh certified bratsche as Journeyer
  • jamesh certified jrb as Master
  • jamesh certified Telsa as Journeyer
  • jamesh certified gleblanc as Journeyer
  • jamesh certified timj as Master
  • jamesh certified martin as Master
  • jamesh certified zilch as Journeyer
  • jamesh certified jdub as Master
  • jamesh certified effbot as Master
  • jamesh certified MCArkan as Journeyer
  • jamesh certified gman as Journeyer
  • jamesh certified blizzard as Master
  • jamesh certified malcolm as Journeyer
  • jamesh certified trs80 as Apprentice
  • jamesh certified fxn as Journeyer
  • jamesh certified yosh as Master
  • jamesh certified tromey as Master
  • jamesh certified sri as Apprentice
  • jamesh certified macricht as Journeyer
  • jamesh certified RossBurton as Journeyer
  • jamesh certified fcrozat as Journeyer
  • jamesh certified kristian as Journeyer
  • jamesh certified Darin as Master
  • jamesh certified Ankh as Master
  • jamesh certified Hallski as Master
  • jamesh certified AndrewDSmart as Apprentice
  • jamesh certified hadess as Journeyer
  • jamesh certified jdahlin as Journeyer
  • jamesh certified arvind as Journeyer
  • jamesh certified kiko as Journeyer
  • jamesh certified mwh as Master
  • jamesh certified Jody as Master
  • jamesh certified louie as Master
  • jamesh certified larsrc as Journeyer
  • jamesh certified nlevitt as Journeyer
  • jamesh certified snorp as Journeyer
  • jamesh certified elanthis as Apprentice
  • jamesh certified ndw as Master
  • jamesh certified funrecords as Journeyer
  • jamesh certified mjg59 as Journeyer
  • jamesh certified mpesenti as Master
  • jamesh certified mrd as Journeyer
  • jamesh certified jmason as Master
  • jamesh certified wtogami as Master
  • jamesh certified wingo as Journeyer
  • jamesh certified msevior as Master
  • jamesh certified seb128 as Master
  • jamesh certified keybuk as Master
  • jamesh certified gicmo as Journeyer
  • jamesh certified robertc as Master
  • jamesh certified jblack as Journeyer
  • jamesh certified sivang as Apprentice
  • jamesh certified desrt as Master

Others have certified jamesh as follows:

  • ole certified jamesh as Master
  • raph certified jamesh as Journeyer
  • goran certified jamesh as Master
  • yosh certified jamesh as Journeyer
  • campd certified jamesh as Journeyer
  • LotR certified jamesh as Journeyer
  • bernhard certified jamesh as Journeyer
  • egad certified jamesh as Journeyer
  • andrei certified jamesh as Journeyer
  • Radagast certified jamesh as Journeyer
  • Raphael certified jamesh as Master
  • faassen certified jamesh as Master
  • bombadil certified jamesh as Journeyer
  • harold certified jamesh as Journeyer
  • mathieu certified jamesh as Master
  • booch certified jamesh as Master
  • mbp certified jamesh as Master
  • feldspar certified jamesh as Journeyer
  • timj certified jamesh as Master
  • rconover certified jamesh as Journeyer
  • dcm certified jamesh as Journeyer
  • listen certified jamesh as Master
  • alex certified jamesh as Master
  • mjs certified jamesh as Master
  • jochen certified jamesh as Master
  • duncan certified jamesh as Master
  • MJ certified jamesh as Master
  • zhp certified jamesh as Master
  • lupus certified jamesh as Journeyer
  • rakholh certified jamesh as Master
  • asmodai certified jamesh as Journeyer
  • lordsutch certified jamesh as Master
  • mtearle certified jamesh as Master
  • psj certified jamesh as Master
  • camber certified jamesh as Master
  • yakk certified jamesh as Master
  • tpot certified jamesh as Master
  • taral certified jamesh as Journeyer
  • djs certified jamesh as Master
  • nils certified jamesh as Master
  • ztf certified jamesh as Master
  • mlsm certified jamesh as Journeyer
  • bagfors certified jamesh as Master
  • nelsonrn certified jamesh as Master
  • lauris certified jamesh as Master
  • rodrigo certified jamesh as Master
  • jpick certified jamesh as Master
  • jae certified jamesh as Master
  • jsheets certified jamesh as Master
  • andersca certified jamesh as Master
  • ryuch certified jamesh as Master
  • jules certified jamesh as Master
  • djcb certified jamesh as Master
  • mwh certified jamesh as Master
  • tca certified jamesh as Journeyer
  • nixnut certified jamesh as Master
  • glenn certified jamesh as Master
  • timg certified jamesh as Master
  • lerdsuwa certified jamesh as Master
  • fdrake certified jamesh as Master
  • grem certified jamesh as Master
  • sh certified jamesh as Master
  • gbowland certified jamesh as Master
  • jdub certified jamesh as Master
  • dneighbors certified jamesh as Master
  • amk certified jamesh as Journeyer
  • menthos certified jamesh as Master
  • cuenca certified jamesh as Master
  • exa certified jamesh as Master
  • hub certified jamesh as Master
  • murrayc certified jamesh as Master
  • nzkoz certified jamesh as Master
  • gleblanc certified jamesh as Master
  • baueran certified jamesh as Master
  • jonkare certified jamesh as Master
  • johnsonm certified jamesh as Master
  • baruch certified jamesh as Master
  • cwinters certified jamesh as Master
  • bratsche certified jamesh as Master
  • zilch certified jamesh as Master
  • johnnyb certified jamesh as Master
  • MCArkan certified jamesh as Master
  • ricardo certified jamesh as Master
  • Senra certified jamesh as Master
  • jao certified jamesh as Master
  • fxn certified jamesh as Master
  • trs80 certified jamesh as Master
  • gman certified jamesh as Master
  • braden certified jamesh as Master
  • walters certified jamesh as Master
  • hadess certified jamesh as Master
  • rkrishnan certified jamesh as Master
  • async certified jamesh as Master
  • sand certified jamesh as Master
  • DarthEvangelusII certified jamesh as Master
  • arvind certified jamesh as Master
  • jdahlin certified jamesh as Master
  • cactus certified jamesh as Master
  • kiko certified jamesh as Master
  • Jody certified jamesh as Master
  • edd certified jamesh as Master
  • larsrc certified jamesh as Master
  • Hallski certified jamesh as Master
  • kristian certified jamesh as Master
  • fcrozat certified jamesh as Master
  • pasky certified jamesh as Master
  • nlevitt certified jamesh as Master
  • elanthis certified jamesh as Master
  • dolphy certified jamesh as Master
  • blm certified jamesh as Master
  • rhestilow certified jamesh as Master
  • zotz certified jamesh as Master
  • Mmarquee certified jamesh as Master
  • strider certified jamesh as Master
  • mrd certified jamesh as Master
  • mdupont certified jamesh as Master
  • mpesenti certified jamesh as Master
  • polak certified jamesh as Master
  • ebf certified jamesh as Master
  • monkeyiq certified jamesh as Master
  • gobry certified jamesh as Master
  • lathiat certified jamesh as Master
  • pycage certified jamesh as Master
  • jmason certified jamesh as Master
  • gheet certified jamesh as Master
  • memeyou certified jamesh as Master
  • wingo certified jamesh as Master
  • mathrick certified jamesh as Master
  • badger certified jamesh as Master
  • gicmo certified jamesh as Master
  • e8johan certified jamesh as Master
  • lucasr certified jamesh as Master
  • jarashi certified jamesh as Master
  • nikole certified jamesh as Master
  • freax certified jamesh as Journeyer
  • pvanhoof certified jamesh as Journeyer
  • jsgotangco certified jamesh as Master
  • jblack certified jamesh as Master
  • behdad certified jamesh as Master
  • mako certified jamesh as Master
  • Burgundavia certified jamesh as Master
  • cinamod certified jamesh as Master
  • gpoo certified jamesh as Master
  • ianclatworthy certified jamesh as Master
  • yosch certified jamesh as Master
  • desrt certified jamesh as Master

[ Certification disabled because you're not logged in. ]

New Advogato Features

FOAF updates: Trust rankings are now exported, making the data available to other users and websites. An external FOAF URI has been added, allowing users to link to an additional FOAF file.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!

X
Share this page