Saturday, April 19, 2014

Dropbox and Google Drive

UPDATED 4/21: update below from Scott Johnston, Product lead for Google Drive.

I figured it was time to move from Dropbox to Google Drive. On the face of it, it's deceptively easy

I have a little over 100Gb sync'd with Dropbox across three Macs. I figured it'd be a simple matter of

  1. ensure all three machines are fully sync'd with Dropbox
  2. quit the Dropbox app on each
  3. on Mac #1, copy the Dropbox folder to the Google Drive folder
  4. on Mac #1, fire up the Google Drive client, and sync (ie. upload the 100Gb)
  5. on Mac #2, copy the Dropbox folder to the Google Drive folder
  6. on Mac #2, fire up the Google Drive client, and sync (which should be a no-op)
and then the same for Mac #3.

Everything was looking good to begin with. Even step 4, which some had said would be troublesome, worked just fine in practice—speedy upload, no problem. The real surprise was step 6:

because Google Drive was downloading an entire duplicate copy of everything, not noticing that I already had a complete copy in the local folder already.

Obviously this is fucked up. It's also, apparently, a known issue. And while I can probably live with the lack of LAN Sync, and the general unpolishedness of the Google Drive client, basic functional brokenness like this is a deal-breaker.

From a number of people I've heard great things about the Insync client for Google Drive—including its support for multiple Google Accounts. For now, though, I'm heading back to Dropbox.

UPDATE: To my surprise the Google Drive Product lead tweeted an acknowledgment of the issue. Sounds like a fix is in the works.

Monday, December 30, 2013

Disabling Wi-Fi on a Comcast Xfinity Cable Modem

Judging by traffic and comments, my last technical "how-to" post was a moderate success, and was found by folks Googling for the solution—so I'm back with another quickie.

A few months ago Comcast sent me an Arris TG862G cable modem, an upgrade from the previous Motorola device to enable higher speed internet access. On the upside it did the job more than handsomely:

On the downside it insisted on being a firewall, DHCP server, and Wi-Fi access point—when I already have something I'm perfectly happy with for those functions. And while some aspects could be tweaked via the admin console, the Wi-Fi couldn't be disabled.

I wanted it disabled.

So if, like me, you want to disable Wi-Fi on your Xfinity Arris TG862G cable modem (how about that for SEO), here's what you need to know: just call Comcast and ask them to put your device into "bridge mode". I did, it was painless, it took them a minute or two, and the box became exactly what I wanted: a transparent bridge between co-ax cable and my Asus router. The N16 now has a the public IP and does its job as firewall, Wi-Fi access point, ssh tunnel endpoint, DHCP server, and so on.

Enjoy.

Saturday, November 23, 2013

Working at Twitter

I find myself interviewing a lot of people for positions at Twitter. In my time here I've been on panels for Product Management, Business Development, Engineering, Product Counsel, Country Director, Brand Strategy, Data Scientist, Corporate Counsel, Media Partner Manager, Business Operations, Program Management, Corporate Development, Marketing & Communications, Procurement, Finance, Product Specialist, and likely a few others—I've interviewed hundreds of people in all.

Most of these interviews are 30 minutes. I try to leave five minutes at the end of each for a candidate to ask me questions, and the one I most often get is "what do you most like about working here?".

The answer I give comes in two parts.

This is the big thing for me even though it's not even Twitter, Inc., which makes the ultimate product—it's Twitter users who make Twitter the experience so educational, addictive, moving, thought-provoking, hilarious, informative, and entertaining. To be a part of the team which enables something so amazing, though, is a tremendous source of joy and pride.

But there's also this:

It was February this year that Twitter acquired Bluefin Labs. A few months later I was talking to Deb Roy, one of its founders, and as a new Twitter employee at the time he shared with me the observation that “credit flows very freely at Twitter”, with the result that the organization is less political than most.

That resonated with me, and I've thought a lot about it.

It's not that Twitter, Inc., is devoid of internal politics but it is the case that—in my experience at least—it's a uniquely collaborative environment where credit is shared willingly, genuinely, sincerely, and amazing things are accomplished as a direct consequence. It's refreshing and energizing to work at a place with such a unified sense of purpose and, for the most part, lack of ego.

 

If the above sounds appealing, join us! As of today, there are 260 open positions at Twitter worldwide.

Thursday, July 18, 2013

Twitter Hackweek, July 2013

I'm pretty proud of this, which I produced during Twitter's most recent hackweek:

It's a map of verified users of Twitter. The layout is calculated according to the mutual follow graph connecting these users, ie. relationships where @x follows @y and @y follows @x. The coloring is determined by user category (eg. sport, music, etc).

The Twitter Media blog post has some good information about how to think about the visual and what we can deduce from it; what follow here are the gory details behind how it was built—for data visualization dilettantes and cargo-culters like myself.

What on earth

First of all: what exactly is this thing? In technical terms it's a force-directed layout of the largest connected component of the verified user mutual follow graph. That single large connected component happens to contain over 99% of verified users; a handful are off on islands of their own, not connected to this clown hairball by mutual follows, and they're not shown.

How it came to be

Here's how it looked at the beginning of hackweek; this is a first quick pass at the force-directed layout of a random sample of verified users:

(More detail below on the tools that I used to make this image but for those already wondering, the hard work was done by Graphviz, specifically sfdp and neato)

This was looking promising (and attractive in its own way, I thought) but as I added more and more users it just became a big dense white blob with no apparent structure. I figured I'd have a go at coloring the nodes by user category (sports, music, news, and so on) to see if some structure would reveal.

I started off by just highlighting TV-related accounts, which you can see in this graph of a 10% sample:

Verified user mutual follow graph, early cut
and this showed enough promise to add colors for other high-level categories.

I liked the way colors clustered together, but now my diagram was looking a bit drab:

Verified user mutual follow graph, early cut
The density of the gray edges was just sucking the saturation out—and their uniformity was obscuring further structure, I figured.

So I colored the edges: any edge connecting two nodes of the same color would be colored accordingly: a yellow line to connect two sports people following each other; a red line to connect two musicians following each other; and so on.

Now the clusters were really clear. I liked this a lot, and I rendered a really large version:

The result is what you see in the Twitter Media blog post. Not quite a gigapixel, but near enough.

The generation process in detail

Obviously, the process starts by capturing the follow relationships between verified users on Twitter. You can do this yourself easily enough using the Twitter API:

  • find verified users by looking at who @verified follows;
  • for each, find who they follow;
  • filter this dataset down to mutual follows.
A good place to end up is with a tab-separated file of two columns, of users who follow each other:
screen_name_1 [tab] screen_name_2
screen_name_1 [tab] screen_name_3
screen_name_4 [tab] screen_name_5
to the tune of a few million lines.

Once you have this you can use your favorite awk or perl or bash one-liners to turn this into a bare graph in DOT format:

digraph my_graph {
    screen_name_1 -> screen_name_2
    screen_name_1 -> screen_name_3
    screen_name_4 -> screen_name_5
}

At this point I used Graphviz's comps utility to extract the largest connected component of the graph:

cat graph.gv | ccomps -zX#0 > graph-cc0.gv

Now we have the core data of interest in graph-cc0.gv and we can iterate on the following:

  1. layout: I used sfdp to produce a force-directed layout of the graph;
  2. coloring: I wrote a handful of lines of Python to color the laid-out graph according to the category of user;
  3. rasterization: I used neato to render the graph to a PNG.
  4. presentation: I uploaded to zoom.it to share the result.

I used a MacBook Air to do this work. Step (1) typically took a few minutes, (2) was 20 seconds or so; (3) was 10–120 minutes depending on the output size; (4) was actually the slowest step—a few days to process and present the final version. The graphviz tools are single-threaded and tend to be CPU-bound; you can get some wins with better hardware on (3), but only very modest ones.

Here's how it all adds up into a single script:

Saturday, March 09, 2013

Zero-Width Space

Since Buzzfeed picked up my post about stealth fanout on Twitter a few people have asked me how one can best produce a "zero-width space" on a Mac.

Here's how you do it.

On a Mac, pretty much any time you're typing text (including when you're composing a Tweet) you can hit ⌥⌘T to bring up the "Special Characters" window, and from here you can find (and use) pretty much any Unicode character out there. Try typing "zero width space" into the search field:

Image 2013 03 06 4 06 09 PM
and you'll find the elusive character… by definition it's kinda invisible. But you can add it to your favorite Special Characters, insert it into what you're typing directly from here, or copy it to the clipboard.

If you want to make it super-easy to use a zero-width space you can create a global text shortcut in the "Language and Text" area of the Mac's System Preferences. Here below I'm setting things up so that every time I type "zws" a zero-width space is inserted:

Image 2013 03 06 4 08 40 PM

Tuesday, March 05, 2013

Deathblogging

My dad has heart failure. My mom has opinions on the matter.

A few weeks ago my dad posted one of the most beautiful and moving pieces I've ever read, about his own father.

My head spins, my heart trembles.

Friday, March 01, 2013

Stealth Fanout on Twitter

Sure, on Twitter you can use the ".@" convention to start a Tweet with a username but still have it delivered to all your followers. Like this:

Turns out, though, that instead of a "." you can use a zero-width space. It has the same effect—your Tweet is delivered to all of your followers—but the leading character is by its nature invisible:

A side effect which you may or may not enjoy is people's surprise:

Wednesday, February 13, 2013

Family

I was on the lookout for something special for Wendy's birthday. And then Josh tweeted

Josh went to high school with Alessandra, now a freelance illustrator in Brooklyn. Alessandra, it turns out, does some truly delightful drawings. I thought I'd get in touch.

Based on a set of photos I sent over, Alessandra drew this picture of me, Wendy, Lux and Cecilia:

Wendy's Birthday Gift
and I'm thrilled by it (Wendy was too). It's framed on our wall and it makes me smile.

Thursday, January 10, 2013

Working at Twitter

I did a little Q&A recently about what it's like working at Twitter. They published the piece this week but included only my answers, not the questions, which makes it read a little incoherently. I thought I'd put the Qs as well as the As here for the record.

If you could describe the essence of Twitter's culture in one word, what would that be? Explain.
Open. We're open in the sense that we have transparent internal communication and discussion. Open in the sense that the platform is open to all: from everyday individuals to news organizations to governments to entertainers and so on. Open in the sense that people at Twitter are always open to new ideas and perspectives. Open in the sense that Twitter employees Tweet freely and fearlessly about their lives and opinions.

Describe your favorite part of the office/campus.
The roof deck at Twitter is very special. It reminds us all that we're in the middle of a wonderful and vibrant city. Provides views of Twin Peaks and—often—the sunset.

How would you describe the best day you ever had at Twitter? What made it so great?
I've thought a lot about this. At Twitter I feel incredibly privileged to work at a company which makes a product that I so deeply love. I'm besotted with the thing which is Twitter, and that makes every day here special. If I had to choose one in particular, it'd be meeting Barack Obama at the White House while organizing the first ever presidential Twitter Q&A in 2011.

Describe your workspace—what does your immediate (desk) and/or surrounding work area look like? Have you done anything to customize it?
It's pretty minimalist. A laptop stand and 27" Dell monitor, wireless keyboard, wireless mouse. I've been at Twitter coming up for three years and have had 13 different desks since I've been here. I travel light.

My desk at Twitter

How would you describe the quintessential Twitter employee?
Passionate; humble; smart.

Describe one unique/goofy/crazy/weird/quirky thing your team does for a little fun.
The work in the Twitter Media team is unique and crazy enough on its own! Every week team members are meeting and hosting visits from heads of state, world-famous athletes, mega-star musicians, religious leaders, award-winning journalists, best-selling authors and media companies. We work with them to help them use Twitter ever more effectively to connect with their fans and followers, and to create unique interactive experiences on and off the platform.

If there was one thing you could describe to an outsider to make them feel like a Twitter insider, what would that be?
There's an incredible unity of purpose here at Twitter: every Twitter employee works here because they want to make Twitter the best it can be. From making the site faster to improving search algorithms, from testing new features with users to making sure our office feels like home, everyone is working passionately toward a common goal, eagerly looking toward the future and constantly amazed by the creativity of our users.

CES 2013

I went to the Consumer Electronics Show in Las Vegas once. I flew in for a single meeting, in January 2006, and remember that after that I spent over an hour waiting in a line for a cab back to the airport. In the end a dozen people in the cab line pooled resources and rented a stretch limo to the airport between us.

In 2013 I went to CES only in my imagination and on Twitter:

Thursday, June 28, 2012

Tomato, the Macintosh, and the Asus RT-N16

If like me you read Jeff's post, bought an Asus RT-N16 intending to run Tomato, realized that the way Jeff upgraded his firmware was by using the Windows-only manufacturer-supplied utility, and you only have a Mac handy—then this post is for you. Below are instructions for upgrading the router's firmware from the terminal, assembled from a fewexistingarticles, and personally validated by me.

Pre-requisites: some comfort at the command line, some familiarity with firmware upgrades.

First of all:

  1. Download the appropriate Tomato USB firmware. You'll need a "Kernel 2.6 for MIPSR2 Routers" version; I used Ext build 54, and I've read that the VPN build works too. Either way you're going to end up with a file like tomato-K26USB-1.28.9054MIPSR2-beta-Ext.trx.
  2. From the menu bar icon, turn off the Wi-Fi on your Mac. We'll not be using that interface.
  3. Connect your Mac via ethernet cable to LAN Port 1 on the router.
  4. Turn the router on.

Now, to perform the upgrade, open Terminal.app or your preferred terminal.

1. Turn off your Mac's ethernet interface:

Isaacs-MacBook-Air:~ isaac$ sudo ipconfig set en0 NONE
Password:
Isaacs-MacBook-Air:~ isaac$

2. Reset the router's NVRAM: hold down the WPS button on the back of the router for 30 seconds. Still holding the button, unplug the router and wait for 30 more seconds. With the button still held down, plug in the router and wait 30 more seconds. Now release the button.

3. Now put the router in recovery mode: unplug it, and then plug back in again while holding the "Recovery" button.

4. Bring your Mac's ethernet interface up with a manually-configured address

Isaacs-MacBook-Air:~ isaac$ sudo ipconfig set en0 MANUAL 192.168.1.2
Isaacs-MacBook-Air:~ isaac$

5. Confirm that you can ping the router at 192.168.1.1:

Isaacs-MacBook-Air:~ isaac$ ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.053 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.217 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.080 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.093 ms
^C
--- 192.168.1.1 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.053/0.111/0.217/0.063 ms
Isaacs-MacBook-Air:~ isaac$

6. Upload the new firmware using tftp, and wait 90 seconds:

Isaacs-MacBook-Air:~ isaac$ tftp 192.168.1.1
> binary
> put tomato-K26USB-1.28.9054MIPSR2-beta-Ext.trx
6284824 bytes, 2.8 seconds
> q
Isaacs-MacBook-Air:~ isaac$ sleep 90
Isaacs-MacBook-Air:~ isaac$

7. Unplug the router, and plug it back in again with the WPS button held down. Hold for 30 seconds as the router boots up.

8. Swtich your Mac's ethernet to DHCP:

Isaacs-MacBook-Air:~ isaac$ sudo ipconfig set en0 DHCP
Password:
Isaacs-MacBook-Air:~ isaac$

9. Open the configuration page at http://192.198.1.1/ (username admin, password admin) and change the admin password.

10. Enjoy Tomato!

Wednesday, June 27, 2012

One thing I find rewarding

I've been realizing this recently:

It's honestly a privilege.

My first job after my post-grad was in 1996, writing software for use by pharmaceutical companies doing animal testing. I joined an investment bank in London a year later—one of the few people, I suspect, actually to move to higher moral ground in joining the financial sector. Since then I've worked at a tiny London startup, an enormous US telco, a small specialized software product company, Google, and now Twitter.

At every single place along the way I've met great people. There are folks I'm still in touch with, and happily so, from all of these places. I love learning things and I've learned a ton. I enjoy challenges and I've faced them everywhere I've worked, without exception.

Out of the set, though, only Twitter is all about a product I really love and it makes the hugest difference. It's a lot to compete with.

Friday, June 15, 2012

New Arrival

Unlike last time, this one was really pretty sudden.

Wendy had been having contractions for most of the evening but it didn't seem like anything was imminent. I even tweeted:

That was at 10.04pm.

At 11.15pm when we were going to bed, Wendy said she thought that she might actually be going into labor. I called ahead to the hospital, we asked our friend Matt to come over to watch Lux for the night, and we drove to the delivery ward. From this photo it looks like we were settled into our room about 40 minutes later:

um, hi

Pretty much straight away the hospital staff confirmed that they were going to do a c-section and get our baby out. They paged the relevant people and started preparing, and by about 2am we were going into the operating room:

current status

Boy, don't things go quickly from there! At about half past two we met our new family member:

Baby!
and here she is, ten hours old:
@thesprouut
Hand

Lux met her the very next day. She was, and is, transfixed:

@thebeean meets @thesprouut
as well as so very gentle:
@thebeean meets @thesprouut

Wendy and the baby both made amazing recoveries and were discharged from hospital two days ahead of schedule. Born 2.33am PDT on 12 June 2012, weighing 7½lbs, we're thrilled to welcome Cecilia Hepworth to the world and to our home.

See a few more photos here.

Tuesday, June 05, 2012

An RFC 1912 mea culpa

This blog's been powered by Blogger for over a decade. That takes it back to a short while even before Blogger was acquired by Google (Blogger founder @ev would later found Twitter, where I work). Back in 2002 I was using FTP to host it myself, and had this splash page:

isaachepworth.com, 2002

In 2003 I upgraded to a zeitgeisty orange

isaachepworth.com, 2003
but continuing the square photos motif.

This design stuck until Spring 2006, when I applied for a job at Google. At that point I switched to a more conservative look (yeah, whatever), ultimately settling on the current theme "Minima" (by coincidence created by Doug Bowman, currently Design Director at Twitter).

isaach.com, 2012

Not until 2010, though, did I switch off FTP publishing to my own host—and move to a fully Google-hosted setup with my custom isaach.com domain. That's when the trouble started.

Thing is, I took a few liberties with DNS. To use a custom domain with Blogger you need to CNAME your custom domain to ghs.google.com (which in turn CNAMEs to ghs.l.google.com). It makes a lot of sense that it would work this way, of course it does, but the snag is that DNS doesn't support a CNAME record in the root of a domain (RFC 1912, §2.4, "A CNAME record is not allowed to coexist with any other data", and of course you need your SOA and NS records in the root).

The net is that you can't run a Blogger-hosted blog in the root of a domain, eg. at isaach.com. It's really that simple.

What you can do, though, is ignore this fact and use a DNS provider which allows you to violate the RFC. Hello, zoneedit!

However, be warned. If you go this route then here's what will happen:

  • in the beginning everything will work just fine;
  • over time you'll hear about some people having intermittent troubles reaching your site;
  • you'll blame things on user or configuration error;
  • you'll build pagerank and inbound links to permalinks in your root domain;
  • gradually you'll hear more and more that people can't reach your blog;
  • eventually you'll investigate and identify the issue;
  • you'll spend a weekend futzing with nameservers;
  • you'll curse yourself while configuring permanent redirects from rootdomain.com/x/y/z to blog.rootdomain.com/x/y/z; and
  • you'll write a blog post cautioning others.

My advice, then, writing now at blog.isaach.com: don't mess with the RFCs, even if it seems like you can get away with it.

Friday, June 01, 2012

Beta SF Neighborhoods

Often I've found myself somewhere familiar in San Francisco, thinking "is this technically Mission or Noe or Castro?" — or somewhere completely unfamiliar, thinking "I wonder what neighborhood this is".

So I made this thing. It's an iPhone app which tells you where in San Francisco you are. This is me, at home:

Home

It doesn't show you a map, or tell you the history of the neighborhood, or link to Wikipedia, or provide droll stereotypes or give you vital stats like population or elevation or weather. It just tells you what neighborhood you're currently in—and how far you are from the closest adjacent neighborhood. That's it.

I say "iPhone app" and I mean that in the same sense that Steve Jobs did in 2007 when he announced that the iPhone would support third-party apps. It's a web page.

Add it as a bookmark to the home screen, though, and it's pretty app-like. It works like this

It's barely even a beta; more of a steel thread. But hey, have at it: visit isaa.ch/sf on your iPhone, and add a bookmark to your home screen.

Some limitations, even within the admittedly narrow feature scope:

  • you pretty much have to be in San Francisco for it to be of any use;
  • if you're not in San Francisco then not only will it be no use but the distance calculation (which depends on a pretty rough and ready approximation from spherical to planar geometry) will become less accurate the further you are away; and
  • error cases aren't handled terribly gracefully.

That said, I use it myself all the time and find it useful. Next steps are probably factoring the code into something sane and putting it on Github. Don't hold your breath.

Monday, May 14, 2012

#newtwitterhq

The New Twitter HQ has been in the news recently, and we'll be moving in soon.

I've been lucky enough to get a few sneak peeks in the last few months. Thanks to the supportive facilities, executive and comms teams I've been able to visit regularly and share pictures of the build-out from January, February, March and May. Somehow it didn't quite happen in April.

My most recent visit had a new aspect, though: I was able to take some shots of the exterior from the roof of a nearby tower. From thirty floors up, I took this

#newtwitterhq
and this
#newtwitterhq
and this
#newtwitterhq roof

I snapped a few more from the top of that tower, though, and those—as well as an update on the Neighborhoods App, are to come.

Monday, April 30, 2012

San Francisco Neighborhoods

I've lived in this city for nine seven years now. It's the best place I've ever lived. About the same population as Frankfurt, same land area as Cambridge, pretty much as sunny as Denver, similar cultural diversity to that of London, and by now it feels more like home than my original hometown Sheffield.

I find the neighborhoods endlessly fascinating, too. The neat-o posters:

the microclimates and sub-microclimates, now with an associated iPhone app:
The app provides a detailed listing of the temperature, cloud cover, wind speed and chance of precipitation for 17 different San Francisco microclimates. Developer Michelle Sintov came up with the idea during her daily bike commute from the Richmond to SoMa. "I'd hit Divisadero Street and suddenly see the sun," she told [us] with a laugh.

- New iPhone App Shows Weather Forecasts For Every Neighborhood In San Francisco, Huffington Post
the passionate upstart neighborhood-wannabes and the enormous diversity of opinions on what the neighborhoods are, from the sublime to the unreadable.

The boundaries between neighborhoods are interesting in particular. Where exactly does 18th Street, going East to West, transition from Dogpatch to Potrero to Mission to Mission Dolores to Castro to Upper Market? What precise shapes to these perfectly tessellating areas take?

Obviously the notion of neighborhood borders as zero-width lines is a fiction. Nonetheless it's a fiction with significant appeal to someone with a mathematical background and an Aspergic heritage. I've often found myself somewhere familiar in San Francisco, thinking "is this technically Mission or Noe or Castro?" — or somewhere completely unfamiliar, thinking "I wonder what neighborhood this is".

So I made this thing. It's an iPhone app which tells you where in San Francisco you are. This is me, at home:

Home

It doesn't show you a map, or tell you the history of the neighborhood, or link to Wikipedia, or give you vital stats like population or elevation or weather. It just tells you what neighborhood you're currently in—and how far you are from the closest adjacent neighborhood. That's it.

Next time: how it works and how I made it. And if, in the meantime, you live in San Francisco and you're interested in trying it out for me, let me know.

the best idea I had to reject from an early tester was listing imports and exports of the neighborhood, eg. "Mission District. Imports: cheap beer; Exports: hipsters"

Tuesday, March 20, 2012

Multiple Chromes

Same disclaimer as last time: I worked at Google for years. I left voluntarily, and still consider myself extremely fortunate to have worked there. I'm very lucky to count many current Googlers amongst my friends, etc etc.

Update (March 20th): some are saying that the latest Chrome includes a working multi-account feature. In actual fact, as far as I can tell, this bug with 2-factor has never been addressed. Still, some claim to have this working.

A little while ago I ranted about trying to use multiple Google accounts with Google services in a single Google browser. Google claims that this stuff is supported but it's plainly not. The fact that they make this lie is probably the second most frustrating thing about the whole situation; the most frustrating thing being that it doesn't work in the first place.

With a calm reasonableness which was itself infuriating, Matt suggested just using two browsers (Chrome and Safari, Chrome and Rockmelt, Safari and Firefox, whatever). Obviously this is crazy, but wait:

Before you dismiss the 2 browser approach out-of-hand, consider its merits:
  1. Clear, consistent behavior - check
  2. Open a new tab, navigate to your fave Google application, be automagically signed in using the account you expect - check
  3. Spatial organization of work and play - a Good Thing
I'm not sure the behavior you expect from 'proper' multi sign-in to be, but I don't think you could expect number 2 to be supported. Drawback is, you might need to copy the odd YouTube URL from your work email to your personal Space.
Once I'd overcome what Matt called my "righteous indignation" I decided to give it a go. Rather than actually different browsers, though, I figured I'd use side-by-side "work" and "personal" Chrome instances—using different profiles.

And, cutting to the chase, I confess that it's indeed a solution effective enough that the problem is no longer near the top of my list of computing annoyances. That's a score, I guess, and here's how I did it.

First of all I found DeWitt's "Chrome Profiles on OS X" guide (the core idea), and ark's "Multiple Google Chrome Profiles on OS X" (a different approach). I took a look at both and eventually ended up with this script:

I made this into an executable on my path called make-a-chrome. You can use it like this:

Screen Shot 2012 03 20 at 7 35 25 PM
Look at that! Two independent Google Chrome apps in ~/Applications.
Screen Shot 2012 03 20 at 7 40 31 PM

The icons are just the default "no icon" icon but you can fix that by assigning whatever icons you like. More annoying than that is the fact that both have the same icon in the Application Switcher:

2012 03 20 07 49 10 pm
and the best I've got on that front is that hey, you get used to it. Send fixes if you know of them.

But hey, you've got two side-by-side independent Chrome instances. Each has its own history, bookmarks, cache, cookies, tabs, autofills, saved passwords, themes, extensions… it works great. One pro tip I can offer is to install different themes for each instance so you can tell them apart at a glance. I used some kind of brushed metal thing for work:

Screen Shot 2012 03 20 at 20 06 20 PM
and a pencil drawing thing for personal:
Screen Shot 2012 03 20 at 20 06 23 PM

The only other thing to realize is that the first-launched instance grabs the OS-level http(s):// protocol handler. For what it's worth, I launch my personal instance first so that clicks from Twitter.app (my main source of clicks into Chrome) launch a new tab in Chrome (personal)

I know, I know. Google should just fix this issue—or at the very least confess to it. The default situation is infuriating indeed. And while my indignation remains, my daily browser pain has pretty much disappeared. In practice the above solves the problem pretty well. Best of all, it's highly predictable. That alone is worth a lot.

Thanks Matt.

Saturday, February 18, 2012

Twitter Hacks

My new business cards arrived the other day:

new business cards have arrived
It reminded me to share some interesting bits and bobs related to work. The below isn't my full-time job by any means, but it's fun that I have on the way.

The hobby project I invested most time on in the last year was the Twitter mention constellations. I learned a huge amount on the way; I realized how much goes into taking a hack which works on one's own machine to one which works for others; and I'm excited that a 4-foot-square mounted version of my work is on the wall at Twitter HQ.

More recently this was one of mine:

Breaking news in Twitter
Sad times, no doubt, but it's nonetheless fascinating to see the data behind such phenomena. I was very impressed by SocialFlow's detailed work on the topic too.

More whimsically, I also shared this one recently

Length Distribution of Popular Tweets
in case you were wondering how long you should make your tweets for maximum engagement.

I also did

MTV versus Earthquake
which (see detail on Flickr) shows the spread on Twitter of an on-air hashtag versus news of a seismic event.

One of my favorites is still this:

Rick Perry's Oops
for which the context can be found on YouTube.

Saturday, February 04, 2012

January 2012 in England

We'd not been to the UK since November 2010 when Lux was just 3½ months old. That trip was pretty straightforward kid-wise: she slept for most of the flight over, and was sketchy enough sleep wise that timezones were somewhat academic.

This time things were different. At 18 months, as you might expect, Lux significantly more fidgety and needy in transit—and the jet lag thing was just crazy. Every day we were there, Lux was wide awake from 1am to 6am; Wendy, me and a grandparent would take shifts staying awake with her. Everyone in the house was pretty much just grazing on sleep for a week.

Fantastic time, though.

Great to see my dad again after the longest I've ever gone without seeing him:

Dave
and in turn the longest he's been without hanging out with his granddaughter:
Dave and Lux

A chance to reunite with my sister's fantastic kids: #1

Tate
and #2
Gil
and of course my sister and brother-in-law themselves:
Zoe and Brian

I saw my brother Jak (a bit):

Jak
Lux got to know her cousins a little:
Lux and Tate
and I strolled around the English countryside with my mom and Wendy and Lux:
Sue and Isaac
Lux and Isaac

All in all, a wonderful time with my very favorite people.

Sue and Wendy
Wendy and Lux
Wendy and Lux

Friday, January 13, 2012

New Year Link Clearance

I had occasion on my flight to Austin today to partially catch up on my Instapaper queue. Here are a few of the pieces I read and liked:

Also, I didn't make it all the way through this one but I gave it a shot: Joint Calls from The Central Committee and the Central Military Commission of the Workers' Party of Korea on the centenary of the birth of President Kim Il Sung. Another eye-opener.

Thursday, January 05, 2012

Electoral reform, compendium

I had some time off work over the New Year, and wrote a few things:

Friday, December 30, 2011

Electoral reform, epilogue

After my last post people kept sending in more things, and I keep discovering more from following the leads they give me. The topic also has a deep academic history, which I should have guessed. I thought I'd wrap up here with a quick summary before moving on.

A friend Matt pointed me at a 2005 New York Times article entitled "Why Vote?". It's fascinating and worth a read, but the bit about "your chances of winning a lottery and of affecting an election are pretty similar" is demonstrably false, as shown in the last post: fact is that you're trillions upon trillions of times more likely to win the lottery than to affect an election.

As mentioned (and misattributed) in the article, Anthony Downs, the pre-eminent economist and political scientist, in his 1957 work "An Economic Theory of Democracy", concluded that "a rational individual should abstain from voting". This, "Downs's Paradox" can be stated as

In voting, compute the benefits (B) of having one's candidate win and weight them by the infinitesimal probability (P) that one's vote will be decisive. Then, since voting is costly (takes time, mainly), calculate the overall reward (R), proportional to the probability of actually turning out, as R = P×B - C. Because P is so small, this will be negative for almost any positive C. Thus, no rational individual should vote.
And yet supposedly rational people do in fact vote—hence the paradox.

Some attempts to resolve this issue have introduced a new term, D, to the equation, representing the reward one gets from expressing oneself, participating generally in the democratic process, or fulfilling an endogenous sense of civic duty. Then the reward and probability of turning out becomes R = P×B - C + D which may be positive even for minuscule P, explaining the empirically observed turnout.

This leads us to the research on the Swiss system which is referenced by the Times article. In that paper Patricia Funk postulates another factor contributing to the term D: that of exogenous social pressure to vote. From the paper,

The key innovation of this paper is to use a natural experiment, which allows me to shed light on this particular motivator to vote: the introduction of optional mail voting in Switzerland.

The intuition behind this experiment lies in the opposite effects, postal voting (or other modern voting tools such as internet voting) have on economic and social incentives to vote. Concerning the first, the obvious effect is a reduction in voting costs, with a positive effect on turnout. Secondly, mail-in or internet voting renders the voting act unobservable. If social pressure matters for voting decisions, the presence of mail-in ballots provides an opportunity to escape. Therefore, the more social concerns matter for voting decisions, the more distinctive the mail ballot system’s trade-off between cost reduction and a reduction in social incentives.

While previous voting models cannot easily account for a negative turnout effect of mail-in or internet voting alternatives, a positive turnout effect is consistent with both traditional voting models and with those that include a concern for social motives. The sharpest test for social pressure arises from looking at the effect of postal voting in different-sized communities. A large number of anthropological studies have documented that social control is particularly strong in small and close-knit communities. People know each other and gossip about who does their civic duty and who does not. Therefore, the relief from social pressure is supposedly the highest in small communities and
ceteris paribus, also this negative "social effect" on turnout.

What the study found was that the reduction in voting cost afforded by the opportunity to vote by post didn't result in any statistically significant increase in turnout. In fact,

Turnout declined up to 7 percentage points in the [administrative division] with the highest share (i.e. 36%) of citizens living in small communities. A replication of the same procedure with community-level data confirms that the turnout decrease was particularly a “small-community”-phenomenon.

That is to say, once the Swiss were no longer obligated by the social pressure in close-knit communities to show their faces at the polling places, they didn't.

Smart.

One final note from my friend Andrew, who pointed me at the Asimov short story "Franchise" in which

the computer Multivac selects a single person to answer a number of questions. Multivac will then use the answers and other data to determine what the results of an election would be, avoiding the need for an actual election to be held.

I couldn't find an ebook so I ordered the paperback. Sounds like a good read.

Update 9.37pm December 30th: I couldn't leave it alone. Two final points, and then changing topic:
  1. Read Hannah's comment on the original post. It brings in Toqueville, about whom I now feel I should be more educated and you might too.
  2. I also wanted to add a super thought experiment which Robin threw in: what if government representatives themselves were simply chosen at random from the electorate? "It's super-duper jury service. Which, as an analogy, I realize, does not exactly fill a person with optimism," he writes but of course you've got to think past the implementation difficulties. Personally I'm pretty sure it'd be utter chaos in the short term but in the long term I figure the infrastructure surrounding these hapless "politicians" would adapt to the new regime. Probably they'd make it like the last.

Thursday, December 29, 2011

Electoral reform, redux

I had a great set of responses to my recent post about electoral reform. I got emails, Tweets, blog comments, and comments on Google+. Many interesting thoughts and articles, which I thought I'd respond to in this follow-up.

Some folks argued with the decision not to vote. How could that be a good idea? What if everybody did that? This one's easy. Firstly, that'd be great. Secondly, it's irrelevant. Consider: I might do my bit about overpopulation by deciding not to have kids. Sure, if everybody did that then the consequences would be catastrophic but that doesn't disqualify it from being a rational individual choice. Indeed, many people do make that choice with net positive effect.

Nick provided an interesting post on the "fallacy of the deciding vote". It's a well reasoned piece, but premise (2) renders it inapplicable: the argument at hand isn't whether my individual vote unilaterally decides the result (which obviously it doesn't, as the article points out, in all but the most degenerate cases). It's about the probability that adding or subtracting my individual vote has an effect on the outcome. I don't need my vote to be the single deciding vote by any means.

So that we're clear, before we move on let's call a given individual voter democratically impotent in an election if the election has an identical outcome with or without their vote. Conversely the voter is democratically potent if removing their vote changes the outcome.

Dominic commented on the post presenting a syllogism:

Premise: Your vote is the same as everyone else's
Premise: Your vote literally counts for nothing
Conclusion: Everybody's vote counts for nothing

...and yet, we have a result. I suggest that premise 2 is faulty
and he's right. My hyperbolic "I literally count for nothing" should really have been "in the span of my lifetime, with overwhelming probability, I'm democratically impotent in every election in which I'm eligible to vote". There's a mathematical distinction but barely a practical one.

Interestingly, as you remove more and more voters from the electorate the chances of a voter which remains being democratically potent increase significantly. Thomas Pogge, Yale's Professor of Philosophy and International Affairs, showed in a post last year that in a small population of 63 voters, with each voter choosing independently and with equal probability between two electoral candidates, a given voter has a full 10% chance of casting a deciding vote.

I like those odds, but in large populations things look much bleaker.

In the simple equiprobabilistic model which Pogge presents, in an electorate of 100,001 people the probability of a given voter casting a deciding vote is about 1 in 400. Not bad at all! Assume instead, though, a slight general preference in the populace for one candidate over the other, let's say 49% to 51%, and suddenly your 1 in 400 chance of affecting the outcome in Pogge's model sinks to 1 in 193 billion.

Scale up from there to a population of just a million, and you as an individual voter are democratically impotent with a novemvigintillion to 1 probability¹. If you voted in an election of this kind every second for as long as you lived (or even, hey, every nanosecond for the entire lifetime of the universe), chances are—by an inconceivable margin—that you'd not affect the outcome of even a single one.

Little wonder, then, that cynicism about democracy comes so easy. Richard passed along a link to a passionate soi-disant rant including:

I am being sadly sincere when I describe [democracy] as a system which is much better at giving the feeling of participation than actual participation. To me, this is one of the terrible things about democracy (and part of why it is so successful) - because voting lets people feel like they can influence things. Even if they don't vote, they feel like they could have voted.

But any one vote never matters...
…as indeed is demonstrated above.

So we come back to that idea again of selecting the election winner by picking a single ballot at random and going with that. Now one's chances of democratic potency in an electorate of a million people voting between two candidates with a 49%/51% baseline preference is simply a million to one. Still sounds like long odds but it's a trillion trillion trillion trillion trillion trillion trillion times better than before. In this system people are thus vastly more individually empowered, the tyranny of the majority is ameliorated, and the end result remains proportionally representative, albeit with added statistical noise. It's a win-win-win!

At the end of the day, though, as James noted, whoever wins an election it's always a politician. A solution to that problem is left as an exercise for the reader.

Next in this series: Electoral reform, epilogue

¹ a novemvigintillion is a billion billion billion billion billion billion billion billion billion billion; about ten billion times the number of atoms in the universe.

Tuesday, December 27, 2011

Christmas 2011

A brief interlude to isaach.com regular programming: I thought I'd blog a few pictures from a Christmas Day in San Francisco. I already put a bunch from earlier in the season on Flickr, as well as a set from Christmas Eve, but here are some from December 25 itself.

Probably for the last Christmas in a while, we got up late in the morning: Lux slept an incredible 15 hours and didn't wake up until 10.30am. By that time I'd already had a lie-in and a good chat with my mom at home in the UK—both generous presents themselves, and altogether a lovely start to the day. When Lux did wake we had a family breakfast

Blueberries for breakfast
and opened some presents.

It was a beautiful day, clear and bright and dry, so we headed up Bernal Hill for a walk. I feel very lucky to live in this climate, on this hill, in this place

Bernal Christmas
with my favorite people
Wendy
and
Bean and rocks

Seriously. The most precious companions (and one more family member on the way) as well as this view ten minutes' walk from your house on Christmas Day?

San Francisco on Christmas
Truly I'm blessed.