Tech in the 603, The Granite State Hacker

UWP App Samples

I realized as I was presenting a guided tour of UWP App Samples that I’d come full circle on a set of presentations around my experience building Windows 10 UWP apps.   The overall process was kicked off in three decisions. 

1)  pick a framework (we settled on Prism + Unity),   

2) pick a control library (we went with the UWP Community Toolkit (which is since released 2.0 by the way, updated for 1710, Fall Creators Update… there may be another presentation in the works here)).

Finally,
3) we consulted the UWP App Samples.   ( https://github.com/Microsoft/Windows-universal-samples )

When it comes down to it, our goal was very ambitious, and we couldn’t have accomplished what we did without these three key pieces.   I’ve presented each of them over the past several months at the Granite State Windows Platform App Devs meetup. ( https://www.meetup.com/Granite-State-NH-WPDev/ )

At the time of the presentation, the categories in the Open Sourced UWP App Samples project were these:

  • App Settings,
  • Audio/Video/Camera,
  • Communications,
  • Contacts and Calendar,
  • Controls/Layout/Text,
  • Custom User Interactions,
  • Data,
  • Deep links and app-to-app Communication,
  • Devices and Sensors,
  • Files/Folders/Libraries,
  • Gaming, Globalization and Localization,
  • Graphics and Animation,
  • Holographic,
  • Identity/Security/Encryption,
  • Launching/background tasks,
  • Maps/Location, Navigation,
  • Networking/Web Services,
  • Platform Architecture,
  • Speech/Cortana,
  • Threading,
  • Tiles/Toasts/Notifications

If your app will do anything remotely associated with any of the above functionality, you need to consult the related sample projects before beginning.  They aren’t production-ready samples, but they are good samples, nonetheless.

These slides don’t do any justice at all to the UWP Sample Apps project, it was really just something to throw on the big screen while folks gathered.

[office src=”https://onedrive.live.com/embed?cid=90A564D76FC99F8F&resid=90A564D76FC99F8F%211281880&authkey=&em=2&wdAr=1.7777777777777776″]

Tech in the 603, The Granite State Hacker

UWP Community Toolkit in the Wild

On August 17th, I reviewed use of the UWP Community Toolkit in practical application, used in several privately published apps. These apps were commissioned by Hewlett Packard to illustrate commercial uses of the HP Elite X3 Windows 10 Mobile phone. We checked out the code behind these apps with permission from HP.

The apps themselves focus on three core verticals:
1) Public Safety – apps to support officers in the field
2) Field Service – supporting a cable field service technician
3) Home Health – supporting a visiting care provider.

All show off Windows 10 UWP as a versatile platform, capable of easily adapting to phone, tablet, or desktop, as well as the HP Elite X3’s additional ability to support various hardware expansion jackets and docking options.

The UWP Community Toolkit is an open source project designed to make Windows 10 the easiest platform to build great apps for. More information can be found here:

http://www.uwpcommunitytoolkit.com/

The official UWP CTK demo app is here:
http://aka.ms/uwptoolkitapp

The presentation itself was all demos, digging in on the CTK toolkit sample app, looking at it in a locally cloned git repo, and showing how we used the same controls in the X3 demo apps.

The UWP CTK is a great set of tools to jumpstart Windows 10 Dev with.  

Our next meeting on September 21st, (2017) we’ll take a look at another great “Hit the ground running” UWP resource, the App Samples.

Tech in the 603, The Granite State Hacker

Prism and Unity, an MVVM and DI Knockout Combo

I recently had the opportunity to do UWP work for Hewlett Packard.  It was a really cool experience, building UWP apps for the HP Elite X3 Windows 10 based phone.

I’d also just rolled off a project prior-to that used Unity under the hood for Dependency Injection, so Unity felt like a natural extension. Prism as an MVVM presentation framework on UWP also felt like a natural extension of the MVVM framework we’d build on WPF in that same previous project.

Here’s the slides from the June 22nd, 2017 presentation to the WPDevNH group in Salem, NH. [office src=”https://onedrive.live.com/embed?cid=90A564D76FC99F8F&resid=90A564D76FC99F8F%211278476&authkey=AI5mw9sxEY9MfHI&em=2″ width=”402″ height=”327″]

Tech in the 603, The Granite State Hacker

Microsoft Build 2017 Recap

[Edit:  I wrote this originally back in May, 2017, but realized I never published it.  Anyway, very belated, here’s a rundown on Build 2017 with some light analysis at the end.]

You know an event is “Epic” when, at its conclusion, leaves you feeling like the climax was forever in the making and then suddenly complete…  done…  over.   Even post-event celebrations feel like the long drawn out ending from the Lord of the Rings trilogy.

Build 2017 is an interesting twist on that for me.   I spent most of the beginning of 2017 looking forward to it.  Then it finally came, and the world was in its midst. 

The twist is that Build, for me, is not the end, but a refreshed beginning.  It’s the kickoff of new ideas, new development stories, and new opportunities, rather than an end.   Build came and went, and left me feeling like I’m alive at the best time in the history of the world to be a developer, and especially a full Microsoft stack developer.

I’ve already presented my recap a couple of times.   Here’s the slides.

[office src=”https://onedrive.live.com/embed?cid=90A564D76FC99F8F&resid=90A564D76FC99F8F%211274221&authkey=&em=2&wdAr=1.7777777777777776″]

The slides are not as well organized however, so I’ll run through a recap with a bit more organization.

Platform:   Azure

  • Azure IoT Edge
I liken Asure IoT Edge to the autonomic reflexive system of the cloud.
  • Cloud Shell Management
  • Azure Management Mobile App for iOS & Android
  • Appsource
  • Azure Stack

Platform:  3rd Party

  • Visual Studio for Mac

Platform:  Mixed Reality

  • AI-enabled Workplace monitoring
  • New motion controllers
  • Acer & HP MR Dev kits available

Platform:  Windows 10 client

  • Fall Creators Update
  • Remix
  • Fluent Design System
  • Project Rome & Graph
  • Legacy App Bridging
  • Continuous Delivery
  • Windows Identity & FIDO
  • Ubuntu Linux updated
  • SUSE & Fedora Linux added

Platform:   .NET

  • .NET Standard 2.0 & XAML Standard 1.0
  • Embeddinator-4000
  • Live Player for iOS & Android

Technology: Cognitive

  • Twice as many services available under Azure Cognitive Services banner

Technology:  Database

  • PostgreSQL as a service
  • MySQL as a service
  • Cosmos DB

Technology:  BOT FX

  • Adaptive Cards
Technology:  Cortana 
  • Hardware units from Harmon Kardon, HP, Intel

Concluding Observations

Microsoft has fully given up on Windows 10 Mobile as an OS, and redefined “Mobile” to mean that the computing experience roams across all devices.  This is now what they mean when they say “Mobile First / Cloud First”. This roaming experience even cuts into iOS, OS X, and Android.  The big celebration of Build 2017 is “Microsoft is no longer a monopoly” which means that they are on top of “innovation hill” again.  Expect amazing things from Microsoft, and expect them to be on their game once things like Augmented Reality to really dig in on the consumer market.

Tech in the 603, The Granite State Hacker

Private Beta Privacy Policy

This post serves as a privacy policy for a private beta release of a suite of mobile apps.

This suite of apps accesses private information for demonstration purposes only.  It does not collect, store, generate or transmit any user information.   (What happens in these apps stays in these apps.)

The sole exception to this may be error information, which may be used for the purpose of identifying and/or resolving technical problems.  Information collected for troubleshooting purposes intentionally excludes information that could be used to attribute such error reports to any specific user. 

In all likelihood, however, the distribution of this app is intended to be so limited that we’ll probably know the aforementioned error reports came from you, anyway.

Usage of any app associated with this privacy policy constitutes acceptance of these terms.

Tech in the 603, The Granite State Hacker

I Taught My Kids How To Hack

My family and I enjoy gaming together… and I mean, really… together. We’re geeks. Our favorite “family time” game is World of Warcraft… nothing says quality family time like developing character abilities and gear together, working out optimal ability usage (“rotation”) and team interaction, in preparation to mob up & go kill demons and monsters.   It’s cheaper than a night at the movies, generally, and often more thought-inducing. (“For the Alliance!   For Azeroth!”)

Other games pop up from time to time.   Recently the kids started playing some Steam title…  some cute little 8-bit thing.  One thing that was unique about it was that, unlike almost everything out there, this game was entirely local…  it’s a true single player game.

As they got into the finer points of this new game, they started to agonize over its limitations. It’s no Kobayashi Maru, but it’s designed to engage users and drag out their engagement over long periods of time.

Now I get that games have their points and lessons to learn, and it’s generally best to let kids work through and past them naturally.   These guys are like most kids nowadays, solid gamer geeks, familiar with the gamut of games across phone, PC and Xbox, among others.   They’ve been there.  Done that.  When they tell me they’re bored, I tell them to go outside and play, and they look at me as if I have two heads.

In today’s modern computing technology, “apps” (which most games qualify as being) are too secure and/or too distributed to consider operating outside of the original intent of the program.  The save-file of the game is either stored in a “sandbox” that’s fully isolated from the user…  OR the “save file” is not even stored on the device, it’s actually downloaded as needed from some cloud-based host somewhere in the inter-webs.

This game is just like dozens of others they’ve worked through “naturally”…  I found myself thinking they might benefit from thinking outside the box a bit.   Given this is a classic “low-tech” local PC game, no other players would be impacted, and… there’s access to the file system.

Frankly, it was easier than I expected.  Initially, we started scanning the registry for clues, and found a silly ROT13 encoded string related to it that we decoded together, but not what we wanted. Eventually, we stepped back to the flat simplest solution. We found the game save files in c:\users\{userid}\AppData\Roaming\{Game}\  (how convenient!).   Opening the files within that folder, we found good old NOTEPAD.EXE did the trick…  the save file was an XML document, but that made for a nice, easy to grok (and search) structure…  within minutes we’d multiplied their in-game gold amounts by 1000x (by just tacking a few 0’s on the end of their configured amount).

The full game save file was a long list of name-value pairs that were easy to identify.  They could have easily added to their on-hand materials counts or any number of other hacks that would have been beneficial.  In this case, everything they needed in game could be acquired with gold, so it didn’t make sense to dig much deeper.

Cheating?   Well…  Yes.   And they definitely took advantage. 

My two kids are into game design, and often say they want to build games when they grow up.  This was an interesting opportunity to show them in concrete terms that data is data, and they can think much further outside the box than the average kid…  this is especially important for them to understand the mechanics of app (and game) construction and architecture, peeling back the illusion of the game world. 

In mechanical terms, it’s not much different than cracking the hood on a car and showing them how to beef up the engine.

What say you?  Do the ends justify the means?

Tech in the 603, The Granite State Hacker

What’s New in C# 7 (CSharp)

Thanks again to folks who joined in for the presentation at the Granite State Windows Platform App Devs  (@WPDevNH) at the Microsoft Store in Salem, NH last night.

Meetup:
https://www.meetup.com/Granite-State-NH-WPDev/events/238684720/

The site most of the content came from was MSDN:



Here’s the slide deck:
[office src=”https://onedrive.live.com/embed?cid=90A564D76FC99F8F&resid=90A564D76FC99F8F%211271743&authkey=&em=2&wdAr=1.7777777777777776″]

and example code on GitHub:
https://github.com/GraniteStateHacker/WPDevNH_CSharp7

Tech in the 603, The Granite State Hacker

Back To Where We Belong

Big changes for me lately, so more of a narrative personal post than a technical presentation…  and with apologies. I’ve been too wrapped up with the finer details of finishing up my project with Fidelity to get any blog posts out at all since November last year (yikes). 

I’ll get back to the regularly scheduled broadcast shortly.

About this time two years ago, I started a project with a financial firm out in Back Bay, in the John Hancock tower.  We rolled out SharePoint 2013 on-prem, and migrated it from multiple legacy farms… both of which were WSS3.0.   So between the build out and migration, I ended up on that project for a solid three months or so.  Not a bad gig, but… Boston commute (thank God for the Boston Express Bus), and no C# (not even ASP.NET).  It was really more of an IT Pro gig than development.  I was able to do some really fancy powershell stuff to manage the migration, but definitely not my first choice.

That fall, I landed a role on Fidelity’s new order management/trading desktop build-out. I have to say, that was roughly the kind of project I’ve been angling for, for years.  

Technology-wise, the only thing that could have made it any better was to be Windows 10/UWP based, maybe with mobile tendencies.  Alas, building rich clients of any sort is relatively rare, so .NET 4.6 is better than… not .NET at all. 

Still… All C#/WPF, desktop client…   

A good number of my most recent technical posts and presentations were heavily influenced by this project.   Sure, Boston again… for a good portion of it… but they let me work at Fidelity’s Merrimack location for a good chunk of the latter half of the project, too.

And it was maybe the longest running single version project I’ve been on in my life.  I was on it for 18 months…  a full three times longer than a “big” six month project.

All that to say I haven’t spent a full, regular day at a desk at BlueMetal Boston’s Watertown office in just about two full years. 

In that time, I’ve seen too many great teammates move on, and about as many new teammates join us.  We were employee owned back then, and I rode out the entire Insight purchase while “living” at the clients’ site.

Still, one thing that bothered me is a pattern I don’t intend to continue repeating.  When I took my position at Jornata that became BlueMetal, I accepted the title of Senior Developer, even though it appeared to be a step down from my Systems Architect title at Edgewater. 

My reason for accepting that was primarily that I was joining Jornata as a SharePoint make/break, and I needed to get a little more SharePoint experience under my belt before I was comfortable calling myself a SharePoint Solutions Architect.   By the time the BlueMetal merger worked itself around, I realized my options had opened broadly.  I got the SharePoint experience I needed, but it became very apparent that it wasn’t the experience I wanted.  Unfortunately, I was stuck with the “Senior Developer” title even on projects where my depth of experience went much deeper. 

SharePoint is cool for using, and even integrating, and IT Pros get a lot of mileage out of it, but as for software developers… well…  let’s just say I let SharePoint fuck up my career enough that I had to re-earn my “Architect” title.  (pardon my language, there’s no better word for it.)  I always deliver a win, but I’m a Visual Studio kinda guy.  I’m still happy to develop integrations with SharePoint, and support the SharePoint community… but while there’ve been major improvements in the past few months alone, Microsoft has been muddling it’s SharePoint developer story for years, and I let myself fall victim to it.

Thankfully, the Fidelity project did the trick…  it was just the level of high-touch, real Enterprise application development that I needed to earn my self respect back, and prove out my abilities in the context of BlueMetal. 

I’ll admit, while I feel this is restoring my title, it is certainly not lost on me that “Architect” at BlueMetal is a class (or two) above “Architect” in any of my previous companies.  I always felt I was there, even if I felt discouraged and unsupported by my former teams.  I am truly honored to be among those who’ve earned this title in this company, and very appreciative of the recognition.

At BlueMetal, I’m supported and inspired by my team, and really seeing this as validation that my career vector is now fully recalibrated.

I’ve said this before: meteorologists are very well educated with lots of fancy tools to help them be more accurate, but reality is that unless you’re standing in it, you don’t really have much hope of getting it truly right.  I have no intention of becoming a weatherman architect.  Hands-on the code is where my strength (and value) is, so that’s where I’ll always shoot to be.

Tech in the 603, The Granite State Hacker

Intro to IoT with C#, Windows 10 on Raspberry PI 3a, a la #BOSCC26

Despite the time crunch, I had expected to be able to dig in on more of the example code I’d prepared (heck, wouldn’t have spent so much time pulling that together if I’d thought I wasn’t going to get to it.)

I’ll also admit, my slides were more of a discussion guide than details, but there are a few good url’s in there to get you going with a PI or other IoT starter kit.

[office src=”https://onedrive.live.com/embed?cid=90A564D76FC99F8F&resid=90A564D76FC99F8F%211258505&authkey=AH4O2F_Cu16yiaE&em=2″ width=”402″ height=”327″]

GIT repository for the demo code
https://github.com/GraniteStateHacker/BOSCC-GPIO

Feel free to reach out to me with questions, I’m happy to help!