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.



American Serenade

Back in 2009, we were winding down our life in the U.S.. We drastically culled things we didn’t want or need, and put the rest into storage for the eventual move to Canada.

Andrea was home in August 2009; I was there on and off, until I was officially issued a visitor record in November 2010 and filed for permanent resident status. On that day, I entered the country with one large suitcase and a backpack containing some notebooks and my laptop. That’s it.

This weekend, my brother-in-law and I had an epic 30 hour adventure: driving a U-Haul cargo van on a round-trip from Ontario to Aurora, IL and back. Our choice of weekend was suspect from the start; most people thought it was crazy to do this on a weekend when terror alerts were escalated and traffic was sure to be horrible, but I had a plan.

We crossed the border Friday night around 9:30. It was John’s first time in the states, and he was greeted almost immediately by fireworks, like a dignitary being being greeted with festivities. After a minor detour that almost put us in Toledo, OH, we were back on schedule, driving across Michigan. Traffic was light, only hindered by various police-directed road closures. We got to my mom’s place around 4AM, and were back out the door around 9:30.

I’d done some research on bringing our stuff back to Canada. By all accounts, a straightforward task. We unpacked almost everything in the storage unit, numbering the boxes and documenting their contents in a notebook. It was a lot of work on a sunny July day. I wore a tube sock as a bandana, to keep the sweat from my eyes, and we drank so much water that I had to run for refills at one point.

Andrea was pretty skeptical that we’d be able to fit everything into the cargo van, but it was exponentially more expensive to rent and drive a larger truck that far. Sure enough, we fit everything in the truck, minus bed linens that didn’t fit any bed we own and a few other things that had long since been replaced.

It was about 4pm by the time we left the storage unit. I did what any good host would do and continued giving John a tour of the things Andrea and I were used to. A trip to the massive warehouse that is Woodman Food (part of the side-quest to find Vanilla Coke), and then a winding trek through downtown Aurora and the suburbs.

Our wanderings were accompanied by fireworks in every direction, from Aurora to the Indiana border. A good and proper showing for anyone’s first visit.

Another side-quest was to introduce him to as many different foods as possible, and specifically from places we couldn’t find in Ontario. Considering the short time we had, we focused on smaller meals. A Steak ‘n Shake at midnight, so busy that we had to wait for a table. IHOP, which despite international being in its name is far from it. Portillo’s for lunch; nothing beats a hot dog and cheese fries. Sonic for a drink and tater tot snack.

So it comes to the accounting of things; the detritus of a life lived in privilege.

Most of the boxes we hauled were full of books. Reference books, text books, hard cover and paperback books, some of which I acquired in my early teens. Books by my instructors at Clarion 2010, and a few spoils from Comic Con San Diego that same year.

All sorts of miscellanea; ham radios to tools to crochet and quilted blankets. Cookware. Clothes. LEGO, Star Trek models, my childhood (and not so childhood) Transformer toys, and more nerdy/geeky knickknacks than anyone has a right to. Also, sixteen short boxes of comic books.

I even found a 20+ year old model of a Klingon Bird of Prey, which we put on the dashboard as a sort of mascot.

Clearly, we are adult-sized children with a love for the fantastic. Which saved our asses when we reached the Canadian border.

Apparently, I was supposed to have filed a B-4 form when I landed in Canada in late 2010, documenting what I was bringing with me and what I would be bringing over at some future date. No one informed me of this, and as a result, we faced paying import duties on everything brought with us, as if it were new.

We pulled in for secondary inspection around 3:30AM. Four officers approach, one to my open window. He reiterates the issue of not having filed a B-4, and the potentially heavy penalty. And then things got interesting. At mention of the comic books, he asked which series we had. And then what series of fantasy novel. And which generation of Transformers toys, and US or Japanese issue.

This went on for ten minutes, an exploration of genre cornucopia. And then the strangest thing happened. The guard that initially met us in secondary exception says, “Ok, that’s enough. You win,” and we were sent on our way. No duties. No fines. Just relief that this adventure was coming to a close.

We’re home now, with boxes filling our dining and living room. We’ll be spending the rest of the month unpacking and figuring out where to put all this stuff. A minor collection of the best of our childhood (and later) memorabilia. Forgotten memories of good and bad times. And another to-read pile to add to the existing one. Shit.

All kidding aside, this was one of the best experiences. A road trip, with all of that entails (including a minor brush with the police in Michigan because I forgot to use a turn signal on an otherwise empty street), with someone I genuinely consider to be a friend. A massive item removed from the TODO list and the erasure of a constant stress of “what if” with most of our worldly belongings a country and three states away.

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.


Ubuntu on Mac

I recently rebuilt a Mac Mini to work as the forth screen in my workflow. I googled around and pieced together what I needed to do by cherrypicking from various guides, and everything was running well until I updated to a new kernel and rebooted. I spent the better part of two nights trying to get the machine to boot.

Unfortunately, it happened just after I blacklisted a module to work around a USB bug that was causing one of my drives to go haywire occasionally, and it took a while before I finally figured out it wasn’t a problem with my change but the kernel itself. Mac’s use EFI for booting — which requires a cryptographically signed kernel. I was finally able to boot up by following the first half of the instructions on this Ask Ubuntu answer. Essentially, do a manual boot via grub and make sure that I pick the secure kernel.

I noticed that I only had a signed image for an older version of the Kernel. I dropped by #ubuntu-kernel and was pointed to the linux-signed-generic package. What happened is none of the guides I read had mentioned this package or its significance. Any time the kernel images are updated, the signed version is also updated, except you won’t get that image by default. The machine was trying to boot off an unsigned kernel, causing the boot sequence to freeze (with no indication as to why).

A thorn with an easy fix. Install the meta package, which will pull in the current signed image, and reboot.

Announcing Benchmarking with Juju

Benchmarking and performance are interesting problems, especially in today’s growing cloud-based microservice scene. It used to be a question of “how does this hardware compare to that hardware,” but as computing and service-oriented architectures grow the question has evolved. How does my cloud and application stack handle this? It’s no longer enough to run PTS on your web server and call it a day.

Measuring every microservice in your stack, from backend to frontend, is a complex task. We started thinking about how you would model a system to benchmark all of these services. It’s not just a matter of measuring the performance of one service, but also its interactions with other services. Now multiply that by every config option for every service, like PostgreSQL, which has hundreds of options that can affect performance.

Juju has been modeling service orchestration since 2010. It’s done a great job of taking complex scenarios that are now booming, such as containerization, service oriented architectures and hyperscale, and condensing those ideas down into composable, reusable, pieces. Today we’re adding benchmarking. The ability not just to define the relationships between these services, but how they should be measured in relation to each other.

As an example, monitoring the effect of adjusting the cache in nginx is a solved problem. What we’re going after is what happens when you adjust any service in your stack in relation to every other service. Turn every knob programmatically and measure it at any scale, on any cloud. Where exactly will you get the best performance: your application, the cache layer, or the backend database? Which configuration of that database stack is most performant? Which microservice benefits from faster disk I/O? These are the kinds of questions we want answered.

With Juju Actions, we can now encapsulate tasks to run against a single unit or service in a repeatable, reliable, and composable way. Benchmarking is a natural extension of Actions, allowing authors to encapsulate the best practices for measuring the performance of a service and serve those results — in a standard way — that any user or tool can digest.

We’re announcing charm-benchmark, a library written in Python that includes bash scripts so you can write benchmarks in any language. It uses action-set under the covers to create a simple schema that anyone can use and parse.

While we may intimately know a few services, we’re by no means the experts. We’ve created benchmarks for some of popular services in the charm store, such as mongodb, cassandra, mysql and siege, in order to provide a basic set of examples. Now we’re looking for community experts who are interested in benchmarking in order to fill the gap of knowledge. We’re excited about performance and how Juju can be used to model performance validation. We need more expertise on how to stress a service or workload to measure that performance.

For example, here’s what a benchmark for siege would look like:


We’ll be covering benchmarking in the next Juju Office Hours on July 9th at 1600 EDT/20:00 UTC and we’d love to help anyone who wants to get started, you can find me, Adam Israel (aisrael), Marco Ceppi (marcoceppi), and Tim Van Steenburgh (tvansteenburgh) on #juju on Freenode and on the Juju mailing list.

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


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.