Welcome to MSDN Blogs Sign in | Join | Help

Redundant Entropy

Walking the road of the Information Worker

User Experience... SharePoint... old shoes, new laces.
SharePoint 2010 and the next level of Social Computing...

Among SharePoint 2010's great new features is a significant advancement into the area of social computing. In fact, it could be argued that SharePoint 2010 will provide the next plateau for social computing. You'll recognize part of the following, I'm sure:

The decade in Social Computing:

Year

Technology

Sample

1999

Blogger logo

So, I just have to tell someone about this thing my cat did today…

2004

flickr logo

OMG! Cat pictures!

2005

YouTube logo

OMG! Moving cat pictures!

2006

twitter logo

1:00 pm. My cat just sneezed!
1:02 pm. Cat sneezed again!
1:04 pm. Cat hasn't sneezed recently. Getting worried.

2007

SharePoint 2007 logo

My Site about My Cat (with item-level security and version control)

2009

SharePoint 2010 logo

The Kitty collaboration platform for the Enterprise and the Web:

  • FaaS (Fluffy as a Service)
  • Any browser, any device (Cats on a phone!)
  • OMG! SilverLight cat pictures!
  • With Rich Theming, tons of new ways to skin my cat
  • Now, my cat has a RIBBON!

 I'm very excited! :)

Off-topic code: ChordPad 1.0

This post is in keeping with my two SharePoint and UX blogging traditions (1: posting almost never, and 2: posting about non-SharePoint-or-UX-related stuff… maybe someday).

I was showing off the latest version of my Bassic program (now at version 2.1, with a UX specifically designed for tablet computing on my shiny new HP EliteBook 2730p! I’ll be posting that soon…). Our music director at church was taken with the ability to transpose chords programmatically instead of by hand, but wanted the ability to save transposed chords – and Bassic is a screen-only app. So… thus was born ChordPad!

UX is nothing to speak of, basically a rip-off of Notepad (Get it? “Notepad” = notes, “ChordPad” = chords! Clever, neh?). But it seems to get the job done, it’s lightweight, and best of all, it’s my first real app developed using the Visual Studio 2010 beta on the Windows 7 Release Candidate. It’s still WinForms rather than WPF, but – come on… a Notepad clone in WPF?

Here is the VS Project source (yes, it’s VS 2010, but if you want to compile on older versions of VS, you should know what to do. The app is geared toward .NET 2.0 rather than 4.0 for that reason).

And, here is the compiled application, ready to roll.

Office 2007 Smart Art

Every so often, you have an "epiphany moment" that you're almost too embarrassed to write about. Today, I discovered Smart Art in Word 2007. I generated the following in about 30 seconds flat (I'm not a fast typist, or it would've been quicker):

SmartArt

Yes, embarrassing that I've never used these tools before. Sure, there's Visio, Illustrator, MindManager, and whatever else... but man, if all you're looking for is a quickie site hierarchy or logical diagram, I can't see it getting much easier than this. Tons of flexibility in the look & feel, and it remains fully editable. Keen!

Disclaimer: Sorry if this post makes me look like a noob. I'll risk it.

SharePoint Performance Optimization

A new technical Whitepaper was released last month on TechNet that I have found valuable, and thought it worth proliferating the link:

SharePoint Performance Optimization: How Microsoft IT Increases Availability and Decreases Rendering Time of SharePoint Sites

This is a great addition to the other MOSS standard article on performance boundaries:

Plan for software boundaries (Office SharePoint Server)

Internet Explorer 8 Beta 2 now available

Just a couple hours ago, IE8 Beta 2 was officially released.

Now, as a user experience guy, I'm pretty excited about all the neat UX improvements. Sure, all the security enhancements (Domain Highlighting, SmartScreen, etc.) are very welcome, as is the Automatic Crash Recovery feature. Okay, that one's really welcome. But, all those aside, the UX stuff is where it's at. In my opinion, this is right up there in impact with the change from Netscape v3 to modern browsers way back when.

Accelerators and Web Slices rock! I can hardly wait until adoption for these features is widespread - and it will be. And anyone who recalls having to fuddle with conditional formatting and swapping between two machines to develop web sites when IE 7 came along will be grateful for the Compatibility View feature. I am especially so, since it's much easier to use than in the Beta 1 release, and is now site-specific, rather than global, doesn't require a browser restart, etc. Visual Search is fantastic - way better than the FireFox variant. No more pop-up dialog for text searching... the "new tab" screen is even functional (finally!)... I could go on.

Okay, the InPrivate Browsing feature is getting all the press (good and bad...), but that'll fade once Joe User gets hold of the real UX improvements in IE 8. Go get it!

Lenovo ThinkPad W700

I like my ThinkPad T61p pretty well. It's maybe not the best machine for graphics work, but it's decent. 3DS Max screams on it, and as a dev machine & VM host, it's really good. All that said, I still have to confess... I've been wanting a MacBook Pro. Bad thing for a MSFT guy to say, I know... but I hear they run Vista like nodody's business ;) Seems like all the SharePoint MVPs are using them these days.

Looks like there may be a change coming: the Lenovo ThinkPad W700. Think of it: quad-core processors, internal RAID, 8GB (!) of RAM - this thing is a portable server! Throw in a built-in graphics tablet/digitizer, the enormous display, 1GB video card... a graphic artist's dream. Definitely top of my Holiday wishlist!

SSP App Pool failure in IIS 7

Recently ran into a peculiar issue with MOSS installed on Server 2008/IIS 7 wherein the SSP app pool would stop after the app pool was recycled and you tried browsing to the SSP site. The resulting error code was 503: Service Unavailable. Checking the app logs on the server yielded very little of use: event ID 5139, citing listener channel failures for http. Five failures, and the Windows Process Activation Service (WAS) shut down the app pool.

The build configuration:

•    MOSS 2007 64-bit slipstream installed on fresh 64-bit Server 2008 machines
•    Project Server 2007 also installed (64-bit)
•    App server #1 (of 2) running Shared Services, Search, Indexing
•    App Server #2 running Central Admin and the Project Application Service
•    Three WFEs (in the DMZ)

The Shared Service site would run fine at first – for some time – after the install. Then, after as little as 8 hours and as long as 3 days, WAS shut down the app pool again. Restarting the app pool was successful, but the site would not display in the browser, and attempts to browse to it shut down the app pool again. We reset IIS, rebooted, you name it - no change in the behavior.

This was seen initially with Central Admin running on the same server as the SSP. When that happened, Central Admin also showed the same behavior. The two app pools run under different identities, but both showed the failure. After CA was moved to the second app server, it ran just fine, while app server 1 with Shared Services continued to fail. Checked all manner of blogs and TechNet, but couldn't find the root cause. I suspected something in IIS7, but never did find anything there, despite some vagaries in the installed configuration of that server compared to the rest of the farm.

The culprit turned out to be SharePoint Search. The error stemmed from IPv6 entries being added into the server’s Hosts file by Sharepoint Search – one for the server, and one for each web app (note: the actual addresses below are obfuscated ):

fe##::####:####:####:####        prod-server-app1
# Added by Office SharePoint Server Search (6/24/2008 6:02 PM).

127.0.0.1                        localhost

fe##::####:####:####:####        home.customer.com
# Added by Office SharePoint Server Search (6/24/2008 6:02 PM).

fe##::####:####:####:####        my.customer.com
# Added by Office SharePoint Server Search (6/24/2008 6:02 PM).

If we recycled the app pool, these got added. Once the app pool was recycled, if we browsed to the SSP site, the app pool stopped. If we recycled the app pool, then removed or commented these added lines before browsing to the SSP site, everything worked as it should.

This actually resulted from our configuration which specified a dedicated crawl server. Once we split the crawl across all servers, the lines were no longer added to the Hosts file.

Still looking for a way to stop SharePoint Search from adding these to the Hosts file on app pool recycle so that we can use a dedicated crawl server. Simply disabling IPv6 on the server (it's not being used at this customer) was ineffective.

Side note/tip: the TechNet documentation on disabling IPv6 calls for a DWORD entry in the registry, with a value of 0xFF. We were unable to actually type "0xFF" in the field (wouldn't accept the "x"), but typing just "FF" gave the desired value. Something I didn't know.

MOSS & Project bits & hotfixes

Prepping to do a joint deployment of MOSS and Project Server on Windows Server 2008. w00t! For future reference, here are all the relevant service pack and hotfix bits:

Sharepoint Server 2007 (MOSS):

Best thing to do is install the slipstreamed bits (a must for Windows Server 2008):

Post-SP1 Hotfixes:

Project Server 2007:

Trial download is here:

Better yet, there's a download on MSDN that includes SP1. If you already have the original ISO, SP1 is here:

Post-SP1 Hotfix:

Also, there's a combined SP1 offering for these Server products:

  • Microsoft® Office SharePoint® Server 2007
  • Microsoft® Office Project Server 2007
  • Microsoft® Office Forms Server 2007
  • Microsoft® Office Groove® Server 2007, 64-Bit Edition

The DL is at:

How-Tos:

Lastly, here are typical scenarios and procedural walk-throughs for installing MOSS & Project:

Enjoy!

Off-topic code: Chord transposer & tablature display tool

I play bass guitar, but I'm not yet good enough to transpose a song in my head when the band switches keys. So I went looking for a (free!) lightweight tool to not only quickly pull up chord charts and tablature to songs in my repertoire (to save time flipping pages) but to transpose the charts up or down as required, thus keeping me from having to think ;)

Since I couldn't find anything to fit the bill, I decided to write a simple Windows app to do so for me, and thought I'd share it in case anyone else might find it useful.

Here are screenshots of what I came up with (click the images for larger view):

Windows XP version Windows Vista version, with Aero!

It's not fancy, and it doesn't do much, but it's quick and does what I needed it to do. It reads from simple text files, populating the drop-down list with all the songs in the directory, and you can navigate to any song by just starting to type the name and hitting "Enter". The "Up" and "Down" transpose buttons in the upper right transpose the chord chart up or down (D to Eb, Eb to F, C# to C, etc.), and a label will show you how far up or down it's been transposed. The tablature, if present for the song, is not transposed - that was way more work than I wanted to do...

The files are listed below. The "bin" files are compiled and ready to run, just add chord charts and tabs, and the "src" files include the full source files for the program. Not much, but there it is! These are VisualStudio 2008 projects, but I compiled for version 2.0 of the .NET framework rather than 3.0 or 3.5. Also, these files have the window size set for 1024x768 screens, so if you have a larger or smaller display, you can change the window & control sizes and recompile. I use it at 1680x1050 for my laptop.

XP Version: Vista Version:

The code & compiled proggies are supplies as is with no warranties, etc. You know the drill.

Many thanks to http://i-cons.tk for the icon, and to Pang Wu, from whose article ("Drawing smooth text and pictures on the extended glass area of your WinForm in Windows Vista") I lifted the GlassText.cs class.

ADFS lab: Use Win2K3 Server Enterprise from the start!

I'm working through a bit of learning on integrating MOSS with ADFS for a federated SSO scenario at a customer. There are some excellent resources available for learning this, which I'm using:

The step-by-step guide is very thorough, and easy to follow. The one glitch I ran into: when it came time to install the Federation Service on my account & resource machines, I couldn't. The Federation Service wasn't listed as an installable feature of ADFS - the only piece showing was the ADFS Web Agents.

Turns out the problem was in my VMs. I had started with a base VM running Windows Server 2003 R2 with SP2, Standard Edition. The guide was very clear in the requirement for the account and resource computers to run the Enterprise Edition of Server 2003 R2. So, what I did was to run the install of the Enterprise Edition and upgrade my base install. Should work, right? Well, it didn't.

Only when I wiped the two machines completely and installed the Enterprise Edition as fresh installs did the Federation Service and Federation Service Proxy options show up. I thought I'd pass that on for anyone who may run into the issue.

Usability by Request, part I

A few weeks ago, I was at a customer with my buddy, Suman, and I whipped up a muddled OneNote notebook full of notes on usability best practices I've assembled from seminars, books, and personal experience. Since then, he's been bugging me to get my blog started and put the stuff up for one and all. (Anybody else old enough to remember Cameron in Ferris Bueller's Day Off? "He'll keep calling me, he'll keep calling me ... He'll make me feel guilty...")

So, here's the first installment, Shoe. Most of this is from notes over the years, so I apologize in advance for any credit omissions. I do nod with great respect to the Nielsen Norman Group, Bruce Tognazzini, and Steve Krug, although I've added numerous bits of me.

Principles for Effective Design

  • Anticipation: Bring to the user all the information and tools needed for each step of the process.
  • Autonomy: Give users some breathing room - let them make decisions, but do your best to lead them to the right ones.
  • Consistency: Be predictable - users want to know what to expect. Surprises are bad, except in games.
  • Defaults: Make them clear and logical.
  • Efficiency: Look at the user's productivity, not the computer's or the application's. Computers are vastly more powerful than they used to be, but our neurons still chug away at the same speed. Slower, for many of us...
  • Exploration: Make user actions reversible. Always leave them an escape route, but make it easier to stay in.
  • Fitt’s Law: The time to acquire a target is a function of the distance to and size of the target. Big targets, close at hand, are easiest to hit.
  • Metaphors: "Real world" objects have familiar modes of interaction. Virtual features based on them should have similarly comfortable resulting behaviors. Human-interface objects should be understandable, self-consistent, and stable.
  • Illusions: Reflect the illusion of the interface, not the “realities” of the underlying system.

General Notes on Usability...

  • A site's homepage is the most visited individual page in the site. However, the site's interior pages are actually more important, when viewed collectively.
  • Few people scroll. Avoid the illusion of completeness (give indication that there is stuff "below the fold").
  • As long as navigation is well-designed, it can be in either the left-hand, right-hand column, or along the top of the page. Keep critical navigation out of the body content, and make sure it stays in the same spot from page to page.
  • Avoid overly fancy or complex features. This conserves development resources and allows more focus on the refinement of critical features.
  • Cutesy, trendy, and vague = BAD.
  • Persistent navigation = GOOD.
    • Hide-and-seek is fun, but not on the web or in your app.
    • Same thing with tag. Don't make people chase key functionality.
  • Avoid redundant navigation. In applications, redundancy increases complexity, contrary to what we learned in Communication Theory class...
  • User annoyance effects are cumulative. Several small gaffs can lose your audience as readily as one or two large blunders.
  • Like text content, all images and graphics should be concise and value-added. Save fluff for pillows.
  • Your most relevant info MUST receive top billing (above the fold, on the first page, etc.).
  • Aim for the lowest common denominator – that person is more common that you may think.
  • User Interface has become User Experience - make it a good one.

... And on User Testing

  • Observe your users. Know them. User testing is not a luxury, it's a necessity. Every app you build will be tested by users. Do you want it tested before or after you ship? Your choice.
  • We as developers tend to internalize the user experience, rather than observing the actual experience of real customers.
  • Our usual (but flawed) approach to "fixing" a flawed interface is to fix the user instead (via training, etc.)
  • Users don't make errors because they're stupid, but because the app makes it easy for them to make errors.
  • People don’t want to think – they want to be guided through processes. More numerous clicks are OK, and often better, IF:
    • Users know what to expect from each click,
    • They don’t have to think very much about each click, and
    • Each click is perceived as bringing them closer to a goal.
  • The details on the previous point can be overdone. Be careful.

That's it for now. I'm working up some notes for future posts on taxonomy and information architecture, as well as some checklist-style docs that may be of use in various phases of design and development. When that future comes, you'll know.

Page view tracker