ooh, I think I know the answer to this one

Via Orange Site, we have “Questions“. Specifically, this one:

Will end-user applications ever be truly programmable? If so, how?

Emacs, Smalltalk, Genera, and VBA embody a vision of malleable end-user computing: if the application doesn’t do what you want, it’s easy to tweak or augment it to suit your purposes. Today, however, end-user software increasingly operates behind bulletproof glass. This is especially true in the growth areas: mobile and web apps. Furthermore, not only is it getting harder to manipulate the application logic itself, but it’s also becoming harder to directly manipulate your data. With Visual Basic, you can readily write a quick script to calculate some calendar analytics with Outlook. To do the same with Google Calendar is a very laborious chore.

End-user computing is becoming less a bicycle and more a monorail for the mind.

As a consequence, we need ever more domain-specific software. Rather than use universal tools for handling charts and for manipulating data, we tend to use separate analytics packages for every conceivable application. This is not all bad. Domain-specific tools can maximize ease-of-use and help amortize the cost of complex, specialized functionality. Sublime’s built-in ⌘-T works better than every third-party Emacs package. Still, despite these benefits, the popularity of macros and browser plugins strongly suggest that users are smart and want more control.

Should we just give up on our earlier visions of empowered users or is a better equilibrium possible?

And I think I have at least one possible answer, so here goes.

Continue reading “ooh, I think I know the answer to this one”

Storytime: some of my worst interviews

I start my new job tomorrow, so I thought I’d write a little about some of the worst interviews I’ve gone through.

The worst of the worst (my fault edition):

I was interviewing as a junior sysadmin at a company located in Arlington. For some reason that utterly escapes me, I decided NOT to take the Metro from Vienna, but drive. This was not too long after I’d moved up to NoVA and well before there was such a thing as Waze or Google Maps. We had MapQuest but that still involved printing or writing down turn-by-turn, and had no notion of traffic or road construction.

As I said, at the time I’d basically never even been out of Fairfax “farther in” than the Vienna Metro stop (at the time, the most distant station for the entire suburbs and exurbs of NoVA). I had no idea about any landmarks anyone tried to give me.

I ended up in DC somewhere.

I was now doubly lost, because I needed to get out of DC and figure out how to get back to where I needed to be. I had no interactive maps or GPS and only a pre-Razr-era cell phone.

Also, related, it was summer and my car didn’t have AC and I was of course dressed up in a full interview outfit.

I managed to call them and tell them I got lost, which was sort of a bad way to start the interview but it did happen back in those days, so they were miffed but a little understanding.

Then, once I got near where I needed to be, I had to park. The closest parking I could find was over half a mile away or something. I was already incredibly late. I ran as hard and fast as I could in my stupid, uncomfortable interview shoes, and got there, something like 2+ hours past my appointed time. I was drenched in sweat, my feet where blistered from just a short jog, and I looked like a crazy person. The people who needed to talk to me had just bailed; clearly I was a fuck-up and not worth bothering with.

They gave me a glass of water and asked me some half-hearted question about Linux, and then thanked me for my time and escorted me out.

I didn’t get the job.

The worst of the worst (their fault edition):

I went through the interview process at a small web site that sells books and other merchandise. It consisted of a phone screen, a second phone screen with coding test, and then a final on-site coding test/culture fit/torture session.

In the first coding test, they FizzBuzzed me. Like literally gave me a test to do Fizz/Buzz/FizzBuzz. Opinions vary – some people claim it’s still a valid test – but I’ve done hiring of engineers and the only people who fail FizzBuzz are 1)morons or 2)people too lazy to do 5 minutes of searching for common programmer interview questions (which, if you think about it, are morons).

I guess I’m not a moron because I passed it and several other coding questions and got an on-site. Yay!

The instructions were simple: Arrive at 10, and you may dress casually (clean jeans and a decent shirt). I arrived early, as usual, and talked to the security guards to announce myself and tell them who my contact was. They called for them and I was told to sit down.

By 11 – after asking numerous times what the FUCK was going on – I was still just sitting in the reception area as numerous employees came and went. At around 11:30, someone came and fetched me, and escorted me to a huge conference room and told me to wait.

After another 30 minutes or so, a TV on the wall came on and someone started talking to me. It went very badly because whatever they were supposed to talk about, was based at least in part on some conversation I was already supposed to have had! So they tried their best and ended their portion of the interview, and said they would signal the next person to come and get me.

Still more time passes; it’s some time after noon and I was getting thirsty and hungry. Lunch was in theory on the schedule, but when?

Someone came to fetch me and was clearly, obviously, profoundly annoyed at having to do so. They then wordlessly carted me around several floors looking for someone to interview me. Everyone was incensed at the suggestion they stop their important day to talk to some asshole. Some of them had copies of my schedule for the day and were angry that it had been violated, and clearly were looking at me as the source of the problem.

I got bounced around a few tech interviews, and eventually managed to get a quick bite at their cafeteria. The tech interviews were, in my opinion, the worst type: they weren’t interested in how you thought, they just wanted to see how long it took you to get to the answer: “Given a string, find the longest palindrome, you have 30 seconds”. Several of the questions were so jive, I actually asked them, “is this a problem you’ve had to deal with in code before?” which further angered them.

I was already WELL over schedule and over, like, an hour and a half later than I was supposed to be there. I was a little tired, and a lot bewildered at the entire experience, and I had one more 45-minute whiteboard coding session to go. “Since you’re over, you could leave now, but it probably would make you score lower” was the official line. OK, fine.

Another angry asshole, another giant conference room with a whiteboard. He handed me a circuit diagram and wanted me to use OO to model the circuit and then implement it to produce the same, pictured answer.

I just stared at him. “This is a graph. It’s a directed, acyclic graph. You want me to model a DAG.”

“Yes, uh, I mean, model and implement whatever you think it is.”

I was furious. I was on time and had been treated like shit all day, and now this. “OK, answer me this. Is this a DAG? I think this is a DAG.” and I drew a quick sketch indicating the differences between cyclic and acyclic. “Am I even remotely right, here?”

He nodded and sorta grunted that I was. “Fine”, I said. “The next thing I’d do is hit Google to remind myself what the class model for a DAG looks like, because I’m tired and grouchy, every programmer I’ve ever met uses Google or Stack Overflow or even a file full of notes to do a lot of their work, and frankly my dude I have better things to do than this. I have correctly identified the problem which is, like, 90% of professional programming. I’m done. Thank you for your time.”

He looked like he wanted to hit me. He ran out and got someone. I was quickly escorted out without a word from anyone.

I didn’t get the job.

To save Twitter, we must destroy it.

So many people had an experience like this. Twitter was fun, fast, easy to use; and brevity is the soul of wit. If you were a programmer, you’d often learn a new platform or language by writing a simple Twitter client; and tons of really smart people were writing interesting software that took advantage of all the new toys in our toy box, with Twitter as the base.

Fun times.

It got even better, for a while. Twitter replaced RSS, for many; a scan of your feed let you know where your friends were, what important software updates were released, and everything else you could want.

Yeah, there was the Fail Whale and porno bots but it wasn’t any worse than we’d seen already. And we had the Arab Spring! People got work by telling jokes on Twitter. We had Weird Twitter and Scottish Twitter and …

But then came GamerGate, followed shortly by their brothers in arms the Alt-Right, and Russian trolls, and now the dullard in the Oval Office.

Fuck Twitter.

The best thing to do to “fix” Twitter is to leave. It’s a white supremacist web site. It’s not getting better.

The solution is already there. RSS is still good, and usable. You can support independent media, like many good podcasts, instead of supporting a company that thinks that giving more characters for racist bile is the solution.

Everyone bitches and moans about walled gardens and “closed platforms” and “you are not the customer, you’re the product”. So take the air out of their sails. Stop “microblogging” and write real thoughts. Read long-form journalism. The internet has given us the tools. Use them.

Everything is horrible

I started reading comics again, so naturally I wanted to do so on my iPad. Thankfully Comixology existed; I immediately began diving back in. Time passes, and Amazon scoops them up. 

It’s a natural fit, and if there’s one thing Amazon does well it’s selling things. So I’m excited! Except, everything is horrible, and Amazon begins botching the acquisition immediately. They launch a new app, to disable IAP: can’t have 30% heading to AAPL! Despite having all my previous (iTunes Store) purchases showing in my account on the web site and the new app, I can now only read them in the old app; downloading some titles isn’t apparently allowed. There is no FAQ about this. Maybe one day it’ll return. Nonetheless, it is unpleasant as a user to see my once streamlined, rock-solid buying-and-reading experience turned into something awkward and clunky. I mean, it doesn’t even use Amazon’s payments! I have to keep a separate CC on file with them!

iTunes continues to disappoint at every turn. My library is essentially unusable. There is no “reset iCloud Match” command, or way to manually say “you somehow have your shit all fucked up for this one song”. So I have playlists and albums with dupes that are greyed out and constantly have the “attempting to download” squared-circle, ratings are useless (entire albums marked 5-star, that I don’t even listen to much), and more. 

Watching shows I’ve purchased on iTunes via my Apple TV is an exercise in frustration. The most common scenario now is that in order to watch a show, you must take a circuitous route through the various menus in order to find it. Just going to it via the “home page” doesn’t work. It sometimes takes 10+ clicks to get the TV to admit there’s a show to watch.

This is, of course, when my super-fast Verizon FIOS connection isn’t being throttled to the point of uselessness. I’ve stopped watching YouTube, because there’s no point in even trying any more. The odds VZ will let the bytes down the pipe at a reasonable rate – enough to watch an animal be moderately cute for 45 seconds – are increasingly slim. 

I could go on. Numerous apps I once relied on – 1Password chief among them – are utter shit. An app we use at work did a major rev with corresponding upgrade fees, to the tune of $150 per seat, and won’t be fixing any of the bugs we have outstanding in v4. “Upgrade to v5 and maybe we’ll fix them”, we are told. 

There are people who think that Microsoft EOL’d XP because they are greedy. These people are very, very stupid. Microsoft gave everyone years of warning that it was going to happen; so shut up

In the mean time, look at the very real software (and hardware!) situation going on around you. The entire thing is garbage. Real software we use today is horrible: user interfaces for line-of-business apps feature puzzle-solving as interaction. Software reliability is less than worthless. Everything takes more money than is reasonable to just get a shitty, bug-ridden blob of bytes out the door. “The Cloud” solved none of this; except to make even experienced professionals more unhappy.

Things are horrible and, like most of life, one imagines it’s going to get a lot worse before it gets better. 


The Agony and the Ecstacy of OpenStack: This is how you die

Spleen Merchant

I have a confession to make: I’m horribly stupid, or horribly unlucky, or perhaps (probably) both.

I went to http://openstack.redhat.com/Quickstart and after freshly installing the latest CentOS (and giving it a complete yum update) I started on the steps therein.

It’s effectively 3 commands! And at the end you’ll end up with your own little 1-computer “cloud”. Or so I thought.

I made it as far as step 4 in the Running an instance docs before things went Tango Uniform. But it’s no big deal: the docs are wrong in that they omit a number of necessary configuration options, but that’s OK.

Sure, the error message is completely byzantine and meaningless to anyone who is not intimately familiar with OpenStack internals; but this is the cloud. You have to understand the minute implementation details of literally every byte crossing the delicate silicon cores of your machine.

(If you’re curious, the answer is the Fedora image referenced in the docs has to be spun up w/ a size larger than m1/tiny.)

Anyway this is far better than what would have been here, had I written this blog entry 3 months ago: getting images to spin up took edits of tons of files. For fun, check the Wayback Machine entry. The docs are still wrong, but at least the underlying platform isn’t shipping completely broken.

Eight Times Over Miss October

So now we’re far, far ahead of where we were: VM images can be downloaded off the web and started with a single click! No more tedious editing: that was the equivalent of selling a car that defaulted to leaded gasoline then telling the hapless owner to take it immediately to the mechanic so it can be converted to unleaded.

Networking doesn’t work, of course. The default configuration (via the `packstack –allinone` command you ran earlier) doesn’t work. I’ve tried it with so many configurations I can’t even remember: I recently threw away a moleskine full of notes because they were all contradictory, confusing, and probably meaningless.

What I know is that nothing works, and it’s got me so angry I can’t see straight.

Oh, sure, there’s lots of people out there who have operating OpenStack clusters. At least I assume so: I mean, our company has one at one of our offices. As far as I know we aren’t using it in a production capacity – a way to make money delivering goods and services to our paying customers – but we have one that boots and starts VMs and so on.

I don’t know anyone that has that, other than Rackspace proper. I do know lots of people spending huge amounts of effort trying to get this working.

But the “quick start” doesn’t even work; but like I said, I’m not very lucky and definitely not very smart. I’m sure lots of people have gotten it to work out of the box. All those posts here and here from people who can’t get a basic installation spun up are probably just doing insane things.

I just took a machine I’ve run Linux (and virtualization!) on for years, and tried to run the 4 commands the vendor told me would work. It doesn’t work, but I’m not very smart.

Electric Worry

People who think “cloud” isn’t here to stay, or that virtualization and clustering platforms like AWS and OpenStack and VMWare are some sort of fad, are way more stupid than I am. Look, it’s a thing.

It’s hard to look at platforms like OpenStack and not immediately say “this is a load of fetid dingo kidneys”, because industry heavyweights like Amazon have made cloud and virtualization and so on so fucking effortless.

Also yeah I just said Amazon, the book store guys, are an “industry heavyweight”. We live in a strange world.

Anyway everyone’s living in the shadow of AWS and so it’s hard to remember how many people sweated bullets to get us here.

That said: I mean this page has 2 entirely different command sets to do something, provides no indication which command to use (no “Am I running on nova-network?” or an even a hint to figure out just what you are using), and in any event typing in those exact commands doesn’t work anyway. I know this because I set up a machine to exactly mimic the setup in the docs, assuming that I was stupid and couldn’t transpose my network details in the command. It doesn’t work, but that’s probably my fault. I’m pretty stupid.

Pure Rock Fury

Before you say “The RDO spin is horrible! Use Ubuntu!” let me make a quick point. We work in the government and military spheres, and the only Linux you can really use is Red Hat (or CentOS), period, full stop, end of discussion.

(If you’re not sure what “end of discussion” means, then you’re one of those people who post on Hacker News are are irredeemably more stupid than me. Go post there if you have theories and ideas, so I can most efficiently ignore them.)

Our customers have interest in cloud and virtualization, thus my interest in RDO and making it work.

Moreover, since I’m very unlucky and probably very stupid, I don’t want to be the sole Subject Matter Expert on the topic of OpenStack. So using the platform everyone in the building is familiar with – RHEL and CentOS – just about everyone can pitch in and contribute. Which is useful, because I’m unlucky and probably very stupid.

Mice and Gods

I just wish it worked, and I don’t understand how and why it doesn’t, and I’m running out of energy to keep fighting it. But I can’t ever stop: The Powers That Be want it, and like I said if you think this isn’t the future, you’re nuts. So I have to keep fighting despite any indication that any of this will ever work in the way we want to.

Thanks for listening.

BREAKING: No one cares about privacy

Via Hacker News, we have this headline: “Facebook reveals friends list even when it’s set to private”. It’s yet another example of Facebook (et al) leaking information that results in something of a privacy breach.

Does anyone really care?

The answer is simple: no. No one cares.

The world is easily segmented into two groups:

  1. A very tiny group of people who value their privacy and do all sorts of weird things to protect it, like not using Facebook or G+ or whatever. They use some strange 3rd-party email Tor reflector thing, use OpenGPG to encrypt all their cat pictures, etc.
  2. Literally everyone else.

I don’t know of a single person who left Gmail (or switched their default search, etc) as a result of the whole NSA thing. I don’t know a single person who has ever said, “Facebook is a massive time-sink/drama magnet whose purpose is to enrich the bank accounts of those who own Facebook stock, so there’s no reason for me to be there”. I don’t know a single person who has ever said, “The default search experience on Duck Duck Go is good enough that I don’t need Google”. I don’t know a single person who has ever said, “I don’t mind ads for Google products and services on my default new tab page in Chrome”. I don’t know a single person who has ever said, “I gain massive benefit from social networking, so these sorts of privacy breaches are unfortunately part of reaping said benefit”.

In other words, no one cares. Privacy breaches don’t matter until it hurts you directly.

(Addendum: I have seen people on Twitter remark that they’re switching to DDG; however I’m a veteran of the first great Linux On The Desktop war, and for every person who cast Windows aside and boldly embraced the Penguin, approximately 100% were back on Windows as soon as the newest CoD game was out. So I don’t even believe those who boldly Twitter-protested their switch: odds are they got annoyed at DDG and quietly switched back to Google.)

It’s not that security researchers shouldn’t continue to look for them; it’s that the tech press act like they remotely matter one bit. They don’t. No one cares. File it away in the giant list of ways Facebook sucks ass, and watch Facebook’s stock price soar.

Simpler, but vulgar

Allow me to make a stronger, simpler, and far more vulgar point than this post:

Hacker News is awful. The “community” is mostly bored shitheads posting from work, or massively self-important assholes who are bitter their TODO app didn’t get into YCombinator after 15 tries. 

Twitter accounts like Shit HN Says could be 10x as content-rich if they wanted to. Most of the things posted on HN are just truly awful, in terms of a community of ostensibly technical people. 

You can see craven, callow, shallow, mean, bitter, obnoxious, stupid … the entire range of awful human interactions. Honestly, when’s the last time a HN comment really improved anything? Really made a strong contribution to your job, your hobby? 

As a community-curated link site, Hacker News has good stuff most of the time. As a place for community discussion, Hacker News is just You Tube comments with better grammar.

Translating the “Rails is DEAD!” talk to plain (?) English

So apparently a bunch of people woke up this morning and decided Rails sucks.

Let me translate some of this for you.

I’m becoming more and more certain that this means that Rails-style MVC frameworks on the server-side are going to end up being phased out in favour of leaner and meaner frameworks that better address the new needs of thick-client architecture.

Uh, yeah.

What that means is:

Part of the reason we have these monstrous frameworks is because at some point all software is just one giant if/switch around the seemingly endless list of bugs stemming from one of (client OS, client hardware, client browser, client plugins, deranged and clearly pants-on-head-stupid client workflows, and the vagaries of quantum physics.

But, because programmers think code rusts, and we love to rewrite the HELL out of it, we come up with new and exciting ways to do just that.

Much of the OP‘s complaints can be easily and succintly explained by simple things: IE6 is now dead, most browser vendors have some sort of agreement to not put us all though the same old BS browser war we went through last time. JavaScript is now a “first class” language and not an annoyance for “know-nothing” Web designers or inflicted on the company “rock stars”. Enough JavaScript exists “in the wild” that we have stable platforms to use to build apps.

So! It’s the trifecta of awesome rewrite-your-app time:

“Everyone’s settled on non-blocking IO as the only way to scale.” “Client-side tempting is where it’s at these days.” “We’ll less trouble since it’s all the same language and platform everywhere!”

Time to rewrite those apps!

Fast-forward 2 years when “I’m becoming more and more certain that this means that Node.js-style single-threaded engines with client-side logic are going to end up being phased out in favor of leaner and meaner megathreading frameworks that better address the new needs of the quantum-core architecture”.

An example of why Applescript is utterly awful and must be replaced

A while ago, I attempted to resolve the problem in Safari’s Delibar extension, wherein it can’t do what the Chrome extension can: automatically put the selected text into the ‘notes’ field.

I failed.

In part I failed because of Safari, and the way it structures extensions. Briefly, Safari uses a sort of separation-of-concerns model, so what a particular piece of an extension can access varies. Getting the selection is really hard because you need to use proxying and messaging to communicate between the current page, the extension’s “page”, and any resources.

I gave up because it sucked and wasn’t fun.

I had another thought: use Applescript to get the selection and pass it to the Delibar app itself! GENIUS!

The tl;dr here is “Delibar isn’t scriptable” so none of this matters, anyway.

Safari’s Applescript dictionary doesn’t include the term “selection”. To the best of my knowledge, you cannot use Applescript to get the selection of the current tab. Oh ….. kay.

So, the next logical step is to use JavaScript, because I know it has the ability to get the selection AND I know that there is a ‘do JavaScript’ command in AppleScript for Safari. Now we’re cooking!

Here’s the relevant bits from the dictionary:


do JavaScript (verb) Applies a string of JavaScript code to a document.


and the example:


set theResult to do JavaScript unicode text ¬ in tab


Makes sense, right? Sure. So you’d pretty much imagine that it works just like this:

tell application "Safari"
    set selectedText to (do JavaScript “window.getSelection()” in current tab of window 1)
end tell

Always returned null. Always. I then tried hundreds of combinations of more-or-less JavaScript, including:

  • adding a return
  • wrapping it in an anonymous function
  • using document instead of window
  • banging my head against the desk and cursing myself for ever having these sorts of thoughts After lots of searching, I discovered the completely obvious answer:

    do JavaScript “(”+getSelection())”

That’s a double-quote, left paren, single quote, single quote, plus, then the function and a closing quote.

Of course. Completely obvious. Note that removing the single quotes and concatenation operator doesn’t work. So “(foo())” doesn’t work, but “(”+foo())” does. I found two places that say it does work, but I can’t make it happen in the latest Lion and Safari.

How the hell do you even arrive at that as a logical place. And how do you expect regular people, ostensibly the target market for Applescript, to arrive at that conclusion?

Applescript is goddamned awful.