Rockford Lhotka's Blog

Home | | CSLA .NET

 Thursday, 04 February 2016

These days the Internet of Things (IoT) is all the rage – a much hyped term that has a lot of people excited. And that’s cool – because it is fun to build software that has impact on the physical world.

However, “IoT” isn’t all that new. thBack when communication was via serial ports (before USB, wifi, and Bluetooth) I worked on a system that automated the loading of concrete ready-mix and asphalt trucks with material.

The dispatcher sat in an (often nice) office taking orders from customers and scheduling them - with near real-time displays of where all the trucks were (based on the driver pressing one of seven buttons that sent a radio signal to a receiver, which then fed a signal to the computer via serial port - I worked on that too).

When orders were scheduled they became available to plant operators. When a truck drove onto the scale the truck's tare weight was fed to the computer via serial port, then the plant operator would tell the computer to load the truck. The computer sent commands via serial port to the machinery surrounding the truck, resulting in tons of sand, mix, rock, and water being loaded (or whatever other materials). Then the scale would send the resulting truck weight via serial port to the computer.

The driver would then push one of those seven buttons to indicate they were on the way to the destination, and that would appear on the big ceiling-mounted displays back in the dispatching office.

Totally IoT - but predating the "I" (outside military/academic scenarios) by close to a decade Winking smile

Thursday, 04 February 2016 15:21:42 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Monday, 01 February 2016

Starting from version 4.6.300 CSLA .NET is under the MIT license.

People may continue to use older versions of CSLA .NET under the previous license.

Upgrading to version 4.6.300 or higher means users accept the terms of the MIT license.

th02FJ73GY             csla win8_full

Monday, 01 February 2016 10:22:51 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Sunday, 31 January 2016

On Sunday I tweeted a couple comparison tables with my personal observations between Windows Phone (Windows 10, Lumia 950) and iPhone (6s). I got some great feedback, primarily around some apps and features I didn’t know about when I put together the comparisons. If you saw all the twitter activity you’ll probably enjoy these updated charts that reflect everyone’s feedback.

I know, this sort of thing is often flame-bait. That’s not my intention. I’m trying to decide if I should keep my iPhone or not – and it isn’t an easy decision. Your decision criteria and weighting might be different from mine – I’m just sharing my observations in case others find them interesting or useful.

I compared the two operating systems/devices, and then the apps I use on each platform. I compare the OSes separate from the apps because in my view each OS sets the stage on which the apps run. I find that the two OSes are quite different, and some of the things I like/dislike about each OS flow through to every app. Given the base foundation of each OS/device, then I compare the apps I use, within the context I use them.

Starting with the OS comparison. I come at this as a longtime Windows Phone user (WP), who’s been running the Windows 10 mobile preview releases for a few months now. About three weeks ago I got an iPhone 6s, primarily because I’ve been complaining about the crappy apps on WP, and because iPhone users keep telling me their experience is magical – not just because of the apps, but because of the iPhone itself (which to me means the OS and device).

This isn’t in the table, but there are a lot of things I find entirely equal about both devices. They are light, fast, elegant, fun to hold, the buttons and screens feel and look good. There is no bad device here – I think this is a comparison between two wonderful pieces of engineering. But at the OS level, and a little bit at the device level, there are very real differences. Mostly what I’ve listed (and this shouldn’t be a surprise) are the things I’m really missing having switched to the iPhone (which I can’t say I find to be magical).


Now I’m happy to admit that perhaps an iPhone user switching to a Lumia 950 would have a comparable list of things they find missing every time they go to use their phone. I’m not sure what that list would look like – the only must-have feature of the iPhone I have yet found is unlocking the device with a fingerprint – that’s awesome! Otherwise things are quite equal except all the stuff in this list that I really wish existed on the iPhone.

There are a couple iOS features I really dislike. The Back button/concept in the OS seems like a poorly designed late arrival – hard to reach with my right thumb (yes, I know I can double-tap the start button, then reach not-quite-as-far to the back buttons that may or may not be visible – but you can’t tell me that’s as nice as a single tap of the fixed-location back button on WP). And I expected a lot more from Siri – I always thought Cortana was playing catchup to Siri, but in reality Siri isn’t on the same playing field as Cortana in terms of being capable, helpful, or proactive.

I was also shocked to find that only WP lets me tell the OS to use different default maps and driving apps. I suppose this is a hold-over from Microsoft being forced to be more open about these things in the 1990’s, and Apple having somehow avoided being sued because they are too closed and propietary. I wouldn’t wish Microsoft’s legal experiences on Apple – but I really wish Apple would choose to open up for the benefit of their customers.

In terms of apps: I’m a power user of some apps, a casual user of others, and so my ratings on the apps might not match yours. You might care more about certain apps or features than me, and of course I didn’t rate apps I don’t use, because I don’t use or care about them. I put this comparison together for my purposes, and I’m just sharing it with all of you.


I was actually surprised at how well WP fared when I put this table together. My gut feel was that all the WP apps sucked and all the iPhone apps were great. Turns out that nearly all the iPhone apps are great (other than suffering from some OS-created usability issues like poor and inconsistent Back button concepts). However, there are a lot more WP apps that are comparable to their iPhone counterparts than I expected.

Of course there are a bunch of apps that just aren’t on WP at all, and several that technically exist, but are incomplete compared to their iPhone equivalents. Shame on the companies who own/build those apps for not caring about their customers (or their software development craft) enough to create something decent. Seriously, some of those apps are so bad the companies really should be embarassed! And the ones that are totally missing: obviously those companies don’t really care about their customers at all.

I have about a week to decide if I want to keep my iPhone. And I’m torn, because although I like Windows 10 much more than iOS, I also really like several of the iPhone apps that have yellow or red counterparts on WP.

Apparently I can’t have my cake and eat it too…

If you want to provide constructive feedback, like cool apps I’ve overlooked or ways to overcome what I percieve as limitations of the iPhone then please respond to @rockylhotka on twitter or on my public Facebook page.

Sunday, 31 January 2016 23:18:37 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Friday, 22 January 2016

csla win8_compactI am strongly considering switching CSLA from its current open source (but one-off) license to a standard OSS license such as MS-PL.

I do not believe this will impact anyone except in a positive way.

The new license will grant at least as many rights to you as the current license. The primary difference is that the current license includes a clause restricting you from taking CSLA and repackaging it into a "CSLA competitor".

I think the odds of anyone doing that today are small, and I think the value to everyone of using a standard OSS license outweighs the minor protections my existing license provides me.

It is also important to understand that this new license will affect the version where I make the change and into the future. So there will be absolutely zero impact on any existing versions of CSLA - they will continue to be available under the existing license.

To get the new license people will need to upgrade to the new version of CSLA, and to avoid the new license people will just need to never upgrade to a newer version of CSLA.

If you have comments or feedback on this topic please visit this thread in the CSLA .NET forum:

Friday, 22 January 2016 10:10:26 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Tuesday, 19 January 2016


I am excited to announce that there will be a codeathon for the Humanitarian Toolbox project in the Twin Cities the weekend of Feb 20.

We plan to work on the allReady project and a new project for Missing Children Minnesota, and possibly also the crisischeckin app if we get enough volunteers.

Of course that’s the primary reason for this blog post: we need volunteers for the codeathon!

I attended an HTBox codeathon in Redmond, WA a couple months ago and it was an amazing experience! I got to spend a couple days with some amazing developers and technologists, building software that literally makes the world a better place. The “make the world a better place” part is hard to quantify, but I think is very important. Beyond that yet, I learned a lot about building software in an agile manner where each sprint is (more or less) about 4 hours long, and where a lot of people are issuing concurrent pull requests into GitHub that need resolving. It was an intense and exciting microcosm of project work in a mobile, web, and .NET world.

In summary, what do you gain by volunteering?

  • Help build software that literally makes the world a better place
  • Work with a bunch of really smart, motivated people on some cool technology
  • Almost certainly learn a lot about agile, GitHub, mobile, web, and modern .NET
  • Free food Smile

Sounds wonderful doesn’t it?!?

What skills do we need?

  • JavaScript/TypeScript
  • Cordova
  • ASP .NET
  • Azure
  • UX and design
  • QA and testing


Do you need to be an expert? No, absolutely not, though we do expect you to have working knowledge in one or more of these areas.

What are the logistics you ask?

  • When: weekend of Feb 20 – specific times TBD, but it is likely we’ll start Friday evening, code Saturday, and part of Sunday
  • Where: Magenic office – 1600 Utica Av S, #800, St. Louis Park, MN 55416

If you want to volunteer (or have questions) please contact

Tuesday, 19 January 2016 16:32:39 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Wednesday, 13 January 2016

Some time ago I switched my EA Origin account to use two factor authentication (TFA) using an authenticator app. The authenticator app concept is a great one, much nicer than relying on SMS messages.

The thing is, if you then lose/reset/replace your phone you’ll find that you need to reconfigure the authenticator app for each of your online accounts, such as EA Origin. To do that you need the QR code to rescan (or some code you type in) to pair your phone with EA.

This is a bit of a trap, because to get the QR code you need to turn off TFA and then turn it back on. And you can’t turn off TFA without a pre-existing authenticator app to give you a login code. If you are like me, you don’t have a functioning authenticator app – that’s why you are trying to pair a new one.

What I learned today is that when you first pair your device so the authenticator app works, you also get a set of recovery codes. I’d seen these, but didn’t understand the purpose (it isn’t documented).


It turns out that these are a set of one-time authenticator codes. Basically they are like codes that you get from the authenticator app, but they don’t expire until used – and each one can be used exactly one time.

If you keep these codes somewhere safe and accessible, you can use one to log into your account, then use another to turn off TFA. Then you can turn TFA back on, which will give you the QR code needed to pair your new phone’s authenticator app with EA Origin.

Now that I understand how these recovery codes work, I also know how to recover my other accounts (such as GitHub, Facebook, etc.) if the need were to arise.

Wednesday, 13 January 2016 23:37:51 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Thursday, 10 December 2015

Starting with version 4.6.300 CSLA .NET supports ASP.NET 5 (.NET Core) and the CSLA-Core NuGet package includes a portable class library that targets .NET 4.6 and dnxcore50.

There does appear to be an issue with adding the NuGet package to an ASP.NET Class Library project. I assume this is due to the pre-release nature of the ASP.NET 5 tooling.

What happens is easy to replicate. Create an ASP.NET 5 web site project, then add a portable class library using the ASP.NET 5 template:


Then add a NuGet reference to CSLA .NET 4.6.300 (currently also in pre-release):


Then try to use features of CSLA – for example, altering the Class1 code like this:

using System;
using Csla;

namespace ClassLibrary1
    public class Class1 : BusinessBase<Class1>
         public Class1()
         { }

The project will not compile at this point even though one would expect that CSLA really has been referenced:


After some experimenting I found what appears to be a solution. The project.json file must be manually edited so CSLA is listed as a dependency not only in the “net451” framework, but also in the “dotnet5.4” framework:

   "version": "1.0.0-*",
   "description": "ClassLibrary1 Class Library",
   "authors": [ "Rockford" ],
   "tags": [ "" ],
   "projectUrl": "",
   "licenseUrl": "",
   "frameworks": {
     "net451": {
       "dependencies": {
         "CSLA-Core": "4.6.300-Beta001"
     "dotnet5.4": {
       "dependencies": { 
         "Microsoft.CSharp": "4.0.1-beta-23516",
         "System.Collections": "4.0.11-beta-23516",
         "System.Linq": "4.0.1-beta-23516",
         "System.Runtime": "4.0.21-beta-23516",
         "System.Threading": "4.0.11-beta-23516"
     “dependencies” : {
         “CSLA-Core”: “4.6.300-Beta001”

The solution/workaround is to move the “CSLA-Core”: “4.6.300-Beta001” dependency from the “net451” framework to a global dependencies section.

With this change the project will now build.

Thursday, 10 December 2015 11:31:33 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Wednesday, 09 December 2015


It is time to register for VS Live or Modern Apps Live (register for either and get access to both!) in Las Vegas, March 7-11, 2016.

(I had to really concentrate to type 2016 – a whole new year already!!)

This is going to be a great set of conferences, co-located at Bally’s right as exciting new things like .NET Core and ASP.NET 5 are coming available.

Register with this link and save $500 off the standard price.

Visual Studio Live! includes content across the spectrum of mobile, Windows, web, and services development, with a healthy dose of ALM, TFS, and other cool tools.

Modern Apps Live! provides a unique conference experience, walking through every aspect of modern app development for iOS, Android, single-page web apps, and Windows, with an Azure-based backend, discussions about managing distributed teams, continuous integration, building code for testability, and wrapping up with great content around data analytics. If you want the end-to-end story on how to successfully build a modern cross-platform app this is the conference for you.

I look forward to seeing you in Las Vegas!

Wednesday, 09 December 2015 14:02:47 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Wednesday, 02 December 2015

I think this article about Apple's attempt to transform the iPad into a laptop - and contrasting it to Microsoft's Surface-based attempt to transform a laptop into a tablet - is quite good.

Personally I'm a strong advocate for the hybrid device scenario, having spent the last few years entirely in Surface-land. Starting with the Surface Pro 3 (SP3) I have been quite happy with that choice. The SP1 and SP2 widescreen concept was interesting, but impractical for doing real work like editing documents or running Visual Studio. The SP3 and now SP4 screen sizes are very practical (especially the Surface Pro 4 - what a beautiful screen!!).

The idea that Apple would create some sort of hybrid was a foregone conclusion from my perspective - once I'd become hooked on using a Surface instead of an old-fashioned laptop.

When I'm sitting in a cramped airplane seat, or relaxing on the couch in front of the TV I want a tablet - one with all my stuff on it.

And when I'm trying to actually compose an email, write a document, or do some coding, I want a laptop - one with all my stuff on it.

Interestingly enough, "my stuff" is the same at all times. I want access to all my stuff whenever and wherever I am.

I use OneDrive to store all my documents, music, photos, etc. All my files are on my desktop, Surface, and in the cloud – so they are available anywhere and everywhere. And that would be true on a Mac and iPad too (though probably not offline on the iPad, so not accessible on an airplane?).

Another big reason my stuff is always available is because of the way Windows 10 roams everything - all my app/browser/desktop settings sync across my devices. And that could maybe be done between a Mac and iPad I would guess - with some effort to address the mismatch between Mac and iPad apps that do similar things, but aren’t the same apps.

But on Windows 10 I am using the same apps on my desktop and Surface (and often my phone). So there's no mismatch, they are literally the same.

Maybe not everyone values this consistency like I do - but I want my same browser with my same favorites/shortcuts/etc. on every device I use. And I want my news reader (NextGen Reader) and Reddit  (Readit) and weather and twitter (Tweetium) and Facebook apps to know what I've done and what I like without having to tell every device the same stuff over and over.

So yeah, I'm a big fan of the hybrid model - and I hope Apple is reasonably successful at it, if for no other reason that competition will drive Microsoft to keep making Win10 and Surface better and better so I love it more and more :)

Wednesday, 02 December 2015 13:16:16 (Central Standard Time, UTC-06:00)  #    Disclaimer

I have had my new Surface Pro 4 for a few days now (I waited to get the i7 model) and I’m liking it quite a lot. I really liked my SP3, and the SP4 is better yet.

My one primary disappointment is with the dock. I got the new Surface dock and tried to connect it to my two external monitors using brand new mini-DisplayPort-to-DVI cables but the displays were just all messed up – one or the other would come on but not both, and everything was very unstable.

Searching around the Internet I found this:

In summary, the Surface dock can’t power DVI or HDMI outputs directly. I assume it can power VGA directly, but I don’t know – maybe not?

This makes the dock pretty useless for many (most?) of us who don’t have monitors that have DisplayPort ports. I’ve never owned such a monitor and I don’t think I’ve ever actually seen one in a store or anything. So I assume that most of us don’t have such a thing.

WP_20151201_16_05_46_ProIn my case I was “fortunate” in that I’d already bought a powered DisplayPort hub to get the dual monitor scenario working from my Surface 3 dock, so that’s what I’m using to get my monitors to work. The DP hub I’m using is from StarTech and seems to work quite nicely.

The fact that it works remains quite disappointing though. The Surface dock looks like it would be useful, but in practice I think for most of us it doesn’t do what any reasonable person would expect – which is to say that the two DP ports are not what they seem.

So if you are considering buying the Surface dock I’d suggest that you also budget an extra US$100 or so to buy a DP hub and appropriate DP-to-DVI (or HDMI) cables.

Wednesday, 02 December 2015 10:49:22 (Central Standard Time, UTC-06:00)  #    Disclaimer
On this page....
Feed your aggregator (RSS 2.0)
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 2017, Marimer LLC

Send mail to the author(s) E-mail

Sign In