Monday, July 09, 2007

Outstanding quote of the month

I wonder how long Mini-Microsoft has been saving up this gem of a quote:
The only thing I've seen the Xbox business accomplish, besides making a lot of money disappear, is make Sony dash themselves against the rocks with the PS3. Monkey-see, monkey-do even better. In the meantime, the Nintendo little piggy gleefully exclaims, "Wii! Wii! Wii!" all the way to the bank.
I don't have any consoles, so I'm well out of that war (and I don't have any hi-def video players, so I'm even better out of that format war), but it certainly made me smile.

Monday, July 02, 2007

A trip to Newcastle

Pasha Bulker Originally uploaded by DavidKeaveny
I'd been planning a trip up to Newcastle for the past few weeks, ever since I heard about this ship running aground during the bad weather we had in early June (finally something to put Newcastle on the world map! The locals must have been coining it from tourists). Well, this weekend I got the opportunity, as we all went up to visit the church in Newcastle. Rather selfishly, I'd been hoping that salvage attempts would continue to fail until we got there, so I was relieved when an attempt during the week failed when several of the tow ropes snapped, then attempts to reattach them could not be completed in time. Fortunately, the team was in no hurry to get the ship afloat again, with several good high tides still to come. From what I've seen in the news, they've now started to make some progress, so we got there in the nick of time. It was freezing cold, mainly from the wind chill, so I didn't take many photos, and even with the tripod, some were rather blurry. This was the best of the bunch.

Sunday, June 17, 2007

Après moi, la déluge


You'd think that with all that rain that has been falling on Sydney, some of it would hang around in reservoirs. Well, it seems that a new Warragamba has been established in our basement; it looks like there's a problem with the drainage at that end of the house, which is causing water to well up through the concrete floor.

Fortunately, not too much stuff was damaged - some duvets got wet in their storage cases (where the water got through the zips), and one or two containers which had had their bottoms smashed in during the move from England got flooded. Emily and I spent several hours bailing and mopping; within a few hours, it was filling up again, fortunately not at the rate where you have to worry about the TV room flooding as well.

The rain appears to have stopped now, and also stopped coming up through the floor; hopefully this'll give the room a chance to dry out. Then we can get someone in to make the floor more permanently dry. In the meantime, we've taken the opportunity to throw out a lot of suddenly-soggy boxes and bits of old carpet that we didn't want anyway.

Safari vs Firefox

Apple has now released a Windows version of the beta of version 3 of their Safari browser. In the first 24 hours of availability, it has been downloaded one million times, a feat roughly on par with Firefox. One question I've seen asked on such luminary sites as Slashdot is, "Will Safari steal market share from Firefox?". This is obviously a concern for the rabid anti-Microsoft crowd at Slashdot, but I really don't see it that way. One reason that I believe Firefox spread so quickly is because it was a browser that web developers could really use to enhance their productivity. Where I work, it seems most, if not all, developers use Firefox to develop the web pages, and then use IE to check that the site renders properly there too. These developers would then encourage friends and relatives to install Firefox on their PCs at home, not so much because that they could then be good developers too, but because Firefox blew IE6 out of the water on almost all counts. In the absence of a conventional marketing machine, Mozilla used word-of-mouth to "ignite the web". In my opinion, Safari is aimed at a different audience - people who have bought an iPod, and use it with their Windows PC. Apple already bundle in their atrocious QuickTime player in with iTunes, and adding a decent web browser to the bundle is a no-brainer for them. There's not too much denying that it performs better than IE when it comes to outright speed, and it appears to focus on simplicity (although many complain that it is missing too much (such as the use of the left thumb button on the mouse to navigate back a page, as IE and Firefox do. Of course, since Mac users barely get a right mouse button, it's no surprise there's no support for further buttons!)), but that is also a good thing if you don't do anything complex when browsing. What Apple are doing is playing Microsoft's monopoly game; if Microsoft can use a monopoly on the OS market to drive sales of the Office suite (or, more relevantly, to completely crush Netscape's dire Navigator 4 browser), then Apple can turn a monopoly on the MP3-player market into browser market share (by the way, see how I manage to avoid use of the most pointless and hideous word to be shoe-horned into the English language - "leveraged". Guys, the word is "used" - just because it has three times as many syllables, it doesn't make it three times as clever to use it). Even better, there is a good proportion of the market that only uses their Windows PC for music, email and web browsing. With iTunes and Safari, Apple now has a good chance of hooking those users, and converting them into Mac owners. And that's where the real money for Apple still is, selling expensive white boxes.

Friday, May 25, 2007

I don't usually go in for posting cutesy videos off of YouTube, but I couldn't resist this: Surf-boardin' rodents. 'Nuff said.

Monday, April 09, 2007

Australia, Australia, Australia, we love you. Amen!

Canberra from Mount Ainslie Originally uploaded by DavidKeaveny.
Ah yes, captivating Canberra. The capital city so good that practically none of the nation's politicians who work there actually live there. Also home to the roundabouts left over from when England had had enough of ripping out traffic lights (see the Swindon's Magic Roundabout for the perfect example). Having spent almost nine hours travelling (there-and-back, of course) for three hours visiting time back in February, we thought that maybe the Easter weekend would offer us the opportunity to take a closer look at this triumph of urban planning. So having taken our chances with the traditional Easter road carnage, and notched up a whole bunch more of hours in Emily's learner driver's logbook, we settled in for two days. Actually, when it came to sightseeing, we didn't see that many sights. Being the weekend of a major religious event, most places were shut. Still, we got a good view of the environs from the top of Mount Ainslie, and we were able to feel sorry for the staff manning the parliament building, who were at least able to sell me a copy of How To Photograph Australia. I look forward to the sequel, How To Photograph Australia And Blog About It Later.

Wednesday, March 28, 2007

CruiseControl.NET and Subversion Revision Labeller plug-in

Last year, I finally managed to get into automated builds at work. We write a lot of platform code for the other business units in our organisation, so any bugs/defects have quite a high visibility; what could be a better way of improving the transparency of our processes than having an easily accessible automated build system, which would not only compile and test our code, but create release/deployment packages, all before we had even arrived at the office? It didn't take too long to get CruiseControl.NET up and running, using a fairly typical open-source blend of Subversion, NAnt, NAntContrib, NUnit etc etc, whicb should all be familiar to anyone who has read Open Source .NET Development, which should really be required reading for all .NET programmers. Using NAntContrib's <version> task, it's easy enough to automatically set the version number in an assembly. What it didn't allow us to do was pass that information back up to CruiseControl for display in the web dashboard or the system tray application for more immediate feedback. So I decided to knock up a plug-in to do just that. I'd already played about with plug-ins for open-source applications, so it wasn't quite so much of a big step. So in October 2006, I posted to the ccnet-user group, announcing the creation of the plug-in, inspired by a blog entry by Jonathan Malek. I got a response from Richard Hensley, who was putting together a library of plug-ins, suggesting I might want to add my code to his library, but unfortunately I haven't had any response to my emails. So I thought I'd take matters into my own hands, and post directly to the CC.NET community site; you can imagine my surprise when I saw that someone else has, fairly recently, also uploaded a Subversion revision labeller! Fortunately, there are enough differences between the two to make it worth uploading; so I now have two contributions to the open-source community, both small and specific to my job, but hopefully useful enough for others to use. Now I just have to get the NAntContrib guys to actually include mine in the builds...

Friday, March 16, 2007

Truck vs. Parked Car

So Thursday was shaping up to be a day from Hell. At work, what should have been a simple web application deployment dragged itself out into an all-day affair, first with configuration issues at our end, then with web services that we communicate with and so on. I finally decided that I had enough around 6pm and headed for home, dreading a repeat of Wednesday's rail SNAFU.

Actually, the journey home turned out well enough; however, I wasn't expecting this when I got off the train. I guess one of the lorry drivers who visit the industrial park at the other end of the road was in a hurry and misjudged the size of the corner just behind me. Of course, they didn't leave a note or anything.

Oh well, just as well I wasn't planning on buying a plasma screen in the near future...

Wednesday, March 14, 2007

The Path of the Jedi

Jeff Attwood has been discussing the geek ethic of building your own PC, particularly in relation to Google's use of commodity components.
We aren't typical users. We're programmers. The x86 commodity PC is the essential, ultimate tool of our craft. It's the end product of 30 years of computer evolution. And it's still evolving today, with profound impact on the way we code. If you treat your PC like an appliance you plug into a wall, you've robbed yourself of a crucial lesson on the symbiotic relationship between software and hardware. The best way to truly understand the commodity PC is to gleefully dig in and build one yourself. Get your hands dirty and experience the economics of computer hardware first hand-- the same economics that have shaped the software industry since the very first line of code was stored in memory.
I'm definitely singing from the same hymn sheet. Every PC I've owned has been built from the ground up, from a Texas Instruments 486-clone CPU to an Intel Core 2 Duo; the day that I buy a desktop PC is the day that some kindly men fit me out for a white canvas jacket that does up at the back. (Laptops, of course are a different matter). Naturally, rolling your own does lead to other problems, particularly in the tricky realm of hardware compatability. I've built some pretty unstable PCs in the past, where the motherboard doesn't like a particular sound card or graphics card, and the typical DIY-er doesn't really have the luxury of experimenting too much, at least if they're paying for everything themselves. My current interest is in media centres, and I'm reaping the benefits of Intel's VIIV campaign, at least in the interaction between MCE2005 and the hardware (the less said about the special 'content' the better, because as is sadly typical, countries outside the US don't actually exist) P.S. In case you're wondering about the heading, it comes from one of the comments on Jeff's posting:
It's the whole Jedi build their own light saber bit.
While I might not claim Jedi to be my religion when the census forms come round, the man has a good point.

Monday, December 04, 2006

MCP #7

A mere three years after buying the first tutorial book, I finally sat the succintly-named Developing and Implementing Web Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET exam. Like a few too many of the MS exams, a lot of it seems to be aimed at stuff you're never likely to need - honestly, DataSets? So it was more a question of finding the time to learn stuff I'm never going to use than anything else. Anyway, since getting some more MCP certifications was part of the KPIs for my next performance review (which is only a month or so away), I thought I'd better pull my finger out. So an intensive session with Transcender over the weekend saw me back in the game, and after a stroll round the corner to the local testing centre and a couple of finger-chewing hours, I passed the exam with a score of 943 something-or-others. Out of what, I don't know? 1000? Microsoft aren't saying specifically, but given that the pass is 700, I'm pretty pleased. Now to do it all over again with the equally terse Developing XML Web Services and Server Components with Microsoft Visual C# .NET and the Microsoft .NET Framework. Perhaps the people who write these exams get paid by the word...

Friday, September 15, 2006

Messing About In Boats

Believe me, my young friend, there is NOTHING - absolute nothing - half so much worth doing as simply messing about in boats.

Kenneth Graham could not have penned a truer word. There is something special about boats, or to be more precise, sailing boats. As a practical means of getting from A to B, they're not too practical, but if you're someone who believes that the journey is as important as the destination, then sailing is for you.

Jules grabs some raysAnd so it proved for the Fairfax Digital Classifieds Services team. Having shipped a big software project some six weeks ahead of schedule, and under budget, we felt we were due a little bit of a letting down of hair before cracking on with the next big project. So with winter safely out of the way, the vote for sailing was pretty much unanimous. Seeing as our office building is only two minute's walk from the offices of Sydney By Sail, it couldn't be easier, and so here's some photographic evidence of people enjoying themselves, maybe helped a little by the cases of beer that found their way on board, maybe by the fact that it had been raining heavily for the past week and today was the first clear day, and maybe by the fact that the rest of our colleagues were still hard at it.

The conditions were pretty much spot on for us, with a light northerly wind, and the gentlest of swells coming in through the Heads. With only seven of us, we didn't need a big boat, so Charlotte, a Hunter 33, was more than sufficient - no jetski, but plenty of drinks holders... Anyhow, we motored out past the Harbour Bridge away from the traffic of ferries, shook the sails out and tacked our way up towards Manly. We then dropped the anchor for an hour while we finished lunch, then ran back down with the wind and back into harbour. Now we just need to finish the next project in record time too, catch the end of summer, and we can bring our bathers with us.

Tuesday, September 12, 2006

CruiseControl.NET - Using the Multi SourceControl block with filters

As some have been led to observe, the documentation that goes with CruiseControl.NET is, charitably speaking, a little sparse. This is particularly true of the Multi SourceControl Block, which, unsurprisingly, allows the use of multiple source control blocks in a project. In the project that I am currently working on, I have some five separate CVS projects to check, and to add to the fun, I wanted to add some path filters to the mix. So, after a little trial and error, and a quick peek at the source code, here's a code sample for using path filters with multiple source control providers:
<sourcecontrol type="multi">     <sourceControls>         <filtered>             <sourceControlProvider type="cvs">                 <executable>C:\Program Files\cvsnt\cvs.exe</executable>                 <workingDirectory>D:\Cvs\Services</workingDirectory>             </sourceControlProvider>             <exclusionFilters>                 <pathFilter>                     <pattern>**/build.number</pattern>                 </pathFilter>                 <pathFilter>                     <pattern>**/CommonAssemblyInfo.cs</pattern>                 </pathFilter>             </exclusionFilters>         </filtered>         <filtered>             <sourceControlProvider type="cvs">                 <executable>C:\Program Files\cvsnt\cvs.exe</executable>                 <workingDirectory>D:\Cvs\Console</workingDirectory>             </sourceControlProvider>             <exclusionFilters>                 <pathFilter>                     <pattern>**/build.number</pattern>                 </pathFilter>                 <pathFilter>                     <pattern>**/CommonAssemblyInfo.cs</pattern>                 </pathFilter>             </exclusionFilters>         </filtered>     </sourceControls> </sourcecontrol>

Monday, August 21, 2006

A new addition to the Keaveny household


Coco
Originally uploaded by DavidKeaveny.
Please welcome the 7th cat to grace our quilts since Emily and I moved in together! This lovely little lady is Coco (although I sometimes call her Keiko), a three year old black domestic long hair. We got her from the local vet, who rescued her after her previous owners were going to have her sent to the pound after they couldn't afford the medical bills when she broke her leg. We were very happy to have her!

Life has been strange these past nine months with only one cat around. We kinda missed constantly tripping over felines, especially when they were waiting right behind us when we were preparing food. To tell the truth, we think Jasmine rather missed the company too, so she now has a new friend.

Coco is quite shy at the moment while she settles in, but very friendly when she's got a little more confidence - I have never had a cat lick my hand so much, even when I've just been handling fish!

Monday, July 24, 2006

Beginning Open-Source Programming

Having spent the last few years making good use of some of the many excellent open-source tools for .NET, I thought that it was long past time that I contributed a little something back. I don't claim to be a guru programmer, but the situation arose at work where I needed a bit of functionality that present in NAnt or NAntContrib. I've been playing around with Microsoft's WiX Toolset for creating MSI deployment packages, and as part of the process, a GUID is required to identify the particular product. You can do this easily enough in NAnt with a bit of script, thusly:

<script language="C#">

<code><![CDATA[

public static void ScriptMain(Project project)

{

project.Properties["mynew.guid"] =

Guid.NewGuid().ToString().ToUpper();

}

]]>

<code>

<script>

but when, as in my case, you are building four separate MSI packages and therefore need four GUIDs, it becomes a bit of a chore. So, I downloaded the source for NAntContrib, and knocked together the tiniest of tasks to do the same.

[TaskName("guid")]

public class GuidTask : Task {

private string _prefix = "new";

/// <summary>

/// The generated GUID will be stored in a property prefix.guid.

/// The default is new.

/// </summary>

[TaskAttribute("prefix", Required=false)]

[StringValidator(AllowEmpty=true)]

public string Prefix {

get { return _prefix; }

set { _prefix = StringUtils.ConvertEmptyToNull(value); }

}

/// <summary>

/// Executes the task.

/// </summary>

protected override void ExecuteTask() {

string guid = Guid.NewGuid().ToString().ToUpper();

Project.Properties[Prefix + ".guid"] = guid;

Log(Level.Info, "Generated new GUID {0} for property '{1}.guid'.", guid, Prefix);

}

I did say that it was tiny! Actually, that's about half of the code; the rest is pretty much all XML code comments for the API documentation. The result of this all is that the NAnt script to do what my first sample does is now:

<guid prefix="mynew" />

Personally, I'm rather pleased with it the whole process. It's quite enlightening being able to trawl through the various codebases for some high-profile open-source .NET applications; and definitely rather pleasing to be able to contribute to the community which provides such great tools. I'm hoping that I'll see the code included in 0.85-rc5.