Building a Moderately Functional Web App

Posted in Python, Web Publishing on October 9th, 2018 at 07:07:56

This weekend, I built a moderately functional web app. I’ve done this before, of course — I used to work in web development back in The Before Times — but this is only the second app I’ve built in 5-6 years, and it included some new things I haven’t done before! So, in no particular order, here are some things I learned. (Many of these things may have been true for a decade or more; that doesn’t mean that I didn’t just learn them!)

  • If you intend to do anything with media queries, it seems that the common knowledge is that you *must* include a specific viewport meta tag: <meta name="viewport" content="width=device-width, initial-scale=1.0"/>. Without this, things work fine on desktop browsers, but fail on mobile browsers. This does not make sense to me, but there it is. (Thankfully, they at least also fail in Chrome’s mobile device inspector mode, so it’s actually possible to debug.)
  • mod_wsgi has a python-home directive that allows you to specify the virtualenv that you would like to use to run your particular application. This is useful if you are using virtualenv to package up your dependencies; it means that you don’t have to mess about with weird path includes in order to get your virtualenv working in your Apache webserver.
  • localStorage seems to work by default across major browsers at this point. This means that I was able to store information locally without any magical … anything. For minimizing server-side storage entirely, this seems cool and good to know. localStorage is available in the default Javascript scope, and has two functions: getItem('key') and setItem('key', 'value').
  • If you have a div with contenteditable set, by default it appears to have a height in Safari and Chrome, but not in Firefox; so make sure you set a min-height on the element in Firefox.
  • CSS flexbox support has been available in every major browser for years. This means that you can actually horizontally and vertically position elements without using tables. This is amazing to me. (In fact, out of desparation, I briefly attempted to use a <table>, only to find it screwed up my layout more — and that CSS flexbox was *easier* than using a table for what I wanted.) This is pretty amazing to me.
  • If you are using a contenteditable field, then the following will ensure that when you paste into the field, it is pasted using plain text. (This is necessary in Safari; not in Chrome, not sure about other browsers.) I haven’t thoroughly tested how cross-platform this snippet is.

    document.getElementById('input').addEventListener("paste", function(e) {
    // cancel paste
    e.preventDefault();

    // get text representation of clipboard
    var text = (event.originalEvent || event).clipboardData.getData('text/plain');

    // insert text manually
    document.execCommand("insertHTML", false, text);
    });

  • pusher.com is a quick way to get support for a moderate size of websocket connections (100 active connections; 200,000 daily messages) supported by a wide variety of push + receive client libraries, with almost no work. It honestly feels a little bit like magic; as someone who had been putting things off specifically because of the pain that is *either* polling or running a websocket service, this was really quite nice to see. Also supports posting out received messages via webhooks for clients that might want that instead of websockets. I expect that if I ever reach that level of scale, I’ll probably just set up my own websocket server rather than pay the $50/month for the next tier, but for a getting started, this was really useful. I started with this guide on building a chat app in Javascript and found that it was easy to get started with and to modify, since it only has around 30-50 lines of code.
  • I probably need to bite the bullet and start moving towards Python3, even though I don’t really care about it. This is annoying as my gap of 3-5 years since I built new apps has left my server environments atrophied and weak.
  • People really prefer a “dark” theme to a light theme in the social spaces that I run in. (I’m surprised that Facebook doesn’t have a dark mode yet.)
  • Modern browsers continue to change constraints — on things like autoplaying videos, third-party cookie restrictions — in ways that are likely good for privacy and user experience, but break older apps without much way to fix it and with user control over those changes minimized. Old apps that worked fine are now non-functional because of these restrictions.
  • If you try to copy a virtualenv from a different machine, you get *weird* behaviors. Also, if you’re creating a virtualenv, the first thing you want to do is probably upgrade pip. (Turns out that when the pip you’re using doesn’t support modern dependency descriptors, you also get really weird failure modes!)
  • I really miss the handiness of Google’s auto-formatting facilities when writing code. Everything I’ve written this weekend is indented poorly, and it’s frustrating.

Anyway, starting around midnight on Sunday until early Monday morning, I built myself an app; it includes synchronized viewing of YouTube playlists, plus a completely built-from-scratch chat app that is moderately functional and improves in a lot of ways over YouTube chat for the use case I have. I built media queries that let the UI actually work on a mobile device, and it actually looks halfway decent. I didn’t have to use much in the way of browser-specific hacks (modulo comment on min-height in Firefox).

That’s a pretty cool experience.

Moulin Rouge: The Musical – A Sensual Ravishment

Posted in default on August 12th, 2018 at 12:09:32

When describing the story-within-a-story of the original Moulin Rouge, a character describes it as “a magnificent, opulent, tremendous, stupendous, gargantuan, bedazzlement” — a series of adjectives that apply equally well to the stage adaptation currently playing at the Emerson Colonial Theater in Boston.

Moulin Rouge set at Emerson Colonial Theater

The show lives up to the standards set by the 2001 movie musical, engaging in a series of back to back musical mash-ups while the ensemble cast takes the stage, moving in more directions than can be counted at any given time. From the opening scenes, the audience is subjected to an overwhelming collection of bright lights, colorful costumes, and incredible choreography, moving the two dozen or so cast members around the stage in coordination.

The storyline wasn’t particularly original in 2001, and there’s nothing much changed in the musical adaptation: Christian [Aaron Tveit] is an aspiring songwriter from Ohio, come to seek love in the Parisian streets of Montmartre. After meeting Toulouse-Lautrec [Sahr Ngaujah], he heads to the Moulin Rouge to meet the lovely Satine [Karen Olivo], and convince her to help them put on a show at the Moulin Rouge. Together, they convince the club’s owner, Harold Zidler [Danny Burstein] and their financier, The Duke, who seeks Satine’s sole affections. Love triangle ensues, the show must go on, etc. etc.

The musical numbers are stunning, and performed amazingly well by the characters. Christian and Satine both provided amazing range to the eclectic mix of songs, from the Sound of Music to Elvis to Gaga. While a wide range the hits are brought back from the movie, a number of more modern tunes are brought in as well; adaptations of everything from Adele to Lady Gaga to the White Stripes. Fans of the original will find plenty of nostalgic callbacks, but the surprise mixing in of newer tracks clearly provided a new audience with plenty to look forward to. Finding a transition from spoken word or previously used track to a remix of an unexpected song often provided a chuckle of realization from the audience. Even old favorites, like the “Diamonds are a Girl’s Best Friend” mix brought forward from the movie, are updated with new tracks: in this case, bringing in additional notes from Beyonce’s “Single Ladies”. And the original ensemble numbers were among my favorite parts of the show: the “Bad Romance” flavored piece at the beginning of Act 2 (featuring not just Gaga, but a mix of 4 others, including Britney Spears “Toxic”) was an amazing set of visuals, and started Act 2 off with a bang.

Zidler, as our showman for the evening, leads us through much of the story, and plays more of a comic role than he did in the original. While in 2002 or 2003 I might have found this upsetting — my romantic streak let me put entirely too much importance in the Bohemian ideals espoused by the movie to let it be spoiled by explicit comedy — I felt it was a perfect fit. (The reality is that the story behind Moulin Rouge is slightly more vapid than I really would have granted in the past.) The note of comedy plays out throughout the show, and I think gives the production a different taste that makes it more enjoyable for the stage production.

The sets were incredible. It’s clear that I’m no theater expert, but I found them to provide absolutely stunning visuals; in some cases playing absolute tricks of the eye, providing a depth I wouldn’t have expected possible in a stage production. Again, the call backs to the original abound: the dressing room inside an elephant provides many of the same accoutrements as the movie, down to the heart shaped window looking out on the streets of Paris; the apartment in Montmartre providing an aesthetic that matched the intent. (A more professional reviewer in the Boston Globe does say “The production is as slick as it gets … Derek McLane’s sets are extravagant, ever-changing with a whimsical appearance of the Eiffel Tower” — so I guess it’s not just me.)

The costumes were beautiful and ever changing, but all provided a sexual energy, matched by the choreography of the show. From the pre-show opening, with corseted dancers engaged in sensual contact as cage dancers, to the all-male can-can line at the very end, you’re intended to be overwhelmed by the visuals presented.

The show was spectacular, and as Zidler predicted years ago: I came out of the show “dumb with wonderment”. With enough callbacks to the source material to cover all the nostalgia I need, while maintaining a taste of new mixed in throughout, I came away overwhelmingly pleased with the experience. As an entrée into the world of pre-Broadway musicals, I couldn’t be happier with this show.

Moulin Rouge runs at the Emerson Colonial theater through August 19th.

Where to Post? The Dilemma of Building Connections in the Modern Web

Posted in LiveJournal, Web Publishing on August 2nd, 2018 at 02:10:16

So, I have something I’d like to write a series of posts about. They would be longish-form text with a few images tossed in.

In the old days, I would have just set up a LiveJournal (now: Dreamwidth) account, and posted to that. I might have sent links around to my existing friends, though in this case, my imagined target audience is different than my existing friend group, so I might not have cross-posted links.

But the thing is: Part of the reason I want to write is because I want people to find the content and respond. And I’m no longer sure how to build up those connections — and so I imagine myself leaning on the crutch of recommendations algorithms. “Oh, I should make a Facebook page!”, I think — because if it’s on Facebook, maybe people who I don’t tell about it directly will know.

But of course, that’s mostly bullshit: Absent bringing a starting audience with you, most social media platforms don’t provide you a magic discovery mechanism where you’ll be found by others; there really is no difference between any of these platforms on that front.

I run through this all the time: Do I go with tumblr? With Facebook? With Medium? With Dreamwidth? Where am I going to get the most shares? Is this content better for one platform than another? Etc. etc.

I’m not sure what changed. Is this something that changed in me: Do I feel more intimidated and scared to reach out to new people? Am I unwilling to do the work and engage meaningfully with relevant communities?

Is it something that changed in the world? Is it harder to get people to click through to a link that isn’t on Facebook these days? To read the article, rather than a 27 tweet long thread?

I don’t know how I got to where I am, but I do know this: There are a number of things over the years where I have tried to write them and never felt like I found a good home for them. I wanted some feedback, some sense of connection from them… and never came to the conclusion on where I might get it from.

It feels like a step back from where I was a decade ago, and I wish I knew how to move on from it.

RAICES: Why a Bond Fund was a Great Fit For Massive Donations

Posted in default on July 22nd, 2018 at 12:28:29

Over social media over the past several weeks, I have noticed a lot of people upset about RAICES donations being used to fund the bonds of many detained refugees incarcerated in ICE facilities. I think that this frustration — while understandable — is fundamentally flawed, and wanted to share why I think that what RAICES is doing is exactly what they should be doing: that is, paying bonds directly to DHS is not some turnaround or publicity stunt, but rather, this is RAICES doing exactly what they said they would do.

Some background: RAICES is an immigrant advocacy legal org. They work with local lawyers to help provide legal support for immigrants, and in that role they provide a number of services, including paying bonds for some of those they work with. Prior to this year, they were relatively small — managing a few hundred thousand in annual donations — but recently saw a huge uptick in donations as the result of a number of highly visible public donations campaigns. In total, they received more than 20 million in donations in a period of just weeks — an absolutely enormous amount of money for a small organization like theirs to manage.

If RAICES was not a bond fund, these funds would languish for a *long time*, because managing millions of dollars of funds — something like 20x their previous operating budget! — is logistically a nightmare. (For example, a hurricane-related fund last year received $35M in funds targeted for use helping hurricane victims recover in Texas … and have managed to spend only $12M of it, with $23M languishing in an account that practically speaking may never be sent.) Most organizations are not set up to receive this much money! But thankfully, we all got lucky that this *one* singled out organization is so goddamn perfect for a ton of cash: paying bonds for people is literally the best way to ensure that they are reunited with their families.

Bonds are not actual money that goes to the government to keep. That is, the money paid to DHS does not somehow line the coffers of those imprisoning immigrants permanently: instead, the bond is a surety to make sure that the person in question gets to court, and is repaid by the court once they show up. For refugee cases, something like 97% of these cases do. And once they do that money goes back to RAICES… which can use it again for more immigrants.

The campaign page on Facebook was very clear about the intent: Quoting from a Guardian article on the topic, “The campaign page said all money raised was going to “directly fund the bond to get parents out of detention and reunited with their children while they await court proceedings””

Slate reviewed this effort in the midst of this massive amount of fundraising: Why Even Viral-Fundraising Skeptics Can Feel Good About Donating to RAICES. The article called this out as an absolutely lucky break in our furor of fundraising: This bond fund will not only serve to immediately get thousands of parents out of ICE detention and reunited with children, but this bond fund will likely serve to help ensure that not just the current batch of people, but thousands more every 3-6 months will be able to be reunited with family, not having to spend time in ICE facilities completely unnecessarily. And that’s the reason why I continued to encourage people to give money to them.

I’m sorry some people didn’t read the campaign they were giving money to, or felt tricked, but this bond fund is just an extremely excellent use of this money, which is going to help detained immigrants for years to come. We realistically couldn’t have found a better way to directly help those affected by such a program than this.

What Makes a Nerd? Passion.

Posted in Drone, Social on May 19th, 2017 at 06:34:42

While at the park flying the other day, one of the swarm of kids who came up to me was super interested in looking at the drone and asking how it worked. This isn’t new: kids love the drones, though this kid was one of the hyper-enthusiastic bent rather than the more shy/reserved ones who watch from a distance. My wife asked him if he was going to be interested in being a nerd in the future.

Now, this kid was in 3rd grade. The correct answer to that answer is “No” — in third grade, nerd is a pejorative. So I was unsurprised to hear him say “No, I’m not going to be a nerd when I grow up.” His reaction was entirely in line with what I’d expect from anyone his age asked that question.

My lovely wife followed up with the typical question: “Ah, what do you want to be when you grow up?” This is a totally typical question that I will ask to the kids who are interested in my drones; typical answers vary, but I’ll often get “video game developer” or “computer programmer”; since sometimes they know I work for YouTube, “I want to work at Google/YouTube” isn’t all that uncommon. These days, these pursuits are all pretty mainstream (at least among the typical “white upper-middle class 3rd graders living in Cambridge, MA” who I typically run into with these answers). But I was a bit amused to hear his answer:

“A geologist.”

At this, Jess and I both started chuckling: Oh, I’m not going to be a nerd when I grow up, I’m going to be a geologist!

The kid looked at both of us laughing and was confused. “What’s so funny?”

I responded: “Well, to me, being nerd is largely about being passionate and excited about som…”

He interrupts: “Oh! Yes, then I’ll definitely be a nerd when I grow up.”

(The rest of the sentence was going to be “about something, especially technical pursuits or scientific pursuits”; though you can be a nerd about just about anything, to me it’s strongly associated with unique scientific explorations.)

The eagerness with which he was willing to commit to being passionate about his interests — interrupting me in order to do so — was charming. Given his overall attitude, it was no surprise to me, of course: this is someone in whom I could recognize a more bold version of myself. (Despite my attitude later in life, in third grade, I was somewhat reserved, having felt myself be crushed under the heels of terrible behavior of kids at that age.) He was excited and enthusiastic and passionate was a great word to describe his interest.

A nerd is passionate. Whether it’s about drones, or computers, or geology or sewing; whether it’s about family history or library science or chemistry: passion is what makes the difference. Whether you’re in third grade or 30 years old: Find your passion. Find your way to be a nerd.

Some YouTube-related Forms

Posted in YouTube on August 16th, 2015 at 19:35:30

If you ever see a video, and you’re like “Why is this watch next recommendation from YouTube so crappy?!”, then you should fill out this form for bad watch next suggestions.

If you ever see a video, and you’re like “Holy crap, it’s like I’m watching a dithered display from 2002 in here; these blocky artifacts are terrible!”, then you should fill out this form for bad video quality.

Feel free to pass these on.

Hawk vs. Drone: Fair Use and Copyright

Posted in default on May 8th, 2015 at 07:02:36

So, I have a popular YouTube video. (It’s not that popular anymore, but it was once.)

YouTube recommended I watch a video: Drone Crash, Fail & Win Compilation 2015, Part 3/3 (watch in 1080p).

So, I watched it, and was somewhat surprised to see a video I recognized in it: mine.

Now, this particular video is not licensed under a Creative Commons license. (The reason for this is that I have seen plenty of evidence that people misunderstand what creative commons *means*, and don’t bother to attribute — sometimes properly, sometimes at all — and I didn’t want to have to argue about it with people who were ripping off the video for their own personal profit.) This means that if someone wants to use the video in a way that isn’t allowed by fair use (or some other portion of copyright law), they need to obtain a license. Some people have obtained a license. In other cases, I’ve been able to convince people who were hosting the video themselves to instead embed the YouTube video. (All of the ad proceeds from the video are donated to the Mass Audubon Society, so this matters to me more than it otherwise would: I feel a responsibility to maximize the money that is donated because of this video..)

In the comments on the compilation video, someone said: “He has just stolen all the clips from other peoples videos without even asking them first. Only Creative Commons videos are free to use so its copyright theft!”

Now, this misunderstands the way copyright works a little bit — Creative Commons videos aren’t ‘free’ to use in the sense of freedom, they require specific requirements that still need to be met — but it’s generally reasonable: Reusing someone’s copyrighted content without a license *may be* copyright theft. But it isn’t when such use is allowed under fair use. (There are other cases too, but I think fair use is the most straightforward claim in this case.)

So, to that end, I replied with the following analysis of whether the 12 seconds of my video used in this compilation was a violation of my copyright. I welcome comments or feedback on ways in which you disagree with or support this analysis.


In the US, 17 U.S.C. § 107 defines a 4-prong test for determining whether something is fair use. In particular:

Purpose and character of the use: ‘whether the art aims to only “supersede the objects” of the original for reasons of personal profit.’ I don’t think that putting all these clips together creates a meaningful work of new art, and that it would fail the test for Purpose and Character of the use. This is not an educational video; there is no commentary; it’s done in no way other than to get eyeballs. (If there were no ads on the video, one could at least claim it wasn’t commercial in nature, which would act in its favor, but there are ads.) That said, the combination of all of these shots together certainly puts some pieces in a different light; that is, there is some creativity being applied. I don’t think it crosses the line

Nature of the copyrighted work: This is not documentation or news footage; it is not the case that the nature of the work is special in a way that would allow it to be meaningfully protected under fair use, as far as I can tell.

Amount and substantiality: This is the real question, and varies a lot depending on the video. For the Burj Khalifa video, there’s only ~2 seconds of video, and I would argue it could be reasonably said that this isn’t the substantive portion of the work. However, for the Hawk vs. Drone video (which is mine), the 12 seconds of selected video very much are the substantive portions of the video — in particular, that specific chunk of the video was exactly the same 14 second chunk of video that a national Nightly News station paid $850 for a license to. Since the Grand Upright Music, Ltd. v. Warner Bros. Records Inc. case in 1991, there has been a massive move towards licensing for music sampling, and this fits a similar role: I think that for some of these videos, there is clear evidence that the amount and substantiality prong is failed by this video.

Effect upon work’s value: I think this one is probably the one that this video succeeds in the most. Specifically, I think that this compilation video does not infringe upon the value of any of the works it has taken from in a serious way. In particular, I don’t believe that anyone who is a likely viewer of my video would say “Oh, I’ve seen the hawk video as part of this compilation; now I’m done.” That said, I think this prong could be minimized even further by including links back to the source videos in the comments: If the creator had done that, I think that the expectation would be that the overall effect would be even less substantial. The most significant video might even be mine — it is one of the longer clips, and it is certainly one that contains the most of the relevant content. (The original source video was only 30 seconds long in the first place — and the other 18 seconds were pretty boring.) With that being the case, I think that it could be argued that this video does not have a meaningful effect upon the work’s value, and might be acceptable under fair use for that reason.

Taken in sum, I think that the video is right on the edge of a Fair Use claim; I think that this could be further improved by the creator by removing ads, and linking to source videos in the description of the video. As is, I have personally considered and rejected the idea of submitting a DMCA claim for my copyrighted content which is contained in this video, because I think that content of this type should be allowed under fair use, even if our current courts would take a protectionist view towards this content in particular. Compilations like this rarely detract from the value of the original work: they create new value in their combination.

Of course, reasonable people may disagree on several of these points.

FAA Enforcement Could Cost You

Posted in default on January 8th, 2015 at 09:07:51

The FAA’s ability to enforce civil penalties against safe flyers of UAV craft has not yet been tested in court, but don’t take this to mean that flying drones commercially is without risks: even in cases where the FAA isn’t assessing fines, handling the legal side of an FAA investigation can be a long, drawn-out process that can cost you lots in attorney’s fees.

With the advances in unmanned remote controlled craft over the past couple years, a massive industry of new photographers has sprung up. Even with a strongly stated position from the FAA that commercial flying is against Federal Aviation Regulations (FARs), there are many businesses in the US that continue to use drones for photography. Some do this knowing that there is risk, while some eschew the risk, taking the approach that safe flight is not within the realm of enforcement of the FAA for remote control model aircraft.

Even if the FAA has no power to enact penalties for a particular operation, that doesn’t mean that the flight is risk free, from a business perspective. In the ongoing case of “Michael Huerta, Administrator, Federal Aviation Administration v. Skypan International Inc.”, the FAA is pursuing Skypan for failing to meet the terms of a subpoena (original petition, exhibits). Unlike in any other case that has been publicized, however, this case is one where the FAA has no evidence that the flight was in any way unsafe, other than it took place inside New York City’s Class B airspace (approximately 5 miles from LaGuardia airport).

Over the past year, Skypan International has filed more than a half dozen motions related to responding to this subpoena, regularly producing documents that they feel are meeting the FAA’s demands, and being repeatedly called to task by the FAA for failure to meet with the demands of the subpoena. In the latest bout, the FAA claims that Skypan International has failed to the extent that they are in contempt of court for their failure to produce documents associated with the subpoena. Overall, more than a year has passed, with presumably dozens or possibly even hundreds of hours of legal time spent both on complying with, and responding to requests from, the subpoena from the FAA, from an organization which felt it was cooperating with the FAA!

As part of the continuing case, Skypan did attempt to claim that since the FAA had no regulatory power to assess the fines it was considering, it was unreasonable to request the documents as part of the subpoena; this was not successful, as the FAA (reasonably) argued that as part of an investigation, requesting documents to figure out whether anything *did* take place under their regulatory authority is part of their job.

A number of people flying under the “Fly Safe, and Keep Flying” approach. This is a reasonable approach for most people: the risk of FAA enforcement action in most cases is pretty slim. However, even if flying safely, as a commercial organization, there is still risk to any flight for commercial purposes of FAA investigation — which, even without penalties, can be a costly endeavor.

There is one upside at the moment. The pending case in DC Circuit Court against the FAA for their overly broad “Interpretation of the Special Rule for Model Aircraft” is currently held in abeyance at the request of one of the petitioners — which is itself a problem, slowing the potential response from the FAA to this legal challenge. However, as a component of the abeyance, the court has ruled that: “In the event the agency starts enforcing the rule challenged in this proceeding – “Interpretation of the Special Rule for Model Aircraft,” 79 FED. REG. 36,172 (June 25,
2014) – before considering and disposing of the comments it solicited, petitioners may request appropriate action.” (abeyance order). In short: If the FAA chooses to pursue further activities under the interpretation from June, the abeyance can be set aside, and the case against the FAA will proceed. This is hardly an ironclad agreement, but it seems unlikely that this is in the FAA’s best interest, and it is unlikely that they would choose to do so absent extreme cases.

Fly safe, but be aware: No amount of commercial flying is without risk of potential investigation from the FAA.

(One of the best sources of kibbitzing on drone-related legal topics that I have found is the UAV Legal News and Discussion Facebook group (somewhat to my surprise). In this group there are many of the experts in the field, from lawyers to journalists investigating the FAA’s actions. I highly recommend joining the group if you’re interested on keeping up with legal-related drone developments.)

Learning new things

Posted in Software on December 3rd, 2014 at 00:06:07

One kind of sad thing about learning new things about software while working for Google: It is unlikely anything that you learn about specific tools outside of Google will be relevant to the tools you use for work inside, and vice versa.

In general, Google has a massive set of awesome tools for everything from deployment to monitoring; and a broad codebase with libraries that can do everything under the sun. However, that means that when you go outside of the Google environment, you’re suddenly stuck a bit out in the cold — the tools that you use inside Google can’t be used outside, so you have to have a completely separate infrastructure (both literal infrastructure, and code infrastructure).

This means that, contrary to prior experiences, where tools I learned on my own time could be useful to me at work, and vice versa, that isn’t true anymore.

In most cases, this is overall a positive thing. At the moment, I’m learning about ansible and vagrant, tools for spinning up VMs locally and provisioning them. However, my work at Google can’t really use this — Google’s toolchain and build/deployment process are totally different. In the other direction, I’ve been setting up monitoring of my services inside Google, but the massive monitoring infrastructure investment that that work is based in is completely unavailable outside of Google.

It’s not a big deal, but it does make the motivation to learn new things outside of Google a bit lower. It also likely contributes to the well-known artifacts of most people who disappear into Google no longer generating as much code outside of Google — once you live in a completely different environment which has some nice things going for it, the idea of learning new tools to replace what you’ve already got seems kinda silly, doubly so since you can’t re-use those tools for work.

On the “scale of things to be upset about at your job”, of course, this is a pretty minor complaint. 😉 It’s just something I realized while doing some experimentation with new tools: sharing my “new shiny” at work tomorrow isn’t really going to have the same effect it might have in the past.

Initial Warlords of Draenor Thoughts

Posted in World of Warcraft on November 23rd, 2014 at 23:24:29

Today, I started playing WoW: Warlords of Draenor.

After playing for two hours (just hitting level 91), I have to say that it certainly feels compelling: there was essentially no point in the story where I felt like the action stopped. I moved from task to task — helping defeat a massive army, unlocking some members of the Shadow Council, then moving on towards building a Garrison, and establishing a foothold in Shadowmoon Valley — without ever feeling like there was really a stopping point in the action. The quests almost never *felt* like the “Collect N items” variety — there was no point where I was running around lost in the woods looking for that one last kill.

The new quest markers — with world-visible highlighted objects to click on, instead of the old-school sparklies — was an interesting change, as is the outlining of targeted/hovered interaction targets. The Garrison building is interesting.

I will say one thing though: I still have no real clue what’s going on. Part of this comes from the way that I play — I’m pretty rarely one to read quest text, though I will typically try harder than average on my first play through. Still, even more so than usual, I’m a bit lost… like, I came through a portal, and then it was destroyed… but who are all these people who are already here? Are they just people who live here, or also people who came through the portal? Why are we setting up a base — is our goal to get back to the portal, or … what?

I think that I could make reasonable guesses at this, but as is often the case in WoW, I feel like I’m missing some key plot elements here that would explain what is actually going on.

Mechanics-wise, the Garrison functionality seems an interesting change, though I’m having a little bit of trouble following the mechanics. Marksmanship hunters seem like they’ve had a few changes, but so far the only real change I noticed is that somehow my keybinds got reset, so most of my buttons didn’t work; since I was kitted out in reasonably high-level gear before the expansion, killing things is mostly too easy to care about hitting multiple buttons, so I’ll have to learn those things at some point, but I haven’t yet. Also, I think my health is a lot smaller now? And the amount I hit for? But I assume that those are side effects of some kind of numbers change, and not based on any real relative performance change. (I heard an ‘ilevel squish’ was coming, but I really have no idea what happened, since I never paid attention.)

Anyway, I think it’s interesting enough to keep playing, but I wanted to write down my initial thoughts in the meantime.