Stopping Outlook Blocking Attachments
Tuesday, July 04, 2006 11:46:14 AM (GMT Daylight Time, UTC+01:00)
I know this is covered all over the web but I'm forever forgetting it so if Outlook has started blocking email attachments i.e. ASP files you can easily adjust this by adding a String Key called "Level1Remove" to the registry, navigate to: Current User --> Software --> Microsoft --> Office (x) --> Outlook --> Security (where (x) is the version of office you are running: 9 = Outlook 2000, 10 = Outlook 2002 11 = Outlook 2003
Then right click and choose "New" and "String Key", then add in a list of the attachments you would like to allow seperated by semi-colons i.e.:
.exe;.mdb;.url;.asp;.aspx;.zip
Pricing your work
Monday, July 03, 2006 5:05:22 PM (GMT Daylight Time, UTC+01:00)
There are two questions I get asked a lot by people who are thinking about becoming self-employed and even those already running a business. The first is How do you get the work? –this is something I’ll blog about in more detail later as the second is what I want to talk about today and that’s How much should I charge?
When setting out, this may seem a really difficult question to answer but in actual fact it can easily be calculated out and it’s critical to the success (or failure) of your business. When we first started out, I was plucking figures from thin air, when someone asked my how much a website would cost I decided a figure that I felt would compensate me for the time input. This is not what I would suggest doing!
Now that we are considering outsourcing work with the view to employing some new wonderful people to help out on the creation of our sites I felt it was time to work out a base rate from which we should quote. After some pondering I feel I’ve come up with a solution that can easily be re-used on any business.
Firstly, add up all your expenses (equipment, software, phone, ISP, rent, taxes, etc.) –it’s worth taking some time over this to make sure you include as many expenses as possible. Then add what you would like to get paid (your yearly salary). Finally, because you would like to grow your business add some profit (somewhere between 10% and 15% is about right). The figure you’re left with is the turnover you company is aiming for.
Now you need to work that figure back to an hourly rate. Lets assume you want to allow for 4 weeks holiday -you’ll have a potential of 48 working weeks available to you. Now, assuming you’re going to be a slacker and only work a 40hr week, following on from my previous post of how much time was spent on non-development work, we have to assume that we’ll be spending 16hrs of our 40hr week on non-development (yes we do have to take this into account –you’re still working!!)
This leaves us with 24 billable hours every week, this equates to 1,152 billable hours a year. To calculate your hourly rate, simply divide the required turnover by the billable hours.
Let’s try an example:
Expenses
Server Costs: £100pm = £1,200pa
Rent: £1000pm = £12,000
Phone Bill: £29.99pm = £359.88pa
Electricity: £40pm = £480pa
Total Costs: £14,039.88
Salary: £100,000
Profit: £114,039.88 + 15%
Required Turnover: £131,145.90
[Hourly Rate] = [Required Annual Turnover] / [Available Annual Billable Hours]
£131,145.90 / 1152 = £113.84
So in our example, your hourly rate should be £113.84
Notice in my example I have included the server costs which, in many cases will be covered by clients but what happens if they don’t pay or you don’t fill the space? You’ll have to pay so factor it in and any space you sell will be additional profit which you can choose to pass back to the client or save to reward your staff!
This figure should is a base rate, it is always worth factoring in the client when estimating on the work, for example, if you have a large corporate client, many of them will expect to pay a higher hourly rate and odd as it sounds are concerned when it’s too cheap so offset these clients against the smaller clients. Remember: you can be turned down for being too cheap as well as being too expensive!
To clarify that point a little further: If you have a small client who cannot afford £115ph and a large client who is happy with £175ph development costs, for every hour you work for the large client, you can afford to offer the small client a reduction:
10hours @ £115ph = £1150
5hours @ £175ph + 5hours @ £55ph = £1150
So when estimating work, look at it on a yearly basis –having business is better than no business, just don’t be a busy fool.
As a closing note, I would like to add that if your hourly rate sounds too high for your clients, you have to think about what they’re getting –You! You may be expensive but as long as your work is of a high standard price doesn’t matter. The alternative is to find areas to cut your expenses (or take a salary reduction!) so I know which I'd rather do...
I hope you’re starting out in business and when you do I hope you make it! Good Luck.
Update: I should just add, the figures in the example are not real world (or ours) they're merely for demonstration!
Update 2: I feel I should also point out that although we have a base rate that helps us estimate on work and allow us to quickly determine how profitable the project is, we rarely work on an hourly basis as we prefer to quote on a project basis -something which I'll write about another day.
Bulk Granting EXECTUTE Permission on SQL Server
Monday, July 03, 2006 3:42:17 PM (GMT Daylight Time, UTC+01:00)
Here's some code I regularly find useful when going from a dev server to a production server (or changing the username), I'm sure there's a more automated way but for a quick fix...
DECLARE @username varchar(100)
SET @username = 'xyz'
SELECT
'GRANT EXECUTE ON ' + name + ' TO ' + @username
FROM
sysobjects
WHERE
xtype = 'p'
AND
LEFT(name, 4) = 'PRE_'
The code is simple, it lists all the stored procedures with a set prefix and generates the T-SQL to grant EXECUTE permissions to a given user.
To use it, set the username, update the last line if you would like to limit it's bounds (we prefix ours for clarity i.e. SProcs with a prefix of CMS_ are used in the Content Management System) and run it, then copy the results and run them in a Query Analyser.
PAS 78 available for free download
Monday, July 03, 2006 9:20:18 AM (GMT Daylight Time, UTC+01:00)
A while ago the Disability Rights Commission (DRC) in collaboration with BSI released a guide to good practice in commissioning accessible websites called Publicly Available Specification (PAS) 78. The guidelines outline good practice in commissioning websites that are accessible to and usable by disabled people.
Originally it was made available at a charge but the nice people at the Disability Rights Commission have decided to make it publicly available for free! You can download your copy at: http://www.drc-gb.org/library/website_accessibility_guidance/pas_78.aspx
The guide gives recommendations for:
- The management of the process of, and guidance on, upholding existing W3C guidelines and specifications
- Involving disabled people in the development process and using the current software-based compliance testing tools that can assist with this.
It is applicable to all public and private organizations that wish to observe good practice under the existing voluntary guidelines and the relevant legislation on this subject and is intended for use by those responsible for commissioning public-facing websites and web-based services.
Internet acronyms -What do they mean and when to use them
Sunday, July 02, 2006 4:09:08 PM (GMT Daylight Time, UTC+01:00)
Having been chatting on the net for a long time, I use internet acronyms in most of my day-day conversations over instant messengers (IMs). When you get used to them they're massive timesavers but before then it must seem like they're leaving out a lot of letters -producing gobbledy goop! Although some acronyms are phonetically based, many are are not and often confusing, so sparked by a number of people new to IMs constantly stopping me and asking what it meant (so not making it a timesaver at all while I either typed it out or found a dictionary of acronyms) I decided I would overview a list of acronyms that I use on a regular occasion as a reference point, I may add more later and I hope its of use to someone else out there (please note some of these are just ones that I've made up/use to aid development talk).
General
- gtg
- Got To Go
- brb
- Be Right Back (less than 5mins)
- bbiab
- Be Back In A Bit (5 - 15mins)
- bbiaw
- Be Back In A While (15mins +)
- b
- Back
- wb
- Welcome Back
- ty
- Thank You
- yw
- You're Welcome.
- atm
- At The Moment
- ttyl
- Talk To You Later
- styl
- Speak To You Later
- cya
- See You
- cu
- See You
- afaik
- As Far As I Know
- afaiaa
- As Far As I Am Aware
- afaiac
- As Far As I'm Concerned
- afaics
- As Far As I Can See
- afaict
- As Far As I Can Tell
- b/c
- Because
- w/
- With
- w/o
- WithOut
- g/f
- GirlFriend
- b/f
- BoyFriend
- gl
- Good Luck
- omg
- Oh My God
- faq
- Frequently Asked Question(s)
- nm
- Never Mind
- n1
- Nice One
- n2s
- Needless To Say
- nn
- Night Night
- n00b
- A inexperienced and / or ignorant or unskilled person (especially used in computer games)
- nmp
- Not My Problem
- nmj
- Not My Job
- pwned
- Beating / Defeating / Outclassing someone
- lol
- Laugh(ing) Out Loud
- k
- Ok
- btw
- By The Way
- lmao
- Laugh(ing) My Ass Off
- wrt
- With Regards To
Ones I don't tend to use but I frequently see
- wtf
- What The F***
- wth
- What The Hell
- fo
- F*** Off
- fk
- F*** Knows
- fa
- F*** All
- sfa
- Sweet F*** All
- ffs
- For F***'s Sake
- po
- P*** Off
Technical
- w/s
- Web Service
- se
- Search Engine
- seo
- Search Engine Optimisation
Smileys
- :)
- Smiley / Happy
- :D
- Mega Happy
- :(
- Sad
- ;)
- Winking
- :P
- Sticking Toungue Out
- :o
- Surprised
- :|
- Disappointed
- :S
- Confused / Worried
- :#
- Don't Tell Anyone
- Crying
- >:(
- Annoyed
- :@
- Angry
- |-)
- Sleepy / Tired / Yawning
Actions
When a phrase is contained in <> it generally refers to an action the user is doing
- <g>
- Grin
- <bg>
- Big Grin
- <vbg>
- Very Big Grin
- <vbeg>
- Very Big Evil Grin
When a is contained in >< it means the user is referring to himself
i.e. >Thinks its too late to be writing an article<
It may also be worth checking out: Google as there's many more complete dictionaries out there!
Time on the phone –wasted time?
Saturday, July 01, 2006 4:14:26 PM (GMT Daylight Time, UTC+01:00)
After a somewhat hectic week on the phone I asked myself “has all this time on the phone been wasted time?” Well, I spent time talking to clients, developers, friends and family and this is important. Although it may cost you a little development time, talk is cheap (that’s what the telecom’s companies want to tell you isn’t it?)
Rather than looking at it negatively I tried to look at it from another point of view, I could have spent the time developing some weird and wonderful new creation for a client however, this phone time was doing something else –it was promoting the business. Admittedly the business couldn’t survive if we all spent all the time with the phone glued to our ear, but once in a while I believe is a good thing.
Why am I looking at it like that? That’s simple, if you make time for your clients, friends and family in any context it shows that you care for them beyond a pay check and at the end of the day, if they need some development they’re more likely to think of you in a good light.
Out of interest I decided to work out how much time I spent on non-development hours and I was somewhat shocked, in the average week I would estimate that at least 2 days is spent on non-development work, that includes phone calls, invoicing, letter writing, emailing etc. It's a staggering ammount but, all part of running a business.
Complete Lifecycle of an ASP.Net page and controls
Friday, June 30, 2006 9:01:00 AM (GMT Daylight Time, UTC+01:00)
Julian Voelcker raised a question on the MsWebDev mailing list the other day that I've been meaning to investigate for a while as it's something that I have to double check on every time I write a new custom control -the various lifecycles an ASP.Net page.
Many people have blogged about the lifecycle of an ASP.Net Page or Master Page but every time I need to find the complete lifecycle of a control it’s not so easy. Today I wrote a couple of test pages to generate a reference.
The pages are very simple, I just overrode every method I could find and wrote to the trace. For completeness when the method called its base I wrapped it with “Start MethodName” and “End MethodName” (if you look at the trace outputs below you will see why). I did this for the Master Page (.master), Page (.aspx), User Control (.ascx) and Web Control (.cs), the page structre was simple:
For clarity I’ve split the produced trace into 5 individual reference sections:
ASP.Net 2.0 Master Page Life Cycle
- Start Construct()
- End Construct()
- Start FrameworkInitialize()
- End FrameworkInitialize()
- Start AddParsedSubObject(object obj)
- CreateControlCollection()
- Start AddedControl(Control control, int index)
- End AddedControl(Control control, int index)
- End AddParsedSubObject(object obj)
- Start AddParsedSubObject(object obj)
- Start AddedControl(Control control, int index)
- End AddedControl(Control control, int index)
- End AddParsedSubObject(object obj)
- Start AddParsedSubObject(object obj)
- Start AddedControl(Control control, int index)
- End AddedControl(Control control, int index)
- End AddParsedSubObject(object obj)
- Start AddParsedSubObject(object obj)
- Start AddedControl(Control control, int index)
- End AddedControl(Control control, int index)
- End AddParsedSubObject(object obj)
- Start AddParsedSubObject(object obj)
- Start AddedControl(Control control, int index)
- End AddedControl(Control control, int index)
- End AddParsedSubObject(object obj)
- ResolveAdapter()
- Start OnInit(EventArgs e)
- End OnInit(EventArgs e)
- Start TrackViewState()
- End TrackViewState()
- Start OnLoad(EventArgs e)
- Page_Load(object sender, EventArgs e)
- End OnLoad(EventArgs e)
- Start EnsureChildControls()
- ResolveAdapter()
- Start CreateChildControls()
- End CreateChildControls()
- End EnsureChildControls()
- Start OnPreRender(EventArgs e)
- End OnPreRender(EventArgs e)
- SaveViewState()
- SaveViewState()
- HasControls()
- Start RenderControl(HtmlTextWriter writer)
- Start Render(HtmlTextWriter writer)
- Start RenderChildren(HtmlTextWriter writer)
- End RenderChildren(HtmlTextWriter writer)
- End Render(HtmlTextWriter writer)
- End RenderControl(HtmlTextWriter writer)
ASP.Net 2.0 Page Life Cycle
- ResolveAdapter()
- DeterminePostBackMode()
- Begin PreInit
- Start OnPreInit(EventArgs e)
- End OnPreInit(EventArgs e)
- HasControls()
- Start RemovedControl(Control control)
- End RemovedControl(Control control)
- ResolveAdapter()
- Start AddedControl(Control control, int index)
- End AddedControl(Control control, int index)
- End PreInit
- Begin Init
- ResolveAdapter()
- Start OnInit(EventArgs e)
- End OnInit(EventArgs e)
- Start TrackViewState()
- End TrackViewState()
- End Init
- Begin InitComplete
- Start OnInitComplete(EventArgs e)
- End OnInitComplete(EventArgs e)
- End InitComplete
- Begin PreLoad
- Start OnPreLoad(EventArgs e)
- End OnPreLoad(EventArgs e)
- End PreLoad
- Begin Load
- Start OnLoad(EventArgs e)
- Page_Load(object sender, EventArgs e)
- End OnLoad(EventArgs e)
- End Load
- Begin LoadComplete
- Start OnLoadComplete(EventArgs e)
- End OnLoadComplete(EventArgs e)
- End LoadComplete
- Begin PreRender
- Start EnsureChildControls()
- ResolveAdapter()
- Start CreateChildControls()
- End CreateChildControls()
- End EnsureChildControls()
- Start OnPreRender(EventArgs e)
- End OnPreRender(EventArgs e)
- End PreRender
- Begin PreRenderComplete
- Start OnPreRenderComplete(EventArgs e)
- End OnPreRenderComplete(EventArgs e)
- End PreRenderComplete
- SaveViewState()
- Begin SaveState
- SaveViewState()
- HasControls()
- Start SavePageStateToPersistenceMedium(object state)
- End SavePageStateToPersistenceMedium(object state)
- End SaveState
- Begin SaveStateComplete
- Start OnSaveStateComplete(EventArgs e)
- End OnSaveStateComplete(EventArgs e)
- End SaveStateComplete
- Begin Render
- CreateHtmlTextWriter(System.IO.TextWriter tw)
- Start RenderControl(HtmlTextWriter writer)
- Start Render(HtmlTextWriter writer)
- Start RenderChildren(HtmlTextWriter writer)
- End RenderChildren(HtmlTextWriter writer)
- End Render(HtmlTextWriter writer)
- End RenderControl(HtmlTextWriter writer)
- End Render
- CreateHtmlTextWriter(System.IO.TextWriter tw)
ASP.Net 2.0 User Control Life Cycle
- Start Construct()
- End Construct()
- Start FrameworkInitialize()
- End FrameworkInitialize()
- ResolveAdapter()
- Start OnInit(EventArgs e)
- End OnInit(EventArgs e)
- Start TrackViewState()
- End TrackViewState()
- Start OnLoad(EventArgs e)
- Page_Load(object sender, EventArgs e)
- End OnLoad(EventArgs e)
- Start EnsureChildControls()
- ResolveAdapter()
- Start CreateChildControls()
- End CreateChildControls()
- End EnsureChildControls()
- Start OnPreRender(EventArgs e)
- End OnPreRender(EventArgs e)
- SaveViewState()
- SaveViewState()
- HasControls()
- Start RenderControl(HtmlTextWriter writer)
- Start Render(HtmlTextWriter writer)
- Start RenderChildren(HtmlTextWriter writer)
- End RenderChildren(HtmlTextWriter writer)
- End Render(HtmlTextWriter writer)
- End RenderControl(HtmlTextWriter writer)
ASP.Net 2.0 Web Control Life Cycle
- Constructor Test()
- Start ApplyStyleSheetSkin(Page page)
- End ApplyStyleSheetSkin(Page page)
- ResolveAdapter()
- Start OnInit(EventArgs e)
- End OnInit(EventArgs e)
- Start TrackViewState()
- End TrackViewState()
- Start OnLoad(EventArgs e)
- End OnLoad(EventArgs e)
- Start EnsureChildControls()
- ResolveAdapter()
- Start CreateChildControls()
- End CreateChildControls()
- End EnsureChildControls()
- Start OnPreRender(EventArgs e)
- End OnPreRender(EventArgs e)
- SaveViewState()
- SaveViewState()
- HasControls()
- Start RenderControl(HtmlTextWriter writer)
- Start Render(HtmlTextWriter writer)
- Start RenderBeginTag(HtmlTextWriter writer)
- Start AddAttributesToRender(HtmlTextWriter writer)
- End AddAttributesToRender(HtmlTextWriter writer)
- End RenderBeginTag(HtmlTextWriter writer)
- Start RenderContents(HtmlTextWriter writer)
- Start RenderChildren(HtmlTextWriter writer)
- End RenderChildren(HtmlTextWriter writer)
- End RenderContents(HtmlTextWriter writer)
- Start RenderEndTag(HtmlTextWriter writer)
- End RenderEndTag(HtmlTextWriter writer)
- End Render(HtmlTextWriter writer)
- End RenderControl(HtmlTextWriter writer)
Complete Trace |
| Category |
Message |
| Page |
ResolveAdapter() |
| Page |
DeterminePostBackMode() |
| aspx.page |
Begin PreInit |
| Page |
Start OnPreInit(EventArgs e) |
| Page |
End OnPreInit(EventArgs e) |
| MasterPage |
Start Construct() |
| MasterPage |
End Construct() |
| Page |
HasControls() |
| Page |
Start RemovedControl(Control control) |
| Page |
End RemovedControl(Control control) |
| MasterPage |
Start FrameworkInitialize() |
| MasterPage |
End FrameworkInitialize() |
| MasterPage |
Start AddParsedSubObject(object obj) |
| MasterPage |
CreateControlCollection() |
| MasterPage |
Start AddedControl(Control control, int index) |
| MasterPage |
End AddedControl(Control control, int index) |
| MasterPage |
End AddParsedSubObject(object obj) |
| MasterPage |
Start AddParsedSubObject(object obj) |
| MasterPage |
Start AddedControl(Control control, int index) |
| Page |
ResolveAdapter() |
| MasterPage |
End AddedControl(Control control, int index) |
| MasterPage |
End AddParsedSubObject(object obj) |
| MasterPage |
Start AddParsedSubObject(object obj) |
| MasterPage |
Start AddedControl(Control control, int index) |
| MasterPage |
End AddedControl(Control control, int index) |
| MasterPage |
End AddParsedSubObject(object obj) |
| UserControl |
Start Construct() |
| UserControl |
End Construct() |
| UserControl |
Start FrameworkInitialize() |
| UserControl |
End FrameworkInitialize() |
| CustomWebControl |
Constructor Test() |
| CustomWebControl |
Start ApplyStyleSheetSkin(Page page) |
| CustomWebControl |
End ApplyStyleSheetSkin(Page page) |
| MasterPage |
Start AddParsedSubObject(object obj) |
| MasterPage |
Start AddedControl(Control control, int index) |
| MasterPage |
End AddedControl(Control control, int index) |
| MasterPage |
End AddParsedSubObject(object obj) |
| MasterPage |
Start AddParsedSubObject(object obj) |
| MasterPage |
Start AddedControl(Control control, int index) |
| MasterPage |
End AddedControl(Control control, int index) |
| MasterPage |
End AddParsedSubObject(object obj) |
| Page |
Start AddedControl(Control control, int index) |
| Page |
End AddedControl(Control control, int index) |
| aspx.page |
End PreInit |
| aspx.page |
Begin Init |
| Page |
ResolveAdapter() |
| MasterPage |
ResolveAdapter() |
| UserControl |
ResolveAdapter() |
| UserControl |
Start OnInit(EventArgs e) |
| UserControl |
End OnInit(EventArgs e) |
| UserControl |
Start TrackViewState() |
| UserControl |
End TrackViewState() |
| CustomWebControl |
ResolveAdapter() |
| CustomWebControl |
Start OnInit(EventArgs e) |
| CustomWebControl |
End OnInit(EventArgs e) |
| CustomWebControl |
Start TrackViewState() |
| CustomWebControl |
End TrackViewState() |
| MasterPage |
Start OnInit(EventArgs e) |
| MasterPage |
End OnInit(EventArgs e) |
| MasterPage |
Start TrackViewState() |
| MasterPage |
End TrackViewState() |
| Page |
Start OnInit(EventArgs e) |
| Page |
End OnInit(EventArgs e) |
| Page |
Start TrackViewState() |
| Page |
End TrackViewState() |
| aspx.page |
End Init |
| aspx.page |
Begin InitComplete |
| Page |
Start OnInitComplete(EventArgs e) |
| Page |
End OnInitComplete(EventArgs e) |
| aspx.page |
End InitComplete |
| aspx.page |
Begin PreLoad |
| Page |
Start OnPreLoad(EventArgs e) |
| Page |
End OnPreLoad(EventArgs e) |
| aspx.page |
End PreLoad |
| aspx.page |
Begin Load |
| Page |
Start OnLoad(EventArgs e) |
| Page |
Page_Load(object sender, EventArgs e) |
| Page |
End OnLoad(EventArgs e) |
| MasterPage |
Start OnLoad(EventArgs e) |
| MasterPage |
Page_Load(object sender, EventArgs e) |
| MasterPage |
End OnLoad(EventArgs e) |
| UserControl |
Start OnLoad(EventArgs e) |
| UserControl |
Page_Load(object sender, EventArgs e) |
| UserControl |
End OnLoad(EventArgs e) |
| CustomWebControl |
Start OnLoad(EventArgs e) |
| CustomWebControl |
End OnLoad(EventArgs e) |
| aspx.page |
End Load |
| aspx.page |
Begin LoadComplete |
| Page |
Start OnLoadComplete(EventArgs e) |
| Page |
End OnLoadComplete(EventArgs e) |
| aspx.page |
End LoadComplete |
| aspx.page |
Begin PreRender |
| Page |
Start EnsureChildControls() |
| Page |
ResolveAdapter() |
| Page |
Start CreateChildControls() |
| Page |
End CreateChildControls() |
| Page |
End EnsureChildControls() |
| Page |
Start OnPreRender(EventArgs e) |
| Page |
End OnPreRender(EventArgs e) |
| MasterPage |
Start EnsureChildControls() |
| MasterPage |
ResolveAdapter() |
| MasterPage |
Start CreateChildControls() |
| MasterPage |
End CreateChildControls() |
| MasterPage |
End EnsureChildControls() |
| MasterPage |
Start OnPreRender(EventArgs e) |
| MasterPage |
End OnPreRender(EventArgs e) |
| UserControl |
Start EnsureChildControls() |
| UserControl |
ResolveAdapter() |
| UserControl |
Start CreateChildControls() |
| UserControl |
End CreateChildControls() |
| UserControl |
End EnsureChildControls() |
| UserControl |
Start OnPreRender(EventArgs e) |
| UserControl |
End OnPreRender(EventArgs e) |
| CustomWebControl |
Start EnsureChildControls() |
| CustomWebControl |
ResolveAdapter() |
| CustomWebControl |
Start CreateChildControls() |
| CustomWebControl |
End CreateChildControls() |
| CustomWebControl |
End EnsureChildControls() |
| CustomWebControl |
Start OnPreRender(EventArgs e) |
| CustomWebControl |
End OnPreRender(EventArgs e) |
| aspx.page |
End PreRender |
| aspx.page |
Begin PreRenderComplete |
| Page |
Start OnPreRenderComplete(EventArgs e) |
| Page |
End OnPreRenderComplete(EventArgs e) |
| aspx.page |
End PreRenderComplete |
| Page |
SaveViewState() |
| MasterPage |
SaveViewState() |
| UserControl |
SaveViewState() |
| CustomWebControl |
SaveViewState() |
| aspx.page |
Begin SaveState |
| Page |
SaveViewState() |
| Page |
HasControls() |
| MasterPage |
SaveViewState() |
| MasterPage |
HasControls() |
| UserControl |
SaveViewState() |
| UserControl |
HasControls() |
| CustomWebControl |
SaveViewState() |
| CustomWebControl |
HasControls() |
| Page |
Start SavePageStateToPersistenceMedium(object state) |
| Page |
ResolveAdapter() |
| Page |
End SavePageStateToPersistenceMedium(object state) |
| aspx.page |
End SaveState |
| aspx.page |
Begin SaveStateComplete |
| Page |
Start OnSaveStateComplete(EventArgs e) |
| Page |
End OnSaveStateComplete(EventArgs e) |
| aspx.page |
End SaveStateComplete |
| aspx.page |
Begin Render |
| Page |
CreateHtmlTextWriter(System.IO.TextWriter tw) |
| Page |
Start RenderControl(HtmlTextWriter writer) |
| Page |
Start Render(HtmlTextWriter writer) |
| Page |
Start RenderChildren(HtmlTextWriter writer) |
| MasterPage |
Start RenderControl(HtmlTextWriter writer) |
| MasterPage |
Start Render(HtmlTextWriter writer) |
| MasterPage |
Start RenderChildren(HtmlTextWriter writer) |
| UserControl |
Start RenderControl(HtmlTextWriter writer) |
| UserControl |
Start Render(HtmlTextWriter writer) |
| UserControl |
Start RenderChildren(HtmlTextWriter writer) |
| UserControl |
End RenderChildren(HtmlTextWriter writer) |
| UserControl |
End Render(HtmlTextWriter writer) |
| UserControl |
End RenderControl(HtmlTextWriter writer) |
| CustomWebControl |
Start RenderControl(HtmlTextWriter writer) |
| CustomWebControl |
Start Render(HtmlTextWriter writer) |
| CustomWebControl |
Start RenderBeginTag(HtmlTextWriter writer) |
| CustomWebControl |
Start AddAttributesToRender(HtmlTextWriter writer) |
| CustomWebControl |
End AddAttributesToRender(HtmlTextWriter writer) |
| CustomWebControl |
End RenderBeginTag(HtmlTextWriter writer) |
| CustomWebControl |
Start RenderContents(HtmlTextWriter writer) |
| CustomWebControl |
Start RenderChildren(HtmlTextWriter writer) |
| CustomWebControl |
End RenderChildren(HtmlTextWriter writer) |
| CustomWebControl |
End RenderContents(HtmlTextWriter writer) |
| CustomWebControl |
Start RenderEndTag(HtmlTextWriter writer) |
| CustomWebControl |
End RenderEndTag(HtmlTextWriter writer) |
| CustomWebControl |
End Render(HtmlTextWriter writer) |
| CustomWebControl |
End RenderControl(HtmlTextWriter writer) |
| MasterPage |
End RenderChildren(HtmlTextWriter writer) |
| MasterPage |
End Render(HtmlTextWriter writer) |
| MasterPage |
End RenderControl(HtmlTextWriter writer) |
| Page |
End RenderChildren(HtmlTextWriter writer) |
| Page |
End Render(HtmlTextWriter writer) |
| Page |
End RenderControl(HtmlTextWriter writer) |
| aspx.page |
End Render |
| Page |
CreateHtmlTextWriter(System.IO.TextWriter tw) |
What's the RX-8 Look Like?
Monday, June 26, 2006 9:19:24 AM (GMT Daylight Time, UTC+01:00)
It's been brought to my attention that some people out there STILL don't know what the RX-8 looks like so I thought I'd post a little photo of it here for you:

Visit Mazda's RX-8 Showcase Site
I'll try and post a few more later of the interior etc.
Growing Old Gracefully
Sunday, June 25, 2006 10:55:39 PM (GMT Daylight Time, UTC+01:00)
This morning we had the TV on while getting ready to go out and a new L'Oreal advert came on. If you haven't seen it, it has features Jane Fonda telling us how the product helps firm the skin etc, that she's 68 and look how great her skin is -the usual junk. Although the advert doesn't actually say the product is why she "looks so good" it leads you to believe that it is (great marketing btw) anyway, where am I going with this (other than stating the obvious)? Well, when the advert finishedI was left thinking "ok, so this cream makes your skin feeling younger" and "L'Oreal is the answer to all your old age prayers" but surely they're contradicting themselves a touch? Firstly they've got this attractive 68year old promoting this product as well as a 20-something saying "Use this and you won't look old when you're older". Well if Jane's 68 and looks like that (yeah yeah with all that plastic surgery etc) then why invest thousands in the anti-aging creams? -You can just use that one when you're 68. Oh and if she's 68 -don't people think "Hang on, she looks good, she's been around well before L'Oreal started pimping these promises so why should I buy it?" -just a thought! As I keep saying to Stacey, it's been long known that it's all in the genes -any guy that wants to know what his lovely lady is going to look like at 40 all he needs to do is look at her mum...
Here's a shot of Jane for those of you who don't know who she is/was (I didn't know it was her until I checked out the L'Oreal site
)

L'Oreal Website (For the product of the advert)
On that note, another advert was listing the signs a woman had noted of getting older -a grey/white hair here-or-there, a wrinkle or two and loosing her eyesight/hearing which again got me thinking, I don't think I'll even notice getting old. During the summer my hair goes white in the sun, I can't see, my hearing's not great at the best of times and as Stacey keeps reminding me I've already got wrinkles on my forehead so...
Error Reporting and the Trace in ASP.Net 2.0 -Code Update
Friday, June 23, 2006 5:34:31 PM (GMT Daylight Time, UTC+01:00)
I've just had it pointed out to me (and quite rightly so) by Craig that my code for enabling the trace with Phil Winstanley's WebException was a touch wrong. I was assuming that the user was (correctly imho) running the application with the trace already disabled. However correct that may be, it may not be the case so as pedantic as this is, the code snippet should really be:
TraceContext t = HttpContext.Current.Trace;
bool bCurrentState = t.IsEnabled;
t.IsEnabled = true;
WebException WE = new WebException();
WE.CurrentException = Server.GetLastError();
WE.Handle();
t.IsEnabled = bCurrentState;
Although I've adapted the code to accomodate this, I really wouldn't run production sites with the trace enabled as this is not only a performace hit but quite a security issue!
Crazy Job Advert
Friday, June 23, 2006 5:16:32 PM (GMT Daylight Time, UTC+01:00)
Sometimes you really do have to wonder what recruiters are thinking but something tells me, this guy isn’t going to get too many applicants!

Crazy Job Advert
The Advert can be seen here