Everybody has got a point of view, but Mister God hasn't. Mister God only has points to view.
God made man in his own image, not in shape, not in intelligence, not in eyes or ears, not in hands or feet, but in this total inwardness.
Questions were a sort of inner itch, an urge to go forward. Questions, that is real questions, had this about them, they were exciting. You never quite knew where you were going to land.
She made no effort to help me catch her, no effort towards her own safety. Being safe meant not doing these things at all, being safe meant trust in another.
The daylight schooled the senses and the night-time developed the wits, stretched the imagination, sharpened fantasy, hammered home the memory and altered the scale of values.
'love' meant the recognition of perfectibility in another.
Monday, September 29, 2008
Installshield: Change product name, but not MSI file name
Want to change the product name of an installer but not change the MSI file name?
BTW. If you change the MSI file name you may break upgrades!
Simply change the product name and then under release, specify the 'MSI Package file name' to be the old product name. (the MSI file name defaults to the product name, if not explicitly specified.)
EDSK ... being a developer is not the same as being a designer
Every developer should know that being a developer is not the same as being a designer.
Just because you can program the server side of a website doesn't mean that you are the best person to design the graphics, layout, colour scheme or logos.
Just because you are an expert at optimising data retrieval from relational databases doesn't mean that you should be designing the layout of the forms used to display that data.
Or, if you're a design whizz, it doesn't mean that you should be writing the code of an application that uses your designs.
Why is this important?
Be honest with yourself. Know your limits. Focus on what you are best at. Let the people who are best at different tasks work on those tasks.
What do you do once you know this?
Don't be afraid to defer a task to someone better skilled.
It'll allow you more time to focus on what you're best at.
Would you rather be the developer of some amazing software that someone else designed? Or the developer and designer of some software that is only OK?
Just because you can program the server side of a website doesn't mean that you are the best person to design the graphics, layout, colour scheme or logos.
Just because you are an expert at optimising data retrieval from relational databases doesn't mean that you should be designing the layout of the forms used to display that data.
Or, if you're a design whizz, it doesn't mean that you should be writing the code of an application that uses your designs.
Why is this important?
Be honest with yourself. Know your limits. Focus on what you are best at. Let the people who are best at different tasks work on those tasks.
I know I'm not a great designer. Just look at this site. (One day I'll get a designer to make it better.)
I'm not saying you can't be both, just that most people aren't. What do you do once you know this?
Don't be afraid to defer a task to someone better skilled.
It'll allow you more time to focus on what you're best at.
Would you rather be the developer of some amazing software that someone else designed? Or the developer and designer of some software that is only OK?
Keywords in different version of SQL Server
Keywords in SQL Server 2000: http://msdn.microsoft.com/en-us/library/aa238507.aspx
Keywords in SQL Server 2005: http://msdn.microsoft.com/en-us/library/ms189822(SQL.90).aspx
Keywords in SQL Server 2008: http://msdn.microsoft.com/en-us/library/ms189822.aspx
(Added: MERGE)
Newer versions actually have fewer keywords.
disappointing prediction
There will be a new version (3) of the iPhone and devices running version 2 of Android in the shops before any Windows Mobile 7.0 devices.
;(
;(
Friday, September 26, 2008
I'm speaking at Dev Evening
Put the date in your diary, November 13th. My first user group presentation, on Windows Mobile.
Details here: http://www.devevening.co.uk/nextEvent.aspx
EDSK: Some unofficial research
I sometimes feel like I never post on EveryDeveloperShouldKnow.com. In reality I know I've got over 100 drafts that I've yet to finish. Why do I find finishing writing so hard?
Anyway, before I force myself to finish what I've started, I thought it was worth checking that other people agreed with my assumptions on what I thought was important.
I decided to do a bit of research and see what other people thought that other developers should know.
I only hope that the post I put on stackoverflow doesn't come more comprehensive than what I put on my site.
Anyway, before I force myself to finish what I've started, I thought it was worth checking that other people agreed with my assumptions on what I thought was important.
I decided to do a bit of research and see what other people thought that other developers should know.
I only hope that the post I put on stackoverflow doesn't come more comprehensive than what I put on my site.
Last nights Dev Evening
Had a good time at http://www.devevening.co.uk/ last night.
Another great presentation, this time from Craig Hogan on SEO.
Another great presentation, this time from Craig Hogan on SEO.
Wednesday, September 24, 2008
Poor ASP.NET error handling now slightly better
The highlighted part stops the javascript erroring if the erorr message contains CRLF. (Which most of the custom error messages in the system I'm working with do.)
try
{
...
}
catch (Exception ex)
{
DBUtils.RollbackTrans();
bdyDetail.Attributes.Add("onload", "javascript:alert('" + ex.Message.Replace("\r\n", "\\n") + "')");
}
}
catch (Exception ex)
{
DBUtils.RollbackTrans();
bdyDetail.Attributes.Add("onload", "javascript:alert('" + ex.Message.Replace("\r\n", "\\n") + "')");
}
Tuesday, September 23, 2008
Getting feedback
- Forum / get satisfaction / user voice
- Direct emails (contact us)
- Feedback option built into program
- Monitor the web (Google alerts) twitter?
- Ask for feedback on uninstall ???
- Crash reporting
Release plan
Release frequently.
Each release should contain:
Each release should contain:
- 1 new feature
- slight visual improvements (prettier)
- fewer bugs
SMS déjà vu - v0.2
SMS déjà vu is a side project I'm working on. I hope to write more about it in the future. A quick summary is that it's a Windows Mobile application for sending repeated SMS messages.
In this new version:
More details and a public version to follow...
In this new version:
- Number lookup from contact list.
More details and a public version to follow...
Monday, September 22, 2008
DropBox is cool
If you ever need to share files across multiple machines. I heartily recommend DropBox. I think it's great and is definitely saving me a lot of copying to removable drives. Plus it's free!
Saturday, September 13, 2008
EDSK ... that if debugging is the process of removing bugs... ;)
"If debugging is the process of removing bugs, then programming must be the process of putting them in."
- Edsger Dijkstra
Friday, September 12, 2008
Thursday, September 11, 2008
Tuesday, September 09, 2008
Not using a system properly?
Can a user not use a system properly?
I can see how they might not use it as it was intended or designed, but properly?
Assuming that properly means the same a correctly. (http://www.google.co.uk/search?q=define%3A+properly)
If a system can be used in a way other than a correct one, doesn't that mean that the program is at best flawed or, at worst, contains errors?
I suspect that this phrase ("not using it properly") is typically used when they mean not as intended. If that is the case it means that the program is unnecessarily complicated. Doesn't it?
I can see how they might not use it as it was intended or designed, but properly?
Assuming that properly means the same a correctly. (http://www.google.co.uk/search?q=define%3A+properly)
If a system can be used in a way other than a correct one, doesn't that mean that the program is at best flawed or, at worst, contains errors?
I suspect that this phrase ("not using it properly") is typically used when they mean not as intended. If that is the case it means that the program is unnecessarily complicated. Doesn't it?
Incorrect shortcut icon in start menu
Had an issue with an InstallShield 11 created installer.
One of the installed shortcuts was displaying a `default` exe icon, rather than the one specified.
Digging in the MSI, with Orca, showed that the shortcut incorrectly had an IconIndex of 1.
The Installshield IDE displayed an icon index of 0.
Something was obviously wrong.
The "Icon" table, in XML mode, showed the problem:
It was:<row><td>NewShortcut2_B78C30FEFEEC4393B73638863E86FFA5.exe</td><td/><td><PATH_TO_PROGRAM FILES_FILES>\StatMon.exe</td><td/></row>
Instead of:
<row><td>NewShortcut2_B78C30FEFEEC4393B73638863E86FFA5.exe</td><td/> <td> <PATH_TO_PROGRAM FILES_FILES>\StatMon.exe</td><td>0</td></row>
The IDE was showing a different value, if none was specified, than was put into the MSI.
Friday, September 05, 2008
My First Ubiquity command
It redirects the current tab to the root of the current domain. - I find this helpful when there isn't a home link on a website.
/// http://blog.stevenlevithan.com/archives/parseuri /* parseUri 1.2.1 (c) 2007 Steven LevithanMIT License */ function parseUri (str) { var o = parseUri.options, m = o.parser[o.strictMode ? "strict" : "loose"].exec(str), uri = {}, i = 14; while (i--) uri[o.key[i]] = m[i] || ""; uri[o.q.name] = {}; uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) { if ($1) uri[o.q.name][$1] = $2; }); return uri; }; parseUri.options = { strictMode: false, key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], q: { name: "queryKey", parser: /(?:^|&)([^&=]*)=?([^&]*)/g }, parser: { strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ } }; function cmd_domain_home() { // heavily ripped from Utils.openUrlInBrowser var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); var browserWindow = windowManager.getMostRecentWindow("navigator:browser"); var browser = browserWindow.getBrowser(); var uriParts = parseUri(browser.mCurrentBrowser.currentURI.spec); browserWindow.loadURI(uriParts.protocol + "://" + uriParts.host + "/", null, null, false); }
Defrag chaos
This is after I managed to delete unneeded files from the C drive, which had run out of space.
Lesson for the day: If someone is responsible for admin of a key (read business critical) server, don't let them go on holiday if you'll have to pick up the pieces and sort out any problems, when it hasn't been proactively managed, while that person is away.
Wednesday, September 03, 2008
Tuesday, September 02, 2008
Example of poor usability
It's definitely a good idea to be consistent within software. This is especially true when indicating special behaviour or requirements.
For example. It's not a good idea to highlight a textbox in one part of a program to indicte that it is a required field and then highlight a textbox in another part of the program, in the same way, to indicate that the text box is read only.
For example. It's not a good idea to highlight a textbox in one part of a program to indicte that it is a required field and then highlight a textbox in another part of the program, in the same way, to indicate that the text box is read only.