Rockford Lhotka's Blog

Home | | CSLA .NET

 Friday, 08 April 2016

thO531UYN9Earlier today I tweeted that I have an Android phone on order, because I’m frustrated with my iPhone.

Not surprisingly that resulted in people wondering why I’m frustrated.

My iPhone experience started in mid-January when I switched from Windows 10 Mobile to iOS because I was frustrated by the lack of apps on my Windows phone. A couple weeks later I wrote up my Windows Phone vs iPhone comparison. After a couple more months of using the iPhone I stand by what I wrote in that post – Windows 10 is far superior to iOS, but the lack of apps on Windows phones is crippling.

But there are some things that really bug me about the iPhone – frustrations I face literally every day. Most notably:

  • No live tiles – man do I miss live tiles!
  • Cortana on the iPhone is crippled, and Siri is an idiot
  • The “back navigation” concept on the iPhone is ridiculously inconsistent and poorly implemented
  • The concept of sharing from one app to another is robust on iOS, but is also ridiculously inconsistent and convoluted
  • So many things that are simple on Win10Mobile require a lot more taps/swipes/effort on iOS

I know that Android won’t solve or address all these issues. Maybe it won’t address any of them, I won’t know until I try it. And I say that based on my experience switching to the iPhone; everybody prioritizes different features and abilities differently, so I find it virtually impossible to get at the “reality” of each OS by talking to other people.

Here’s what I think I will find on Android:

  • No live tiles – still my number 1 issue with any other phone OS
  • Cortana on Android is reputed to be much better than iOS; almost as good as Windows; and the new Windows 10 Anniversary Edition mobile integration features work with Android as well as Windows 10 Mobile (but not iOS)
  • Android has a back button, so I am hopeful the “back navigation” experience will be more consistent than iOS (which is, frankly, a very low bar)
  • I don’t know what to expect about inter-app sharing, but I suspect Android is no better than iOS (and let’s be honest, this is also a weak spot for Windows phones)
  • I also don’t know that Android will be as optimized for common tasks as Win10, but I can’t imagine it will be more awkward than iOS

At the end of the day though, my three daily frustrations are simple:

  1. Live tiles (and the lack thereof)
  2. Cortana
  3. Consistent navigation patterns (especially the back navigation concept)

Android seems to have a good chance of addressing two of the three, so perhaps I’ll be happier day to day than I am with the iPhone?

I guess time will tell. At least I’ll be able to know first-hand how all three mobile operating systems work for me.

Friday, 08 April 2016 14:58:49 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Monday, 04 April 2016

I’ve never posted one of these “opening the box” type blog posts before, but I took a bunch of photos as I opened my new Hololens on Saturday and thought I’d share.

At Build 2016 Microsoft’s Alex Kipman announced that the device was officially shipping. Within 15-20 minutes my phone chirped to give me the tracking number of the package. Seriously, they must have had people waiting on the loading dock to ship as soon as the keynote announcement occurred! As a result, two devices were waiting for me as soon as I got home from San Francisco Smile

Well, really they are for my team at Magenic – but I got to spend the weekend with the device Winking smile

The device came nicely packed in a shipping box that contains the product box:


Not only did the shipping box include the Hololens, but also a clicker (single button remote):


It is clearly labeled as a developer device:


Inside the Hololens box itself is a nice carrying case for the device, and inside that is the device:

20160402_223837348_iOS   20160402_223955345_iOS   20160402_224030877_iOS

The center of the carrying case includes some more items:

20160402_224640751_iOS     20160402_224816821_iOS     20160402_225029392_iOS


  1. A second node pad in case the default doesn’t fit well
  2. A micro-USB cable for charging and connecting to your Windows 10 development PC
  3. An optional overhead strap if you need that to make the device fit/feel better
  4. A wall charger (AC power to USB)
  5. A microfiber cloth to clean the lenses of the device

Here are some shots of the device itself:


20160402_224049143_iOS  20160402_224156940_iOS  20160402_224224939_iOS  20160402_224251471_iOS  20160402_224531303_iOS

On twitter and other places people have asked a few common questions.

How long does the battery last?

So far my experience seems to indicate that Microsoft’s stated 2.5 hour estimate is about right. I haven’t run it dead yet, but it seems like 2.5 hours is about right.

How is the field of view (FOV)?

Microsoft actually describes this as the ‘holographic frame’, and I’d say it is about the same as if you held an iPhone 6s about 15 cm (6”) in front of your face. Which is to say that it doesn’t appear in your peripheral vision, but does dominate your forward vision area pretty well.

Is it comfortable to wear?

It takes some getting used to, that is for sure. It isn’t uncomfortable, but it does take a while to get used to the feel of the device, as well as how it impacts your vision. After wearing it a few minutes I personally am finding that it becomes like a “new normal”.

Can you wear glasses and use the device?

Yes. However, I do think that people like me who have progressive lenses in their prescription glasses are at a bit of a disadvantage, because the lower part of my vision isn’t in focus and so I’m forced to tilt my head to look at the lower parts of holograms or 2d displays. Fortunately for me I am far sighted, so I can use the device without my glasses (because the projections are always far enough away that they are beyond where I need glasses to see clearly), but I suspect this may be a problem for other people, especially those who are near-sighted and still have progressives.

It is as cool as it seems?

That’s obviously subjective, but I’m going to go with yes. Even in a simple scenario where I pin multiple 2d apps to the walls around my office, it is pretty darned neat to look around at an office covered in live displays of various sorts (images, youtube videos, web sites, etc.).

While at Build 2016 last week I was able to participate in the Hololens Academy. This experience probably best describes why I think Hololens is as cool as it seems.


At the end of that event our holographic demo resulted in an “explosion” that “blew a hole in the floor”. Even though the 3D models and textures were intentionally unrealistic, the illusion was so real that our brains literally didn’t want to have us lean over the hole too far for fear of falling in. Sure, we rationally knew this was an illusion, but some part of my brain was screaming that the hole was deep enough that I didn’t want to fall.

Yeah, really!


There’s no doubt in my mind that Hololens will make a big difference in many scenarios where we want computing power, and we want our hands free, and we want to augment reality. I’m sure this will include gaming, but also medicine, probably inventory, manufacturing, insurance estimation, home improvements, many sales scenarios, and a whole lot of other areas I’m not listing here.

If you or your users interact with the real world while carrying around a phone/tablet/PC so you can simultaneously interact with a computer system, it seems reasonably likely that Hololens has the potential to make that process smoother and easier.

Monday, 04 April 2016 22:08:54 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Friday, 18 March 2016

ht-heroMCM-logo-sThe second codeathon focused on the MobileKidsId app will be on March 26 at the Magenic office in St. Louis Park, MN.

Our first codeathon was extremely successful, with around 20 people participating. During that codeathon we laid the groundwork for the app and development effort, including:

I fully expect that on March 26 we’ll be able to implement the majority of the edit screens where a parent will enter and maintain the basic information about their children. That’ll be a major milestone because it will allow some meaningful testing of the app so we get feedback from some actual users.

We are looking for volunteers!

In terms of skill set, the app is primarily built using:

  • Apache Cordova
  • JavaScript/TypeScript
  • Angular
  • Ionic

Given the groundwork that’s been done, at this point web or mobile developers with some background in Angular and/or Ionic are extremely welcome and will become rapidly productive. Cordova and JavaScript/TypeScript skills are also valuable.

We do have some back-end functionality written in C# running in Azure, and welcome anyone willing to help with that functionality as well.

If you are interested in volunteering – either on March 26 in person, or remotely via the Internet and GitHub – please contact me: rockyl at magenic dot com.

Friday, 18 March 2016 10:03:02 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Wednesday, 24 February 2016

thFZCMG746th0KQMQKB6By now nearly everyone is aware that Microsoft is acquiring Xamarin, and from what I can see nearly everyone is ecstatic!

If you missed it, here are a couple important blog posts:

I am generally positive on this, with the same reservation I’ve had since rumors of this idea came up a couple years ago: Xamarin has been able to navigate and maintain good relationships with Apple and Google (and others) for some years now – releasing support for those platforms concurrent with Apple and Google releasing new versions of those platforms. It may be difficult for Microsoft to maintain comparable relationships with Apple and Google over time, because they aren’t a scrappy startup, they are a peer.

On the upside, what I hope comes out of this includes:

First, rolling Xamarin directly into Visual Studio, thus making it part of my existing MSDN subscription. Just think about the consequences if everyone who has an MSDN subscription (so everyone with Visual Studio 2013/2015 today) can all of a sudden build cross-platform .NET apps for Windows, iOS, Android, and OS X – at no additional cost.

One big thing holding Xamarin back in terms of widespread adoption is its cost. At $2k/developer it is prohibitive for a lot of scenarios, and that has been driving people to less productive and robust tools such as Cordova. But if we all get cross-platform .NET as part of our existing MSDN that radically changes the equation – in a way that favors the use of .NET.

Second, enabling Microsoft to provide UWP (XAML and APIs) on iOS, Android, and OS X. The “U” in UWP is “Universal” – and that’d have a lot more weight if it meant all the popular smart client development targets available today, not just the Microsoft ones. I imagine such a UWP would replace Xamarin Forms with the same XAML dialect we see on Windows 10 and Windows 10 Mobile, and obviously there’d need to be some serious work in creating WinRT API support (yes, WinRT “2.0” is really what’s underneath UWP) for these other platforms – so we won’t see this overnight – but the long-term implications are amazing.

Microsoft’s biggest single problem, especially on Windows phones, but also on Windows 10, is getting high quality apps that target these platforms. A truly universal UWP might help this problem by making .NET/UWP become the single most cost-effective way to build any smart client cross-platform app.

On the whole I am quite happy and excited – congratulations to the Microsoft and Xamarin people who put this together!

Wednesday, 24 February 2016 15:16:56 (Central Standard Time, UTC-06:00)  #    Disclaimer
 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
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