Older blog entries for robertc (starting at number 54)

Should Mock Objects be considered harmful? As an optimisation for test suites they are convenient, but they mean you are not testing against the something which can be verified to behave as the concrete interface is meant to, which can lead to Interface Skew.

29 Apr 2006 (updated 30 Apr 2006 at 23:41 UTC) »

On Friday night at slug I did a 15 minute segment for the Linux Australia round-up entitled 'Why we should Test First'. The slides from the talk are online. The audio from LA-Update is also available. The nacent flamefest at the end of the talk turned into a list thread too.

So, I now have cppunit support for subunit - the patch cppunit-subunit-1.10.2.patch adds a TestProgressListener subclass of SubunitTestProgressListener.

So subunit is now able to integrate into one seamless whole test suites from python, C, C++ and shell using the primary xUnit implementation for those languages. Woo!

I snuck in some more subunit hacking today...

Theres now a C library (libsubunit) with child bindings, a patch for 'check' to enable a subunit UI (use CK_SUBUNIT) in the runner. I'm partway through a view for gunit to do the same, but it looks like it requires some changes to the core to get clean access to the needed data - which is quite surprising given the close-to-xUnit style it claims.

Easter Friday - always a fun day.

Went and saw Ice Age 2 - mildly disappointed. Lovely animation, lots of laughs, but their continuity and consistency sucked.

Later on, I bound subunit to ShUnit with this patch. This means that when you decide to add a hacky little shell script to some larger project, you can integrate the tests into your unit test framework rather than having to have multiple separate test suites.... which means your IDE's red/green test status bar will show those test results. ROCKING.

I did a talk at the SLUG codefest last weekend the slids are here in Openoffice 2 format.

Yay for siproxd. Working multi-user sip is a beautiful thing.

Key notes:

You need to configure siproxd, allow siproxd to use some ports on the firewall, and configured your sip client.

after installing the package, edit /etc/siproxd.conf and set

if_inbound=INTERFACENAME

if_outbound=INTERFACENAME

hosts_allow_reg=your internal network/netmask

do not set hosts_allow_sip - I found it interacted strangely and got 408 'timeouts' - which is how siproxd shows 'access denied' to the client.

edit /etc/default/siproxd and set it to enabled.

do a sudo invoke-rc.d siproxd start

Now, in your iptables rules you need to allow the following ports for 'INBOUND' on your inside and outside interfaces:

5060 (sip)

7070-7079 (rtp - the voice and video data)

Activate those rules, and you are done on the infrastructure, now its just each client that you need to configure.

So fire up your sip client. It should have a sip proxy field - in there put 'sip:' + your gateway address/ip.

if you have STUN configured - disable it. The sip proxy will forward registration and all traffic for you, STUN will at best confuse the issue.

And bingo, you should have working sip.

Why oh why oh why are there adverts in movie theatres ? Surely we pay enough that we dont have to be inundated with advertising. Even the toilets have advertising. Now, at Greater Union they are advertising the ability to bu advertising space on staff clothing and soft drink cups.

Not to mention cable tv - what happened to 'paying for content'.... less adverts than free to air, but still more than a DVD.

BAH!

17 Feb 2006 (updated 18 Feb 2006 at 00:10 UTC) »

In a discussion about VCS's on #bzr, I proposed the following axis in which a VCS's underpinning can vary:

* core data for a commit: snapshot | changeset | 'semantic patch'

* commit identifiers: content hash | namespace + sequence | pseudo-random | human assigned

* file location mapping: Unique ids | history analysis | None

We can then categorise systems (I apologise in advance for any errors in classification, please feel free to correct me :):

CVS: snapshot | namespace+sequence | none

git: snapshot | hash | none

svn: snapshot |namespace + sequence | history-analysis

darcs: semantic patch | human assigned | history-analysis

Arch: changeset | namespace | unique-id

bzr = snapshot | pseudo-random | unique-id

monotone = snapshot | hash | history-analysis

etc.

One can also consider what a semantic patch | pseudo random | unique-id using system would be like :)

Update: This has spawned the following wiki page

conflating revisions... I think that this is unneeded, and in fact probably harmful.

Its not needed because (generally) if the amount of history is large enough to be of concern with todays systems, its either a very old project (i.e. coreutils with 20K revisions on its mainline (which is trivially handlable today)), or a very active project where the bulk of history is, well, recent. The cases where you have lots of old history and a slow rate of growth are the exact cases where our technology will outpace the projects accumlation of history.

Its harmful because it violates one of the basic things users expect from a VCS tool - the ability to get their code as it was.

45 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

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!