Thursday, 31 May 2007

PennyTel supports Caller ID (CLI)

PennyTel (who I use for calling mobile phones) have enabled outgoing CLI for both their timed and untimed services.

That means that when we call mobile numbers, they'll see our home phone number instead of 'Private'.

Now just to convince FreeCall to do the same.

Wednesday, 23 May 2007


I'm playing around with the TemplatedMailWebEventProvider with the ASP.NET <healthMonitoring> feature.

One problem I noticed is that some of the extra info that I like to see, like ServerVariables, is not available anymore.

Fortunately, WebRequestDetailedErrorEvent written by James Newton-King comes to the rescue.

Friday, 11 May 2007

New firmware for SPA-3000

LinkSys (who bought out Sipura) have released version 3.1.18 of the firmware for their SPA-3000 analogue telephone adapter.

The comments in reply to my post on Whirlpool seem to indicate that this improves quality and reduces echo. I've just updated my box, so it will be interested to see if any difference is noted.

SnoopSoft Dashboard and WebCalendar

I did something most unusual the other day - I purchased some software.

The unusual thing wasn't the purchasing (I do try and keep legitimate), but that I did it rather than getting work to pay for it. 

What I bought was the SnoopSoft Dashboard and WebCalendar bundle for my HP iPAQ rw6828 Pocket PC.

It turned out to be quite cheap (USD17.95 - only AUD23.13 for me), and I couldn't really claim it was for work purposes.

The main feature I'm interested in is the WebCalendar. This lets me display the agenda from my Outlook/Exchange calendar at work and also a number of Google Calendars as well.

I've recently created a private "family" calendar, and also created one for our basketball matches (that one's public).

So now I get a view of all the coming events for both work and home stuff. The nice thing is that this mirrors what I can do in Outlook 2007 by adding those same calendars as Internet Calendars.

The only problem I've found with the software to date is that it isn't able to retrieve the Google Calendars when my iPAQ is docked to my work computer. I think it's related to the fact that we use a proxy to access the Internet. Hopefully this can be resolved soon.

Australian Weather Radar Vista Gadget v1.1

I've published an updated version of my Australian Weather Radar Gadget.

I had a request from Simon to enable the 256km images as he lives just out of range of his closest radar's 128km image.

A small number of the Bureau's radars also support a 64km image (Adelaide's Buckland Park being one), so I also added that option while I was at it.

When you set the image height, it also now resizes the "centering" image on the settings page, so it should now correspond to the same size as is shown in the sidebar.

Ideally, I'd re-write the re-centering so that it would use a drag/drop method like Google Maps etc, but my initial trials weren't successful. Either I'm not coding it right, or drag/drop is disabled for sidebar gadgets.

Despite comments on the gadget page asking for weather details, I'm not planning to add them to this gadget at this stage - I figure it's better to concentrate on one thing and try and do that well.

Thursday, 10 May 2007

Comparing Refactor Pro, ASP.NET and VB.NET

Developer Express have released new versions (2.2.2) of their ASP.NET and VB.NET refactoring tools.

These are both free cut-down versions of their Pro product (USD99 per license).

I was curious as to what the overlap was between the three products, as they don't appear to have a nice comparison table on their website. So here's list of the included refactorings in each edition:


Refactor! Pro Refactor for ASP.NET Refactor for VB + Bonus
Add Block Delimiters
Add Parameter Add Parameter
Add Validator Add Validator
Boolean to Enum
Break Apart Parameters
Case to Conditional
Change Tag
Collapse Accessors
Combine Conditionals
Compress to Null Coalescing Operation
Compress to Ternary Expression
Conditional to Case
Convert to HEX
Convert to Named Color
Convert to RGB
Create Method Contract Create Method Contract
Create Method Stub
Create Multi-variable Declaration
Create Overload Create Overload Create Overload
Create Setter Method
Create With Statement Create With Statement
Decompose Parameter
Encapsulate Field Encapsulate Field Encapsulate Field
Expand Accessors
Expand Null Coalescing Operation
Expand Ternary Expression
Extract ContentPlaceHolder Extract ContentPlaceHolder
Extract ContentPlaceHolder (and create master page) Extract ContentPlaceHolder (create master page)
Extract Function (outside of class)
Extract Interface Extract Method Extract Interface
Extract Method Extract Property Extract Method
Extract Property Extract Style (Class) Extract Property
Extract Style (Class) Extract Style (id)
Extract Style (id) Extract to User Control
Extract to User Control Flatten Conditional
Flatten Conditional Flatten Conditional
ForEach to For
For to ForEach
Inline Format Item
Inline Macro
Inline Recent Assignment
Inline Result Inline Temp
Inline Temp Inline Temp
Inline With Statement Introduce Constant Inline With Statement
Introduce Constant Introduce Constant
Introduce ForEach Action
Introduce Format Item Introduce Local
Introduce Local Introduce Local (replace all) Introduce Local
Introduce Local (replace all) Introduce Local (replace all)
Introduce Result Variable
Introduce Setter Guard Clause
Line-up Arguments
Line-up Parameters
Lock to Try/Finally
Method to Property Move Declaration Near Reference Method to Property
Move Declaration Near Reference Move Initialization to Declaration Move Declaration Near Reference
Move Initialization to Declaration Move Initialization to Declaration
Move Method to Header
Move Method to Source File Move Style Attributes to CSS
Move Style Attributes to CSS Move to Code-behind
Move to Code-behind
Move Type to File
Property to Method Property to Method
Optimize Namespace References
Remove Assignments to Parameters Remove Assignments to Parameters
Remove Block Delimiters
Remove Empty Handler
Remove Parameter Remove Unused Parameter
Remove Private Setter
Remove Redundant Conditional
Remove Setter Guard Clause
Remove Tag
Remove Type Qualifier
Rename File to Match Type
Rename Style Rename
Rename Rename
Reorder Parameters Rename Local
Reorder Parameters Replace Temp with Query Reorder Parameters
Replace Temp with Query Replace Temp with Query
Replace with Alias
Replace with Constant
Replace with Local Reverse Conditional
Reverse Conditional Safe Rename Reverse Conditional
Safe Rename Simplify Expression Safe Rename
Simplify Expression Split Initialization from Declaration Simplify Expression
Split Initialization from Declaration Split Initialization from Declaration
Split Multi-variable Declaration Split Temporary Variable
Split Temporary Variable Split Temporary Variable
Split With Statement Surround with Update Panel
Surround with Update Panel
Use IsNullOrEmpty
Use StringBuilder
Use String.Compare
Use String.Format Use String.Format
Using to Try/Finally
Widen Scope Widen Scope

Wednesday, 9 May 2007

Do Not Call Register

I'm sure this was in the news, but somehow I missed it.

The Australian Do Not Call Register is now open for business.

"On your bike" Telemarketers!

Monday, 7 May 2007

Lean Software Engineering

"Lean Thinking" is a process management philosophy, and is often associated with Toyota Production System.

I first heard of this via my friend Jane, who is applying this in a healthcare setting.

It might sound a bit strange using a manufacturing philosophy (where the business is all about production lines and making widgets) to a hospital (which normally deals with lots of people with various health problems). However I've heard they've been applying the lean principles with some positive effects to things like waiting times for people in emergency and also improving how patients are moved through the hospital - the "patient journey".

And so it isn't just in healthcare that a manufacturing philosophy is being used - we now have Lean Software Engineering too. I'm not an expert on all the details, but it does seem to relate to a lot of the Agile practices that are becoming more popular now.

Thursday, 3 May 2007

Unit testing, Mock objects, Inversion of Control, Model View Presenter and Supervising Controllers

For a while now I've been trying to figure out a good way of using unit testing to validate more of my code with ASP.NET applications.

Most of our applications correspond to the n-tier model with the data-layer and business objects separated from the presentation layer.

I'm still trying to find a good solution, but I think that some of these new ideas might help once I get my head around all the concepts.

Mock objects seem like they can play a part, especially when you want to test something in isolation from the other layers (eg. testing the code that calls the data layer, without actually depending on the data layer to be all correct and available). Rhino Mocks is the mock object framework I'm trying out at the moment.

Inversion of Control is another concept that seems to help with this by removing direct dependencies between classes. Josh has some thoughts on this while using the Castle Project's Windsor Container

Finally, the Model-View-Presenter design pattern might be a way of hooking this all up together. Billy McCafferty outlines his ASP.NET architecture and also has published an artile on using MVP with ASP.NET. Phil Haack also illustrates using the Supervising Controller pattern (an update on the MVP pattern) with ASP.NET.

Then again, I could have it all mixed up, but I do think some of these techniques are going to be valuable tools - a pity that the learning curve is reasonably steep at the moment.