In the last few weeks, I happened to notice some confusing signage in places I'm at on a regular basis and thought it might make for an amusing blog post. Just like bad UI in a software application, these bits of signage/labels made me stop for a second and scratch my head:
I have a spot on the top floor of a parking garage in downtown Columbus, and all ramps are one-way. Here's the sign showing my way out. I guess they thought an arrow pointing the way out wouldn't give me enough information, so this not-arrow gives me the much more informative message that this is the way to not go for people going the direction I'm not.
Sometimes after a long day, I still have to pause for a millisecond when I see this sign. And this sign is not meant for the other guy, as he would have to have already come up the ramp to see that he shouldn't have.
Here are the elevator buttons I was using daily at the office:
Naturally, to go down, you can see that I pushed the top button.
In their defense, we are on the top floor, so the only way is down. So it looks like they just tried to reuse the same button panel as was on the other floors, only they decided to only mark the exceptional up button as down without marking the down button appropriately. Hope noone forgets they're on the top floor.
October 05, 2008
Real world bad UI
Posted by
Dan Shultz
at
2:06 PM
58
comments
August 13, 2008
WCF Debugging in Visual Studio 2008
Debugging WCF Services is a lot easier in Visual Studio 2008. There is a WCF Service Host built-in to privately host WCF Services, as well as a built-in client that can be used as a test harness, and to view XML Requests and Responses. Here’s a quick walk-through on how to set up a quick sample WCF service, execute it using the client utility, and to create a simple console app that calls the service that will allow you to debug both client and server code without going through hosting the service in IIS, attaching to process, etc…
First, create a new WCF Service Project (File…New…Project -> Expand C#..WCF -> Select WCF Service Library)
The newly created project has a sample method GetData(int) that simply takes in an int, and returns a string. That’s the method we’ll be using. Now right-click the App.config file and select Edit WCF Configuration. This brings up a GUI view of the XML config file. Click the first “(Empty Name)” link that uses the binding wsHttpBinding.
This allows you to edit the Service Endpoint. Give it a name.
Save the configuration, now hit f5 to run the app. The WCF Test Client will launch. Double-click the GetData() method.
This brings up a test harness that will allow you to test the method. Enter a value for the Request Value and click Invoke. In a few seconds, the Response Value should display “You entered: [number]”.
OK, Now we’re ready to create a console client application that will call our service, and allow us to debug through client and server code. Add a new Console Application to the solution.
Right-click the newly created console app and select “Add Service Reference”. This brings up a dialog box that allows you to add a service reference. Click the down arrow next to the Discover button and select “Services in Solution”. Select your service in the dropdown and click Go, when it appears under Services, click OK.
Now go into the Main method of Program.cs in your console app. Add the following call to the referenced service:
ServiceReference1.Service1Client sc = new Service1Client();
Console.WriteLine(sc.GetData(11));
And set a breakpoint at Console.WriteLine.
Now you’re ready to start debugging. First run the service (F5), then start a new debugging instance of the console app. The debugger should now be stopped at your breakpoint in the console app. Step into the code (F11) and you will step through the GetData method in your service code.
When you finish stepping through your code, the console should display the return value.
A full Silverlight presentation of WCF Debugging is also available here.
Posted by
Dan Shultz
at
12:34 PM
1 comments
August 11, 2008
Excel Extend series - all rows
I recently had to deal with very large (300K+ rows) Excel spreadsheets. I needed to add an additional column based on calculations of other existing columns. I was familiar with the extend series functionality of Excel for extrapolating a function over multiple rows, but what a pain to drag for 300,000 rows. There has to be an easier way to apply a function to all rows. So I Googled and found a nice easy way to Extend Series to all rows, just double-click the square in the bottom right corner of the column with the function applied and presto, the calculation is applied to all rows in the spreadsheet:
Create the function in row 1
You can extend the function to subsequent rows by dragging the square in the bottom right corner of the selected cell...
...or just double-click the black square, and the function is extended all the way to the last cell ie; the 17th row function is =a17*b17.
Special thanks to Phil for his help.
Posted by
Dan Shultz
at
1:37 PM
6
comments
May 07, 2008
ReSharper 4.0 Initial thoughts
I just installed ReSharper 4.0 for the first time, & got a quick overview of a few of the features. After using it for about a week, here are my initial thoughts, and some of the features I find myself using a lot:
The configurable silent code clean up feature works really well and is a big time saver. The warnings and alerts are good for making simple errors/redundancies/unused elements jump out.
The find file and find type (ctrl+t, ctrl+shift+t) make it easier to navigate and open files, especially in a very large sln with many projects.
Extracting interfaces from existing classes is an improvement over VS - it actually makes the interface public and implements it in the class.
Finding alt+enter to add references/using directives to be a big time saver.
Posted by
Dan Shultz
at
10:32 AM
1 comments
April 16, 2008
Contest Results
Here's a shot of the spreadsheet with the weights removed. Congratulations Slimtastics, especially Arnulfo and Steve.
Posted by
Dan Shultz
at
10:17 AM
1 comments