Adam Israel lives in Southwest Ontario, Canada with his lovely wife and writing partner, three dogs, and more cats than we'll admit to. He's also a graduate of the 2010 Clarion Writers Workshop.


Adam's written a lot of code over the span of his nearly twenty year career in software engineering. Some of his open source contributions can be found here.


Short Stories

Adam's had several short stories published over the past few years. These are the ones that are still online and free to read.



The doppelgänger effect

Yesterday was a travel day, coming home from a week in Breckenridge, CO for a work sprint. These are usually uneventful days, riding trains or shuttles to and from airports. Yesterday was different, though. Yesterday, I ran into my doppelgänger.

The first indication that something was off was when I checked my bag curbside. The porter asked me if I’d already checked a bag. I said no, and he gestured me to come around the counter and see what he was seeing. Sure enough, there was my name, showing one back checked.

I assumed it was because I’d checked-in online and paid the baggage fee, and said as much. We figured it was just some kind of oddity and carried on.

Grabbing a bite to eat inside the terminal, I noticed the second oddity. The boarding pass the porter handed me listed seat 6C, but the Delta app showed me in seat 18F. I thought maybe it was just a lag in my information being updated since arriving at the airport, but no. The app updated to show my gate information, but I was still in 18F.

At this point, I was pretty convinced that, despite the odds, there was another Adam Israel was on the flight; I had his bordering pass and he had my luggage.

Fast forward a couple hours (because we were there way early), I talk to the agent at the gate. She becomes apologetic very quickly, mentioning that this happened to her with a passenger last week as well, and confirms that I did have the wrong bordering pass. She makes sure that the other me’s final destination is the same as mine, and it is, so no luggage juggling has to be done.

Here’s the thing: I cleared security with someone else’s boarding pass. I had identification with my photo on it, but the boarding pass I presented wasn’t mine. Think about that. It’s a potentially serious lapse in security.

Everything worked out fine in the end. I saw (but didn’t get a chance to talk to) another Adam Israel. I got my luggage, and even caught a shuttle home three hours earlier than scheduled. I can’t help but wonder, though, what could happen if someone not as honest, with not so good intentions, could clear security at an airport simply by sharing a name with another passenger.

New job!

I am delighted — tickled, in fact — to report that as of last Monday I am employed by Canonical, the company behind Ubuntu Linux.

I’ve joined the Ecosystem Engineering team, part of Cloud Development and Operations, as a software engineer. More specifically, I’m working on Juju, the cloud orchestration tool chain. I’ll be writing charms and documentation, working on optimizations, and helping to make a cool product even cooler.


American Canadian

111 Weeks

To be exact, it’s been 783 days since we filed for my Canadian Permanent Residence and I am happy to announce that it is official done. We have just walked out of the Immigration Centre in Windsor, Ontario, Social Insurance Number in hand.

I guess this makes me an expatriate; an American Citizen permanently living abroad, which is kind of cool. I’ve been thinking a lot about getting a tattoo to commemorate the experience. More on that later.

There’s been a lot of stress involved around this process, most notably the difficulty traveling back to the US. In a few weeks, when I have the official card in hand, I’ll be free to cross the border without fear of being turned away and having to restart the immigration process. That’s going to be a cathartic experience, finally going back to visit my family and friends.

Now that I’m all official, we can start thinking about normal, grown-up things like buying a house, and getting all of our stuff out of storage back in Illinois.


A Month of Letters

Mary Robinette Kowal started a delightful challenge, in 2010, to go correspond via letter for an entire month. That has grown to become A Month of Letters, which runs for the whole of February. During the next month, I and the other 6,000 people who’ve signed up to participate will be writing letters, post cards, and doing other creative things and dropping them into the mail.

I love to write longhand, and this gives me a wonderful reason to do so. That’s where you come in. I’m looking for more people to write to — the more the merrier. If you would like to receive a genuine, hand-written letter from yours truly, send me your address. Email me, message me on Twitter or Facebook, or use my contact form.

This is an opportunity to rekindle friendships and make new ones, without the limitations of Twitter or the haste of email. Let’s write!


sshuttle workaround for OS X 10.10 (Yosemite), Juju and Vagrant

sshuttle is a nifty little transparent proxy/vpn that works by tunneling TCP traffic over SSH, or more specifically, tearing down a TCP session and reassembling the data on the other side. I started using it earlier this year, as part of my workflow using Juju and developing under OS X. It’s like a data center in a box, inside another box. Code locally in my editor of choice (vim, TextMate, and more recently, Atom). Deploy new code. Refresh web browser, thanks to sshuttle. With sshuttle, I could connect to the services running within my virtual machine running Ubuntu natively through OS X.

Until I upgraded to Yosemite (OS X 10.10).

ipfw, the FreeBSD ip packet filter, was replaced by OpenBSD’s pf in OS X 10.7, but the binary lived on through 10.9. sshuttle has no support for pf, which led me googling down a spiraling trail of despair and hope that someone, some day, would patch sshuttle.

I’m more familiar with iptables than either ipfw or pf, but I understand enough networking to know that ubuntu-in-a-virtual-machine was already setup to talk to the outside world. I figured that there must be something more obvious than setting up a poor man’s VPN to talk to it.

A few hours of testing later, I had a working solution using the route command.

The lxc containers run on the network, and the lxc host (always, in the official Vagrant image) has eth1 bound to

There’s a few ways I could have implemented this. I could have made it a static route, always active, but that could lead to unintended side-effects if you were to join a network using the same ip range. Same logic rules out adding it to my ~/.bash_profile. I ended up finding vagrant-triggers, which allows you to run custom commands at various stages of the vagrant lifecycle. With that, I can add the route when I boot up a virtual machine, and remove it when I’ve shut it down.

While I can confirm that it works for me, I can’t say how well it’ll work for other use cases of sshuttle or earlier versions of OS X. Juju users can head over to the Vagrant Workflow docs for the latest and greatest, or read on for the gist.

Continue reading

Making OS X, Go, and Brew play happy

GO and OS X

I’m doing a little hacking with juju actions before they land in a stable release but I ran into some hurdles getting Go working with the brew-installed version. Trying to install Go packages failed with a bunch of ‘unrecognized import path’ errors. Here’s how I fixed it.


Even though you can install Go via brew, there’s more to be done to get it working. Go relies on two environment variables: GOPATH, and GOROOT. GOROOT is the path where Go is installed, and GOPATH is the directory you’ve created for your code workspace (which I’ve defaulted to $HOME/go).  We then need to tell our shell where to find these installed executable and run them first1.

Now you can run something like to have easier access to docs:

Homebrew Gotchas

Homebrew installs the go formula with a bin/ directory, which symlinks to the go and gofmt binaries in libexec/. Other binaries, such as godoc, will be installed to libexec but are not symlinked to bin/. Adding go/$GOVERSION/libexec, instead of go/$GOVERSION/bin, to PATH makes sure we’re looking in the right place, and this setup will survive a version upgrade.

1: It would probably be better to create a script that would toggle the PATH to include/exclude my $GOPATH/bin in $PATH. I’m using this to run the latest cutting edge version of juju, but I can see the need to switch back to using the released version of juju, without having to hack my ~/.bash_profile

A brief introduction to Juju

I had some concerns about how I was going to integrate posts of a technical nature with my blog, which has been predominantly writing-oriented for several years. What I failed take into account is that many of us who write Science Fiction are armchair technologists. We look at gadgets, scientific breakthroughs and tech policy, and make conjecture about what might come next.

What I talk about is less important than how I talk about it. It’ll be interesting, or not, but no self-rejection.


In one of my previous jobs, I ran a cluster of servers responsible for serving upwards of 1.5 Billion ads/day. I had a half dozen racks of hardware sitting in a data center in Chicago. Some of those servers were from the early days, while others were a few years newer.

When business was good, we’d buy more equipment — servers, racks, switches, electricity, and bandwidth — to handle the traffic. The new business justified the fixed and recurring costs (to buy and lease hardware, and to host the equipment), locked in to a 1-3 year contract.

When business dropped off, and it inevitably did, we were still paying the bills for all of that extra hardware and the associated services.

There’s also an ebb and flow to internet traffic, an inevitable tidal force. We might serve twice as many ads after 9AM EST as we did at 3AM. So you beefed up hardware to handle the daily peaks and pay for the idle costs otherwise.

Almost everyone in the modern world today carries a cell phone. Maybe you buy the latest and greatest smartphone, at a subsidized price, and are locked into a contract, paying every month for the privilege, even for the services you never use. Or you buy your phone outright and pay as you go, only responsible for what you use.

This is where the cloud comes in. You can almost see the Jedi hand wavy motion being made when someone says, “it’s in the cloud”. What is this ethereal thing and where does it live?

The simplified version is that the cloud is simply a large cluster of computers sitting in a data center somewhere. It might be massive, power-consuming supercomputers. It could be a ton of off-the-shelf hardware stringed together. And all of that gear is pieced together with software to run virtual computers, which those companies will the lease out to people like you and me.

There’s no question that the future of business computing involves the cloud. It’s super cost-effective. In may ways, though, it’s still in its infancy.

Here’s where I get to the point, and talk about Juju.

Back when I was managing that cluster of ad servers, we’d cobbled together a mix of shell scripts using ssh and puppet to automate the deployment and management of those dozens of computers. It worked, but was far from ideal, and only worked with our hardware.

Juju is a system that lets you automate the deployment of software, via bundled instructions called Charms, to servers across multiple Clouds, like EC2, Azure, HP, Digital Ocean, or even your own hardware.

Say your awesome website is suddenly getting linked to by the Neil Gaiman and John Scalzi’s of the world, and your site is being crushed under the load. Problem?

No problem. You tell juju you want two more servers, or five or ten. A few minutes later, they’re online and so’s your website. When the slashdot effect has worn off, you can remove those extra servers. Only paying for the time use you needed them.

Scalability and affordability, in a nutshell. And juju is there to help you manage that.

TL;DR: Juju is a cloud orchestration toolkit, to aid in the deployment and manage of services across a variety of cloud providers.

New job!

I am delighted — tickled, in fact — to report that as of last Monday I am employed by Canonical, the company behind Ubuntu Linux.

I’ve joined the Ecosystem Engineering team, part of Cloud Development and Operations, as a software engineer. More specifically, I’m working on Juju, the cloud orchestration tool chain. I’ll be writing charms and documentation, working on optimizations, and helping to make a cool product even cooler.



Finding my footing

As writers, we fill our toolbox with things that help us in our craft. I’ve been experimenting with a few new things of late, trying to boost my productivity. Two of them in particular are making a difference.

I haven’t been involved in many word wars — timed writing sessions with one or more other writers. Set a short time limit, say 15 or 30 minutes, and write until it’s over. I started doing that last week, with my online writers group, and had one of my most productive days. These sprints are like a mini-deadline and it’s easier at times to shut out distraction in small increments. To that end, I’m taking carving out small small blocks of time throughout the day to write, especially on days when I might not be able to dedicate an hour or two contiguously. I’m going to get an egg timer to give me an external countdown to the process as well.

I ordered a cute egg timer from the states, but it was broken and I discovered the hard way how expensive custom and duty fees can be when something is shipped via UPS cross-border. I may just find a decent kitchen timer that can do double-duty.

The second trick is an organizational one. I’ve seen it referred to as the DASH method — Direction, Acceleration, Strength, and Health.

Direction is knowing what I’m going to write before I start. I make short lists of every chapter, broken down by scene, of what that writing needs to accomplish, usually no more than four or five bullet points. That mini-outline forces me to think through every chapter before I put down a single word. When I do sit down to write, I know what my end goal is.

Acceleration is getting started and finishing things. I’ve been pretty slow, plodding along and being frustrated with my progress. I would take so long, writing and rewriting, that I made almost no progress. Now, almost as a mantra, I remind myself that the point of a first draft is getting the ideas down on the page. Making the grammar fluid and pretty can wait for revision.

Strength refers to bolstering your mental clarify and physical strength through a better working environment. I am all about that. It’s been a slow process to make my office a comfortable space but we’re almost there. We have our bookshelves up and my cork board, filled with quotes that inspire, hands next to my desk. When I do need a change of pace, I switch to the coffee shop up the road.

Health is a reminder to take care of myself. Figuring out what doesn’t work (and drives up anxiety) and fix it. Get enough sleep. Realize that if I’m stuck on something, I probably just need to work it through to figure out what I’m missing — brainstorming, doodling, talking it through with someone else.

Last week wasn’t the most productive, with a funeral, doctors visit, and other distractions, but I had two great days.

Project: Black Mirror
New words written since last week: 1,980
Average words/day: 248

I’m working through some existing scenes that need at least some work vs. writing new words. It’s slowed me down a little but it needs doing. I’m printing off each chapter as it’s finished and putting it into a binder. When I do finish, I’ll take that binder and a red pen and go sit somewhere for an afternoon and begin the revision process. Until then, the printed manuscript goes and is another reminder of what I’ve finished so far.

Back in the saddle, week 1

Part of my new and improved resolve to Finish Things is accountability, and to that end I’ve created a master spreadsheet for the year where I’m tracking my daily writing, good things that happen (h/t Christie Yant), projects I want to work on, and deadlines I’m working towards. It’s not perfect, but it’s a start.

I’m trying to work every day while I’m involved in a project. Writing is, or should be, what I spend the most time on, at least at this stage in my current WIP. The non-writing tasks, like research, outlining, etc, are limited to what’s necessary to finish the draft. Research is my way to procrastinate. I did a ton before I started writing, I’ll do more after the first draft is finished, but at some point I actually have to write this thing.

I don’t want to take away time from writing, so I’m allowing myself to spam the world with statistics once a week.

Project: Black Mirror
New words written this week: 2,031
Average words/day: 338

Project Targets

It’s too soon since I started tracking daily stats to say if I’m going to hit my deadline or not. This first week has sort of been the warm-up, shaking off the rust of not writing at all for a couple months. I started at 364 days, no words one day (but outlining a new chapter), and ended today at 845. I think I’ll settle at a comfortable, consistent pace. There’s wiggle room in my deadline, but not much. My end goal, as soon as the first draft is done, is to revise and have a draft ready for submission by my birthday in late July.

Clarion Write-a-Thon

The Clarion Write-a-thon starts on June 24th, running parallel to the six week workshop I attended in 2010. While this summers workshop students toil away in San Diego, I’ll be one of many writers helping to raise awareness and solicit donations to a cause we believe in.

What is a write-a-thon, anyway? It’s just like a walk-a-thon. But instead of walking, we’re writing, and instead of making pledges per mile, we’re making pledges per word, chapter, or story. Writers get support, encouragement and motivation, and the option of joining a team with a writing mentor! Those who care about the writers in their life get a way to show their support. And money is raised for a literally fantastic cause — the Clarion Science Fiction & Fantasy Writers’ Workshop. All donations are made through The Clarion Foundation, a 501(c)(3) non-profit organization, EIN #20-3114945.

I’ll also be one of the aforementioned mentors this year, as part of Team Weaveworld. The teams are a new thing with the write-a-thon this year, as a way to provide support and motivation for those who want it.

During this years write-a-thon, I’ll be continuing work on my novel-in-progress. My challenge is to write at least 1,000 words/day, 5 days/week, with an ultimate goal of 30,0000 words over the six weeks.

I’d love to raise tons and tons of money for Clarion, because I passionately believe in what they do (and did for me). This is a no pressure pitch on my part, though. Pledge what you feel comfortable with, knowing that you have my utmost thanks and appreciation for donating to something dear to my heart.

Ad Astra Wrapup

My first Ad Astra is over, and I didn’t completely embarrass myself. Huzzah!

I’ll admit to being intimidated at first, not knowing anyone. It’s a good-sized local convention with a lot of history and people know already each other. What I finally realized, though, is that I just needed to politely join in the conversation. Everyone was welcoming and, even better, assumed I was Canadian. I swear, I am in all but name.

I saw there was a writing contest — 250 words based on a handful of prompts — and I pounced on that. It let me meet a nice group of writers and editors that I wouldn’t have had the opportunity to interact with at that level otherwise. I wrote the story Friday night (longhand first, then transcribed and edited), printed it out Saturday, and we received the results on Sunday. As these things happen, as I was sitting in the room waiting to talk to one of the judges, I had a breakthrough regarding flash that was soon confirmed by more than one of the judges. Flash fiction is like a single breath of air, and I’d forced the reader to stop and gulp in the middle of it.

Harry Turtledove was one of the Guests of Honor. I sat in one of his panels, on creating viable cultures in world-building. Fascinating stuff. It evolved into conversation about historical research and alternate history between him and Ed Greenwood, which was awesome and worth the price of admission alone. My two favorite quotes:

“That feeling of depth, that the world keeps going when the author stops looking.” Harry Turtledove, talking about Lord of the Rings

“The harder you make your reader work, the smaller your audience.” Ed Greenwood

It’s always great to meet people I’ve only known online. After a previous near-miss, I finally got to spend a few minutes chatting with Shay Darrach. I also got to spend some time with Gabrielle Harbowy, who I met through a mutual friend. That lead me to the launch party for Dragon Moon Press, which was a blast. Debut author Leah Petersen read from her novel and did a fabulous job, as did Marie Bilodeau.

Sunday, I went to a panel on ‘Revising and The Pitch’. At least, I thought it was a panel but it was really an interactive two-hour workshop led by Julie Czerneda and it was awesome. In groups of three, we were given prompts and created — and then revised — a pitch for a story. Again, some good quotes came out of the panel, these regarding revision:

“As perfect as time permits.”

“You have to learn to write to deadline; you may as well start by giving yourself one.” Julie Czerneda

Conventions have always left me with renewed spirits. Now, as I’m gearing up to finish this novel, I feel like I have even more clarity. Not necessarily about the writing itself, but about in believing it can be done. It’s easy to escape into short stories, because I’ve written those, had those published. They’re my safe place. A novel is a big, scary thing. That unknown feels less scary and more manageable right now, though, and that makes me very happy.