<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Rants and Raves</title>
        <link>http://blog.colinmackay.net/category/2.aspx</link>
        <description>If you want to listen to me rant on about things in the world then subscribe to this feed.</description>
        <language>en-GB</language>
        <copyright>Colin Angus Mackay</copyright>
        <managingEditor>colin.mackay@gmail.com</managingEditor>
        <generator>Subtext Version 1.9.0.27</generator>
        <item>
            <title>O2, please train your store employees</title>
            <link>http://blog.colinmackay.net/archive/2010/03/06/O2-please-train-your-store-employees.aspx</link>
            <description>&lt;p&gt;Last week I changed the tariff on my phone to better suit my usage. However, it turns out that by changing the tariff I also needed to change some settings on my phone. So, when the old tariff cut out, so did my 3G connectivity and I lost internet on my phone for a couple of days until a friend of a friend who happens to work for O2 explained what I needed to do to get it to work. Up until then, since I had made no modifications to my phone, I had be blaming O2’s network infrastructure.&lt;/p&gt;  &lt;p&gt;Here is a summary of the tweets I made about it:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;4/March:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Don't have a data network available. Most irritating @&lt;a href="http://twitter.com/o2"&gt;o2&lt;/a&gt;. Where's my 3G network?&lt;/li&gt;      &lt;li&gt;Still no data network. @&lt;a href="http://twitter.com/o2"&gt;o2&lt;/a&gt; what are you doing. All the way from Glasgow to Edinburgh an no data network.&lt;/li&gt;      &lt;li&gt;Made it all the way back to glasgow. Still no data network. @&lt;a href="http://twitter.com/o2"&gt;o2&lt;/a&gt; get your shit together!&lt;/li&gt;      &lt;li&gt;Woohoo! I have data back on my iPhone. But then I'm now at home connected to my wifi network. @&lt;a href="http://twitter.com/o2"&gt;o2&lt;/a&gt; thanks for nothing!&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;5/March:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Still no data network. @&lt;a href="http://twitter.com/o2"&gt;o2&lt;/a&gt; you &lt;a href="http://twitter.com/search?q=%23FAIL"&gt;#FAIL&lt;/a&gt; big time! I'm moving to orange when I get a chance.&lt;/li&gt;      &lt;li&gt;@&lt;a href="http://twitter.com/kstenson"&gt;kstenson&lt;/a&gt; No data network in Glasgow, in Edinburgh or points in between. Phone signal only. @&lt;a href="http://twitter.com/o2"&gt;o2&lt;/a&gt; &lt;a href="http://twitter.com/search?q=%23FAIL"&gt;#FAIL&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;Got a data network back! One of @&lt;a href="http://twitter.com/chriscanal"&gt;chriscanal&lt;/a&gt;'s friends works for @&lt;a href="http://twitter.com/o2"&gt;o2&lt;/a&gt; and fixed it for me&lt;/li&gt;      &lt;li&gt;Turns out because I changed my tariff my connections settings also changed. But no one told me that!&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;O2 could have saved themselves a lot of frustration from me if their store employee had been told that the tariff also required a change in phone settings.&lt;/p&gt;&lt;img src="http://blog.colinmackay.net/aggbug/11680.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Colin Angus Mackay</dc:creator>
            <guid>http://blog.colinmackay.net/archive/2010/03/06/O2-please-train-your-store-employees.aspx</guid>
            <pubDate>Sat, 06 Mar 2010 11:31:56 GMT</pubDate>
            <wfw:comment>http://blog.colinmackay.net/comments/11680.aspx</wfw:comment>
            <comments>http://blog.colinmackay.net/archive/2010/03/06/O2-please-train-your-store-employees.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.colinmackay.net/comments/commentRss/11680.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Follow up on what not to develop</title>
            <link>http://blog.colinmackay.net/archive/2009/08/22/Follow-up-on-what-not-to-develop.aspx</link>
            <description>&lt;p&gt;Back in &lt;a href="http://blog.colinmackay.net/archive/2009/05.aspx"&gt;May&lt;/a&gt; I wrote about a substandard website I attempted to use in an article entitled “&lt;a href="http://blog.colinmackay.net/archive/2009/05/16/What-not-to-develop.aspx"&gt;What not to Develop&lt;/a&gt;”. I also sent the hotel an email at the same time telling them of the failing of their website, however, I never got a response. &lt;/p&gt;  &lt;p&gt;When the post went live initially, I got asked on &lt;a href="http://twitter.com" target="_blank"&gt;twitter&lt;/a&gt; to &lt;a href="http://twitter.com/CAMURPHY/statuses/1820218468"&gt;name and shame&lt;/a&gt; the company in question. I suppose publically decrying a company has the effect that if people start doing that then companies will be pressurised in to providing a better service or product. These days I do not to put in a blog post the name of the company in question until I’ve given them a chance to respond to any email I might have sent. I sent the email on 16 May 2009 at 17:21 (BST), I think that’s quite enough time for a response.&lt;/p&gt;  &lt;p&gt;I’ve decided to publish some more details so that people can at least learn from the mistake and not repeat them elsewhere. Essentially, this is an extract of the email (slightly reformatted to fit this blog)&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Hello,&lt;/p&gt;    &lt;p&gt;I tried to book on &lt;a href="http://www.southwarkrosehotel.co.uk/"&gt;your website&lt;/a&gt; last night and it didn't work - it advertised a rate to me then refused to book it. I then tried to use your &lt;a href="http://www.southwarkrosehotel.co.uk/contact_form/contact_form.cfm"&gt;Contact Us&lt;/a&gt; page to send you a message and that also broke and said "The web site you are accessing has experienced an unexpected error. Please contact the website administrator. "&lt;/p&gt;    &lt;p&gt;I don't know who the web site administrator is, but I can guess it is someone employed by &lt;a href="http://www.tigglobal.com/"&gt;TIG Global&lt;/a&gt; given this news story: &lt;a href="http://www.hospitalitynet.org/news/4036652.search"&gt;http://www.hospitalitynet.org/news/4036652.search&lt;/a&gt;. Personally, if that is the quality they are delivering I wouldn't use them again as they are not very good and are at best turning away potential customers and at worst exposing you to needless risk.&lt;/p&gt;    &lt;p&gt;In order to [help you to] track down the errors I've gone back and replicated the initial problem annotating the pages as I go. You will find a number of graphics files attached.&lt;/p&gt;    &lt;p&gt;&lt;a title="Southwark Rose Hotel Step 1 by Colin  Angus Mackay, on Flickr" href="http://www.flickr.com/photos/colinangusmackay/3845666662/"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" border="0" alt="Southwark Rose Hotel Step 1" src="http://farm3.static.flickr.com/2638/3845666662_20d3deecb8.jpg" width="276" height="500" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;In [the above image] I show the initial details of my availability search. Check in Friday 31st July, check out Sunday 2nd Aug. 1 adult, 0 children.&lt;/p&gt;    &lt;p&gt;&lt;a title="Southwark Rose Hotel Step 2 by Colin  Angus Mackay, on Flickr" href="http://www.flickr.com/photos/colinangusmackay/3844876217/"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" border="0" alt="Southwark Rose Hotel Step 2" src="http://farm3.static.flickr.com/2668/3844876217_71deb33d13.jpg" width="259" height="500" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;In [the above image] I show the next page. This was a pop-up, so opened a new window. The details at the top are correct and match what I'd previously entered. The description of the "Weekend Advanced Purchase" sounds perfect "Valid Friday-Sunday throughout 2009". I see that it is £150 for the "Total price of the stay". I press the book button.&lt;/p&gt;    &lt;p&gt;&lt;a title="Southwark Rose Hotel Step 3 by Colin  Angus Mackay, on Flickr" href="http://www.flickr.com/photos/colinangusmackay/3844876389/"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" border="0" alt="Southwark Rose Hotel Step 3" src="http://farm3.static.flickr.com/2516/3844876389_c7b0b87e82.jpg" width="330" height="500" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;In [the above image] I show the next page. This was another pop-up, so opened a second window. I now have 3 windows open just for your hotel. (Is this really necessary?). I spot that the number of nights has increased to 3, so I go to change it back to two. I then get an unhelpfully terse error message that says "Minimum stay: 3" [See the next image]&lt;/p&gt;    &lt;p&gt;&lt;a title="Southwark Rose Hotel Step 3 error by Colin  Angus Mackay, on Flickr" href="http://www.flickr.com/photos/colinangusmackay/3845667300/"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" border="0" alt="Southwark Rose Hotel Step 3 error" src="http://farm4.static.flickr.com/3423/3845667300_26fa949345_o.png" width="209" height="169" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;At this point I'm some what irritated by the experience so go hunting for your contact us page. I see that it is a form only without an email address. I fill in the form and when I'm ready I press the "Submit" button. At this point I get an error page back that includes the message "The following information is meant for the website developer for debugging purposes." You might want to tell those developers that this information is also useful for attackers and they shouldn't be displaying it to the public. If the developers were any good what they would have done is get the website to log the information internally and display a general message to the user. If they wanted to tie up a user's experiences with what is in the log then they might also include a randomly generated (say a GUID - globally unique identifier) identifier that is put in the log and displayed so a user can refer to when explaining what problems they were having at the time.&lt;/p&gt;    &lt;p&gt;The error message that should have never been displayed is [as follows].&lt;/p&gt;    &lt;p&gt;&lt;a title="Vomiting SQL for no good reason by Colin  Angus Mackay, on Flickr" href="http://www.flickr.com/photos/colinangusmackay/3844876607/"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" border="0" alt="Vomiting SQL for no good reason" src="http://farm3.static.flickr.com/2515/3844876607_860ba02cee.jpg" width="342" height="500" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;The details in the error page also contain my original complaint. I think I now understand where the American formatting of culture specific information (e.g. dates) is coming from.The company that produced your website was American and in their arrogance just assumed everyone else was just as comfortable using MONTH/DAY/year. I suspect that same arrogance was also responsible for the other failings I've pointed out here.&lt;/p&gt;    &lt;p&gt;Regards,&lt;/p&gt;    &lt;p&gt;Colin.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So, there you are. The hotel is the &lt;a href="http://www.southwarkrosehotel.co.uk"&gt;Southwark Rose Hotel&lt;/a&gt;, and their website was produced by &lt;a href="http://www.tigglobal.com/"&gt;TIG Global&lt;/a&gt;. (I’ve recently noticed it actually says that at the bottom of the web pages and I need not have searched for relevant press releases!). Incidentally, you can click on any of the graphics to be taken to my Flickr account to see the full sized version.&lt;/p&gt;&lt;img src="http://blog.colinmackay.net/aggbug/8772.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Colin Angus Mackay</dc:creator>
            <guid>http://blog.colinmackay.net/archive/2009/08/22/Follow-up-on-what-not-to-develop.aspx</guid>
            <pubDate>Sat, 22 Aug 2009 16:31:35 GMT</pubDate>
            <wfw:comment>http://blog.colinmackay.net/comments/8772.aspx</wfw:comment>
            <comments>http://blog.colinmackay.net/archive/2009/08/22/Follow-up-on-what-not-to-develop.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.colinmackay.net/comments/commentRss/8772.aspx</wfw:commentRss>
        </item>
        <item>
            <title>What were they thinking?</title>
            <link>http://blog.colinmackay.net/archive/2009/07/12/What-were-they-thinking.aspx</link>
            <description>&lt;p&gt;I just spotted the following advert on &lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a title="Final Builder advert by Colin  Angus Mackay, on Flickr" href="http://www.flickr.com/photos/colinangusmackay/3711492240/"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" border="0" alt="Final Builder advert" src="http://farm4.static.flickr.com/3502/3711492240_264c285f1a_o.png" width="293" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I have to say that I really don't know what they were thinking when they thought up that advert. I especially wouldn’t know how to interpret this advert if I was a developer working at VSoft Technologies (the company that make FinalBuilder) and I’d just been described as a “chimp”!&lt;/p&gt;  &lt;p&gt;It is also generally disparaging towards the people that are actually employed to write build scripts. I’ve had to write build scripts and while it isn’t exactly at the most glamorous end of software development it isn’t necessarily something you could hand over to a random person to do which is surely the implication if you believe that a trained chimp could do it.&lt;/p&gt;  &lt;p&gt;If VSoft are hiring people that are at the level of trained chimps then I really don’t want to go anywhere near their products. I have enough trouble dealing with flaky software without adding more uncertainty to the mix.&lt;/p&gt;  &lt;p&gt;Obviously the advert was meant to be amusing and funny. The only people I would expect to be genuinely amused by it are dimwits who are dismissive towards those that actually get stuff done by making flippant comments that trivialise the hard work needed to make the software that drives much of the devices used in the modern world.&lt;/p&gt;&lt;img src="http://blog.colinmackay.net/aggbug/8223.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Colin Angus Mackay</dc:creator>
            <guid>http://blog.colinmackay.net/archive/2009/07/12/What-were-they-thinking.aspx</guid>
            <pubDate>Sun, 12 Jul 2009 00:57:30 GMT</pubDate>
            <wfw:comment>http://blog.colinmackay.net/comments/8223.aspx</wfw:comment>
            <comments>http://blog.colinmackay.net/archive/2009/07/12/What-were-they-thinking.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://blog.colinmackay.net/comments/commentRss/8223.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Rant of the Day: Marketers bending the facts</title>
            <link>http://blog.colinmackay.net/archive/2009/05/21/Rant-of-the-Day-Marketers-bending-the-facts.aspx</link>
            <description>&lt;p&gt;I’ve just read a press release by Telerik claiming that their tools are the “preferred” choice among asp.netPRO readers. The rest of the blurb is about winning awards. True, they won awards. But it is the claim that “&lt;a href="http://www.telerik.com/company/press-center/company-news/telerik-collected-12-awards-at-this-year’s-asp-netpro-readers’-choice-awards.aspx"&gt;Telerik products are their [asp.netPRO readers] &lt;strong&gt;&lt;em&gt;preferred&lt;/em&gt;&lt;/strong&gt; choice when it comes to web development&lt;/a&gt;” that irritates me.&lt;/p&gt;  &lt;p&gt;In fact, it all comes down to the word “preferred”, because when you see the actual awards you’ll see that Telerik didn’t actually come first (a prerequisite to being “preferred” I’d have thought) in many of those awards. And going by the way one of my colleagues rants about his use of Telerik products and the performance issues incurred in a previous job, I have to wonder about some things.&lt;/p&gt;  &lt;p&gt;Marketing people will milk any public compliment for everything they can, and that is fine. But I don’t like it when they push the bounds.&lt;/p&gt;  &lt;p&gt;So, lets look at the evidence. Here are the results of the &lt;a href="http://aspnetpro.com/articles/2009/05/asp200905rca_f/asp200905rca_f.asp"&gt;asp.netPRO 2009 Readers’ Choice Awards&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Incidentally, none of the categories are called “Best…” anything that I could see. That is more spinning of the facts in my book.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Charting and Graphics Tool&lt;/strong&gt;: Winner (and therefore the actual “preferred” choice) is Developer Express XtraCharts Suite. Telerik were a runner up. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Component Set&lt;/strong&gt;: Winner (and therefore the actual “preferred” choice) is Developer Express DXexperience ASP.NET. Telerik were a runner up. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Content Management System&lt;/strong&gt;: Winner (and therefore the actual “preferred” choice) is Microsoft Office SharePoint Server 2007 – Web Content Management. Telerik were an honourable mention. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Grid&lt;/strong&gt;: Winner (and therefore the actual “preferred” choice) is Developer Express ASPxGridView. Telerik were a runner up. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Navigation Control&lt;/strong&gt;: Winner (and therefore the actual “preferred” choice) is Developer Express ASPxNavBar. Telerik were runner up. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Online Editor&lt;/strong&gt;: Winner (and therefore the actual “preferred” choice) is Developer Express ASPxHTML Editor. Telerik were runner up. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Printing/Reporting tool&lt;/strong&gt;: Winner (and therefore the actual “preferred” choice) is Developer Express XtraReports Suite. Telerik were runner up. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Scheduling/Calendar Tool&lt;/strong&gt;: Winner (and therefore the actual “preferred” choice) is Developer Express ASPxScheduler. Telerik were runner up. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Testing/QA Tool&lt;/strong&gt;: Finally, Telerik are a winner! But what is this “Powered by &lt;a href="http://www.artoftest.com/home.aspx"&gt;ArtOfTest&lt;/a&gt;” all about? Call me cynical, but it seems it wasn’t all Telerik’s own work. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Training&lt;/strong&gt;: Winner (and therefore the actual “preferred” choice) is ASPSmith.com’s ASP.NET Training. Telerik were once again a runner up. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Utility&lt;/strong&gt;: Winner (and therefore the actual “preferred” choice) is Developer Express ASPxSpellChecker. Telerik were a runner up. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Silverlight&lt;/strong&gt;: Winner (and therefore the actual “preferred” choice) is Developer Express AgDataGrid Suite. Telerik were runner up. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So, to summarise. Yes, Telerik did very well, but they were the “preferred” choice in just one category by my reckoning.&lt;/p&gt;&lt;img src="http://blog.colinmackay.net/aggbug/7608.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Colin Angus Mackay</dc:creator>
            <guid>http://blog.colinmackay.net/archive/2009/05/21/Rant-of-the-Day-Marketers-bending-the-facts.aspx</guid>
            <pubDate>Thu, 21 May 2009 08:29:07 GMT</pubDate>
            <wfw:comment>http://blog.colinmackay.net/comments/7608.aspx</wfw:comment>
            <comments>http://blog.colinmackay.net/archive/2009/05/21/Rant-of-the-Day-Marketers-bending-the-facts.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://blog.colinmackay.net/comments/commentRss/7608.aspx</wfw:commentRss>
        </item>
        <item>
            <title>What not to develop</title>
            <link>http://blog.colinmackay.net/archive/2009/05/16/What-not-to-develop.aspx</link>
            <description>&lt;p&gt;I was recently looking to book a hotel in Southwark in London. I thought I’d found the perfect hotel, it was inexpensive (by London standards) and close to where I would be visiting. They also had availability on an offer for £75 per night, so long as you checked in and out on specific days, which I happened to be doing. It looked perfect.&lt;/p&gt;  &lt;p&gt;But then things started to go wrong.&lt;/p&gt;  &lt;p&gt;I selected the rate from the availability page and clicked the “Book” button. The next page popped up (it opened a new window) and the details were pre-populated. However, it had changed the number of nights from 2 to 3. I didn’t want 3 nights, so I changed it back to 2 and I got a rather terse message saying “Minimum Stay: 3”. I’m happy to accept that style of message from a compiler, but not from a public facing website.&lt;/p&gt;  &lt;p&gt;I went back and repeated the process wondering if I’d somehow clicked on the wrong rate. I double checked everything this time. Date is correct (but in an American format on a .co.uk website), number of people (1), number of nights (2), number of rooms (1), the room description explicitly gives the rules for the stay conditions for the rate. I meet all the conditions that are presented to me. I press “Book” again…&lt;/p&gt;  &lt;p&gt;And it has pre-populated everything again and added an extra night on. I don’t want an extra night! Why even present me with a rate that I can’t have because it doesn't meet my needs.&lt;/p&gt;  &lt;p&gt;By this point I’m more than a wee bit frustrated. So I take off to the website’s contact us page. Instead of providing an email address there is a form to fill in. So, I write a description of the issues I was seeing on their site at which point the site fails again. It failed spectacularly badly. If it had taken me to an error page I would have just shrugged my shoulders and gone off elsewhere. But no, it decided to throw up its internals at me. It vomited details of the SQL Statement that failed, stack traces and so on. &lt;/p&gt;  &lt;p&gt;It even had the audacity to tell me that “&lt;strong&gt;The following information is meant for the website developer for debugging purposes&lt;/strong&gt;.” It might have well have said “&lt;strong&gt;The following information is meant for an attacker so they can destroy our server&lt;/strong&gt;.”&lt;/p&gt;  &lt;p&gt;So, back to my title, &lt;strong&gt;&lt;em&gt;what not to develop&lt;/em&gt;&lt;/strong&gt;. There were many failings on this website that I could see. The user experience was poor to start with and it then descended in to abject failure when it vomited its guts up at me.&lt;/p&gt;  &lt;p&gt;1. Don’t use pop-up windows; browsers may block them; they cause confusion for some users. Absolutely do not have a pop-up out of a pop-up; it clutters my screen with needless windows.&lt;/p&gt;  &lt;p&gt;2. Don’t have a disconnect between the display locale on the site and the TLD. If you have a geographic TLD then display information in a way that consistent with the culture of that location. e.g. Do not display dates in Month/Day/Year format when you are serving pages on a .co.uk domain. If you have customers from overseas and want to localise content for them then offer that ability, but default to your own locale if you don’t know their preference. Some websites try to be clever and will detect based on the IP of the user but even this isn’t 100% accurate. I’m located in Glasgow, but if you use a IP geo location service it shows me in Greater Manchester.&lt;/p&gt;  &lt;p&gt;3. If a user has told you their needs do not present rates that do not meet those needs. If you do want to show near alternatives then make it clear that the details entered do not match the rate displayed, but some minor changes will get the user the rate. Put this information at the bottom or in a different colour. Anything that makes it easily distinguishable.&lt;/p&gt;  &lt;p&gt;4. Don’t allow a business rule to mismatch the user friendly description. Make sure that the description of the rate actually matches the business rules that will be used to enforce the rate. If you have a rate that is described to the user as from X to Y don’t have the underlying business rules enforce a stay from X to Z. That will just irritate people.&lt;/p&gt;  &lt;p&gt;5. Don’t give users terse error messages; it is unpleasant and unfriendly. If a user has made a mistake then gently point it out. &lt;/p&gt;  &lt;p&gt;6. Don’t just send data to the database without validating it first. If a user has typed something that is too long for the column in the database for which it is destined then the software controlling the website should never have attempted to send it to the database in the first place.&lt;/p&gt;  &lt;p&gt;7. Don’t display information that could be useful to an attacker. Don’t display stack traces, SQL Statements, system generated error messages, code snippets, etc.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c3a5ddb6-f09c-4704-961a-4f345b8c4e16" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/fail" rel="tag"&gt;fail&lt;/a&gt;,&lt;a href="http://technorati.com/tags/website" rel="tag"&gt;website&lt;/a&gt;,&lt;a href="http://technorati.com/tags/software+development" rel="tag"&gt;software development&lt;/a&gt;,&lt;a href="http://technorati.com/tags/sql" rel="tag"&gt;sql&lt;/a&gt;,&lt;a href="http://technorati.com/tags/debug" rel="tag"&gt;debug&lt;/a&gt;,&lt;a href="http://technorati.com/tags/attack" rel="tag"&gt;attack&lt;/a&gt;,&lt;a href="http://technorati.com/tags/stack+trace" rel="tag"&gt;stack trace&lt;/a&gt;,&lt;a href="http://technorati.com/tags/business+rules" rel="tag"&gt;business rules&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blog.colinmackay.net/aggbug/7550.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Colin Angus Mackay</dc:creator>
            <guid>http://blog.colinmackay.net/archive/2009/05/16/What-not-to-develop.aspx</guid>
            <pubDate>Sat, 16 May 2009 14:20:57 GMT</pubDate>
            <wfw:comment>http://blog.colinmackay.net/comments/7550.aspx</wfw:comment>
            <comments>http://blog.colinmackay.net/archive/2009/05/16/What-not-to-develop.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.colinmackay.net/comments/commentRss/7550.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Rant of the day: Learn to frickin&amp;rsquo; count!</title>
            <link>http://blog.colinmackay.net/archive/2009/05/10/Rant-of-the-day-Learn-to-frickinrsquo-count.aspx</link>
            <description>&lt;p&gt;I was in a shop recently and I bought 6 items at £5 each. A total price of £30, even I can manage that mental arithmetic without resorting to a calculator. However, the till decided that the total price was £30.01. For a penny I really can’t be bothered to argue, but it got me thinking about code quality and wondering about what awfulness must be sitting in that system to create such a simple basic mistake. &lt;/p&gt;  &lt;p&gt;My colleagues are probably all aware of my views on code quality. I rant daily whenever I see examples on ineptitude by people that are paid money to write code. I read and respond on forums in order to help others learn their craft, or just get unstuck when they accidentally dig themselves in a hole. However, I see on an almost daily basis these days people posting their homework questions with no apparent attempt to at least try to work it out from themselves.&lt;/p&gt;  &lt;p&gt;Take this example I found on Code Project a while ago:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I need to know how to do some simple things with arrays please help with any!     &lt;br /&gt;1.Find largest or smallest value      &lt;br /&gt;2.Count how many times a given value is in the array      &lt;br /&gt;3.Count the number of even or odd integers in the array      &lt;br /&gt;4.Add up the sum and compute the mean      &lt;br /&gt;5.Create another array of the same size containing the same values in reverse order      &lt;br /&gt;Thanks!&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is very obviously an exercise from an introductory course on the language they were studying. They just want someone to give them an answer that they can copy and paste. If this is what they are like now, imagine what they will be like years down the road writing commercial software. &lt;/p&gt;  &lt;p&gt;I’ve seen lots of evidence over the years of people writing software by copy and pasting examples from the internet without thought of what is actually going on. This results in slow, bloated, inefficient code that is integrated very badly with the rest of the system, hard to read, hard to debug, and is just generally a complete mess.&lt;/p&gt;  &lt;p&gt;If you are tempted to copy and paste some code snippet from the internet for your application then stop and think first. Do you actually understand the code? If not, then don’t copy and paste it. If you don’t understand it, how will you debug it?&lt;/p&gt;  &lt;p&gt;I would say that if you are tempted to copy and paste from the internet that you create a very small test application first, paste it in to that and learn how it works. Once you understand how it all fits together and how it works you can then write a version that will integrate in to your application.&lt;/p&gt;  &lt;p&gt;While you are at it, write some unit tests to go with it. Make sure you test for edge cases, make sure you test for some normal cases too. If you ever get a bug, then add a test that replicates the bug. So if someone suddenly discovers your software things that 5 times 6 equals 30.01 you can add a test for it, fix the bug and redeploy the system. Hopefully, this would have been caught before the public get a chance to see the glaring error and write blog posts about it.&lt;/p&gt;&lt;img src="http://blog.colinmackay.net/aggbug/7500.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Colin Angus Mackay</dc:creator>
            <guid>http://blog.colinmackay.net/archive/2009/05/10/Rant-of-the-day-Learn-to-frickinrsquo-count.aspx</guid>
            <pubDate>Sun, 10 May 2009 11:20:42 GMT</pubDate>
            <wfw:comment>http://blog.colinmackay.net/comments/7500.aspx</wfw:comment>
            <comments>http://blog.colinmackay.net/archive/2009/05/10/Rant-of-the-day-Learn-to-frickinrsquo-count.aspx#feedback</comments>
            <wfw:commentRss>http://blog.colinmackay.net/comments/commentRss/7500.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Rant of the Day: I hate low fares airlines.</title>
            <link>http://blog.colinmackay.net/archive/2009/05/06/I-hate-low-fares-airlines.aspx</link>
            <description>&lt;p&gt;And that is me being diplomatic! There is no point in me naming the airline because, quite frankly, they are all at it. They are all as bad as each other as far as I can see.&lt;/p&gt;  &lt;p&gt;Why do they insist on displaying the fare sans taxes and charges. If they are not optional then they need to be included in the fare. I can’t NOT pay taxes. I can’t NOT pay the airport charge.&lt;/p&gt;  &lt;p&gt;If it is an optional element then allow that to be added, if the item must be paid in order for me to simply board the plane and get to my destination then roll it into the flight price. If they want to show how “unfair” the tax or airport charges are then split it up on the final confirmation page. I do not, repeat NOT, like being told £30 for the fare and discover another £28 of hidden mandatory extra charges later on.&lt;/p&gt;  &lt;p&gt;I hate them all!&lt;/p&gt;&lt;img src="http://blog.colinmackay.net/aggbug/7461.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Colin Angus Mackay</dc:creator>
            <guid>http://blog.colinmackay.net/archive/2009/05/06/I-hate-low-fares-airlines.aspx</guid>
            <pubDate>Wed, 06 May 2009 21:40:26 GMT</pubDate>
            <wfw:comment>http://blog.colinmackay.net/comments/7461.aspx</wfw:comment>
            <comments>http://blog.colinmackay.net/archive/2009/05/06/I-hate-low-fares-airlines.aspx#feedback</comments>
            <wfw:commentRss>http://blog.colinmackay.net/comments/commentRss/7461.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Rant of the day: IDisposable</title>
            <link>http://blog.colinmackay.net/archive/2009/04/28/Rant-of-the-day-IDisposable.aspx</link>
            <description>&lt;p&gt;My colleagues are probably used to the fact that I rant about code quality frequently. I take code quality very seriously. Not because I'm especially expert in it, but because features of basic code quality make it easier for other people to read and maintain the code. &lt;/p&gt;  &lt;p&gt;Today's irritation comes from some code (replicated in a number of classes I might add) that implements IDisposable. It is a fine interface and by implementing it you are telling the rest of the world that you have some stuff that can't just be left to the garbage collector to clean up. These are things like file streams, database connections, etc. Any type of scarce resource that you want to hand back as soon as you are finished with it rather than leave it up to the garbage collector.&lt;/p&gt;  &lt;p&gt;However, I came across this "gem" in some code today where the class, basically a utility class, contained no fields (so it wasn't holding on to anything at all, let alone anything that might be a scarce resource). Yet, for some reason it implemented IDisposable. What was it going to dispose? What could it dispose?&lt;/p&gt;  &lt;p&gt;The answer was in the code:&lt;/p&gt;  &lt;pre&gt;public void Dispose()
{
    // Nothing to dispose of.
}&lt;/pre&gt;

&lt;p&gt;Quite!&lt;/p&gt;&lt;img src="http://blog.colinmackay.net/aggbug/7330.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Colin Angus Mackay</dc:creator>
            <guid>http://blog.colinmackay.net/archive/2009/04/28/Rant-of-the-day-IDisposable.aspx</guid>
            <pubDate>Tue, 28 Apr 2009 18:35:30 GMT</pubDate>
            <wfw:comment>http://blog.colinmackay.net/comments/7330.aspx</wfw:comment>
            <comments>http://blog.colinmackay.net/archive/2009/04/28/Rant-of-the-day-IDisposable.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://blog.colinmackay.net/comments/commentRss/7330.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Banking Scams</title>
            <link>http://blog.colinmackay.net/archive/2008/07/17/2944.aspx</link>
            <description>&lt;p&gt;Just now I got a spam email purporting to be from my bank. In fact, I get lots of these because I obviously have accounts with Barclays, NatWest, HSBC, HBOS, RBS, CitiBank, WellsFargo, Clydesdale, Caja Madrid, ING, and a whole host of others.&lt;/p&gt;  &lt;p&gt;Obviously some people are still fooled by them, otherwise they wouldn't still be sending them out after all those years. In fact, the mails do look like they could be authentic. The from address appears to be from the right place, the wording looks like it could be from my bank, and it gives me a link that looks like the one I log on with. However, it is still a scam.&lt;/p&gt;  &lt;p&gt;I'm guessing the normal readership of my blog, mostly software developers, would be able to spot a scam like this fairly easily, but for anyone arriving via &lt;a title="Google" href="http://www.google.co.uk" target="_blank"&gt;Google&lt;/a&gt; direct to this page and are looking for some tips for spotting a scam here goes:&lt;/p&gt;  &lt;p&gt;Here is the body of a scam email I received:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Dear &lt;font color="#ff0000"&gt;Customer&lt;/font&gt;,      &lt;br /&gt;Royal Bank&lt;font color="#ff0000"&gt;.&lt;/font&gt; always &lt;font color="#ff0000"&gt;look&lt;/font&gt; &lt;font color="#ff0000"&gt;forward for&lt;/font&gt; the high security of our clients. During our regularly scheduled account maintenance and verification procedures, we have detected a slight error in your account information.This might be due to either of the following reasons:      &lt;br /&gt;1. A recent change in your personal information.      &lt;br /&gt;2. Submitting invalid information during the initial sign in process.      &lt;br /&gt;Due to this, you are requested to please update and verify your information by clicking the link below: &lt;/p&gt;    &lt;p&gt;&lt;b&gt;&lt;a href="http://www.this-is-not-the-scammers-real-address.cl.invalid//components/com_extcalendar/themes/Login.html"&gt;&lt;font color="#ff0000"&gt;https://www.rbsdigital.com/default.aspx?&lt;/font&gt;&lt;/a&gt; &lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;b&gt;*Important*&lt;/b&gt;      &lt;br /&gt;&lt;font color="#ff0000"&gt;We have asked few additional information which is going to be the part of secure login process&lt;/font&gt;. These additional information will be asked during your future login security so, please provide all these info completely and correctly otherwise due to security reasons &lt;font color="#ff0000"&gt;we may have to close your account temporarily.       &lt;br /&gt;&lt;/font&gt;We thank you for your prompt attention to this matter. Please understand that this is a security measure intended to help protect you and your account. We apologize for any inconvenience.&lt;/p&gt;    &lt;p&gt;&lt;b&gt;&lt;/b&gt;      &lt;br /&gt;&lt;i&gt;Security Advisor       &lt;br /&gt;Royal Bank Of Scotland.&lt;/i&gt;&lt;/p&gt;    &lt;p&gt;Please do not reply to this e-mail. Mail sent to this address cannot be answered.     &lt;br /&gt;For assistance, log in to your Royal Online Bank account and choose the "Help" link on any page.      &lt;br /&gt;Royal Bank Email ID # 1009 &lt;/p&gt;    &lt;p&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I've highlighted some of the text in red, as I'm going to talk about it.&lt;/p&gt;  &lt;p&gt;First off, "Dear Customer", really?! - how impersonal, surely you already know who I am? If the email is so general that they've used "Dear Customer" then they've obviously sent it to everyone and they really haven't a clue what there systems are doing. No bank should be that clueless.&lt;/p&gt;  &lt;p&gt;Next is the dot after "Royal Bank". That's not the end of a sentence. It isn't even a sentence (it contains no verb). Perhaps they are using the "." to signify an abbreviation of sorts, but I've never seen any Royal Bank communication do that. In fact, I've never seen anybody do that for "Royal Bank".&lt;/p&gt;  &lt;p&gt;"Look forward for" is grammatically incorrect, you look forward &lt;strong&gt;to&lt;/strong&gt; things, not "for" them. And why would they be looking forward to the high security of their customers. Surely that already exists. The bank has been around for about 300 years, I imagine after all that time they must be doing something right with regards to security.&lt;/p&gt;  &lt;p&gt;You also have to ask yourself, why would the banks processes be so bad as to cause an error for the reasons stated?&lt;/p&gt;  &lt;p&gt;Next is the URL (the web address) given to you in order to log in. Hover over it and look in your browser's status bar. Did you notice that the status bar says something different to what you see on the page? I've altered the real address so people don't inadvertently use it, but you can see it doesn't match the bank's real address.&lt;/p&gt;  &lt;p&gt;Now, they are asking for additional security information during the log in process. Many banks only ask for random bits of information during the log in process. Like one time they'll ask for your mother's name, the next they'll ask what the first school you went to was, and so on. The spammers obviously need to know all the information so that when they get presented with the real random question they'll be able to answer correctly.&lt;/p&gt;  &lt;p&gt;Finally, why would they close your account temporarily? A bank would never actually close an account for a potential security violation. They may suspend it, or remove access to it, but never actually close it.&lt;/p&gt;  &lt;p&gt;So, here are some tips:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;If you receive an email purporting to be from your bank, don't click on any links in it.&lt;/li&gt;    &lt;li&gt;If your banks log on procedure appears to be different from the previous time, check with the bank themselves. They may have updated their website, or it may be a scam, best to check.&lt;/li&gt;    &lt;li&gt;When you log in, ensure that the address in your address bar is the one you expect, and that it is a properly secure connection. There will be a padlock on the address bar or in the status bar (depending on which browser you have)&lt;/li&gt;    &lt;li&gt;Banks are generally fastidious about grammar and spelling in any communication they send out. It makes them look highly unprofessional if they weren't. So check any emails for grammatical or spelling errors. &lt;/li&gt; &lt;/ul&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:78c27b68-779c-47d2-abad-b9915fc269cf" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/scam" rel="tag"&gt;scam&lt;/a&gt;,&lt;a href="http://technorati.com/tags/spam" rel="tag"&gt;spam&lt;/a&gt;,&lt;a href="http://technorati.com/tags/bank" rel="tag"&gt;bank&lt;/a&gt;,&lt;a href="http://technorati.com/tags/security" rel="tag"&gt;security&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blog.colinmackay.net/aggbug/2944.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Colin Angus Mackay</dc:creator>
            <guid>http://blog.colinmackay.net/archive/2008/07/17/2944.aspx</guid>
            <pubDate>Thu, 17 Jul 2008 21:16:51 GMT</pubDate>
            <wfw:comment>http://blog.colinmackay.net/comments/2944.aspx</wfw:comment>
            <comments>http://blog.colinmackay.net/archive/2008/07/17/2944.aspx#feedback</comments>
            <wfw:commentRss>http://blog.colinmackay.net/comments/commentRss/2944.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Data Protection Muppets</title>
            <link>http://blog.colinmackay.net/archive/2008/04/05/2177.aspx</link>
            <description>&lt;p&gt;I've &lt;a href="http://blog.colinmackay.net/archive/2007/06/23/61.aspx" target="_blank"&gt;mentioned this topic on my blog before&lt;/a&gt; with regard to the &lt;a href="http://blog.colinmackay.net/archive/2007/06/22/52.aspx" target="_blank"&gt;Royal Bank of Scotland and Intelligent Finance&lt;/a&gt; but this time it was related to an insurance claim. The insurance company put me in contact with a company that would do the repairs and all they had to do was arrange a time and date. However, it wasn't that simple.&lt;/p&gt;  &lt;p&gt;Initially things seemed to be going well until the company in question phoned me to change the date because they wouldn't have the materials in time. However, first they wanted to go through security screening.&lt;/p&gt;  &lt;p&gt;Now, the conversation to this point had gone something like this:&lt;/p&gt;  &lt;p&gt;Me: Hello   &lt;br /&gt;Them: Hello, is that Colin Mackay [pronounced kae - I HATE that!]    &lt;br /&gt;Me: Mackay [pronounced correctly - its a diphthong, a sliding or gliding vowel that goes from 'ah' to 'ee'] Yes.    &lt;br /&gt;Them: This is Martindales. We just need to ask you some security questions before we proceed.    &lt;br /&gt;Me: How do I know you are who you say you are?    &lt;br /&gt;Them: We are Martindales, your insurance company has appointed us...&lt;/p&gt;  &lt;p&gt;The conversation went from bad to worse as I tried to explain that what they are doing is socially conditioning people to hand out sensitive information and was then told that they "had to" ask these questions because of the data protection act. The act makes no such requirement. What they have to do is ensure that they are speaking to the correct person so they don't divulge potentially sensitive information to the wrong person. However, the way they are going about it, while technically in line with the act, is most certainly not within the spirit of the act.&lt;/p&gt;  &lt;p&gt;What made it worst was that when I was asked how they could continue the conversation and I gave the solution they had to ask me no fewer than 3 times how they were going to continue the conversation even although I had given them a solution. After that incident they decided they must not have like my simple solution and refused to communicate with me at all for a while.&lt;/p&gt;  &lt;p&gt;My solution, incidentally, was this. They would phone me and indicate that they need to speak to me. I would then get the phone number from existing documentation (i.e. a trusted source) and phone their switchboard and ask to be put through to the person that needed to talk to me. They can then go through the security questions as I will then know I am talking to the correct party. When they phone me I have no way of knowing who I am talking to. They could be making it up. If they give me a phone number to use I won't use it. I will only use trusted sources like documentation from my insurance company, or from the booklet that the insurance assessor left me.&lt;/p&gt;  &lt;p&gt;Anyway, Martindales eventually decided that they did need to communicate with me about yet another change in date and sent me a letter. Pity it didn't arrive until two days after the guy was supposed to show up. In fact he did almost arrive, and I only knew about it because they phoned me just to say that he was running a little late. Muppets!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b9d02c4d-c652-44c2-b971-dcb2d8b4855d" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/identity%20theft" rel="tag"&gt;identity theft&lt;/a&gt;,&lt;a href="http://technorati.com/tags/fraud" rel="tag"&gt;fraud&lt;/a&gt;,&lt;a href="http://technorati.com/tags/data%20protection%20act" rel="tag"&gt;data protection act&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blog.colinmackay.net/aggbug/2177.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Colin Angus Mackay</dc:creator>
            <guid>http://blog.colinmackay.net/archive/2008/04/05/2177.aspx</guid>
            <pubDate>Sat, 05 Apr 2008 22:43:32 GMT</pubDate>
            <wfw:comment>http://blog.colinmackay.net/comments/2177.aspx</wfw:comment>
            <comments>http://blog.colinmackay.net/archive/2008/04/05/2177.aspx#feedback</comments>
            <wfw:commentRss>http://blog.colinmackay.net/comments/commentRss/2177.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>