Our Devlicio.us Blogs

Alabama Code Camp in Mobile

I’ll be at the Alabama Code Camp this weekend in Mobile, AL, along our very own Alan Northam. Like all code camps, this is a free event. If you are anywhere in the area I recommend attending. The schedule is posted on the site and there are a lot of great sessions.

I’m doing two presentations: one on source control concepts that I did at the Jacksonville and Tallahassee code camps. The other is a brand new presentation about the basics of game development, with a primer for XNA and how to port the source to Silverlight using SilverSprite.

You can also follow the event on Twitter with the hashtag #ALCC.

Hope to see you there.

Comments [0]

Since our v1 release of Caliburn in October, we’ve had a healthy amount of bug fixes and feature improvements.  The community has really gotten involved and contributed in a big way.  The result of this contribution is the forthcoming v1.1.  As of this post, the release candidate is available for download.  It’s a release almost entirely created based on feedback and patches from the community, with very little of my own ideas involved.  Below is a list of fixes/improvements if you care to dig into the gritty details:

  • Added pre-initialization hooks to CaliburnApplication via Marco Amendola's patch.
  • Redesign of IThreadPool.  AsynchronousAction will now pass itself as state when enqueing the background task.
  • Closed ticket #4672 by making PropertyChangedBase.PropertyChanged virtual.
  • Applied jagregory's patch to add single key gestures to WPF and Caliburn.
  • Applied marcoamendola's patch for enabling property path syntax with Preview and Dependency attributes. So you can now do things like [Dependencies("Model.IsValid")].
  • Applied marcoamendola's patch enabling type hinting for polymorphic databinding in Caliburn.Testability.
  • Applied etobi's patch to greatly improve Caliburn's parameter parsing in ActionMessages and CommandMessages. See http://caliburn.codeplex.com/WorkItem/View.aspx?WorkItemId=4644 for an explanation.
  • Closed ticket #4826. DefaultWindowManager now sets WindowStartupLocation to CenterOwner for UserControls hosted in windows. Title was enhanced to databind to IPresenter.DisplayName if model implements this interface.
  • Closed ticket #4833. Fixed an issue with ViewMetadata and invalid Windows in DefaultViewStrategy.
  • Fixed a bug with DefaultWindowManager which caused errors when creating main windows from a user control.
  • Improved the flexibility of the DefaultViewStrategy. It no longer requires separate namespaces for ViewModels/Views.
  • Closed ticket #4865. Fixed a bug in MultiPresenterManager which affects multiple presenter shutdown.
  • Applied sedovav's fix to the Spring adapter.
  • Enhanced DefaultViewStrategy's exception to report searched for types when view location fails.
  • Applied cheesus' recommendations to add unwire capability to IEventHandler.
  • Improved PresenterManager and MultiPresenterManager such that all changes to CurrentPresenter go through ChangeCurrentPresenterCore.
  • Bug fixes and improvements to DependenciesAttribute, PreviewAttribute, DependencyObserver and PropertyPathMonitory.
  • Added strongly-typed property change notification to PropertyChangedBase.
  • Fixed a bug in the SimpleContainer related to generic component registration.
  • Added ILifecycleNotifier.AttemptingShutdown which gets fired before the CanShutdownCore method on PresenterBase is called.
  • Fixed a bug in AsnychronousAction related to IPreExecute, BlocksInteraction and AffectsTriggers.
  • Added IWindowManager and DefaultWindowManager for SL3 and SL4.
  • Fixed a few bugs in property change testing.
  • Fixed a bug in the MEFAdapter.
  • Fixed a bug in the design-time support for Availability Effects in the AvailabilityEffectConverter.
  • Updated to Castle Windsor 2.1, Dynamic Proxy 2.2. Added official Windsor support for Silverlight 3.0 and 4.0
  • Fixed a minor bug in View Contexts.
  • Enabled WPF Action parameters to bind to default event/property by specifying only an element name as the arg.
  • Added the Silverlight Navigation Sample to How Tos.
  • Created three different build-*.cmd for the major build scenarios.
Comments [2]

Just a quick and simple reminder. If you run into the case where you are not hitting breakpoints in your Silverlight code, take a look at the properties of your hosting web project (if applicable).

On the Web tab, under Debuggers is a set of checkboxes.

Web Project Properties

First, ensure that Silverlight is checked.

If it is already checked, then uncheck it, save the project, check it back, and save again.

I’ve had this fix the problem at least once.

Comments [4]

I’m currently reading Thomas Sowell’s A Conflict of Visions: Ideological Origins of Political Struggles. As the title suggests, it deals with certain fundamental differences in the way we see the world and how that affects our political views. Don’t worry, I’m not going to delve into politics in the post. However, I was struck by how applicable the ‘visions’ in the book are to the competing (and conflicting) views about how we should write software.

Here’s a simplified sketch of the two fundamental visions in the book. (Note that I’m not attempting to make a judgment call here on which vision is correct or better. Though admittedly, I have my bias. Likewise, I’m necessarily keeping it simplified.).

  • Complex problems are best addressed by:
    [a] systemic evolution or [b] clear and articulated reason
  • When a complex problem is addressed the result will most likely be:
    [a] a set of prudent trade-offs or [b] a solution
  • Better results are produced when governance is provided by
    [a] role and ritual or [b] well-educated individuals

This is just a few characteristics indentified in the book. We have a tendency to favor either the A answers or the B ones.

Let me unpack this now in terms of software development. I think that the philosophy of agile/software craftsmanship/etc has generally preferred the A answers. While more traditional software development has generally preferred the B answers.

  • Many agile practices (such as TDD) build up software through systemic evolution. (Tim Barcz touched upon this idea some time ago). Evolution is at the heart of iterative design. In opposition to this is a heavy initial design phase (or Big Design Up Front). In BDUF, the problem is analyzed and a clear, detailed path is laid out.
  • I think the second point follows implicitly from the first point. BDUF is a ‘solution’, whereas iterative development is inherently about trade-offs. By the term ‘solution’ I am implying that on such-and-such a date, the software will be delivered and the problem will be solved. The value is delayed, but it is complete. In an iterative project the goal is to deliver immediate, but only partial value. It acknowledges that some value is always omitted and that the software might never be complete.
  • The third point is one of the more divisive ones. I believe that agile practices focus a lot on ritual. TDD is a ritual. (I believe there was a Hanselman interview with Robert Martin that discussed this point). Kaban, Scrum, and other similar practices are ritualistic. These rituals are the soil where the systemic evolution grows. On the opposing side, development teams are led by architects. That is, by well-educated and intelligent individuals who have a greater understanding of what needs to be done.

My Bias

It is always important to admit your bias. I tend to favor the A answers above, though not always. I have been in circumstances where that approach broke down.

Regardless, I highly recommend the book as it has given me a lot of insight into my own views and those of others.

Comments [7]

Things I’d Like To Present

In case you are not familiar with MIX, it is a conference from Microsoft focusing on the collaboration of design and development. Admittedly, the sessions tend to favor the developer, but there is always excellent design and UX content.

Mix10_Vote_grn_240 There was an open call for presentations this year and the community gets to choose which of the proposals will be selected. There are a number of excellent proposals and I encourage you to go check out the list and vote for the sessions that you are genuinely interested in. (Even if you won’t be attending, the sessions will be broadcast.)

Here are some sessions that I proposed for MIX10:

Cross Compiling Games for Silverlight & XNA

Our friend and Silverlight MVP, Bill Reiss, has created an incredible library that enables you to cross compile XNA games for Silverlight. The library is called SilverSprite and we feature it on Silver Arcade. (Wow, that’s a lot of ‘silvers’ in one paragraph.)

In this session, we’d write a simple game for XNA (discussing some of the basic of game dev along the way) and then port the game over to Silverlight.

This is an area where I wish I could spend more time. I love game development, but it’s always taking a back burner to other projects.
[vote for this]

LinqToSQL and EntityFramework Profilers: Case Study

If you aren’t already familiar with the UberProf suite of ORM profilers, you can read tales of the development on Ayende’s blog. Rob and I built the UI side of the application, and we learned a lot in the process. I’d like to do a talk were we discuss the challenges of the project, how we solved them, and what we did wrong.

Yes, NHProf will be included too. (I submitted a case study for it last year, and it didn’t get picked. I have to sneak it in). 

A few interesting aspects:

  • we built this using MVVM, but well before Caliburn reached maturity.
  • the four separate apps (NHProf, EFProf, L2SProf, HProf) all use a single code base.
  • we’re about to port the project from WPF to Silverlight.

[vote for this]

Silver Arcade: Case Study

This is a presentation that Rob and I have made a couple of times. Most recently at the Orlando .NET Users Group. We walk through the actual code for Silver Arcade explaining the philosophy, design choices and mistakes we made along the way.

For MIX, we would focus more design and UX choices, such as the separation of the behaviors from the views. However, we like to have a lot of audience interaction and tend to follow where ever the questions led (especially those leading questions that Scott Densmore tends to ask).

Silver Arcade is also interesting because  we deliberately used a number of newer hipper technologies; including Azure, ASP.NET MVC, jQuery, MEF, NHibernate and so on.
[vote for this]

Thanks!

Comments [0]

View our blog archives, visit us at devlicio.us.