Welcome to MSDN Blogs Sign in | Join | Help

I now post exclusively to http://blogs.msdn.com/usisvde.

Thanks,

jmp

As nice as Chicago is, it's generally a bad idea to connect flights through the Windy City.  I know I'm not the first to make this observation, but I think this might be a good place to keep a few notes to self.

On another note, it would be great if there were some sort of warning system for airport delays similar to the ones we have for traffic congestion/incidents - maybe this exists somewhere...

The MapPoint Web Service SDK puts tremendous power in the hands of developers.  The Windows Presentation Foundation puts tremendous power in the hands of developers.

How might they be put together?  I think I have an approach that I'd like to share which could help in many cases.  It works like this:

 

1. Use the MapPoint Web Service SDK to generate a map

2. Download the map and assign it as the source of a WPF Image

3. Place a transparent (or semi-transparent) Canvas over the Image

4. Use client side transformations to add objects to the Canvas in the appropriate location

 

You'll need to geocode the latitude and longitude of every object you add to the Canvas (the MapPoint Web Service SDK has methods to do this), and you'll have get the client side transformations right to make this work (the MapPoint Web Service SDK has samples that show how to do this), but if you do, you'll have the complete power of WPF at your disposal.

In other words, the objects you plot on the map can be stylized and programmed however you like.

Not bad, eh?  I'll post some code snippets once I get a little further along with this...

 

When I first joined Microsoft, I was sent to help build an application for a large telecommunications company which had some heavy-duty mapping requirements.  This app needed to enable the display and design of undersea fiber optic cable networks.  I had just been through my new-employee training, and thus had the following guidance and support to fall back on:

"don't mess up"

"lotsa luck"

Fortunately, I had a really great UX designer to work with, and even more fortunately, I had a good friend in the GIS business with a powerful ActiveX control that was just hitting its beta cycle.  After about 9 months of intensive development to get all the clicks, layers, and transformations right, the result was an app that met the above requirements and enjoyed several good years in production (it might even still be in use.)

I later got to work on a GIS application (for the same telecommunications company) which connected maps to OLAP data, and had my first encounters with plotting geo-coded points on a map.  I'm not sure if this app survived the telecomm meltdown earlier this decade, but it did at least enjoy a couple good years of production usage.

Since that time, I haven't had any GIS applications to work on, so I stood on the sidelines and watched the remarkable progress made by software industry in bringing interactive mapping into broad usage.  I think it's time to get off the sidelines and back into being a GIS programmer.

Tonight, I registered for a MapPoint Web Service developer account (from the form on https://mappoint-css.partners.extranet.microsoft.com/MwsSignup/Eval2.aspx.)  While I wait the 1 to 2 business days to receive my key, I'll have to satisifed with reading through the SDK documentation and samples (no, I don't get out much, but this is as good as it gets for me on a rainy holiday weekend.)

If you're an ISV looking to add features that could differentiate your products, I encourage you to check out MapPoint and Virtual Earth - there's quite a bit there, and it looks quite easy to implement and integrate.  Just be sure to get your developer key before you try to get started.

In browsing around the Windows Vista developer center (http://msdn.microsoft.com/windowsvista), I noticed the 3rd party control link on the WPF page.  From that page (http://msdn.microsoft.com/winfx/downloads/presentation/), you can access dowloads of the Infragistics Data Presenter and the Software FX ChartFX controls for WPF.

I've been working with both of these controls informally over the last few months, and it's quite impressive to see how these vendors have embraced WPF to produce high-quality components that make use of WPF as it was intended to be used.  I hadn't realized that were publically available though, or I would've posted on this much sooner.

If you're a WPF enthusiast (like me), I encourage you to follow the download links and give these components a try.  The versions I'm using are compatible with the June CTP builds of Vista and NetFX3, and can stylized and templatized to your liking - just start with the samples they provide and have at it.

I had a "New York Minute" yesterday - it went something like this.

I stepped out onto the Avenue of the Americas into the pouring rain yesterday afternoon and began my hike downtown in search of some Szechuan dumplings.  I had packed a rather large umbrella, and proceeded to pop it open, even though I knew that would make it a little tricky to dodge my fellow pedestrians at rush hour.

About a block into journey, a woman I had never seen before appeared next to me under my apparently-too-large-for-just-one umbrella.

Her: "Hi - mind if I share your umbrella?"

Me: "Uh..."

Her: "I have a job interview somewhere around here and don't want to get all soaked."

Me: "Uh..."

Her: "It's in the McGraw Hill building - it's right around here somewhere."

Me: "Uh..."

Her: "Oh - there it is gotta go - thanks!"

I immediately checked my pockets, and once I assured myself they still contained every thing they had just a short while ago, I yelled "Good luck!" as she ran across 6th Avenue.

Only in New York - where a "New York Minute" unfolds in about 5 or 6 seconds.

I don't know if she got the job, but if she did, I hope she's using the .NET Framework 3.0.

 

Software as a Service is a topic of great interest in the ISV industry of late.  Because end users increasingly demand a hosted option, many ISVs are assessing the ways in which their business models, technology and operations should evolve.  

 

We have a seminar coming up in New York City on May 3rd that it's not too late to register for.  If you're at all interested in this topic, I highly encourage you to attend - follow the link below or click on the graphic to get signed up.

 

Hope to see you there!

 

 

To register and for more details, go to: http://www.dynamicevents.com/GlobalSoftwareAsAServiceSeminar/

It's been a while since I posted on this this (does it still qualify as a series?), but I'll continue and in the hope that I'll be able to pick up the frequency.  In the first postings in this series, I discussed how I'd like to build a small CRM-ish application to track activity with the ISVs I work with, and in the second I discussed how Dynamics CRM 3.0 could serve as the basis for such an application.  I'd like to now discuss how WCF can be used to provide a simple endpoint to serve data entities up to consumers (such as WPF applications.)

This week marked my first forays into WCF programming, and I was impressed by what I found.  It wasn't the advanced features that made the impression though, but rather the simple basic things we all have to grapple with as developers and architects.  As I mentioned, I'd like to use this application to track things like contacts, events, and locations in MSCRM, but I'd like to surface those entities through a WCF endpoint.  That requires the definition of a Service Contract and a Data Contract.  As services typically provide one or more operations and data entities typically consist of one or more members, I also had to define a set of Operation Contracts and Data Members to complete the implementation of my end point.

In WCF, this is simply a matter of using the System.Runtime.Serialization and System.ServiceModel namespaces and marking your data entities and service classes appropriately.  To retrieve a list of locations for a given ISV from a WCF endpoint, I modeled it using code like the following:

using System;

using System.Collections.Generic;

using System.Runtime.Serialization;

using System.Text;

using System.ServiceModel;

 

namespace IsvApp.ServicesLayer.Contracts

{

    [DataContract]

    public class Location

    {

        [DataMember]

        public Guid IsvId;

        [DataMember]

        public Guid LocationId;

        [DataMember]

        public string Name;

        [DataMember]

        public string Description;

        [DataMember]

        public string Address1;

        // plus the usual, then...

        [DataMember]

        public double Latitude;

        [DataMember]

        public double Longitude;

        // and a couple more, then...

    }

 

    [DataContract]

    public class LocationFilter

    {

        // much like Location - you’ll see this in action below...

    }

 

 

    [DataContract]

    public class Locations

    {

        [DataMember]

        public int TotalLocationCount;

 

        [DataMember]

        public List<Locations> LocationList;

    }

 

    [ServiceContract]

    public interface ILocationSvc

    {

        [OperationContract]

        Locations GetLocations(LocationFilter filter);

    }

 

    public class LocationSvc : ILocationSvc

    {

        public Locations GetLocations(LocationFilter filter);

    }

}

That’s all it took to specify a few non-trivial objects which could be easily transported across a remoting boundary and returned in aggregate, along with a simple interface and a service class to implement it.  After running svcutil.exe and adding the proxy and configuration information, I could test my endpoint by building a console application similar to the following:

using System;

using System.Collections.Generic;

using System.Text;

using IsvApp.ServicesLayer.Contracts;

 

namespace isvapptest

{

    class Program

    {

        static void Main(string[] args)

        {

            // create the WCF service proxy

            LocationSvcProxy locationSvc = new LocationSvcProxy();

 

            // create the filter object

            LocationFilter   filter      = new LocationFilter();

 

            // set filter parameters to constrain result set

            filter.OrderColumnName   = "isv_name";

            filter.OrderAscending    = true;

            filter.GetTotalCount     = true;

            filter.GetTotalCountOnly = true;

            filter.StartIndex        = 0;

            filter.MaxLocationCount  = 10;

 

            // use WCF service proxy to fetch data

            Locations locations = locationSvc.GetLocations(filter);

            Console.WriteLine("locations.TotalLocationCount = {0}",

                               locations.TotalLocationCount);

 

            // iterate over data

            int i = 0;

            foreach (Location location in locations.LocationList)

            {

                Console.WriteLine(string.Format("Location[{0}]: {1}",

                                                filter.StartIndex,

                                                location.ToString()));

            }

            

            // rest of code...then

            return;

        }

    }

}

This is a relatively straightforward usage pattern for fetching a set of data from a WCF endpoint which leaves all the transport, authentication, authorization, and even federation cognizance out of both the client and server code.  If you’ve backed off of attempting using complex types over web services or lamented about all the type system tricks you had to employ to do so, I highly encourage you to take a look at WCF and give a pattern like this a shot.  I think you’ll be impressed as well.

 

In my next posting, I’ll attempt to illustrate how this could be bound to a ListView in a WPF application.

 

My well-traveled laptop, now loaded with WPF demos on Vista, is on its way to my esteemed colleague John Wiese.

I trust John will take good care of it and return it to me shortly.  If not, I trust he'll ghostwrite a series of killer blog postings under my name and then ship me his new laptop when it arrives.  :)

Good luck John!

Two of the major enhancements to Office 2007 are the addition of ribbons and task panes for developers adding on to Word, Excel, PowerPoint, Outlook, and other Office applications.  Together, they represent a major opportunity for ISVs to leverage the productivity tools many millions of users are familiar with in their products.

If you're fortunate enough to have access to either the Beta 1 or the Beta 1 Technical Refresh builds of Office 2007, you're probably already familiar with the power ribbons and task panes bring.  If you've been playing with the pre-release builds of the Visual Studio Tools for Office 2007, you're familiar with the accessibility to these features our forthcoming development tools provide.

All that adds up to an opportunity to provide deep and natural integration with Office and your applications, which in turn provides an opportunity to surf the coming Office/Vista wave.  How?

  • If you currently export your data to Excel, consider exporting to Excel's OpenXML file format and use a ribbon as the means to make that happen
  • If you currently use Word mail merges, consider generating documents in Word's OpenXML file format and use a ribbon as the means to make that happen
  • If you currently need to walk users through a multi-stage process or provide handy access to contextual data, consider using a task pane to provide the UI

It's a bit to get your mind around, but I think it's worth the effort.

The SQL Server team released 8 new report packs today, which I found out about via my esteemed colleague, Sureesh Sreedharan.  These report packs are free, and cover:

·         SQL Server Integration Services

·         SharePoint Portal Server 2003

·         Dynamics Axapta 3.0

·         Dynamics Navision 4.0

·         Dynamics Great Plains 8.0

·         Dynamics Great Plains 9.0

·         Internet Information Services (IIS)

·         Financial Reporting

 

If you're an ISV building on top of one of our Dynamics ERP products, this is a great oppotunity for you to add to nice BI/Reporting features to your product (and a great incentive to get over to SQL Server 2005.)

 

You can find these report packs here.

 

 

Since it looks like the NDA wraps have been removed from Office 2007, I believe I can now post about it here and let you know where I think it presents some interesting opportunities for ISVs.  Having just returned from the Office Developers Conference in Redmond, I have just one word to say for what I've seen: wow!

As a developer who grew up on Win16 and Win32, I could help but find some of the VBA based apps produced by Office developers amusing.  "They're just playing with script" I'd say to myself in reassuarnce as they blew away my (I thought) elegant threading logic with apps that solved real end-user business issues.  "They don't know a NULL from a void - they'll never be able to touch what I can do."  Well, as self-satisfying as my internal monologue was, it didn't amount to a hill of beans - both types of developers have their place in this ecosystem - both serve valuable and necessary functions.

However, I've seen a place where both kinds of developers can be happy and productive: that place is Office 2007.  Very soon, Microsoft will place the power to do the following in the hands of developers:

  • Native XML file formats
  • First class managed wrappers for extending the UIs of Word, Excel, and Outlook
  • Server side Excel, InfoPath, and Groove
  • The truly awesome new SharePoint platform

All from Visual Studio, and all using/extending the .NET Framework patterns and metaphors in a natural way.

If you're a dev who had the same sort of reaction to Office development, I strongly encourage you to take a close look at Office 2007.  If you're an ISV building these kinds of solutions, now is a great time to gain a strategic advantage from the rising tide of the Office platform.

Have fun, and have at it!

Another theme that's emerged from cross-country conference junket I've been on of late is that Microsoft has embraced RSS and will soon make it pervasive in its productivity tools and operating systems.  This is great news for both developers and users alike, as RSS has really blossomed as a simple way to syndicate content.

If you're a design pattern wonk and aren't familar with RSS (unlikely, I know), think of an RSS provider as the outermost later of a publish/subscribe implementation.  After whatever processing magic is necessary happens deep in your stack, an nice friendly RSS formatted XML is published at some URL up on top.  Subscribers simply need to point to their favorite RSS aware client app to the publication URL, and the syndicaiton is complete.  It's just that simple - really!

What kind of content is suitable for syndication in this manner?  So far, just about any text on any topic will do.  Even my humble blog is available as an RSS feed at http://blogs.msdn.com/jpelak/rss.aspx.

Where can you expect RSS to pop up on the Microsoft platform?  Well, anywhere you see a list that interests you, or anywhere you might want to programmatically generate such a list, or anywhere you might want to view such a list.  In short, everywhere.

What's the opportunity for ISVs?  I think RSS represents an easy but powerful way to add targeted notifications to existing products.  There's great RSS client support available on nearly every form factor and every platform.  By publishing RSS feeds of critical application data, ISVs can leverage all the great work that everyone has done around specifying this format and making it work online, offline, or disconnected.  In short, everywhere.

I think it's worth your consideration.

It's been a while since I've posted.  I've been on the cross-country conference junket of late, and after stops in Redmond, Las Vegas, Redmond, Charlotte, and Redmond again, it's time to get back home and get back to blogging.  So of course, I'd like to begin with a brief digression.

Back in the late 90s, I had the good fortune to attend one of Don Box's Developmentor courses on COM+.  After a lecture that got deep into the plumbing of transactions, contexts, IDL and v-tables, I got to chat with the man himself.  As the conversation wore on, I mentioned how I thought the Visual J++ team did a great job with the Windows Foundation Classes their wonderful form designer.  Don proceeded to call me a "Cupertino beret-wearing turtleneck poseur" and wished me luck up playing with UIs up in devenv.exe.  I've worn that as a badge of honor, despite my limited design skills.

A few years later, I got to work with real designers, and saw first-hand how their thoughtful, aesthetically pleasing work was turned into an application that looked nothing like what they specified.  The reason I gave the designers for this transformation was that "dev tools don't support building UIs like that."  They proceeded to call me a "propeller-headed Philistine" and wished me luck playing with makefiles and command-line compilers.  I've worn that as a badge of honor, despite my limited programming skills.

Clearly there's an impedance mismatch between the folks do at both ends of the designer/developer continuum, and clearly, the middle ground is occupied by people like me who don't do a great job of pleasing either side.  Well, if I learned anything in all my recent travels, I can tell you that this is about to change for the better.  In speaking with many ISVs, the overwhelming majority view improving the user experience in their products as a priority for their next releases.  We’re about to provide some great tool support to make that possible.

If you’re adventurous and have a machine you don’t mind wiping and reconfiguring, give Vista, Cider, Atlas, and Expression Suite CTPs a try.  All are available for download by MSDN subscribers, and together they provide some really interesting possibilities for people like me who work in that middle ground between plumbing and design.  After you get your mind around the basic concepts of each of these tools, you’ll see we’ll soon live in a world where the turtlenecks and the prop-heads can collaborate in harmony – or at least co-exist on the same projects without stepping on each others’ work.

You may not be deeply skilled enough to settle in with either crowd (like yours truly), but you can do a lot in bringing them together and then getting the heck out of the way…

Well after a bit of extra effort, I managed to get my "cutting edge" laptop configured as follows:

  • x64 Vista Build 5270
  • x64 SQL Server 2005 Developer Edition
  • Office 12 Beta 1
  • Visual Studio 2005 Professional
  • Added the Vista WinFx 3.0 Windows Feature
  • WinFx SDK
  • Visual Studio Extensions (a.k.a. Cider)
  • Workflow Foundation Beta
  • Expression Interactive Designer
  • Expression Graphic Designer

I did encounter a couple bumps along the way, which I managed to resolve myself - they were:

  • x64 Vista Build 5270 seems to be a lot happier on my C-drive than it did on my D-drive
  • On a wide screen display, 1024x768 is not a very attractive resolution - Vista dutifully stretched my desktop to fill the screen, but things looked a little strange - bumping up to 1650x1050 improved things tremendously
  • Visual Studio 2005 Professional's installer had trouble copying setup files from the DVD I burned from the MSDN ISO image I downloaded.  I fixed that by copying the DVD to the hard drive and then removing the "read only" flag from all the files
  • Expression Interactive Designer's installer issued a complaint, but appears to be installed and working just fine (i.e., I can get the Fabrikam demos going)

I'm actually surprised that those were the only issues I encountered, considering how betaish most of the above is.  Now if I can just get a wireless driver, I'll be all set.

It looks like we'll have a new CTP build of x64 Vista coming soon, and I'm inclinded to attempt an upgrade (and will do so with every CTP until RTM), and now that my MSCRM 3.0 VPC is almost together, I can get back to building my simple app on all this...

More Posts Next page »
 
Page view tracker