Rockford Lhotka

 Monday, August 29, 2011

One of the most impressive benefits of working for Magenic is that at the 10 year mark they offer a three month sabbatical to employees. I just finished my sabbatical, right as I crossed the 11 year mark working for Magenic.

I’ve spent the past three months not being immersed in computers, software development, industry intrigue/rumor, or speculation about the future of <insert your company/technology here>.

Instead, I was camping, fishing, waterskiing, reading (a book on how the brain works, and a bunch of fiction), and spending tons of time with my wife and kids.

I find that I am quite refreshed. When the sabbatical started, I was in a state of angst. Microsoft was making noises about HTML 5 being the future, casting doubt on the future of .NET and Silverlight, and really throwing some doubt on the viability of Microsoft as a company.

Those doubts still exist – and we’ll find out whether Microsoft is planning to undermine their entire developer base in just a couple weeks (at the BUILD conference).

But after a few months of not worrying about these things I realize they just aren’t important. Not in the long run.

For the first several years of my career I was a DEC VAX/OpenVMS expert. Programmer, system administrator, hardware geek. I knew the ins and outs of the operating system, hardware, networking – everything. It was fun to have that level of expertise and knowledge – to literally know no bounds.

But DEC went from being the number 2 computer maker in the world to a footnote in about 3 years. In 1993-4 they were big. By 1997 most people had never really heard of them. Of course in that timeframe they’d been purchased by Compaq.

And that is what has me thinking about this – because HP bought Compaq, and now HP could easily be imploding such that they’ll be nothing but a footnote a couple years from now. In fact, even Google, Microsoft, Apple, and Amazon are all just 3 years from being forgotten at any point in time.

What is interesting, is that none of my direct VAX or OpenVMS skills translated into the Windows world (because that’s where I went back then). The important thing to understand is that my computer science skills, and my business-to-computer analyst skills translated. All that deep technical knowledge of OpenVMS became useless trivia almost overnight, but the foundation of my career remained intact.

I never gained the deep understanding of Windows I had with OpenVMS. I have no idea how to configure Windows enterprise domain networks, and can barely configure my home network. But I haven’t missed that type of knowledge (much), because I’ve been able to spend years focusing on software development – and that’s a lot more fun for me.

Around the turn of the century/millennium we got .NET. If we hadn’t have gotten .NET I’d have gone to Java (and I suspect almost everyone else would have too). The VB/COM/C++/ATL platform had gone as far as it could go at the time – we could create great apps, but they couldn’t be deployed due to coupling and DLL hell.

Few of my Windows/VB1-6 skills translated to .NET. The deep technical knowledge of VB and the Win32 API became useless trivia almost overnight. But again, the computer science and analyst skills, along with a lot of good architecture skills/knowledge carried through intact.

The past decade working in .NET has been one of pure joy. I truly love .NET – even more than I loved VB in the 90’s and OpenVMS in the 80’s. But let’s face it, the future of .NET really is an unknown at this point.

If BUILD is all about HTML 5, JavaScript, and C++, then .NET is de facto dead on the client, and will probably suffer a slow but sure death on the server too.

On the other hand, if .NET has a substantial place for creating first-class Win8 apps, then we can all resume our normally scheduled lives.

I should clarify: by “.NET” I mean anything from actual .NET to “native Silverlight” like on WP7 to something-like-Silverlight-but-tailored-for-Win8. My personal vote is for something like Silverlight on WP7, but tailored for Win8.

In the end, the worst case is that Microsoft decides to treat .NET as a second-class technology on Win8, so it can only create “legacy mode” applications. That would effectively make all our deep knowledge of .NET into useless trivia overnight, because we couldn’t use any of our existing skills to build first-class Win8 apps.

I must say, that this “end of .NET” scenario would be the first platform shift where I felt like the industry was going backwards. Going from the VAX to VB was fun. Going from VB to .NET was even more fun. But somebody is going to have to pull a pretty amazing rabbit out of their hat to make HTML 5 and JavaScript look like fun compared to .NET… Whether that’s Google, Apple, Amazon, or Microsoft – I haven’t seen them come up with anything yet that has me looking forward to such a future.

But platform shifts happen. Vendors come and go, operating systems and development platforms come and go, but we always have our computer science and real-world analyst skills because they are independent of any given platform. In the long run, the survival of .NET, or even Microsoft, isn’t a given – but each of us will continue to have a career, and we’ll continue to build software that makes the world (or at least our little piece of it) a better place.

Personally, I maintain hope that BUILD will be the place where Microsoft reveals .NET “” with all sorts of cool support for Win8 application development. I’ll find out if I’m right in just two weeks Smile

Monday, August 29, 2011 3:34:49 PM (Central Standard Time, UTC-06:00)  #    Disclaimer
 Monday, August 22, 2011

VVSLRED Speaker Button_Lhotkaisual Studio Live is coming to Redmond in October.

As one of the conference chairs, and a speaker at the event, I highly recommend this show. We have a great lineup of speakers and topics that provide practical information you can use today, and content that will help you plan for the future.

When you register, use code VRSPK23 to save $400, and make note of the September 7 early bird pricing deadline.

Monday, August 22, 2011 5:18:17 PM (Central Standard Time, UTC-06:00)  #    Disclaimer
 Friday, August 5, 2011

I use Facebook, quite a lot actually. But over time I’ve changed how I use it.

I used to friend anyone who asked. So I had a lot of friends (probably close to a couple thousand). Most of whom I didn’t actually know.

Of course if you actually use FB, you post things about family, friends, politics, religion, etc. Things you might not want to share with prospective customers, vendors, or random strangers.

So a while ago I created two public pages:

  • – a page you can “Like” if you want periodic updates on my professional activities and my editorial thoughts on the software development industry
  • – a page you can “Like” if you want periodic updates on CSLA .NET, and related things like ebooks and videos

After creating those pages, I went through and removed lots of “friends” from my personal FB page. If I didn’t look at a name and immediately know who the person was, I removed that person. This means I’m still friended to a lot of pretty casual friends – more like acquaintances – but at least I’m not friends with total strangers.

This arrangement is much better. Now I can post about professional stuff on my professional pages. And I can post about non-professional stuff in a venue visible to people who (presumably) care about my favorite foods, the lives of my children, etc.

If you are one of the scores of people who’ve requested that I friend you – and you are wondering why I ignored the request – now you know Smile  Please go “Like” one or both of the professional pages listed above to keep in touch – thanks!

(as an aside, I do sometimes use twitter at – and that’s a total mix of personal and professional babble – exactly what twitter is meant for I think)

Friday, August 5, 2011 12:03:33 PM (Central Standard Time, UTC-06:00)  #    Disclaimer
 Wednesday, June 15, 2011

The servers hosting the various sites (,,,, etc.) are being physically moved this weekend.

The sites will be down for hours during June 17-19.

Please refer to for status updates during this weekend.

Thank you for your understanding!

Wednesday, June 15, 2011 4:26:59 PM (Central Standard Time, UTC-06:00)  #    Disclaimer
 Tuesday, June 7, 2011

The final draft of the Using CSLA 4: ASP.NET MVC ebook is now online, and available for purchase.

If you own the Using CSLA 4 ebook series, you already own this new ebook and can download it from

If you are buying the ebooks individually, the new book is now available for purchase from

This ebook also includes a code download, containing the latest ProjectTracker codebase. This includes the Mvc3UI project: an ASP.NET MVC 3 application built using the CSLA .NET business layer.

Books | CSLA .NET | Web
Tuesday, June 7, 2011 3:50:00 PM (Central Standard Time, UTC-06:00)  #    Disclaimer
 Wednesday, May 4, 2011

I am pleased to announce that the Using CSLA 4: Data Portal Configuration ebook is available for purchase in draft form.

Owners of the Using CSLA 4 ebook series can also download the updated ebook draft.

This ebook (141 pages in PDF format) covers the use of the CSLA 4 data portal technology, which enables flexible n-tier deployments of your applications in 1-, 2-, 3- and 4-tier physical configurations. The ebook covers the use of the data portal in .NET smart client, Silverlight, WP7, and ASP.NET web applications.

The ebook also covers the authentication techniques supported by CSLA .NET, including Windows integrated domain or Active Directory authentication, the use of the ASP.NET MembershipProvider model and custom authentication against your own security data store.

The ebook includes a complete set of sample applications demonstrating the concepts and techniques discussed in the book.

Here is a high level list of the content in this ebook:

  1. Data Portal Deployment
    1. Data portal concepts
    2. Deployment options
    3. Using the local channel
    4. Using the WCF channel
    5. 4-tier Silverlight and WP7 deployment
  2. Data portal configuration reference
  3. Serialization
    1. .NET serialization
    2. MobileFormatter
  4. Custom data portal proxies
    1. Supporting multiple application servers
    2. Dynamically switching between online and offline mode
  5. Authentication models
    1. Custom authentication
    2. ASP.NET membership authentication
    3. Windows authentication
Wednesday, May 4, 2011 9:18:41 PM (Central Standard Time, UTC-06:00)  #    Disclaimer
 Thursday, April 28, 2011

Today I spent hours trying to make one line of code work. Fortunately Miguel Castro was ultimately able to help me troubleshoot the issue thanks to his deep understanding of all things ASP.NET.

The line of code seems so simple:

var data = Roles.GetRolesForUser(“rocky”);

In this case Roles is the RoleProvider API from System.Web.Security, and the method returns a string array with the roles for the user.

This line of code works great in my aspx page. No problem at all.

But in the same web project it throws a NullReferenceException when called from a WCF service (in a svc).

No stack trace. No detail. No nothing. I Binged, and Googled, and created a whole new solution (figuring my first solution was somehow corrupted). But nothing helped.

To cut to the answer, this works in a WCF service:

var data = Roles.Provider.GetRolesForUser(“rocky”);

See the difference? Instead of relying on the static helper method on the Roles type, this code explicitly calls the method on the default provider instance.

(fwiw, I think this behavior is relatively new, because that code used to work. I just don’t remember how long ago it was that it worked – .NET 3 or 3.5 – so perhaps something broke in .NET 4?)

In any case, problem solved – thanks Miguel!!

WCF | Web
Thursday, April 28, 2011 5:46:57 PM (Central Standard Time, UTC-06:00)  #    Disclaimer
 Monday, April 25, 2011

Dunn training will be holding their next CSLA training class in Atlanta, June 21-23.

If you are gearing up to use CSLA .NET and want some solid classroom training to get started, this is the way to go!

Monday, April 25, 2011 8:01:38 PM (Central Standard Time, UTC-06:00)  #    Disclaimer