RSS feed

Linkedin Profile

Tags:
programming
seattle
things that bug me
wall art

Posts by month: 10/08 (2)
08/08 (1)
06/08 (2)
05/08 (1)
03/08 (3)
02/08 (1)
01/08 (2)
12/07 (2)
11/07 (1)
07/07 (1)
05/07 (2)
02/07 (1)
01/07 (1)
12/06 (1)
11/06 (1)
10/06 (1)
08/06 (1)
07/06 (1)
06/06 (2)
05/06 (1)
04/06 (2)
02/06 (1)
01/06 (2)
12/05 (3)
11/05 (2)
09/05 (5)
08/05 (5)
07/05 (7)
06/05 (3)
05/05 (6)
04/05 (8)
03/05 (7)
02/05 (7)
01/05 (6)
12/04 (2)
11/04 (3)
10/04 (5)
09/04 (3)
08/04 (5)
07/04 (5)
06/04 (4)
05/04 (4)
04/04 (9)
03/04 (4)
02/04 (3)
01/04 (5)
12/03 (1)
11/03 (14)
10/03 (8)


Longhorn + Whidbey are go
2003-11-27
I finally got around to installing Longhorn and Whidbey today. What's with that clock on the right?

Clock-related criticism aside, I'm keen to play around with it. I'm going to set aside 15 minutes tomorrow to write "Hello XAML World".

Fantasy day traders, start your engines!
2003-11-19
A couple of weeks ago I decided to put together a fantasy day trading app for my family.

This morning, I used it to buy a few hundred dollars of CBA stock. It lives!

It is mainly C# with a few hundred lines of GPCP, and uses Dominic's Yahoo screen scraping to get quotes. Fantasy profits, here I come.

Integrated debugging with VS.NET and GPCP
2003-11-18
I've been messing around with GPCP and .Net for a few weeks. Last night I discovered it was producing pdbs when I accidentally stepped into some CP source in VS.Net. Cool!

Comdex keynote
2003-11-18
I spend an hour at work today listening to the Gates keynote at Comdex while I read email.

It all looked pretty cool, expecially the "Stuff I've Seen" capability. I sometimes find myself picking through outlook and my disk for a particular PDF or email or prototype, trying to correlate stuff etc, so I think I could use that.

I was upset that they excluded the matrix Bill / Steve thing, though.

Scoring Points
2003-11-16
I chanced on a new book about Tesco in Borders. It has a big section on .com, with lots of straight bat from our new technology guy Nick Lansley.

My 2 cents: all this "we were right about warehouses, webvan etc" back-patting is a waste of time.

ONLY FLAKES LIVE HERE
2003-11-14
Just finished reading Eric Raymond's The Cathedral and the Bazaar. It is an interesting book, although it left me scratching my head in a few places.

The good points: nice intro to the open source world for outsiders, interesting commentary on revenue models for software (open and closed source), great points about the software development process (e.g. ship early, ship often, and hopefully deliver enough functionality to not piss people off too much).

The bad points: The open source movement are the only people to understand the N2 problem? Microsoft bashing, general smack-talking about the quality of open-source compared to closed-source software.

I'm underweight on Raymond, but I'm not asking for my money back.

Development meme of the day
2003-11-14
There is no such thing as negative testing.

People tend to either get this or fight it very hard. My opinion is that it is all behaviour, and it isn't useful to think as one set of behaviours as negative and another as positive.

In the XP world, this means documenting as much behaviour as you see fit through tests, and take the rest as unspecified.

Server video
2003-11-13
See video of our server / fireworks experiment.

Blowing up old servers in the parking lot
2003-11-11
In this part of England the natives make a habit of buying fireworks and setting them off for most of November. This culminates on 'bonfire night', when things get burned, fireworks exploded etc.

To celebrate one of our home shopping products being shut down (natural causes - it was really old), last week some of the tech team at Tesco.com blew a server to high hell by filling it with large fireworks and then setting them off.

It was truly spectacular, and extremely noisy. So noisy, in fact, that it attracted the attention of a security guard who came over to chase us off.

AOP and me
2003-11-11
I've been looking at AOP for a couple of months now, and I think there are a lot of good ideas in the AOP world. However, I'm convinced its utility is limited for the following reasons:

  1. Orthogonal dimensions are rare: Most example AOP systems deal with trivial issues such as tracing, or give simplistic treatments to large, complex issues like security.

    This is not realistic, because many cross-cutting concerns are tightly integrated with other code in their module (e.g. are not orthogonal) and are hence difficult to cleanly extract and encapsulate as aspects, or are difficult to consider without also considering other cross cutting concerns.

    Dimensions rarely compose cleanly on top of each other – marshalling and security are two dimensions of concern frequently treated as orthogonal aspects of some base system in examples. These dimension are in fact closely related, difficult and dangerous to consider in isolation.

  2. Cooperation with OO: While AOP is often proposed as a complement to OOP, little work has been carried out to understand the implications of AOP constructs like advice on the objects they are related to. In particular, the contracts of objects as expressed through pre-conditions, post-conditions and class invariants.

    One obvious solution to this problem is for the programmer implementing an aspect to ensure contracts are unaltered by new aspect functionality. This calls into question the usefulness of “open world” AOP-style quantification. What understanding can the aspect author have of a class (s)he has yet to examine?

    The need to understand the contracts of classes increases the coupling between the aspect and the underlying class, which diminishes the modularity benefits of AOP.

  3. COTS, Components and AOP: While AOP has been proposed as a mechanism to adapt components, few AOP systems support non-invasive change to components. When non-invasive change is supported, non-standard extension to VMs is a common approach.

    The implications of this for practical software development are significant: it is doubtful that component vendors could support components altered by aspects, and likewise, runtime vendors would be hard-pressed to support VMs extended for AOP. The investment to build an AOP-aware VM from the ground up seems unlikely, given the immaturity of the AOP model.

  4. Security, versioning and other runtime concerns: Many AOP systems use a source of bytecode level weaver that inlines advice code at relevant join points. This complicates the configuration of security and versioning.

    For example, the .NET platform supports a declarative code-identity security model that allows permissions to be assigned to a code identity. However, the loss of locality brought on by AOP means it is difficult to determine exactly what permissions some particular code needs. The ability for developers to declaratively refuse, assert and demand permissions further complicates the process of inserting new behaviour.

    The capability to sign code with a key in .NET is also complicated by AOP – even the slightest alteration to the bytecode of a module changes the identity of the module, which impacts the build and deployment of modules.

  5. Advanced platforms and languages address the same issues as AOP: New platforms and languages often raise the level of abstraction to allow greater programmer productivity. Advanced capabilities are often available outside of code: as configuration files, attributes, or stored somehow external to code.

    For example, the .NET platform provides:

    • Transactions: COM+, declarative transactions in .NET
    • Synchronisation: COM+, language-level synchronisation primitives in Java and C#
    • Marshalling: declarative marshalling instructions, and framework-level serialisation services

    The concerns that become tangled within code have been identified by platform and tool vendors. While not all cross-cutting concerns are easily handled by generic platform mechanisms, a great many are handled to some extent.

  6. Diminished locality: The ability of AOP to alter the behaviour of some oblivious code can decrease the ease of comprehension in some situations.

    Encapsulation mechanisms like classes, procedures and inheritance also reduce locality. However, each of these are referenced explicitly in the module they effect – via an inherits clause, references to types and method calls. AOP takes a different approach, making “base” systems oblivious to their aspects.

    This obliviousness is particularly problematic during the maintenance phase of software development. There is no AOP mechanism for flagging source code that has been aspected to ensure the impact of AOP is accounted for while a maintenance programmer attempts to understand a module. AOP could also be interpreted as directly opposing this kind of identification.

    While this might be indicative of a true separation of concerns, it requires tool support to make maintenance practical.


Feeling better about the semantic web
2003-11-11
In the past, I've felt like a yo-brain when people mentioned the semantic web. I had never taken the time to read about it, and had only the vaguest idea it was about meta-data.

Imagine my relief at reading Clay Shirky's article dismissing it all as a pile of junk. Can anyone confirm/deny?

AOP II
2003-11-11
My previous note on AOP does not mention all the nasty stuff in existing AOP implementations, and the abundance of unsubstantiated / off-base claims made for AOP: replaces inheritance, will glue components, the whole introduction thing, and as a provider of service-oriented infrastructure (!).

I'm restricting myself to criticising the more mainstream stuff.

Donald Trump: The Art of the Deal
2003-11-09
Michael Lewis wrote a sufficiently scathing review of this in "The Money Culture" that I had to read it.

It's all true. Trump really takes ego and hubris to new levels. Some highlights for me include:
  • The book begins with a week in the life of Trump, which is a heady mix of name-dropping, self-aggrandisement, and acts of charity.
  • The Cadillac Trump, a luxury vehicle that the manufacturer approached the great man about producing. He assented.
I have to credit him for knowing how to get buildings constructed on time, but Trump displays a phenomenal ability to never countenance chance as playing a role in his success. As a study in delusion, this is a great book - Trump's The Art of the Deal is a strong buy.

GPCP test drive
2003-11-03
AOP for GPCP is on the way, so I decided on the weekend to come to grips with GPCP in its current version. I want to put together a fantasy day-trading application so I can compete with my family, so I thought I would attack both problems at once and code it all in CP. Just to spice things up a little, I don't know Pascal (or Component Pascal).

On the whole it was pretty easy to get the hang of. I was able to knock out some working code quickly, and the interaction with other .NET assemblies was fairly seamless.

However, I did have a couple of problems:
  1. ValueType records - I started by coding several record types and associated procedures in GPCP. I then switched to C# to write some GUI code on top of these GPCP records. To my dismay, I discovered the records had been split into a Boxed_XXXX, containing all the methods, and a field with an instance of XXXX, containing all the fields. After messing around for a while I discovered that declaring the record EXTENSIBLE solved the problem.
  2. Cast in CP? - This is probably down to my own ignorance, but it proved frustrating. Most of the time, CP arrays must have a statically declared, constant size. This wasn't the behaviour I needed, so I decided to use System.Collections.ArrayList. Unfortunately, the get_Item method (and a lot of others I wanted) returns an object instance. How can I cast it to a strongly-typed pointer in CP? The "solution" I settled on was to create strongly-typed wrappers in C# that took the casting out of my CP code. This was all fine in theory...
  3. N2cps broken - To interact with my C# strongly-typed collection from CP I needed to create some sort of header file using N2cps. At least that is what I think. Anyway, N2cps fell in a heap at startup, with a message about an incorrect .NET version. I am running Everret, so who knows? I'll try it on my Whidbey machine some other time.
Back to weblog