Typing – two fingers, four fingers, etc.

They always say ex-smokers are the worst people at badgering smokers. Fortunately, I’ve avoided that path.


However, one I am going to have a little rant about is typing. And yes, I’m a reformed two/four finger typist.


I’d been in the industry since the 70’s but only learned to type around 1990. I so wish someone had convinced me to do it earlier.


If you work in this industry and you can’t use a keyboard effectively, now’s the time to change that.


I used TypeQuick and loved it. I have no idea how good their current versions are/aren’t but back then, it worked a treat for me. It was a frustrating program in that no matter how good you got, it just kept timing your keystrokes and pushing you that little bit harder.


The biggest problem I see with learning to type was that the programs assume you can spend an hour a day for about two weeks doing it. But they also assume you aren’t going to do the wrong thing in the meantime. I knew there was no way I could stop typing while I learned to type so I started early one Sunday morning and did the whole course. By nightfall, I could barely move.


But the worst part was the next few weeks where I had work to do with tight deadlines, knew I could do it faster the “wrong” way and had to force myself to do it the “right” way. Once a few weeks had passed, I was back up to my “old” typing speed and then over time, just left the old speed for dead. The other big difference was the improvement in accuracy and complete concentration on the screen, never the keyboard. Now I don’t even know how I type. I just think words and they appear on the screen.


The funny part is how much faster I can type code than something like a letter. Somehow, all the keywords, etc. of a language get burned into your brain; you think them and your brain somehow associates some finger movements with them and they appear. I suppose it’s a bit like autopilot when you are driving to work.


So, anyway, my Easter message is that I hope you have a great Easter but if you haven’t learned to type yet and you’re serious about working in this industry, this could be the right moment for you :-)


When I worked at a university, I suggested that was an ideal thing for students to learn to do in the first two weeks or so, when they haven’t learned enough of anything else to do any serious practical work yet.


The university staff seem to think somehow it’s “below” the organisation to have people learning to type. But then they spend the next 3 to 6 years trying to work out how to provide more computing labs, etc. for people pecking away at a keyboard :-(

April Update

I really enjoyed the sessions at the security summit around the country. Also had a fun session with the Sydney SQL Server User Group folk last Tuesday thanks!


Well, around the country we go again. This time it’s the April Update sessions (like an MSDN Update).


Dr Neil’s going to cover some XP topics at lunch time, I’ll be covering SQL Server 2005 security and Dave Glover’s going to show you how DTS has evolved and give you a peek at the new Report Builder app. Hope to see you all there. Details are at:


http://www.microsoft.com/australia/msdn/training/aprilupdate.aspx


 


 


 


 

A Tool I Really Want

One of the suggestions I’ve been working on with the INETA and MSDN Connection folk is a professional coding competition. The Imagine Cup is a wonderful competition for university students but I keep thinking the code that is created just doesn’t seem to end up anywhere, or at least not often.


What I think is needed is a competition for professional coders that offers significant recognition (a good prize would help too) but is targeted to produce something the community needs. The output of the competition would end up being donated to the community and become public domain. I think we need to suggest things that are really needed and we need to specify coding standards to maximise reuse of the code and to ease comparisons.


To kick this off, I’m offering a first suggestion for something that could be built. I’d like your feedback on it and on other topics. I’m hoping to kick these around at CodeCampOz as well for those that are there.


1st Suggestion: WinForm Access Keys


Setting tab orders was a major pain in the neck in VB6 and the new tab order editor in later versions of VS has removed any excuse for forms with poor tab orders. However, setting access/shortcut keys for controls, etc. is still a pain in the neck. I’d like to see a project that provides a tool that does the following:


1. Add-in for VS.NET that works with either VB.NET or C#.


2. Once you ask it to, it removes and resets all access keys (eg Open becomes &Open) for the form.


3. The tool allows for an XML-based list of “preferred keys“ in order of importance. (ie F for File menu, H for Help menu, etc if these exist). This would allow application of both Windows style guidelines and corporate standards.


4. It also processes any sub-menus if the form has a menu.


There needs to be some way to indicate which controls need access keys eg: some labels should have them, some shouldn’t. Perhaps this is an extender provider or perhaps the tool just pops up a list of controls with check boxes so you can select which controls it applies to.


What do you think?


 

Security Seminar Webcasts

Andrew Coates and I each rerecorded one of our security summit webcasts last night. The atmosphere’s not the same as a crowded room packed with developers (actually just the empty kitchen at home for me) but hopefully those that missed the sessions will get good value out of them.


Andrew’s awesome Click Once session is here.


My SQL Server 2005 Intro for Developers is here.


Note: from those links you can also download the replay software and then download the videos to watch offline.

Protect the master database part 2

I got lots of good feedback from the last post. As I mentioned, I really think the upcoming DDL_ALL will make it almost trival code. Also, just a note: I went for CHARINDEX rather than an XML query for performance and simplicity.


What I’ve also suggested to the dev team (via Dave Lean) is that we really should have a server option (in the advanced options list) that simply prevents these errors in the first place. I’d suggest that 99.9% of DDL mods in master are in error and SQL Server should provide support to avoid these.


Setting admin user default databases to tempdb is another option but I think it has the potential to break other things.

Protect the master database in SQL Server 2005

Over the years, I’ve accidentally run scripts in the master database more times than I care to remember. I mentioned it in the Ascend class that Bob Beauchemin was running today and everyone went “oh yes, we do that all the time“. I then realised I can “fix“ 99% of that in SQL Server 2005 with a DDL trigger.

 

Enjoy!

 

/* ProtectMasterDDL Trigger Example
   – March 2005 by Greg Low
   –
greg.low@readify.net
*/

USE master

GO

 

CREATE TRIGGER ProtectMasterDDL
ON DATABASE FOR
  CREATE_TABLE,ALTER_TABLE,DROP_TABLE,
  CREATE_VIEW,ALTER_VIEW,DROP_VIEW,
  CREATE_SYNONYM,DROP_SYNONYM,CREATE_FUNCTION,
  ALTER_FUNCTION,DROP_FUNCTION,
  CREATE_PROCEDURE,ALTER_PROCEDURE,DROP_PROCEDURE,
  CREATE_TRIGGER,ALTER_TRIGGER,DROP_TRIGGER,
  CREATE_EVENT_NOTIFICATION,DROP_EVENT_NOTIFICATION,
  CREATE_INDEX,ALTER_INDEX,DROP_INDEX,
  CREATE_STATISTICS,UPDATE_STATISTICS,DROP_STATISTICS,
  CREATE_ASSEMBLY,ALTER_ASSEMBLY,DROP_ASSEMBLY,
  CREATE_TYPE,DROP_TYPE,
  CREATE_USER,ALTER_USER,DROP_USER,
  CREATE_ROLE,ALTER_ROLE,DROP_ROLE,
  CREATE_APPLICATION_ROLE,ALTER_APPLICATION_ROLE,DROP_APPLICATION_ROLE,
  CREATE_SCHEMA,ALTER_SCHEMA,DROP_SCHEMA,
  CREATE_MESSAGE_TYPE,ALTER_MESSAGE_TYPE,DROP_MESSAGE_TYPE,
  CREATE_CONTRACT, –ALTER_CONTRACT
  DROP_CONTRACT,
  CREATE_QUEUE,ALTER_QUEUE,DROP_QUEUE,
  CREATE_SERVICE,ALTER_SERVICE,DROP_SERVICE,
  CREATE_ROUTE,ALTER_ROUTE,DROP_ROUTE,
  CREATE_REMOTE_SERVICE_BINDING,ALTER_REMOTE_SERVICE_BINDING,DROP_REMOTE_SERVICE_BINDING,
  GRANT_DATABASE,DENY_DATABASE,REVOKE_DATABASE,
  CREATE_XML_SCHEMA_COLLECTION,ALTER_XML_SCHEMA_COLLECTION,DROP_XML_SCHEMA_COLLECTION,
  CREATE_PARTITION_FUNCTION,ALTER_PARTITION_FUNCTION,DROP_PARTITION_FUNCTION,
  CREATE_PARTITION_SCHEME,ALTER_PARTITION_SCHEME,DROP_PARTITION_SCHEME
AS
  IF CHARINDEX(‘ProtectMasterDDL’,CONVERT(varchar(max),EVENTDATA())) = 0
  BEGIN
     PRINT ‘You may not perform DDL operations on the master database without disabling the ProtectMasterDDL trigger.’
     ROLLBACK
  END
GO