Rockford Lhotka's Blog

Home | | CSLA .NET

 Thursday, 22 December 2016

Early in my career, actually my first "real" job, I worked for a guy named Mark. Mark was an amazingly smart and driven programmer and I learned a lot from him.

But he and I would butt heads constantly over coding standards and coding style.

Our platform was the DEC VAX and our code was written using VAX Basic. For this story to make sense, you must realize that VAX Basic wasn't really BASIC the way you typically think about it. The DEC compiler team had started with Basic syntax and then merged in all the goodness of FORTRAN and Modula II and Pascal. For example, even back in the late 1980's the language had structured error/exception handling.

It is also important to understand that in the late 1980's there weren't code editors like Visual Studio. We used something called TPU (Text Processing Utility) that was more powerful than Notepad by far, but nothing compared to modern editors of today. It competed with Emacs and vi. As a result, it was up to the developer to style their code, not the editing tool.

Mark had defined a strict set of coding standards and a style guide, and he'd dial back into work from home at night to review our code (yes, via at 1200 baud modem at the time). It was not uncommon to come into work the next day and have a meeting in Mark's office where he'd go through the styling mistakes in my code so I could go fix them.

He defined things like every line would start with a tab, then 2 spaces. Or two tabs, then 2 spaces. Why the 2 spaces? I still have no idea, but that was the standard. He had a list of language keywords that were off limits. Roughly half the keywords were forbidden in fact. He defined where the Then would go after an If; on the next line down, indented.

I chafed at all of this. The 2 space thing was particularly stupid in my view, as was making all those fun keywords off limits. I can't say I cared about the Then statement one way or the other, except that it forced me to type yet another line with the stupid 2 space indent.

But what are you going to do? Mark was the boss, and this was my first job out of university in the late 1980's Reagan-era recession. In a job environment where thousands of experienced computer programmers were being laid off in Minnesota I wasn't going to risk my job.

Which isn't to say that I didn't argue - anyone who knows me knows that I can't keep my opinions to myself :)

The thing is, after a period of time it seems like any standard becomes second nature. I just internalized Mark's rules and coded happily away. In fact, what I found is that my "artistic expression" wasn't really crippled by the guidelines, I just had to learn how to be artistic within them.

Knowing a few artists, I'm now aware that putting boundaries around what you do is key to creating art. Artists pretty much always limit themselves (often artificially) so they have a context in which to work. Not that I think code is 100% art, but I do think that there's art in good code.

Several months after starting to work with Mark, and absorbing this rigorous standards-based approach to coding, our company was purchased by another company. Mark, myself, and a couple other employees survived this process. And we all moved from Minnesota to Birmingham, AL; which is another story entirely. Let me just say here that regional culture differences within the US are easily comparable to the difference between the US and many European countries.

The company that bought my employer was also a software company, with a dev team of comparable size to what we'd had. But they had no coding standard or guideline. They did use the DEC VAX, and they did use VAX Basic. But each developer did whatever they wanted without regard for anyone else.

One of the developers cut his teeth on FORTRAN. It turns out that VAX Basic could be made to look exactly like FORTRAN. Remember that DEC merged most of the good features of FORTRAN into VAX Basic after all.

Another developer clearly learned to program on an Apple ][ and his VAX Basic code had line numbers. I kid you not!! Just like Applesoft!

My point is that everyone in that dev shop had radically different coding styles and approaches. Some very ancient and creaky (even by 1989 standards), and some quite modern. It turns out they'd done this all intentionally. Partly because none of them wanted to learn anything particularly new. And mostly because it provided a sort of job security, because it was essentially impossible for any of them to maintain anyone else's code.

Contrast this to Mark's world, where it was impossible to tell who'd written any bit of code, because all code used the same style and structure.

This was the point where I had my first professional developer epiphany. Yes, it is truly painful to adapt to the idea of living within strict coding and style guidelines. But the alternative is so much worse!

Ever since that experience I insist on consistency of coding standards and styles within each project (or enterprise) where I work. And even if I think some choices (like 2 spaces after each tab) are really, really, really stupid, I'll use and vehemently support that choice.

Which, again, isn't to say that I won't argue a little up front about anything that seems really dumb, but once the decision is made, it is made.

I learned a lot from Mark. Some good, some bad. But this particular lesson is one that is central to my view of good software development.

Thursday, 22 December 2016 12:30:01 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Tuesday, 13 December 2016

Every now and then politics crosses with software development, which makes it relevant to my blog, at least in my mind. And since it is my blog... :)

I was recently made aware of a public figure, Franklin Graham, a confidant of our next President, who directly implied that there's no pride in computer programming. Apparently only people involved in mind-numbing factory work or back-breaking physical labor can take pride in what they do or something?

Obviously this shows just how out of touch Franklin Graham is with the modern world. And that's fine - people who choose to live in the past need someone to keep them company. Personally, I have no desire to work a team of horses on a subsistence farm like my grandfather, but apparently people in Frank's world have that as a life goal.

And that's fine. I think there's room in our country for people who don't want to live in the modern world; as long as they don't try to impose their Luddite views on the rest of us. Take a cue from the Amish, people!

To think that software developers don't have pride in our work is absurd.

Many years ago I read The Hacker Ethic, and still highly recommend it. The book covers the basic drives of subsistence life, then the Protestant work ethic (drawn from the Lutheran and Methodist Christian sects), and then builds on it by discussing the kind of work ethic with which I can identify: what the author dubs the hacker ethic.

Another excellent book is Drive. Different people are motivated by different things, but many are driven, at least in part, by pride in their work.

In any job or profession there are people who take more pride in having a job than in actually working. This is true of some people who do back-breaking work, and some people who develop software. And they are generally the sort of people I try to avoid in life.

And there are people who take more pride in doing excellent work than in the formality of having a job. The software developers I know and have been surrounded with throughout my career have almost always been the sort of people who strive to do excellent work. And who take extreme pride in making other people's lives better through software.

Beyond that, I know a lot of such people (family, friends, and neighbors) who aren't in the computer field but still unknowingly live by the hacker ethic. Whether they work with their hands, their mind, or both, these people take great pride in their work.

Sorry Frank, but your worldview is hopelessly out of date.

Tuesday, 13 December 2016 18:03:02 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Friday, 02 December 2016

I consider myself a strong ally for diversity in technology in general, and women in technology more specifically. I work to improve matters through my role as CTO at Magenic, as a conference chair for VS Live and Modern Apps Live, through my social media channels, and in any other way I can.

Today this tweet came through my feed from @CallbackWomen:

The idea of a conference giving out Playboy magazines in their welcome pack is surreal, and clearly violates the spirit (and I think the letter) of their own code of conduct.

I do want to pick a nit with the tweet regarding the lack of diversity in the speaker lineup though. I agree there's a problem with a lack of diversity in their lineup - and the lineups of nearly every tech conference out there.

But as a conference chair I can say that finding women to speak at tech conferences is really hard. This is something I've been trying to overcome for years now, and have solicited help and input from female colleagues, other allies like myself (such as John Scalzi, friends, random people on twitter (like the @CallbackWomen community and others), and speakers at conferences specifically about diversity in tech (such as AlterConf where it is easy to find women speakers).

If I look at VS Live and Modern Apps Live in particular, we've done things like create and actively enforce an anti-harassment policy, and many attempts to reach out to various online communities focused on women speakers in tech. This is ongoing over the past several years, so not a recent thing or a one-time thing.

The result, over all this time, has been new submission from women to our CFP process. And we had her speak and she was excellent.

What I'd like from this post

What I'd like to see from this post is perhaps a broader conversation and input on ways to bring in more submissions from women speakers to tech conference call for presentations/speakers/papers. As conference chairs we can't increase diversity in our speaker lineups if no women even submit to speak.

If you are a woman in technology, do you speak? If so, how do we attract your attention?

If are a woman in tech and you don't speak (but would like to), how can we encourage you to speak? Or help you develop speaking skills? Are there gender-specific blockers that are preventing you from becoming part of the speaker community?

And there is a speaker community by the way. Well, I'm sure there are many different such communities. In the Microsoft app dev tech space there's a large and vibrant speaker community. And this community has some diversity, including some extremely accomplished women. But the number is so small that I believe I know all of them, and count most as friends. I don't know all the men in the community, because there are too many. That highlights the issue in a sense.

So again, what I'd love to see is a conversation about what it is that prevents accomplished women technologists who are public speakers from submitting to conferences like VS Live? And what prevents women technologists who want to become speakers from pursuing that avenue?

Friday, 02 December 2016 12:15:36 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Wednesday, 30 November 2016

This is a test using Markdown Monster to create a blog post.

If it works it will be awesome because I get to compose in markdown, and post directly to dasBlog.

public void foo()
    // nice code entry like GitHub

And code inline like you'd expect.

Wednesday, 30 November 2016 10:21:51 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Tuesday, 01 November 2016

This (somewhat morbid) question comes up (in various forms) from time to time. And, as you might imagine given my health issues over the past few years, I put very real thought into this whole concept. Three different times it was quite possible that I wouldn’t make it.

The concern though, is the same with Angular, Java, Spring, or any other open source framework or tool. It is also the same with any commercial tool – anyone who’s been in this business for a while has surely dealt with commercial vendors going under, leaving them stranded with a component or technology that’s no longer supported.

In the commercial space the biggest offset to this is code escrow. In the OSS space the code is open, so it is “automatically” escrowed.

In the commercial space there’s really nothing beyond escrow either. You can’t bind a company to provide you support once they are gone. But in the OSS world things rest on community, so at least there’s some hope past escrow.

CSLA .NET has a broad community of contributors. There’s a site out there that collects metadata around OSS projects, including CSLA:

There’s a core leadership team for CSLA, including myself, Jonny Bekkum, Jason Bock, and Kevin Ford. So some Magenic, some non-Magenic. The framework is copyrighted (owned) by an independent LLC (that I own, but still, it is an entity that will outlive me).

Any platform, framework, or tool you use to build software deserves no more or less scrutiny than CSLA. People might dismiss ASP.NET because (a) it is OSS, or (b) because Microsoft owns the copyright. But Microsoft has abandoned technologies before (some quite recently: LightSwitch? Silverlight?). Were Microsoft to abandon ASP.NET, or perhaps Microsoft goes out of business (like DEC did in the 1990’s: they were the #2 computer maker one year, basically non-existent three years later), what would happen to ASP.NET? Well, it is OSS, so the community would hopefully pick it up.

Same thing with CSLA .NET.

Tuesday, 01 November 2016 15:14:12 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Wednesday, 24 August 2016

DCSPK17ANSPK17Visual Studio Live is coming up fast in both Anaheim and Washington DC.

I’ll be speaking at both events, and I hope to see you at one of them. The great thing is that you get to choose west or east coast, whatever works best for you. Or maybe you get to choose Disney or the Smithsonian Museum, depends on how you choose to think about it Smile

Click on the appropriate image to go to the registration page for each event – these links provide a $400 discount off the regular conference price.

Wednesday, 24 August 2016 13:17:02 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Monday, 22 August 2016

Working with .NET Core isn’t for developers focused on productivity or who want modern tools.

Why do I say this?

Because Visual Studio tooling hasn’t been released (or well-updated) to deal with .NET Core or ASP.NET Core, so you have to deal with a lot of bugs, missing features, poor templates, etc.

Generally you are probably better off relying on circa-1989 “modern tooling” like command lines and text editors (though VS Code is pretty good) at the moment.

Microsoft is working on next-gen tooling, so this isn’t a permanent issue, but it is somewhat frustrating to go back in time 25+ years when I’m used to this century’s tooling.

My biggest current frustration is that (working on CSLA .NET) I have a master solution that includes projects for all the platforms CSLA supports:

  • .NET Core (netstandard1.5)
  • Full .NET (4, 4.5, 4.6)
  • UWP
  • Xamarin (Forms, iOS, Android)
  • WinRT (Windows 8.1 and Windows Phone 8.1)

And all my actual code is in shared projects so I only have to maintain the code once, even though it builds for 11 different platform targets in total.

Normally (when you don’t have a .NET Core project in your solution) you can switch your code view between the various platforms in your solution. This is the drop-down in the top-left corner of your code window. Unfortunately when you have a .NET Core project (netstandard project) in your solution this drop-down stops working.

As a result I’m finding that I need to have 3 solutions:

  • A master solution to build everything, including netstandard
  • A non-netstandard solution to work on everything except .NET Core
  • A netstandard solution to work on the .NET Core and ASP.NET Core projects

This way, in the netstandard solution I can actually see what’s going on with the correct code and Intellisense for .NET Core:


And in my non-netstandard solution I can switch between the rest of the platforms to get the correct experience:


Three solutions where I should have (and used to have) just the one master solution.

I can’t wait until the tooling catches up to the platform so things get simpler again!

Monday, 22 August 2016 16:22:03 (Central Standard Time, UTC-06:00)  #    Disclaimer

MCM-logo-s.jpgOver the past few months a group of us have been working on a Mobile Kids Id Kit app for Humanitarian Toolbox and Missing Children Minnesota.

We’re nearing the point of an MVP release and think we’ll get there with one good day of work – that day is this Saturday, August 27.

The location will be in Eden Prairie, MN. Please consider joining us if you are in the area and have skills in any of these areas:

  • Xamarin mobile development
  • Xamarin Forms XAML themes or styles
  • Hockeyapp
  • Microsoft Azure web site development (ASP.NET)

This app will support iOS, Android, and Windows. It will provide parents with a valuable tool to help them in the unfortunate possibility that their child goes missing.

How often do you have a chance to apply your software development or design skills to directly and literally make the world a better place? This is your chance!

If you are already part of the development team, full details are on our Slack channel. If you are not yet part of the team, we welcome your help! Please provide me with your email address in a comment on this post or via one of the my social media channels at and I’ll get you looped into the team.

Oh yeah, and because it is summer in Minnesota, this codeathon will also be a BBQ with typical summer grillables provided!

Or, if you have the skills and time, but aren't in the Twin Cities area you can still participate in the codeathon, but you'll have to provide your own summer BBQ while you work from wherever you are :)

In other words, we have all sorts of remote collaboration technologies, the code is in GitHub - so anyone in the world should feel free to get involved!

Monday, 22 August 2016 11:13:27 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Friday, 12 August 2016

I’ve heard a few people complaining recently because Microsoft isn’t enabling Windows 10 upgrades for all the legacy Windows 8 and 8.1 phones that exist out there in the world.

I understand that complaint and the frustration. Everyone wants the newest stuff!

The thing is that we have examples of different strategies around vendors upgrading legacy devices to their latest OS, and there appears to be no perfect answer.

For example, Apple is quite aggressive about upgrading people to the latest OS, often resulting in complaints as people agree to the upgrade and then find that their phone has become almost unusably slow.

Google/Android is less aggressive overall (I understand this is due to carrier constraints more than Google itself). But all my Android devices have been carrier unlocked, and so I’ve been able to upgrade them as each new version of Android comes out. My tablet is now entirely useless because it is so amazingly slow. Most apps just crash, and those that run are glacial. And this device is just 3-4 years old, so what gives?

Microsoft is just being (imo) upfront that if you did upgrade some devices to Windows 10 that your experience would be terrible. Just like the experiences of many people on iOS and Android. So they aren’t supporting an upgrade that would make us all cry.

I don’t know the right answer here. Is the Apple/Google approach correct? Encourage and/or let people upgrade to the point that their device is a brick? Or is Microsoft right by not allowing people to upgrade their device to where it is useless?

At the end of the day the result is the same: we all end up having to buy a newer device to run the OS we want to use.

Friday, 12 August 2016 13:25:49 (Central Standard Time, UTC-06:00)  #    Disclaimer
On this page....
Feed your aggregator (RSS 2.0)
December, 2017 (1)
November, 2017 (2)
October, 2017 (1)
September, 2017 (3)
August, 2017 (1)
July, 2017 (1)
June, 2017 (1)
May, 2017 (1)
April, 2017 (2)
March, 2017 (1)
February, 2017 (2)
January, 2017 (2)
December, 2016 (5)
November, 2016 (2)
August, 2016 (4)
July, 2016 (2)
June, 2016 (4)
May, 2016 (3)
April, 2016 (4)
March, 2016 (1)
February, 2016 (7)
January, 2016 (4)
December, 2015 (4)
November, 2015 (2)
October, 2015 (2)
September, 2015 (3)
August, 2015 (3)
July, 2015 (2)
June, 2015 (2)
May, 2015 (1)
February, 2015 (1)
January, 2015 (1)
October, 2014 (1)
August, 2014 (2)
July, 2014 (3)
June, 2014 (4)
May, 2014 (2)
April, 2014 (6)
March, 2014 (4)
February, 2014 (4)
January, 2014 (2)
December, 2013 (3)
October, 2013 (3)
August, 2013 (5)
July, 2013 (2)
May, 2013 (3)
April, 2013 (2)
March, 2013 (3)
February, 2013 (7)
January, 2013 (4)
December, 2012 (3)
November, 2012 (3)
October, 2012 (7)
September, 2012 (1)
August, 2012 (4)
July, 2012 (3)
June, 2012 (5)
May, 2012 (4)
April, 2012 (6)
March, 2012 (10)
February, 2012 (2)
January, 2012 (2)
December, 2011 (4)
November, 2011 (6)
October, 2011 (14)
September, 2011 (5)
August, 2011 (3)
June, 2011 (2)
May, 2011 (1)
April, 2011 (3)
March, 2011 (6)
February, 2011 (3)
January, 2011 (6)
December, 2010 (3)
November, 2010 (8)
October, 2010 (6)
September, 2010 (6)
August, 2010 (7)
July, 2010 (8)
June, 2010 (6)
May, 2010 (8)
April, 2010 (13)
March, 2010 (7)
February, 2010 (5)
January, 2010 (9)
December, 2009 (6)
November, 2009 (8)
October, 2009 (11)
September, 2009 (5)
August, 2009 (5)
July, 2009 (10)
June, 2009 (5)
May, 2009 (7)
April, 2009 (7)
March, 2009 (11)
February, 2009 (6)
January, 2009 (9)
December, 2008 (5)
November, 2008 (4)
October, 2008 (7)
September, 2008 (8)
August, 2008 (11)
July, 2008 (11)
June, 2008 (10)
May, 2008 (6)
April, 2008 (8)
March, 2008 (9)
February, 2008 (6)
January, 2008 (6)
December, 2007 (6)
November, 2007 (9)
October, 2007 (7)
September, 2007 (5)
August, 2007 (8)
July, 2007 (6)
June, 2007 (8)
May, 2007 (7)
April, 2007 (9)
March, 2007 (8)
February, 2007 (5)
January, 2007 (9)
December, 2006 (4)
November, 2006 (3)
October, 2006 (4)
September, 2006 (9)
August, 2006 (4)
July, 2006 (9)
June, 2006 (4)
May, 2006 (10)
April, 2006 (4)
March, 2006 (11)
February, 2006 (3)
January, 2006 (13)
December, 2005 (6)
November, 2005 (7)
October, 2005 (4)
September, 2005 (9)
August, 2005 (6)
July, 2005 (7)
June, 2005 (5)
May, 2005 (4)
April, 2005 (7)
March, 2005 (16)
February, 2005 (17)
January, 2005 (17)
December, 2004 (13)
November, 2004 (7)
October, 2004 (14)
September, 2004 (11)
August, 2004 (7)
July, 2004 (3)
June, 2004 (6)
May, 2004 (3)
April, 2004 (2)
March, 2004 (1)
February, 2004 (5)

Powered by: newtelligence dasBlog 2.0.7226.0

The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2018, Marimer LLC

Send mail to the author(s) E-mail

Sign In