Ruminations of idle rants and ramblings of a code monkey

StreamInsight Templates–New Build/Release

StreamInsight | Open Source
I just posted this last night on CodePlex. There is nothing new in there but there was some general cleaning up and some fixes to a couple of issues based on feedback. Some of the changes: Added System.ServiceModel to the console project. I could have sworn it was there before … Fix for the project versions. They now all (properly) show up as Fx 4.0, no client profile. In the catch statements, the exception types/variables are commented out. This prevents compiler warnings. Naming of variables in a couple of places to make a little more sense. All input adapters now have a ProductEvents() method. All output adapters now have a skeleton for ConsumeEvents() that also looks for the Stopping() state. Factory classes don’t return the new adapters immediately. Instead, a temp/return variable is set and then returned after the switch statement. This makes it easier to insert custom logic for creation vs. reuse of input adapters. Fix for names … some adapters didn’t have the proper file names. I am working on templates for extensibility points and have started the UDA item template but that wasn’t quite ready for this build. There will also be templates for UDO’s and UDSO’s. I think that covers it. As with the last release, please provide feedback.

Visual Studio Project and Item Templates for StreamInsight

I’ve just published – and created an initial release for – a set of Visual Studio project and item templates for StreamInsight. The release dropped yesterday is a beta primarily for feedback on the templates, particularly the naming conventions, comments and sample boilerplate code. The items are placed in a “StreamInsight” grouping in the Add New dialogues so they’re very easy to find. There are four project templates: A console application project template that creates a basic app based on the Simple StreamInsight Application that I posted about 2 months ago. A StreamInsight library project template that creates a blank DLL project with the StreamInsight references added. Unlike the built-in DLL project template, this template does not include “Class1.cs” … which has always gotten on my nerves. Item templates for both input and output adapters, typed and untyped. These are multi-file item templates and add the factory, a configuration class and adapters for edge, point and interval events. The typed adapters add a basic/simple type class as well. Each adapter is placed in its own folder and has its own namespace. Because of how the replacement parameters work with the templates, the file names have the format [BaseItemName][Direction].[ItemType]. The base item name will be a short name for the source/destination for the adapter. For example, a point adapter for, say, WCF input adapter for edge events would be WcfInput.Edge. When naming this in the Add New Item dialogue, you would use “Wcf” only. Project Templates: Item Templates: New Item in Solution Explorer: In the near future, I’m planning on adding item templates for the various StreamInsight specific extension points such as UDA’s and, when version 1.2 is released, UDSO’s. In the longer term, I’d like to make this a wizard rather than simple item templates. A wizard may allow me to get away from the “.” in the file names and it will allow users to select existing classes for the typed input adapters rather than creating a “phony” one, thereby creating a better user experience. Once I do that, the VSIX will need to be installed via MSI, which would also allow for the addition of Visual Studio snippets for common query patterns and other code chunks. Ambitious goals, perhaps, but those are the only ones worth having, right? Creating the templates themselves was a royal pain in the a$$. Not so much because of the actual process but because the documentation for creating templates sucks so badly. Some of the documented replacement parameters documented are simply wrong – as in, they don’t get replaced!. Others aren’t documented at all, which makes discovery of these things far more difficult. Considering the number of templates that the Microsoft folks create (and especially the Visual Studio group), one would hope that the documentation would be better that the suckage that exists on MSDN. I wound up digging around in the Visual Studio templates installed on my machine than to figure out some of this stuff. Of course, because I am a big fan of .NET Open Source software, it is available on CodePlex … and you, dear reader, are welcome to sign up if you’d like to help!

Favorite .NET OSS Projects?

Open Source
I’ve just gotten back from the 2009 MVP Summit (it was awesome!) and got into a lot of conversations around .NET Open Source, something that I’ve had a soft spot for ever since getting involved with the original Commerce Starter Kit with Rob Conery. And it’s occurred to me that there is no “list” of cool .NET Open Source projects out there. Yes, there is CodePlex, Google Code, SourceForge, etc. that are repositories of OSS projects … but it’s really somewhat impossible to compile a list from there. And Microsoft (DPE included) has done a less-then-stellar job evangelizing these projects. So … I’ve decided that I’m going to go about making such a list and I’m asking y’all to leave feedback/comments/messages for me about your favorite .NET based OSS projects. Yes, I have my own personal list, but I know it’s not complete … there’s just so much out there. Now, to be sure, there will be some qualifications for the list. I’m still pondering what some of these will be but, I have to say, I’m not leaning towards things like “usefulness”, “quality” or any other equally subjective criteria. Number of downloads isn’t a qualifier either … some OSS projects have been around for a while and/or have a broad applicability (and a lot of downloads) but that doesn’t mean that other OSS projects that fill a more “niche” need (and have fewer downloads) aren’t equally as valuable. BUT … there are some things that I know that I’ll be looking for. So, here they are: Community-driven: This means that those Microsoft-led projects don’t count. I want the projects that are started, developed and driven by the community. This isn’t to say that you can’t have Microsoft contributors on the project but Microsoft should NOT drive the project. Actively under development: There are a lot of OSS projects out there that are simply dead on the vine. Maybe they have a release and nothing else, maybe they never got past “alpha” or “beta” stage. Not looking for these at all. I’m looking for living, breathing projects with an active community. And I’m looking for at least 1 non-alpha/beta release within the past 12-18 months. Link to project site: Yes, I am perfectly capable of doing a search on Windows Live Search (you really didn’t think I’d use the G-word, did you?), but I don’t want to have to go digging around. If it’s one of your favorite kewl .NET OSS projects, you should already have a link, right? So send it to me. And no, it doesn’t have to be on CodePlex and not being on CodePlex won’t count against the project. More details: Tell me why you think that this is a cool OSS project. What need does it fill? How is it unique? What makes it interesting? I’m not looking for a book here, just a couple of sentences will do. But don’t send me a title and/or a link only.

CSK 3.0 CTP1

CSK | Open Source | Web (and ASP.NET) Stuff
I know, I know, it’s a little late. I said Nov 1st and it’s now Nov 3rd. Here’s what happened – I was all on track to have it ready for the 1st, but then I got sick. I felt like a bowl of cold oatmeal, which is not very good. Kids … I’m tellin’ ya … they’re germ factories. I wound up spending the weekend in bed, resting. I could have down a drop on Friday or Saturday regardless, but it wasn’t at the point that I wanted it to be. Now that I’m feeling better, I got back down to it and got it to the point that I wanted in about an hour or so worth of work (told you I was close). [EDIT] You can download it from CodePlex. (thanks Alan!) Release Notes This is a Tech Preview. Read: nowhere near final. It’s not even up to what I’d call a beta. I’m putting this up primarily for feedback from the community and (hopefully) to generate some additional interest. It does show the direction that I’m going with this and I hope you’ll notice that, while the underlying functionality is pretty complex, it’s easy to work with and easy to change the UI. I have avoided duplicated any code as much as possible, though I may have missed something. User Interface elements: Most of the user interface is encapsulated in User Controls, which you will find in the Controls folder. I think that the names should be self-explanatory. For simplicity, data binding is used whenever feasible. Yes, it is not the most attractive. If there is anyone with better design skills, I’d be happy to hear from you. Implemented functionality: It’s the very base functionality; you have catalog display and navigation, cart functionality and checkout functionality. Checkout does not, at this time, call any of the payment processing components but the code will be (for the most part) the same when that does get added in. Installation: Unzip the file to a folder on your system. In the Data folder, you will find a backup of the Sql Server database that is used for the site. If you restore this to “.\SqlExpress” in a database named “CommerceDb”, you will not need to make any changes at all to the connection strings. If, however, your database is different, change the connection strings that are in the web.config. Coming next: Added actual payment processing. Would like to get login implemented as well; we’ll see about that.

CSK 3.0 Current Status

CSK | Open Source
Just last Friday, Rob Conery and I announced that we were working on a Commerce Starter Kit v 3.0, reviving the spirit of the CSK - “Sell your stuff, not your soul” (I always loved that tag line!). The project will be hosted on CodePlex. The current 3.0 checkins do not represent the current state of affairs, but a very interim state. It does show the architectural direction though. I also packaged up the final release of CSK 2.0 that Rob and I collaborated on so long ago for those that are interested. CSK 2.0 will not be actively supported moving forward. Support for CSK 3.0 will be done on the ASP.NET Forums. This is a quick update on the current status and a preliminary schedule for releases, etc. Keep in mind that this is preliminary and subject to change (in either direction). November 1, 2008: First drop of CSK 3.0. We’ll call this one a “Community Tech Preview” (CTP) and, in the tradition of CTP’s, it will represent a work very much in progress. We should have all of the major UI components of the site in place and, to some extent, functional. Well, catalog and cart are functional now, checkout … that may not be quite there on Friday’s drop, but I hope to have it there. I’d rather have this CTP release sooner than later to get feedback and participation from the community as early in the process as possible. December 1, 2008: CSK 3.0 Beta 1. This will be a stable release and we’re targeting to have it feature-complete. But we’ll still be working on any bugs and tightening down the hatches. January 5, 2009: CSK 3.0 Beta 2. Final beta of CSK 3.0. Again, a stable release, feature complete with few bugs (hopefully) left so we can concentrate on performance tuning and the like. (Note: there will be some tuning throughout the process, but this will involved a major push on tuning.) February 1, 2009: CSK 3.0 RTM. ‘Nuff said. I would love for this schedule to actually be too conservative. I really think it is. But … there’s lots to do and I do have other stuff on my plate as well, so I’m playing it safe. In between these milestones, there will be other drops as work progresses, with at least 1 interim release in between the dates here. If you are interested in working on CSK 3.0 and can commit to spending some time on it (that second part is the hard one!), let me know. This is especially true if you have features that you’d like to see implemented; that’s the best way to get those features in there! Keep in mind though that, much as I would like to, I won’t be giving everyone commit rights … I will need to see some contributions, etc. first. The reality is that we can’t have a free-for-all on the source tree; that would be bad for everyone involved.

Commerce Starter Kit 3.0 – CSK Reprise

CSK | Open Source | Web (and ASP.NET) Stuff
I am happy to announce a new Commerce Starter Kit. We’re calling it CSK 3.0, but it’s not based on the previous (CSK 2.0) codebase at all; it is a complete re-write from the ground up. Some of you probably remember when I first got involved in the CSK … that was WAAAAAY back in the days when ASP.NET 2.0 was all new and shiny. ASP.NET has, of course, moved forward quite a bit since then. We won’t be just upgrading the old CSK code base, but building a brand-spanking-new version, even though we’ll be calling it CSK 3.0. And … it will be in the same spirit as CSK - “shared source” and freely available to all. I will be reporting progress on this regularly, so you will want to subscribe if you want all the latest updates and news on the project. This all started with a chat or two with my old buddy Rob Conery, the creator of the original Commerce Starter Kit. He’s here at Microsoft now and working on the MVC Storefront, a sample application that uses the ASP.NET MVC Framework (as the name implies). At the end of these chats, we thought we’d revive the CSK name and build a new version … with components and business logic based on the same components and business logic used for MVC Storefront but with a traditional WebForms UI. That’s right folks … it’s gonna share code with the site that Rob’s working on. Not only does it make life much easier, it also shows how the same core logic and functionality can be skinned with either MVC or WebForms. Here’s the core stuff that is on the plate for this version: Updates to the latest coolness: CSK 3.0 will be targeting ASP.NET 3.5 with SP1, so we’ll have all of the latest toys, including (of course!) Linq. :-) Migration to common e-Commerce libraries: I mentioned this above; CSK will be using the same core business libraries and database as MVC Storefront, allowing you to easily switch between the two. Localization support: Oh boy, I remember lots of folks asking for this with CSK 1.x and 2.0. The new CSK will be localizable out of the box. All of the product and category text and descriptions will be localizable. The goal is to also have most, if not all, of the static text on the pages localizable as well. That’ll be fun with resource files. ASP.NET Dynamic Data Administration: The admin site will now be a separate web application so that there’s better isolation from the main web site. Of course, this could be installed as a virtual directory application under the main site but that won’t be necessary at all. You’ll easily be able to deploy it as a completely separate web site. ASP.NET Web Application: This is the “old” (as in 1.x) model for web applications. While it’s not as easily changed while running (since you actually have to do a build), it does provide better start-up performance, something that became a complaint with CSK 2.0. Yes, yes, you could pre-compile the site (and I often suggested that folks do this) but with the web application model, that won’t be a separate step. ASP.NET Ajax: This is all a part of the cool new toys, but I thought I’d highlight it separately. We’ll be using ASP.NET Ajax where it makes sense as well as the ASP.NET Ajax Control Toolkit. Better composability: One of the things that I thought we could have done better with CSK 2.0 was to have a better composition model for the UI … for example, there were 2 or 3 different places to change a product list display … category list, search list, etc. This made it more difficult to maintain as fields were added or changes were made to certain core UI elements. These components will be separated into a series of User Controls, each with distinct, composable functionality. You want to change the view of a product in a list? Change it once and you’ll see it everywhere … search results, category listing, cart, etc. Coupons: This was only partially implemented in CSK 2. Rob and I spent a couple of hours, both on the phone and over IM, and forth on how this would be implemented and I think it’s settled. The coupon system is going to be very extensible so that you can create any type of coupon that your heart desires. We’ll be including a couple of simple ones to get you started. One of my key goals with this rev is simplicity. I want the UI (at least) to be as simple as possible … and I want it to be simple to re-skin the CSK to your own look and feel. To that end, I am using quite a bit more controls and data binding than were used in version 2.0 … everything, in fact, is in some sort of control or another. Additionally, I do want to highlight, as much as possible, the infrastructure of ASP.NET as well as the extensibility of this infrastructure. For example, for the category listing, I’m using a SiteMapProvider that builds a site map from the categories in the database. Believe it or not, this is actually quite easy to do and provides things like the SiteMapPath, which I do plan on getting in there. I will need some help with this – in particular, I’d really like help with the following: Functionality – what features are essential and/or cool? What do you want to see in there? (No guarantees that it’ll make it, but if you offer to do it, it’s a lot more likely!) Design – Right now, I’m just stealing the design and layout from the MVC Storefront, converting it to use WebForms (so no MVC calls), etc. etc. etc. I call it the CASE methodology – Copy Always, Steal Everything. Now, I have the design skills of a dead toad, so redoing the design is simply out of the question. BUT … I would like to see it begin to diverge from MVC Storefront’s look. So any help that you might want to provide to do that would be very nice. Testing – Yes, we’ll have automated tests to catch a bunch of stuff, but manual testing and feedback is also needed, particularly when it comes to user experience. Migration – From CSK 2. I really don’t know if this is going to actually be possible and it’s certainly not something that I have on the list of “stuff to do” but if someone wants to volunteer to write a migration utility, that’d be cool with me. I’m targeting to get the first, alpha “preview” version out in the next week or so and I’ll announce that here as well.

Welcome Rob Conery to Microsoft!

.NET Stuff | Web (and ASP.NET) Stuff | Open Source
I just got a little message from my old buddy Rob Conery ... he's been hired by Microsoft (the ASP.NET team in fact) to work on SubSonic ... a tool that builds an object-centric DAL for you. It's cool stuff ... I've played with it a bit and even though I'm a little leery of code generation tools (call me old fashioned), it's good stuff.  You can customize the templates if ya want and add to the generated DAL pretty easily.  Rob was also the instigator for the Commerce Starter Kit ... now dashCommerce and I've worked with him on that as well.  So ... welcome to Microsoft Rob!  It's good to have ya on board!

My First CodePlex Project

Open Source
No, not the first one I've been involved with, but the first one that I started.  You can find it here:  It's call BITS Download Manager.  It was a tool that I wrote some time ago to download large files over a VPN connection and have shared it inside of Microsoft for a couple of years as "JarJar BITS" (don't ask).  As the name implies, it uses BITS (Background Intelligent Transfer Service) to do the downloads.  This gives you network-friendly resumable file copies ... definitely better than Windows Explorer.  Wrapping the BITS API in .NET was something of a challenge.  I didn't use TLBIMP because the RCW that it generated was somewhat "messy" (gets and sets instead of properties, whacked data types and marshalling, etc) ... it seems that the BITS API isn't very friendly with that tool.  So I used the hand-crafted RCW from the original App Updater block and made additional modifications to it for newer revs of BITS, added the event callback support and did a bit "cleaning up" some of the marshalling.  There are also disposable wrapper classes around the native COM objects to ensure that they get cleaned up. Things on the list that I want to do: Multi-threaded folder search for the folder copy job Splitting large folder copies into multiple BITS jobs (BITS has a practical limitation of about 100 files per job) New UI based on WPF Additional job creator plug-ins.  Would like HTTP and SharePoint document library jobs. Possibly look into an upload job as well.  If you are interested in helping out, sign up and join the project. 

OSI Approves CodePlex Licenses

Open Source
Well, it's official ... the Open Source licenses that we've been promoting on CodePlex are now officially Open Source approved.  OSI just announced that they have approved 2 open source licenses ... the Microsoft Permissive License (Ms-PL) and is now called Microsoft Public License and the Microsoft Reciprocal License (Ms-RL) (this one had a different name before, but I've forgotten it).  What's the difference between the licenses?  Well, you could, of course, read them yourself ... but I'll be nice and let you know what it is.  Ms-PL: Basically, here it is.  You can use it for what you want, including derivative works.  If you distribute it, ya gotta keep the copyrights in place.  If you distribute it as source, ya gotta do it under a compliant license.  Ms-RL: Similar to the Ms-PL, but includes that you have to include the source code (whether distributed as binary or not) when you distribute any file from the project.  Note that it's just the file that you included ... nothing else.  So ... any improvements or unique cool stuff you've done in a derivative work would appear to be yours.  Both are "as-is" ... take it, use it ...  but don't blame us if it messes up.  Now ... one last thing ... I'm not a lawyer.  I don't pretend to be.  So don't take this as legal advice, blah blah blah.  Talk to a lawyer for the final word, OK?  And don't ask me to pay for it either.