Welcome to MSDN Blogs Sign in | Join | Help

How do I go about designing API for my Library? Gosh where do I start? If you are asking these questions, then start with Krzysztof's Framework Design Guidelines Digest.

Here is a high level overview of the process:

DG1 DG2

 

DG3   DG4

1) Ok, first list out all the feature areas (f1, f2, f3, ...) for your applications.  To begin with pick a feature that you want to drill down on.

2) List out the TOP SCENARIOS to support that feature set.

3) Now slip into end user (developers) shoes and ask yourself - What would the end users code look like when implementing my scenario using my API?

4) Dump your thoughts by writing some sample scenario code that end user would write.

5) Now you have a starting point.  Design you API based on the sample code that you just wrote.

Front Row Access is a Microsoft internal SMSG (Sales, Marketing & Services Group) event organized to bring industry recognized leaders to provide an opportunity for employees to learn & build critical skills. Yesterday's speaker was Dr. Stephen Covey, an icon among motivational speakers who talked about leadership, management, productivity in the workplace, and the values of family and a happy home life.

 

J.D. Meier & I exchanged notes after the presentation. He did a brain dump in great detail & easily consumable bit sized nuggets. I don’t want to regurgitate J.D’s notes; however, here are my key takeaways on key skills required for current and next generation:

 

·         Seeking the third Alternative – the emphasis here is Not about agreeing or disagreeing - but to understand. He gave a powerful tool (a question) to try during conversation deadlock – Would you be willing to seek for a solution that is better than what either one of us have proposed?  
Many in the audience questioned about the practicality of WIN-WIN agreements in a highly competitive & performance oriented organizations. He gave wide range of examples and anecdotes (from abortion issues, environmental issues to intern continental issues in united nations) to illustrate why his principles, simple-tools are so effective, proven and applicable across the board.  He said, it is not going to be easy to implement them. It will take time, commitment & persistence to put them in practices.  
He emphasized the important and difference between Telling vs. Involving.  Telling – is giving the solution, Involving – let the solution come within.  Telling worked well in industrial age (Boss telling an employee what to do); however, in knowledge Worker Age it is critical to involve workers/dependent-teams in the problem & work up the solution together.  The forces are stronger & against you when you try to operate independently, in a dependent world.

·         Empathic listening – Talk less, listen more.  Listen with others frame of reference. Empathize before you present.  Demonstrate deep integrity that you truly care for the other person’s opinion. Have an abundance mentality & always promote a synergistic solution to the problem.  He said communication is the no# one skill to master in life. So, good communication starts with empathic listening.

·         Continuous learning – I am big fan of lifelong learning. He emphasized the need for continuous learning & sharpening the saw.  He showed a video that illustrated how mankind had to let go off old practices & go-through intense learning process moving from Hunter-&-Gather age to a farmer age.  It is critical to let go of industrial age practices, and start adopting and preparing for the knowledge worker age.  

 

What struck me the most was Dr. Covey’s ability to convey principles, practical tools and techniques draw from real world experiences.  He came across as someone who always had simple answers to complex problems in today’s world.

I have always wondered why Bill named this company "Microsoft". Today at TechReady6 Ballmer mentioned that it stands for "SOFTware for MICROprocessor."

I am currently blogging from ETECH ... we announced DEEPFISH (mobile web viewer) and is available for a limited set of users. Check it out - http://labs.live.com/deepfish

Srinath  

After my 4+ year at patterns & practices shipping five guides (Building Secure ASP.NET Apps; threats & countermeasures; perf & scale; SmartClient Arch & Design; BI Arch & Design) and 2 projects (UAB, VSTO 2005 Outlook Managed Add-ins), I have moved over to some new challenges.

Recently, I joined the Live Labs Engineering team as Lead Program Manager.  This morning our renewed website went live...checkout - http://labs.live.com .  Be sure to checkout Photosythn technology and Adam's interview on on10.

~ Srinath

Patterns and Practices home

 

About the Deliverable

The Architecture and Design Guidelines for BI Applications provides prescriptive guidance on how to overcome architectural challenges and design issues when building Business Intelligence solutions using Microsoft platform. This guide is intended for software architects and developers who are developing Business Intelligence applications using SQL Server 2005 - Integration Services and Analysis Services.

 

About this Release

This final (and 4th) community release includes the following:

·         400+ architecture and design guidelines

·         10 Chapters (covering – Data Extraction, Staging, Transformation, Loading, Data Quality, Dimensional Modeling, Relational Partitioning, OLAP etc)

·         This final release includes Data Mining guidelines chapter.

 

Roadmap

The patterns & practices team focused on this exploratory community project after speaking with the SQL BI Product Group, SQL Marketing and Field.  Being an exploratory community project - we anticipate gaps and scope for improvement.  There is still lot of work to be done; our goal was to seed the community with just enough information to raise the excitement level and provide an opportunity to grow.  There are no planned updates to this project moving forward

 

Spread the message: Consider using below template (as starting point) to spread the word through blogs, DLs, forums, etc.

 

The patterns & practices team is please to announce the availability of Architecture and Design Guidelines for Business Intelligence Applications. This exploratory community project provides prescriptive guidance on how to overcome architectural challenges and design issues when building Business Intelligence solutions using Microsoft platform. This guide is intended for software architects and developers who are developing Business Intelligence applications on the Microsoft .NET Framework using SQL Server 2005 - Integration Services and Analysis Services.  Being an exploratory community project - anticipate gaps and scope for improvement.   For more information see: http://codegallery.gotdotnet.com/biguide.

 

A special thanks to my team

o        Dev architect: Chakrapani Kotipalli (Tata Consultancy Services)

o        Test: Mohammad Al-Sabt and Balaji Venugopal (Infosys Technologies Ltd)

o        Tech writer: Reed Jacobson (Hitachi Consulting)

 

 

Thx - Srinath

Interesting read: http://answers.google.com/answers/threadview?id=368317  talks about 5 scenarios

  • Shaving habits linked to stroke risk
  • Nightshift link to breast cancer
  • Study finds prayer 'double chance of IVF success'
  • Breast implant suicide link
  • Tooth loss link to heart disease

Other examples

  • ice cream sales and shark attack
  • number of cavities in  elementary school children and vocabulary size
  • skirt hemlines which rise with stock market
  • Napa Valley Wine Auction and the Dow Jones

Enjoy ~ Srinath

Today at Seattle Code Camp day 2 -- Peter & Brad gave the attendees a taste of Dependency Injection via ObjectBuilder (which is part our CAB deliverable), TDD & Pair Programming, Model-View-Presenter, Monad and CAB.  The slides for the presentation will be posted at Peter's site.  Both Peter & Brad fielded a lot of questions on all of the above topics.

One of the attendees asked about our the Offline App Block & how would he replace the out of the box ConnectionDetectionStrategy (because the default implementation relies on wininet api's used by Internet Explorer).  I couldn't find the original article & code that came with below implementation (I think this is from David), it illustrates how to ping a web service to check for connectivity. 

using System;
using System.Runtime.InteropServices;
using System.Xml.XPath;
using System.IO;
using System.Configuration;
using Microsoft.ApplicationBlocks.Common;
using Microsoft.ApplicationBlocks.SmartClient.Offline;
using System.Web;
using System.Net;

namespace Microsoft.Samples.OfflineSampleClient
{
 /// <summary>
 /// This is a simple implementation of a ConnectionDetectionStrategy.
 /// It periodically pings the web server to see if is available.
 /// </summary>
 public class PingWebServerStrategy : IConnectionDetectionStrategy, IProvider
 {
  private int pollInterval;

  public const int MinimumPollingIntervalInSeconds = 1;

  public PingWebServerStrategy()
  {
  }

  /// <summary>
  /// Getter property to retrieve the polling interval in seconds
  /// </summary>
  /// <value>Polling interaval in seconds</value>
  public int PollInterval { get { return pollInterval; }}

  /// <summary>
  /// Query method to cause provider to actively detect the connection state
  /// </summary>
  /// <returns>True if provider believes we are connected</returns>
  public bool IsConnected()
  {
   bool connected = true;

   try
   {
    HttpWebRequest _webRequest2 = (HttpWebRequest)WebRequest.Create( "
http://localhost/OfflineSampleWebService/OfflineSampleWebService.asmx" );
    _webRequest2.Credentials = System.Net.CredentialCache.DefaultCredentials;
    using ( HttpWebResponse myHttpWebResponse=(HttpWebResponse)_webRequest2.GetResponse() )
    {
     if ( !_webRequest2.HaveResponse )
     {
      connected = false;
     }
    }
   }
   catch( Exception ex )
   {
    connected = false;
   }

   return connected;
  }

  /// <summary>
  /// IProvider.Initialize method implementation. Retrieves configuration information from app.config file
  /// </summary>
  /// <param name="configurationNode">XmlNode to parse for configuration information</param>
  public void Initialize(XPathNavigator configurationNode)
  {
   XPathNodeIterator iter = configurationNode.Select("pollingInterval");
   iter.MoveNext();

   pollInterval = GetCurrentPollingInterval(iter.Current.Value);
   if(pollInterval < MinimumPollingIntervalInSeconds)
   {
    throw new ConfigurationException(ProvidersResourceTable.GetString(ProvidersResourceTable.ConnectionManagerPollingIntervalMessage));
   }
  }

  private int GetCurrentPollingInterval( string pollingIntervalString )
  {
   try
   {
    return Convert.ToInt32(pollingIntervalString);
   }
   catch( FormatException e )
   {
    throw new ConfigurationException( ProvidersResourceTable.GetString( ProvidersResourceTable.PollingIntervalShouldBeNumeric ), e );
   }
  }
 }
}

We (patterns & practices -- Smart Client team) just released CAB (Composite UI Application Block) - Oct 2005 CTP2 - grab it from our GotDotNet space
http://practices.gotdotnet.com/projects/cab

Thx - Srinath

My group (patterns & practices) has published a draft of VB6 upgrade guidance to GDN community space. The Guide covers many technical challenges (like COM+, unsupported featues, API call, etc.) but also addresses the process of migration: asessment, planning and effort estimation, preparation for migration, application advancement, etc. Please review & send your feedback to to vbmigfb AT microsoft.com.

Srinath

 

After several weeks of hard work, at TechEd we announced our latest work – Yes, you can now easily develop managed outlook add-ins with VSTO 2005. 

 

Read the following articles to get an overview

Introduction

In depth architecture article

End-to-End Task Add-in sample

 

Wait that’s not it…we have also worked hard to provide you all necessary material to get started…Enjoy!

 

Download Core Bits

Download Snippets Samples

Download Hands-on Labs

Download Feature Samples

 

Srinath

I have been extremely busy for last couple of months managing multiple projects in our p&p smart client program and for personal reasons.  One project that we just shipped - Updater Application Block version 2.0 .  Based on extensive feedback we received for v1; we rewrote to internal design to accommodate new scenarios, provided simpler APIs, and quick starts with documentation (this was one of the big requests.)  I am hoping to write more about this block & how we did it in future posts! Stay tuned.

Code snippet on How to determine the installed version of BITS - if you need to from your Update App Block (UAB)

http://www.gotdotnet.com/workspaces/messageboard/thread.aspx?id=83c68646-befb-4586-ba9f-fdf1301902f5&threadid=950bf661-b866-4d24-9a1c-67a897fec880 
or,  http://blogs.msdn.com/eugeniop/archive/2004/08/20/217991.aspx

We (patterns& practices group @ MS) are currently working on the planning process for Offline Application Block version 2. If you have played with this block...
- Please give us details on what was easy and What specific challenges did you face when using this block?
- Did you create any work-arounds to overcome limitations of the block?
- Did you build or see real world app built using this block? Can you share the design details of that app (if you have one?)
- When you programmed against the OAB API, what was easy, what would you like to change?
- Did you create any extensions for this block?
- Anything else would you like to share…I am open for suggestions.

Thanks for your time!

Feel free to email me directly srinathv AT microsoft DOT com


 

Community code fix for "Updater Application Block" for BITS 2.0 breaking changes is posted at

http://www.gotdotnet.com/Community/Workspaces/viewuploads.aspx?id=83c68646-befb-4586-ba9f-fdf1301902f5

More Posts Next page »
 
Page view tracker