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
[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
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.
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.”
You can read the linked article for the full details, but if you just want the overview, watch this
Second, as of today, The Elder Scrolls Online: Tamriel Unlimited
has launched, meaning that ESO no longer requires a subscription to play. You’ll still have to buy
the base game, but after that, no subscription is required to log in. I
previously wrote a very favorable review of The
Elder Scrolls Online, and while I haven’t had much time to play it over the past few months, I do
still log in occasionally, and I still enjoy the game. I’m hoping this change to the payment model
will bring in new players, because at this point the game’s biggest problem seems to be long dungeon
queue times; I can only assume this is due to a population that has dwindled since launch
almost a year ago.
Truth be told, I have mixed feelings about Tamriel Unlimited. I think there are significant merits
to the subscription-based model that many players don’t recognize, and the progress that Zenimax
Online Studios has made since ESO’s release is a testament to that: they’ve released six significant
content patches with features including a new zone, multiple new dungeons and Trials (think raids),
new facial and combat animations, a new endgame character advancement system and drastic
rebalancing, a justice system, and dozens more improvements. I worry that the focus will now shift
from gameplay enhancements to purchasable cosmetic items, because the latter may be more of a cash
cow for the company. I also have more general concerns about the continuing trend of people
expecting everything on the Internet to be free… but that’s a topic for another post.
That said, I’m willing to give Tamriel Unlimited the benefit of the doubt. It could be that this
payment model change is just what the game needs to bring it the market success I’ve always felt it
deserved. If you played ESO previously but have since quit, it’s well worth picking up again; if
you’ve never played before, I would sincerely urge you to give it a try. Either way, take a look at
the launch trailer below, which shows off some of the enhancements that have been made since the
First of all, happy Pi Day! Using the standard United States
date format, today is 3/14/15, which makes it the most significant Pi Day this century.
Anyway, I’ve spent the past few hours tinkering with the
Microsoft Band SDK Preview, and although I think it’s
unfortunate that there’s no SDK for writing apps which actually run on the Band itself, you can
still accomplish some pretty cool things with the phone SDK. Unfortunately, this being a preview
release, the documentation is a bit sparse, and I had some trouble figuring out how to get things
working. Thus, I wanted to share some of what I’ve learned. If you prefer to dive right into the
code, I’ve got a small C# sample application on GitHub.
Standard disclaimer: although I am a Microsoft employee, everything I am posting here and on GitHub
is my own personal work done on my own time. None of it should be considered as officially
representative of Microsoft in any respect. While I will do my best to answer any questions I can
related to the Band SDK Preview, I cannot provide official support for this or any other Microsoft
Let’s get started. If you’re following
the documentation, the first
few steps describe how to connect to the Band, as one would expect. The sample code provided creates
a connection within a using block. This ensures that the connection is disposed of as soon as
control leaves the block, which is sensible since maintaing a connection to the Band, especially
when subscribed to multiple sensors, can severely impact its battery life. However, this approach
can also be a bit misleading, because if you do want to collect data from the Band over some
interval of time, you will only be able to do so during the lifetime of the IBandClient returned
by ConnectAsync. As soon as the IBandClient is disposed of, your connection will be closed and
you will no longer receive sensor data.
Since you’ll typically only be connected to one Band at a time, the easiest way to solve this
problem is to store the IBandClient as a static member variable of your Application class.
(Note: I don’t guarantee that this is the optimal solution. I am by no means an expert here.) This
also makes it easy to access your Band client from different pages within your application, and to
unsubscribe from sensor data when you no longer need it so that you won’t drain the Band’s
I’ve been working on my next book review for a few days now, but I’m finding
that when I try to work on it, words don’t come quickly or easily to me. So,
what the hell—might as well try something different. Music is immensely
important to me. I’ve got a fairly large collection spanning over a thousand
artists in dozens of different genres; I spent two years working in a record
store (back when those still existed) and I consider music crucial to my ability
to handle difficult emotions, be productive, and maintain sanity.
However, I’ve always been reluctant to write about it, because I’m basically
musically illiterate. I don’t play any instruments; I can’t tell a C from an F;
I can barely pick out the individual instruments in a song; I don’t even know
the right terminology to use when discussing what makes music good or not. I
hope that eventually I’ll be able to take some music lessons and correct this to
some extent, because I also believe that you can’t fully appreciate something
you don’t understand. But for now, I remain ignorant of the intricacies of
musical composition. Thus, I’m not going to be so presumptuous as to call this a
review, but… well, keep reading and you’ll see what I’m on about.
I go through periods of obsession with musical artists where I’ll discover
someone new and become absolutely, completely captivated by them, usually buying
several if not all of their records and listening to them over and over again
until I’ve thoroughly “worn out” every single song. Then, if I’m lucky, I find
someone new to become obsessed with, and the cycle begins anew.
Last month it was Lana Del Rey:
her albums Born to Die and Paradise are absolutely phenomenal, and she
herself is just an incredibly talented artist. One thing I find particularly
interesting about Lana is how her sound—her voice, in
particular—seems to evoke the 1950s; according to
Wikipedia, “her music has
been noted for its cinematic sound and its references to various aspects of pop
culture, particularly that of 1950s and ‘60s Americana.” But Del Rey’s music
doesn’t sound dated—lyrically, she manages to capture a timeless quality
while also epitomizing modernity and the hollowness of American decadence. It’s
a combination unlike anything else I have ever heard, and I still find it
Del Rey has announced a fourth album, Honeymoon, which is billed as being more
like Born to Die and Paradise than her third album, Ultraviolence, which I
have to admit that I didn’t care for as much. Naturally, I’m really looking
forward to that. Enough about Lana, though. This month, I’m hooked on Taylor
Swift’s latest album, 1989.
If you’ve tried to use Lubuntu (or
LXDE on another distribution) with a high-DPI display,
you’ve probably noticed that fonts and other UI elements are so tiny as to be
illegible without a magnifying glass. You’ve probably also noticed that there
is no GUI with which to adjust the UI scaling factor. Happily, it is possible to
change the DPI settings in LXDE, but this being Linux, it requires editing
obscure configuration files. Here’s what you’ll need to do:
In your home directory, create a new text file named .Xresources
In this file, enter your desired DPI in the following format: Xft.dpi: 150
Restart the X server. You can do this by pressing Ctrl + Alt + F1 to enter
single-user mode, then running sudo service lightdm stop, and then sudo
service lightdm start. (Note that it may be a different service if you are not
running Lubuntu. Alternatively, you can just reboot your machine.)
This will scale UI elements in most, but not all, applications. For instance,
it doesn’t resize the desktop panel, so you’ll likely want to do that as well.
Luckily you can do so easily by right clicking on an empty space on the panel
and selecting Panel Settings; from there, just change the height of the panel in
pixels to a suitable value.
This is yet another tip that I’m posting mainly becuase it took me an inordinate
amount of time to figure out how to do it. I found many suggestions on how to
enable scaling, but none of them worked until I stumbled across the above
instructions on the blog of bebabi34.
His blog is in Italian, so naturally it’s not very searchable for English
speakers; hopefully by reproducing his instructions here, I can save others some
Via a friend’s Facebook feed comes this
about “the psychology of software engineers and what makes us the way we are.”
I’m in almost complete agreement with the article, although I do somewhat take
issue with this paragraph:
Part of the problem [of software engineers consistently giving overoptimistic
estimates and then failing to meet them] is also our fragile egos. We get
afraid that if we give an estimate that is “too long”, that people will think
less of us. “Good engineers” should be able to work faster, they say, and so
I don’t really think software engineers in general have “fragile egos,” or at
least not to a greater extent than people in any other profession. We are
notoriously bad at giving realistic estimates, but in my experience, this is
often because we’re actually incentivized to do so: deadlines are set before the
amount of work required for a project is actually determined, or without regard
to it, and then we’re made to fit our estimates into too-short iterations while
still trying to accomplish all we set out to do. There’s a common sentiment that
it’s better to be under-optimistic and out-perform your goals than the converse,
and while that seems true in theory, in practice there don’t seem to be many
discouragements to failing to live up to estimates that everyone already knows
are unrealistic and often meaningless.
By contrast, I think the fear that people will think less of us for giving “too
long” estimates is completely valid in a culture where it’s commonplace to set
unrealistic goals and then break our backs trying to achieve them by any means
necessary. I think this especially true at the feature team level when one is
working on a large piece of software. What do you expect to happen to a team
that estimates up front that its feature cannot be completed within the release
adding more engineers might just make the problem worse.)
I think it’s safe to say that it won’t involve promotions and pay raises.
Finally, as my wife pointed out when we discussed this article, the
planning fallacy is by no means
unique to software engineers.
All of that said, I think the rest of the article is very good; this part in
particular struck a chord for me (emphasis mine):
So, without enough information, changing requirements, not enough knowledge to
do the job, and people constantly second guessing us, we trudge into work
every day. Being creative people, we put up with all of this because we know
that one day people will use our work. That’s really what drives software
engineers more than anything else: the idea that people we don’t even know
will be affected by our work. Whether you’re working on a web site visited
by millions each day or you’re working on a point-of-sale system for
restaurants, the knowledge that we’re affecting people’s lives is a powerful
A couple years ago I stopped using WordPress and
to Octopress, which is a derivative of
Jekyll. I continue to be pretty happy with this
decision, but there are some downsides to using a static site generator. One
issue is the lack of support for
Pingbacks, which are a method supported
by a number of dynamic blogging platforms to notify another blog when you link
to its content. Pingbacks provide a good way to respond to blog posts using
your own blog rather than via commenting; thus, they facilitate “conversation”
between blogs. Unfortunately, if you’re using Octopress or Jekyll or another
framework to generate static HTML pages, you won’t natively have the ability to
send or receive Pingbacks.
Luckily, Pingbacks can be sent manually with relative ease. Receiving Pingbacks
still won’t be possible, though; that’s a much harder problem to solve, for a
variety of reasons which aren’t relevant to this post.
Before I proceed, I want to note that full credit for this information goes to
Aaron Parecki; he explains the technique in
this GitHub Gist. The reason I’m
reproducing it here is because it was surprisingly hard to find Aaron’s Gist,
or anything else of relevance, when I was searching for information on how to
send a Pingback. Hopefully, by posting about it and adding some extra context, I
can make the information more searchable.
First, you’ll need to create a copy of this XML file on your local machine:
Replace the two URLs as appropriate - the first one is the source (i.e. your
blog post), and the second is the target (the post you are linking to).
Now, you just need to POST the request to the target server. You’ll need to
know the target’s XML-RPC endpoint URL for this. Usually, it will be /xmlrpc,
or for WordPress blogs, /xmlrpc.php. You can find out for sure by inspecting
the site’s source for a <link rel="pingback" href="..."/> tag.
You can use cURL to post your request. It’s built into most Unix-like operating
systems, but Windows users will have to
and if you’re on Mac OS X you probably need to have Apple’s developer tools
installed. Just run:
curl -X POST -d @pingback.xml http://example.com/xmlrpc.php
…and that’s it! cURL should print out an XML response from this server with a
message indicating that your Pingback was registered. Of course, to be truly
sure it worked, you should check the target URL and see if your Pingback was
added to the page. (Note that some sites disable Pingbacks.)
Shorten posts. Presenting readers with an epic saga and expecting them to read
it all carefully is asking a lot. Ben Radford has an interesting post
bemoaning that people don’t read.
It’s 1,380 words – appropriate for some audiences, not for others. If my posts
get over 1,000 words, I look for ways to trim them or break them into separate
Good advice, although I think the point that long posts may be more or less
appropriate for different audiences is underemphasized. Personally, I quite
enjoy the occasional 10,000 word epic.
As the first book set in the Halo universe, Eric Nylund’s Halo: The Fall of
Reach describes the training and induction of the first-ever Spartans,
including John-117, the Master Chief. It
follows the Spartans through some of their earliest missions, depicts humanity’s
first contact with the Covenant,
and culminates in the battle for planet Reach, a human colony. I don’t often
read fiction, and I am not sure I’ve ever before read “expanded universe”
fiction for a game or a movie, so Halo: The Fall of Reach was a bit of an
unusual read for me. However, since I really enjoy the Halo games, universe,
and characters, and since this book came highly recommended by other fans of the
series, I figured it couldn’t hurt to give it a try.
Unfortunately, per my review policy, I can’t actually
review this book: the Halo series, and indeed the copyright to the book, is
owned by Microsoft, by whom I am employed by. Instead, I want to highlight a
few things that I found interesting in the book. Be warned that this post will
contain some spoilers for the book and other parts of the Halo series.