Digital-Scurf Ramblingsmumble mumble

Mon, 04 Dec 2006

Pretty pretty…

Is it bad that when I saw Zoy’s posting about etch-related stress all I could think was “oooh pretty reflections!” ?

[12:51] | [debian] | [semi-permalink]

Fri, 01 Dec 2006

Code with you, test with me…

Apologies to Genesis

Code with me,
My friend I hope you’ll always be
Right here by my side if ever I need you
Oh my friend

With your tests,
I feel so safe and so secure
Every task is such a perfect joy to code
Along with you

I will code with you, will you test for me,
All the code and tests that we know will be
I will code with you, will you test with me
Just to do your best with each passing test.

Gee, Dee, Bee
Oh I see so very clearly now
All my bugs are drifting by me so slowly now
Fading away

I can see
The code is bad but you are here
Close at hand, oh I’m better for the fix you give
And while I live

I will code with you, will you test for me,
All the code and tests that we know will be
I will code with you, will you test with me
Just to do your best with each passing test.

I will code with you, will you test for me,
All the code and tests that we know will be
I will code with you, will you test with me
Just to do your best with each passing test.

[00:00] | [words/filk] | [semi-permalink]

Mon, 27 Nov 2006

Sometimes amateurish websites just put you off entirely…

I was trying to purchase a TV for my partner’s mother’s mother who is chair-bound and whose television has recently died. I visited the online presence of a well known UK retailer and attempted to order a television for her, only to get frustrated beyond measure in an incredibly short period of time.

Thus, since I was in a bad mood anyway due to unrelated things, I used their “Email customer support” link (yick, web form again) to let them know exactly how I felt about their so-far-below-par-as-to-be-in-australia online presence.


When using "your website":http://www.argos.co.uk/ to attempt to locate a television for my permanently disabled grandmother in law I was told that the item was not available for delivery and I would have to collect in-store.

Fair enough I thought and proceeded to the reserve item option.

Nothing at my local store, okay thought I, I’ll ask it which stores have stock

No such option presented itself to me.

I had to manually select one of a set of stores to try, said list being checkboxes rather than a radiobox group thereby requiring a javascript handler to tell me to select only one (I wonder what will happen if I turn javascript off?) and each time I tried a different store, the ones which I had tried already and discounted for not having stock re-appeared on the list of ones I could look in.

Now, normally I’d put this kind of amateurish user interface down to having been implemented by someone in their spare time, for free, with no consideration given to acceptance testing, and that the author had never been taught anything about correct user interface design nor deigned to learn it for themselves regardless. I am sure that this is not the impression you wish to give to your customers.

I will, as a result of this user-interface nightmare, be very unlikely to use Argos for any of my Christmas shopping this year and I will be encouraging all my friends and family to similarly reconsider their options as I cannot believe this has never been raised to your attention before and that it has persisted as an issue therefore is utterly beyond redemption.

[10:57] | [life] | [semi-permalink]

Fri, 24 Nov 2006

You just cannot make this stuff up…

Sometimes it’s easy to assume that everyone is at least vaguely sensible about source code they release on the world. Sometimes it’s easy to forget that out there are idiots who will attempt to fleece you for your money and in return supply you with utter dross.

Then sometimes you see something like this

Sigh
[00:43] | [tech] | [semi-permalink]
You can't make this stuff up…

The following is a suitably anonymised report about some source code which recently passed before me. You just can’t make this stuff up, some people really don’t know how to produce good code…


PROJECT Software Review

The following is the result of an extensive review of the source code for the PROJECT project supplied by CUSTOMER to REVIEWER. The delivered source code (codebase) was supplied as a single tar file, with some accompanying documentation as provided by the company subcontracted by CUSTOMER (the contractor) to implement the software requirements of the PROJECT project.

General observations about the delivered codebase

The codebase was supplied as an uncompressed POSIX tar archive rather than as a source code revisioning system store as would be expected of such a delivery. Therefore there is no way to track the history of the project, nor indeed any way to accurately suggest how much time was spent in developing the codebase.

Initial investigation suggested that the codebase should be unpacked in the directory ”/opt/PROJECT”. Imposing such a requirement on the customer is extremely unprofessional. However to require that the codebase be unpacked in a directory in the ”/opt” heirarchy, which is explicitly not a suitable location for source code as per the UNIX file system hierarchy standard, is utterly unacceptable.

Once unpacked, a preliminary audit of the codebase revealed several intermediate object files inside the source tree and also build system intermediates such as preconfigured makefiles. This indicates that the codebase was not cleaned (mechanically or manually) by the contractor prior to delivery.

The application appears to expect to be run as the super-user which is inadvisable within a UNIX environment. The build system itself expects to be run as the super-user as it implicitly overwrites configuration files belonging to the user called ‘root’. This is considered to be extremely poor practice and is strongly discouraged in relevant documentation regarding the building of software in a UNIX environment.

The supplied build script configures the system so that the machine will reset its database on every startup. This means that the PROJECT will not retain CRITICAL_DATA across reboots, power loss, or even restarts of the windowing environment.

The supplied internationalisation is a gesture rather than the pervasive presence which would be expected of such an effort. Indeed all the internationalisation appears to be is that which the “GNU autotools” provide by default as infrastructure for the developers to build around.

Given that almost every file in the codebase is marked executable, it is reasonable to assume that the codebase has passed through a Windows-based computer (or at minimum a poorly configured Linux system with Windows file systems) and this makes it very confusing when looking for scripts or tools during a code audit as everything is considered to be a program by a Linux system.

The codebase is a patchwork of different styles, indicating that the contractor employs several different programmers who do not adequately communicate with each other with respect to code structure and styling. This suggests that communication within the contractor with respect to design and requirements may also be poor.

The codebase appears to contain source code licensed under the “GNU General Public License” (GPL). The GPL is an open-source licence which does not permit direct linking or inclusion without all parts of the project being placed under the same licence. As a result, CUSTOMER would have to release the entire application under the “GNU General Public License” which requires that the authors supply the source code to anyone to whom they provide object code; or else risk a lawsuit from anyone who discovered such a discrepancy.

The fact that the contractor felt it acceptable to include source code encumbered by such a licence is not heartening; indeed it raises the question of the provenance of the rest of the code base as it is now not beyond reasonable doubt that, given the apparent patchwork nature of the codebase, the contractor may have included code wholesale from other projects they have been, or are, involved with.

General design structure and source code quality

It was extremely difficult to discern any form of overarching design from the codebase; raising concerns that there may have been insufficient time invested by the contractor in planning the software project.

Several files implemented the same “gross hack”, regarding the PROPERTY of the HARDWARE_ELEMENT, independently yet often in an identical manner. This single issue is indicative of a lack of understanding of the concept of correct code reuse within the project.

The codebase appears to implement exactly the use cases provided by CUSTOMER to the contractor. However this appears to have been done by layering hack upon hack until the application behaves as required, rather than (where appropriate) performing a fundamental refactor of the approach being taken with respect to a design.

The codebase required simple (but numerous) changes to syntax in order to be compiled. This suggests that the contractor has never compiled this codebase from scratch and thus is not regularly auditing its output.
Some of the coding styles in use within the codebase seem to call for mechanically extractable code comments which describe the interfaces and mechanisms within the software. This is a laudable practice which in this codebase has been thwarted by three major issues:
1.The code commentary is not pervasive.
2.The comments are often empty, misspelled or incomplete.
3.Several comments in a random selection checked were outdated, incorrect or erroneous.

A cursory inspection of a random selection of files uncovered an appalling lack of attention to spelling which has been propogated through the use of auto-complete features in editors and never spotted. This suggests that the contractor may not have performed sufficient internal code reviews during the development of the software.

The codebase has the feel of several independently constructed sections glued together by an integrator. This is a common practice within large software projects but relies on a very high degree of care and attention on the part of the integration lead. There is no evidence of the required level of competency in the delivered codebase.

The approach taken in developing the codebase has resulted in what is essentially little more than a set of cue cards with pictures on, backed by a small amount of inconsistent, and at times incorrect, logic. This shows a true lack of foresight in the design of the project; a lack of understanding that a piece of software which has a user interface is usually more than just a user interface; and a lack of sensitivity to the future requirements likely to come out of CUSTOMER.

The interface to the hardware, which is clearly one of the most important parts of this software project as the software is intended to drive a machine, appears to be scattered, incomplete and does not use the source code supplied by CUSTOMER to the contractor for this specific purpose. Otherwise it is so well hidden in the rest of the codebase that REVIEWER were unable to find it. Either way, this does not inspire confidence in the codebase.

While the presence of a database in the software’s architecture is commendable, the choice of SQLite was short-sighted and clearly did not take into account the resources available on the target system.

The supplied initial database, as found in the codebase, is a single binary lump. This means that were the codebase to be placed under a revision control system, it would be impossible to request the difference between versions, in the accepted manner, directly from the revision control system.

To have constructed this database from source during the build would have been trivial. That the contractor did not do this indicates that they exercised little or no change management during the production of the software.

The presence of the ‘Patch’ file containing the number of the PROPERTY is a direct example of how poor some of the source code design (and implementation) is.

The lack of care and attention used when selecting fonts for display, such that labels often spilled out of their display element (or in some cases directly overlapped neighbouring elements) indicates that the contractor’s developers did not understand how to correctly construct a user interface for today’s modern operating systems.

The combination of hand-drawn and software-produced user interface widgets within the same window indicates a lack of professionalism with respect to the look and feel of the application.

The build system for the software is incomplete and misuses the development tools it directly relies upon. It has hard-coded paths for its dependencies, instead of using the commonly available and accepted industry standard mechanisms of discovery, which results in a lack of portability to a build environment other than the contractor’s own.

Concerns regarding the supplied documentation.

The primary concern regarding the documentation is the clear lack of any substantive documents regarding the codebase itself. This would not be so much of an issue were it not for the inconsistent, appallingly badly written and in places incorrect, in-line code documentation.

The document entitled ‘Scope of the Release’ supplied by the contractor appears to simply be a list of use cases which the contractor had considered for the release. Several of them are marked as unavailable or incomplete for the release made for the TRADE_SHOW and many of them are marked as incomplete or unimplemented regardless. However, no summary was provided meaning that in order to discover the lack of useful content in this document, all forty-five pages needed to be read carefully.

Conclusion

In summary, the basic audit performed by REVIEWER has uncovered numerous points of concern within the codebase that any reasonable developer should have discovered.

That the codebase was delivered in this state is, simply put, incredible, worrying and disappointing. The quality of the codebase is such that in the opinion of REVIEWER, no professional contract developer would have delivered it as anything other than a throw-away proof of concept with an explicit note to the effect that the codebase itself contains no recoverable or re-usable source code.

It is the recommendation of REVIEWER that CUSTOMER discontinue the use of this codebase pending the acceptable resolution of all concerns raised in this document. It is also the opinion of REVIEWER that such a resolution would require a greater investment of time and money than starting a new implementation.

CUSTOMER may be able to recover some user-interface concepts and graphic elements from the codebase, however REVIEWER do not recommend the re-use of the source code or design itself.

[00:42] | [tech] | [semi-permalink]
The Kaldorei Spider Kabob…

Today sees the fourth pre-release of Aranha — “The Kaldorei Spider Kabob”.

Aranha is a FastCGI responder based on the Lua programming language and is under heavy development. The language has been extended and various other joyful changes have occurred since the previous release a month ago.

The HISTORY file details the major changes.

I encourage you to get a copy and have a good play. You can find a tarball to download here so the only excuse is not knowing how to configure your webserver to have a fastcgi responder. Also if you like Bazaar-NG and want to have a play with the history of aranha, you can get a devtree by following the instructions on the aranha software page linked above.

[00:13] | [aranha] | [semi-permalink]

Tue, 21 Nov 2006

Sometimes, patents can amuse…

Courtesy of Clive I was pointed at this patent which at first glance looks to be as obscure and impenetrable as one has grown to expect from a system which was meant to be for patently clear descriptions.

However, check out claim 9, as Clive said on IRC, for the patent attorney to include it in the first place is cunning; for the inventor to miss it is careless and embarassing for them; but for the attorney to leave it in when filing is just broken. However the clincher is that for the patent clerk to have passed this just indicates how little care is taken and how one can probably get just anything patented if it’s hidden in the midst of a load of legalese.

[10:41] | [life] | [semi-permalink]

Fri, 17 Nov 2006

It's amazing what you can do with photoshop…

Tonight I went and saw the new Bond film Casino Royale at the local cinema. It was bloody good and I recommend it to any Bond fan. They’ve recovered from Brosnan’s last travesty incredibly well.

And for those who understand and appreciate these things, the film has a Lulu.

[00:20] | [life] | [semi-permalink]

Mon, 13 Nov 2006

A free (beer and speech) ARM box for every developer…

As some of you know, and fewer of you care, I changed jobs to work at Simtec Electronics some time ago. I changed for the fun of hardware, and low level programming and other such work which I hadn’t seen much of in my career thus-far. But as we all know, the apple never falls far from the tree and it wasn’t long before I was back writing application software.

However this time it was for fun (rather than profit) and it was at least low-level in the sense that I started hacking on a system emulator for the Simtec BAST development board with a colleague of mine (and co-debian-developer) – Vincent Sanders – in qemu.

From this was born the idea that we could at last provide a free ARM box to each and every Debian developer. We have been very very busy beavering away for a little over 10 days and though our eyes are bleeding from reading hardware datasheets with a view to implementing the hardware rather than the software we have cut a release.

Thus it is with great pleasure that I invite you all to come take a look at the QEMU Simtec BAST Project and have a go with version 0.8.2+stcb1 of the code.

Perhaps you would rather simply buy a real one since unlike the ARM Versatile or Integrator development boards, the BAST isn’t actually that expensive.

[00:07] | [tech] | [semi-permalink]

Wed, 01 Nov 2006

If software bugs had a personality…

If software bugs/issues had free-will and a personality then what would they sing?

(With apologies, although I’m not certain she deserves them, to CĂ©line Dion)

To vex you more.

Paste me, back into the func I break
Leave me, like you did before
Have late nights once again
And remember when
There was no bug that you hated more

Don’t go, you know you’ll find more bugs
They won’t irk you like I will
I’m the one who’ll stay
When they go away
And you know I’ll be lurking here still

I’ll be waiting for you
here inside the code
I’m the one who wants to vex you more
You will see I can give you
Migraines by the ton
Let me be the one to vex you more

See me as if you never knew
Hate me so you can’t let go
Just believe in me
I will make you see
All the problems you’d never have known

I’ll be waiting for you
here inside the code
I’m the one who wants to vex you more
You will see I can give you
Migraines by the ton
Let me be the one to vex you more

And some way, all the code that you had can be saved
Whatever it takes you’ll find a way

I’ll be waiting for you
here inside the code
I’m the one who wants to vex you more
You will see I can give you
Migraines by the ton
Let me be the one to vex you more

[00:00] | [words/filk] | [semi-permalink]

Sat, 28 Oct 2006

The Peruvian Nazca Spider…

Today sees the third pre-release of Aranha — “The Peruvian Nazca Spider”.

Aranha is a FastCGI responder based on the Lua programming language and is under heavy development. The language has been extended and various other joyful changes have occurred since the previous release in November of last year.

The HISTORY file details the major changes.

I encourage you to get a copy and have a good play. You can find a tarball to download here so the only excuse is not knowing how to configure your webserver to have a fastcgi responder. Also if you like Bazaar-NG and want to have a play with the history of aranha, you can get a devtree by following the instructions on the aranha software page linked above.

[22:14] | [aranha] | [semi-permalink]

Sun, 15 Oct 2006

Stop press…

I have a deviant kettle. It boils even when watched.

That is all.

[11:47] | [life] | [semi-permalink]

Fri, 15 Sep 2006

Computer lamp of nursing eyesight…
  • The outlook is novelty and exquisite.
  • The emitting light is soft, without coruscate.
    and it is good to protect your eyesight.
  • Adjustable the orientation freely, no noise, low power consumption.
  • May make up the light for you work in the less light.

Sometimes you just can’t make this stuff up.

It’s amazing what you find on the box when you buy the cheapest four port USB hub you can and it turns out to have a daft light on the top.

[12:32] | [life] | [semi-permalink]

Tue, 05 Sep 2006

Father forgive me, for I have sinned…

…on the fourth and fifth days of this month I did perpetrate the true evil of a macro system by token filter in Lua 5.1. I offer this patch as evidence of my transgressions.

So deep was my sin that I did not even make it recursively expand macros, nor did I develop anything actually useful using the technology I did perpetrate. Then, to compound my sin did I present a talk to the assembled masses and they did rain down scorn upon my folly.

I shall go now, and sin no more…for a while
[21:35] | [tech] | [semi-permalink]

Fri, 01 Sep 2006

The Glorious Code song…

With apologies to Skunk Anansie

How can your face be so angry?
When all you’re doing is looking at code.
You chastise me for my bad software
It’s gonna last too long.

What to do now but refactor?
All those unit tests you tried to write.
This code will never be covered.
Gonna last too long.

You’re still a fuck up
You’re still a fuck up
You’re still a fuck up, with bugs.

You know, Lucifer cried when you wrote that line.
And the heavens rained down on your sloppy code.
What’s left now that’s not tested,
Shouldn’t last too long.

Naaa, naaa, na na na na naaa naaa.

It feels, so, slow
And it looks, so, shit
But it’s all the same,
It is all the same,
What a crock!

And I believe this is checked nowhere.
Maybe there are tests,
But they’re rarely used.
Every bug’s hard to discover.
And they last.. Too.. Long….

You’re still a fuck up
You’re still a fuck up
You’re still a fuck up, with bugs.

[00:00] | [words/filk] | [semi-permalink]