Friday, December 30, 2016

Firewatch, redux

I know, I know, I wrote about Firewatch already.

But it's just so thoroughly satisfying to see that I wasn't the only one who was completely swept off my feet by Campo Santo's wonderful little masterwork.

  • Best Writing 2016: Firewatch
    I can’t recall a game that so quickly had me invested in the story and characters. There’s the gut-punch of the opening choices you make to set the stage, brilliantly presented as a series of simple text-based prompts that still manage to be emotionally powerful. This leads to wonderfully written dialogue between the game’s two main characters, bolstered by the fantastic voice performances—I would go so far as to say the best in a game, ever—by actors Rich Sommer and Cissy Jones.
  • The Year in Review #5 — Firewatch
    the game cultivates this immeasurable and invaluable quality of being wilderness. The Thing that it creates is this sense of truly being out not just in the Shoshone National Forest but truly any untamed expanse of land. You latch onto landmarks like this weird shaped rock or this particular cluster of trees. You manage to orientate yourself, never feeling lost but also never quite having a complete grasp on the world around you.
  • Our 10 Favorite Videogames of 2016, From Firewatch to Overwatch
    the places are so pretty and the plot is so immediately arresting that in no time at all you’re deep in Firewatch‘s thrall. The profound sadness that pervades the whole experience, the isolation, the reasons you went out into the forest in the first place… it’s an experience not to be missed.
  • 10 Moments You May Have Missed In Firewatch
    While the climactic (or, for some, anti-climactic) ending of Firewatch left plenty of players happy to leave the Thorofare behind, a second playthrough could still have plenty to offer. Depending on how thorough you are, there may still be a number of interesting conversations, events and even locations that you missed on your first time around.

The best computer games combine screenwriting, painting, music, and more into something hard to describe.

Congratulations, Campo Santo, on receiving the accolades you so thoroughly deserve.

So long, 2016

With some frequency, I find that my down-time thoughts are filled with worry. Are my children OK? Am I doing enough for them? Am I saving enough for retirement? Am I taking care of my health? When will the next big earthquake hit the Bay Area? Will there ever be peace in the Middle East?

It's natural, this time of year, to worry about the Big Questions. And, let's be honest, 2016 was a Pretty Lousy Year.

But let's put that aside, and kiss the year good-bye with thoughts of a different sort.

Take that, Existential Dread!

  • 'Full House': Number of Harbor Seals at Alameda Point Reach Record High
    The folks at Alameda Point Harbor are pretty stoked: The “seal monitors” counted a record number of harbor seals floating on a concrete dock taken on Tuesday, beating last year's high set on Christmas Day.

    “That’s a record for the year and surpasses last year’s record of 38,” which was set on Dec. 25, 2016, the group wrote on its Facebook page. “It looks pretty much like a full house now.”

  • Game on! The best board games of 2016
    2016 was a tremendous year for tabletop gaming. The tireless members of the Ars Cardboard crew spent a lot of time playing, replaying, and dissecting the year's new titles, and we're ready to tell you what we enjoyed most.

    A caveat: because so many games appear each year, and because the board game release calendar is so heavily weighted toward the latter half of the year, we didn't (and simply couldn't) play absolutely everything. But we gave it a good shot!

    So here, in no particular order, are our 20 favorite tabletop games of 2016—along with a few runners-up and notable new editions.

  • Library-managed 'arXiv' spreads scientific advances rapidly and worldwide
    he created a service where physicists could post their preprints as "e-prints" accessible to anyone with an Internet connection. The idea caught on, submissions multiplied, and subject matter expanded to include mathematics, astrophysics, computer science and, most recently, biology and statistics.

    Eleven years ago Ginsparg joined the Cornell faculty, bringing what is now known as arXiv.org with him. (Pronounce it "archive." The X represents the Greek letter chi.) It is managed by Cornell University Library, allowing Ginsparg to devote more time to his research.

  • An Open Letter to the Female Hat-Wearing Dog From “Go Dog, Go”
    you don’t even know me, but I wanted to take a minute to tell you that what matters is that you like your own hat, hat-wearing female dog. Who is this guy anyway, some sort of dog hat expert?? Who cares what he thinks??? Wear a hat you love
  • Learn from your mistakes
    This new feature takes your hand and walks you through the mistakes you made in a game. It lets you figure out a better move for each of them. And finally, if you request it, lichess tells you what the best move was.

    Instead of telling you right away what you should have played, this feature gives you a chance to rethink the position by yourself. That's how we learn.

  • Rogue One: an ‘Engineering Ethics’ Story
    In a story where engineers are more central than Jedi or Sith, Rogue One breaks new ground for the franchise both in its characters but also in the ethical territory it covers. Not to diminish the character arcs of Jyn Erso and Cassian Andor, but the core ethical arc of the film is one man’s decision to engineer the Death Star in such a way as to prevent its use for galactic domination. One could fairly retitle the movie to ‘Rogue One: an Engineering Ethics Story.’
  • The Inexhaustible Joy of Singin’ in the Rain’s “Good Morning” Shows Debbie Reynolds at Her Peak
    From the moment the three of them start tapping their feet until they collapse in a laughing heap on an overturned couch, there are only nine cuts in more than three minutes—nine unforgiving head-to-toe shots which left no room for error. I’ve seen Singin’ in the Rain many times, but I’ve watched “Good Morning” closer to a hundred—it was one of the things I used to teach my daughter how to watch movies when she was too young to watch anything longer—and it’s as close to perfection as movies get.
  • A few nice things happened this year
    I hope all of you had at least one moment as nice as these this year, and that next year will contain even more.

Amen.

Wednesday, December 28, 2016

GitHub financials discussion

One challenge with a company like Uber or GitHub is that they are private, so they don't have to release their financials, which can make it a challenge to understand how well (or poorly) they are doing.

Every so often there are clues, though.

A few weeks ago, Bloomberg published this article by Eric Newcomer: GitHub Is Building a Coder’s Paradise. It’s Not Coming Cheap.

Newcomer's lede is surprisingly harsh; the first paragraph reads:

Though the name GitHub is practically unknown outside technology circles, coders around the world have embraced the software. The startup operates a sort of Google Docs for programmers, giving them a place to store, share and collaborate on their work. But GitHub Inc. is losing money through profligate spending and has stood by as new entrants emerged in a software category it essentially gave birth to, according to people familiar with the business and financial paperwork reviewed by Bloomberg.

"Profligate spending?" "Stood by as new entrants emerged?" These are strong words, indeed.

Newcomer also takes the expected swing at the management scandals at GitHub, and even drops a rumor of a recent layoff.

As I said, it's hard to know what to make of such an article, given that the company is private and we just have to take people's word for things. Still, this article definitely smacked of being a bit of a hit piece, particularly since it spoke so glowingly of GitHub's upstart competitor, GitLab:

The issue took on a new sense of urgency in 2014 with the formation of a rival startup with a similar name. GitLab Inc. went after large businesses from the start, offering them a cheaper alternative to GitHub. “The big differentiator for GitLab is that it was designed for the enterprise, and GitHub was not,” says GitLab CEO Sid Sijbrandij. “One of the values is frugality, and this is something very close to our heart. We want to treat our team members really well, but we don’t want to waste any money where it’s not needed. So we don’t have a big fancy office because we can be effective without it.”

Well, anyway, a few weeks passed, and, perhaps not surprisingly, there is now a counter-part article. Medium published this article by Moritz Plassnig: GitHub is Doing Much Better Than Bloomberg Thinks - Here is Why.

Plassnig criticizes Newcomer, justifiably I think, for focusing too much on 2014, and not enough on 2016:

GitHub was the darling of the developer community but 2014 (harassment scandal, Tom Preston-Werner resigning) and 2015 (slower progress, increased competition) were challenging and it suddenly wasn’t set in stone anymore that GitHub will dominate and own their vertical in the same way as for example Amazon Webservices owns theirs.

The September 2015 ARR number of $90M seems to reflect that. But, if they were struggling in 2015, they blew it out of the water in 2016 and went from $90M in September 2015 to $140M in August 2016.

And, perhaps more importantly, Plassnig works to try to redirect attention away from GitHub's free hosted services and toward their booming enterprise business:

GitHub offers three different products as of December 2016:
  • github.com personal plan
  • github.com organizational plan
  • GitHub Enterprise (on-premise/VPC product)
All of the growth in the last two years came from GitHub’s organization plans or GitHub Enterprise. The revenue from their organization plans roughly doubled and the revenue of GitHub Enterprise tripled over the course of 23 months (Sep’14 — Aug’16) while the revenue of their personal plans stagnated according to the numbers Bloomberg published.

50% of GitHub’s ARR came from GitHub Enterprise as of August 2016 compared to 35% back in September 2014. Their efforts to get into larger organizations and become more of a traditional enterprise software vendor also explains the higher burn rate. Historically, most of GitHub’s revenue came from their github.com offering which was completely self-serve while their GitHub Enterprise customers require more handholding and a more traditional enterprise sales process.

Those are, indeed, remarkable numbers.

Newcomer, too, is aware of the dramatic size and spectacular growth of the GitHub Enterprise numbers, although he chooses to frame it a different way, as a core tension in the company rather than an engine of growth:

GitHub says it has 18 million users, and its Enterprise service is used by half of the world’s 10 highest-grossing companies, including Wal-Mart Stores Inc. and Ford Motor Co.

Some longtime GitHub fans weren’t happy with the new direction, though. More than 1,800 developers signed an online petition, saying: “Those of us who run some of the most popular projects on GitHub feel completely ignored by you.”

The backlash was a wake-up call, Wanstrath says. GitHub is now more focused on its original mission of catering to coders, he says. “I want us to be judged on, ‘Are we making developers more productive?’” he says.

It's not obvious to me that being "focused on its original mission of catering to coders" is at all counter to the strategy of making money by selling GitHub Enterprise; as far as I know, the features that are made available to hobbyists and open source teams on hosted GitHub are also present in GitHub Enterprise, so improvements to, e.g., the code review process benefit all.

To me, the more telling and fascinating finding, which neither Newcomer nor Plassnig seem to discuss much at all, is the counter-industry-trends success of GitHub Enterprise.

In this era of the cloud, when company after company is moving everything possible onto Amazon Web Services or Microsoft Azure, the fact that so many organizations are still choosing to make massive deployments of SCM services inside their own corporate data center is astonishing to me.

I'm not sure what is driving this particular aspect of the business, although I have a few theories.

One theory is that the IP stored in an SCM system is still viewed as the most precious, private, and critical IP within an organization, and many organizations still aren't willing to trust the cloud with these materials.

Another, perhaps more likely, theory, is that deployments like GitHub Enterprise are displacing older SCM systems within organizations, and those older SCM systems are almost always deployed in the corporation's main internal data center, so it is natural to replace like with like.

Finally, inside large corporations, SCM systems are rarely used "out of the box" as-is; rather, they are foundational pieces of infrastructure, with considerable flexibility and extensibility, and they are typically deployed as a base atop which the organization builds their own proprietary workflow and development tools, integrates with their own proprietary security system, etc.

In such a configuration, you may well need to have near-total control over the SCM deployment inside your own data center in order to port your existing development toolchain to it and extend that tooling over time.

This last argument, while it might well be the basis of the current choice to deploy tools like GitHub in their on-premise "enterprise" editions, seems like it has nothing fundamental to it in the long run, so I still think that, eventually, most organizations, even giant ones, will find themselves running their SCM services in the cloud.

It's just that, as these current GitHub financials appear to show, we aren't there just yet.

Monday, December 26, 2016

Get well, Derek Carr

AFC playoff picture: Contenders after Carr injury

Derek Carr's broken fibula was a devastating moment for an entire franchise and fanbase that waited 14 years for a season like this. They rightfully had Super Bowl champion dreams with Carr. With fourth-year pro Matt McGloin now under center, any playoff win will feel like overachieving. Yet it's worth noting McGloin joins a situation that couldn't be better.

The Raiders have one of the NFL's best pass protecting offensive lines. (In a cruel bit of bad luck, Carr was injured on the only QB hit Oakland gave up on Sunday.) They have one of the best starting wide receiver duos in football. They have an emerging running game and an offense that gets receivers wide open, often taking short passes a long way.

Carr's talent and leadership was a massive part in making all of the above work.

Bummer.

Thursday, December 22, 2016

LA Times series on OxyContin

If (like me), you were dimly aware of what OxyContin was, but had never really learned much about it, you'll certainly want to spend some times with this monumental, mesmerizing, harrowing, Pulitzer-worthy series that's been running in the L.A. Times:

  • 'You want a description of hell?' OxyContin's 12-hour problem
    Narcotic painkillers work differently in different people. Some drug companies discuss that variability on their product labels and recommend that doctors adjust the frequency with which patients take the drugs, depending on their individual response.

    The label for Purdue’s MS Contin, for instance, recommends that doctors prescribe the drug every eight or 12 hours to suit the patient. The morphine tablet, Kadian, manufactured by Actavis, is designed to be taken once a day, but the label states that some patients may need a dose every 12 hours.

    Despite the results of the clinical trials, Purdue continued developing OxyContin as a 12­-hour drug. It did not test OxyContin at more frequent intervals.

  • More than 1 million OxyContin pills ended up in the hands of criminals and addicts. What the drugmaker knew
    In L.A., Santiago kept writing prescriptions in ever larger numbers.

    To keep the OxyContin flowing, Lake Medical needed people. Lots of them. Age, race and gender didn’t matter. Just people whose time was cheap. For that, there was no place better than skid row.

    Low-level members of the Lake Medical ring known as cappers would set up on Central Avenue or San Pedro Street. The stench of urine was everywhere. People were lying in doorways, sleeping in tents, fighting, shooting up. Who wants to make some money, the cappers would shout.

    For as little as $25, homeless people served as straw patients and collected prescriptions for 80s. It required just a few hours at the clinic, filling out a few forms and sitting through a sham examination. They were then driven, often in groups, to a pharmacy, where a capper acting as a chaperone paid the bill in cash. He then took the pills back to the Lake Medical ring leaders who packaged them in bulk for sale to drug dealers.

  • OxyContin goes global — “We’re only just getting started”
    In this global drive, the companies, known as Mundipharma, are using some of the same controversial marketing practices that made OxyContin a pharmaceutical blockbuster in the U.S.

    In Brazil, China and elsewhere, the companies are running training seminars where doctors are urged to overcome “opiophobia” and prescribe painkillers. They are sponsoring public awareness campaigns that encourage people to seek medical treatment for chronic pain. They are even offering patient discounts to make prescription opioids more affordable.

    U.S. Surgeon General Vivek H. Murthy said he would advise his peers abroad “to be very careful” with opioid medications and to learn from American “missteps.”

Steve Kerr article in the Times

Run, don't walk, to this absolutely wonderful article about Steve Kerr and his background: Tragedy Made Steve Kerr See the World Beyond the Court

Kerr credits his father for his demeanor on the sideline as an N.B.A. coach: calm and quiet, mostly, and never one to berate a player. Kerr was not always that way.

“When I was 8, 9, 10 years old, I had a horrible temper,” Kerr said. “I couldn’t control it. Everything I did, if I missed a shot, if I made an out, I got so angry. It was embarrassing. It really was. Baseball was the worst. If I was pitching and I walked somebody, I would throw my glove on the ground. I was such a brat. He and my mom would be in the stands watching, and he never really said anything until we got home. He had the sense that I needed to learn on my own, and anything he would say would mean more after I calmed down.”

His father, Kerr said, was what every Little League parent should be. The talks would come later, casual and nonchalant, conversations instead of lectures.

“He was an observer,” he said. “And he let me learn and experience. I try to give our guys a lot of space and speak at the right time. Looking back on it, I think my dad was a huge influence on me, on my coaching.”

Kerr played for some of the best basketball coaches in history — Olson at Arizona, Phil Jackson with the Chicago Bulls and Gregg Popovich with the San Antonio Spurs among them. By the standards of basketball coaches, they were worldly men with interests far beyond the court.

I can't believe I never connected Steve Kerr with Malcolm Kerr, nor even knew that Steve Kerr was born in Beirut.

What a superb article, and what a fascinating man he is.

Dominion 2nd Edition?

I happen to love Dominion.

My wife is not such a fan.

Apparently it is well-known that the original base game has some "dud" cards in it, and most really experienced Dominion players know to avoid those cards, somehow.

Anyway, now comes news that they have revised the base game to replace the duds with better cards.

People seem to feel that it has substantially improved things.

Donald Vaccarino himself wrote a detailed description of his thinking behind the revisions.

Is it worth getting a 2nd Edition to see if my wife likes it better?

Or maybe just get the "Upgrade Pack"?

Wednesday, December 21, 2016

Margaret Hamilton's award

Here's a nice article on the Nautilus website about Margaret Hamilton: Why Did Obama Just Honor Bug-free Software?

You might call Hamilton the founding mother of software engineering. In fact, she coined the very term. She concluded that the way forward was rigorously specified design, an approach that still underpins many modern software engineering techniques—“design by contract” and “statically typed” programming languages, for example. But not all engineers are on board with her vision. Hamilton’s approach represents just one side of a long-standing tug-of-war over the “right way” to develop software.

Formal methods are very powerful, but also very challenging to use in practice. However, I do believe that they are making progress. For example, in an area that I (somewhat) follow, that of "distributed consensus," there has been quite a lot of progress recently, including

I think you have to be a big, well-funded organization to be able to employ techniques like this, but I'm excited to see their use growing, and hopefully they will become more accessible to practicing software engineers who have less resources available to them.

In the meantime, I've still got Valgrind, and the Address Sanitizer, and my compiler, and my TDD process, so I'll try to emulate Hamilton as best I can...

Tuesday, December 20, 2016

Station Eleven: a very short review

One of my early holiday escapes was Emily St. John Mandel's utterly enthralling Station Eleven.

It's a little hard to write about Station Eleven, though, because it's a book that's a bit hard to pin down.

For a book so full of death, it's a book full of life.

For a book so full of horror, it's a book full of love.

For a book so full of desolation, it's a book full of art.

For a book so full of disease, it's a book full of healing.

Station Eleven's hook is simple, yet thoroughly effective: a worldwide pandemic has almost completely extinguished the human race, but left the rest of the world unaltered. Scattered around the world, tiny snatches of survivors here and there make do.

In and about the area that was once Lower Michigan, a small group of musicians and performers have banded together, and formed a traveling entertainment group, minstrels as it were, who go from place to place, performing Shakespeare and Beethoven for their livelihood.

The company's motto:

Because survival is insufficient

Using a fairly obvious approach, the book tells the story of several of the members of The Traveling Symphony, both Before, and After, interspersing flashbacks with sequential narrative.

Mandel's touch is careful and subtle, accomplishing the purpose without shoving herself in your face. Take, for example, this passage, in which the breathless speed of the calamity and the total enormity of the transformation is conveyed via the simple device of a run-on, no-time-for-a-break, hurry-up-what-can-we-do-?, everything-all-thrown-together-in-a-heap paragraph in a single sentence:

There was the flu that exploded like a neutron bomb over the surface of the earth and the shock of the collapse that followed, the first unspeakable years when everyone was traveling, before everyone caught on that there was no place they could walk to where life continued as it had before and settled wherever they could, clustered close together for safety in truck stops and former restaurants and old motels.

Meanwhile, there is a villain.

There are Ordinary Heroes.

But through all of that, Mandel's enduring theme is that, well, life goes on:

The problem with The Traveling Symphony was the same problem suffered by every group of people everywhere since before the collapse, undoubtedly since well before the beginning of recorded history. Start, for example, with the third cello: he had been waging a war of attrition with Dieter for some months following a careless remark Dieter had made about the perils of practicing an instrument in dangerous territory, the way the notes can carry for a mile on a clear day. Dieter hadn't noticed. Dieter did, however, harbor considerable resentment toward the second horn, because of something she'd once said about his acting. This resentment didn't go unnoticed -- the second horn thought he was being petty -- but when the second horn was thinking of people she didn't like very much, she ranked him well below the seventh guitar -- there weren't actually seven guitars in the Symphony, but the guitarists had a tradition of not changing their numbers when another guitarist died or left, so that currently the Symphony roster included guitars four, seven, and eight, with the location of the sixth presently in question, because they were done rehearsing A Midsummer Night's Dream in the Walmart parking lot, they were hanging the Midsummer Night's Dream backdrop between the caravans, they'd been in St. Deborah by the Water for hours now and why hadn't he come to them? Anyway, the seventh guitar, whose eyesight was so bad that he couldn't do most of the routine tasks that had to be done, the repairs and hunting and such, which would have been fine if he'd found some other way to help out but he hadn't, he was essentially dead weight as far as the second horn was concerned.

Isn't that passage simply PERFECT? The juxtaposition of the normal and the abnormal, the human and the inhuman, the typical and the bizarre is just so delightful that it takes my breath away each time I read it.

The story moves through arcs and events, but really, Station Eleven isn't about the story, it's about the storytelling; the title itself is taken from the title of a series of graphic novels penned by one of the characters, who herself is telling a story not for a purpose, but because she feels compelled to tell a story.

In the end, says Mandel, isn't this what humans basically, fundamentally, do: we come together, and we tell each other stories.

Miranda discarded fifteen versions of this image before she felt that she had the ghost exactly right, working hour upon hour, and years later, at the end, delirious on an empty beach on the coast of Malaysia with seabirds rising and plummeting through the air and a line of ships fading out on the horizon, this was the image she kept thinking of, drifting away from and then toward it and then slipping somehow through the frame: the captain is rendered in delicate watercolors, a translucent silhouette in the dim light of Dr. Eleven's office, which is identical to the administrative area in Leon Prevent's Toronto office suite, down to the two staplers on the desk. The different is that Leon Prevant's office had a view over the placid expanse of Lake Ontario, whereas Dr. Eleven's office window looks out over the City, rocky islands and bridges arching over harbors. The Pomeranian, Luli, is curled asleep in a corner of the frame. Two patches of office are obscured by dialogue bubbles.

Let's obscure those offices by dialogue bubbles.

Let's work hour upon hour to get the image exactly right, and render it in delicate watercolors.

Let's slip, somehow, through the frame, and immerse ourselves in creativity, in imagination, in communication, in human-ness.

If you should ever find your way to Mandel's Station Eleven, I hope you enjoy it as much as I did.

Sunday, December 18, 2016

Go Raiders!

The last time the Raiders were in the playoffs, their wide receiving corps was led by the wonderful Tim Brown, supported by, oh, the greatest football player of all time (Jerry Rice).

Anyway, time has passed since then. The Raiders have had something like 15 head coaches and 15 starting quarterbacks in those 15 years. Jerry Rice and Tim Brown are happily retired.

I'm pretty sure that the only player who played on the 2002 Raiders team that played in Super Bowl 37, and is still playing on the Raiders this year, is Sea-Bass himself, Sebastian Janikowski.

How far can the Raiders go? Who knows? The AFC seems like it's anyone's conference this year. Tom Brady is older still than Sea-Bass, and he plays quarterback!

Let's go Raiders!

Sorcerer to the Crown: a very short review

In recent years, when I go looking for a book, I don't immediately reach for fantasy, so most books of that genre which I read must end up being given to me by somebody.

Such is the case with Sorcerer to the Crown, Zen Cho's 2015 debut novel.

Many people have described Sorcerer to the Crown as: "Harry Potter meets Jane Austen," which certainly captures the idea nicely, but I think an alternate description might be: "Jonathan Strange and Mr. Norrell from an Asian-feminist perspective."

Cho is a Londoner of Malaysian heritage, and she brings that background to bear quite nicely, introducing a certain grace as well as a certain exotic flair to her story that lifts it quite above the smoky sturdiness of Susanna Clarke's wonderful work.

As with any fine work of literature, Sorcerer to the Crown isn't really what it appears to be on the surface. As it tells its story of young warlocks and witches making their way through finishing school, spring ball, and London society, it is really exploring many deeper issues of caste, race, gender, religion, and (of course: this is a novel about England) Imperialism.

So our hero, the Sorcerer to the Crown himself, is a freed slave; our heroine is a young East Asian woman; and our villians include stuffy old-money snobs, misogynist dictators, and jealous rivals.

Some fantasies would make the magic the center point, with lots of spell-weaving and dramatic displays. Cho instead wisely wields this tool with a very light touch, using such events only a handful of times, and spending most of her energy on simple, human interactions and interests:

"I desire to speak to your King," said Mak Genggang. "You had best bring me to him straightaway -- and no dillydallying, if you please, for the fate of the nation depends on it!"

"Good gracious," said Prunella, staring. "But what dreadful thing is it that is going to befall us?"

"I have befallen you," said Mak Genggang. "I was not referring to Britain, however. I was speaking of what is of rather more importance: the fate of my nation, which your King seeks to bully!"

"If you will permit me to say so, ma'am, I believe there is a misunderstanding," said Zacharias. "Our King has no wish to alienate you, and I am sure would regret any inadvertent offence."

"If he had no wish to offend, he ought not to have lent his ear to Raja Ahmad!" retorted Mak Genggang. "A sovereign ought to learn better judgment of character. It must be clear to anyone with their wits about them that the raja is a fool. But then again" -- her eyes gleamed -- "I suppose it serves your King's purpose to treat with fools!"

All of this could have been right out of any work of Austen or Dickens, were it not for the fact that Mak Genggang is the sort-of Mother Superior of the witches coven of the Malaysian island of Janda Baik, but as you can see you hardly even notice that during the exchange.

So when Cho does decide to deploy her tools of magic, they come through as wonderous interludes that delight and amaze, even if they are still somehow solidly rooted in the peculiar dignities of English social customs:

Lord Burrow gave him an incredulous look, but with the advent of the thunder-monster the sea had been thrown into even greater tumult. The sheets of rain falling unbroken from the sky seemed as though they would cause a second Flood. The strivings of Mrs. Midsomer and the thunder-monster so infused the place with magic that every wave bore a crest of green foam, every magician was outlined in light and the opaque vault of the sky was a livid green, reflecting the unearthly glow of the battle below.

"Damn your impudence!" said Lord Burrow. "Do you mean to blackmail me at such a time as this?"

There may be magicians everywhere, but a stuffy aristocrat is still a stuffy aristocrat. Damn your impudence, indeed.

Cho's book is a delight, and she is a wondrous talent. Every writer needs a spark, and every great novel needs various mechanisms and stage props to tell its story, so I certainly can't condemn her for resorting to a bit of a gimmick ("what if I told a classic English novel of manners, updated with modern concerns, but the main characters were actual magicians?") to frame her work.

Still, I must admit to the slightest bit of disappointment: she's clearly capable of something truly great, and Sorcerer to the Crown, while thoroughly charming and enjoyable and undeniably well-performed, is just not that work of true greatness.

Congratulations on your great start, Ms Cho. Now, please, show us what you are really capable of, next.

Avoiding spaces using alternate 8.3 names

Sometimes you get a silly and annoying error like:

> Files\Java\jdk1.8.0_111"" was unexpected at this time.

This is a clue that the space in "Program Files" has thrown something off.

If you have set JAVA_HOME, for example, as

 JAVA_HOME=c:\Program Files\Java\jdk1.8.0_111

then elsewhere we use it as %JAVA_HOME%, other programs will fail because they will see that space and think that

 JAVA_HOME=c:\Program
which is of course wrong, and they will also be completely baffled about what to do with
 Files\Java\jdk1.8.0_111
The extra double quote(s) in the message indicate that one piece of software (or perhaps you yourself) attempted to camouflage that space by doing something like:
 JAVA_HOME="C:\Program Files\Java\jdk1.8.0_111"
which works for *some* programs, but not all.

A better and more reliable way to avoid that space is to use the alternate 8.3 name for C:\Program Files, often called the "tilde name" because it usually contains the "~" name in it.

To find the alternate 8.3 name for C:\Program Files, open up CMD.EXE and do:

 cd \
 dir /x pro*
You should see something like:
  Directory of C:\

 10/23/2016  10:07 AM    <DIR>          PROGRA~1     Program Files
 12/16/2016  05:47 PM    <DIR>          PROGRA~2     Program Files (x86)
PROGRA~1 is the alternate 8.3 name for Program Files, and PROGRA~2 is the alternate 8.3 name for Program Files (x86). Now go find the place where you did:
 JAVA_HOME=c:\Program Files\Java\jdk1.8.0_111
or
 JAVA_HOME="C:\Program Files\Java\jdk1.8.0_111"
and change it to
 JAVA_HOME=C:\PROGRA~1
You no longer need the quotes because there is no space in the alternate name.

After making a bunch of environment variable changes like this, it's usually a good time to re-start the computer, pour a new cup of coffee, and move on to see what the next problem might be.

Good luck!

Saturday, December 17, 2016

Stuff I'm reading, mid-December edition

2016 has flown by.

  • 15 Years of Concurrency
    In a Tale of Three Safeties, we discussed three kinds of safety: type, memory, and concurrency. In this follow-on article, we will dive deeper into the last, and perhaps the most novel yet difficult, one. Concurrency-safety led me to the Midori project in the first place, having spent years on .NET and C++ concurrency models leading up to joining. We built some great things that I’m very proud of during this time. Perhaps more broadly interesting, however, are the reflections on this experience after a few years away from the project.
  • AWS re:Invent 2016
    There was no inside-the-data center ground fault and that is exactly my point. The facility did not have a problem but the switchgear incorrectly locked out the backup power. The customer called in the utility to investigate and they reported the facility experienced a switch fault that locked out the backup generator.

    Under rare circumstances the switch gear incorrectly determines there is a problem and does not transfer the load to generator. When this happens, the generators are running but not taking load due to switch gear lock-out and the critical load is dropped when the UPSs are exhausted.

  • Cherami: Uber Engineering’s Durable and Scalable Task Queue in Go
    Cherami is a distributed, scalable, durable, and highly available message queue system we developed at Uber Engineering to transport asynchronous tasks. We named our task queue after a heroic carrier pigeon with the hope that this system would be just as resilient and fault-tolerant, allowing Uber’s mission-critical business logic components to depend on it for message delivery.
  • GLB part 2: HAProxy zero-downtime, zero-delay reloads with multibinder
    Unfortunately there’s a small period between when this process last calls accept() and when it calls close() where the kernel will still route some new connections to the original socket. The code then blindly continues to close the socket, and all connections that were queued up in that LISTEN socket get discarded (because accept() is never called for them)

    For small scale sites, the chance of a new connection arriving in the few microseconds between these calls is very low. Unfortunately at the scale we run HAProxy, a customer impacting number of connections would hit this issue each and every time we reload HAProxy.

  • Orchestrator at GitHub
    The master is not an isolated entity. It has replicas. These replicas continuously poll the master for incoming changes, copy those changes and replay them. They have their own retry count/interval setup. When orchestrator looks for a failure scenario, it looks at the master and at all of its replicas. It knows what replicas to expect because it continuously observes the topology, and has a clear picture of how it looked like the moment before failure.

    orchestrator seeks agreement between itself and the replicas: if orchestrator cannot reach the master, but all replicas are happily replicating and making progress, there is no failure scenario. But if the master is unreachable to orchestrator and all replicas say: “Hey! Replication is broken, we cannot reach the master”, our conclusion becomes very powerful: we haven’t just gathered input from multiple hosts. We have identified that the replication cluster is broken de-facto. The master may be alive, it may be dead, may be network partitioned; it does not matter: the cluster does not receive updates and for all practical purposes does not function.

  • The Medium-Term Prospects for Long-Term Storage Systems
    The fundamental problem is not storing bits safely for the long term, it is paying to store bits safely for the long term. With an unlimited budget an unlimited amount of data could be stored arbitrarily reliably indefinitely. But in the real world of limited budgets there is an inevitable tradeoff between storing more data, and storing the data more reliably.

    Historically, this tradeoff has not been pressing, because the rate at which the cost per byte of storage dropped (the Kryder rate) was so large that if you could afford to keep some data for a few years, you could afford to keep it "forever". The incremental cost would be negligible. Alas, this is no longer true.

  • Nobody ever implements sort
    The place where this is used is performance-critical -- the "semi-sorted" (a type of compression) cuckoo filter has to sort the contents of a 4-element bucket any time an element is inserted. The sorting network works well on our target x86 platform because it exploits the inherent parallelism of modern processors (they can issue multiple instructions per cycle, if those instructions are independent). The entirely inlined implementation avoids a lot of unnecessary function call and setup overhead from a more general-purpose sorting algorithm.
  • So what are Bloom indexes for Postgres?
    Basically Postgres calculates a hash for each of your column values and then stores some bits out of each hash as one index entry, together with the row’s physical location info (as with every other index). And exactly this “merging” of many column values into one index entry, resulting in a signature in our Bloom context, is where the effectiveness of this index type comes to shine. In short – it can help you to save a lot of disk space! Thus instead of 10 separate normal B-tree indexes you can now have only one Bloom index that’s though lossy, meaning it won’t give you perfect accuracy as matched values need to be always re-checked from the table, but from a probabilistic viewpoint it is “good enough” to be useful.
  • PostgreSQL "Compatible" Aurora
    The language Amazon uses around Aurora is really wierd – they talk about “MySQL compatibility” and “PostgreSQL compatibility”. At an extreme, one might interpret that to mean that Aurora is a net-new database providing wire- and function-level compatibility to the target databases. However, in the PostgreSQL case, the fact that they are additionally supporting PostGIS, the server-side languages, really the whole database environment, hints strongly that most of the code is actually PostgreSQL code.
  • What Kangaroos & Beachballs Can Teach You About Code
    The problem is that class inheritance (by extension, the `extends` keyword in JavaScript) forces you to inherit everything from the parent class. This problem is easily avoided using object composition instead of class inheritance.
  • Why Kakoune — The quest for a better code editor
    Many vi users have an epiphany when they realize that vi does not just provide a set of modes making various text editing shortcuts easier to type, but actually provides a text editing language.

    Commands are composable in order to express complex changes, dw in vi is not just a shortcut to delete a word, it is the combination of a verb: d for delete, with an object w for word. There are more complex objects like ib (inside block) refers to the content of the parenthesis surrounding the cursor, so yib would yank (copy) the text inside the surround parenthesis.

    This language allows the programmer to express their intent much more closely than in other editors; most editors can express "delete the word after the next parenthesis", but more often than not, expressing that intent is more cumbersome than simply doing an ad-hoc edit. Text editing as a language changes that, by making clearly expressing your intent the fastest and easiest way to do your edit.

  • Defending Accounts Against Common Attacks
    While we often worry about sophisticated digital attacks, the most common attacks for accessing news organizations’ accounts depend on only a few simple weaknesses. These weaknesses are usually a combination of predictable passwords, phishing emails designed to steal login credentials, as well as malicious file attachments in email and elsewhere. While the attacks are simple, so are the defenses. This collection of resources and learning materials will walk you through practices recommended by security specialists for defending your newsroom against common attacks on your accounts.
  • What Git got Right and Wrong
    I still have real complaints with the software These include fundamentally different concepts merged into the same label and the fact that commands may do many different things depending on how you call them. The fact that the concepts are not clear means that it is worse than a learning curve issue. One cannot have a good grasp of what git is doing behind the scenes because this is not always clear.
  • One More Sign World Is Shrinking – eBay is for Suckers
    No one should be surprised that unscrupulous buyers use eBay to commit fraud on unsuspecting sellers. What surprised me was the extent to which eBay now facilitates this fraud through its “buyer protection program”. In October this year I listed a very slightly used iPhone 6S for sale on eBay and was quite satisfied when it eventually sold for $465. This satisfaction was short-lived, however, as I came to realize that I had been taken in by an eBay scammer.
  • The Man Who Tried to Redeem the World with Logic
    So impressed was Wiener that he promised Pitts a Ph.D. in mathematics at MIT, despite the fact that he had never graduated from high school—something that the strict rules at the University of Chicago prohibited. It was an offer Pitts couldn’t refuse. By the fall of 1943, Pitts had moved into a Cambridge apartment, was enrolled as a special student at MIT, and was studying under one of the most influential scientists in the world. It was quite a long way from blue-collar Detroit.
  • KVH Industries Tour
    KVH was founded as Sailcomp back in 1982 by Arent Kits van Heyningen and his sons Robert and Martin. Their initial product offering was a digital compass for use in racing sailboats. Nearby Newport, Rhode Island was at the time a hot-bed for racing sailboats and, although America’s Cup racing no longer takes place there, sail racing remains an important part of Newport.

    KVH has evolved to focus on satellite communications/guidance and stabilization for both military and civilian applications but, while walking through the factory, the descendant of the original KVH product line remains a part of the now much broader product line.

  • Northamptonshire in a Nutshell
    Written and illustrated by Ron Mears
  • Ships under Financial District
    The shadowed area is roughly the outline of Yerba Buena Cove when the city was founded and there are more than 70 old wooden ships buried in the old cove that is now part of the city.

Practical software engineering books: a very short review

When it comes to software engineering, I'm a very practical sort. Knowing all the theory is great, and I do try to keep my knowledge updated and accurate, but what really matters to me is writing solid, reliable, efficient, USEFUL software.

So here are two books that were surprisingly better than I had thought they might be, principally because they are, at their core, eminently practical:

  • Site Reliability Engineering: How Google Runs Production Systems

    The SRE book is rather an odd bird. It's really 34 separate chapters, written, in total, by about 50 different people, all of whom are or once were Google SRE's.

    Each chapter has a topic, and the overall topics are collected into themes and roughly grouped and ordered, but each chapter is independent and you can easily skip around and read different things in different orders, as your interests and needs dictate.

    Everything about this book is practical: it's nothing but hard-earned knowledge from a group of people who have been spending their entire professional careers down in the bowels of Google's production systems, keeping them running night and day.

    Sometimes the advice is rather basic ("automate everything!"); sometimes the advice is quite advanced (adjusting the overload multiplier in the equation which governs client request throttling behaviors). In all cases, however, it's useful and well-explained.

  • Cracking the Coding Interview: 189 Programming Questions and Solutions

    This book has been "the hotness" for years now, and for years I had been avoiding it.

    I feared it would be nothing but cheap tricks and short-cuts, a cram-class for people trying to pretend they're something they're not.

    But I recently read a very favorable blog article about CTCI, and decided to give it a try.

    I wish I'd done this years ago.

    Although it's certainly useful for its stated purpose (at-home preparation for new graduates who are hoping to enter the workforce), it's much more broadly useful to the practicing professional programmer.

    Again, as with SRE, CTCI is divided into many separate chapters, each with a very specific topic, gathered into themes, and roughly grouped and ordered. And, again, you can jump around however you like, as your interests and needs dictate.

    Each chapter contains a very clear, very concise, and very useful summary of the current received wisdom about some aspect of software engineering, including the major topics, algorithms, approaches, etc., as well as lots of references for people who want to dig deeper.

    More, each chapter then contains a fascinating set of quiz questions, each one suitable for you to sit down with a pencil and pad of paper, a strong cup of coffee, and a quiet hour, to work through.

    Even better, each question comes with one or more "hints", organized in a very clever fashion so that you can choose to look at a single hint without "spoiling" things by accidentally seeing all the other hints at the same time. I found that the hints, in many cases, were the best part of the book, as they often sparked insightful rumination about how to look at common problems in significantly different ways.

    And, as the title promises, each question contains a detailed answer, explaining not only how to solve the problem properly using the techniques from that chapter, but also, in many cases, notes about common pitfalls and errors that you'll want to avoid.

    One quibble: whatever semi-automated process the CTCI team are using to update their book from edition to edition suffers from some sort of cross-referencing flaw, as many of the questions would indicate that the answer could be found on page NNN, when in fact the actual answer was on a different page number. This little annoyance was easy to work around, though, as the answers were in the same order as the questions.

Both SRE and CTCI are surprisingly "deep" books, with a LOT of material. I've been, on-and-off, working my way through each of them over a period of months, and I imagine I might still be digging into them months from now.

Thursday, December 15, 2016

Wednesday, December 14, 2016

Curious DHCP adventures

At home, I have 3 Windows computers.

About a week ago, one of those computers went insane, and refused to get on the net.

The other two computers were fine, but this one was recalcitrant.

I tried all the various home remedies (restarted the modem, restarted the router, checked my Windows logs, etc. etc.).

Eventually I gave up in disgust and forced a static IP for the angry machine, to get going again.

Then, just by happenstance, I found myself in Michigan, at my in-laws's house, where again there were multiple Windows machines, and one of them went insane and refused to get on the net.

Well, to mis-quote Arlo Guthrie, if it happens once you can just dismiss it as craziness, but this was a real pattern, so I started searching the net, and I found several articles like this.

A number of those articles indicated that people had been successful resolving the problem with a surprisingly simple approach:

  • Restart
  • Restart
  • Restart

(If this sounds like sync three times, well, it sounded like that to me, too.)

It certainly didn't seem like this could hurt, so I gave it a try.

And, after restarting the computer twice, I noticed that the Windows Update Control Panel told me that the computer was now downloading a new Windows Update.

My guess is that something got "stuck" in an automatic download of a Windows Update, and something about that "stuck" caused the DHCP address acquisition process to fail.

But I am having trouble conceiving of why simply restarting the computer several times was enough to "unstick" it.

At any rate, a week later, when I was back at home with my first problematic computer, I:

  • Undid the static IP configuration
  • Watched the machine immediately drop offline and refuse to acquire an IP address.
  • Restarted the computer

And it went online and immediately started downloading a new Windows Update.

So if you're one of those people who is having strange problems getting online all of a sudden (and if you can see this blog), try: restart; restart; restart;

Tuesday, December 6, 2016

In which people discuss things I don't understand

  • Can Uber Ever Deliver? Part One – Understanding Uber’s Bleak Operating Economics
    If rapid growth could not drive major margin improvements between 2012 and 2016, there is no reason to believe that Uber will suddenly find billions in scale economies going forward. Fundamentally digital companies like Amazon, EBay, Google and Facebook had massive operating scale economies because the marginal cost of expanded operations was close to zero. Aggressive pricing fueled the growth that drove major margin improvements and also created major consumer welfare benefits.

    By contrast, in the hundred years since the first motorized taxi, there has been no evidence of significant scale economies in the urban car service industry. That explains why successful operators never expanded to other cities and why there was no natural tendency towards concentration in individual markets. Drivers, vehicles and fuel account for 85% of urban car service costs. None of these costs decline significantly as companies grow. As the P&L data above demonstrates, Uber has not discovered a magical new way to drive down unit costs.

  • Can Uber Ever Deliver? Part Two: Understanding Uber’s Uncompetitive Costs
    Every other transport industry depends on highly centralized management using highly sophisticated systems to ensure that capital assets are highly utilized and tightly scheduled around market demand. The Uber business model implies that all these industries are horribly wrong; decentralizing asset purchasing, maintenance and scheduling to isolated low-wage workers would not only reduce costs, but create an efficiency gain large enough to drive all incumbent operators out of business. No one has produced any economic evidence demonstrating that the Uber view might be correct.
  • Can Uber Ever Deliver? Part Three: Understanding False Claims About Uber’s Innovation and Competitive Advantages
    Hundreds of other consumer industries have migrated from telephone ordering to smartphone and internet ordering (pizza delivery, airline booking), but there is not a single case where this had any material impact on industry competition, much less created tens of billions of dollars in corporate value. The major emphasis on the app in pro-Uber articles appears to be symbolic; the app implies the existence of magically new “on-demand” efficiencies (just push a button and your car appears).

    Highlighting the app also implies that Uber is a “technology company” that has completely “disrupted” industry economics, and is not simply a traditional company like Domino’s Pizza that is utilizing smartphone ordering. Needless to say, none of these articles are written by anyone with actual expertise in ecommerce or urban transportation, and none provide any evidence supporting the claim that the app represents breakthrough technology that gives Uber a powerful competitive advantage.

  • Can Uber Ever Deliver? Part Four: Understanding That Unregulated Monopoly Was Always Uber’s Central Objective
    From its earliest days, Uber’s investors and managers have always recognized that investor returns would require global industry dominance, and the elimination (or effective nullification) of longstanding laws and regulations designed to protect competition, and to protect consumers from the risks of anti-competitive market power[1]. This presumes that urban car services can be turned into a “winner-take-all-game”, where the winner can earn sustainable rents once quasi-monopoly industry dominance has been achieved. Dominance would also allow Uber to leverage its platform in order to expand into other markets that it could not otherwise profitably enter.

Sunday, December 4, 2016

Who says chess is boring?

Check out this marvelous short video on Michael Aigner's site: Tal Meets Qh6 and Carlsen Wins.

Tal, in this case, is not Mikhail Tal, the great Latvian genius who was world champion when I was born, but Tal Baron, the wonderfully-talented young Israeli Grandmaster.

Saturday, December 3, 2016

Keeping up with da netz

Hey, isn't it the holiday season? Aren't things supposed to be quieting down around now?

Apparently not...

  • Infrastructure Update: Pushing the edges of our global performance
    It can take up to 180 milliseconds for data traveling by undersea cables at nearly the speed of light to cross the Pacific Ocean. Data traveling across the Atlantic can take up to 90 milliseconds. This travel time is compounded by the way TCP works. To establish a reliable connection for uploads, the client initiates what’s called a slow start. It sends a few packets of data, then waits for an ACK (or acknowledgement), confirming that the data has been received. The client will then send a larger group of packets and await confirmation, repeating this process until ultimately transmitting data at the user’s full available link capacity. Given the limitations we encounter here—the distance across the Pacific Ocean, and the speed of light—there are only so many optimizations we can make before physics stands in the way.
  • Slicer: Auto-sharding for datacenter applications
    What exactly is Slicer then? It has two key components: a data plane that acts as an affinity-aware load balancer, with affinity managed based on application-specified keys; and a control plane that monitors load and instructs applications processes as to which keys they should be serving at any one point in time. In this way, the decisions regarding how to balance keys across application instances can be outsourced to the Slicer service rather than building this logic over and over again for each individual back-end service. Slicer is focused exclusively on the problem of balancing load across a given set of backend tasks
  • QCon NewYork 2016: The Verification of a Distributed System
    Distributed Systems are difficult to build and test for two main reasons: partial failure & asynchrony. These two realities of distributed systems must be addressed to create a correct system, and often times the resulting systems have a high degree of complexity. Because of this complexity, testing and verifying these systems is critically important. In this talk we will discuss strategies for proving a system is correct, like formal methods, and less strenuous methods of testing which can help increase our confidence that our systems are doing the right thing.
    (Don't miss the awesome list of reference material!)

  • An Approach to Designing Distributed, Fault-Tolerant, Horizontally Scalable Event Scheduler
    For the processing part, a master is elected among the cluster members. Zookeeper could be used for leader/master election, but since BigBen already uses Hazelcast, we used the distributed lock feature to implement a Cluster Singleton. The master then schedules the next bucket and reads the event counts. Knowing the event count and shard size, it can calculate very easily how many shards are in total. The master then creates pairs of (bucket, shard_index) and divides them equally among the cluster members, including itself. In case of unequal division, the master tries to take the minimum load on itself.
  • Hazelcast is the leading open source in-memory data grid.
    If you have programmed applications in Java, you have probably worked with concurrency primitives like the synchronized statement (the intrinsic lock) or the concurrency library that was introduced in Java 5 under java.util.concurrent, such as Executor, Lock and AtomicReference.

    This concurrency functionality is useful if you want to write a Java application that uses multiple threads, but the focus here is to provide synchronization in a single JVM and not distributed synchronization over multiple JVMs. Luckily, Hazelcast provides support for various distributed synchronization primitives such as the ILock, IAtomicLong, etc. Apart from making synchronization between different JVMs possible, these primitives also support high availability: if one machine fails, the primitive remains usable for other JVMs.

  • New – AWS Step Functions – Build Distributed Applications Using Visual Workflows
    Today we are launching AWS Step Functions to allow you to do exactly what I described above. You can coordinate the components of your application as series of steps in a visual workflow. You create state machines in the Step Functions Console to specify and execute the steps of your application at scale.

    Each state machine defines a set of states and the transitions between them. States can be activated sequentially or in parallel; Step Functions will make sure that all parallel states run to completion before moving forward. States perform work, make decisions, and control progress through the state machine.

  • Performance improvements in bcachefs-testing
    btree nodes are log structured, with multiple sorted sets of keys. In memory, we sort/compact as needed so that we never have more than three different sets of keys: the lookup and iterator code has to search through and maintain pointers into each sorted set of keys, so we don't want to deal with too many. Having multiple sorted sets of keys ends up being a performance win, since the result is that only the newest and smallest is being modified at any given time, and the rest are constant - we can construct lookup tables for the constant sets of keys that are drastically more efficient for lookup, but wouldn't be possible to update without regenerating the entire lookup table.
  • Probabilistic Data Structure Showdown: Cuckoo Filters vs. Bloom Filters
    Probabilistic data structures store data compactly with low memory and provide approximate answers to queries about stored data. They are designed to answer queries in a space-efficient manner, which can mean sacrificing accuracy.

    Like Bloom filters, the Cuckoo filter is a probabilistic data structure for testing set membership. The ‘Cuckoo’ in the name comes from the filter’s use of the Cuckoo hashtable as its underlying storage structure. The Cuckoo hashtable is named after the cuckoo bird becauses it leverages the brood parasitic behavior of the bird in its design. Cuckoo birds are known to lay eggs in the nests of other birds, and once an egg hatches, the young bird typically ejects the host’s eggs from the nest. A Cuckoo hash table employs similar behavior in dealing with items to be inserted into occupied 'buckets’ in a Cuckoo hash table.

  • Building robust software with rigorous design documents
    So what, exactly, goes into a design document for a problem domain? What makes these docs so detailed and rigorous? I believe that the hallmark of these designs is an extremely thorough assessment of risk.

    As the owner of a problem domain, you need to look into the future and anticipate everything that could go wrong. Your goal is to identify all of the possible problems that will need to be addressed by your design and implementation. You investigate each of these problems deeply enough to provide a useful explanation of what they mean in your design document. Then you rank these problems as risks based on a combination of severity (low, medium, high) and likelihood (doubtful, potential, definite).

  • How Google Is Challenging AWS
    Still, for all the success Microsoft has had with Office 365, the real giant of cloud computing — which is to say the future of enterprise computing — is, as is so often the case, a company no one saw coming: the same year Google decided to take on Microsoft Amazon launched Amazon Web Services. What makes AWS so compelling is the way that it reflects Amazon itself: it is built for scale and with clearly-defined and hardened interfaces. Customers — first Amazon but also companies around the world — access “primitives” that can be mixed-and-matched to build a more efficient, scalable, and secure back-end than nearly any company could build on its own.

    ...

    Where Kubernetes differs from Borg is that it is fully portable: it runs on AWS, it runs on Azure, it runs on the Google Cloud Platform, it runs on on-premise infrastructure, you can even run it in your house. More relevantly to this article, it is the perfect antidote to AWS’ ten year head-start in infrastructure-as-a-service: while Google has made great strides in its own infrastructure offerings, the potential impact of Kubernetes specifically and container-based development broadly is to make irrelevant which infrastructure provider you use. No wonder it is one of the fastest growing open-source projects of all time: there is no lock-in.

  • 52 things I learned in 2016

A map of and for the times

I find myself unreasonably obsessed with The Unscientific Bay Area

Mapping today is dominated by data freaks, obsessed with being scientifically rigorous and statistically significant. But as a data freak I’ve come to realize that not all maps have to involve equations. I want to take a break, be a little unscientific, and put the human element back on the map. Ultimately, cities and neighborhoods are collections of people, and I wanted to map their experiences. As it turns out, these unscientific maps are just as charming, thorough and thought-provoking as any other.

If you load the PNG file for the map into your browser, you can zoom in and scroll around.

And you can lose hours trying to reproduce the process that Trubetskoy must have followed, wandering around Urban Dictionary to find pages like Oakland

City east of SF Bay, aka "tha town". Separated into 3 parts (North, West, and East Oakland). There is no south. North Oakland is the hills. West Oakland has downtown, lake merritt, chinatown, and jack london square. East Oakland has the airport, coliseum, and the zoo. Deep East Oakland is where you can find the sideshows, people actin' a fool and gettin' hyphy, goin stupid doo doo dumb retarded, smokin perk and chewy, sippin' on some heem or yak, and slappin' hard in they box chevs.

(Looks like Trubetskoy mistakenly coded that as "The Town".)

"There is no south", indeed; that direction leads to my home, accurately described as "increasingly yuppie.".

Many of these jargon terms are completely unfamiliar to me. For example, Fruitvale has always been called Fruitvale to me (though I'm an oldster, not hip at all). I've certainly never heard it called East Side Oakland (ESO), though perhaps that term is describing the area where 98th meets East 14th, a bit farther away.

My son will be (perhaps) excited to know that he lives in Haystack, "the heart of the bay"

The city of Hayward, California. It is known as the "heart" of the bay. The city was founded by a man named William Hayward, who came to California to seek his fortune in the California Gold Rush (Began in 1848, I believe). He bought some forty acres from some Rancher, and in a few years sprouted into a town. Was at one point misspelled into "Haywood". Haystack is a slang term when refering to this city.

Person A: I live in tha Haystack
Person B: Um...?
Person A: Hayward
Person B: Where is that?

And I'm sure my daughter would agree that Surf City is indeed known for "awesome local bands."

Anyway, it was an inspired idea, thanks for putting the beautiful map together!