Tuesday, March 28

Enterprisey

Brian McAllister describes the term "Enterprisey"

An architecture should be only as complex as it needs to be, containing as few objects as possble which communicate by the simplest channels that offer sufficient reliability.

Complex architectures increase the time to deliver the first version of an application that does anything meaningful and that people can use and comment on. They need to be used less often than most people think.

If you're writing an e-commerce site, get the first version working using simple technologies. If lots of people use it, there will be money available to add the necessary enterprisiness to it.

Monday, March 27

Passed Exam 70-320

I passed the Microsoft Certification Exam 70-320 (Developing XML Web Services and Server Components with Microsoft C# .NET) today with a score of 968.

This was about different ways of splitting an application into communicating components and getting the components to talk to one another. I'm not sure if this is the right focus. I would have thought a better exam would have been how to design components as more cohesive objects with minimal communication between them. Each time you move data between a component in your system you introduce a risk something will go wrong. The risk is magnified if components go out of process, further magnified if on separate servers and magnified again if servers are at separate locations. There is also a human risk, if someone has not understood exactly what a component does. This is increased if developers are at different locations and can't communicate easily.

See also: Passed Exam 70-300
Passed Exam 70-315

Friday, March 24

Intermittent Variable Reinforcement

You might send out regular email marketing campaigns to promote your web site.

Kathy Sierra reminded me of an experiment by Burrhus Skinner that showed that "behaviour that is reinforced intermittently is much more difficult to extinguish than behaviour that is reinforced continuously."

If you send these out once a week at the same time every week to achieve a desired behaviour (e.g. visiting your web site), you should change this so they go out at a different time every week. Your users won't forget about your web site if you stop sending the campaigns.

Perhaps someone could write an application that intercepts email that is automatically generated at a fixed time every week on its way out from a server and sends it at a random time up to a week later...

Tuesday, March 14

Puzzle - Answer

Last weeks puzzle was:

"You have four matches arranged in a square like this.



You have three more matches. Arrange these to form a cube (without bending or breaking any of them)."

Click here to see the answer

Friday, March 10

Technology vs Business vs Process

Joel Spolsky says he looks to recruit people who are "smart" and who "get things done".

Joel seems to focus on the technology, but I think people who are "smart" understand the technology and the business problem the technology will solve, and how to best combine the two.

People who "get things done" understand how deliver the solution. They might learn about techniques such as agile methodologies to support them, but the important thing is they actually deliver something.

These can be represented on the following Venn diagram:



Many people are great at one of these, sometimes two, but if you want to be able to deliver successful projects, you need to maximise the area of intersection of all three circles, and expand your smallest circle until it is the size of the others. If you as an individual prefer one circle to the others, make sure that others you work with can balance the sizes of the circles.

Thursday, March 9

About to be banned in China?

I was looking through who had visited my blog (using the Sitemeter service) and noticed the following:



Although there's nothing politically controversial on my blog, does the fact that the search was for "inculcating culture" (not something that most people search for) mean the Chinese authorities are considering banning it?

The fact that the search had a question mark before and after it was also interesting. Could someone who has a controversial site but who doesn't want it banned detect this pattern of searching and redirect to different content?

The offending post is "Toyota's Values vs Agile Methodologies"

Tuesday, March 7

Deploying a Managed COM Add-in using an Outlook Shim

I have been trying to get a managed code outlook add-in to work using an "Outlook Shim", to remove a warning message about a potential security risk. This allows the add-in to be trusted without trusting all .NET managed code add-ins.

I followed the instructions in "Using the COM Add-in Shim Solution to Deploy Managed COM Add-ins in Office XP". There were a couple of small issues that I’ve recorded here in case anyone else is trying this or I need to do this again.

The Managed Code add-in needs to have a strong name. I needed to make some configuration changes to generate this. Firstly, I added the "AssemblyKeyFileAttribute" to the AssemblyInfo.cs file, like this.

[assembly: AssemblyVersion("1.0.*"), AssemblyKeyFileAttribute("..\\..\\Project.snk")]

I then found that my project referenced Microsoft.Office.Core. This is not strongly named, and this stops the managed code add-in from building. To get around this, I downloaded the Primary Interop Assemblies from here
and replaced the references with these DLLs.

Apart from this, the instructions, although long and initially very daunting, seem to work. Does this need to be this complicated? There is a very strong temptation for people to instruct their users to ignore security risks and if they do so in your application they may think it's OK to do so at other times.

Monday, March 6

Puzzle

You have four matches arranged in a square like this.





You have three more matches. Arrange these to form a cube (without bending or breaking any of them).



The answer will be published next week....

Don't forget the fundamentals

Kathy Sierra writes that you should never forget the fundamentals of whatever you do. A good musician will always practice scales and arpeggios.

However, developments in hardware and software mean that you no longer have to worry about things like writing optimal functions for low level tasks such as calculating the lengths of strings. Things like memory management are handled by the operating system and framework.

Which fundamentals are still important to know, and which can be dismissed as no longer being relevant – I think the most important two are Big-O notation and network design?

Big O – notation – It's important to know how long does it take to perform an operation on a collection based on the size of the collection. If you know the basics of this, you can use appropriate collection types (such as lists or hash tables) and know when to look at reducing collection sizes.

Networking technologies – it's important to know how and when data travels across a network, and when delays and unreliability may be introduced. If you know the basics of this, you can plan for how to structure systems to cope with delays and unreliability.

Are there any other fundamentals that you think should never be forgotten?