Category Science

Multiple Patriotisms: Is it Possible For Americans To Unify Behind One Leader?

As we get into the fall season, in addition to the normal rhythms of autumn — back to school, back from vacation, buckling down for the winter — we pass another anniversary of the attacks on 9/11, and get to witness the spectacle of Congress "getting back to work" and the 2008 Presidential race kicking into high gear. 

Frankly, Americans on both sides of the aisle have reasons to dread the latter two events.  With respect to the politically motivated among Americans (however large that population truly is), neither side will actually get anything they want, and much noise and ink will be deployed in trying to convince us otherwise.  One side will not see the US signal a willing end to the Iraq War and an admission that the policy was a mistake, whether deliberate or not — because as is apparent, this is what the "anti-war left" wants.  And the other side will not see a country that "sees the light" and finally agrees unanimously that everything in the last six years is more than justified by the gravity of the threat we face — again, as everybody in the country knows, this is what the "conservative" and traditionalists in this country want.  I leave aside the less salient but still significant aspects of political opposition in this country because, honestly, these are the big issues of the day.  As with Vietnam, the nation today is split over different models of what "patriotism" requires of citizens in our current situation.

Why Do Research?

A couple of weeks ago, I had dinner with some friends, and one of them asked me why I was interested in doing research, having some trouble understanding how it benefited me — was there some kind of commercial or financial benefit?  My answer at the time was probably inadequate; I replied that it was all about one’s personal satisfaction at learning new things, researching the answers to questions we haven’t yet answered.

Today I got a bit of an inkling at a more psychologically adequate answer.  That’s not to say that it’s the "correct," or complete, or the only answer, but I immediately recognized it as a gut-level truth, at least within the scope of my life.  I attended our department’s reception for graduate students and faculty, held at the beginning of the academic year, and met a number of new and returning students, many of whom (because I’ve been off doing business and other things) I’d never met. 

One of the students told me of a class taught the previous year where they’d read a paper I’d written with Carl Lipo (and likely others, I didn’t catch the exact citation, but I’m guessing Lipo et al. 1997).  He mentioned it because of the oddity of actually running into and meeting one of the authors, but for me the experience was significant.  Here was somebody who knew something about me before ever having met me — in this case, how I thought and what I thought about a topic.  He’d encountered some aspect of me as assigned reading in a class, and thus was acquainted with something I’d done and thought, years before. 

We hope to be known, ultimately, by our words and thoughts and ideas.  We hope to be assigned reading, or the fortuitous article or book encountered in the library late one night.  We hope to be the idea that causes somebody else’s project or thoughts to finally "gel" and come together.  Just as others served as the building blocks with which we had a tiny nugget of a new idea, we hope to be the seeds of someone else’s new ideas, down the road.  Most of my ideas and published works will not accomplish this, but some might, whether in a small or large way.

And with that, I greet the new academic year, secure in the knowledge that something I wrote is being read.  And that’s why I, and many others, do research. 

Happy Programmer’s Day

Just yesterday my friend Andy, who apparently reads this site, was complaining that I hadn’t written anything since late August. So here’s a post – though not as meaty or substantive as normal. Today is “Programmer’s Day,” traditionally celebrated on the 256th day of each year (programming….binary code….2 to the 8th power….yeah, it’s a nerd thing).

Actually, no programmers I know (including myself) actually celebrate Programmer’s Day, but it seems like one of those silly nerd memes to get in while real estate on the ground floor is still cheap. So a shout out to TimH, Bryan, Alx, another TimH, Alex, Carl, the OpsMgr gang at MS, Laird, Glomph, and the Ashworth crowd.

My favorite five programmer excuses. ‘Cause we’ve all said one of these at some point….

  1. That’s weird, It’s never done that before
  2. It worked yesterday.
  3. It works on my machine.
  4. I only changed a comment.
  5. It’s 90% done.

Regularly scheduled programming will resume shortly. I promise.

Reflections on complexity on the occasion of diagnosing computer problems

At least twice in the last two days, I’ve had friends or neighbors pose computer problems to me. At least one was my own fault, having given a friend a (fully licensed, purchased from the MS Store) copy of Windows XP to “fix” their laptop via reinstallation. The other is a gentleman here on the island, from whom I’m in the process of buying a small boat to putt around between the islands. In the latter case I answered the usual questions about occupation and history, and since I nearly always answer that question with something about software or computers, I guess being involved in the second incident was my fault, too.

In the first case, the problem was that my friend tried to reinstall XP Pro SP2 over a Dell OEM installation of Windows Media Center, and got an error saying that the product key was invalid. It only took one email for my friend, who’s probably accustomed to folks like me asking seemingly simplistic questions like “did you mistype the code?” to convince me that, indeed, this was a real error. In the second case, a neighbor here on the island knew I was in the software business and asked me why his HP inkjet printer didn’t seem to install and work correctly on his Mac running OS X.

In both cases I was initially stymied. In the second case, I’m still stymied, but I’m buying the guy’s boat so I might help him figure it out tomorrow.

In the first case, a quick Google on the problem revealed that other people have exactly the same problem. Reinstalling a personal (i.e., non-Enterprise) license key for XP Pro over Media Center seems to reject perfectly valid license keys. Of course, even though I worked at Microsoft and have worked with Windows since the 3.1 days, I have absolutely no clue why it does this. I just know enough about the complexity of the Windows code base and have enough anecdotal experience not to be shocked in the slightest. Similarly, I’m not shocked that I could have a serious amount of experience with computers and code and still not have a clue.

I suspect the reason for this is that software engineers actually have two core skills, not one. Sure, software engineers are extremely good at abstraction: the skill of looking at a set of particulars, and creating a model of generalizations to represent any other set of particulars that share all or some of the relationships we imagine to exist within the original case. That task of abstraction is the same one shared by mathematicians, physicists, population geneticists, and other creators of mathematical models. But software engineers, and systems administrators, as opposed to pure computer scientists, have a second skill which is equally crucial. The ability to catalog a large number of actual cases, their causes, and their solutions. In other words, the skill to capture and contextualize and apply the lore of computing.

The first ability, I think, is what people expect when they ask me what might be causing their technology to have a problem. The ability to see a rational abstraction behind the seemingly random behavior that’s occurring, and thus to diagnose what’s wrong. But in reality, the extent of one’s command of lore — of detail, contextualized by situation and software version and architecture — governs one’s ability to solve such problems, particularly remotely — without the computer in question in your hands. The reason is the fundamental complexity of the situation. On top of the hardware runs an operating system, with a specific set of rules. That operating system can be tiny, like MS-DOS 3.3, or utterly massive, like the 60+ million lines of C code that purportedly make up Windows XP. On top of this midgit (or giant), rests a layer of drivers — bit of the operating system contributed typically by hardware vendors that allow the whole thing to work on their hardware. And on top of this three-layer cake runs your applications, today often themselves multi-million line pieces of software code. Code that might also depend critically on being able to communicate to other computers, across a network, to gather data via HTML or other “protocols,” which are essentially small languages that all computers must speak fluently in order to not misunderstand one another.

Complexity is the enemy of things “just working.” And it’s the enemy of even computer professionals being able to understand the systems they build. We can visualize a few interactions; we can even visualize a few histories of interactions. But nobody can visualize all of the interactions and possible states that even a moderately large piece of software (forget Microsoft Office, Windows, the Linux kernel, or Mac OS X) can display. Heck, human beings can’t visualize the geometry of a vector with more than three dimensions! How are we possibly going to understand the state space (i.e., possible behavior) of a piece of software with 66 million lines of code and megabytes of internal state variables?

We can’t, in detail. We do so statistically. We test things over partial ranges of their possible behaviors. Hopefully the important range of their behaviors, in terms of how often users can get their system into the same state. Even understanding the scope of the range of possible behaviors is a massive challenge, witnessed by the continued research into code coverage, automated testing, and the like. The current popularity of unit testing probably represents a programmer-driven effort to simply reduce the dimensionality of the state space. Unit testing reduces, by pursuing automated means of verifying the lowest level of “contracts” within the software itself, the size of the state space by large factors.

But what’s left after good, serious modern testing and QA is still a lot of possible behavior, and only some key pathways, the deepest, most intentional valleys through the overall “landscape” of behaviors, are documented or recorded. Much of the state space of a modern commercial software program is still deeply terra incognita, as a simple consequence of the overall complexity and coupling present in our systems.

Thus, I was encouraged by this post about Erlang on Lambda the Ultimate, a prominent blog about programming languages and the associated computer science. The designer of Erlang, Joe Armstrong, has this to say:

The Erlang flagship project (built by Ericsson, the Swedish telecom company) is the AXD301. This has over 2 million lines of Erlang.

The AXD301 has achieved a NINE nines reliability (yes, you read that right, 99.9999999%). Let’s put this in context: 5 nines is reckoned to be good (5.2 minutes of downtime/year). 7 nines almost unachievable … but we did 9.

Why is this? No shared state, plus a sophisticated error recovery model. You can read all the details in my PhD thesis.

Interesting. And impressive. It’s possible that there’s an approach here for reducing complexity to manageable, understandable, plannable levels. Objects, aspects, and other recent software innovations aim to reduce dimensionality, allowing more of the total state of a program to be explicitly designed, rather than showing up as emergent run-time behavior.

It seems clear, though, that getting a handle on complexity in software is critical — if we’re going to be able to diagnose what goes on inside our software, and thus if we’re going to be able to trust it. For commerce. For security. For privacy. And for exercising our rights in a democracy, since more and more, software is involved when we vote and make decisions.

I’ve Been Quiet Lately

I haven’t written much in a couple of weeks, and it’s because I’m studying a lot in addition to making headway on my dissertation proposal.  This summer, in addition to the proposal, I’m trying very hard to erase some of my deficits in the mathematical arena.  Darwin wrote, in his autobiography:

I attempted mathematics, and even went during the summer of 1828 with a private tutor (a very dull man) to Barmouth, but I got on very slowly.  The work was repugnant to me, chiefly from my not being able to see any meaning in the early steps of algebra.  This impatience was very foolish, and in after years I have deeply regretted that I did not proceed far enough at least to understand something of the great leading principles of mathematics, for men thus endowed seem to have an extra sense.

 

Precisely.  Studying the evolution of culture and cultural behavior, from a modern Darwinian perspective, is inherently a mathematical business.  Change is modeled as shifts in the frequencies of behaviors or traits, rather than outright transformations.  And this means that calculus, linear algebra, differential equations, and stochastic processes are critical tools.  Just as you wouldn’t hire a carpenter that knew how to build a cabinet, but didn’t have the tools to do the work, it’s hard to be an active researcher in this field and not have the right tools. 

So I’m reviewing, practicing, and going further than my previous education in math, and I’m enjoying it thoroughly.  I find that I’m one of those people that needs a purpose and a reason to learn things like the more abstract bits of math, and once I have a good reason, it seems to go smoothly.  But it’s also time-consuming, and it keeps me from writing more.  I thought I’d explain in case y’all wondered why I’ve been quieter than usual.

Fire in the Sky Redux

Most of the time when launching a big rocket, like we did over the weekend at Fire in the Sky, Copyright 2007 Linda LantzyI don’t have time to get decent photos.  The entire flight often lasts less than a minute, and during the descent you’re mostly busy trying to triangulate where it’s coming down, taking bearings and trying to estimate distances, so you can narrow down the area of weeds, grass, or sagebrush you’ll be trudging through later on.
 

So I didn’t get any pictures of my Giant Leap Elipse coming down, under the TAC-1 parachute, but another spectator at FITS did, and here it is!  The TAC-1 chute is big, and with anything smaller than a 3 inch airframe it wouldn’t even fit into the tube, but it’s strong and did a great (and almost as  importantly, visible) job of bringing down the rocket.  The small triangle you can see in the photo is a folded hexagon of Nomex cloth, which protects the chute from the heat of motor ejection while stuffed into the body of the rocket.  Much harder to see is the long Kevlar cord which ties together the two sections of the rocket, along with the steel quick-links (like small locking carabiners) that connect all the bits together. 

NOTE:  The photograph here is (c) 2007 Linda Lantzy, and is not covered by the Creative Commons License which governs other content on this website.  See Linda’s PhotoShelter site for licensing information.