# Monday, October 30, 2006
The tendering process can be a daunting when you know what you’re doing, but what about if you don’t know what you’re doing? I’ve tried to summarise the process for those of you who haven’t gone through it before have also covered some of the finer points. This is in follow-up to my last article about How to price your work.
Monday, October 30, 2006 5:50:52 PM (GMT Standard Time, UTC+00:00)  #    Disclaimer  |  Comments [0]  | 
# Sunday, October 29, 2006

Having lived in Cornwall for most of my life I had never encountered a Jehovah witness before and before moving up to Birmingham I think I’d only had 2 encounters –both in someone else’s flat so we invited them in for a chat (the usual studenty type malarkey where you grill them on anything that comes into your mind).

Anyways, after moving to Birmingham it was a good 2 years before I would get to meet another and being somewhat tired after work I just told them to go away. Then today we had another pair come around, I’m not particularly religious but push come to shove I’d class myself as a Quaker (yeah yeah save me the oat’s jokes) but it got me thinking, why do they do it? Why do they go around knocking on people’s doors just to be told to P off? Are the free tea and biscuits and grillings from bored/drunk/high students REALLY worth it? Seriously though, WHAT is the point?

Sunday, October 29, 2006 1:26:17 PM (GMT Standard Time, UTC+00:00)  #    Disclaimer  |  Comments [2]  | 
# Wednesday, October 25, 2006

I don’t know about you but I had always thought Orange were the mutt’s nuts when it came to service so after a few years on other networks we decided to give them another try as their tariffs weren’t much more expensive than the competition.

All was great, we signed up and were told that we’d get a load of cash back because we’d signed up a number of phones etc but when it sounds too good to be true it probably is, we’re now coming to the end of our 12month contract and we’re still chasing the credit we’re owed which leaves me wondering whether I want to remain with Orange at the end of the term.

It’s not like we’ve not tried chasing them, I call both the Orange store representative we have AND the customer service centre every month when I get the bill, I’ve also popped in a few times with all the signed paperwork. I don’t think I’d mind sitting on hold for an hour at a go to get through to a representative if I knew that at the end of the call I’d get somewhere but alas we’re still waiting…

Surfing around Google I see I’m not the only one, then I stumbled across this petition which, oddly enough, is run by one of our newer clients. So if you’re also having issues with Orange’s Customer Service go sign it and lets sort this out!

Wednesday, October 25, 2006 6:04:41 PM (GMT Daylight Time, UTC+01:00)  #    Disclaimer  |  Comments [1]  | 
# Friday, October 20, 2006

I was a fan of the last Bravia advert partly because it featured José González but also because I was left wondering whether it was a computer render or really happened (aparently they really did it) but the new Sony Bravia advert is incredible, ok there are a few computer GFX effects in there to remove peoeple etc but oh my word...

The new Sony Bravia advert: www.bravia-advert.com/paint/thead/full/
Friday, October 20, 2006 4:54:40 PM (GMT Daylight Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  | 
# Thursday, October 12, 2006

As some of you know, we’re selling our lovely house 68 Campbell St (www.68campbellst.co.uk). The house has served us well in the past as there’s an office at the rear of the property that we can run the business from and plenty of room for all my CD’s and Stacey’s shoes.

We’ve also found our next place and all was progressing fine until the other day (now a couple of weeks ago) we were called and told that the buyers had pulled out just before the point of exchange. Obviously they’re perfectly at right to do so but man it’s got my back up. We’ve done all the surveys on the next house, sorted all the legal mumbojumbo and were ready to complete within a week, that left us nearly at square one.

A couple of weeks have now passed and luckily we’re in a position to keep this place to rent it out and still buy the next house which is great news, but if you’re out there reading this, you’re really lost out on a lovely house and I just don’t believe the excuse “It’s an old property” –well der!

I feel sorry for anyone else out there who has been gazumped, I hope it all worked out for you in the end.

Thursday, October 12, 2006 5:09:01 PM (GMT Daylight Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  | 
# Tuesday, October 10, 2006

One of the reasons I started this blog was because I felt I often came across nuggets of information that someone else out there may find useful in some small way and that I should share the information where possible. I also wanted a place to store all those little gems that I’m forever forgetting. That and I am forever asked similar questions that I think the “masses” (all three of you) would like to hear about.

For quite some time I’ve been writing sets of articles that I was hoping to raise the profile of The Site Doctor with but as with many things in atm it seems they’ve been slow in getting finished. I have however been collating the various snippets together and collaborating with a number of sources and nearly every time I speak to a new “source” I get asked the same question “why would you want to write about this stuff –it just increases your competition”.

That never fails to make me chuckle to myself (not at you mind), I say why not? No offence but if we’re that unconfident in our knowledge that a few articles about common (and often simple) issues people run into that will suddenly make my competition take over then so be it, but personally I like to feel I’ve got enough knowledge to share and not feel threatened –perhaps the wrong tack to take but hey!

I also feel that by sharing the information with other people (not just developers, there’s stuff here for everyone) that in my own small way I’m making the web a better place –even if I’m not personally writing the code something here may have influenced you –even if it’s just answering a simple question you’ve been tearing your hair out over such as “Do pineapples grow on bushes” –yes they do, you can see photographic proof here.

Anyways, that’s my 2p worth, if you don’t feel secure enough to share your findings that’s up to you!

Tuesday, October 10, 2006 9:44:53 AM (GMT Daylight Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  | 
# Monday, October 09, 2006

This is a useful stored procedure for assigning permissions to users quickly and easily. We tend to assign a new login to each application we develop, this way we limit the damage possible in the event of a username/password compromise.

/*--------------------------------------------------------------------------
Automatically assign the role permissions
--------------------------------------------------------------------------*/

USE DatabaseName
SET NOCOUNT ON

DECLARE @objName varchar(80)
DECLARE @objType char(2)
DECLARE @username varchar(100)
SET @username = 'UserNameToAssignPermissionsTo'

DECLARE grant_perms_on_sps CURSOR FOR
SELECT name, type
FROM SYSOBJECTS
WHERE
  (
    (type = 'P')
   OR
    (type = 'FN')
   OR
    (type = 'TF')
   OR
    (type = 'U')
   OR
    (type = 'V')
  )
 AND
  uid = 1
 AND
  status > -1
 AND
  LEFT(name, 3) <> 'dt_' --See Note 1

OPEN grant_perms_on_sps
FETCH NEXT FROM grant_perms_on_sps
INTO @objName, @objType

WHILE @@FETCH_STATUS = 0
BEGIN
  IF @objType = 'P' OR @objType = 'FN'
  BEGIN
    EXEC ('GRANT EXECUTE ON dbo.' + @objName + ' TO ' + @username)
    PRINT ('GRANTED EXECUTE ON dbo.' + @objName + ' TO ' + @username)
  END

  IF @objType = 'TF'
  BEGIN
    EXEC ('GRANT SELECT ON dbo.' + @objName + ' TO ' + @username)
    PRINT ('GRANTED SELECT ON dbo.' + @objName + ' TO ' + @username)
  END

  FETCH NEXT FROM grant_perms_on_sps
  INTO @objName, @objType
END

CLOSE grant_perms_on_sps
DEALLOCATE grant_perms_on_sps

GO
------------------------------------------------------------------------

Note 1: In addition, we tend to prefix our database objects with useful prefixes to group relevant tables, i.e. if we had login information stored in the database we may use “Login_” as the prefix, using this method with this Stored Procedure to assign permissions you can easily select the relevant objects. So you could alter the stored procedure a touch:

DECLARE @prefix varchar(100)
SET @prefix = 'PrefixToUse'

LEFT(name, LEN(@prefix)) = @prefix

Monday, October 09, 2006 3:42:49 PM (GMT Daylight Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  | 

While fitting my new chipset cooler fan this morning I was checking out an error message on Google (which as it turns out I knew the answer to) and I was presented with a CAPTCHA image –I guess Google’s getting a lot of automated requests. This was using the built in Firefox search box but then I got it again on the PC using Google’s search box!

Google CAPTCHA

Monday, October 09, 2006 9:51:17 AM (GMT Daylight Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  | 
# Monday, October 02, 2006

I ran into (another) interesting error today when using String.Format1. I was getting the error message "Input string was not in a correct format.". In this instance I was calling the content from an XML file, the data was wrapped in CDATA tags so there shouldn't have been an issue with line breaks etc. On investigating the error further I found it was being caused because the content was a HTML page. More specifically, the String.Format error "Input string was not in a correct format." was being caused by the CSS declaration's curly braces.

To work around the method perceiving them as placeholders, simply replace each curly brace "{" with double braces "{{".

To replicate the error:

String.Format("<style type=\"text/css\">p{font-size: 1.2em;}</style><p>Your username is: {0}</p>", "UserName");

The fix in place:

String.Format("<style type=\"text/css\">p{{font-size: 1.2em;}}</style><p>Your username is: {0}</p>", "UserName");

1The String.Format method accepts a format string which can include place holders (designated by the curly braces {} and a number that refers to the location of the item that should appear in the list). A quick example of String.Format:

String.Format("This is some text the date is {0}.", DateTime.Today.ToShortDateString);

Would produce: "This is some text the date is 02/10/2006"

Monday, October 02, 2006 6:26:29 PM (GMT Daylight Time, UTC+01:00)  #    Disclaimer  |  Comments [8]  | 
# Saturday, September 30, 2006

On surfing around the net the other day looking for a replacement to Visual Studio 2003’s clipboard monitor I stumbled across this excellent Clipboard manager plug-in for Visual Studio 2005. As his blog was offline at the time I wasn’t sure exactly how to use it but now I’ve had a play I’m not sure I’ll be able to do without it!

Check out the Clipboard Manager plug-in at
http://www.csharper.net/blog/clipboard_manager_upgraded_to_package.aspx

For those of you interested, the plug-in monitors the clipboard activity allowing you to resurrect previous clipboards and make them current and even locking items so you can use them at a later date. I’ve found it incredibly useful when testing sites as it allows me to keep common messages on the clip. Downside is you have to have Visual Studio open at the time so I’ll have to look into a standalone version.

Here are a few shots of it in “action”:

Visual Studio Clipboard Manager Plugin

The items that have been added to the clipboard in the past show up in the list at the top and there's a small preview window below (which I think you can select parts out of). You can also remove all items from the history by clicking the icon in the top left.

Visual Studio Clipboard Manager Plugin

To re-select an old item double click it and it's instantly the main item! The currently selected item is the one in black text with a green arrow next to it.

Visual Studio Clipboard Manager Plugin

The context menu offers a number of extra options including the ability to lock and unlock an item, this means when you restart your computer the item is still in the history -great if you have common items such as test credit card numbers! If you want to remove a single item from the history, you can do that using the context menu too. I've not yet used the "Save to File" or "Search Online" items.

Update: There does seem to be some sort of glitch with it, I think my history has got corrupt at somepoint so when I clear all the unlocked items new items weren’t getting caught anymore. I've found two solutions: The first is to restart Visual Studio, the other is to unlock all items and clear the history completely. This seemed to sort it. I did also note that I had one blank item at the top of the list so I guess that's what was causing it.

Saturday, September 30, 2006 7:13:45 PM (GMT Daylight Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  |