Consulting vs. Catering

I used to eat at Panera Bread (@panerabread) 3-5 times a week until "the incident."  I'd placed a catering order for 15 people.  When I arrived on-time to pick up my order, I witnessed the horrified "What catering order?" look and the ensuing scramble to start preparing a meal for 15 people after the delivery time had already passed.  "You should have given us more notice," said the manager.  I suppose that 36 hours isn't enough time to make a bunch of sandwiches.

Panera sent me a $10 gift card which has sat in my wallet for about 6 months.  I guess it wasn't enough to make up for the sour feeling in my stomach I had from watching the disaster unfold and having to drive far faster than I usually do to so 15 tired and hungry people could stop waiting.

I had a Panera bagel this morning (it was sponsored; I didn't buy it) for the first time since the incident about 6 months ago.  I'm reminded that the consumer mind is a fickle one.  As a consultant, sometimes I find myself working at a client site for an extended period of time.  At some sites, people remind me as often as possible that I am not an employee.  At others, they roll out the red carpet, offering many of their employee benefits, e.g. chairs and lights, to me.  I'm grateful for the clients that treat me well, but in those situations, I'm more likely to forget that someone could terminate my contract on a whim.

It's good to have a great relationship with clients.  The more human I appear in their eyes, the more forgiveness I can demand when I make mistakes.  I like the food at Panera. I recommend the food at Panera.  But I'm not so tolerant of mistakes.  I guess I don't have too close a relationship with Panera; it's just an evil gelatinous corporate entity to me.

Posted 10-01-2011 by Ed | no comments
Intuitive User Interface Design: Lunchtime Revelations

I confirmed one of my lessons from software engineering school when I went to lunch today.

What happens when your user interface isn't intuitive enough to use without instructions?  The McDonald's by my house has two drive-thru ordering podiums; they take orders from two cars at a time.  When I arrived today, the one driver in front of me stopped at the rear podium instead of continuing to the front podium.  The speaker blared, "Please pull up to the next ordering window."  The driver responded with his desired order.  The speaker blared again, "Please pull up to the next ordering window."  The driver responded with his desired order again.  A different voice came over the speaker: "Please pull up to the next podium that looks just like this one."

What happens when your user interface doesn't provide any guidance for what to do next?  The McDonald's by my house has three physical windows in the drive thru lane, but they only use two.  The second window has a big sign that says (1) Pay Here and the third window has a sign that says (2) Pick Up Here (I'm paraphrasing, because I hardly notice these details anymore).   Unfortunately, the driver in front of me didn't see the signs and he stopped at the first window - the one without a sign (or a person).  He pulled up to the second window after the McDonald's employee stuck her head and arm through the correct window and waved at him.

McDonald's doesn't have a course on how to use the drive-thru.  We learn how the drive-thru works through observation and experience.  Eventually, the ordering and receiving and gobbling process becomes second nature to us.  When we change a user interface, we go against our natural instincts and we lose efficiency.  Have you ever been in a line at Subway right after they switched to touchscreen ordering?  If we haven't mastered self-checkout, we're not ready for online sandwich artistry.

You shouldn't have a course on how to use your user interface (unless you're revolutionizing the industry.  Where's my USB thought reader?).  We've used some user interface elements for a long time.  I'm awesome at using scroll bars.   Sometimes we introduce new user interface elements because they're supposed to be better (see Microsoft Office ribbon), but it's difficult to reprogram ourselves.  I'm still learning touchpad gestures.

What's the impact of a poor user interface?  I was stuck behind a drive-thru novice today for about 2 minutes (but that's a lifetime in drive-thru time).  On a web site, I'm even less patient.  If it takes me 60 seconds to get to my shopping cart, I already opened Amazon.com in another window and placed a one-click order.

I Am Genetically Programmed To Be A Software Craftsman

For the last few months, I've heard quite a bit about "software craftsmanship."  I've been plastered with arguments over whether or not such a thing really exists.  I had yet to make my own decision until I stumbled upon it by accident.

Back when Mom was helping me read my first books, one non-Dr. Seuss book slipped into the mix.  I was instantly enamored with "You Will Go to the Moon" and to this day I have dedicated bookshelves for programming languages, software architecture, and space flight.  Reading Failure Is Not an Option by Gene Kranz, I realized that some of us thrive on the desire to achieve great things - and I'm one of them.

I have mixed feelings about NASA.  On one hand, it's the agency responsible for the greatest engineering achievement in human history.  On the other hand, such achievement came from a damaged culture with an imbalance between engineering and management - a culture that resulted in the loss of the Apollo 1 crew on the launch pad and the loss of two orbiters and their crew during their missions.

What strikes me, though, is that every astronaut demonstrates some innate desire to achieve, even in the face of great risk.  I met Endeavour astronaut Kathy Thornton in 1998.  She said that when the space shuttle program started, they estimated a 1 in 40 chance of catastrophic failure - heck, I think there's a smaller chance that I'll leave work early on any given day - but still, they flew, and even after huge setbacks and losses, they flew again.  These are people that were energized by a mission, by winning, by achievement.

People have reminded me (on more than one occasion) that I am not an astronaut.  Still, I share the same desire for achievement.  I'm not writing code for the on-board shuttle group.  If my code doesn't work, nobody's going to die and it's probably not going to cost a billion dollars.  But just because I'm working on a business application, am I entitled to do a sloppier job?  Should I be content producing work that'll land me in second place?

My greatest achievements probably will not happen on the moon or in space.  I'll be judged by the systems and the code that I leave behind.  For me, being a software craftsman means that I take pride in my great work (and I'm humbled by my not-so-great work).  Therefore, I always want to produce my best work.  Do I want my achievements to be elegant architectures and clean, maintainable code?  Or do I want to be remembered as a guy who wrote crappy code?

Spaceflight will never tolerate carelessness, incapacity, and neglect.  Neither will I.

Posted 01-23-2011 by Ed | no comments
Tropicana Light Orangeade -> Lipton Brisk Light Orangeade?

As I run dangerously low on my stockpile of Tropicana Light Orangeade, I see some random posts from Paul Bornstein in Livingston, NJ:

GREAT NEWS!!! LIPTON SUGARFREE ORANGE BRISK WILL BE AVAILABLE IN FEB OR MARCH 2011!! TROPICANA SOLD IT'S FORMULA TO LIPTON. THIS IS DIRECTLY FROM PEPSI PER MY PHONE CALL WITH THEM

I'm unlikely to believe anything less than an official press release, but I could wait a couple of months for nationwide availability.

Posted 01-05-2011 by Ed | no comments
Rally to Restore Code Quality (and/or Fear)

Ultimately, it's the people that elevate a project to its success or send it to its doom.  When I think about the most successful software developers I've met and the least successful programmers that I've had the fortune to avoid, I have found two attributes that distinguish the best from the rest.

1.  Passion

One of the most disturbing experiences I've had (to date; stay tuned for my TSA post) was when I hired a cleaning service.  Every few weeks, two or three people would barge into my house with the mission to clean every square inch of surface in my house.  Given that mission, they were quite successful.  The problem was, they didn't clean quite the way I'd do it.  They didn't care!  You may argue that my cleaning techniques are less effective, but if I do it myself, I can pay more attention to my personal preferences, e.g. I prefer to leave my shower doors on their tracks and not leaning against the frame; I prefer to leave permanent wall fixtures attached to the wall; I prefer to keep the fridge door closed; I prefer to keep the stove gas off (stay tuned for my Customer Disservice post).

I look for similar passion when I evaluate software developers, and I have since the days when I was a TA for CS 201.  I was in the Computer Science program right when the .COM trend hit; many students told me they were choosing Computer Science because "it's the thing to do" and not because they like it (heck, some of them hated it).  I find it disturbing when I work with people whose goal is to make it to closing time; I find it fulfilling when I work with people who love doing great work.  Although it has many creative elements, software is a tangible work product.  You can tell the difference between a product built by someone because they have to and a product built by someone who loves to do it.

2.  Fundamental Software Skills

2a.  Know Your Tools (or Learn Them)

(Ha!  You see what I did there?  Stay tuned for my Math post.)

You have to walk before you can run...  Blocking, tackling, passing, catching...  Pick your quote.

You must master the fundamentals of your craft before you can expect to succeed.  I kick myself every time I hire a contractor that doesn't know how to use a bubble level.  I've had to redo too many home projects that weren't level.  The same should apply to software.  I've seen a few well-run test-driven development shops; these instances are great arguments for implementing TDD yourself.  But before you do that, shouldn't you learn how to write a unit test?  Or use source control?  Should we hire programmers that can't figure out where the Start button is?

2b.  Communication

Communication doesn't apply if you work by yourself in isolation.  Unfortunately, I have yet to find a suitable financial arrangement where I can work in a cave and no one uses my software (stay tuned for my Mega Millions post).

Communication is the ability to take your thoughts and stick them in someone else's head, and vice versa.  I don't care how you do it, as long as you do it efficiently and non-invasively.  I believe that strong verbal communication is important in a collaborative environment.  I believe that strong written communication leads to well-written code.  I believe that strong user interface communication leads to happy users.  There are many ways to accomplish communication, and a successful software developer must master all methods pertinent to the project. 

2c.  Attention to Detail

I have difficulty reading resumés past the first typo.  If it's a really bad typo (like you misspelled the technology that you work with), I can't continue reading.

This is my tie-in to Passion.  If you care about your work product, you'll pay attention to detail.  I know, I know, sometimes we're in a hurry and we'll check in a typo.  Sometimes we'll check in a new file with a typo in the file name -- those can be more difficult to fix...  but you should.  On one project, I recall encountering a somewhat humorous typo in a filename, but when we saw that the file had been created years in the past, modified many times since then, and still no one thought to fix it, it wasn't so funny anymore.  This even ties back into Communication: our file names, class names, identifiers, code, and comments are all ways that we communicate with other people on the team!

 

I submitted an application to give a talk on improving code quality.  My greatest fear is that my application will be selected and I'll have to pare hundreds of things I can say from my soap box down to the few that can fit into an hour.

Agile software development, particularly Scrum, has been receiving a lot of attention lately.  In its best-case scenario, I've seen it amplify the talents of individual team members and produce some spectacular results.  In its worst case, I've seen it amplify technical shortcomings and crush entire projects.  Technical talks are focused on the latest and greatest processes and technologies, but it's rare that I see a return to the fundamentals -- the basic software development principles for which I penalized many a CS 201 student. 

Nerd Alert: Sync iPhone Contacts & Calendars Over The Air

I just finished upgrading my infrastructure to Windows Server 2008 R2 with Hyper-V and Exchange Server 2010 because...  actually, I don't exactly remember why I embarked on this task, but I've found two advantages:

  1. I can handle my own outgoing email.  I have a forwarded email address in a domain that I no longer own, and I've had to rely on other email providers for my outgoing mail.  If I used Gmail, I'd get the little "on behalf of" addition on my messages.  Now that it's all under my control, I have reliable outgoing email (as long as my internet connection is reliable).
  2. My personal contacts and calendar are stored in Exchange; now that I can sync with multiple Exchange servers on my iPhone, I can keep my personal contacts and calendar on my phone.  If I lose my phone, I can wipe my contacts remotely in Outlook Web Access!

Hmm, I don't remember why I started rebuilding everything, but I remember why I finished...  I went to sync my contacts in iTunes and I saw a popup ad for MobileMe.  I'm not paying $99 a year for that!

Exchange 2003 Resource Booking From Outlook 2010

I happened to open up my calendar to reschedule a meeting and I noticed that none of my meetings were listed on the room schedules.  The friendly administrators at my client site told me that nothing's changed; therefore, I deduced, the issue was in Outlook 2010.

A quick search turned up a knowledge base article that tells me that "by default, Outlook 2010 does not implement the direct booking code that is used in earlier versions of Outlook. Instead, a meeting request is sent to the resource mailbox in the same manner in which a meeting request is sent to regular meeting attendees."  Great!  So I have to modify the registry to make Outlook work the way it used to work!

This entire Office 2010 release seems to push users and administrators alike to push to later technologies -- a lot of 2003 features are being phased out!  Don't get me started on PowerPoint...

 http://support.microsoft.com/kb/982774

 

Posted 05-19-2010 by Ed | no comments
Filed under: ,
Customer Disservice

It's actually easy for me to boycott @MacaroniGrill since it's constituted 8 of my meals in just under three weeks and I could use a break.  Perhaps you restaurant types can offer your inside information to help me justify or invalidate my claim.

Background

We went to Macaroni Grill for lunch today.  I think we had a pretty new server, soft-spoken to the point that everyone at the table engaged in separate conversations as they didn't realize that he was suggesting specials.  For our beverage service, we ordered three iced teas and one water.  After some time, our server returned with a tray which held four filled glasses arranged in a roughly square pattern.  Balancing the tray in the palm of one hand, our server first served my iced tea, which was located on the half of the tray that was closer to his body.  He then decided to serve the glass of water, which was also located on the half of the tray that was closer to his body.  At this point, (this is for you physics junkies) the mass of the tray and its contents at the far side of the tray greatly exceeded the mass that was closer to our waiter's body.  The acceleration of gravity, which I believe was roughly constant at our location, resulted in the contents of the tray falling onto my lap.

Fortunately, I live quite close to this location, so I was able to go home to change my pants and return in only 20 minutes (by the way, I don't recommend walking outside in freezing temperatures with soaking wet pants).  As I rejoined my party, I wondered whether the server or the management would contribute anything for this inconvenience.  Free appetizer, free entree, heck, I forgot my $4 off coupon at work and maybe they could still give me that discount.  I was a little displeased that no one came by, but I figure that they might have forgotten.  However, upon providing us with the check, the server apologized and said that they took $2 off the price of my iced tea.  I wish they'd just forgotten about it.

Options

I don't know how often drinks are spilled in people's laps (our server said that it happens every couple of months), but stuff happens.  I'm not upset that this happened, but I'm upset that the restaurant, our server, and I missed out on a fantastic opportunity to make a lot of money.  Here are the scenarios that I'd expect:

  • Restaurant comps the entire meal.  Restaurant probably loses, given that it's $70 worth of lost revenue, and really, the only inconvenience that the rest of my party endured was having to move to another table.  I win because I get a free meal and the server wins because he's probably going to get a $50+ tip.  This is probably not part of Macaroni Grill corporate policy because servers would be intentionally dumping trays into people's laps just to collect huge pity tips.
  • Restaurant comps my meal or an appetizer, or gives me one of those $10 coupons that they give me every time I place a catering order.  Where was this option?  Everybody wins.  I win because I get a free meal.  The restaurant wins because I get to blabber about my positive experience with Macaroni Grill until everyone gets sick of hearing it.  The server wins because he'll get another few bucks thrown on top of the tip.
  • Restaurant does nothing.  This has happened to me a few times.  In some cases, the disservice was bad enough that we stopped going to those places, but we didn't really put up a fuss about it.  Today wasn't a big deal, and I'm sure that all of this would have blown over without any issues.
  • Restaurant gives me the iced tea for free.  Guess what!?  You don't have to pay for the stuff that we dropped on you!!!  @($!  Who wins here?  The server got a lousy tip (15%, which I guess might be good enough that some people don't know they've been stiffed, but that's a discussion for another post); the restaurant loses my business, because now I'm going to Carrabba's or the Olive Garden; I lose because I probably spent more than $2 for gas and laundry and now I need to find another reliable caterer for my office meetings.
  • Restaurant cranks the cheese grater and dumps the contents on our heads.  As long as they don't charge us for the cheese, that's fine, right?!?

Conclusion

I'm forced to add Macaroni Grill to my boycott list because I think that there was plenty of opportunity not only to keep me from leaving cheesed off, but for me to leave blissfully happy with many positive recommendations about this restaurant.  Am I being too harsh?

Posted 02-12-2010 by Ed | no comments
Does Pair Programming Work?

Does pair programming work?  I stayed up past my bedtime last night discussing this very subject with some of my colleagues.  When I was asked this question, I was quick to respond with "I've seen it done, and no, it doesn't work."  When someone else agreed with me and cited reasons which had nothing to do with my "pair programming" experience, I realized that the activities that I've been exposed to don't quite fit the definition of pair programming.

From Wikipedia, which is probably closer to correct than I was, pair programming involves:

  • two programmers working together at one workstation.
  • one types in code
  • the other reviews each line of code as it is typed in
  • the two programmers switch roles frequently

It sounds like pair programming is an exercise in balanced effort, but I have yet to witness the appropriate 50/50 (or even 40/60) split between the two developers.  Most often, I've seen the 100/0 split.  I've seen senior software developers pair work with junior developers at one workstation (bullet 1: check).  The senior developer types in code (bullet 2: check).  The junior developer stares blankly at the screen or sometimes counts the ceiling tiles while the other guy does all of the work (bullet 3: uhh, check?).  Given that the senior developer just did all of the work, there's no need to switch roles!  (in lieu of bullet 4, the senior developer wonders why the young apprentice isn't learning anything.)

I tend to fall on the opposite side of the scale in my mentoring strategy, where I refuse to do someone else's work and instead I ask a series of leading questions which [eventually] lead to the answer.  In this equitable 0/100 scenario, I think that my developers learn a lot, but from their feedback, I'm pretty sure that it's annoying ("Why don't you just tell me the %#$* answer instead of asking me questions all day?").  @robertohernandez argues that it's not completely 0/100 because I still spent time helping someone, but it's a lot more impressive if I exaggerate the statistics.

Does pair programming work?  I've seen some people call what they do "pair programming" but it wasn't pair programming, or perhaps it was pair programming executed badly.  I still don't know if it works, but I've talked to a few dozen people who have tried it, and one of them says it works really well.

Microsoft Money to Quicken Migration: "Great" Software?

Microsoft announced that they were discontinuing Microsoft Money and I just switched over to Quicken.  I made a rookie mistake when I assumed that Quicken, being the market share leader, would have the superior product.

Given that I use a Microsoft operating system and I use the Microsoft Office suite almost daily, I've grown quite accustomed to how things should work.  When I see something that looks like a list view, I expect to be able to click and drag to change the order of my columns.  If I do a find and replace, I don't expect it to lock up my application for 20 minutes (what the heck is taking so long?!?).

I think that far too often, people assume that software is great because it's the only thing that's out there.  But there's room for improvement.  Infragistics Quince is a great source for UI patterns that work: http://quince.infragistics.com/.

 

Posted 11-14-2009 by Ed | no comments
Fix Adobe PDF Preview Handler on 64-Bit Windows Systems

A while ago, I noticed that my Adobe PDF previews in Outlook 2007 weren't working, but I didn't notice until today that they stopped working right around the time that I upgraded to Windows 7 x64.  A quick search came up with a quick-and-easy registry fix:

http://www.pretentiousname.com/adobe_pdf_x64_fix/index.html

Posted 10-05-2009 by Ed | no comments
Filed under: , , ,
Who Won the Blue Iguana Free Lunch?

It might be fixed, but I'm not complaining.

At many establishments, they have those fish bowls where you can drop in your business card for a chance to win a free lunch.  I've never been selected for any of these drawings until July, when I won a free lunch at The Blue Iguana, a local restaurant in Fair Lakes.

I can see why this sort of promotion might be worthwhile for both the restaurant and me.  Although the coupon was for $25, I went to lunch with eight people.  I'm fairly certain that the restaurant would have at least broken even.  For me, eating lunch was already in the budget, so that left me with extra money to spend foolishly.  Also, that month's particular list of three winners and their respective companies was published in a local paper, which was enough for the partners of Excella Consulting to notice my free lunch in a Google Alert.

My benefits didn't really stop with one free lunch, however.  The managers at Blue Iguana introduced theirselves when I presented my coupon, and I've been enjoying more personalized service since then.  In turn, the improved level of service has motivated me to return, not only for lunches, but on the occasional night out, and to host a few company or client happy hours here and there -- again, I'm fairly certain that the restaurant gained far more business from me than the cost of the $25 coupon.

I was a little bit surprised to see today that I've won a free lunch for the second consecutive month...  but not really.  I question how "random" the drawing might be, and I notice that, all of a sudden, there are four winners when in past months there have only been three.

Again, I have no complaint about this sequence of events, but my streak seems suspicious.  If you wish to discuss this further, you can find me at the Blue Iguana.

Posted 08-14-2009 by Ed | no comments
Filed under: ,
Intermittent Network Connectivity On A Virtual Machine

We ran into an interesting problem on a development PC that was converted using the physical-to-virtual (P2V) wizard in System Center Virtual Machine Manager (VMM).  The first sign of trouble was that some logins produced a 'local policy of this system does not permit you to logon interactively' message.  At first, we thought that group policy might be causing issues, but even after removing domain policies, the issues continued.

On Monday, all sorts of network problems cropped up.  The local OS seemed to be running fine, but any network connectivity was sporadic at best.  In fact, when connecting using Remote Desktop Connection, the connection would disconnect and reconnect every few seconds, making any action difficult (especially since, when reconnecting, we must reauthenticate, and more often than not, such action produced the 'local policy of this system...' error).

Running a continuous ping to the VM, the sys admin noted that we were indeed losing the occasional packet.  In response to DHCP client failures in the Event Log, the sys admin decided to change the VM's IP to a static IP.  This in itself did not solve the problem, and we were left confused...  until he noticed that the continuous ping was still receiving ping responses... on the old IP.  As it turns out, the P2V wizard assigns the physical MAC address of the machine as a static MAC on the virtual machine.  This makes sense for a replacement scenario, but in our case, the physical machine was re-imaged and returned to the pool.  On Monday morning, when everyone got to work and powered on their physical machines, we had two machines with an identical MAC address.

Posted 07-21-2009 by Ed | no comments
Filed under: , ,
Duplicate Best Bets In SharePoint 2007: An item with the same key has already been added.

In the distant past, I ran into issues when I tried to add duplicate best bets entries in MOSS 2007.  A Microsoft Hotfix (http://support.microsoft.com/kb/939077) took care of that particular issue, although it caused some Advanced Search headaches...  that's another post.

I ran into another strange issue when I decided to try mailto: URLs for my best bets.  I created the first with no problems.  After I created a second best bet with a similar but different address, I received the dreaded "item with the same key has already been added" error on the best bets popup.

No problem...  I'll just remove the best bet.  Except when I clicked Remove, I received an "item with the same key has already been added" error.  No problem...  I'll try deleting the keyword.  Except when I went to the keywords list, I received an "item with the same key has already been added" error instead of the keywords list.

I ended up going to the SSP database itself, where I found my entry in the MSSBestBets table.  I removed the mailto: URL and replaced it with a normal http:// URL, and I was then able to edit my keywords and best bets normally.

It could be that mailto: URLs aren't completely working in best bets, or it could be that my email addresses are similar and they both have hyphens and underscores...  either way, the keys that are generated for my particular best bets are obviously not unique.

I don't think that anyone advises manually editing a SharePoint database, and I'm not going to be the first to advise anyone to do this...  but now I know how to edit my keywords and best bets.  I can manually edit my duplicate mailto: URL, make my changes on my site collection, and then put my "duplicate" mailto: URL back in the database.

Posted 07-07-2009 by Ed | no comments
SharePoint Web Parts with AJAX and WCF on an SSD

Inspired by @sahilmalik, I spent most of my Sunday re-architecting a custom web part for Excella Consulting's intranet.  I had originally planned on doing some "light" development work to try out my spiffy new SSD, but given that my development environment ran so quickly, I made enough progress that my ad-hoc plans expanded.

Virtual Machine Performance on an SSD

I originally glanced at solid state disks after @andrejpk reported that Windows 7 ran "obscenely fast" on his.  I was compelled to purchase after I became frustrated with my work laptop -- it's a Dell Latitude D630 and it still runs Windows XP, but with a 3 year-old installation, it was taking me almost 15 minutes to get from a cold start to having interactivity with Outlook and Visual Studio.  After mirroring the 7200 rpm drive onto my SSD, I'm now up and running in 90 seconds.  Everything on the XP system is running something like 10x faster.

For my development work today, I started from scratch and built a Microsoft Virtual PC image with Windows Server 2003 R2, MOSS 2007 web front end (I put the DB on a physical server), and Visual Studio 2008 with WSSBuilder.  I only allocated 1GB of memory for the image, but it ran fast -- I honestly couldn't tell much difference between a typical desktop experience and the VPC experience.  I'm sure that I'd eventually get disgruntled if I loaded up SQL Server and a whole bunch of other apps, but for the lightweight work I was doing, it was extraordinarily pleasant.  It turns out that you can install MOSS from scratch in less than an hour!

 

The rest of my experience is rather unoriginal, i.e. I merely borrowed concepts from about 20 different sources.  I'd like to come back (eventually) and fill in the details, but it will probably look like a long list of links, many of which are on http://blah.winsmarts.com.  So, until then, the highlights:

AJAX Update Panels In SharePoint

I've actually had the urge to AJAX-enable the intranet for a couple of years.  I came back from TechEd 2008 with the full intention to do so, as it seems like a logical first improvement before throwing Silverlight on there.  Of course, here I am, over a year later, and I'm just getting around to it.  The configuration of ASP.NET AJAX is really quite simple -- for .NET 2.0 it's just a matter of adding in a few  web.config sections.  I did run into some issues with SharePoint's form wrapper, so I did have to remove the return from return _spFormOnSubmitWrapper().  This particular issue is fairly well-documented, so I didn't have much trouble throwing in some ASP UpdatePanel controls on my web part.

WSSBuilder vs. VSeWSS

I was going to try VSeWSS 1.3 on my host machine, but I found out rather quickly that you can't install it on a machine that doesn't have SharePoint on it.  I ended up installing WSSBuilder on my host machine, and since I already had it on the desktop, I used that on my VM.  My original web part was built on an old Visual Studio template for SharePoint, but WSSBuilder is much easier to work with.  I hear that VSeWSS is pretty much the same thing...

 WCF In SharePoint

I spent the bulk of my day (after software installation) converting my old web part code that uses the SharePoint object model into a more modular WCF-based implementation.  It's kind of a shame that SharePoint doesn't include WCF out of the box, but now that I have it working, I'm rather pleased at how well it works.  Making my web part talk to WCF wasn't as quick as I'd hoped, but my difficulties really boiled down to two categories:

  • After getting my web part to work with a dummy WCF service, I spent far too long a time dealing with service crashes that all stemmed from my inability to access SPContext.Current.  I had diligently created a custom binding configuration to pass NTLM credentials... but it worked so much better when I actually specified the custom binding configuration on my endpoint.  Oops.
  • I spent a bit of time dealing with inefficiencies that I created from some new deployment processes.  For instance, I changed the service to require ASP.NET compatibility when I wired up the NTLM credentials.  Since the WCF Service Host doesn't run ASP.NET, I couldn't automatically generate my proxy classes.  I fumbled around for a while before I created a new dummy service so that I could easily change contracts and regenerate the proxy.  I also lost a bit of time from deploying my DLLs to the GAC.  I found that I have a tendency to forget that my old assemblies are cached and then I'll try a few new "fixes" and break a few more things before I realize that I'm looking at the wrong assembly.

WCF is still quite spiffy.  As a bonus, since my service is written in .NET 3.5, I was able to replace a few hundred lines of C# code with a few dozen lines of Linq.  And it runs so much faster!

 

So, that's one day come and gone...  now I should probably try opening Expression Blend.  Or finish painting the guest bedroom.

Posted 07-06-2009 by Ed | 2 comment(s)
Filed under: , , ,
More Posts Next page »