Developers, Grow Up.

I’m spending my day at Microsoft’s Charlotte campus for a Windows 8 Dev camp. Doing Windows 8 Metro dev at work got me interested so I decided to take a day and see what I can do to make my Metro app better.

I also went to CodepaLOUsa in Louisville in March, which was loaded with Windows 8 sessions. While there are a lot of great info in the sessions, there’s always one component that seems to rear its ugly head at every collection of ‘developers.’

But let’s define that first. What is a developer? Remember, this is fluid. A dev 5 years ago is radically different from a dev today. Same is true over really any time slice longer than a few months. A developer now is a technologist, a designer, a coder, a project manager, an architect, an infrastructure guy and a business process counselor. That’s a lot of hats. But that’s ok, because as developers, we already have to have IQs higher than 14.

Which leads me to my next point – if your goal in life is to focus solely on blowing holes in what others are working on, you probably are less of a developer and more of a tool. Let me explain.

If you’ve ever said ‘Users have to use this,’ you’re not a developer.

At both CodepaLOUsa and here at Microsoft today, there’s already a crew of people complaining about security, control & consumerization. Chances are, these guys aren’t developers, they’re guys who write apps – apps that suck. Apps that are forced on users because they’re corporate developers who don’t care about consumers or choice.

Ok, so we shouldn’t worry about security? Or control?

No. You shouldn’t. You should write your apps keeping those things in mind, but you certainly shouldn’t hide behind them as reasons why your apps suck. You can write secure apps that don’t suck. It’s simple – never trust the client, write rock-solid backend services, use common sense and you’ll stay protected.

You should let the third-party services (who can do their thing better than you) focus on all the BS that goes along with their service, so you can focus on your app.

You’ll always have bugs. Responding to them in a timely manner is key. Filing bugs as ‘can’t reproduce’ is a typical ‘enterprise developer’ attitude – two seconds, can’t repro, so it’s gone. Doesn’t matter, because users are forced to use it – no competition.

So I’ve de-sucked some of my app. But what about 3rd party services?

This is the next thing the old crusty guys in the corner complain about. It’s really an extension of control:

“OMG, MY USERS WANT TO USE SKYDRIVE! DROPBOX! MADNESS!”

Please. Let’s be reasonable. Third party services are the backbone of any development platform or OS. I mean, think your little delta replication algorithm you wrote in an afternoon holds a candle to Dropbox? Puh-leeez. Think dropbox has any interest in your data? (they don’t) Think that Twilio gives a rat’s ass what you’re texting to your corporate users? Here’s a hint:

NO

yeah, No. They don’t. This isn’t to say you shouldn’t be diligent about your own due dilligence. If you elect to try out Jim Bob’s Storage Bargain Madness, who says he guarantees four-nines uptime (but doesn’t tell you where those nines fall in his percentage – 64.9999 and 99.99 are radically different), then you’re a fool in your own right.

If you write garbage apps, users will go elsewhere – even if you’re a corporate dev

Obviously, anyone who’s written consumer apps knows that if you have a crappy app, the only way to be successful is to obliterate the competition (or do something so dry and boring that no one else cares). Corporate devs know this, but elect not to care. For one reason – no competition. For a long time, it’s been like that for a long time – IT security ‘professionals’ (i.e., I read an informationweek article about threats to my network) have shut down internet access and crippled devices to keep users in the dark.

Things Change.

Things change. I said it twice so it would sink in. I’ll say it again: Things change. Your users are changing. Your corporate IT management is changing (albeit, brutally, brutally slowly). You can’t kill 87% of the internet through your proxy and expect top talent to stick around. You can’t expect top talent to keep their devices and services at home. You can’t expect even mediocre talent to stick around without a device with capabilities from this century (I’m looking at you, RIM).

There’s an interesting thing about change – you can embrace it, be a part of shaping its future and enjoy the ride, or, you can fold your arms, grunt a bunch and whine and end up having to change anyway. Which of those sounds more fun?

Your customers are consumers – and have zero allegiance to you.

Don’t fool yourself into thinking that the guy who uses Dropbox, Facebook, Twitter is suddenly going to stop when he gets to work. Don’t think that the top-notch user experience he’s used to from those services is just going to be forgotten as soon as he walks through your doors. He may not say anything to you or complain, but there is a reason – he’s using something else.

I think you’re an idiot.

That’s fine, you’re not the first. And what I’m saying here obviously doesn’t apply to every developer or every corporation, or every anything. It’s a gross generalization – but it’s something I hear every time I get around more than a couple of developers. And it needs to stop.

Seriously, grow up. Be a dev. Embrace the culture and experience of one of the best jobs in the world. Embrace the career that pays you a lot to learn every day. Embrace the creativity and innovation it takes to do what we do – and do it well. You’d be amazed at how an extra 10% of effort and focus on making your app ‘consumer friendly’ goes towards pleasing your corporate users.

And if you can’t do that, perhaps it’s time to reconsider. There are plenty of highly-paid jobs that relish in the ‘old guard’ – guys who delegate, dictate and produce nothing.

Windows 8 Metro Apps Store, Windows Update & WSUS

I’ve been building Windows 8 apps for my current employer, so I’ve been running Windows 8 since the developer preview. Consumer Preview brought us the App Store – but I noticed that after some AD moves, I could no longer access the store. Turns out it’s restricted via Windows Update…so this has some large implications.

First, if you’re getting shut out of the store (“Can’t connect to the Store right now” kind of messages) & on a corporate, managed machine (you’ll see ‘Managed by your system administrator’ in Windows Update) – plus getting stuff like this:

 1: Fault bucket -1485561316, type 5
 2: Event Name: WindowsUpdateFailure2

in your event viewer whenever you try to install apps, here’s the fix:

 1: [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate]
 2: "DisableWindowsUpdateAccess"=dword:00000000

Either copy/paste that text into a text file, save it as BobLoblaw.reg & run it, or navigate to that tree & change the DWORD from 1 to 0. Next, go into services.msc & restart the Windows Update service.


image

You may have to close and reopen the store for this to work properly. From the start menu, put your mouse in the top left corner, right click & hit close to close the store. Reopen & you should be good to go.


image

If I had to venture a guess, I’d bet we see something like this for enterprise app deployments – the power of an Active Directory domain + a Windows App Store:

  • App signing certificate gets generated by internal CA
  • Cert is pushed to domain member PCs, trusted since signed by CA
  • Apps restricted/published via WSUS, effectively giving admins ability to restrict market apps & deploy internal apps, sidestepping the store.

Good stuff.

Windows Phone vs. iPhone. The decision.

I have two phones. An iPhone 4 & a Samsung Focus (the first one, without the front camera). Both have come from my job; paid for, I can’t complain. I got my Focus at launch; my company was just piloting iPhones so ActiveSync was open for anyone. Once the iPhone project moved from pilot to ‘real project,’ ActiveSync got stuffed behind the barrier of a mobile device management gateway – a gateway that would only work for iPhone (so I guess I should say an ‘iPhone management gateway,’ but I digress), leaving me out in the cold with my Windows Phone & corporate email.

I understood, took my new iPhone and started using it. Mail + calendar were top priority (and the whole reason the company was paying for my phone service), so I had to switch. About a month went by. I kept my Windows Phone as a sort of ‘Zune that doesn’t suck:’ WiFi only. But that got old…

So I switched back. The microSIM in the iPhone doesn’t fit the normal SIM slot in the Focus, but some creative Xacto-ing brought it back to life. I didn’t have corporate email, but I did have Outlook Web Access through the browser, so, in a way, it was ok. Eventually I’d wire up a convoluted scheme of transferring mail to my own Exchange environment & pumping calendar through Google with Google Calendar Sync – long story short, it was painful & gave me read-only access to my mail. But nonetheless, I was ok with that. I’ve tried switching back to iPhone a couple of times; unfortunately, I’ve only lasted at most 11 hours. Here’s why:

Zune Pass vs. iTunes Cloud

Zune’s service is just awesome. $10 for all you can eat music streaming, on PC, Xbox, web & phone. I listen to music at least half of the day, either at work, in the car or at home. It’s a must.

iTunes Cloud is great and all, but it’s still only music you’ve already purchased/pirated/downloaded. At $1.29 a song, that gets me about eight new tracks for the same price as Zune Pass.

Live Tiles

Live tiles are, simply, brilliant. A tile with some info that can update itself with more info. No longer is one required to dredge through multiple apps (with multiple experiences) to get info. It’s all on a home screen, no interaction required.

People Hub

The People hub is a tile/app of your people. Opening the people hub gives you a list of all updates from Twitter, Facebook, LinkedIn & Windows Live (not that anyone uses the last two, but that’s beside the point). I can’t find an alternative to that anywhere. Updating status is the same way – people hub –> post message –> goes to all or some networks at once.

SkyDrive vs. iCloud

This is really only about auto photo syncing (I know they both do more, I just don’t use it). They both do it and do it well. Tie.

Metro

Metro is beautiful. Bright, contrasting colors without being obnoxious and clear, simple text. It’s clean and efficient, and I’ve fallen madly for it. It brings me to the next point, which is really what makes the Windows Phone so irresistible for me:

Consistent User Experience

I hear a lot of bitching about WP as not having any apps. True, there are very few apps compared to the other behemoth App Stores of Apple & Google – but that’s ok. I have a few apps – Woot, Bank of America, Reddit, Foursquare – but almost everything I do with my phone on a daily basis is baked into the phone. What happens when the OS provides these capabilities? The user experience is seamless. I don’t need a bunch of disparate apps with their own interfaces and user experiences, because the phone does about 95% of what I need it to do on a daily basis – read mail, browse the web, listen to music & use social networks.

The user experience is consistent across the board. Metro enforces that. Metro is not a coding language or framework, it is a design principle. It is a design principle so simple that we should have had it years ago – but in the insanely fast mobile development world, Metro is king for user interaction.

Moving

I’m moving. Not physically (we just did that a few months ago), but I’m coming to realize that the all-you-can-eat hosting model just isn’t where it’s at any more – hosting stuff at home just isn’t feasible either, what with residential IP blocks getting blacklisted for SMTP traffic and the like. This is the pivot that the cloud marketers would give their souls for to convert you on. Seems I finally have.

I had Small Business Server at home. It was a nice setup, Exchange, SharePoint & a DC, all with a nice front-end for remote file access. But why access files at home? I realized that the amount of times I actually accessed anything at home was drawing smaller every moment. Dropbox rules the roost for cloud storage and what do I really need when I’m away? Streaming movies? Listening to music?

Music

My music library is replicated between home/work/phone via Zune, iTunes Cloud & Google Music. I mean, that’s the trifecta – and it should be. Music is important. Having easily accessible ways to access music is really important.

  • Zune: absolutely fantastic. ‘Sync downloads’ is possibly the best feature in the service itself. Anything I download on any device can be synced to other devices seamlessly – plus all-you-can listen to downloads for $10/mo.
  • iTunes Cloud: $25 for piracy amnesty? Who can argue that? While not the same service as Zune (no streaming of music you don’t own), it’s great since my company forces iPhones on us to keep from carrying music on the phone.
  • Google Music: the long-term storage. Upload anything you like, up to 20,000 songs. Listen in the browser. F*n FREE.
  • Movies/TV

    Netflix. Nothing more to say here.

    Documents

    Google Docs. Office 365. Skydrive. Dropbox. Why do we even have local storage any more?

    Mail

    This one is easy. Exchange ActiveSync is simply the best way to sync devices to mail. IMAP sucks & POP really sucks. Exchange ActiveSync was the first taste of the cloud, way back when. Lose your phone? Drop it and watch it shatter into millions of little pieces? No problem. Exchange syncs contacts, calendars and mail. I’ve been doing this for about 7 years. I’m still stunned when someone says ‘can you transfer my numbers to my new phone?!’ or ‘LOST MY PHONE, SEND NUMBERS PLZ.’ Staggering.

    Web Presence/Apps/Development

    I’ve included my own personifications of old style web hosting:

  • The ‘back in my day:’ Buy a server, get it racked in a colo somewhere and spend our national debt, conveniently divided up into twelve monthly payments.
  • The ‘anything goes:’ Shared hosting. Share your IIS/Apache instance with thousands of other sites. It’s like the dirty ‘back room’ of a club, complete with requisite skeezy types – and also where you might meet:
  • The ‘my startup is going to change the world:’ Virtual private servers. A step forward, but pricey, particularly for those lacking the skillset to setup IIS/Apache/your web server of choice.
  • The ‘How the f*k do I turn this on?!’: Sites templated & resold through the freakin’ wazoo. Sites like Homestead or Intuit, which will give you the same set of boring templates they gave to every other business owner too busy, lazy or ignorant to invest the time in building a proper web presence. This is 2012 people – what’s the first thing you do when you meet someone new? Google. If I find your site and it’s the same thing I saw on every other person-in-your-field’s page, I’m going to move elsewhere.
  • Now. Enough of that silliness.

    See how painful that was? The only reasonably priced way for anyone to get online was to share the same IP with hotsheeponsheepaction.com. Now we have options:

  • Amazon. Amazon’s Infrastructure-as-a-Service (IaaS) offering (EC2) is killer. Cheap, pay as you go and rock solid. As a good friend always says, ‘who actually uses their cloud infrastructure to run their own business? Amazon or Microsoft?’
  • Microsoft: Azure is, well, Azure. It’s just like any other Microsoft product. Powerful in the right hands. If you can get past configuration & set up, it’s got some really strong qualities. SQL Azure is SQL server for $10/mo. Scalable, tolerant, reliable. Azure is Platform-as-a-Service (PaaS) for now, but some of the newer offerings are starting to blur the lines…
  • …which is my point. Amazon AWS & Azure are different. One is IaaS, the other PaaS, and now they’re both getting into the other side. Progress.

Application Delivery

Think back, say, five years ago, to how you got software. Typically a CD, which went into a computer & ran some installer – that was that. Ready to go. Broke your CD? Sorry.

Digital downloads came later when we had better bandwidth than a 28.8k modem (the bits would fight with each other, it was just a mess). This was the first step to the ‘app store’ phenomena.

Steam did it wonderfully with their service. Front-runners. Innovative.

And really, it’s perfect. I’ve purchased some software. Associate the software to my account, rather than the device. New device = software’s back. It’s like ActiveSync for Apps. It’s truly perfect. Everyone does it – Apple (wildly successful), Google/Android (wildly successful), Xbox (wildly successful) and now, it’s finally headed to the desktop with the advent of Windows 8 (yes, I know that OS X Lion has an App Store, but using an OS with < 10% marketshare doesn’t implicate the kind of massive shift that an App Store for Windows does).

Windows 8 & Windows Phone 8 will share the same core. Know what that means? Truly cross-device application deployment. Code once, re-deploy – desktop/laptop, tablet & phone. It’s what the web told us it would be years ago.

Office 365

I moved to Office 365 today. No more local Exchange, WSUS, SharePoint. The guts of SBS lay strewn about the virtual floor; most of it’s major components uninstalled. No longer a DC, it’s just a member server on an otherwise vanilla domain network – but I’m keeping it around for Remote Desktop Gateway. AD Federation Services makes it all feel seamless – SSO to the cloud. More about that in a later post.

Anyway. Back to the point.

Point is, embrace the cloud. Hone your skills. Get familiar & comfortable. It’s not going away; in fact, it will only become a larger part of what we become. On-premises deployments will go the way of physical software media. A fat internet pipe and a couple of local domain controllers is all you need to be an enterprise anywhere –no rent, no office, no desks. No phone beyond a cell phone & a soft phone. Employees all over, happy, productive, and lower cost for you.

Communication of the future.

We do business in the cloud – we get mail in the cloud, socialize in the cloud, even take calls in the cloud. So why do we still chain ourselves to different text-based communication protocols? If I want to find you, I have to know your email, SMS, which IM networks you’re on, all that. It’s ridiculous. Marinate on that. More on that later too.

Kinect + Windows 8 + Metro–Part 2: The First Iteration

This is part two of a series (part one); most of the technical detail will be in the last post. Between NDAs and work disclosure, I can’t release any code, but I can discuss concepts, caveats and successes in the hopes that it helps someone else as much as the open source Kinect projects & the Kinect for Windows community as a whole has helped me.

I had gotten the green light, so now this was exploratory. I decided the best place to start would be with some of the toolkits and samples that the community had created. I grabbed KinectNUI & the Kinect Toolbox. KinectNUI has a lot of legwork done in gesture detection, smoothing & interop with traditional devices (mouse/keyboard). The Kinect Toolbox has a really sweet templated gesture detection engine, as well as a playback/record system that lets you debug without jumping out of your seat (ah, laziness IS the mother of invention).

Windows 7 + WPF + Kinect Public SDK

I started out extending the KinectNUI – my experience with WPF has been limited, so it was a good opportunity to sharpen that skillset. I wiped most of the KinectNUI out, leaving me with the old ‘MainWindow,’ which was now a ‘diagnostics’ window. In fact, it was now a user control, as well as all of my other content pages – so I could get some animations between controls to give a more ‘Xbox Dashboard’ effect.

MainWindow

It started simple enough – I made my XAML window the same size as the screens our prototype would be running on – 1080p HDTVs. The camera was pumped to a live-view canvas in the bottom corner (a la Dance Central), our logo was in the top left corner, and our main content viewport was a canvas in the middle with some animations for swapping user controls. The ‘MainWindow’ root canvas had the Kinect hands painted on top of that whenever a Skeleton frame was ready.

Tiles/Canvas

So our main content viewport is the good stuff – all the content goes here. Tiles with actions across the screen; hovering on a tile (or clicking) executes the action associated with that tile. Quite simple really – I wrote a base class - we’ll call it ‘ASweetKinectTile' – which inherits from UIElement. My tiles inherit from ASweetKinectTile, with some override-able methods (say, SwipeLeft, SwipeRight, Click, etc), making virtually any element Kinect-enabled.

Hover-to-Activate

This proved interesting – and simply came down to mapping the coordinates of the ‘tiles’ on the screen & counting skeleton frames while a specific joint (or combination of joints) was inside the bounds of that element. I’m sure some WPF wizard could make it happen in some ‘proper’ way, but this was rapid prototyping – working with temporary hax is a lot better than ‘not working, but no hax’ – anyway, it worked quite swimmingly for a while.

Gestures

While the gesture detection in the KinectNUI worked fairly well, I read some good things about the TemplatedGestureDetector in the Kinect Toolbox, so I decided to give it a shot. I will say this now and probably later. Gesture detection is a pain. Not the detecting gestures part, but the ignoring inadvertent movement part. I’ve been noodling a couple of ways to avoid this (particularly with left/right swipes – the tendency is to swipe over, then move your hand back to swipe again, essentially swiping back in the other direction) – namely, a delay between detections.

Some Thoughts

While the solution was good, we liked it, the business people liked it, the UI was still far from polished – it was a prototype, after all (and only the first sprint). So I got to thinking: Tiles = metro. Full screen = metro. How about porting over the prototype into Windows 8? It seemed a natural fit. Next post – Windows 8 & a Metro app.

who 'dis?!

I'm a developer with a history in financial applications (boring) and business intelligence (sweet). Right now I'm focused on cool things, like Azure & Amazon's AWS cloud, Kinect for Windows & all things Windows 8 & Metro. jQuery, AJAX, MVC & the web are the future of development, so if you're not on that train, I'd suggest you find a way on - quickly. I've spent a lot of time working in SharePoint as well - have a look around & make yourself at home. Questions/comments, you can find me on fb & twitter, or use the 'contact' button at the top.

Questions?