Would Twitter’s user model help combat email spam?

As Twitter grows, so the number of potential spammers to my daily tweet stream increases. Twitter’s user model is the saving factor in all of this ‘noise’. It prevents me from being overwhelmed and could have important advantages over existing legacy internet services like email. In this blog post I’ll look at whether other internet services like email could learn a lesson from the way Twitter connects its users. Continue reading Would Twitter’s user model help combat email spam?

Debugging iPhone application unit tests

I’ve been learning a whole raft of new things lately as I get back into developing for the iPhone in earnest. There is a series of blog posts I’ve been planning on setting up Continuous Integration and Test Driven Development for iPhone applications. However, this post is more of a “where I’ve got to so far” with unit testing with iPhone development and a quick plea for information if you have anything to add.

Continue reading Debugging iPhone application unit tests

When did you last ask an Aardvark a question?

Not too long ago, companies chased the illusive ‘Web 2.0’ buzz-phrase which seemed to only consist of glossy icons and sticking ‘BETA’ somewhere on your new site design. These days it’s ‘social networks’ that is the ‘must-have’ feature for the success of any new online service.

Social networks have their uses in finding out what your friends and contacts are up to, but what if you wanted to unlock the power of these connections?

Aardvark seems to have hit the nail right on the head with their offering to the social network revolution. Their service, usable via their website, email, IM and now iPhone, aims to get you an answer to any question you care to pose to the collective brain of its connected users. Sure, you can post a question to Twitter and hope one of your followers (or someone searching at the time) can answer it. Chances are you’re just shouting into the darkness. Alternatively, you could just hit your favourite search engine and try any combination of keywords to try get a tailored answer.

Continue reading When did you last ask an Aardvark a question?

Plesk 9.2.1 Greylisting

In case, like me, you’re having trouble enabling the newly supported ‘Greylisting’ feature after upgrading Plesk to 9.2.1, I managed to find the solution.
Every time I tried to enable Greylisting I got
Failed to exec glmng cli. file does not exist or is not executable: / usr / local / psa / admin / bin / glmng
It seems that the Updater from the Control Panel fails to complete all the tasks necessary. Thankfully I found a blog post on huschi.net which explained how to complete upgrading manually.
and then proceed through the remaining screens using ‘Enter’ for the default Next Page action.
After that the option to enable Greylisting doesn’t produce the error.

Speedy MIME Image decoding using HTML

I’ve been working with our Esendex Email MMS service which forwards any inbound MMS picture messages to an email address. As the picture is MIME encoded I needed a quick way to check the image included.

Thanks to a post by Zmeeagain I found the very handy trick of pasting the Base64 encoded text into an HTML Image tag to quickly render the message in a web browser.

Simply create a new HTML file and paste your Base64 text replacing BASE64TEXT and ensure that the data: type reflects the MIME encoding type of the attached image (image/jpeg in this case):
<html><body><img src="data:image/jpeg;base64,BASE64TEXT"/></body></html>

Save the file as an HTML document and open in your favourite browser. Voila! Simples, hey?

Avoid Google keyword detection picking up Firefox ‘aq=’

For those of you who are monitoring or stripping keywords from referrer strings from Google you may be seeking out the query string parameter ‘q=’.
Beware that a simple string match on ‘q=’ could lead you to match on the additional Firefox parameter ‘aq=’. This appears in a Google referrer string if the search terms were originally searched for from the Firefox searchbar.
The aq=t parameter was added by Mozilla in 2006 at the request of Google.

Make sure that any string matching you’re doing is looking for a preceeding ampersand (&) or question mark (?) so that you match the ‘q=’ parameter correctly.

TechEd Day 2: Summary

Today was the first fully packed schedule. Lots of notes still to write up but here’s a quick overview of what happened. 

First off I went into the Building Rich Web Applications using Silverlight 2 session. Kathy introduced a 200 level session on what kinds of things Silverlight 2 can do over Silverlight. The answer basically is a heck of a lot more. Most importantly now having been built on top of the .NET Framework, it means that you can leverage the power of the framework with the rich presentation controls offered through Silverlight.

The use of a video streaming site as a demo kept enough attention going. I’d have preferred more time to examine the code she’d used to pull in XML data and then format for display but it was an overview session. Her ‘Hola World’ application was very effective when using a VideoBrush to quickly paint media assets into simple controls. 

Second session was on Team Foundation Server Work Item Use and Planning with Chris Menegay. If Chris gets paid on words per minute, he’ll be making a fair buck! He crammed a heck of a lot of useful information with his experience in the field into a standard Breakout session. Some of his best practice tips were very valuable and it made me realise that anyone using a Team Project template out of the box really needs to understand what they’re doing first. No one template will necessarily fit the business demands straight away: for example, the order in which states of tasks may progress from Active to Resolved to Closed may change between businesses. It’s made me want to go download a project template and go rooting around in the XML again to understand everything that’s going on under the bonnet. Chris’ other very useful suggestion was to make sure that any Process Template editing should go into its own Team Project in TFS to manage changeset history rather than just hacking XML. 

After lunch, I went to see Roy Osherove’s ‘Sense and Testability’ talk in the auditorium and had a brief chat with Sarah Blow of Geek Girl Dinner fame (the power of Twitter) and it was great to meet her and put a face to the name. Roy’s talk was excellent and it’s already sent me off researching new methods of unit testing. I was pleased to see some of the approaches we’ve been taking recently in using public properties to allow for mocking, rather than prescribing Constructor overloads (mandatory vs optional) were mentioned. 

The other interesting suggestion was to make every class a virtual class. Whilst seemingly going against the OO principle of encapsulation, it does allow for test methods to be over-ridden. For example, if you had a method which simply retrieved the current time, overloading this virtual method in a test class derived from the virtual base class would allow you to return any time you chose. 

Neil had been to a Scrum session and it bears a lot of similarities to how we’re working currently, anyway. 

Finally at the end of the day, we both went to ASP.NET MVC Practices which was a pretty deep dive into areas which are still pretty much up for debate as the toolset moves from Beta towards RTM. Maybe Hadi Harini had firmer information than is available from the MVC website.

A very useful tip was to write tests to test your Routing class and to remove the default catch-all route (controller/action/param) that is created to avoid patterns that you want to fail to match then serving back a page that maybe not suitable. 

More to follow once I’ve decrypted and rewritten my notes.

TechEd Day 1 : Keynote speech

As we were ushered in to an imposing auditorium It seemed the three DJs and VJ were entertaining a lonely, featured HP server rack on stage. 

Having a tiny special ‘Early Bird’ section down the front did seem a little pointless when I’d hazard a guess that well over 70% of delegates would’ve been signing up for the conference straight away.

The stage was very, well, orange. The black auditorium with its glossy black camouflage ceiling makes the whole place feel like we were about to get a paintball briefing rather than a Microsoft presentation. Loud percussive beats start about 10 minutes to go to fire up the spirits. It did start to work too.

Continue reading TechEd Day 1 : Keynote speech

TechEd : Day 1

Greetings from Barcelona. Today started in the afternoon with the keynote speech from Jason Zander which has introduced new functionality in Visual Studio 2010. A very honest bloke who was brave enough to demo us Visual Studio 2010 on Windows 7. Not just taking the safety off, but practically taking the tightrope away as well.

I’m going to write up my notes as I go, but the fact that Visual Studio 2010 has had its IDE re-written using Windows Presentation Foundation means that a lot of exciting new add-ons are coming. Also the ability to specify transforms for web.config files is a welcome addition after the frustration I’ve had with Web Deployment projects.

Well, its the Welcome Drinks party here at CCIB in Barcleona now so I’m off for more ‘networking’ (where networking = free beer, nibbles and XBox 360 stands 😉 ) It’s hard work being a developer on the cutting edge of Microsoft technology you know ?

If any of you are twittering and are here, send a message to JBJon and I’ll try and catch up with you.


Using MSBuild to deploy a website cross-domain

The task: to have an automated build process which would take the fresh built files and deploy them on a remote web server.

The challenge: the remote web server was not in the same domain as the machine with Team Build on it.

Initial research found plenty of helpful advice on how to do a copy using the <Copy> task. I tried various different methods of specifying the files I wanted to copy but all hit the same trouble. I tried adding on some community extensions to MSBuild to FTP Copy but didn’t get far with that as it seemed to want to transfer only one file at a time.

In the end, our Operations Team came up with the answer in the form of a Trust Relationship between the two domains in question. Now, my share was browsable without needing to enter remote domain credentials.

So the Target I wrote overwrites the behaviour of the ‘AfterDropBuild’ target and looks something like this:

<Target Name="AfterDropBuild">
<CreateItem Include="$(DropLocation)$(BuildNumber)Release_PublishedWebsitesPROJECT***.*">
<Output ItemName="ItemsToDeploy" TaskParameter="Include"/>
<Message Text="Found items: @(ItemsToDeploy,'%0d%0a')" Importance="high"/>
<Copy SourceFiles="@(ItemsToDeploy)" DestinationFiles="@(ItemsToDeploy->'\REMOTESERVERIPPROJECTDROPSHARE%(RecursiveDir)%(Filename)%(Extension)')" />