More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  Talbott Crowell's Develo...PhotosProfileFriendsBlog Tools Explore the Spaces community

Blog

August 16

Code Camp in near Hartford, CT

I will be speaking at Code Camp at CTDOTNET (Connecticut .Net Developers Group) today on the topic Silverlight as a front end to Excel Services
 
My slides are available for download here:
July 08

Outsourcing issues

Everybody is familiar with the trend to outsource customer service.  John Timmer wrote an article on ars technica called "Study: outsourcing can lead to plummeting customer loyalty" which details some of the results from this trend.
 
From my own experience with United Airlines and a number of other companies, I have found it very frustrating that clearing up problems that used to be so easy to solve before has now become so difficult.  But I don't think it is necessarily the fault of the folks in India taking the calls.  It appears that before the switch to the Indian customer service call center that United Airlines had people answering the phones in the USA had a fully connected computer terminal with the authority to fix problems.  Now, the outsoucing companies appear to have a semi-connected terminal that has limited capabilities and very little authority to solve problems.  So all they can do is say, I'm sorry but I don't have the ability to do that...
 
It appears the cost cutting is two-fold.  First of all, use low cost people to answer the phones. Second of all, give them limited abiltity to make the customer happy saving cost by reducing solutions that cost the company money.  The poor folks in India have become wipping boys for frustrated customers (no fault of their own). 
 
We recently spent 100,000 mileage points on 4 tickets from Boston to Redding, California (with a layover in San Francisco).  When confirming the flight, it appears that they didn't reserve a spot for our small dog (which goes under the seat) and there was no alloted "pet" space on the leg from San Francisco to Redding.  So we asked if we could change the flight to Boston to San Francisco (keeping part of the flight), so we could drive the rest of the way 5 hours and still reach our destination.  From United Airlines point of view, that is the same points spent plus 8 free seats which is less fuel cost to them plus more seats available for them to sell (4 seats from San Francisco to Redding and 4 seats back from Redding to SFO).  Well they want to charge $400 to make the change which will save them money!  There is nothing they can do to help us.  We are not asking for anything for free, just something fair.  It appears that either their systems are either so locked down, or their process is so rigid, that they have completely lost the sence of what customer service is.  The outsorcing company appears to have their hands tied, but there is no way to speak to someone at United Airlines that can help.  The airline business is in such a nightmare state that they can do whatever they want, but wow we are loosing customer loyalty fast!
 
Have you had any bad experiences with outsourcing?
May 19

EntLib 4.0 and Unity

Enterprise Library (EntLib for short) has become a standard for developing business applications in .Net.  EntLib was initially released in Jan 2005 and combined a bunch of Application Blocks.  Application Blocks were chunks of reusable code that helped developers accomlish common aspects of an application design such as database access, caching, security, and logging, without rewriting it for every application.  By using the application blocks and EntLib, your apps have a well tested infrastructure for those common aspects.
 
EntLib evolved from v1 to v4 with an update approximatly one per year.  Version 1.0 has been deprecated, Version 2.0 was rewriten to leverage .NET 2.0 framework.  For example the Configuration Application Block went away and instead EntLib 2.0 uses the native .NET 2.0 Framework configuration functionality.  Version 3.1 added the Validation Application Block and the Policy Injection Application Block and was released a year ago and was targeted for .NET 2.0 or .NET 3.0  (.NET 3.0 is required for the WCF functionality).
 
Here is a table of EntLib evolution:
 
Ent Lib Version   .NET Version Visual Studio New Features
 EntLib 1.0 - Jan 2005  .NET 1.1 VS 2003 bundled application blocks (Data Access, Caching, Exception Handling, Logging, Security, Crypto, Config)
 EntLib 2.0 - Jan 2006  .NET 2.0 VS 2005 Config app block goes away (leverages .NET 2.0 Framework config), mostly internal changes
 EntLib 3.1 - May 2007  .NET 2.0 or 3.0 VS 2005 Validation Block, Policy Injection Block, improvements to Data Access, etc...
 EntLib 4.0 - May 2008  .NET 3.5 VS 2008 Unity App Block, WMI 2.0 support, pluggable Cache Manager
 

What's new in EntLib 4?

What's different about this release?  For starters v4 requires .NET 3.5 which means you will be using Visual Studio 2008.  Also, v4 now integrates the Unity Application Block (Unity).  Unity supports two key design patterns: Dependency Injection (DI) and Inversion of Control (IoC) .  This can help application architects and designers implement loosly coupled dependencies which simplifies application code.
 
Mike Walker blogged about this release also.  He has links to hands on labs, etc...
Of course the best source for more information about this release is the MSDN Patterns & Practices site for EntLib 4.0
May 05

Excel Services and Silverlight, a dynamic duo

Excel Services is a component of MOSS (Microsoft Office SharePoint Server 2007) that brings the capabilities of Excel to the server side.  In the past, customers and programmers that wished to add Excel calculation logic to the server needed to use ActiveX and COM to instantiate Excel's Application object.  This unfortunately was not an ideal model for a scalable server-side enterprise application and required a few tricks to make it perform and scale well.   With Excel Services, much of the functionality of Excel's client application is brought to the server and can run in the context of MOSS which is highly scalable.  Some Excel features like macros and VBA code are not supported on Excel Services (see http://msdn.microsoft.com/en-us/library/ms496823.aspx).  But many of these limitations can be overcome using Excel Services User-Defined Functions which can be written in VB.NET or C#.
 
My company, ThirdM.com, was enlisted to build a demonstration of the power and flexibility of Excel Services by Elliott Ichimura and Bob Daniels of Microsoft.  In this scenario, Litware, a professional services company, needs a project planning application built on Excel to work with their customers to decide on those three important factors in every project: duration, deliverables, and fees (also known as schedule, scope, and resources).   Litware, like many companies use Excel to do many business calculations and ad-hoc analysis.  This is Litware's what-if scenario for project planning:
 
Excel Services business logic and what-if scenario for project planning   
To see the full spreadsheet click here. Litware has all of the project planning logic in Excel and does not want to reproduce this logic in C# or some other programming language, since it may change.  Also, the people who need to change the business logic are not programmers. 
 
In order to be more agile, Litware has chosen to leverage Excel Services to host the business logic.  Programmers were brought in to build a flashy UI on top of the Excel logic using Silverlight 2.0 and Web Services.  The Excel spreadsheet is exposed though Excel Web Services which allows the business users to update their logic without the need to change the UI.   
 Silverlight and Excel Services Demo
 
Click here to view the full Silverlight and Excel Services demo.  Click on the deliverables bar to change the deliverables.  Drag on the Duration bar to change the duration of the project (make it longer and shorter).  Drag the fee bar to the left to change the fee scaling which will deselect deliverables based on an prioritization logic expressing in Excel.  Toggle between Extranet and Intranet view to see what Litware will see for profit and use the Rates button to offer a discounted rate which will reduce the fees but also reduce the profit. 
 
This Silverlight demo uses Excel Services as a backend to recalculate the logic.  A copy of the spreadsheet is kept alive in a session for each user.  When the user clicks "Save" the session copy saves back to the SharePoint document library that hosts the business logic.
March 03

Seemless Exchange Integration with Windows Mobile

One thing I have done on my Windows Mobile device (Motorola Q) to have a better universal access experience is to save a copy of my email when sending it from my mobile device and sync my sent items folder.  What this accomplishes is the ability to see reply's to email in Outlook that I made on my mobile device and vice versa.  The reason I sought this solution was that when I replied to emails on my cell phone, it was not recording the replies in Outlook, and sometimes I didn't remember if I had replied to someone. 
 
By doing both "save a copy" and "sync sent items" you get the ability in Outlook to see the "Replied To" icon in your Inbox.  I'm using Outlook 2007 but it probably also works in Outlook 2003.  Also when you open the email in Outlook, the top bar above the "From/To" header has a message "You replied on xx/xx/xxxx 00:00 AM/PM" which is clickable to "Find related messages".  This is great because I can send an email on my mobile device and at a later date on my computer bring the reply up easily from my Inbox without searching manualy through my Sent Mail folder.
 
Here are the steps I use to accomplish this integration:
  1. On you Windows Mobile Device (I'm on Windows Mobile 5), Open your "Outlook E-mail" folder or the folder that contains your Exchange email under the Messaging applicaiton.
  2. Inside your Outlook email Inbox, choose "Menu" -> "Options"
  3. Under Options, choose "Sending" and check the "Save copies of sent items" option and then "Done" to save the option.
  4. Now click "Done" again to get back to your "Outlook E-Mail" folder inbox (or whatever your folder is called that has your email from Exchange)
  5. From your Windows Mobile inbox, choose "Menu" -> "Folders"
  6. From the "Folders" screen, choose "Menu" -> "Manage Folders" and scroll down to your "Sent Items" folder.
  7. Highlight the "Sent Items" folder and choose "Sync" then "Done"
  8. Highlight your "Inbox" and choose "Select" to return to your Windows Mobile Inbox.

Now any email messages you reply to will be decorated and linked in Outlook with your reply!

Hope this tip helps you...

February 08

Microsoft Office System Dev Conference

Going to the Microsoft Office System Developer Conference 2008 tomorrow in San Jose!  Lots of MOSS sessions.
 
Should have some interesting topics to blog about soon...
 
December 14

MonoRail's future

With the advent of Microsoft's ASP.NET MVC which has been released as a CTP called ASP.NET 3.5 Extensions Preview, what will happen to MonoRail, the other MVC for ASP.NET?  Well last month Hamilton Verissimo, aka hammett, the founder of the Castle Project, which includes MonoRail, ActiveRecord, MicroKernel, and Windsor Container projects, talks about his trip to Redmond in his blog post MS MVC and the MVC Team:

"And what happens to MonoRail? - you may ask. I’m not sure. I was really adamant that they should try to support all things that MonoRail support, but I’m not sure they are going for that. MonoRail 2.0 is pending their implementation. If the final MS MVC rocks, and provides so many things, I’d vote for forget the MR 2. If the final MS MVC has clearly something lacking, MR 2 could reuse the infrastructure and provide some nice extensions."

In his most recent blog post MVC Experiments, hammet includes the samples for download that he created on his visit to Microsoft.

Finally, the front page of the Castle Project site includes a letter to the .NET Community regarding the Microsoft MVC starts off:

"You are probably wondering how the recently announced Microsoft MVC project will compete with Castle's MonoRail.  We think that any attempt to offer more productive tools, better testability and better separation of concerns is valuable, no matter who is the author."

And finishes with:

"Is MS' MVC better? Worse? Only once we have used both will we be able to tell."

So only time will tell if one or both will continue on.  Microsoft has invested some great developers on the project so we should see some interesting options in the future.  For the MonoRail team, imitation is the sincerest form of flattery. 

December 10

ASP.NET MVC, PLINQ, and the Entity Framework

In the last week Microsoft release three exciting CTPs (Community Technology Previews):
 
  • ASP.NET 3.5 Extensions Preview
  • Microsoft Parallel Extensions to .NET Framework 3.5
  • ADO.Net Entity Framework Tools

ASP.NET 3.5 Extensions Preview, released yesterday, includes a new project by the ASP.NET team called ASP.NET MVC.  The Model View Controller pattern is one of the oldest proven patterns in object-oriented programming dating back to Smalltalk.  The Java world has been using an MVC implementation called Struts for years created by the Apache Software Foundation.  .NET developers on the other hand has been primarily using ASP.NET Web Forms and MVP (Model View Presenter) which integrates well with the WebForms platform.  At the Patterns and Practices Summit in Redmond last month Michael Puleio, Chris Tavares, and Blaine Wastell gave a talk on the Web Client Software Factory described the difference between MVP and MVC the following way.  MVP is similar to MVC except that the View interacts receives input from the user and interacts with the presenter vs MVC where the controller receives the input which intacts with both the view and model.  Here is a slide from their deck used by permission (thanks Blaine):

So what is ASP.NET MVC?  Well it is an alternative Web Forms.  So instead of primarily using the System.Web.UI.WebControls namespace, you will use the System.Web.Mvc namespace to build your applications. Web Forms is not going away or being deprecated.  It will remain as a choice for modeling your web applications.   So before .NET developers either used Web Forms, thier own custom extension of the ASP.NET framework, or 3rd party or open source framework like MonoRail.  Now .NET developers and architects will have another framework choice.  It is planned for release in the first half of 2008.

Update (Dec 11, 2007): Blaine announced last week about a Model View Presenter Bundle that just shipped and is available for download from CodePlex which includes Composite Web Application Block QuickStart.

Microsoft Parallel Extensions to .NET Framework 3.5, December 2007 Community Technology Preview includes PLINQ (Parallel Language Integrated Query). This adds a new namespace, System.Linq.Parallel, to LINQ for parallel exectuion that takes advantage of the growing number of cores on desktop and servers.  Here is an excerpt of Joe Duffy and Ed Essey's article on PLINQ, Parrallel LINQ: Running Queries on Multi-Core Processors:

"PLINQ is a query execution engine that accepts any LINQ-to-Objects or LINQ-to-XML query and automatically utilizes multiple processors or cores for execution when they are available. The change in programming model is tiny, meaning you don't need to be a concurrency guru to use it."

LINQ is a new language feature in C# and VB.NET that allows SQL like query syntax right in the language.  This is new for .NET 3.5 which is a target for Visual Studio 2008. So many times you see SQL in quotes in .NET code and it is very unnatural and requires a syntax headache of quotes because you have SQL quotes inside C# quotes for example:  

string query = "SELECT CustomerId FROM Customers WHERE CustomerName LIKE '" + custName + "%'";

In this example the programmer opens a single quote after LIKE in SQL but closes a quote in C# and then must do the reverse at the end of the statement.  LINQ allows for a "natural" query language native to C#.  LINQ also allows for stronger typing.  In the previous example, all of the SQL language is just a string in C#, so the C# compiler doesn't know a table from a column or a keyword, its all just a text string.  One way before LINQ of getting strong typing .NET database code was using strong typed DataSets in ADO.NET, but LINQ uses a completely different approach and I encourage you to explore it if you haven't already.

Finally, ADO.Net Entity Framework Tools Dec 07 Community Technology Preview includes a "preview release of the ADO.NET Entity Designer which enables users to visually design model and mappings using Visual Studio 2008".  LINQ and the Entity Framework go together well because LINQ makes querying part of the language and the Entity Framework allows the developer and/or architect to model the data similar to O/R mappers and reduce plumbing code.  Here is an article on MSDN that explains it nicely: The ADO.NET Entity Framework Overview.

December 05

Agility Becomes Mainstream

In today's article in the Financial Times Digital Business section called "What's on CIO wish lists?" Steve Bozzo, CIO of 1-800-Flowers.com, is reported to say that compaines must migrate to an "agile" architecture if they are to bring products to market that will have maningful impact on earnings and revenue.  Mostly he is referring to SOA.  But later on the article states:
Note how quickly methodologies such as "agility" - developing software in a quicker, less formal way - and "service-oriented architecture" - ways of persuading legacy systems to work with smart, new stuff - have moved from "might have" to "must have".
When FT is reporting on agility as a "must have" it is a sign that Agile Methodologies are beginning to mature.
 
When I was at the Patterns and Practices Summit 2007 at the Microsoft campus in Redmond last month, one of the sessions discussed the evolution of agile and was called "The Legacy of Agile Methodologies" by Steve McConnell of Construx.  His slides from this talk are available here but require a registration.  It was one of the better talks at the P&P Summit.  He spoke about how he has witnessed an evolution over the 6 years from a more extreme to a more blended approach.  For example:
6 Years Ago Today
No design up front Focus on design simplicity
40-Hour Work Week Sustainable Pace
Package methods Blended packages (e.g., elements of XP within Scrum)
Agile as a standalone process Agile practices used within stage-gate process
 
Steve's clear #1 positive of Agile's legacy is "Heightened awareness of importance of short iterative and/or incremental development cycles."  Which have pounded the final nail in Waterfall's coffin and provided a helpful check and balance against overly bureucratic CMM implementations.
 
Another important aspect of the talk, which you can see for yourself by downloading the slides, is the effect of defect removal.  Both with iterative and agile methodologies, you have more opportunity to remove defects early on.  The cost of defects become incresingly more costly as more and more progress is made in a project.  The well defined activities in software development are requirements, architecutural design, detailed design, construction, developer test and integration test, and finally system test.  Not counting moving to production and have the impact of the real users report defects.  So if you have a defect in the requirements and you fix it during the requirements phase, it is much cheeper than fixing it later on.  It also gets more costly, the further we get before we start fixing it.  For example if there is a requirements defect that we identify and fix during detailed design, it may require some architecture changes and detailed design changes.  But if we identify that same requirements defect during system test or worse when the applicaiton goes into production, then it becomes much more costly.
 
So think about this from every activity.  Each activity (or phase in waterfall speak) has potential for defects.  How do you best identify and fix them when it is the cheepest.  Well, if you are using Waterfall, they all pile up at the end and it becomes death by change order.  If it is iterative, then you get at each iteration the ability to identify and remove defects.  It is better than waterfall, but ideally, with agile, you are delivering functionality early and often to the customer.  This gives the customer and the development team opportunity to identify defects early and often when it is most cost effective to fix.
 
Another interesting thing I learned at the Patterns and Practices Summit 2007 was that XP and Scrum were meant to be together.  I have always believed in using the best of the various methodologies and build your own that works best for your team and your project.  But according to Peter Provost of the Patterns and Practices group, when Ken Schwaber wrote the book on Scrum, he didn't include all of the XP practices such as pair programming, because there was already a book on that, referring Kent Beck's book Extreme Programming Explained.  But these two are very compatable with each other.  Scrum defines the project management aspect and XP defines the practices to make agility work, such as unit testing and pair programming.  It seems that many people in the early days of the Agile revolution (I'm talking 2001-2002 when agile was a new hot fad), many practitioners picked up a book such as Scrum or XP and said this is the methodology we are going to use.  This is evident in Steve McConnell's talk on agile's legacy as he notes the trend from "packaged methods" to "blended packages".
 
I am a huge proponent of Agile and signed the Agile Manefesto the first year it was was up.  If you are also a proponent of Agile methodolgies, I encourage you to join the ranks of Kent Beck, Ward Cunningham, Martin Fowler, Jim Newkirk, Ken Schwaber, and many others by signing the Agile Manifesto.
 
What is most important about agility is that don't just use agile practices and agile methodologies without understanding why you are doing it.  Because, as described in Peter Provost's talk "Agile is more than 'Monkey see, Monkey do': You have to change how you think!" from the P&P Summit, the principals and values of agile are much more important than the practices.  
 
December 04

Virtual PC vs Virtual Server

Download a MS Word doc describing the differences between Virutal PC and Virtual Server: Virtual PC vs. Virtual Server: Comparing Features and Uses.
 
Virutal Server has a few advantages over Virtual PC, such as virtual networks, virtual SCSI drivers, better multi-threadding and multiple CPU support. 
 
Virtual PC has a few advantages over Virtual Server, such as support for legacy desktop OS's such as Windows 98, support for sound cards, and drag and drop between guest OS to host OS, and other client rich features.
December 03

Virtual Server Performance Tips for Developers

I am in the process of creating a virtual machine for MOSS development and wanted to blog about some of the tips I found useful.  There are two choices for running virtual machines using the Microsoft software from your MSDN subscription: Virtual PC and Virtual Server.  If you want to go beyond your MSDN subscription VMWare offers a VMware Workstation 6 for Windows for $189.  But, I am going to focus on Microsoft virtualization products in this post.
 
If you are using Microsoft Virtual PC 2007, then you have more limitations than Virtual Server 2005 R2.  But you can take the virtual machine images built on Virtual PC and run them on Microsoft Virtual Server 2005 R2 with little or no hassle.  The same is not true in reverse.  If you build a virtual machine on Virtual Server and take advantage of the faster performing virtual SCSI bus, then you will not be able to run your virtual machine on Virtual PC unmodified.  Luckily, a virtual SCSI bus and virtual SCSI hard drives are easy to convert to IDE unlike physical SCSI hardware.  Simply shut down your Virtual Server image, edit the configuration to change the hard drives from SCSI to IDE and you are done.  So, here is my first tip:
 
Tip #1: use SCSI if you don't need portability between Virtual Server and Virtual PC.  The virtual SCSI data bus is much faster than the virtual IDE bus.  It does not matter what the underlying hardware really is.  For more tips about Virtual Server see the following link from Microsoft Support: Virtual Server 2005 performance tips.
 
If you are already using IDE, here is a blog post that describes how to convert to SCSI: How to Convert a VHD boot disk from IDE to SCSI IN Virtual Server 2005 R2.  This post also shows you how to install the "fast" SCSI driver.
 
Tip #2: if you are using Virtual Server 2005 and you arn't using R2, upgrade.  Jeremy Jameson explains why in his blog: Virtual Server Issues and Recommendations for MOSS Virtual Environments.
 
Tip #3: use the fastest physical hard drive possible for your virtual hard drive.  Doesn't matter if you are running on a desktop, laptop, or server.  For example, if you are running on a desktop, add a second hard drive for your virtual machines or use an external hard drive.  The faster the better.   On a laptop use an external 7200 RPM or faster with FireWire or eSATA.  If you don't have FireWire or eSATA, you can get by with USB 2.0 but realize that even though USB 2.0 has comperable bandwidth as FireWire 400 (IEEE 1394a) the actual real thoughput is twice as fast with FireWire because of the extra overhead that USB requires from the system.

Here is a comparison of USB 2.0, FireWire 400, FireWire 800, and eSATA on WikiPedia: eSATA in comparison to other external buses.
 
Also another thing to be aware in regards to speed, a laptop harddrive spinning at 7200 RPM is 40% slower than a desktop harddrive at 7200 RPM.  The reason why is that a 2.5 inch disk has less surface area than a 3.5 inch disk.  So when those two disks are spinning at the same speed, the larger form factor covers much more surface area.   So if you buy an external hard drive for developing on your virtual machine get an enclosure that houses a 3.5" disk.  And go for eSATA or FireWire if you can.  Many disks now come with multiple interfaces. 
 
LaCie has a quad interface with USB 2.0, FireWire 400, FireWire 800, and eSATA: LaCie d2 Quadra Hard Drive.  I don't have a LaCie drive and I am not promoting it, I just use it as an example of a drive that you can connect to your desktop at home or office with eSCSI or FireWire, and then take on the road (a bit cumbersome for road warriors, but may be worth it) and connect worst case using USB 2.0 on your laptop.
 
Tip #4: If you are using Virtual Server, use Remote Desktop to connect.  You can't use Remote Desktop when you are installing the OS, but after the OS is installed, you can enable and connect through Remote Desktop Connection.
 
In the future I will include some more tips on virtual machines for developers.