| Comments

Seesmic logoToday, Seesmic more broadly launched Seesmic Desktop, a refreshed platform for interacting with various social media outlets like Twitter, Facebook, Google Buzz, etc.  Seesmic has been one of the leaders in this space providing client applications on various platforms across web, desktop and mobile and providing us with unified views of our interaction with others online.

You may have remembered seeing Loic on stage at MIX last year demonstrating their first preview of this updated platform and inviting developers to be a part of extending the shell.  That’s right…their platform is extensible!  A great application that I can also modify to my needs?  Double rainbow…what does it mean!?

I went to the evening social session at MIX to hear about how they would be enabling developers to extend the platform.  In introducing the concept of plugins, it was made clear that the Seesmic Desktop Platform (SDP) would be leveraging the Managed Extensibility Framework (MEF) that was to be included as a part of Silverlight.  Seesmic would define MEF contracts that as long as developers adhered to them (and of course implemented any required interfaces for actual functionality) then the plugin would be able to extend the platform.  The most grandiose idea can be simply stated as if you don’t like how Twitter is represented in Seesmic, fine…change it.  Of course, I suspect most people will be just fine with their implementation and choose to extend in other areas as I’ve done.

Seesmic Desktop 2

Admittedly I’ve got a vested interest in being excited about SDP…after all it is built using Silverlight.  However, I’m also very much into being a part of my online connected network via Twitter.  Prior to SDP I did not use Tweetdeck or some of the other popular multi-column ones…but was a user of Twhirl.  I loved the simplicity that it provided but did desire for slightly more.  I never got into Tweetdeck and honestly I don’t know why…it just never stuck to me in how I interacted online.  The thought of customizing my own experience, however, is what intrigued me to SDP.

I immediately got started writing some plugins, starting with something that I use often, a translator for reading messages incoming that aren’t in my native English.  Some may scoff, but when you monitor a lot of different things online, this becomes important as I don’t want to ignore things that might be interesting.  I chose to use Microsoft Translator services and in a few hours had my first rough draft plugin completed.  It was very rough (mostly because I desired a lot of things from Seesmic).  I showed Marco my warez and started to give feedback on what I think the platform needed for this specific use case as well as to make my life easier. 

Since then the platform has significantly evolved to accommodate most developers needs.  Seesmic has been very responsive on the developer forums for the platform to needs and questions.  Getting started writing a plugin couldn’t be easier for a Silverlight developer, but I’ve tried to make it even simpler (as I was sick of doing the same tasks myself).  I created some templates that you can download from the Visual Studio gallery that will help get you started.  Once installed you’ll see a nice new project template in Visual Studio:

Seesmic project template

This will stub out the initial shell you will need (you’ll still need to add the correct references to the SDP SDK).  From there you can add item templates for the base plugin type or other types: posting actions, timeline items, etc.  Here’s what my templates provide:

Seesmic item templates

These should give you some good jumpstart code to provide some of the necessary plumbing that would be required.  This is NOT a substitute from understanding the platform!  You need to read the docs and understand the interaction of the API with the platform to be successful.

TIP: When you add references to the Seesmic SDK assemblies, change their Copy Local attribute (in properties) to false so you don’t end up shipping them with your plugin.  Since they are already a part of the platform there is no reason to ship them with your plugin (and this makes your plugin size smaller).

To me, I think the easiest plugins to create are those that implement a URL shortener, posting action or a timeline processor.  These are the areas which would allow for very fast customization.  The account providers is likely the most time consuming as you could imagine as you are interacting with authentication schemes, etc. 

I’ve created a few initial plugins that you might be interested in and you can download them here.  I’m really excited about this platform and the fact that I can extend it to make my interaction with things I care about uniquely my own.  Install Seesmic Desktop today and start developing using the SDK!

| Comments

While working on some plugins for the new Seesmic Desktop Platform I got sick of copying and pasting some boiler plate code over and over.  I had created some helper templates for myself so that I could say File…New Seesmic Desktop Plugin and get everything I needed initially.  This weekend I had some time and formalized those templates into an easy-to-use installer for anyone to consume. 

NOTE: It is likely that Seesmic themselves will create developer project/item templates…these were for my own use and I shared them on the Seesmic Desktop Platform developer forum for anyone to benefit from (or ignore).  They are not the official templates from Seesmic.

Prior to VS2010 you could create what is called a Visual Studio Community Content Installer…which is a .VSI file that installs things like snippets, etc.  And actually you can still do that today.  The process is manual and involves a few XML manifest files, zipping up the contents and renaming it to .VSI (the VSI is just a ZIP format).  It isn’t hard, but isn’t painless as well – it’s a lot of manual steps.

Enter VS2010 and the Visual Studio SDK.  First, the items I am describing below require you to have the VS2010 SDK installed.  It is NOT installed by default.  Visual Studio 2010 has a file format called VSIX which is basically a Visual Studio Extension (VSX was already taken by Visio).  This extension format is intended to be a one-stop installer format for all things extensible.  Things like add-ins, etc.  But it can also be used for simple things like Item and Project template types.  Here’s what I did.

1. Starting the project

After you have VS2010 SDK installed, choose File…New VSIX Project

VSIX Project

Note that this is under a language area (C# or Visual Basic).  This is because there is some assumption that you are creating more than just a template deployer…but just note that.  In my instance it actually didn’t matter what language area I chose.

2. Removing ‘binary’ packages

By default the VSIX project thinks you are going to be creating code extensions and will package the project’s DLL and PDB files as a part of your extension.  If you are using this process as I was for template extensions, this is not necessary.  There is an easy way of avoiding this.  Open up the csproj file (or vbproj) you just created in notepad and add these lines in the XML file:

   1: <PropertyGroup>
   2:   <CopyBuildOutputToOutputDirectory>false</CopyBuildOutputToOutputDirectory>
   3:   <CopyOutputSymbolsToOutputDirectory>false</CopyOutputSymbolsToOutputDirectory>
   4: </PropertyGroup>

This tells the compiler to not package those types of files into our extension.  I put these below my last PropertyGroup statement in the file.  Save the proj file.  If you return to Visual Studio (and had the project open while making these edits in notepad) you’ll be alerted to reload the project, go ahead and reload baby.

3. Editing the manfiest information

When you create the project it will open up with a dialog that is a visual editor to the core manifest.  This is where you will put your metadata as well as begin to add your content.  Here is a snapshot of mine:

VSIX Manifest Editor

Notice the simple metadata information (name, author, version, etc.).  This is important information that I’d highly recommend to include as you’ll see why in later steps.

Notice the Content area in the bottom.  This is where you’ll add your content.  If you have a blank project you will click the Add Content button and choose the type (in my case Project Template and Item Template) and browse to the file.  Note that this copies that file to this project…not a reference.  So if you change the file outside of this project, you’ll want to update it again.  Do this for each template type you want to deploy.

4. Understanding Path information for templates

Notice my path of my templates:

template path data

This is important because it will determine how the templates are structured in Visual Studio after the user installs them.  My path above results in this:

Installed Templates view

This enables my users to find it under Silverlight as well as the custom branch that I have specified.  This is a helpful tip to your users and provides a more professional look in my opinion.

5.  Building the VSIX file

This step is easy.  F5.  It’s the same build process as any other project type.  The result is a VSIX file.  When the user double-clicks on that (and has Visual Studio installed) they’ll see your dialog:

VSIX Install Dialog

You could optionally digitally sign your VSIX file so the ‘unidentified publisher’ statement isn’t there.

6.  Making your VSIX Discoverable

This is the fun part.  Now that you have a standard Visual Studio Extension, you can make it readily available to any Visual Studio developer.  You could simply post a link to it on your blog, have the user download the VSIX and that is acceptable.  But you can also make it available in Visual Studio’s online gallery which then becomes searchable and seamlessly installable by end users.

Visit the Visual Studio Gallery page to start the process.  Notice the Upload button in the upper right area…that is where you start.  After authenticating with Windows Live ID, it is a 3 step process:

  1. Determine what type (Tool, Control, Template)
  2. Upload the VSIX
  3. Edit and annotate further criteria

The first two steps are simple, in my case I chose Template, then uploaded my VSIX which goes through some steps of validation making sure it is a valid VSIX file.  The final step enables you to specify more data that is annotating your extension to make it more searchable.  Here was my page.

Visual Studio Gallery info page

Notice the tags I added to help it be discoverable?  Now users can – from within Visual Studio 2010 – search and install extensions immediately:

Integrated extension search in Visual Studio

Any installed extensions show up in the Extension Manager (Tools menu) for easy disabling or uninstalling).

Summary

After this quick process I have a distributed package for my community as well as now have added templates to my development environment making it easy to create new extensions for Seesmic (my sample used here):

new project templates

It was fairly simple and I love that it is integrated into Visual Studio 2010 for everyone now!

Hope this helps!

| Comments

This week, Seesmic announced a new Seesmic Desktop platform.  They finally revealed more details to the public and released developer previews of their shell, SDK and some sample plugins.  You can get them on the Seesmic Developer Wiki.

Seesmic Developer Platform

The best part?  It’s built on Silverlight 4 and the Managed Extensibility Framework (MEF)!  This is awesome news for those of us who have been using various clients that have been locked down to specific use scenarios.  There always is a few things I want/need/etc in software and it’s great now that (at least in this space) I can change things I don’t like.

That’s right, Seesmic Desktop is moving more toward a “shell” concept (my words, not theirs) where they provide some defaults but also extensibility points for anyone to replace and/or extend.  Don’t like the way they implemented Twitter?  Fine, change it (or search for a better plugin).

This is a great way to get started with MEF as well.  Seesmic Desktop 2 gives you an implementation of extensibility points and you just have to implement them, mark as the right Export/Imports and watch how ‘it just works.’  There were two plugins that I wanted to create right away, so here they are in my own personal ‘works on my machine’ release band.

Translator Plugin

One of the things I’ve found in using Twitter and Facebook is that when you start searching for things you notice that you find interesting information but it might not be in your native language.  Recently I’ve been playing around with Microsoft Translator, which had an updated release at MIX10.  As a frequenter of Twitter, I often just ignored the non-English information as I simply couldn’t read it and didn’t have a ready way at my fingertips to translate it.

My first plugin is my Translator for Seesmic powered by the Microsoft Translator engine.  Simply drop this XAP in the plugins directory for Seesmic Desktop 2 and you’ll see new action options in the menu area of any timeline item:

Translator for Seesmic screenshot

Click this and it will translate the text to the current culture setting of your desktop (i.e., the intention is that your desktop is likely set to your preferred language).  Here’s a video of it in action:

Get Microsoft Silverlight

This is an example of a TimelineItemAction plugin that is global combined with a dynamic adding of a TimelineAttachment (the translation control).

Foursquare Venues

I’ve been using Foursquare a lot lately.  Why?  I have no idea.  Fun I suppose.  If my political ambitions don’t work out in real life, I always know that I can be Mayor of Yogurt Jungle.  Anyway, when in Twitter, Facebook, whatever people can ‘check-in’ to Foursquare and announce their location.  This posts a note like I’m at Yogurt Jungle http://4sq.com/XXXX where the short URL points to the venue where you can get details.  I wanted to be able in my app to see the venue details without having to visit the site.  Luckily Foursquare has a public API.  With that I can integrate ‘expanding’ their short URLs into Seesmic Desktop 2. 

Seesmic Foursquare Plugin

See the plugin notices when a Foursquare venue was mentioned (based on the short URL) and gives you the option to view more details (this is called an attachment in Seesmic Desktop Platform).  Once clicking on it, it will expand to show the details (with a clickable title to the further venue details if you want) and an embedded map showing the location.  Pretty cool?  Maybe not to you, but I’m having fun finishing it.  This is an example of a timeline Processor plugin with an attachment in the plaform.

Summary and test my plugins

As a Microsoft/.NET/Silverlight developer, extending the Seesmic Desktop Platform is easy.  I’m familiar with everything I need to do, and just needed to familiarize myself with the extension points of the platform.  MEF makes it easy to focus on what I want to do in my plugin and let the platform worry about loading things up, managing lifecycle, etc.  I look forward to extending the platform for my needs more (and sharing what I’ve created for others).  I’ve always extended things for my own use (creating 3 plugin extensions for Live Writer to meet my needs) and this is not different.  I hope others can share their extensions as well!

The Foursquare plugin has a bunch of bugs I’m trying to work out right now so I don’t consider it stable to share just yet.  The translator one is ready for testing.  I’ve listed them on a page I’ll maintain my other contributions until Seesmic has a better distribution method.  Visit my Seesmic Desktop Plugins page for more info.  Be sure to subscribe to my feed for updates on Silverlight and my contributions!