.NET & Funky Fresh : Xaml, MVVM, NuGethttp://devlicio.us/blogs/rob_eisenberg/archive/tags/Xaml/MVVM/NuGet/default.aspxTags: Xaml, MVVM, NuGetenCommunityServer 2008.5 SP1 (Build: 31106.3070)Durandal 1.2.0 and Caliburn.Micro 1.5.0 Released!http://devlicio.us/blogs/rob_eisenberg/archive/2013/03/18/durandal-1-2-0-and-caliburn-micro-1-5-0-released.aspxTue, 19 Mar 2013 03:10:59 GMT40756a8b-6212-4073-9d98-6c26781577de:102953Rob Eisenberg10http://devlicio.us/blogs/rob_eisenberg/rsscomments.aspx?PostID=102953http://devlicio.us/blogs/rob_eisenberg/archive/2013/03/18/durandal-1-2-0-and-caliburn-micro-1-5-0-released.aspx#comments<p>Two awesome releases in the last week! Much thanks to the great community surrounding both projects! Here’s what’s new:</p> <h3>Durandal 1.2.0</h3> <ul> <li>Tons of bug fixes.</li> <li>Lots of improvements to the router.</li> <li>Better support for integrating with Q, KendoUI and Dojo.</li> <li>More docs.</li> </ul> <p><a href="https://github.com/BlueSpire/Durandal/blob/master/Changes.txt" target="_blank">Check out the full set of changes.</a></p> <h3>Caliburn.Micro. 1.5.0</h3> <p>Nigel Sampson and Thomas Ibel are going to town these days! Some really cool stuff happening in this release. Here’s a few things:</p> <ul> <li>Task and Async support (on all platforms except SL4 and WP71)</li> <li>Task/Coroutine integration.</li> <li>Actions can return tasks.</li> <li>More async stuff in general.</li> <li>Support for the WinRT Share Charm</li> <li>Support for the WinRT Settings Charm</li> <li>Various bug fixes and minor improvements throughout.</li> </ul> <p>You can get the latest versions of both of these frameworks on Nuget.</p><div style="clear:both;"></div><img src="http://devlicio.us/aggbug.aspx?PostID=102953" width="1" height="1">WPFXamlWPF/eCaliburnSilverlightRIAMVVMUI ArchitectureCaliburn MicroWP7NuGetJavaScriptDurandalBring on the AWESOME!!! Caliburn.Micro v1.4 Releasedhttp://devlicio.us/blogs/rob_eisenberg/archive/2012/11/15/bring-on-the-awesome-caliburn-micro-v1-4-released.aspxFri, 16 Nov 2012 06:28:00 GMT40756a8b-6212-4073-9d98-6c26781577de:70470Rob Eisenberg16http://devlicio.us/blogs/rob_eisenberg/rsscomments.aspx?PostID=70470http://devlicio.us/blogs/rob_eisenberg/archive/2012/11/15/bring-on-the-awesome-caliburn-micro-v1-4-released.aspx#comments<p>Today I&rsquo;m happy to announce the official release of Caliburn.Micro v1.4. This release brings a ton of bug fixes across all platforms, nuget fixes&hellip;and best of all&hellip;full support for WinRT and WP8. That means that Caliburn.Micro now supports WPF, SL4, SL5, WP7, WP8 and WinRT. AWESOME!!! You can get it on <a href="http://www.nuget.org/packages/Caliburn.Micro" target="_blank">nuget.org</a> or download the binaries directly from <a href="http://caliburnmicro.codeplex.com/releases/view/97813" target="_blank">codeplex</a>.</p> <p>How did this happen you say? Well, not without generous help from the community who believed in this project and put in the hours to make it happen. Here&rsquo;s a few people I&rsquo;d like to mention:</p> <ul> <li><a href="http://www.nuget.org/packages?q=%20Marco%20Amendola">Marco Amendola</a> &ndash; A Caliburn veteran. Always working hard on bugs, features and community support.</li> <li><a href="http://www.nuget.org/packages?q=%20Chin%20Bae">Chin Bae</a> &ndash; Master of our view location strategy. </li> <li><a href="http://www.nuget.org/packages?q=%20Nigel%20Sampson">Nigel Sampson</a> &ndash; Monster WinRT port guru. He practically ported the entire thing himself. REALLY.</li> <li><a href="http://www.nuget.org/packages?q=%20Thomas%20Ibel">Thomas Ibel</a> &ndash; Tons and tons of bug fixes and stability improvements.</li> <li><a href="http://www.nuget.org/packages?q=%20Matt%20Hidinger">Matt Hidinger</a> &ndash; Did all the grunt work to get official WP8 support into this release.</li> </ul> <p>I&rsquo;d also like to thank all the community members who tested out this version, submitted feedback..and of course&hellip;thanks to everyone who submitted pull requests. It was a tremendous help!</p> <p>Finally, I&rsquo;d like to extend a special thank you to Scott Hanselman, Scott Hunter and the whole .NET team for supporting open source software and providing the necessary licenses I needed to actually build and release this version. It would not have been possible without their kindness and generosity.</p> <p>For reference, here&rsquo;s the <a href="http://www.nuget.org/profiles/eisenbergeffect" target="_blank">full list of nuget packages</a> and their descriptions:</p> <ul> <li>Caliburn.Micro &ndash; The full framework compiled into an assembly.</li> <li>Caliburn.Micro.Start - Includes Caliburn.Micro plus a starting bootstrapper, view model and view.</li> <li>Caliburn.Micro.Container &ndash; The Caliburn.Micro inversion of control container (IoC); source code drop-in.</li> <li>Caliburn.Micro.EventAggregator &ndash; The Caliburn.Micro event aggregator; source code drop-in.</li> <li>Caliburn.Micro.INPC &ndash; The Caliburn.Micro INPC infrastructure: PropertyChangedBase, BindableCollection, Execute.OnUIThread and InDesignMode checking; source code drop-in.</li> </ul> <p><em><strong>Note:</strong> We have removed the starting bootstrapper, view and view model template code from the core package and added a new package, Caliburn.Micro.Start, which now has the core plus the startup files.</em></p> <p>Go forth and build Xaml awesomeness! And stay tuned for an update on <a href="https://github.com/EisenbergEffect/Durandal" target="_blank">Durandal</a> in the next few weeks too ;)</p> <p>&nbsp;</p> <p><i><span>This community project is sponsored by&nbsp;</span><a href="http://www.xceedsoft.com/redirect/ad/index.aspx?adtype=143">Xceed</a><span>, makers of&nbsp;</span><a href="http://www.xceedsoft.com/redirect/ad/index.aspx?adtype=141">Xceed DataGrid for WPF</a><span>, the enterprise datagrid that provides a rich, fluid, and high performance user experience. 50% off any Xceed product with coupon code G00B8T. Xceed also offers&nbsp;</span><a href="http://extendedsilverlight.codeplex.com/">Extended Silverlight Toolkit</a><span>&nbsp;and&nbsp;</span><a href="http://wpftoolkit.codeplex.com/">Extended WPF Toolkit</a><span>&nbsp;here on Codeplex.</span></i></p><div style="clear:both;"></div><img src="http://devlicio.us/aggbug.aspx?PostID=70470" width="1" height="1">WPFXamlWPF/eCaliburnFeaturedSilverlightRIAMVVMUI ArchitectureCaliburn MicroWP7NuGetBoo-yah!!! Caliburn.Micro v1.3 RTW is Herehttp://devlicio.us/blogs/rob_eisenberg/archive/2012/01/20/boo-yah-caliburn-micro-v1-3-rtw-is-here.aspxSat, 21 Jan 2012 04:32:00 GMT40756a8b-6212-4073-9d98-6c26781577de:69352Rob Eisenberg5http://devlicio.us/blogs/rob_eisenberg/rsscomments.aspx?PostID=69352http://devlicio.us/blogs/rob_eisenberg/archive/2012/01/20/boo-yah-caliburn-micro-v1-3-rtw-is-here.aspx#comments<p>I&rsquo;m extremely pleased to announce <a target="_blank" href="http://caliburnmicro.codeplex.com/releases/view/80884">the release of Caliburn.Micro v1.3</a>.&nbsp; This is a great release with many bug fixes and several API improvements. We also support several new platforms. Here&rsquo;s the highlights:</p> <ul> <li>Support for WP7 Mango</li> <li>Support for Silverlight 5</li> <li>Basic MVVM Support for WinRT/Metro</li> <li>Awesome improvements to ViewModelLocator/ViewLocator which allow easier customization of conventions.</li> <li>Improved Design-Time Support for Conventions</li> </ul> <p>Thanks to the great community who provided awesome feedback during this release cycle. Thanks also to those who spent time to provide fixes and pull requests for bugs as well as for API improvements. I&rsquo;d like to add a special thanks to Chin Bae for excellent work on making our ViewLocator and ViewModelLocator both more extensible and more accessible for common customizations.</p> <p>We&rsquo;re still just getting started. Enjoy <a target="_blank" href="http://caliburnmicro.codeplex.com/releases/view/80884">the new bits</a> and see what you can build!</p><div style="clear:both;"></div><img src="http://devlicio.us/aggbug.aspx?PostID=69352" width="1" height="1">WPFXamldatabindingWPF/eCaliburnFeaturedSilverlightRIAMVVMUI ArchitectureCaliburn MicroWP7NuGetMVPHow I Lost, Regained and then Turned Down an MVP Awardhttp://devlicio.us/blogs/rob_eisenberg/archive/2012/01/04/how-i-lost-regained-and-then-turned-down-an-mvp-award.aspxThu, 05 Jan 2012 04:46:00 GMT40756a8b-6212-4073-9d98-6c26781577de:68957Rob Eisenberg85http://devlicio.us/blogs/rob_eisenberg/rsscomments.aspx?PostID=68957http://devlicio.us/blogs/rob_eisenberg/archive/2012/01/04/how-i-lost-regained-and-then-turned-down-an-mvp-award.aspx#comments<p><strong>What Happened To Me</strong></p> <p>I&rsquo;d say that 2011 was a pretty good year for me as a .NET open source developer. After all, Caliburn.Micro had it&rsquo;s first official release in April 2011 just in time for the Mix Open Source fest. At the festival, the framework had a great showing. I had tons of people literally coming up to me and dumping *all* their voting tokens into my bucket. In fact there were so many people constantly standing around my booth that my bucket didn&rsquo;t even get collected for counting in the official vote. Thankfully someone standing around realized this and helped to remedy the situation. Needless to say, it was a successful event. Over the next several months I did two additional non-trivial releases and then began work on the v1.3 release. I also added support for Silverlight 5, WP7 Mango and preliminary support for WinRT/Metro. Furthermore, I began refactoring the entire framework so that it could be modularized into &ldquo;feature&rdquo; packages allowing a variety of different uses of the framework via Nuget. I even tested CM&rsquo;s EventAggregator and IoC container to make sure they would run without issue on iOS and Android devices via Unity3d. In addition to the actual framework development, I wrote documentation, blogged, fixed dozens of bugs and added new features. I also participate daily in the Caliburn.Micro forums which currently have about 1k discussions. Caliburn.Micro is now used as the core enabling framework for thousands of applications across WPF, Silverlight and various versions of WP7. Depending on the day, Caliburn/Caliburn.Micro is the second or third most trafficked Xaml-related open source project in existence.</p> <p>I&rsquo;m not trying to toot my own horn here. I&rsquo;m just trying to set up a context. Considering the enormous amount of work in both creating the project and supporting the community&hellip;you can imagine my surprise when I received the &ldquo;form letter&rdquo; stating that my MVP was not being renewed because I hadn&rsquo;t accomplished enough in the last 12 months&hellip;.and what I did do did not &ldquo;stand out&rdquo; in the community. Here&rsquo;s the actual quote:</p> <blockquote> <p>&ldquo;The MVP Award is presented to individuals for their past year&rsquo;s contributions to online and offline communities, which stand out from others in the communities that focus on Microsoft technologies. Your contributions were diligently evaluated over the past year against the contributions of others in the Silverlight community.&nbsp; As a result of this evaluation, you were not awarded as a MicrosoftMVP for the January 2012 award cycle.&rdquo;</p> </blockquote> <p>Now, I&rsquo;m not really &ldquo;attached&rdquo; to being an MVP. I don&rsquo;t attach a lot of self-worth or emotional satisfaction to it. It&rsquo;s a nice thing to have though. So, I was really caught off guard by this and wondered how the MVP program could come to the conclusion that I hadn&rsquo;t significantly contributed in the last year.</p> <p><strong>What I Did</strong></p> <p>Being surprised as I was, and not being too fond of &ldquo;generic&rdquo; letters , I made one simple tweet:</p> <blockquote> <p>&ldquo;Apparently Caliburn/Caliburn.Micro and my support of it is not a &lsquo;good enough&rsquo; contribution for Microsoft. I lost my MVP this year.&rdquo;</p> </blockquote> <p><strong>The Community Response</strong></p> <p>Immediately following this tweet, a storm of people responded with great affection for my work and general encouragement. I want to say thank you to everyone who responded so kindly. Paired with the encouragement was a general sense of befuddlement around how the MVP program could make such a conclusion. Apparently, I wasn&rsquo;t the only surprised individual.</p> <p>I thought to myself &ldquo;mistakes happen.&rdquo; But as I was surveying the twitter-verse, I also learned that Jeremy Miller (StructureMap, FubuMVC, Storyteller) and Daniel Cazzulino (Moq) also lost their MVPs; two other prominent open source developers. Now I had had some problem during the re-evaluation process indicating my new MVP Lead clearly didn&rsquo;t understand the nature of open source. When I was up for renewal, he asked me to fill out a rather ridiculous spreadsheet. If you could see it, you would notice something missing? There&rsquo;s no category for Open Source!!! There&rsquo;s not even a way to report it. I had this problem in previous years when I was asked to update my online MVP profile (a hideously painful UX by the way). The program uses that to evaluate you as well. Guess what? There&rsquo;s no way to report Open Source work!!! Do you see a trend here? </p> <p>--Start Rant</p> <blockquote> <p>The thing that really disturbed me was that my MVP Lead didn&rsquo;t know who I was or understand the nature of my contributions. What is it that an MVP Lead does anyways? I can&rsquo;t tell. I get a useless mass email every week or so telling me things about Microsoft I don&rsquo;t care about. Half of the time it isn&rsquo;t even readable due to bad formatting, etc. My Lead never contacted me personally during the year. When I came up for renewal, I had to *defend* why I should have my award renewed using a bad Excel spreadsheet and a really bad online form which don&rsquo;t even allow me to capture my real contributions. Shouldn&rsquo;t it be an MVP Lead&rsquo;s job to know his MVPs and what it is they are doing? Seriously. I sat down and calculated how much time it would take me to fill out the Excel form and the online form, plus writing a custom report for everything that wasn&rsquo;t able to be captured via those broken mechanisms. I took that number of hours and multiplied it by my hourly consulting rate and determined that the money I would make working exceeded the material value of the MVP award. Haven&rsquo;t I given enough free work to Microsoft? This isn&rsquo;t a personal attack on *my* MVP Lead. I don&rsquo;t know the guy. But, I wonder whether the role of MVP Lead is improperly defined or under-defined, because I know that I&rsquo;m not the only person who has had this exact problem repeatedly.</p> </blockquote> <p>--End Rant</p> <p><strong>Microsoft Employees to the Rescue</strong></p> <p>Also following my tweet, a number of Microsoft employees stepped in to investigate.&nbsp; I have to thank them here personally. Much thanks to you (in no particular order) Tim Heuer, Pete Brown, Joe Healey, Glenn Block and Scott Hanselman. At one point I heard that this issue had even been escalated internally to Scott Guthrie. It&rsquo;s truly an honor that so many well known and respected individuals *inside* Microsoft stepped up to personally investigate my situation. Thank you again. This is a tremendously good thing and points out something of great importance. Over the years I&rsquo;ve very rarely had negative experiences with individual Microsoft employees. But, I&rsquo;ve almost always had bad experiences interacting with groups, programs, etc. It seams that somehow the opinions of the individuals are lost in the system. That&rsquo;s a real shame. </p> <p>If the opinion of many trusted Microsoft employees and the opinion of so many community members is not reflected in the MVP Award, then there certainly is a problem with the program&hellip;or I don&rsquo;t understand what the program is.</p> <p><strong>An MVP Again&hellip;for a few hours</strong></p> <p>Thanks to the work of the gentlemen listed above, I was informed last night that I was being re-awarded an MVP for the 2012 year. I understand this sort of thing never happens. But, I&rsquo;d already had several days to reflect on the MVP program and had several conversations with various people leading to several realizations listed above and several more detailed below. I was very unsettled.</p> <p><strong>Why I Turned Down the MVP</strong></p> <p>This morning I responded to the award email with a respectful <em>decline</em>. Below are some of the reasons I chose to no longer be a part of the program and why I doubt I will participate again, unless serious reform happens.</p> <p><strong>Becoming an MVP</strong></p> <p>One of the problems with the MVP program is that the whole thing is basically a mystery. Here&rsquo;s where I first knock heads with the program. I value transparency and openness, even if it&rsquo;s difficult or sometimes painful. The MVP program does not value openness. That&rsquo;s why it&rsquo;s basically a mystery how you get nominated for an MVP or what you have to do to get one. Let me do a little expos&eacute; here. In my case, I&rsquo;m fairly sure that my local Developer Evangelist saw the work I was doing in the local community and submitted me. That&rsquo;s a good thing and it&rsquo;s probably fairly common. But what happens from there? It&rsquo;s my understanding that it&rsquo;s completely out of DPE&rsquo;s hands at that point. Who knows? From what I can tell, if the MVP program is interested in you, you then have to submit proof of your accomplishments to them. I remember doing this. It&rsquo;s not like a normal award where the organization does the work to investigate your contributions and then decides whether or not to give you an award. No. If you are being considered for nomination, you literally have to *sell* yourself to the MVP program&hellip;and selling is exactly what you are doing. Want to know why? Have you noticed that the MVP disciplines are strictly organized around internal product groups, regardless of how hindering to the particular MVP discipline it appears to be? An example of this is that Client AppDev, Silverlight, WP7 and Blend are all separate MVP groups even though they should be unified. Because they are different products, they are different MVPs (actually, they should all be the same product, but that&rsquo;s a subject for another blog post). Do you know why this is? I&rsquo;ll tell you: because each product group literally gets an MVP &ldquo;budget&rdquo; which they use to &ldquo;purchase&rdquo; MVPs for the year. Personally, I&rsquo;m offended by this notion. But it would take drastic re-organization of the MVP program to fix it.</p> <p><strong>General Life as an MVP</strong></p> <p>Now you can just imagine how this division along product lines and MVP purchasing might affect things. Because Microsoft&rsquo;s product teams are notorious for not only being non-communicative with one another but are often pitted against one another by the upper level management&hellip;the various product teams can develop a vastly different set of values and beliefs with respect to interaction both internally and with the outside world. Depending on what MVP discipline you are a part of&hellip;and the nature of your contributions&hellip;you may have a great experience or you may be in store for hell. If the product group you are associated with is open, such as ASP.NET, you can expect lots of interaction, incorporation of your feedback into the product and probably a deep respect of open source work. If your product team is something like WP7, you can expect much less communication, very little change to the product based on your feedback and probably&hellip;they don&rsquo;t even know what open source is.</p> <p><strong>My Life as an MVP</strong></p> <p>As for myself, it&rsquo;s clear that my major contribution is through an open source framework. What a fool I was&hellip;there&rsquo;s a certain insanity in building an open source framework on top of a proprietary UI stack. Back when I was awarded the MVP, I was given the Client AppDev designation, which basically means WPF (but for some reason, contrary to what I&rsquo;ve said above, also included WinForms..interesting how they had WPF and WinForms in the same group but not WPF and Silverlight&hellip;but I digress&hellip;or do I?). Back then Xaml tech wasn&rsquo;t so secretive. When Silverlight came along, they moved me into that group. That group was different. Silverlight was kept tightly sealed. When I was a Client AppDev, I actually felt like Rob Relyea and John Gossman were my kin. When I became a Silverlight MVP, I felt like I was an outsider being graced with a little tiny window to peer in on things. I say all that because when I started on Caliburn, while I was working on a proprietary platform, it felt more open. But when Silverlight came along, things changed. WP7 was even worse than Silverlight&hellip;and WinRT/Metro&hellip;well&hellip;they didn&rsquo;t talk to anyone. Now that Xaml has moved out of the Developer Division and into the Windows division, it&rsquo;s only going to get worse.</p> <p><em>Secret Societies</em></p> <p>I&rsquo;ve already mentioned how the organization of the MVP groups along product lines can be a hindrance to everyone. WPF, Silverlight, WP7, Metro and Blend&hellip;which are all used by the same group of people, are actually different MVP groups. As a Silverlight MVP&hellip;I had no access to anything happening with WP7. I had no knowledge of WinRT/Metro. I had no knowledge of Blend or any mechanism to directly interact with that product team. Now, Caliburn.Micro spans all of these technologies, but I could really only talk to Silverlight product team members&hellip;and a few of my old WPF comrades. But would it surprise you if I told you the organizational absurdity went even farther. Did you know there are &ldquo;insiders&rdquo; groups. &ldquo;Insiders&rdquo; for a particular product group have more privileged knowledge than MVPs and more opportunities for direct interaction. Some MVPs are also insiders, but not all. Some insiders are not MVPs. But wait, there&rsquo;s more. There&rsquo;s also the TAP program&hellip;.which seams to have more privileged connections and knowledge. To this day, I don&rsquo;t know how one gets in a TAP program. I was in the WP7 Tap for about two days. Some guys already in the program were talking in the TAP forums about getting Caliburn.Micro working on WP7. They yelled loud enough and the powers that be invited me, since it seamed that significant apps were likely to be built with my framework. Unfortunately, things went public very shortly after that and the TAP was closed. LOL. But it doesn&rsquo;t end there. It seams, based on observation, that there are even more secretive groups&hellip;who pretty much know everything the product team knows. These guys don&rsquo;t have a name and I don&rsquo;t know how you get into that. Though, I&rsquo;m pretty sure it has to do with being &ldquo;chummy&rdquo; to the right people. Childishness. The bottom line is that there are too many levels of secrecy and too many and the wrong types of divisions to enable an effective feedback loop. I don&rsquo;t know if this is true of all MVP groups, but it was with Silverlight and it has got worse with each successive Xaml platform. Now that Xaml is in Windows, I don&rsquo;t expect anyone to be able to provide decent feedback.</p> <p><em>Fruitlessness</em></p> <p>Since things are so improperly organized, there are really only a few occasions where one can really provide good feedback on the product. Unfortunately, after three years as an MVP, I have to say that not a single bit of feedback I provided resulted in any sort of change to the product. With the Silverlight team..and almost always with the Blend team (when I could actually run one of them down), I would get some response like &ldquo;yes, we&rsquo;ll have to have a conversation about that.&rdquo; And I&rsquo;d be thinking&hellip;&rdquo;isn&rsquo;t that why I&rsquo;m here at the MVP summit talking to you now?&rdquo; But they never seamed to want to engage in a real discussion on *anything* that affected me, my project or my clients. I had this happen every year at the summit. I had even more outrageous things happen in email and at BUILD. On the insiders email list (when I finally got on it), I tried to start a conversation about Convention over Configuration and improvements to tooling that would help support those scenarios and generally make tool extensibility better. Somehow I managed to get into a private email thread of the Blend team where they could engage me on that. You know what they said when I tried to continue the conversation? They said &ldquo;we don&rsquo;t want to discuss that right now.&rdquo; Ok&hellip;thanks. That made me really mad. Why am I an MVP again? But the real treat was at BUILD. I managed to track down two of the Blend PMs. I first talked to the PM in charge of the JavaScript Blend work. I told him about what I was building in JavaScript. He was really interested and wanted to follow up with me on what I was building and how it would work inside Blend. Then I took several steps to the right to talk to a Blend PM working on the Xaml side of things. I tried, once again, to discuss CoC. I know for a fact these guys either don&rsquo;t understand it or don&rsquo;t think it&rsquo;s important in software at all. Well, they listened for a moment, then I asked about improving the tooling so I could have a plugin mechanism by which to improve that scenario for my customers. They were very not-helpful. I tried to bring up issues of developer productivity and better strategies for building applications. In a nutshell, the PM basically said to me &ldquo;we don&rsquo;t care about developers&hellip;they aren&rsquo;t part of our use cases.&rdquo; I was pretty enraged by that. See how the product team&rsquo;s culture affects the effectiveness of the MVP program? My main point though is that nothing I ever said or did affected any product team&rsquo;s work. Nothing. It was a waste of time and energy&hellip;and an emotional drain.</p> <p><em>MVP Quality</em></p> <p>Now I want to tread lightly here with how I say this&hellip;.not all MVPs are created equal. I&rsquo;m going to be vague here. I met an MVP once for Technology X. It turned out that she had never built anything with Technology X and wasn&rsquo;t overly knowledgeable about it. She liked Technology X a lot though. Each day she would scan her RSS feeds and post about 8 - 10 links on Technology X. That&rsquo;s why she had her MVP. It looks good on a review doesn&rsquo;t it? I blogged 365 posts on Technology X this year!!&nbsp; Now, I&rsquo;ve met some MVPs in various areas that were brilliant and obviously contributing a lot. But, I&rsquo;ve met a fair share of MVPs who not only were not experts on the technology, but didn&rsquo;t make half the contribution that other developers I knew did, who were never awarded MVPs. Not all MVPs are equal. If you are an employer, or looking for a speaker, expert, consultant&hellip;whatever; you cannot assume that just because that person has an MVP that they know what they are talking about. It&rsquo;s sad, but this describes a noticeable number of MVPs.</p> <p>One more word on MVP quality with respect to division along product team lines. You should never hire a highly product-specific MVP to help advise you on technology choices. I hope you realize the built-in problem with that. I know very few Technology X MVPs who would tell you not to use Technology X, even if there was a better, cheaper, faster way to build your solution. Be wary.</p> <p><em>Open Source</em></p> <p>I just want to say a little more about this. As I mentioned, there&rsquo;s nothing about the MVP program that explicitly allows for recognition of open source work. It&rsquo;s hard to get nominated for it and it&rsquo;s even harder to renew with it. MVP leads who play a major roll in the renewal process may not be technical at all and even may not understand Open Source. Since I&rsquo;ve mentioned how MVPs are linked to product groups, you might guess that the effectiveness of your MVP as an OSS developer is entirely dependent on that particular product group&rsquo;s understanding of and interest in OSS. In a group related to ASP.NET or JavaScript, developers on the team are likely to have run open source projects themselves. In a group like Silverlight or WP7, they are likely to have never done such a thing&hellip;and not even have a clear idea of what is involved. I really came face to face with this when my non-renewed MVP&hellip;got renewed. Why? Well, it felt like a sort of &ldquo;benefit of the doubt&rdquo; renewal. Here&rsquo;s the advice I was given from the renewal email, elided:</p> <blockquote> <p>EDIT: I removed this quotation because a good friend of mine was honest enough to remind me that quoting a personal email is neither professional nor polite. I repent of that.</p> </blockquote> <p>--Start Rant</p> <blockquote> <p>What!? I released one of the most popular Xaml-related OSS project this year. I did multiple version releases, nuget packages, podcasts, documentation, forum support&hellip;the list goes on. What more do you want from me? And what should I do next year&hellip;because Caliburn.Micro is so popular, that in order for me to do something bigger for next year&hellip;I&rsquo;d have to dump it entirely&hellip;.completely abandoned it and build something totally different&hellip;something even more popular for Silverlight!? How could I do that to my community? That&rsquo;s not even nice. No, in 2012, I&rsquo;m going to continue to fix bugs, add features, add platform support and do awesome things with Caliburn.Micro. I love my own community and I&rsquo;m going to continue to work hard and support them.</p> </blockquote> <p>--End Rant</p> <p>Now this kind of comment clearly expresses a deep lack of understanding for both the value of a project like Caliburn.Micro and the amount of time and resources it takes to maintain both the project and the community. If your OSS project is successful, it&rsquo;s not just something you do one year and then move on to something else the next. In fact, building the first version of Caliburn.Micro was the easy part! It&rsquo;s everything that&rsquo;s happened afterwards and what is happening now that is hard work and will continue to be.</p> <p>Unfortunately, Microsoft just doesn&rsquo;t have a way of recognizing OSS developers who improve their platform. The MVP program doesn&rsquo;t do this and the product teams may not either. In fact, Balmer has explicitly said he isn&rsquo;t creating any policy around OSS&hellip;he&rsquo;s totally dodging it entirely. This leaves the decision up to the individual teams&hellip;which sometimes goes well, but often times does not. That&rsquo;s irresponsible leadership.</p> <p><em>Career Affects</em></p> <p>No one ever hired me as a consultant because I had an MVP. They hired me because of my open source work and my recognized expertise in UI architecture. The company I&rsquo;m working for&hellip;I don&rsquo;t even think they know what an MVP is. They hired me because they know *me* and know I can help them with their particular problem. I would say the personal career benefits of having an MVP are a wash except&hellip;</p> <p>With Microsoft&rsquo;s less than above the bar treatment and communication about Silverlight over the last year or so, you might imagine this could effect MVPs associated with the program. I&rsquo;ve heard a lot of horrible stories in the last year. I didn&rsquo;t have anything terribly bad happen to my business, but I was quite embarrassed recently. I was attending a .NET user group meeting, of which I am the president. Somehow I or someone else mentioned that I was a Silverlight MVP. I don&rsquo;t remember the detail about how it came up, but I do remember what happened next. Someone laughed at me. Literally, I was made fun of because my MVP had the word Silverlight attached to it. Now, I&rsquo;m just not willing to endure mockery for the sake of Silverlight, especially since I understood exactly why he was laughing at me. It has got to where being a &ldquo;Silverlight&rdquo; MVP is bad for my career.</p> <p><em>My Happiness</em></p> <p>Looking over the last three years, I&rsquo;ve definitely been a less happy, more frustrated developer. I&rsquo;m sure it&rsquo;s linked to the sort of fake &ldquo;value&rdquo; being a Silverlight MVP gave me. Basically, they give you a couple of cheep gifts, then they pretend to listen to your feedback, while not actually doing anything. Year after year of that and you get really unhappy. It&rsquo;s demoralizing. You start to realize that you really are a commodity. You are purchased by a product group and kept around as long as they perceive they need you&hellip;your feedback is allowed, but not effective. Again, it&rsquo;s probably not the case for all MVPs, it depends on the groups. I just don&rsquo;t need that in my life.</p> <p><strong>Conclusion</strong></p> <p>I&rsquo;m saying goodbye to the MVP program even after I was re-offered the award for 2012. If you&rsquo;ve read this far, you can probably see why I made that decision. I&rsquo;m really positive about the future of Caliburn.Micro and hopeful regarding my JavaScript framework. I think 2012 is going to be a wonderful year. If someone seriously reforms the MVP program or if Microsoft decides to properly recognize and reward open source efforts, then, maybe I&rsquo;ll let them give me an award. But for now, I don&rsquo;t need to suffer any more. I&rsquo;m free and I&rsquo;m going to do great things.</p><div style="clear:both;"></div><img src="http://devlicio.us/aggbug.aspx?PostID=68957" width="1" height="1">WPF.NET 3.0XamlWPF/e.NET 3.5CaliburnFeaturedSilverlightRIAMVVMUI ArchitectureCaliburn MicroWP7NuGetMVPCaliburn.Micro v1.2 RTW and Nuget Feature Packages!http://devlicio.us/blogs/rob_eisenberg/archive/2011/07/30/caliburn-micro-v1-2-rtw-plus-nuget-feature-packages.aspxSat, 30 Jul 2011 20:40:00 GMT40756a8b-6212-4073-9d98-6c26781577de:68054Rob Eisenberg2http://devlicio.us/blogs/rob_eisenberg/rsscomments.aspx?PostID=68054http://devlicio.us/blogs/rob_eisenberg/archive/2011/07/30/caliburn-micro-v1-2-rtw-plus-nuget-feature-packages.aspx#comments<p>Today, I&rsquo;m pleased to announce <a target="_blank" href="http://caliburnmicro.codeplex.com/releases/view/70940">the RTW of Caliburn.Micro v1.2</a>. In this release we&rsquo;ve had a number of bug fixes as well as a few incremental feature additions and refactorings. You can read the list of changes on the project site or get it as part of the download. Of course, v1.2 is now <a target="_blank" href="http://nuget.org/List/Packages/Caliburn.Micro">available through Nuget</a> as well. </p> <p>In addition to the standard release, I&rsquo;m happy to announce something new we are doing with Caliburn.Micro: Feature Packages. Feature Packages allow developers a way pick and choose only the features they want from Caliburn.Micro and not have to take a dependency on other unused features of the framework. This allows for smaller Silverlight and WP7 applications as well as the ability to use some Caliburn.Micro features outside of the scope of a Xaml-application at all. Currently, we only have three feature packages available, but those will likely expand in the future.</p> <p>Here&rsquo;s a list of all the official Caliburn.Micro related packages on Nuget:</p> <p>Caliburn.Micro &ndash; The full framework compiled into an assembly.</p> <p>Caliburn.Micro.Container &ndash; The Caliburn.Micro inversion of control container (IoC), provided as a source code drop-in.</p> <p>Caliburn.Micro.EventAggregator &ndash; The Caliburn.Micro event aggregator, provided as a source code drop-in.</p> <p>Caliburn.Micro.INPC &ndash; The Caliburn.Micro INPC infrastructure: PropertyChangedBase, BindableCollection, Execute.OnUIThread and InDesignMode checking, provided as a source code drop-in.</p> <p>Interestingly, by combing the container, event aggregator and INPC packages, you basically get something equivalent to MVVMLight Toolkit. So, if you are looking to get started with the absolute minimal needed to do MVVM, we have a solution for you. Naturally, it&rsquo;s source-code-identical to Caliburn.Micro, which means you can upgrade from any combination of feature packages to the full framework without having to change a line of your code.</p> <p>Happy app-building!</p><div style="clear:both;"></div><img src="http://devlicio.us/aggbug.aspx?PostID=68054" width="1" height="1">WPFXamlWPF/eCaliburnFeaturedSilverlightRIAMVVMUI ArchitectureCaliburn MicroWP7NuGetCaliburn.Micro v1.1 RTWhttp://devlicio.us/blogs/rob_eisenberg/archive/2011/06/01/caliburn-micro-v1-1-rtw.aspxWed, 01 Jun 2011 20:08:00 GMT40756a8b-6212-4073-9d98-6c26781577de:67427Rob Eisenberg3http://devlicio.us/blogs/rob_eisenberg/rsscomments.aspx?PostID=67427http://devlicio.us/blogs/rob_eisenberg/archive/2011/06/01/caliburn-micro-v1-1-rtw.aspx#comments<p>Today I&rsquo;m happy to announce the release of <a target="_blank" href="http://caliburnmicro.codeplex.com/releases/view/67451">Caliburn.Micro v1.1</a>. You can get it on <a target="_blank" href="http://caliburnmicro.codeplex.com/releases/view/67451">our project site</a> or by <a target="_blank" href="http://nuget.org/List/Packages/Caliburn.Micro">using Nuget</a>.</p> <p>We&rsquo;ve had a number of bug fixes, general improvements and a few new features added. Here&rsquo;s the highlights:</p> <p>For WP7</p> <ul> <li>A new Tombstoning API based on ideas from Fluent NHibernate</li> <li>A new Launcher/Chooser API</li> <li>Strongly typed Navigation</li> <li>SimpleContainer included</li> <li>The full phone lifecycle is made easy to work with <ul> <li>ie. we figure out whether your app is actually Resurrecting of just Continuing and tell you</li> </ul> </li> </ul> <p>For WPF</p> <ul> <li>Support for the Client Profile</li> <li>Better support for WinForms integration</li> </ul> <p>All Platforms</p> <ul> <li>A powerful new RegEx-based ViewLocator and ViewModelLocator <ul> <li>Special thanks to <a href="http://www.codeplex.com/site/users/view/cb55555">cb55555</a></li> </ul> </li> <li>Polymorphic subscriptions and custom thread marshaling for the EventAggregator</li> <li>Numerous bug fixes</li> </ul> <p>You can get the complete list of changes in the release notes. Enjoy!</p><div style="clear:both;"></div><img src="http://devlicio.us/aggbug.aspx?PostID=67427" width="1" height="1">WPFXamldatabindingWPF/eCaliburnFeaturedSilverlightRIAMVVMUI ArchitectureCaliburn MicroWP7NuGetBuilding Caliburn.Micro’s NuGet Packagehttp://devlicio.us/blogs/rob_eisenberg/archive/2011/04/08/building-caliburn-micro-s-nuget-package.aspxSat, 09 Apr 2011 03:39:00 GMT40756a8b-6212-4073-9d98-6c26781577de:66854Rob Eisenberg0http://devlicio.us/blogs/rob_eisenberg/rsscomments.aspx?PostID=66854http://devlicio.us/blogs/rob_eisenberg/archive/2011/04/08/building-caliburn-micro-s-nuget-package.aspx#comments<p>I&rsquo;m pretty excited about having NuGet support for Caliburn.Micro with the upcoming RTW. The work was spearheaded by <a href="http://blog.cromwellhaus.com/">Ryan Cromwell</a> and I&rsquo;ve been testing it and extending it for about a week. I thought I would take this opportunity to share a few things that Ryan put together in order to make the package building process simple as well as show a few interesting aspects unique to the upcoming Caliburn.Micro package itself.</p> <p>First, let&rsquo;s look at a convenient PowerShell script Ryan wrote to make building the package easy:</p> <pre name="code" class="c#:nogutter:nocontrols">function Get-ScriptDirectory { $Invoc = (Get-Variable MyInvocation -Scope 1).Value Split-Path $Invoc.MyCommand.Path } # Hang on to current location pushd . # Move to the Package working directory $pkgroot = (Get-ScriptDirectory) + &quot;\package&quot; cd $pkgroot # Clear out the lib which are the references that will be added. ls -Filter lib | del -recurse mkdir lib # Move the built binaries (release) into their respective convention folders copy ..\..\bin\WPF\Release .\lib\Net40 -Recurse copy ..\..\bin\Silverlight\Release .\lib\SL40 -Recurse copy ..\..\bin\WP7\Release .\lib\SL40-wp -Recurse ..\nuget.exe pack caliburn.micro.nuspec popd</pre> <p>Basically, all this script does is copy the release versions of the framework assemblies, along with their dependencies from a known location output by the build process to a location in our to-be-package folder structure. Then, it executes the nuget.exe tool in order to package those assemblies up based on the data found in our caliburn.micro.nuspec file. Here&rsquo;s a look at that file:</p> <pre name="code" class="xml:nogutter:nocontrols">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;package xmlns=&quot;http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd&quot;&gt; &lt;metadata&gt; &lt;id&gt;Caliburn.Micro&lt;/id&gt; &lt;version&gt;1.0.0&lt;/version&gt; &lt;authors&gt;Rob Eisenberg, Marco Amendola, Ryan Cromwell&lt;/authors&gt; &lt;description&gt;A small, yet powerful framework designed for WPF, Silverlight and WP7, Caliburn.Micro implements a variety of UI patterns for solving real-world problems. Patterns that are highlighted include MVVM (Presentation Model), MVP and MVC.&lt;/description&gt; &lt;language&gt;en-US&lt;/language&gt; &lt;licenseUrl&gt;http://caliburnmicro.codeplex.com/license&lt;/licenseUrl&gt; &lt;projectUrl&gt;http://caliburnmicro.codeplex.com&lt;/projectUrl&gt; &lt;iconUrl&gt;http://www.caliburnproject.org/CaliburnIcon.png&lt;/iconUrl&gt; &lt;tags&gt;MVVM Silverlight WPF WP7 SL4 SL MVC CoC Convention MVP PM Screen Coroutine Behavior Model-View-ViewModel Presentation UI ViewModel Phone Caliburn&lt;/tags&gt; &lt;frameworkAssemblies&gt; &lt;frameworkAssembly assemblyName=&quot;Microsoft.Phone.Controls&quot; targetFramework=&quot;sl40-WP&quot; /&gt; &lt;frameworkAssembly assemblyName=&quot;System.ComponentModel.Composition&quot; targetFramework=&quot;net40, sl40&quot; /&gt; &lt;frameworkAssembly assemblyName=&quot;System.ComponentModel.Composition.Initialization&quot; targetFramework=&quot;sl40&quot; /&gt; &lt;/frameworkAssemblies&gt; &lt;/metadata&gt; &lt;/package&gt;</pre> <p>This is all pretty standard stuff. You can read more about the specification for packages <a href="http://nuget.codeplex.com/documentation?title=Nuspec%20Format">here</a>. I want to point out something that is peculiar to our situation though. The frameworkAssemblies element was added as of NuGet 1.2. This allows you to easily specify which GAC&rsquo;d assemblies should automatically be added to the project&rsquo;s references at package install time. Notice how you can specify a targetFramework, thus allowing assemblies to be added conditionally by framework. Curiously, if I were to remove the first element indicating Microsoft.Phone.Controls, the package installation would fail for WP7 projects. The reason for this is that it picks up the System.ComponentModel.Composition element because it indicates sl40. Technically Windows Phone 7 is Silverlight, but that&rsquo;s not what we want here&hellip;There appears to be a bug which shows itself when no WP7-specific assemblies are declared, but a SL4 assembly is. If that SL4 assembly doesn&rsquo;t exist for WP7&hellip;boom! To solve the problem, all you need to do is add any assembly which would normally be part of the default WP7 project anyways.* That basically &ldquo;tricks&rdquo; NuGet into working right.</p> <p>Because we are supporting multiple frameworks, we not only have custom framework assemblies and custom Caliburn.Micro assemblies, but our package installs custom content into your project. Unfortunately, NuGet 1.2 does not support that scenario out-of-the-box. Ryan came up with a pretty simple solution to the problem using the Tools folder. If you are not familiar, every NuGet package can have a custom Tools folder with various PowerShell scripts that will run during the installation or that can be made available to run at various times while you are working in Visual Studio. What Ryan did was create sub-folders under the Tools folder, one for each framework that we supported. Then, he wrote an install.ps1, which determines the framework, locates the framework specific content and adds it to your project. I then modified this to to query the project for it&rsquo;s default namespace and do a little string replacement in those files before adding them to the project. Here&rsquo;s the script:</p> <pre name="code" class="c#:nogutter:nocontrols">param($rootPath, $toolsPath, $package, $project) function get-content-path($contentRoot) { $moniker = $project.Properties.Item(&quot;TargetFrameworkMoniker&quot;).Value $frameworkname = new-object System.Runtime.Versioning.FrameworkName($moniker) $id = $frameworkname.Identifier if($id -eq &quot;.NETFramework&quot;) { $relative = &quot;NET40&quot; } elseif($id -eq &quot;Silverlight&quot; -and $frameworkname.Profile -eq &quot;WindowsPhone&quot;) { $relative = &quot;SL40-WP&quot; } elseif($id -eq &quot;Silverlight&quot; ) { $relative = &quot;SL40&quot; } [System.IO.Path]::Combine($contentRoot, $relative) } $contentSource = get-content-path($rootPath + &quot;\tools&quot;) $defaultNamespace = $project.Properties.Item(&quot;DefaultNamespace&quot;).Value ls $contentSource | foreach-object { $content = [System.IO.File]::ReadAllText($_.FullName) $content = $content.Replace(&#39;$safeprojectname$&#39;, $defaultNamespace) $content | out-file $_.FullName $project.ProjectItems.AddFromFileCopy($_.FullName) } $project.DTE.ItemOperations.Navigate(&#39;http://caliburnmicro.codeplex.com/wikipage?title=Nuget&#39;)</pre> <p>Since the Caliburn.Micro NuGet package still requires a little bit of configuration after installation, I created some custom documentation around that on codeplex and used the install.ps1 to open the VS browser to that page. That&rsquo;s what the last line of the script does.</p> <p>Working on this was an interesting learning experience for me and I&rsquo;m looking forward to doing even more with Caliburn.Micro and NuGet in the future. If your open source projects need to target multiple framework or provide custom installation instructions, hopefully this will give you some ideas and save you some time.</p> <p>&nbsp;</p> <p>*Microsoft.Phone.Controls is not part of the default WP7 project, but it turned out that I needed it there anyways, so I killed two birds with one stone.</p><div style="clear:both;"></div><img src="http://devlicio.us/aggbug.aspx?PostID=66854" width="1" height="1">WPFXamlWPF/eSilverlightRIAMVVMCaliburn MicroWP7NuGetPowerShell