|
 Monday, January 21, 2008

MSN Run Once Bombs...

It happens to the best of us, even the creators of the technology...

image

#    Comments [0] |
 Monday, January 14, 2008

Usability - Don't Make Me Think/Remember...

When we were first introduced to the computer it was to help us solve problems not create them. Your mother bought a computer so she could get things done quicker. She bought it because it had all these cool features that could "Remember things for you". We build software to help solve problems, to remove some of the more mundane things in life to make life simpler. Computers are supposed to make things easier, they are not supposed to take my time to answer stupid questions.

Each day goes by that I still find major issues with User Interface development of major web sites. There is SO MUCH information available for free on the Internet that major companies still make no attempt to help the user.

What am I complaining about?

When I visit a web site I want it to do things for me. Provide a service. The following sites provide services, but all fail miserably in regards to basic usability and irritating steps of action.

 


FAILING

www.ups.com, www.dhl.com, www.fedex.com, www.honeywell.com - All of these sites suffer from the same problem. They make me think. Why in the hell cant you figure out what country I'm in? There are ways to do this all over the net. Yet these companies cannot figure it out? I mean, come on... companies like Honeywell who have TONS of engineers on staff cannot figure this simple crap out?

My Beef: Don't ask me where I'm from, when you already know. That's like asking me my name when I'm wearing a name tag.

 

www.myuhc.com (doctor locator) - This thing... oh man, it makes me want to scream. The problem is ... if you log into your account, you can "locate a doctor", yet when you get prompted to enter search criteria you get asked what your plan is. HMO, PPO, PPO PLUS, BLAH BLAH BLAH, like 15 choices. They all look the same to me. That means I have to pull out my wallet each time, find my card, search the small print just so I can answer this question. BUT WAIT.... I LOGGED IN, DID'NT I??!?! That means, the web site should already know what plan I'm part of.

My Beef: Don't ask me what my plan is if you already know. Again, its like asking me my name when I'm wearing a name tag.

 


SUCCEDING

Outlook Web Mail, Gmail - These apps have it down. When I type in an email address and send an email to a contact, these applications save it for next time. The next time I attempt to send an email and start typing a few letters the app helps me find the person I'm looking for. Either by first name, last name or email address.

 

Google.com/Live.com/ask.com - All of these provide great suggestion techniques (such as explained below). Google does really well in this area. Tim Ferriss said that while in Germany (or somewhere Europe) he typed Google.com and got Google.de (Germany's Google). At the top of the site it had a small icon that said something to the nature of "Looking for the US Site? Click here." So it helped the 95% case of actual German users, but maybe the other 5% actually wanted the US Google (note: the %'s are just made up, but you get what I'm saying).

 

Pandora - The music discovery channel. If you like "Wu Tang Clan" and you would like to find artists that are similar to them Pandoras Music Genome Project will help. It helps by finding music similar to your tastes through over 400 attributes. But the real nice thing about the interface is how easy to use it is. If I typed in "Wyclef Jon" the system will return a question to the user "Did you mean 'Wyclef Jean'". Well of course I did, but maybe my friend always said "Wyclef Jon" so I thought it was "Jon". But hey, the user interface helped me find what I wanted to find. It didn't make me think. If helped me find what I wanted to find through assisting me with my spelling.

 


TIPS TO IMPROVE YOUR SITES USABILITY

- Don't make the user re-enter information you already have. (name, address, etc, - basic info)

- Use the Auto-Complete type of control as much as possible. - This helps users when typing in free text. If you're asking them to type in an address into a geographical website, try to assist them with possible solutions. Not everyone can spell Minneapolis correctly the first time. :)

- If you are an international site, FIGURE OUT WHAT COUNTRY THE USER IS FROM and give them that country.

- Catch all the errors. I MEAN ALL OF THEM. I should never see a MySQL Error, a YSOD or anything like that. Give me something telling me that something went wrong and I should check back later.

 

In the end, its all about user experience. Make it easy.

 

The only problem is ... is very hard to make something simple. :)

#    Comments [2] |
 Sunday, January 13, 2008

Works in Firefox, But Not in IE? (or vice versa) WTF!!!!

During my stint at McFarlane Toys and through many other consulting gigs I've had in my years I'm always running into CSS and style in web applications.

If you're a Windows developer be thankful because everything in WinForms pretty much renders virtually the same on the client. It's not that way in the web world.

 

Here's what I think of styling in the web world: "Welcome to the land of a 1000 faces, where the same face can have 10 different appearances."

 

Seriously, CSS is a huge P.I.T.A. and getting it right on IE, FireFox, Opera, Safari, etc is a hair losing experience.

So, I'm sharing this resource as one of my great saviors of CSS wisdom: The CSS Creator Forum

I've had many issues and they've all been solved simply by searching this forum.

I've never once even had to post a problem as I've been able to find the answer here.

Enjoy.

#    Comments [0] |
 Tuesday, January 08, 2008

TFS - ItemExistsException Fix

Oh what a P.I.T.A. this error has been. I received this error today...

Microsoft.TeamFoundation.VersionControl.Client.ItemExistsException: The item $/path/to/myFile.cs already exists. ---> System.Web.Services.Protocols.SoapException: The item $/path/to/myFile.cs already exists. --- End of inner exception stack trace --- at Microsoft.TeamFoundation.VersionControl.Client.Repository.ProcessHttpResponse(HttpWebResponse response, Stream responseStream, WebException webException, XmlReader& xmlResponseReader) at (...)

blah blah blah...

We have two build servers set up at the client where I'm at and I'm in charge of keeping them up and running smoothly.

Build Server 1: Local, same office as where our TFS Server is

Build Server 2: Remote, connects via TFS Proxy Server at the remote location which connects to our TFS server (next to Build Server 1)

 

PROBLEM 


The problem is that I recently moved a project using the Move command in TFS.

The project was moved from a location which was incorrect for our Continuous Integration environment to a location that that was optimal.

Between the time that this move occurred and when the project was altered again, a file was dropped from TFS somehow yet it remained in the project. Not a big deal right? I asked a coworker to add it through Team Explorer. Bam, no problem, done. The file was back, it built correctly on our development machines and we went onto the next task.

Then CC.NET Barfed. It was the error that is in red above.

Robert Horvick had some great insight into this error on this post. Here's what he says:

"At a high level what is happening here is that there are two distinct items which happen to have the same path name (at different points in time, obviously).  When you are labeling TFS sees what you want to put into the label (the new item) and what is already in the old label (the old item) and sees the name conflict.  Since /child:replace means to replace the label on the same item it can't drop the label off the old item which means it can't add it to the new item so it issues this error message."

THANK YOU Robert.

 

SOLUTION


As Robert also stated in that post we have to "unlabel" the file so CC NET can re-label it correctly. We're getting rid of the old label on this file. We do this with the "tf unlabel" command.

tf unlabel 1234 "$/Path/to/myFile.cs"

(where 1234 is the label)

I did this, and then forced a build through CC.NET and it worked! Woo hoo!

UNTIL... the next build, it broke, and I get the same exact error message above.

 

After some research I came to find out that this solution that was getting labeled was a solution that was getting labeled multiple times a day on two separate build servers. We have a common source solution that is shared among many applications (such as security objects, loggers, etc). So while I cleared the label on the one build server, there was still a label that might have been newer on the new build server.

In order to get around this, I had to clear all the labels for that file. Normally this is not something I'd ever want to do, but fortunately this file only had about 4 labels applied to it as it was fairly new and we were not doing anything with those said labels (just cc.net labels). After removing the labels, everything started building just fine.

#    Comments [0] |

TFS Build Not Publishing Web Applications

_PublishedWebsites does not exist?! WHAT?! Huh?

One of our TFS builds was succeeding and a fellow developer noticed that the Web App was not getting copied into the _PublishedWebsites folder of our drop location.

I took a look at our TFSBuild.Proj file and I didn't see anything that stood out. I took a look at a similar project who's output was being copied into the _PublishedWebsites directory and the .proj file matched that of the one that did not work.

Solution

The problem was not in the .proj file, but in the actual .csproj file for the Web Applicaiton Project.

.csproj files ARE MSBuild files and inside of that I saw this:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!--<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v8.0WebApplications\Microsoft.WebApplication.targets" />-->

The second Build target file was not getting loaded.

This build target file contains a target by the name of "_CopyWebApplication" which takes the output of the web application and copies it to the _PublishedWebsites directory.

I uncommented this line, checked it back into TFS and re-ran my build and my _PublishedWebsites started showing up. :)

My file now looks like this:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v8.0WebApplications\Microsoft.WebApplication.targets" />
#    Comments [3] |
 Monday, January 07, 2008

Sending Email in a Development Environment without an SMTP Server

Sometimes I'm not at a client location and I cannot check to make sure that an email component is working correctly. This results from not having the email server at my disposal to relay the message off of. I also run Vista, which does not come with an SMTP server.

 

Therefore my setting in the App.config wont work for development.

Here's what the settings look like at the client location:

  <system.net>
    <mailSettings>
      <smtp>
        <network host="mail.example.com"/>
      </smtp>
    </mailSettings>
  </system.net>

 

So, while I'm developing remotely I will change the configuration to this 

  <system.net>
    <
mailSettings>
      <
smtp deliveryMethod="SpecifiedPickupDirectory">
        <
specifiedPickupDirectory pickupDirectoryLocation="c:\temp\maildrop\"/>
      </
smtp>
    </
mailSettings>
  </
system.net>

 

What this setting will do is create the email file and drop it into the c:\temp\maildrop\ folder. This setting can be used if you have your SMTP server watch a directory for new mail and it will then send it, or you can use it like I am - for testing when I need to view the email without actually sending it.

Now, when I send an email, like this:

 

        [Test]
        public void SendMail()
        {
            SmtpClient smtpClient = new SmtpClient();
            MailMessage mailMessage = new MailMessage("from@example.com", "to@example.com");
            mailMessage.Subject = "This is a test";
            mailMessage.Body = "This is the body";
            smtpClient.Send(mailMessage); 
        }

 

The mail message will get generated to c:\temp\maildrop\ . Visit this location with Explorer and you'll see something similar to this:

image

 

Now open this .eml file with any text editor (I prefer Notepad++) and you will see the contents of your email.

 

Email Contents

x-sender: from@example.com
x-receiver: to@example.com
mime-version: 1.0
from: from@example.com
to: to@example.com
date: 7 Jan 2008 18:24:10 -0700
subject: This is a test
content-type: text/plain; charset=us-ascii
content-transfer-encoding: quoted-printable

This is the body

 

Now you can test the email functionality of your application without actually having a SMTP Server.

Note: If  you're using ASP.NET you will need to allow ASP.NET to write to the pickupDirectoryLocation.

#    Comments [3] |
 Wednesday, January 02, 2008

About Me

About Me - Who are you and what have you done?

My name is Donn Felker. I work as a Senior Consultant for Statêra, a Microsoft Gold Certified Partner in Phoenix, Arizona. I’m an experienced Software Architect with over 8 years of professional experience in various markets that include – entertainment, health, retail, insurance, financial, and real estate. I write, present and consult on various topics ranging from architecture to agile practices to patterns and practices. I find that I really enjoy mentoring developers who have a passion to learn in a collaborative environment. I am also a part of the open source Tree Surgeon project which helps developers set up “scaffolding” for a new project in .NET, similar to Rails.

Have an idea or opinion you’d like to discuss? Let’s talk about it! I’m always open to learn something new from anyone who is willing to talk!

So what is my history?

Prior to my days at Statêra I worked for RVI Group, the world’s largest residual value insurance company in Stamford, CT. Previous to RVI Group, I worked for Televerde a market intelligence company located in Phoenix, Arizona. While at Televerde I was introduced to a wide array of development and infrastructure challenges that I had never encountered before and in doing so I was introduced into some of the same technologies that I use to this day. I honestly feel that my “ALT.NET” roots were germinated at Televerde. My time at Televerde has ended up being the most influential experience in my career. Before Televerde I worked for Todd McFarlane Productions for many years. I implemented many mission critical systems that still serve this company to this day. At Todd McFarlane’s company I was in charge of various projects ranging from audio production, video production, software engineering, graphic design and network infrastructure. Being involved with such a vast array of highly creative individuals (toy sculptors, comic book artists, designers, and Todd himself) and projects I have been able to supply highly successful solutions to many vertical markets in the entertainment industry. Previous to Todd McFarlane Productions I worked at Target Corporation as a Unix Tech/Developer, Team Trainer and Senior Technical Support Representative. Target was a great place to work mainly because the vast culture the company provided. The Target corporation always had someone who had experience with anything you could shake a stick at, and the best part was – they were always willing to mentor you along in your career.

Between the years of 2002 and 2006 I was the Principal Architect for my own consultancy – G9MEDIA. I specialized in working with entertainment industry clients and implemented many media related solutions. A sample of these clients include Atlantic Records, Dreamworks/Universal Records, AFI, Nitro Records, TMP Intl, and a few other small indie labels from around the country. I was one of the first to start implementing fully dynamic Flash solutions utilizing PHP and MySQL data stores. This was prior to the You Tube boom, so this technology was red hot, unfortunately I didn’t know the right people in the right places to make it big in that arena. Oh well!

Now for some things you probably don’t know about me...

- I hated computers until 1997. I couldn’t stand them. I didn’t even know how to turn one on. Then I was introduced into the internet. Hello internet addiction. I was originally introduced to the internet from a girlfriend I had at the time and two weeks later after I got paid I bought my first computer, a 333mhz Hewlett Packard machine. I surfed the web with AOL (don’t flame me, ... it was over 10 years ago, give me a break!). Ever since I sat in front of this first PC I haven’t stepped away from a computer.

- I’m originally from a very small town that is near the base of the Mt. Lassen Volcano in northern California. The name of the town is “Shingletown” (no, I’m not joking). The population when I left in 1997 was 1000 people. The town is moving up though, they even have a Shingletown website now. 1995 website anyone?!

- I’m a certified Motorcycle Mechanic. I attended MMI (now part of UTI). This is actually the reason I ended up in Arizona. The only two options at the time were Orlando, FL or Phoenix, AZ. I opted for Phoenix. When I graduated from MMI I realized I hated working on motorcycles and the pay was garbage. So I went back to school for a Software Engineering Degree.

- I was almost a stock broker at one point. Prior to jumping into the ship to technology I was about 1 week away from taking my Series 7 and Series 63 securities exams. After arguing with a millionaire over 27 cents on his statement for 4 hours and proving him wrong through the use of a basic calculator and elementary arithmetic many times, I realized this wasn’t the industry for me. The customers were just too much to handle for the rewards of the job. Some people love this industry, but it wasn’t for me. I needed more “puzzles” to solve and less non-existent fires to extinguish.

- I used to race Pro-Am motocross in California prior to attending MMI. I was sponsored by Suzuki and many other small companies around the California area. I broke bones and sprained many joints but I kept at it. One afternoon while at a practice session in Marysville Motocross park I came over a jump at over 45 MPH and crashed on the landing. I ended up breaking my leg so badly that I needed multiple surgeries to fix the problems (the leg works just fine now) – but at the time I decided to hang up my racing gear and call it quits. The riding was fun, but I figured I would enjoy walking and playing with my kids’ later in life rather than risking another accident of that magnitude. I still loved motorcycles which is the reason why I attended MMI.

- During my high school years I obtained certification in cabinet making. That’s right boys, I’ve got wicked skills with wood working tools. I’ve created and sold hundreds upon hundreds of Burl Wood Clocks. They look very similar to the clocks on this site. I haven’t created a clock in nearly 10 years, but still it’s something that was part of my life and might end up being a part later in life.

- I’m an avid Mountain Biker and gym rat. I competed in my first mountain bike event ever (a national event at that) - The NOVA National 2006 – and got second. I haven’t competed since but I still do mountain bike quite a bit when I have time. When I’m not mountain biking I go to the gym consistently to stay in shape.

That’s me past to present. Be sure to subscribe to the RSS feed to receive updates on the blog. Thanks for reading.

#    Comments [0] |