mlindgren.ca

– 🕓 12 min read

Fitbit Ionic SDK impressions

I got the new Fitbit Ionic a few weeks ago, and I'm generally pretty happy with the device. I'm in the process of writing a full review of the Ionic, but I realized partway through that I had written quite a lot about the SDK, which many people probably won't be interested in. Hence, I decided to make that into its own post. In the meantime, if you're looking for a review, I would recommend reading DC Rainmaker's. He's a much more serious athlete than I am, and he reviews fitness gear semi-professionally, so he's able to put the devices through much more rigorous tests and go into detail about things like heart rate and GPS accuracy, which I won't be doing.


Anyway, the Ionic being Fitbit's first real smartwatch, I was eager to check out the SDK and dive into app development. And, well, I've tried to do so, but so far the results haven't been great. I think this is partly just because the platform is very new, and partly because of some questionable technology decisions that Fitbit made. Although it's too early to really evaluate the success or failure of the Ionic, or of FitOS an app platform, I think it can still be instructive to look at some of the choices that Fitbit made in designing the device and the OS, what effects they're having on developers now, and why I think they may prove to have been suboptimal choices.

Battery life was clearly the foremost concern for Fitbit when they designed the Ionic, and the technology decisions reflect that. Whereas the Apple Watch series 3 has a dual core CPU with a maximum clock speed of at least 780 Mhz, 3D graphics acceleration, and a rumored 768MB of RAM, the Ionic contains the humble Toshiba TZ1201XBG, with a meager maximum clock speed of 120Mhz1. The battery life of the two devices reflects these hardware differences: the Ionic lasts 4-5 days on a charge, whereas the Apple Watch lasts a maximum of 2 days. Personally, I think this was a great choice by Fitbit. Although the Apple Watch is inarguably a more capable "smartwatch," its two-day maximum battery life is an absolute deal-breaker for me, which is one of the primary reasons I bought the Ionic instead.

With the hardware itself being so thoughtfully designed to maximize battery life, it strikes me as a bit odd that Fitbit chose JavaScript as the sole language for app development on their platform. JavaScript is not known for being a high-performance, memory-efficient programming language; historically, it has been quite the opposite. Of course, it's not the language itself that matters so much as the interpreter, and modern JavaScript engines like V8 and Chakra have made extremely significant performance improvements compared to how slow JavaScript interpreters used to be. The Ionic, for its part, uses an engine called "JerryScript", which is designed specifically for IoT devices and allows JavaScript to be precompiled to bytecode; it boasts that it can run in environments with less than 64KB of RAM and less than 200KB of ROM. I'm not sure where the name comes from; contrary to what you might expect, the project's main contributor does not appear to be named Jerry. For me, the name just conjures images of Jerry from Rick and Morty:

Uh, anyway, JavaScript is still orders of magnitude slower than C and C++ for most workloads, and when you're concerned about energy efficiency and performance on a device with a 120Mhz single-core CPU, that difference matters. I freely admit that I am biased in favor of languages like C and C++, which are as close to the metal as you can get in a high-level language. Some would consider this preference anachronistic, but it's undeniable that there are still many places where maximizing performance really does matter. Embedded applications are one of those places, and I'm fairly confident that on the Ionic, using native code could have offered even better battery life, or perhaps improved performance, which is sometimes suboptimal even in the built-in apps.

Similarly, all UI on the Ionic is done using Scalable Vector Graphics (SVG). SVG is a lot easier to use than requiring developers to render their own UI, but it's also a lot less flexible than just blitting pixels to the screen. The minimum benchmark that any modern computing device should be able to pass is whether or not it can run DOOM, but between the poor performance of JavaScript and the inflexibility of SVG, I don't see that happening on the Ionic any time soon.

– 🕓 13 min read

Computer Science Career Advice

A few months ago, a family member of a friend of mine sent me an email asking for advice on pursuing a career in computer science. I enjoyed answering his questions, and I thought other aspiring computer scientists might have similar questions, so with his permission, I decided to reproduce my answers here. I've made a few edits here and there, mostly to remove personal information.

I want to be clear up front that I've only been doing this professional for about six years now, and I don't consider myself any sort of expert on how to have a successful career. The path I've chosen has worked out pretty well for me so far, but it's not the right path for everyone, and in an industry that changes as quickly as this one does, it's always hard to know what students should focus on when they're still several years from graduation.

What position do you hold at Microsoft and what is the scope of your work?

I'm a Software Development Engineer working in Windows OS security. Specifically, my team and I have spent the last several years working on Windows Hello. We don't do the actual template generation or matching for biometrics (face/fingerprint authentication), but we own pretty much the whole stack below that, including basically all of the crypto and some parts of the UI and UX. The marketing for Windows Hello mostly focuses on the biometric aspect, but the feature is actually a lot more than that.

Under the covers, Windows Hello provides key and/or X509 certificate-based login to domains and certain web services such as Microsoft accounts. In short, Windows Hello is more secure than using passwords, and you can get that benefit even if you don't have the hardware to do biometrics or don't want to use biometrics. We're working with industry standards bodies to specify and implement a set of web authentication APIs which will allow the use of key-based authentication technologies like Windows Hello with regular websites, which will hopefully eventually mean you won't have to have dozens of different passwords for each website you visit, or reuse the same password everywhere and risk having all your accounts get compromised.

My day-to-day work involves designing and implementing features and improvements to make Windows Hello more secure and easier to use, and of course fixing bugs as they're found. Developers are also responsible for writing and maintaining automated tests related to their features. Personally my favorite part of the job is writing code, so I try to spend as much time as possible doing that. Product managers (PMs) are responsible for mapping out the requirements, but in practice it's a very collaborative process between PMs and developers, so there are often a lot of meetings to hash things out. Meetings aren't my favorite way to spend my time, but I am glad that developers get to have input on the way features should work. The balance between design and coding varies a lot depending on where we are in the release cycle; Microsoft still basically uses waterfall-style development.

All of the code I write is in C++. On my team we make fairly heavy use of C++11 and C++14 (and soon C++17) features, which have really modernized the language and made it much nicer to deal with. Plus, trying to keep up with the latest additions to the C++ standard means I'm always learning new techniques and tricks, which is fun.

– 🕓 6 min read

Steam Early Access Roundup

Today I'm previewing three early access titles now available on Steam: Ghost in the Shell Stand Alone Complex First Assault Online, Rust, and Hurtworld.

Ghost in the Shell Stand Alone Complex First Assault Online

...Tactical Combat Video Game Entertainment Simulation System. Okay, I made that last part up, but somebody in Nexon America's marketing department really should have reigned in that title a little bit. It can't even be made into a convenient acronym. "Hey, want to play GITSSACFAO?" asked no one, ever.

Anyhow, I was drawn to this title because I love Ghost in the Shell: Stand Alone Complex (as well as the Ghost in the Shell films). If you're not familiar with the series, it follows a special forces team led by Major Motoko Kusanagi in a sci-fi 2030s Japan where everyone who can afford it is a cyborg. (The overoptimistic timeline is worthy of Back to the Future!) The setting is leveraged to deliver some surprisingly sophisticated philosophical and social commentary—for an anime, anyway. But more to the point, there's also a lot of over-the-top action and a hint of gun-fetishism, which makes the series perfect for a first person shooter. It's surprising, then, that nobody has tried to make one until now.

Ghost in the Shell: Stand Alone Whatever
Online

Unfortunately, the results are mixed, at least at this early stage. I've seen some significant stuttering during some matches, which is a real problem in such a fast-paced shooter. The gunplay also is also ever-so-slightly off. It's got a satisfying, weighty feel to it, but I can't quite get used to the aiming and recoil. Adjusting your aim while looking down the sights is so incredibly slow compared to the pace of player movement that the best strategy seems to be to just never use iron sights at all except at extreme range. It feels like they're taking cues from Counter-Strike, but they haven't quite nailed the experience yet.

I trust that some of these issues will be fixed as the game is developed further, but what's more worrying is the character progression mechanic. Although early access to the game costs money, this is pretty clearly intended to be a free-to-play game, and as such there are already a plethora of unlockable weapon and ability upgrades. There are so many different things to customize that it's almost overwhelming at first. That would be a good thing if not for the fact that the pace of unlocks seems very slow (as if to encourage people to spend real money—imagine that!), and the unlockables don't seem very balanced. A fully upgraded character has clear advantages over a new character, which leads to a frustrating sense of unfairness.

Remember when games had
gibs?

I think this one is worth keeping an eye on, but I don't see it becoming my go-to shooter unless I end up being dead wrong about the free-to-play monetization scheme.

– 🕓 6 min read

Game Review: Fallout 4

[I completed this review after playing Fallout 4 for a total of 25 hours. I completed the main quest line during my play through.]

Fallout 4 is the latest in Bethesda's revival of Black Isle Studios' beloved post-apocalyptic role playing series, and like its predecessors it has met with much praise and market success. But I find myself unable to quite grasp the popularity of the game, because also like its predecessors, Fallout 4's impressive scale and ambitious design are hamstrung by some major flaws in the execution.

– 🕓 2 min read – Translated to [sv]

Switching to Pelican

I keep forgetting to mention it, but this May was the fifth anniversary of this blog. Thus, it's time again for some housekeeping. Three years ago I stopped using Wordpress for my blog and moved it to Octopress. Octopress is a great blogging framework, but its current incarnation has some major shortcomings. Those will be fixed with Octopress 3.0, but 3.0 has been a long time coming, and due to the changing distribution model the work to move from 2.0 to 3.0 may be substantial. Plus, Octopress isn't the best fit for me because it's written in Ruby, which I don't know and don't have much interest in learning; I much prefer Python.

I recently learned of Pelican, which is a Python-based blogging tool. Luckily, Maurizio Sambati has already done the hard work of porting the Octopress theme to Pelican. Since my blog's theme is the Octopress theme with a few tweaks, it wasn't an inordinate amount of work to port my own theme to Pelican. Jake Vanderplas also did some great work in porting some of Octopress' Liquid tags to Pelican, and he also has a great blog post which walks through the process (and describes some of his reasons for switching, which mirror my own). In the end, it did take me several hours of work to move everything over and clean up some of the posts where I was making use of various Octopress plug-ins, but I think it will be a boon in the long run. (Please let me know if anything appears to be broken, as it's possible that I missed something.)

In addition to being easier for me to use and contribute to, I'm really excited about Pelican's support for tags. Tagging will help organize my blog, especially since I've limited myself to having only a few categories since I'm committed to having a unique, easily-distinguishable color for each one. I'm also excited that Pelican has built-in support for translating articles, which I plan to take advantage of to practice the languages I'm learning.

Check back in three years to see which new blogging platform I switch to next!

– 🕓 7 min read

TV Series Review: Mr. Robot, Season One

I don't watch a whole lot of TV. In fact, I don't even have cable. The only shows I end up watching, therefore, are those I'm introduced to or I read about. Mr. Robot is the latest such show; I read David Auerbach's piece on it and was intrigued. In Auerbach's words:

Real misfits—disturbing, unappealing, unlovable misfits—make for poor Hollywood protagonists. It takes some faith to inject a genuinely alienating hero into a film or TV show. But ever since the broader world of tech has gained a whiff of cool over the past decade or so, Hollywood's portrayals of hackers, programmers, and other screen-strapped geeks have tended to sugarcoat the frequently unvarnished and even unappealing aspects of a culture that prides itself on not caring about the mainstream. I'm not bemoaning the lack of shy nerds with hearts of gold here, but of awkward and even abrasive characters who talk too loudly, can't follow conversational cues, transgress boundaries obliviously, and harbor conspiracy theories or other unappealing ideas—like a lot of actual hackers out there. We forget that people detest savant types for reasons beyond their smarts, and a lack of social graces is one of them.

Elliot, the protagonist of the new USA Network drama Mr. Robot, comes far closer to this type than an American television show has dared for a while. (Elliot isn't the titular Mr. Robot—that's Christian Slater.) As played by Rami Malek, Elliot doesn't have the charisma of Benedict Cumberbatch's Sherlock or the anti-charisma of Hugh Laurie's Dr. House. Unlike Tony Shalhoub's Adrian Monk, he's not a collection of quivering nerves and endearing eccentricities. These characters—all nerds of one sort or another—are fundamentally capable of functioning in society, and Elliot really isn't. He and the world just don't hook up in the right way. Taking copious drugs in order to function, he carries a vacant and flattened affect, neither making eye contact with anyone nor turning away when they look at him. With his emaciated face and sunken eyes, Malek gives an impression of emptiness, paranoia, and above all disconnection.

This is probably a polarizing description: some people will be immediately interested while others will probably question why anyone would want to watch it. It was very much the former for me, possibly because Auerbach's description of Elliot hits a bit close to home. I watched the first episode and was instantly hooked. The show immediately draws you into its world: a sort of dystopian present, a mirror image of our own reality, but viewed through the eyes of a brilliant, cynical, emotionally troubled young man who struggles not only with an unfeeling universe but also with drug addiction and mental illness.

Atypically for movies and TV, Elliot's mental illness is depicted respectfully and at least somewhat accurately, too. He's not an over-the-top Hollywood psycho, but merely a vulnerable person suffering from paranoia and delusions. And being a software developer, I also really appreciated that the show nails the technology. It's not completely realistic, but that's to be expected; the reality of programming and hacking is that they're slow, analytical processes, often consisting of long stretches of thought punctuated by short bursts of activity. In other words, they're boring to watch, and sometimes to undertake, too. Mr. Robot strips that away, but it keeps the interesting aspects intact without insulting the audience's intelligence with impossible technology, meaningless invented jargon, or awful 3D GUIs.

– 🕓 13 min read

Observations from Three Years in America

Some of this post is adapted from a Facebook comment I wrote earlier in the year in response to this CBC article. Many of the statements in this post are conjecture based on my own experiences and perceptions; I do not claim that everything in it is broadly applicable.

May of 2015 marked the beginning of my fourth year in the United States. Now that I have a green card and don't have to worry quite as much about saying the wrong thing and getting kicked out of the country, I wanted to take the opportunity to discuss what it's like to live here from my perspective. I was going to write "from a Canadian perspective," but of course, I don't speak for all Canadian immigrants.

Before I started my career, I had never really planned to come to the US. I was only part of the way through my senior year at the University of Alberta when I happened upon a Microsoft recruiting booth at a career fair. Microsoft was the only real technology company present; most of the others were oil and gas companies, that being what Alberta's economy is primarily based on. I left a resume with them, not really expecting much to come of it.

As it turned out, I did get a call back (which I almost missed—funny how such small events can result in drastic changes in one's life). A few weeks and several highly stressful interviews later, I had signed a job offer. Shortly after I graduated, my wife and I were on a plane to Seattle. Even at that point, I didn't really expect to live in the States for more than a year or so. My goal was primarily to get a "marquee company" on my resume (a piece of advice a friend and former colleague gave me) and then use that as a bargaining chip to get a better job back home. But now it's been more than three years, and not only am I still here, but I no longer have plans to leave in the foreseeable future.

– 🕓 2 min read

Windows 10!

Windows 10 is out today! This is the first release of Windows that I have worked on as a developer , and I'm proud of what my team and Microsoft as a whole have accomplished in the past year-and-a-half or so. Several tech websites have already posted reviews, and so far the trend is very positive. A colleague of mine posted some excerpts, which I'm going to borrow:

Windows 10 represents the obvious future of PC operating systems. It makes Mac OS X feel old-fashioned, stuck in a time where The Desktop was a thing that mattered and the only way to access the Internet was through a browser.

So the question finally presents itself: should you upgrade your machine to Windows 10? Yes, you should.

The best part of Windows 10 is that it ends the cycle of good and bad in favor of something great.

It's nice, for once, to be able to recommend a new version of Windows without any hesitation.

If you are on a PC at all, Windows 10 is where you want to go. That it is free—for now—only makes the point simpler.

If you haven't already done so, you can follow the instructions here to get your free upgrade. It's very exciting to have played a role in the creation of the latest and truly greatest version of Windows; I think this is a huge achievement for Microsoft, and I'm happy to have been a part of it. The real reward, though, is seeing people use and enjoy Windows 10—and that starts today!

– 🕓 10 min read

Game Review: Bloodborne

[I completed this review after playing Bloodborne for approximately 30 hours. I have finished the game, but I have not discovered 100% of the content. I played the entire game solo, not using any summons to help with boss fights. I have not yet participated in any PvP.]

Bloodborne is the spiritual successor to From Software's Demons Souls and Dark Souls series, and its pedigree is clear right out of the gate. Upon starting the game, you'll enter the character creation menu and be asked to choose from a number of classes with different stats, but will be given almost no explanation of what the stats mean or how they affect gameplay. If you're a Dark Souls veteran, you can make some educated guesses, but new players will be completely on their own. After a short introductory sequence, you're thrown into an open world replete with buildings of impossible scale, which stretches vast, seemingly endless distances in each direction. You're completely on your own to make your path through this world, and there's no obvious "correct" route; in fact, a friend and I found different bosses first, because we had taken different routes from the start.

If this experience sounds like it might be frustrating for new players, that's because it absolutely can be. Even for veterans of the series, the complete lack of guidance can feel punishing at times. And yet, I can't stress how much I absolutely love it. The freedom not only to explore, but to truly discover the workings of the world, and to make mistakes, is what made the Souls series what it was, and Bloodborne continues this legacy. The game pays homage to times past, when games didn't hold the player's hand throughout the entire experience, and it does so with such expertise and craftsmanship that none of its contemporaries can compare.

Like its predecessors, Bloodborne adeptly balances challenging and sometimes frustrating gameplay with frequent rewards and other powerful motivators: the prospect of discovering something new, of overcoming the next challenging boss, of finding the next area, or of glimpsing another thread of the world's deep backstory. These enticements work so well because of the depth and imagination with which the world is crafted. There's a constant sense of cataclysmic urgency, but you won't truly understand it until you take the time to piece together all of the subtle clues placed throughout the world. Bloodborne gives you very little to go on, but it trusts you to have the fortitude and curiosity to work things out for yourself.

– 🕓 3 min read

Windows Hello, Microsoft Passport, and Tamriel Unlimited

Lots of exciting news today! First off, Microsoft has made a couple exciting announcements about Windows 10. Full disclosure: I am a Microsoft employee, so I am posting these for self-interested reasons, but I'm also genuinely really excited about what they mean for Windows.

The two new features are called Windows Hello and Microsoft Passport. Windows Hello is a software feature which, with supported hardware, offers "biometric authentication which can provide instant access to your Windows 10 devices." But Windows Hello is not just the same old support for fingerprint readers that Windows has had for many years now; it "enables you to authenticate applications, enterprise content, and even certain online experiences without a password being stored on your device or in a network server at all."

To accomplish that, Windows Hello works in conjunction with Microsoft Passport, which enables you to "securely authenticate to applications, websites and networks [...] without sending up a password. Thus, there is no shared password stored on their servers for a hacker to potentially compromise."