Saving Changes is Not Permitted (SQL Server 2008 R2)

We just upgraded our development VMs at work, and I got bitten by one of the more annoying default settings in SQL Server Management Studio again. I imported some data for use in some queries and needed to change one of the column types. But when I tried to save the change, I got the dreaded “Saving changes is not permitted.” error.

Fortunately, this blog post directed me to the setting I needed to change in order for SSMS to do what I wanted.

Mr. Daisey and the Apple Factory

If you haven’t already heard this episode of This American Life, it’s definitely worth your time.  I won’t look at any of my “iStuff” the same way again after hearing it.  The suicides at Foxconn made the news last year (along with a mass suicide threat earlier this year), but this piece gives a lot of insight into the conditions that could drive people to kill themselves.

I found it difficult to listen to this piece and not feel complicit in how the workers at these plants are treated.  I wish I knew how much more per product it would cost to improve working conditions (and hope I’d be a decent enough human being to pay extra).

Another Year Gone

It’s annual review time again, which means this year has gone by even more quickly than usual. Filling out my self-assessment was a good reminder of all the work I had a hand in completing.  I’m still deciding on goals for 2012, and I’m posting all of them here so I can look back on them over the course of next year and track my progress.

  1. Learn jQuery.  I got a bit of exposure to it this year through a couple of projects that I worked on, and a .NET user group presentation or two, but haven’t done the sort of deep dive that would help me improve the look-and-feel of the web applications I build and maintain.
  2. Learn a functional programming language.  I’ve been thinking about this more recently since some of our work involves the implementation of valuation models in code.  I also came across this article in the November Communications of the ACM advocating OCaml.  Since I work in a Microsoft shop, picking up something like F# might have a slightly better chance of making it into production code than OCaml or Haskell.  Part of my objective in learning a functional programming language is to help me recognize and make better use of functional techniques in a language like C#, which has added more and more support for the functional programming style of the years.
  3. Give a few technical talks/presentations.  This year, I presented on NuGet at my job, and on Reflector at RockNUG. Having to present on a tool or technology to group has always been a great incentive to do some deep learning of a subject.  It’s also a chance to exercise some speaking skills (which developers need a lot more than they might think in order to be successful) and to handle a Q & A session.  I haven’t developed any new presentations yet, but some prospective topics include: LINQPad, elmah,
  4. Take more online training. We have access to Pluralsight .NET training through work.  I watched quite a few of their videos over the course of the year.  2012 shouldn’t be any different in that respect.  I recently came across free webcasts on a variety of topics from DevelopMentor.  Since they’re downloadable as well as streamable, I’ll definitely use my commute to watch some of them.
  5. Write a compiler. It’s been awhile since I’ve cracked open “the dragon book”, so I’m probably overdue to exercise my brain in that way.  I found that suggestion (and a number of other very useful ones) here.
  6. Practice.  I’d heard of the “code kata” idea before, but hadn’t really explored it.  Dave Thomas of Pragmatic Programmers has nearly a couple dozen here.

LINQ Aggregate for Comma-Separated Lists of Values

A couple of days ago, while pairing with my colleague Alexei on bug fixes to a new feature, we came across a bit of code that attempted to take an integer array and construct a string with a comma-delimited list of the numbers from it. The existing code didn’t quite work, so we wrote a basic for-each loop and used ReSharper to see what LINQ alternative it might construct. Here’s what ReSharper came up with:

int[] numbers = new[] {1, 5, 8, 26, 35, 42};
var result = numbers.Aggregate("", (current, item) => current + item.ToString() + ",");

Before ReSharper served this up, I wasn’t familiar with the Aggregate operator. When I checked out 101 LINQ Samples for it, the vast majority of the examples used numbers.

AppleScript + RSVP Emails = Weddings Guests Address Book Group

I’ve been using Macs as my primary home computers for about seven years now, but hadn’t developed an interest in using AppleScript until very recently.  I’m getting married in about six weeks, and my fiancee and I set up an e-mail address where everyone we invited to the wedding and reception could RSVP.  In retrospect, figuring out an Apple Mail rule (or rule + AppleScript) ahead of time would probably have been a better idea, but I didn’t think of it until after I had dozens of RSVPs and no convenient way to respond to the guests en masse with additional wedding information, hotel arrangements, parking, etc.  So I thought I’d figure out just enough AppleScript to go through our RSVP e-mail box and build an address book group out of the e-mails we received.

With an assist from someone on stackoverflow.com, I came up with a script that did the job.  I’ve made it available as a gist on GitHub.

There are probably a ton of ways to improve this script, but for what I needed, this does the job.

Introducing NuGet

Today at work, I gave a presentation on NuGet.  I’ve suggested they consider it as an option to ease management of the open source dependencies of our major application, so it was natural that I present the pros and cons.

NuGet is a system for managing .NET packages.  It’s not unlike RubyGems or CPAN (for Ruby and Perl respectively), and while it has some work to do to be on par with those alternatives, they’re off to a very good start.  Today’s presentation focused on just a few the capabilities of NuGet, and I’ll recap a few from my presentation in this post.

The primary use case for NuGet is the management of open source dependencies in a .NET application.  There are a number of key open source libraries that .NET developers like me have been using in projects for years.  Upgrades were always a pain because of having to manage their dependencies manually.  Many of these tools (NHibernate, NUnit, log4net, and more) are already available as NuGet packages at the NuGet Gallery.  I used NHibernate and NUnit in my examples today.  Another tool that proved quite useful in my demo was the NuGet Package Explorer.  Some of its features include:

  • Opening and downloading packages from remote feeds
  • Opening local packages to view and change their metadata and contents
  • Creating new packages (instead of fiddling with XML manually)

In addition to getting packages from Microsoft’s official feed, it’s possible to create your own feed of NuGet packages.  Phil Haack has a post on how to do this.  My demo for work only included a local folder feed source, but I tried Haack’s instructions at home and they worked quite well.

I wrapped up my presentation with two different examples of building NuGet packages without a manually-created .nuspec file as a starting point.  The documentation provides examples of how to generate a .nuspec file from an existing DLL, and how to generate a NuGet package from a .csproj or .vbproj file.  I published the rules engine (which I found in an answer to a stackoverflow.com question), and a test assembly I created to the NuGet Gallery earlier this evening.  If you want to check them out, just search for Arpc.RulesEngine in the NuGet Gallery.  I still need to publish the rules engine source as a package and/or  push it to a symbol server.  Once the enterprise story for NuGet becomes a bit clearer, I hope I have an opportunity to present on that as well.

Practical MVVM

Last Wednesday night, I attended a talk at RockNUG on MVVM by Joel Cochran.  It’s the best explanation of the Model-View-ViewModel design pattern that I’ve seen so far.  I found his talk particularly useful because he focused on the fundamentals of the design pattern instead of a specific framework (of which there are many).

Cochran’s talk was good for second and completely unexpected reason–his use of Mercurial for his code demos.  I’ve been to my share of conferences and user groups and seen a lot of demos, but before that talk, I’d never seen a speaker eliminate the inevitable typos and otherwise speed up his presentation that way.  When there was some code he wanted to show that exhibited an aspect of his Practical MVVM Manifesto, he simply grabbed a commit from his local Mercurial repository and updated the code in place.  The next time I give a talk or do any demos, I hope I can make good use of that trick too.

Ballet

This year is the second in a row I’ve gotten to go to a Kennedy Center performance.  Last year, my girlfriend (now fiancée) and I went with another couple to see Porgy & Bess.  This past Thursday, it was the Alvin Ailey American Dance Theater.  Having never seen a ballet before (or anything called modern dance for that matter), I had no idea what to really expect.  It turned out to be quite a fun time.

Of the four works they performed (all of which were impressive), my favorite parts were the solo “The Evolution of a Secured Feminine”, and other dances within “Revelations” (the company’s signature work) that had no more than a handful of dancers.  I suppose that no one goes to the ballet for the music, but with Duke Ellington music as the backdrop for one of the pieces and gospel for some of the others, I certainly enjoyed that as much as the dancing.

.NET Reflector–No Longer Free, But Still Worth It

Those of us who registered with red-gate.com after they bought Reflector from its creator, Lutz Roeder, got an e-mail on February 2 saying the next version of Reflector would no longer be free.  It’s the second time in my recent memory that a free and/or open source package for .NET became closed.  The first one was NCover, which was probably the best option out there for determining how much of your codebase was covered by unit tests.  Even at a price with subscription of $658, it may be a more cost-effective option than paying for the Visual Studio sku that includes team testing tools.

By contrast, the entry-level price for .NET Reflector is relatively low ($35).  As a tool, I think it’s valuable enough to the every-day .NET developer to spend their own money for.

(Finally) Engaged

Back on January 14, I turned my girlfriend Ebony into my fiancée 🙂  The next day, we went cruising for a week in the eastern Caribbean with some friends (more on that in another post).

My buddy Sandro is setting up another website that will have all the particulars about the wedding.