Identifying All Bad Mappings with AutoMapper

One of the long-running annoyances we’ve had with our test of AutoMapper configuration validity on my current project is that a test failure only revealed the first mapping that was wrong. I haven’t figured out why this is the case, but I’ve come up with a work-around that displays all the necessary information.

Because the exception thrown if one or more incorrect mappings is found is AutoMapperConfigurationException, my revised test catches that exception in order to print the source type, destination type, and the list of unmapped property names. Re-throwing the exception at the end ensures that the test still reports a failure. The XUnit test which demonstrates this is available as a GitHub gist. If you’re using NUnit or MSTest in your application, minor revisions to this test will give you the same results.

Ours At Last

After about two weeks of homelessness (a.k.a. living in my wife’s condo and hotels), we finally completed the settlement process on our shiny new townhouse around 3 pm this afternoon. Less than two hours later, we’d spent some of the profit left over from the sale of my old townhouse on new furniture for the main level. Between working full-time, preparing a house to sell, and buying a new one, the past four months have been incredibly busy. It still won’t be slowing down anytime soon. Tomorrow is move-in day, since PODS is coming to pick up their storage unit at noon. There’s still Verizon FIOS to install, furniture deliveries to accept, more furniture and electronics to buy (not to mention a new washer and dryer). I’ll be glad when we’re finally settled in so we can invite some friends to hang out.

Our new neighborhood is still in the process of being built, but what we’ve seen so far of where we’ll be living looks great. I’m looking forward to getting to know our new neighbors.

Fastest Realtor in the East?

I didn’t think a house could be sold in just 4 days, but I was wrong. We got a list price, all-cash offer on the house yesterday. Many thanks to our realtor and friend Karane Campbell. I couldn’t recommend her more highly. She priced the place perfectly and worked hard on the three interested parties to get us the best price.

First-Time Home Seller

Since my wife and I are buying a new place together, I’m selling the townhouse we currently live in. If you’re looking to move into Montgomery County, Maryland you won’t find a better value.

The $285,900 list price gets you a 3-level interior unit townhouse with 2300 square feet of living space; 4 bedrooms, 3 1/2 baths, 2 fireplaces, and a fully-finished walkout basement. The $125 monthly homeowners’ association dues cover your water bill, assigned parking space, trash, recycling, maintenance of community common areas and snow removal. Whether you work in DC, Maryland or northern Virginia, this location puts them well within reach. Metro’s Red Line is a 10-minute walk from the front door. The Beltway and Route 29 are just minutes away by car. I’ve had career opportunities in each of these areas over my 14 years here and having these transit options made it a lot easier than it might have been otherwise.

When it comes to shopping, dining, or entertainment, this area is hard to beat. Wheaton Plaza is just around the corner. The area’s newest Costco store will soon be open there. There are multiple CVS pharmacies, a Target and a Giant Food store. A brand-new Safeway is also scheduled to open within a year. There a few good Thai and Vietnamese restaurants within a short drive or a walk. Everything that downtown Silver Spring has to offer is a short drive (or two Metro stops) away.

If you’re into exercise, this area has you covered there too. LA Fitness has a facility in the Wheaton Plaza complex. The paved trails of the Sligo Creek Parkway are not far away either if you run or cycle.

Contact our realtor, Karane Campbell at (240) 393-8906 if you’re interested in finding out more.

MLS# MC7968156

How to Be Black

I finished reading this provocatively-titled book a couple of days ago. I expected Baratunde Thurston’s memoir to have its funny moments (he worked for The Onion until recently) and it did. I was not expecting the deep insights about black identity I found throughout the book. I also wasn’t expecting to see as much of myself in the author (beyond the unpleasant childhood experiences I had as a result of not fitting the stereotypes of what black kids are supposed to do and be). It was a pleasant surprise to discover that Thurston and I have Washington Post internships in common (as does my friend Sandro, one of the handful of other black computer scientists I know).

I was also pleasantly surprised to discover that Thurston’s interest in technology was inspired (at least in part) by his mother, who made a living writing COBOL for the Office of the Comptroller of the Currency.  One of the other technologists that blogs whom I admire greatly, raganwald, was inspired into his career by his mother as well.

If you enjoy stories about people destroying stereotypes in general (or stereotypes of black people in particular), How to Be Black is well worth reading.

Freedom From Default Color Themes in Visual Studio 2012

I finally joined the ranks of those who’ve installed Visual Studio 2012 this week. The default Light color scheme is way too bright. The Dark color scheme is better, but the grays aren’t differentiated enough (just like the Microsoft Blend UI). Thankfully, some wonderful soul compiled this blog post, which details the changes necessary to save your eyes from the horrible default themes.

Following steps 1 and 2 will be enough, but you can go even further if you want the Visual Studio 2010 icons back in addition to the color scheme.

Tim Cook Should Ignore Ars Technica (Almost) Completely

I came across this article by Jacqui Cheng and thought I’d add my two cents on each of the suggestions.

10. License OS X.  Despite the article’s protestations that licensing doesn’t have to be the disaster it was for them in the 90s, this suggestion misses the mark because it misunderstands what kind of company Apple–a hardware company.  Licensing OS X would only send hardware revenue to a company (or companies) other than Apple.  There’s no compelling reason for them to give away that money.  Licensing the OS won’t get them additional users, or revenue, or get them into some new market they might want to enter.  This is by far the worst idea on the list.

9. Bring some manufacturing jobs back to the U.S.  It’s a nice idea in theory, but in reality, there’s no compelling reason for them to do this.  Why  should they voluntarily raise their costs and reduce their profit margins?  Apple is hardly the only company doing business with Foxconn.  Dell, H-P, Cisco, Intel and Cisco are also major customers.

8. Invest in an independent research lab.  This has been said better by others, but Apple’s success is due in large part to its narrow focus.  People and capital used for such a lab wouldn’t be available to help with the things that Apple is great at.  There are other ways that Apple can contribute to the public good without directing a ton of money toward basic research.  In my view, the federal government is the right entity to be doing that (but that’s a whole other discussion).

7. More transparency on OS X and Mac plans.  Like suggestion 10, the primary focus of this suggestion seems to be on Mac Pro users.  It’s true that the Mac Pro hasn’t gotten much attention from Apple over the past couple of years.  Perhaps the biggest reason is that it doesn’t account for much of their revenue anymore.  The one point I would extrapolate from their suggestion that I would agree with is that Apple can definitely improve in how they treat developers for their platforms.  I’ve spent my career writing desktop and web applications on and for various versions of Windows, and Microsoft seems much more “pro-developer” (more information about development tools, free copies of software, training events, etc).  I wouldn’t expect Apple to try and become just like Microsoft in this regard (nor should they), but there are definitely some lessons Apple could learn.

6. Make the Apple TV more than a hobby.  This is the first suggestion in the list that I like.  I like the Apple TV enough that I own one for each TV in my house and have started buying them as gifts for family.

5. Offer streaming, subscription music.  I’m not sure what I think of this suggestion.  I avoided subscription music services in favor of buying music for years because I preferred the idea of owning it and being able to listen to it on whatever device I wanted.  I like the experience I’ve had with Spotify so far, but I don’t know if I listen to enough music to justify the monthly cost.  I’m not sure what Apple could bring to the space that would be better.  Whether they do anything with streaming or not, what Apple really needs to do is re-think iTunes.  As Apple has offered more and more content, iTunes has become more of a sprawling mess.

4. Inject some steroids into the Mac line.  I disagree with this suggestion completely.  Apple got it right with their focus on battery life and enough speed.  In mobile phones and tablets, seemingly every manufacturer using Android as the OS focused on metrics like processor speed, camera megapixels, and features like full multi-tasking.  The result: devices that had to be recharged multiple times over the course of a day.  By contrast, the iPhone is plenty fast, but I can go a full day without having to recharge it.  Multiple days can go by before I need to recharge the iPad.  Apple has correctly avoided competing on specific measures like processor speed and how many megapixels their cameras have.  They’re competing (and winning) on the experience of using their products.

3. Diversify the iOS product line.  If the rumors are correct, Apple will be offering a smaller version of the iPad soon.  The next iPhone will probably have a larger screen as well.  But beyond those changes, I don’t think Apple should be in any hurry to diversify in the way Ars Technica suggests.  By limiting the differentiation of their iOS-based products to storage size (and cost), Apple has chosen a metric that is both meaningful and easy for the typical consumer to understand.  This makes Apple products easier to buy than the alternatives.

2. Make a larger commitment to OS security.  I agree with this suggestion as well.  Apple’s success in the market has made them big enough for virus/malware makers to spend time targeting.

1. Cater to power users again.  I see this suggestion as a variation on the them of suggestion 7.  I’m sure Apple could do something like this in a way that wouldn’t disrupt their current approach.  Whether or not it would net them enough additional customers and revenue to be worthwhile is another discussion.

Help Build a Tesla Museum

One of my favorite cartoonists, Matthew Inman, is using his unique brand of humor to help raise funds to buy the site of Nikola Tesla’s old lab.  As of this post, he’s raised nearly $970,000.  I don’t contribute to a lot of causes beyond my church and public radio, but I contributed to this project because the U.S. could use a museum about a great scientist a lot more than another mall.  If you agree, I hope you’ll donate as well.

From Web Forms to MVC

In the weeks since my last post, I’ve been thrown into the deep end of the pool learning ASP.NET MVC 3 and a number of other associated technologies for a healthcare information management application currently scheduled to deploy this July.  Having developed web applications using webforms since 2003, I’ve found it to be a pretty significant mental shift in a number of ways.

No Controls

There are none of the controls I’ve become accustomed to using over the years.  So in addition to learning the ins-and-outs of MVC 3, I’ve been learning some jQuery as well.

No ViewState

Because there’s no viewstate in MVC, any information you need in more than one view should be available either in the url’s query string, the viewmodel, or be retrievable via some mechanism in your view’s controller.  In the application I’m working on, we use Agatha.

More “Pages”

Each CRUD operation gets its own view (and its own viewmodel, depending on the circumstance).  This actively encourages separation of concerns in a way that webforms definitely does not.

A Controller is a Lot Like Code-Behind

I’ve been reading Dino Esposito’s book on MVC 3, and he suggests thinking of controllers this way fairly early in the book.  I’ve found that advice helpful in a couple of ways:

  1. This makes it quicker to understand where to put some of the code that does the key work of the application.
  2. It’s a warning that you can put far too much logic in your controllers the same way it was possible to put far too much into your code-behind.

Using Agatha has helped to keep the controllers I’ve written so far from being too heavy.

More to Come

This barely scratches the surface of my experience with MVC so far.  None of the views I’ve implemented has been been complex enough yet to benefit from the use of Knockout JS, but future assignments will almost certainly change this.  We’re also using AutoMapper to ease data transfer between our domain objects and DTOs.  In addition to using StructureMap for dependency injection, we’re using PostSharp to deal with some cross-cutting concerns.  Finally, we’re using RavenDB for persistence, so doing things the object database way instead of using SQL Server has required some fundamental changes as well.

Inserting stored procedure results into a table

Working with one of my colleagues earlier today, we found that we needed a way to store the results of a stored procedure execution in a table. He found this helpful blog post that shows exactly how.

One thing we found that the original blog post didn’t mention is that this approach works with table variables as well.  A revised example that uses a table variable is available as a gist on GitHub.