One the big issues with Software as a Service is when the service disappears. You might expect this from a small company – but from Microsoft? In fairness I had lots of warning – but all in all I had about 40 videos up there – all of the MVC storefront stuff, Kona, SubSonic, and other things. Migrating to another service (which I get to pay for) seems a little bait and switch to me – so I’ve moved them to my server here.
I had dreams of this when I joined Microsoft a few years back – that SubSonic would be the database juice in the ASP.NET MVC story. Or if not the juice then the ActiveCherryOnTop.
The pieces didn’t quite fall into place, though I tried many a time. The issues that I faced were pretty simple – everything I tried didn’t quite fit. No one wants to take a dependency on a specific data access library (which is precisely the thing that Rails does most of the time – and it’s quite freeing to not think about it) – so working SubSonic into MVC didn’t quite fire on all cylinders.
It’s understandable – but I have a better idea now and I want to see if others are willing to engage with me on it. “Others” being the troupe of ORM-dudes out there: NHibernate, LLBL, and the for-pay guys…
I got to talking to Ayende today about his support model for NHibernate that he’s working on and it made me think a bit – I have users in much the same circumstance: One of the oft repeated objections to using NHibernate is that there isn’t someone that you can officially complain to. Some organizations put great store in having someone to officially complain to :-) I’ve heard that a lot with SubSonic.
Look at it this way – it’s been almost a week since my last one :). Nailed more bugs and I’m hoping that the reports will slow down as we stabalize.
A lot of people have been asking me about the SimpleRepository and “which approach should I use”. Decision Paralysis – having too many choices is not a good thing some times :).
Yes, I know how it looks, but I also know that most of the bug reports stem from the same bugs, so the sooner I get that out of the way, the closer we are to stability. I can’t thank the contributors enough for their help, and also the people who stick it out with me on the Issues list at Github.
Many, many people have asked why I moved our Source Repository to Git/Github and it’s hard to explain other than to say that for Open Source – Git is a very nice option because it very much enhances the “collaborative” experience in that merging code from others is not only simple – it’s foundational. The only way that seems to capture the main elements of Git is that it’s peer-to-peer source control with a heavy dose of Social Networking.
Early and often! Might as well get started on the right foot yah?
At some point you need to stop polishing and let it go already – so I did just that today: SubSonic 3.0 is released.
Google’s project site is down for a while and I have some perf tests running in the background so I thought it might be time to crank out a few more “preview” posts of SubSonic 3.0.
I have a little downtime right now (which I’ll write about in a later post – and yes I still have my job) so I’m using it to put the wraps on SubSonic 3.0 (soon, soon).
I’ve been up way too late over the last week – but it’s been really fun :). I tore into the Issues list (both on Google and on our old Codeplex site) and loaded up about 13 total patches which, I think, solved a TON of problems.
Hanalei, HI – April 1, 2009: SubSonic (http://subsonicproject.com), a data access tool and “Super High-fidelity Batman Toolbelt” (according to its owner, Rob Conery), is set to acquire NHibernate, a much larger data access technology built on the .
Trying to keep up my end of the bargain with respect to MVC and SubSonic :). I did a walkthrough of it and decided that I was talking too much and, in honor of everyone telling me "SubSonic is dead" I thought it fitting to toss in some Rob Zombie.
I’m finally getting around to organizing SubSonic a bit and, aside from flaming me for the obvious (docs suck, project’s dead, etc) – I’d really like your help on a few things. Forums Our forums are doing decently well but managing the server/software/upgrade sucks.
Many thanks to the folks who downloaded and ran the alpha. As I figured, I missed a few things.
SubSonic 3 is ready for Alpha. It's a pretty significant upgrade and I think I've tackled all the bugs and issues.
Got a fun email from Will Gant today: Since everything else is going my way (sorta like Burger king), now comes the "can I have fries with that?" question.
Over the last week I've made massive improvements and upgrades to SubSonic 3.0 and the templates that it comes with.
I've been working a lot over the last few months on our next rev of SubSonic, and I think I have something that's good enough to issue as a preview. Please understand that this is a preview in every sense of the word, and may shatter into a zillion pieces and make you want to pour your Red Bull over my head.
I posted a couple of weeks back that I created a prototype Addin for Visual Studio that would scaffold your MVC site for you using Linq To Sql as the data access bits. If you didn't get a chance to watch the screencast - have a look.
Got a call from Scott Hanselman the other day and he asked if we could talk about SubSonic and other things on Hanselminutes. Kind of cool, that, as I love Scott's show and have been secretly waiting for him to let me on the show with him!
Over the last month or so I've been working on an Add-in for Visual Studio 2008 which will generate scaffolded Views and a Controller using Linq To Sql. I took my time with it as I wanted to leverage all of the goodness that I've learned from the MVC Storefront, and as of today I think it's ready to see the light of day.
I've been toying around with reorganizing the default MVC template and thought I would share it with people. I like the way it's come together.
With revision 482 I added in the ability to work with string values and "LIKE" queries a little more intuitively. On a recent post, a commenter (liviu) left this comment: ".
A question came up in the dashCommerce forums about SubSonic's ability to scale. I'd like to address this a bit as the link has been deleted and I don't appear to have the rights to comment on Chris Cyvas's blog.
I don't think I'll ever escape people telling me our docs suck, but I can always try :). Today I kicked up 3 new pages on our project site that are just the start of a barrage of "how-to" information so I get the word out.
TFS (CodePlex source control) is still freaking out but Eric and I feel pretty good about the state of things. and so 2.
Eric had some final changes to make last week and we were ready to go with the release (as planned) on Friday, but TFS went down at CodePlex and we couldn't review the submitted work items for the week prior. And it's still happening.
I've heard/read rumblings over the last few months that "SubSonic is tightly coupled" and therefore you have to "drag it around" with you in your project. I can see why people might think this - ActiveRecord is not the most testable thing in the world :).
One thing I've learned is I can't stay quiet for too long on this stuff :), so here's an update on what I'm working on. To Understand Recursion, You Must First Understand RecursionI have to thank Eric for that one - I had heard it in school a few times and forgot it.
I've spent the passed few weeks polishing up some features for our 2.1 release (aka Pakala), and I've been paying particular attention to Migrations - something I promised would be ready to go a few months back.
I'm getting a non-stop barrage of emails/IMs/blog comments in the wake of TechEd asking me if SubSonic is dead and buried. Accusations of "Microsoft has bought and buried SubSonic" seem to be coming at me from various places.
We haven't even pushed 2.1 yet and people are on me about plans for 3.
This is completely mind-blowing - I've just today added a new contributor to the SubSonic project, and I can't believe I'm writing this. I'm giggling pretty damn hard.
With Changeset 391, committed today, SubSonic pays tribute to a visionary man. Yes, this test passed.
Many people have asked over the last few years if it was possible to use SubSonic without Active Record. They didn't like the idea that every object could interact with the database and wanted a more "locked-down" approach.
I've spent the better part of this week moving our site over to Graffiti - a cool application from the Telligent guys that, at one time, was built using SubSonic :). We didn't support Access so they moved on :(, but we still love them, especially after getting Graffiti up and rolling so quickly.
I spose there's not much more to add to that title. Eric and Shawn Oster have been hard at work while I pretty much have been under water for the last month, getting ready for MIX.
Eric and I have been going full-speed to get this next rev of SubSonic up, and with a LOT of your help we've got a beta ready for you. You can download it here.
We're working full guns on the next release of SubSonic, fixing bugs implementing literally hundreds of the features you've asked for. I wrote previously about our new Query tool, and we've introduced some changes to it to make it even more usable and readable.
One of my main responsibilities at Microsoft is to help build out the developer love around ASP.NET and ASP.
Eric and I have been working just about non-stop on our bug list as well as some very cool innovations that he and I have cooked up over the last six months. We've had to wait a bit for the dust to settle in the .
Every object in C# inherits 3 overridable core methods, all stemming from "Object": ToString(): represents an object if you convert it to a String. By default, this is the object Type.
The saga continues :). A while back I mentioned that our forums sucked and I wanted to see what people were thinking about what we should do.
Those crazy French guys over at LavaBlast (well I'm not certain they're French - but they have very French names :) created what I think is one heck of a cool tool - a debug visualizer for SubSonic collections: basically hover over your collection at design-time and you can see your data! You can read more here.
Yesterday I asked, well I actually begged, for help and was happily beset with offers for help. I enlisted two good people to work up a SandCastle documentation set and they happily did!
I've been reading through the forums, getting up to speed on a lot of issues and what's plainly evident is that I've been busy for far too long. The good news is that I'm getting "in the swing" here and have begun my work on SubSonic in earnest, once again.
I was hoping our forums project would take off and we could "dog food" a neat new forums project based on SubSonic. That didn't happen, and I'm paying the price.
I went and bought myself a Camtasia license for the new version 5.0 that's coming out and WOW did I geek out.
Jeff wrote a good post today on languages within languages- wrapping up the post with Embrace the idea of languages inside languages. In The Land of Strings, we speak regular expressions.
This is the sixth rewrite of this post. It's not that I don't know how to write a thought, nor that people are telling me what to write.
As I continue to work with the new MVC bits with respect to SubSonic, I keep smacking my forehead (and there's a lot to smack) at how much simpler things can be if I stop overthinking them. Getting to know toolsets like jQuery and SubSonic can offer many of these moments.
If you ever write a contentious post, don't tell one of your friends who's got great Karma on Reddit. You'll be pretty busy getting buried by flames for the next day.
I'm sure a lot of you have noticed Eric's and my conspicuous absence from the forums lately. I have to apologize for this - we've both been really busy!
Just last night I ran my first "Green Light" unit tests on what I think is going to be a pretty groovy new feature: Migrations. Usually I don't like to talk much about functionality until it's 90%-ish, but I figured that it might be good to let everyone know the what/how/why now so I can take all your lovely comments and see if I can pop them in before it gets released.
I've been pretty quiet over the last month or two on SubSonic matters and hopefully that will change over the next few weeks as my workload lightens a bit and Eric and I find more time to devote to the next release. The big thing for me has been LINQ and LinqToSql.
I had a roommate in college named Eric who was from "Pennsyltucky" as he called it. A pretty nice guy, he was your very, very typical gear head: hacked up muscle car, kept every spare part he could find at a swap meet (and that fell of his car), insisted that he was safer driving at 80 than he was at 55 "because he could control his car better", etc.
We've had an avalanche of questions regarding many to many relationships on our forums, and so I thought it would be a great subject for the next in our series of webcasts!
This webcast is about 11 minutes long and shows you the generated methods we create for you, the schema we expect, and also how to use the Scaffold and ManyManyList to work with the data.
Kevin Fricovsky (or K-Fric as he likes to be called) guest stars for this SonicCast and dives into JQuery using SubSonic's REST interface. Kevin recently kicked down with the JSON part of our REST interface, and then created a really cool webcast that shows it off as well as the awesome grooviness that is JQuery.
SonicCast #6 is ready to go, and this one's all about LinqToSql - Microsoft's new ORM toolset. I take a look at it from an architectural point of view, and also discuss what it means for SubSonic.
Two in one day! Gotta be a record :).
Got a lot of great feedback from the MVC (#3) SonicCast, most of it was questions about Rails and why we did what we did with SubSonic. Given this, I thought it would be fun to show some of the neat features of Rails, focusing on things from the ASP.
The 3rd installment in the SonicCast series is up, and I talk about the whole MVC "thing" and how we're trying to emulate that with our new SubSonic MVC templates. I also talk about how Rails implements it (a bit) and show you how you can customize our MVC templates to squeeze some tighter architecture out of your distributed app.
I've been slaving all day, and all night, working out whatever weirdness I could find. I'm sure you'll find more: Hello SubSonic Forums Forums are a weird thing in that once you roll over, there's really no going back as they accrete data quickly.
These things are fun to make, and I had a request on my blog yesterday from Jim Bonnie (homey I know you like DNN but that blog. yikes!
I'm putting together a series of webcasts in a "podcast" style that will show you how to do certain things with SubSonic. My hope is to do at least one of these a week, and that they last no more than 5 to 10 minutes.
First things first: I managed to do a really boneheaded maneuver for the starter site and left New Page creation open to anyone who can guess the URL. No excuses on my part - that was plain stupid.
SubSonic's BuildProvider gets all the chicks. but it doesn't have to be that way.
I've been noodling a lot on the new Query Engine and have received a lot of comments and ideas - thank you! I mentioned there were other things afoot and I think it's about time to dive into those (Eric you might want to look away from your monitor at this point) - particularly our up-coming REST support.
I'm pleased to announce that we've begun work on the next rev of our Query tool. I think you're going to like this, so I'll get right to it.
Eric just sent me an email that relayed a SubSonic user's concern that I'm going to "stop development" permanently. I've also received a few messages from people who were concerned (some even said "shocked") that I would stop development altogether because of the whole TD.
I've been sort of on the sidelines with regards to Jamie Cansdale's struggles with TestDriven.NET, sort of waiting for Microsoft to come along and say "you know, let's be friends" and drop their legal posturing.
Hey! What's that over there laying on the ground in a big heap with blood all over it!
Kevin over at ScribeSonic can write, and write very well. I try to kick up things to a good level of detail as much as possible - but as Steve Martin once said: Some have a way with words.
We're still at CodePlex, but I've moved off the Wiki there in an effort to consolidate as much as I can into one spot (though it may not look like that right now). I have revamped all of our docs and walkthroughs into one spot:
When the forums are ready to go, I'll move them there too! I could still use some help ramping up the docs so if you want to help out, please let me know!
Phil Haack inspired me the other day when we geeked out playing with Ruby-esque extensions. A lot of commenters on his blog were saying things like "Why can't we just write MinutesAgo(20)?
Phil wrote a great post today about our Query tool, and has been diving deep into the innards of the thing over the last few days. One of the things I like about Mr.
I've had some conversations in our forums that our Getting Started docs . well suck is the only way to put it .
Kevin Fricovsky, the guy from Juxtaviews whomrecently interviewed mee, just opened the doors on ScribeSonic, a blog engine built on SubSonic. His first post, which I just read, is pretty darn informative on the different ways you can use SubSonic's collections.
I've been asked a lot about what SubSonic's new logo means: Specifically, why we chose "All Your Database are belong to us" (with the incorrect grammar and bad casing). I've also been asked, repeatedly, why we infuse "silly" comments in the code, such as //now for the wheres.
I'm watching Tortoise scroll by right now, committing 2.0.
While I was fiddling with the Starter Site, Eric put the wrap's on the bug fixes. I've also updated the Starter Site with all the new bits and you can get it all here.
I'm happy to announce that I finally finished the Starter Site for SubSonic 2.0.
I'm committed to rolling out as many webcasts as I can, and the next in the series is ready to go. So far we have the intro and the VS/Command Line ones, and now we have a 20 minute webcast that talks about the enhancements to the Query Tool.
I'm going to do an "hour in the life" of . well me.
I've had some tough technical interviews in my life, but none was more rigorous than the one I had for Avanade, back in 2000 when they were just opening up. If you don't know, Avanade is a morph of Microsoft's Consulting Service (MCS) that is a bit looser and geared more towards development and agility.
So if you can't tell, Miguel de Icaza got to me this last week and brainwashed me a little bit. I'm starting to think in a Mexican accent, wave my hands a lot, and push SubSonic towards Mono.
I am soooo mentally hung over from MIX that I can't get my head into work at all. I'm trying.
I was talking to Jon Galloway the other day and he was thinking it would be fun to do a mini SubSonic session in the Mashup lounge today if anyone's here and still around. We're shooting for 2 pm if you'd like to come.
I managed to screw up a very simple, yet pervasive issue that's plagued this platform since it's been introduced: BOOLEAN validation. Long story short, I've had to reissue the release as this flaw is critical.
Download I am happy to announce that SubSonic 2.0 is finally released, and just in time so that I can think about something else for MIX :).
Eric's been hard at work chasing down the bugs and work items and I vowed to stay out of his way mainly because he's got more time than me right now and we both hate merging and diffing when we don't have to. So he's been all over the bugs - go dude!
I took a few minutes today to work up a webcast (using BBFlashback!) that shows how I use the new commandline tool (sonic.
So I'm cruising over to DotNetKicks the other day when I see a familiar logo in the top right. OURS!
I tried to put Eric in a headlock and tell him this was RC1 - he wouldn't go for it. Many bug fixes and stabilization (read here) - thanks to all of you who are testing this for us!
I've been lucky enough to be selected to speak on a panel at MIX '07: "Open Source, the Web, Interoperability and Microsoft". I honestly don't know what I'm doing there.
We're not messin around! Or I should say Eric's not. I did as much as I could but I was stricken by Moco Loco today (don't know what I was thinkin) and Eric kicked down with some more changes and bug fixes.
Onward!
First, I can't thank Eric Kemp enough for his work. Seriously, I know thank-you's are a big part of releases, but quite frankly this wouldn't have happened without him.
I know I said "3 days" 5 days ago - but there's a dern good reason we've stretched another 2 days. I was going back over the perf tests and while the core is as fast as ever, our load-ups (when the app starts, the providers "spool up", and we go get the schema we need) were taking far too long.
Warning: It's Friday, I'm worked from a long week, and I've decided a blog entry is the best distraction. Last night I had the rare occassion to watch the sunset on the beach by myself.
UPDATE: The date of this post is April 1 , which in the USA is the date in which we mercilessly play jokes on one another. This was my little joke to you.
This is good stuff, and I am soooo stoked that we finally got it up and working. Our goal for 2.
I've finally convinced Eric to start a blog (SubText no less :) and he's off and running. I've hooked it up to our News Feeds so you can see what's going on with his every checkin. He's pretty darm detailed, in a way that I'm not, and I'm subbing to it so I know what's going on :).
Thanks Eric!
One of the bigger requests we've had is to support transactions using SubSonic. We addressed this by adding support for executing pass-through queries (i.
So Phil Haack wrote up a nice blog about Subversion and CodePlex and called me out in his blog for some woes I had regarding the all-or-nothing commit access situation at CodePlex. Check ItCodePlex is essentially a hosted version of Team Fortress Classic Team Foundation Server.
Found some time to work on the change list in front of me today, and created what I think are some groovy additions to our core classes (AbstractRecord and AbstractList): Clone(), CopyTo(), and CopyFrom()Clone() will take an object, like Product, and create a new instance of it. Same for collections.
I've been sort of quiet lately regarding SubSonic, and that's a good thing :). Many many things are afoot and I thought rather than fall on the good graces of SubSonic users, I'd be a good pro-active dev-type and let you guys know what's coming up in the near future.
I used to live in the Marina district of San Francisco with my wife (then concubine) from 1998 through 2001, right off Cedar street, on Divisadero. Now, I'm not really the "Marina" type (BWM, snaggly little groomed-out yuppie dog, double jog stroller) but I absolutely loved it there.
Goofing off here on a nice, bright (and warm) Saturday morning as I hide from my family down in my dungeon. I had a brainstorm while sipping my coffee today - musing over the consoley-ness of SubSonic.
I'm happy to relay that I just finished the last "feature" of the console app, and it works a treat. Jon Galloway has been kind enough to put it through some testing and it's really, really helped.
I am putting the wraps on a new edition to the SubSonic family: The SubCommander. It's a pretty lame name and I will change it, but for now let's just call it "Code Named SubCommander".
Good conversation I had today with a guy I work with regarding Code Generation. He was asking me things about SubSonic (and my perpetual dance on the OR/M fence) and what I think of code generation in the first place.
OK I couldn't think of a better title :). I'm giddy.
I'm fortunate enough to be running two great OpenSource applications: The Commerce Starter Kit and SubSonic. It's very time consuming but quite rewarding at the same time to know that there are ways to positively impact our industry (as opposed to negatively, which used to be my norm :).
The obvious out of the way first: I don't want to use the SqlDataSource. I can't for the project I'm working on.
Did you know that if you don't like our code, you can override it? Did you know you can do this on a per-project basis?
I've been asked by the good people at the Bay.NET user group to come by and do a little Dog and Ding Dong show regarding SubSonic and the Commerce Starter Kit.
I used to listen to Jim Rome. I drove my mom's 1980 Nissan Maxima for a while and it didn't have FM radio for some reason.
I've finally gotten around to using the Wiki features of CodePlex to document out SubSonic. While there's still a lot to do, I've updated the main page and added a lot of samples and explanation to help people out.
Finally put the pedal to the metal today and pushed version 2.0 of the Commerce Starter Kit live.
For those of you who are wondering (as I was) "WTF!" was up with the forums and Commerce Starter Kit main sites this last month - well I finally have an answer.
I just pushed the latest SubSonic build to CodePlex, along with it's Starter Site cousin. Here's the latest changes: Removed the db scripting entirely; SQL SMO is causing lock-ups in the build process so until that can be resolved, it's out.
Jon Lam, creator/maintainer of the RubyCLR (a Ruby compiler for .NET) has been hired by Microsoft.
Jon Galloway of Veloc-IT recommended to the .NET Rocks radio show guys that SubSonic might be a fun topic to talk about.
If you're a parent then you most likely have embraced the Easter-eggy acid trip that keeps your kids quiet while you drink your cofee in the morning, aptly named the Teletubbies. If you have Tivo you probably abuse this luxury.
I've made the switch to Vista and hate it. That dang Defender bugger keeps trying to defense me against my starting my own programs and installing anything.
This is a maintenance release; fixed 3 things: "SCOPE_IDENTITY" was mispelled in the insert queries Added back in DataSet support for SPs Fixed some off file references for the BatchGenerators in the Starter Site http://www.codeplex.
I was interviewed today on DotNetRocks (thanks to Jon Galloway) regarding SubSonic and all the things that go into it, why I made it, etc. It occurred to me that, as I was explaining from whence it came, I haven't really made it too clear the things that SubSonic can really do well for you, and the things that it can't (or possibly shouldn't) do for you.
A lot of releases this week - but I promise, I'm done for a while. I'm in the middle of contracts so I've had nothing to do but dabble and perfect things and hopefully make them better.
Today I continued to polish out some bugs and sift through the CodePlex issues (thanks to all for posting) and I decided to go ahead with something I've wanted to do from the start: create a Web Site Project that had everything already hooked up: my favorite images, my favorite style sheets, the login and membership hooked up, and so forth. Add to this pre-wired SubSonic action and you have the new SubSonic Starter Site: http://www.
Just pushed the latest release to CodePlex of SubSonic. Some cool changes in there, including: Scaffolding now uses a (skinnable) GridView :) that sorts automatically Added scripting to SubSonic via SQL SMO.
People have been asking a lot about using Views and I kept saying "They're coming" - the odd thing is that I never just tested to see if they're supported! It occurred to me today that Views are regarded just like tables (essentially) in SQL Server so I went ahead and created a Unit Test where I queried the "Invoices" view of Northwind: IDataReader rdr = new Query("Invoices").
As I mentioned in one of my previous posts, I have been working with SubSonic on a major rush job for a client of mine. The client is, well, like all clients shouldn't be (but inevitably are): wating until the very last minute (on a rush job no-less) to make system-wide changes.
A buddy of mine likes to use a catch-phrase (which I loathe): "Dog-Fooding". I am sure many people are familiar with it and I tell ya, it sort of triggers my gag-reflex.
Some nice updates today, and bug fixes from those who took the time to submit their thoughts in the forums. I am still chasing a few more 'issues' that I wouldn't call bugs at this point, but here's what's new: TransactionsFull Transaction support has been added.
The reponse to the ActionPack has been tremendous, and I am really happy if it's helping people have more fun at work or messing with the hobby they love. I did have a couple of folks who reacted with a "headscratch" at the chosen name of the project, since, well, the Ruby On Rails ActionPack does far different things than our ActionPack does.
One of my great hopes with the ActionPack was to be able to, as elegantly as possible, abstract out completely the way the core Database bits were wired up. It's just not possible I hate to say.
As we're jamming here on the upcoming release to the CSK (2.0 RC1), I'm updating the core object model (the ActionPack) to do some very very cool things.
I went a little nutso this weekend and created (what I think) is the neatest thing I've ever made. Not trying to sounds egotistical with this but it's such a rush when you have an idea and you watch it borne out - and it works!