Tuesday, December 16, 2008

10 Useful Techniques To Improve Your User Interface Designs

Here is an article a friend at work forwarded to me. They are worth remembering.

Saturday, December 06, 2008

Holy Handywoman!

or "My Breakthrough in Handymanliness"

I have serious issues about not being an adequate handyman. Often I get frustrated and/or overwhelmed and then avoid it.

Last summer, our clothes washer (Whirlpool Model #LSQ9544KQ0) would stop in the spin cycle. We figured out that we could put a detergent bottle on the lid and it would continue. The number of bottles and people required to make it finish mounted until it refused to work a few days ago.

I first thought of how much money we would have to spend on buying a new one. I completely avoided the thought of repairing it. It is over 7 years old and I thought it may just be time. Stephanie remembered that we had the same problem some time ago and had a repairman out to fix it. She found the part that he used to fix it. This encouraged me. Thursday evening I researched where to buy it and yesterday morning I stopped by Appliance Parts Co and bought a lid switch assembly for $42.64.

This morning I planned on fixing it together. I am more confident when she is there to support (show me) me. I got our tools out and started looking for things to take apart. Steph looked up instructions and diagrams on how to open up the washer. We found an illuminating video that gave us an idea of how to get it open. Steph figured out I had taken out the wrong screws.

Once we took the correct screws out we were able to flip up the control panel, pop off the clamps and open the front of the washer following the great how-to video we found. It was relatively simple to take off the switch assembly and put in the new one.

It turned out that Steph was the one doing all the handy-work and I handed her tools. It reminded me of when I was a boy helping out my dad. It is kind of like when we are explaining the rules of a game. She doesn't want to start. I get going and then she finishes.

The whole experience was small on frustration and large on satisfaction. We saved several hundred dollars and my handy-ego has been boosted. I am going to do all my handy-work with her from now on. (Like I ever do it at all).

TortoiseSVN ignore-on-commit

I wanted to be able to have my web.config in the repository but not have certain working copies commit. I found "ignore-on-commit" at http://tortoisesvn.tigris.org/tsvn_1.5_releasenotes.html. I think this will work best for me.

I have also used the strategy at http://subversion.tigris.org/faq.html#ignore-commit. It ensures all working copy web.config files never get committed. You have to manually copy the contents of the renamed, unversioned web.config to the versioned template.

** Update 2009-03-26 **

I tried to use this again and forgot how to do it. The change list help page clearly states that you do a context menu on the file you want to add to a change list within the commit or check-for-modifications dialog box. I kept trying to see it in the window folder context menu for the file I wanted to add to a change list.

Thursday, November 27, 2008

Change the number of rings

This is how you change the number of rings before your phone goes to voice mail for Cox phone service in Phoenix.

Press *78. Then press the number of ring you want till is goes to voice mail.

Friday, November 14, 2008

What does Agile mean?

This sums up what I think of when think of Agile software development, "Agile is about creating better products, and making the process less painful along the way". I found it in the cooper.com article The missing piece: How interaction design can add to Agile.

It reminds me of a conversation I had with another developer. We were talking about creating some kind of job tracking system so we can more accurately identify how much each widget costs. The conversation came down to, "Make it painless yet required". You don't want to tax the time of your producers, yet you want to more accurately capture costs per widget.

That is the idea of continuous integration. Whenever your code is committed, the unit tests on the build machine start running. They soon let you know if your changes broke any existing tests.

Some other quotes I like from the article:

"Agile helps people focus on the value the product delivers to real people"

"A focus on working code helps Agile projects stay honest."

"The Agile process does not provide tools to define key business or user experience objectives"

Tuesday, October 28, 2008

Dominant, Expressive, Analytical and Amiable

In July, I attended a personality seminar run by Persogenics. I have done several personality, self helpy things in my life. Sometimes I get a little wary of this kind of thing. There are a few things I found useful from the seminar.

The workshop focused on improving the communication between people with very different styles. There are four patterns people use to communicate: Dominant, Expressive, Analytical and Amiable. Most people have a primary and secondary way of communicating.

One of the best stories was one the facilitator told of a rafting trip they went on as a company. It was a hoot to hear how the people of the different styles interacted with each other.

The bottom line for me were two things to remember per communication style. One was what the person of the style was to remember. The other was what others could keep in mind when communicating with the person. This is what I remember:

A dominant communicator should remember to ask not tell. Others should remember to take them seriously but not personally.

An expressive communicator should let others know when they are talking out loud. Others should restate what they heard them say. If appropriate, touch them to let them know you understand what they said. Paraphrase, playback.

An analytical communicator should let others know when they are thinking, "Let me think for a moment". Others should give them time (5-10 seconds) after asking them a question.

An amiable communicator should remember to speak up now, sooner is better than later. Others should ask to ask, "May I ask you something?"

This came up for my wife and I last night. It has helped us to avoid misunderstandings. It may help me at work too. It will serve me to remember these lessons.

Thursday, October 09, 2008

Wednesday, September 24, 2008

View HTML Color

Occasionally, I need to see what an HTML color looks like.  This site was useful.

Friday, September 19, 2008

Google Chrome is an Operating System

I generally liked the look and feel of Google's Chrome browser when I first tried it.  Today I found the Google Chrome Task Manager. There is more at Google Chrome's Full List of Special about: Pages.

There is a good introductory video at 10 Features of Google Chrome.  Quite impressive.

Wednesday, September 17, 2008

Solar Noon

I have an uncommon interest in timezones and solar patterns.  A while ago I wondered where in the MST does the timezone time and the solar time match.  

One way to find out is to find the location where is it solar noon on an equinox day.  A friend of mine used solar-noon.com to figure out that Albuquerque is where solar noon and MST noon are the same (see chart).  Kind of funny that is always daylight savings on the equinox days.

I just noticed that the spring equinox is not noon.  I am not sure what that means.

Wednesday, August 27, 2008

Delete Temporary ASP.NET Files

IIS caches the dlls my ASP.NET project references. On my development box sometimes it does not copy the new files over. To ensure that IIS is using your latest files

- From command line issue a "IISReset /stop" command to stop IIS
- Delete the C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\ folder
- Start IIS with "IISReset"

Friday, August 22, 2008

View Message Source in Outlook 2003

The Lazy Admin was useful to me today
The other day I wrote how to view message headers in OWA, and recieved a lot of mail asking if this can be done it Outlook as well. If you have ever used Outlook Express, you might be familiar with the View --> Source option. In Outlook this feature does not exist.

Outlook gives you the option to View --> Options which will display the e-mail header. To enable the View --> Source functionality in Outlook 2003 open up regedit and drill down to:


Create a new Reg_DWORD called SaveAllMIMENotJustHeaders and give it a value of 1. This will enalbe the View --> Source option in Outlook 2003 but there are a few exceptions. It will only work for messages received after the change has been made and will not work with MAPI connections (i.e. Exchange mailboxes). You will only have this option for mail received from Internet transports (i.e. POP3)

Where is the rawurlencode of ASP.NET?

I could not find a function in ASP.NET that behaves like PHP's rawurlencode. System.Web.HttpUtility and HttpServerUtility both have UrlEncode and UrlPathEncode. So I created the function below to extend UrlEncode to manually encode the characters that kept the the filenames from working as an <a href path

/// <summary>
/// HttpUtility.UrlEncode() and Server.UrlEncode()
/// do not urlencode some special characters.
/// This procedure ensures that the file part of the
/// url returned is properly encoded
/// Used http://www.voormedia.com/en/tools/url-encoder-php-asp-urlencode.php
/// to see what characters urlencode to
/// Also http://en.wikipedia.org/wiki/Url_encoding
/// </summary>
/// <param name="Filename"></param>
/// <returns></returns>
public static string GetUrlEncodedFilename(string Filename)
string FileNameEncoded = "";
if (Filename != null)
{ FileNameEncoded = HttpUtility.UrlEncode(Filename);
//UrlEncode encodes spaces to pluses. http://forums.asp.net/t/1231078.aspx
FileNameEncoded = FileNameEncoded.Replace("+", "%20");
//Encode ' so the href specification does not terminate
FileNameEncoded = FileNameEncoded.Replace("'", "%27");
} return FileNameEncoded;

Here is an online HTML encoder I used to be able to format the code to show up correctly.

Sunday, August 03, 2008

Wireless Mastered!

I recently split up my two computers at home. One upstairs and one down. I decided to set up a wireless network. It has been frustrating. I ended buying a new wireless router and a new wireless network card. I did get a better signal, but my wireless machine would not connect automatically.

The solution that finally worked was to disable the LinkSys software managing the network card. Use Windows to manage the connection.

Right click on your network adapter and choose view available network connections. From that screen pick the manage preferred networks. You get the follow dialogs. Manually enter the SSID and other information like your wireless router has them. Bingo, my wireless machine connects automatically, every time.

Wednesday, July 09, 2008

Use your wings, try it again

It has been nearly 3 years since I wrote Use your wings. There is a new guy working here. We have been considering actually implementing unit tests, continuous integration. This kind of work requires front loading the process. He said something that caught my attention, "Pay the price to reduce the friction".

I have had reticence. I have been resisting this kind of change. I am nearing the end of a long project. I am not in the frame of mind to start this kind of investment in time and brain power.

In many ways for the last three years I have wondered and the power of using my wings. I have even these more effective processes a bit. Many times I have given up and walked home.

I still believe there is large improvements that can be made in my software development methodology. I commit to doing my best to suspend my disbelief. To incrementally start using units tests then continuous integration.

Wednesday, July 02, 2008

I get an exception until I delete my *.suo file

A colleague of mine just found the solution to a particularly hard kind of exception raised in Visual Studio 2008. He merged a branch he had made in SVN into the main dev branch. All of a sudden, the project threw an exception, but only in debug mode.

He figured it out by copying file by file from the working folder of his branch to the working folder of the merged branch. Everything was the same except the *.suo file. Once he copied it, it was fine.

It ended up being an option he had set in the "Break when an exception is" dialog box. You get to this from the Debug/Exceptions menu.

Some time beforehand, he had the check box thrown checked for "Common Language Runtime Exceptions". So in debug mode, he was seeing an exception in the .NET runtime that was handled in a try block. You can F5 through the exception because it is handled. If you are not used to seeing handled exceptions this will throw you off.

The problem here is that anyone searching for this error would have to know the solution before being able to find it. Normally you Google the exception text. That could be anything.

So beware! Use the VS 2008 "Break when an exception is" dialog with caution. And then revert back to the default settings as soon as you are done.

Wednesday, June 18, 2008

Getting Null Values into the database by Stored Procedures

This is how I got null values into the database using MS-SQL Server, C# 3.5 and the System.Data.SqlClient.SqlCommand.

CREATE TABLE [dbo].[UserInfo](
[UserID] [int] IDENTITY(1,1) NOT NULL,
[FNAME] [nvarchar](50) NULL

@UserID int
,@FNAME nvarchar(50)

private void AddUserInfo(int UserId, string FName
, ...)

System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand();
command.Parameters.Add("@FName", SqlDbType.NVarChar, 50);
command.Parameters["@FName"].Value = FName ?? (object)DBNull.Value;

It check for a null value and sends in the required DBNull.Value instead. This what I originally had in AddUserInfo

command.Parameters["@FName"].Value = FName;

If I pass in a null value in FName into AddUserInfo, it sends the following to the SQL Server

exec usp_UserInfo_Add @UserID = 801678, @FName = default

There is no default defined on the stored procedure so it fails saying you did not provide a value for a required parameter.

Another solution would have been to define a default value in the stored procedure as follows.

@UserID int
,@FNAME nvarchar(50) = NULL

Then I could pass a null value in FName into AddUserInfo, the stored procedure would provide NULL as the default.

Saturday, May 24, 2008

Home Network with XP Home Edition

I asked our network admin from work if he would help me connect my two computers at home.

One is a XP Home Edition and the other is XP Proferssional. I have a netgear router hooked to the computer. The router is hooked to the cable modem. I want to share files between them and be able to get to the printer from both. He offer a few settings to look at. I ended up using only two tips to get this accomplished.

- Put both machines in the same workgroup. I think this is what allowed them to ping each other.

At this point I could connect from the Home Edition to the Professional. I could then get to C$ after logging in as a admin user of the Pro machine. I could not however, get to the Home machine from the Pro one.

- Go through the Network Setup Wizard on the Home Edition PC. This is found at Start | All Programs | Accessories | Communications | Network Setup Wizard. See Practically Networked.

The only catch is that I have to explicitly add folders to my SharedDocs folder on the Home Edition in order for them to be available on the Pro.

I dragged the printer I wanted from Home Edition to Pro. Now I can print from the Pro machine.

Friday, May 23, 2008

Beyond Compare File Filters

I don't know why I did not know this before. I use Subversion and I always want Beyond Compare to ignore the _svn folder in my working copies.

Go to the Session\File Filters menu. Add "_svn" to the Exclude folders text box.

Now I never have to see_svn folders in beyond compare again.

Wednesday, May 21, 2008

Tab Delimited Results From SQL Server

Here is how you can export your SQL Server 2005 Management Studio results to a tab delimited file, including the column names.

Navigate to Tools | Options | Query Results | SQL Server | Results to Text

The settings only apply to new query windows opened.


Server Up Time

For a windows machine,

"The 'net statistics workstation' command will tell you the last time your
computer was rebooted."


Wednesday, May 14, 2008

Improve My Software Delivery Commitments

In Oct 07 I first read about the Evidence Based Scheduling feature of FogBugz. I like reading Joel Spolsky because he seems to tell it straight regardless of the subject. This time, it stung. Software projects are chronically late. Most projects I have been on in the last 9 years are no exception. When I read this article, I took up courage to ask a co-worker about it. He was excited about using something like this.

Well we took the plunge. We tried FogBugz for a month in January and then bought some licenses. I recently got a new supervisor. She seems willing to try out FogBugz as our software project management tool.

From Evidence Based Scheduling,
Why won’t developers make schedules? Two reasons. One: it’s a pain in the butt. Two: nobody believes the schedule is realistic. Why go to all the trouble of working on a schedule if it’s not going to be right?

Over the last year or so at Fog Creek we’ve been developing a system that’s so easy even our grouchiest developers are willing to go along with it. And as far as we can tell, it produces extremely reliable schedules. It’s called Evidence-Based Scheduling, or EBS. You gather evidence, mostly from historical timesheet data, that you feed back into your schedules. What you get is not just one ship date: you get a confidence distribution curve, showing the probability that you will ship on any given date. It looks like this:

The steeper the curve, the more confident you are that the ship date is real.
Here is a 70 minute video Joel Spolsky made in Oct 07 that explains the Evidence Based Scheduling feature of Fogbugz.

Frederick P. Brooks in 1987,
Not only are there no silver bullets now in view, the very nature of software makes it unlikely that there will be any—no inventions that will do for software productivity, reliability, and simplicity what electronics, transistors, and large-scale integration did for computer hardware.... I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation.... If this is true, building software will always be hard. There is inherently no silver bullet.
Fogbugz is not the golden goose that will solve all software development problems. As I persist in my discipline to use it, it will help me make more accurate delivery estimates.

Wednesday, April 02, 2008

"An order of magnitude better"

We have been looking for one of the best programmers at my work. Since my supervisor no longer can do the leg work of phone screening and setting up interviews, I have volunteered to take this hat. It has been a revealing exercise.

There is a consensus in the software development industry that the best programmers are "an order of magnitude better than the average ones" Spolsky.
A Guide to Hiring Programmers: The High Cost of Low Quality, revsys.com

"there is at least an order of magnitude of skill difference between the average programmer and the best programmer, and maybe even two orders of magnitude" Barnes.

"many studies have shown order of magnitude differences in the quality of the programs written, the sizes of the programs written, and the productivity of the programmers" McConnell

"[Bill] Curtis observed order of magnitude differences among the programmers" McConnell

Skill Disparities in Programming. Atwood.
I am by no means one of the best programmers. I generously consider myself in the upper end of average. One of the things I remember from my interview with Vitrix years ago was that they wanted to hire people smarter than themselves.

With the help of another programmer and a few resources on the web, I have gathered a list of interview questions that discover the skills and qualities of a developer. I am sure we will find a match with someone passionate about effective software development.

is our job posting, by the way. If you think you fit the drive, curiosity and skills to join us, come on! Even if you think you are shy on experience, take a plunge. We will be gentle.

Tuesday, April 01, 2008

C# XML documentation

We are using sandcastle to generate help documents from xml comments of our code.

Remember, /// will get you started.

C# XML documentation comments FAQ

MS Windows Workflow Foundation

Someone as work mentioned that we might consider MS Windows Workflow Foundation after hearing us describe the project we have been creating for the last many months. Following are some notes I took in my introduction to it.

ASP.NET and Windows Workflows Foundation

Manage application processes with Windows Workflow Foundation Brian Noyce

Link to a poster of Microsoft .NET Framework 3.5 update to the Commonly Used Types and Namespaces.

Notes from Michael Stiefel on Windows Workflow Foundation
1 of 4

"Workflow is the automated processes of a Business Process" Reliable Software

Reusable Business Activities
Separate Workflow from Activity

This workflow is hosted somewhere. Sharepoint?

Workflow runtime

Concept of Host
Concept of Activity
Concept of Workflow

The dream is these activities will be manipulated by Business Analysts in a drag and drop way.

2 of 4

Activities are not small atomic. These are long processes.
Programmers cannot stay in the back room. You are not of high value. You are just a coder.

Tuesday, March 25, 2008

Just Do It

After having a conversation with a collegue where we turned grandiose in our plans, he became frustrated because of the obstacles in our company. I said, "do get some code working and you'll feel better". Joel had this to say in Getting Things Done When You're Only a Grunt.
A lot can be done to improve the project just by one person doing it. Don't have a daily build server? Make one. Set your own machine up with a scheduled job to make builds at night and send out email results. Does it take too many steps to make the build? Write the makefile. Nobody does usability tests? Do your own hallway usability tests on the mailroom folks with a piece of paper or a VB prototype.

Outbound Filter or Inbound Filter

I have had three occasions to remember Joel's reference to tact filters. He said
there's always some person without an outbound filter who feels compelled to tell you about how he uses Opera, so he doesn't have this problem, although, frankly, I could care less what Anonymous uses. He's not even human to me, he's anonymous.
Joel refers to Jeff Bigler's description of Tact Filters. Here is Jeff's entire post.
I came up with this idea several years ago in a conversation with a friend at MIT, who was regularly finding herself upset by other people who worked in her lab. The analogy worked so well in helping her to understand her co-workers that I decided to write it up and put it on the web. I've gotten quite a few email messages since then from other people who have also found it helpful.

All people have a "tact filter", which applies tact in one direction to everything that passes through it. Most "normal people" have the tact filter positioned to apply tact in the outgoing direction. Thus whatever normal people say gets the appropriate amount of tact applied to it before they say it. This is because when they were growing up, their parents continually drilled into their heads statements like, "If you can't say something nice, don't say anything at all!"

"Nerds," on the other hand, have their tact filter positioned to apply tact in the incoming direction. Thus, whatever anyone says to them gets the appropriate amount of tact added when they hear it. This is because when nerds were growing up, they continually got picked on, and their parents continually drilled into their heads statements like, "They're just saying those mean things because they're jealous. They don't really mean it."

When normal people talk to each other, both people usually apply the appropriate amount of tact to everything they say, and no one's feelings get hurt. When nerds talk to each other, both people usually apply the appropriate amount of tact to everything they hear, and no one's feelings get hurt. However, when normal people talk to nerds, the nerds often get frustrated because the normal people seem to be dodging the real issues and not saying what they really mean. Worse yet, when nerds talk to normal people, the normal people's feelings often get hurt because the nerds don't apply tact, assuming the normal person will take their blunt statements and apply whatever tact is necessary.

So, nerds need to understand that normal people have to apply tact to everything they say; they become really uncomfortable if they can't do this. Normal people need to understand that despite the fact that nerds are usually tactless, things they say are almost never meant personally and shouldn't be taken that way. Both types of people need to be extra patient when dealing with someone whose tact filter is backwards relative to their own.

Friday, March 21, 2008

MST, MDT, MT or Mountain Time

I have had an uncommon interest in time zones ever since I developed software to handle them in NetTime. Living in Arizona has added to this. We buck the daylight savings system most states follow in the USA.

So this morning I was prompted by a pet peeve. When referring to a time zone which one is most appropriate to use?
MST (Mountain Standard Time)
MDT (Mountain Daylight Time)
MT (Mountain Time)

Grammar Girl says,
"It seems to me that people often don't even know whether it is standard time or daylight-saving time. It doesn't hurt to use EST or PST, but I've certainly seen people write PST when it is daylight-saving time, so I think it's fine to say just eastern time or Pacific time. It's better to leave off a detail than to get it wrong!"
I agree with grammar girl. If you have the discipline to use CST or CDT accurately, go ahead. Otherwise, you should play it safe. For March 20, 2008, use "The server issue was resolved at approximately 6:30 AM Central Time". Grammar Girl continues to describe a frustration that Arizonans can relate to.
"Also, after living in Arizona and missing enough meetings because of time-zone confusion, I like to spell things out as clearly as possible, so I appreciate it when people say something like "We're meeting at 1:00 p.m. eastern time -- that's 10:00 a.m. your time." (Of course, then you need to make sure you do the conversion right.)"

Thursday, March 20, 2008


We have been navigating the red tape in our company to get some software tools we want to be effective. This quote from Milton Friedman kept coming to my mind.

There are four ways in which you can spend money. You can spend your own money on yourself. When you do that, why then you really watch out what you're doing, and you try to get the most for your money. Then you can spend your own money on somebody else. For example, I buy a birthday present for someone. Well, then I'm not so careful about the content of the present, but I'm very careful about the cost. Then, I can spend somebody else's money on myself. And if I spend somebody else's money on myself, then I'm sure going to have a good lunch! Finally, I can spend somebody else's money on somebody else. And if I spend somebody else's money on somebody else, I'm not concerned about how much it is, and I'm not concerned about what I get.
Here is a video of Milton Friedman about this. Here is a chart of the quadrants he talks about.

We have been working in quadrant III. Trying to get our company to spend their money on tools we need. We had to convince them that they will get a timely return on their investment.

Key words: budget

Wednesday, March 19, 2008

Programs I use at work

Here is a list of programs I like to use at work. Someday I may need this list to install some of my favorite apps.
Prioritized 2016-01-14

Beyond Compare
Calendar 2000
CutePDF Writer
DS Clock - Time format "h:mm t", Arial (9 pt.), disable sound, pale green background, black text
Internet Download Manager
MS Visual Studio 2013
MS SQL Management Studio
Unlocker 1.9.2
VLC Media Player

Crimson Editor 3.70 - Has column mode editing [Edit/Column Mode Alt+C ] and it is open source
Also has Convert Tab to Spaces (Document/Tabs & Spaces/...)
-- TortoiseSVN
Log Parser 2.2
NeoShooter, 4.0.3b*
Regex Coach
Simple-Adblock.com (Ad Blocking for Internet Explorer)

If your menu toolbar is not visible you get to these settings by clicking on the "Firefox orange button in the title bar and then choose AddOns.
Change the Alt+Tab behavior to the FF and Chrome default. In the "Tab Opening" tab, uncheck Location under the "Open new tabs for". This will allow the same behavior as before where Alt+enter opens in a new tab.

Adjust the appearance given to unread tabs.  Under the Appearance button, choose Tabs.  In the Tab Highlighting section, click Unread.  Uncheck enabled. I do not need to be so distracted just because one of my tabs refreshed itself.  For the "Current" Tab uncheck the color.  It is also distracting.

- Omnibar  Instead of Omnibar, customize what is shown in the navigation tool bar. Right-Click in the tool bar and choose customize.  Drag the items you do not want into the Customize toolbar dialog.  I drag everything except the address bar, the refresh button, the stop button, Ad-Block Plus and favorites.  The address bar in FF seems to behave like the omnibar in Chrome.  There is no need for the search box.

Blank screen saver
- path "C:\WINDOWS\system32\scrnsave.scr"
- Shortcut key Ctrl+Shift+F
- Put the shortcut on your desktop and you can always hit the shortcut to quickly eliminate the screen and the distraction while on a phone call and then instantly return to your work.
Foxit Reader (PDF), 2.0*
Dropper - get the color of any pixel on the screen

Chocolatey - a command line download and installation utility for windows
The following commands use Chocolatey to download and install stuff
"choco install 7zip.install" "choco install 7zip.install" install 7zip and put 7zip in the path.
"choco install gow" installs Gnu On Windows, lightweight alternative to Cygwin

* Older or hard to find version. I may have to login to pages.google.com to get these through a web filter.

Monday, March 17, 2008

"8 billion existing web pages be damned"

"8 billion existing web pages be damned" is my favorite one-liner from the latest article on JoelOnSoftware.com. It is was the idealists said when they said IE8 needed to be strict when rendering web pages.

It is a good description of the chasm between idealistic engineers and compliance with the standards and pragmatists who want to make the software work with the existing customer base.

There is no solution. Each solution is terribly wrong. Eric Bangeman at ars technica writes, “The IE team has to walk a fine line between tight support for W3C standards and making sure sites coded for earlier versions of IE still display correctly.” This is incorrect. It’s not a fine line. It’s a line of negative width. There is no place to walk. They are damned if they do and damned if they don’t.

That’s why I can’t take sides on this issue and I’m not going to. But every working software developer should understand, at least, how standards work, how standards should work, how we got into this mess, so I want to try to explain a little bit about the problem here, and you’ll see that it’s the same reason Microsoft Vista is selling so poorly, and it’s the same issue I wrote about when I referred to the Raymond Chen camp (pragmatists) at Microsoft vs. the MSDN camp (idealists), the MSDN camp having won, and now nobody can figure out where their favorite menu commands went in Microsoft Office 2007, and nobody wants Vista, and it’s all the same debate: whether you are an Idealist (”red”) or a Pragmatist (”blue”).


Friday, February 15, 2008

TIOBE Programming Community Index

I looked at this several years ago. It is interesting to see the long term trends of programming languages.

The TIOBE Programming Community index gives an indication of the popularity of programming languages. The index is updated once a month. The ratings are based on the world-wide availability of skilled engineers, courses and third party vendors. The popular search engines Google, MSN, Yahoo!, and YouTube are used to calculate the ratings. Observe that the TIOBE index is not about the best programming language or the language in which most lines of code have been written.

It has a nice graph displaying the trends.

Thursday, February 14, 2008

Could not load type error in VS 2005 Web Application

Occurring in an existing project

Occasionally I get an error like
Could not load type 'MOS5.MOSLinks'

when editing a web page. I have seen a lot of posts that address this error. For MOS5 it has always come down to case sensitivity.

I end up comparing the existing version to a previous one. Today I noticed that the MOSLinks.aspx.vb had this at the top of the file.

Imports MOS5.mosLinks

I edited this line in MOSLinks.aspx


to this


After compiling, the error went away.

Occurring in a newly published project

Make sure the folder you are publishing to is a virtual directory.

Repeat a String n Times

I was looking to repeat a string n times using only T-SQL. My friend found it in this article. This reference may prove useful later.

From SQL BOL 2000:
Replicate - Repeats a character expression for a specified number of times.

Wednesday, February 13, 2008

Keyboard Shortcuts in Gmail


c = Compose
/ = put cursor in Search box

Maybe these will save me time

Tuesday, February 12, 2008

Beyond Compare File Comparison Rules

I was comparing two versions of my code. The right side of my comparison had tabs the left had spaces. Visual Studio 2005 must have put them in there. Beyond Compare (BC), highlighted the differences.

I made BC ignore leading whitespace in the "Everything Else" rule set by going to the Tools/Edit Current Rules/ menu. In the importance tab check "Leading whitespace". The right side was much more indented than the left. I fixed this my going to the General tab and choosing 4 characters = tab stops.

Now BC shows me only the important differences in my code versions.

You can pick rules by using the Tools/Pick Rules menu. I don't know why it did not pick VB when I was comparing two *.vb files.

I am using Beyond Compare version 2.4.3 (build 243).

Tuesday, January 29, 2008

Minimum Online Configuration

I recently looked at my sister in law's computer. They said it was running slow. My brother had a similar problem several months ago. Following is my minimum configuration for a windows computer connected to the Internet.

Automatic updates - Windows update is usually configured properly to download and install updates automatically. I have found with two XP installations that I had to manually get SP2 installed first. You can check yours in Start/Control Panel/Automatic Updates.

Anti virus - In both cases I had to get an anti virus running first before I could get SP2 to install. Maybe the viruses that were found where desperately fighting to keep the exterminator from getting in. My cousin mentioned AVG Anti-Virus Free Edition. It seems to work fine. You will have to be careful when you install it. It tries to get you to install a free trial of the non-free version. This is a common practice for providers of free software. Just read the notices as you download and install. 
UPDATE Dec 2010: Instead of AVG you should install MS Security Essentials.  It is free and from Microsoft.  I have run it on one of my computers for several months now.

Ad-Blocking - Use some simple ad-blocking extensions for your favorite browser.  Your sanity and your computer's health will thank you. (Added Jan 2013)
Chrome - Adblock Plus, Ghostery (I use it to block taboola)
FireFox - Adblock Plus, Ghostery
IE - Simple Adblock

Firewall - I don't use a firewall.  I have a router between my cable modem and my network.  It blocks much of the bad people trying to access your network.  You may want to install one if you have people that aren't careful on your network.  It will stop malware that you have mistakenly installed to try and phone home.

Internet filter - (Updated Jun 2015)
OpenDNS Family Shield is a free option and it will protect your whole network, if you set it up on your router.  It pays for itself with ads.  Whenever you hit a site that is blocked a OpenDNS page is shown with ads.  You can choose a paid for option and eliminate the ads and increase your log retention to I think 2 years.  Here is how you set it up.

In addition to filtering on your router, I use parental controls for mobile devices. iPod Touch has pretty good built in controls. We remove Safari, YouTube, Installing Apps and set the allowed content. For android devices, we use AppLock and Qustodio.

Also, we use practices like putting the family desktop in an open area and rules for laptops to be used in an open area. We put passwords on all desktop and laptop computers that only mom and dad know. If they want to use one, we log it on for them for a specific purpose and then they are off. And we use the buddy system for additional precaution.

The technology we use is mainly to prevent someone accidentally coming across unsavory content. Much more powerful is open and often dialog with your children. Talk to them about everything. Listen to what they say. They will come to trust you when something disturbs them. Teach them to stop, crash and tell. If something disturbs them on the Internet, stop. Crash the device or computer. And tell their mom or dad.

As a parent, it is our job to help our children navigate the dangers of the Internet. Gain their trust by being compassionate and empathetic. Teach them the dangers of porn. Teach them to not ask Google about sexual things but rather their parents. Teach them that sexual intimacy is sacred and beautiful and only one aspect of the wonder of marriage. Express love in ways they feel it.

Defragment - Windows 7 and newer automatically defragments automatically.

Reduce start up apps - Programs sometimes are intrusive. They want you to use them. They get themselves to start up when you start your computer. They can slow your system down. Here I detail how you can tell your computer what is important to you.

Friday, January 18, 2008

The Five Browser Shortcuts Everyone Should Know

The Five Browser Shortcuts Everyone Should Know tells of often used keyboard shortcuts in IE7.

1. Set up a keyboard shortcut to launch your browser
2. Alt+D to navigate to the browser address bar
3. Ctrl+E to navigate to the browser search box
4. Alt+Enter to open searches or websites in a new tab
5. The middle mouse button opens links in a new tab, and also closes tabs

Tuesday, January 15, 2008

ClearType Tuner PowerToy

I just got a new wide screen LCD monitor at work. I found the MS tool, ClearType Tuner PowerToy, made the text much more clear.

Thursday, January 10, 2008

Where Are the Software Engineers of Tomorrow?

A friend sent me this from the Journal of Defense Software Engineering, Computer Science Education: Where Are the Software Engineers of Tomorrow?

If programmers only learn higher levels of software development, who will build the next great operating system? Who will build the compilers for the higher level languages?

Joel Splosky refers to this article and suggests creating Bachelor of Fine Arts in Software Development.

Imagine instead an undergraduate curriculum that consists of 1/3 liberal arts, and 2/3 software development work. The teachers are experienced software developers from industry. The studio operates like a software company. You might be able to major in Game Development and work on a significant game title, for example, and that's how you spend most of your time, just like a film student spends a lot of time actually making films and the dance students spend most of their time dancing.

Thursday, January 03, 2008

Gmail Edit Link Shortcut Key

I love Gmail. I never have to look at another flashy ad from one of the other webmail providers again. I feel assaulted when my wife and I are browsing together and she is reading her email. I hope Google never changes from their non intrusive, text based ads.

One peeve I have with Gmail is there is no keyboard shortcut to Edit Link. I use Edit Link often when I compose an email. I have gotten used to ctrl+k in MS-Word. IE will open a hyperlink dialog when I use ctrl+k. Firefox uses ctrl+k to set focus on the search bar. I wouldn't mind learning to remember another keyboard shortcut if they would only provide it.

One more thing. It would be great for it to be the same shortcut key that blogger.com and any other editing tool google has (will have).

**** Update 2009-10-14 ****
I was hoping that the new Custom Keyboard Shortcuts would allow me to assign a Ctrl+K some other kind of keyboard shortcut to allow me to bring up the "Edit Link" dialog box when I am composing a message alas no.