Flawless Ruby

Brian Del Vecchio's Imperfect Code Blog

Jeanette Symons Built the Internet

David Streitfeld opened his NY Times article on gender in Silicon Valley with the claim that “Men invented the Internet.” The Internet has gone to DEFCON 3 in response, including an angry response from BoingBoing editor Xeni Jardin.

The Internet isn’t really an invention, it’s a massive global infrastructure built on a shared set of protocols, designed, implemented, connected, and administered by engineers and technicans.

So the question isn’t really who invented the Internet, but who built the Internet. And I can tell you, Jeanette Symons built the Internet. Not all of it–this was the work of thousands of people over tens of years. But Jeanette built the company that built the equipment that built a major chunk of the Internet, and everything about Jeanette contradicts Mr. Streitfeld’s lazy straw-man argument. If Jeanette were here today she might tell Mr. Streitfeld, in her own colorful way, you don’t know what the fuck you’re talking about.

Jeanette was the technical co-founder, EVP of Engineering, and CTO of Ascend Communications, where I worked from 1994-1997 as a software engineer and manager. We built dialup access concentrators and sold them to Internet service providers. If you connected you to the Internet with a modem between 1996 and 2000, our equipment answered your call. We worked closely with the first commercial ISPs, PSINet, UUNET, building equipment and software to meet their needs during the fastest period in communications infrastructure growth the US has ever seen. In 1997 Ascend sold over a billion dollars of equipment to Internet infrastructure companies.

And Jeanette Symons was the brilliant, uncompromising, ass-kicking engineer and executive who told us all what to do and showed us how to do it. In my 25 year career in the networking and Internet industry, I have never met her equal, man or woman.

Jeanette’s depth of knowledge about telecommunications technology, hardware design, and software engineering was stunning, and matched by something none of the cardboard standups in Streitfeld’s opening paragraph had: a mental blueprint of how the whole system worked, from the chirpy song of analog modem negotiation [before Ascend, Jeanette designed and built ISDN products at Hayes, the largest manufacturer of consumer modems in the 80s and 90s] to the politics of transit routing among top tier ISPs. I watched her argue with Marty Schoffstall, founder of PSINet, and laugh over wine with Mike O’Dell, founder of UUNET. I never saw Jeanette intimidated by anyone. There were times when she was the only woman in the room, but just as often she was the smartest, most powerful personality in the room.

And damn, I miss her.

I left Ascend and moved to Boston in 1997 to join my brother at a startup which would compete with Ascend. I had been her samurai, and she took my leaving her service personally. Jeanette and I did not speak again.

In the following years I would meet people in the networking industry in Boston who knew Jeanette, and many more who had seen the long shadow she cast as one of the most intense and dominating personalities in the business. Everyone wanted to know what it was like working with her. I would tell the story of how, for one of the many weeks I would spend in Virginia working with network engineers at UUNET, she flew me cross country in her 4-seater aircraft. Our campus was adjacent to Oakland airport, and Jeanette had developed an interest in flying, got her pilot’s license, and bought a plane.

She joked to the team at UUNET that she’d make damn sure I wasn’t late for that first meeting on Monday, but we took our time–more than 2 full days to make the journey in her Mooney turbo-prop, stopping at tiny airfields along the way. We talked about work a little–she never stopped thinking about it–but mostly we talked about life as the lights of little towns drifted past underneath.

In 2008 Jeanette was flying from Maine with her 10 year old son Balan and her aircraft went down in bad weather. Both lost their lives, and the Internet industry lost an amazing leader.

In 2009 the National Center for Women in IT creatd the annual Symons Innovator Award, remembering Jeanette by honoring powerful, accomplished women in our industry who inspire us all. Honorees include Anousheh Ansari, Kim Polese, and Audrey MacLean.

Mr. Streitfeld wasn’t there when the Internet was built, but I was–at least for a big chunk of it. And he could not be more wrong about who built it.

Throttle and Debounce | jQuery Boston Meetup

Last week I presented a lightning talk at the jQuery Boston Meetup, Using Throttle and Debounce for Complex Interactions. I’ve posted the slides, but here’s a quick summary of the talk part of the talk:

Many of the jQuery UI widgets provide event hooks that notify you of interaction events (like the user moving a slider) and allow you to update the DOM to reflect the change. This is a commonly used and powerful way to build interactions.

But what happens when the update action takes a long time? The update is synchronous with the user’s interaction with the slider, creating a terrible experience. [The Dude disapproves]

One thing you might try is to schedule the update using setTimeout, because that’s how you make things asynchronous in JavaScript, right? [MewTwo disapproves]

Conditional Refresh on Browser Back

Yesterday one of our contract QA staff filed this bug description:

After you clone a report, navigate to to a different page. Then hit the browser’s back button notice the cloned report is not present.

My first thought was, that’s how the back button works–there’s nothing I can do about it. But then I thought about it for a bit. This is a basic CRUD #index page, but because we’re doing this #clone operation via AJAX, we’ve invalidated the page as cached by the browser. We also do this with #delete–perform the operation via AJAX, and update the page content via DOM manipulation.

I looked around for a way to tell the browser to explicitly invalidate the current page, so that it would be reloaded in case the user navigated to the page with the Back button. But to no avail: there’s no cross-browser way to do that.

But while reviewing the specs for window.location at MDN, I thought, maybe we can use window.location.replace() to set a ‘cache invalid’ flag in the URL that we could test for on page load. If the flag is set, we can force a reload of the page with window.location.reload(force).

Rails Controller Returning ‘406 Not Acceptable’

So I spent about 3 hours today stuck on a problem that was so perplexing–and the answer so surprising–that I thought I should write about it. Several people reported different problems with the same symptoms, but no great matches for what I was seeing. So hopefully I can save a few people some trouble by writing this up.

Note: I’m working in Rails 3.0 on this project, and I haven’t experimented with this in 3.1 or 3.2. But that’s beside the point, really.


I was handing a POST action and then redirecting to an appropriate page with a success message in the Rails flash:

But instead of the redirect 302, the server was sending back a 406 Not Acceptable, which resulted in the browser displaying a blank screen, with no further information.

Rails log output I reproduced 100 times
Started POST "/map/revert" for at 2012-03-22 14:26:28 -0400
  Processing by MapsController#revert as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"XXX"}
Redirected to http://lightrules.dev/zones
Completed 406 Not Acceptable in 339ms

So the controller successfully redirected as I wanted, and then decided that the response was Not Acceptable? Well, that’s confusing.