Rockford Lhotka's Blog

Home | | CSLA .NET

 Monday, 22 February 2016

20160221_171836120_iOSWow, what a great Humanitarian Toolbox codeathon experience we had this weekend!

We had close to 20 analysts, designers, and developers working on the MobileKidsIdApp and allReady projects at the Magenic office in the Twin Cities. The allReady project was also the focus of a concurrent codeathon in Calgary. And some folks were remote for both projects as well.

So in total we had nearly 30 people working on two projects, across at least two continents and four countries. Talk about distributed agile development!

(special thanks to @mheggeseth for driving from Chicago to the Twin Cities!)

Here’s the summary of work for the MobileKidsIdApp project (being done in conjunction with Missing Children Minnesota):


And here the summary of work for the allReady project:


Here are some pictures from the Twin Cities codeathon.

The MobileKidsIdApp project generated a lot of interest from the Twin Cities news media:

Many of the people who participated in the codeathon are eager to continue the work, and we’ll most likely have another codeathon in about a month to keep up the momentum, especially around the MobikeKidsIdApp.

Humanitarian Toolbox (and these two project teams) are always looking for volunteers. You can contact HTBox via twitter and via their signup page.

ht-hero    MCM-logo      Magenic-Logo

Monday, 22 February 2016 11:29:05 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Wednesday, 17 February 2016

disqus-logo-blue-whiteI have switched this blog to use Disqus as a commenting system.

Disqus has modern commenting capabilities, good anti-spam, moderation (if necessary), and provides better performance and reliability than the old build-in dasBlog commenting system.

You’ll find the comments for each post in the post’s details page.

Wednesday, 17 February 2016 13:51:15 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Friday, 12 February 2016

This Neowin article asks people whether they use many actual Windows 10 (WinRT or UWP) apps. I knew I used quite a few, but decided to make a list of the ones I use on a regular basis (all at least once a week, but many of them several times a day).

Of course I have a lot more installed, but I don’t actually use them often, or at all. Someday I should do a purge of old stuff I installed to try and then never used again…

Here’s my list of apps that I use on a regular/consistent basis (not in any particular order):

Cortana - my indispensable digital assistant (Siri is like her dullard older sister)
Clipboard - share anything to the clipboard - indispensable utility app
PowerBI – watch my VSTS and GitHub repos, plus Magenic business dashboards
Email and Calendar (yes, they are finally quite good apps)
OneNote (the touch version is better than the Win32 version on a Surface - by far)
MyRadar - useful on every device everywhere!!
Tweetium - excellent twitter client - I love it!
News - the msn/bing news app - I use it on my iPhone too - very nice
Weather - I wish wunderground had an app, but the msn/bing one _is_ very nice
NextGen Reader - I wish _this_ was on the iPhone - what a great way to consume the web
Groove Music - as a subscriber, this is a no-brainer
Movies and TV - this is how I get my Doctor Who (legally)
iHeartRadio - better ad-hoc radio than Groove
Vevo - when I want music videos, not just music
MyTrips - TripIt client that's better than the 1st party offering
Wunderlist - how I organize my life
Words with Friends - a primary source of entertainment
HealthVault - with my health issues, this is critical
Readit - I'm not a reddit fan, but sometimes you gotta go to reddit
Reading List - Msft seems to want to kill this off, but it is a really nice app!
DropBox - access my lesser used files (mostly I use OneDrive)
Box - access my even lesser used files
Fitbit - nicer/easier than via the web
Gitty - adequate gitter client for chatting about OSS GitHub-hosted projects
Hulu Plus - obvious
Netflix - obvious
LastPass - Win8-era app, but still nicer than using the browser
NFL on Windows - every NFL fan should have this app - seriously!
NPR One - best way to listen to NPR (and in my case MPR)
Uber - order my ride at the end of a work day when travelling
Photos – I have a _lot_ of photos, all in OneDrive

Friday, 12 February 2016 11:28:12 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Tuesday, 09 February 2016

I’ve been thinking about some of the current trends and hyped terms/concepts lately. On one hand I’m convinced we’re coming out of the inflection point chaos that has consumed our industry over the past several years, and on the other hand any time things start to stabilize the hype-masters come out of the woodwork because there’s money to be made. This isn’t new – see my SOA, dollar signs and trust boundaries post from 2004…

In this post I’m going to briefly talk about microservices, containers, and devops.

What’s interesting about that 2004 post is that it is one of quite a number of posts I did on service-oriented concepts, and most of my focus at the time was on “pure service-oriented” thinking – which never took off – and which is now known by the newly-trendy term “microservices”.

In other words, this “new” microservices stuff is just the type of SOA that we should have been doing for the past decade. Oops.

As always, when an old idea comes back around under a new name, we owe it to ourselves to ask whether there’s anything different this time that might make the idea more successful than it was last time?

For example, it took us decades to get asynchronous programming to become mainstream. We tried over and over again, and it never caught on; until recently there was language/pattern support via things like the async/await keywords in C# and the concept of promises in JavaScript (soon also to be async/await). So what made async programming acessible to the general developer population was a change in languages and tooling.

Given that pure SOA (now microservices) failed to become mainstream in 2004, why do we think it will be successful in 2016? Has anything changed? Do we have new language features or tooling that will make microservice architecture, design, and implementation acessible to the general developer population?

I don’t see it. I don’t see where C# or Java have changed to accomodate service-oriented concepts in any new or novel way. Other languages might have done so – F#, Rust, and other niche languages have some neat ideas. But those ideas have yet to work their way into C# or Java, and I think it unrealistic to think that the mainstream business development world is going to shift to these other niche languages (cool though they might be).

I do think there are some interesting platform innovations going on, specifically around containers. Yet another trendy hype-laden concept – containers, Docker, etc. Here I’m less skeptical though, because I think containers are in the same vein as Azure PaaS concepts like Web Roles, Web Site, etc. Pre-defined environments in which our code can run without all the complexity of dealing with some random IT person “optimizing a configuration” the night before we go live. That is never good, and has been the cause of too many high profile failures in my experience.

The idea that we can build apps that run in a pre-defined, known environment – where the environment is deployed with the app is really compelling. To some degree Azure started making this mainstream by providing us with pre-defined and pre-deployed environments that were uniform, consistent, and known. But containers are more flexible, while retaining the key requirement of being pre-defined and consistent.

Personally I expect this container model to transform the way most of us build and think about deploying server-side apps and services over the next few years. Especially (from a Microsoft developer perspective) .NET Core matures on Linux so it runs in Docker, and as Microsoft comes out with Windows containers with comparable predictability to the Linux containers we have today.

Will containers be enough to propel success with microservice architectures all by themselves? I doubt it. I think we need another iteration of language innovation, with a focus on read-only data, message routing patterns, and transparent asynchronicity before microservices will become mainstream.

On the other hand, there is the trendy DevOps term, which I think is enabled in part by containers. The idea of devops is that we extend what mature/good development shops already do with continuous integration (gated checkins, automatic builds, automated unit test execution) further down the pipeline. So we also automate much of the UX and UAT testing (Magenic has a whole business unit focused on automated QA for example), and automate the creation of “production-ready” deployment assets. Ideally those assets are auto-deployed into a QA or staging environment as a result of each build – or at least they can be auto-deployed at the click of a button.

Now those final assets today, if they exist at all, might be in the form of an msi or a deploy-ready website pushed to a git repo. But combining devops with containers means those final assets can be a complete container, ready to be spun up on 1:n servers in QA, staging, or production.

To illustrate this let me share a story. I was recently evaluating Discourse, some very nice, modern forum software. Their only supported deployment mechanism is via Docker containers. They provide a container that you can just host in Docker. So to run a Discourse instance you just need a machine (often a VM – in my case in Azure) where you can install the Docker software. Then you tell Docker to run the Discourse container, and just like that you have a fully realized Discourse instance.

If that wasn’t cool enough (and it was cool!), a couple weeks into my evaluation Discourse came out with a new version. This was visible in my Discourse admin web page as an Update button. I clicked that button, causing my Discourse instance to tell the Docker host to download the updated container and to reload the instance using that new container. It was by far the most painless upgrade of any software I’ve ever experienced – short of upgrading apps on mobile phones or UWP apps on my Surface.

In other words, devops plus containers has the potential to bring the simplicity of mobile app deployment to server-side environments. Amazing!

Yeah, I’d say it was a lot of hype. Heck I did say it was a lot of hype. Then I experienced it first-hand, and it was quite amazing.

So in summary:

  • Microservices – mostly hype; I think another iteration of language/tool innovation is required first – give it 5+ years
  • Containers – some hype, lots of promise, just coming together now; this will be important over the next 1-3 years
  • DevOps – evolution of what good dev shops should already be doing with CI; important now and into the future
  • DevOps + Containers – if this comes together like I think it will, I am extremely excited about the future!
Tuesday, 09 February 2016 15:38:44 (Central Standard Time, UTC-06:00)  #    Disclaimer
 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
On this page....
Feed your aggregator (RSS 2.0)
October, 2018 (1)
September, 2018 (3)
August, 2018 (3)
June, 2018 (4)
May, 2018 (1)
April, 2018 (3)
March, 2018 (4)
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