Tuesday, May 16, 2006

Pennsylvania Primary Judgement

I worked at a polling station in Pennsylvania today. I was the Judge of Elections at a polling station in Forks Township, Northampton County. It was the first time I was an election worker. It was a long day, but I enjoyed it and was interested to observe the voting process in more detail. My co-workers--Arlene, Dale, Liz, and Ray--were all friendly and hard-working. It's nice to get to know you neighbors better.

The turnout out our polling station was low. We had 141 voters come to the polls and counted nine absentee ballots. There are 1,627 registered voters, so turnout was almost nine percent. A second polling station in the same building had an even lower turnout.

The voting went pretty smoothly, I think. We voted with electronic voting machines for the first time in Northampton County. We used two WINvote machines from Advanced Voting Solutions.
I think it went well, particularly considering that people had never used these machines before.

Most of the voters liked the new machines, and some people were very enthusiastic. They said they loved it or that it was easy or that it was much easier than the lever machines. A handful of people, no more than five, had a strong dislike of the machines. One of the people who disliked them said that they did not show who was an incumbent. I'm not sure that the old machines showed that for a primary or not, so I don't know if that's a valid criticism. Several people--maybe a dozen--were concerned about the security of the machines. Many of them asked why they couldn't have a paper receipt like an ATM machine.

Two voters needed their spouses to help them vote. There's an official form to fill out to request assistance and we turn those all in at the end of the day. One of the women was born in Italy and couldn't read English very well. She was one of the many interesting people I met.

We did have trouble with the machines themselves. One of them hung four times and another crashed while loading a ballot. We had to reboot the machines each time. The machines are operated with smart cards. There is one card for the location that is used to start and stop the machine. There are two ballot cards that are used to load and cancel ballots. One machine hung because its card reader stopped responding to the cards. Reboots took a couple of minutes and fixed the problem. The other machine crashed in the middle of loading a ballot. It showed a memory read error with a standards Windows error dialog box--only with an Ok button. I hit okay a couple of times and the machine hung again.

The problem with the machine crashes was their frequency. Five crashes for 141 votes cast is a pretty sorry rate. Imagine that this had been a contested general election. If we had 1000 voters and one crash every 28 votes, I would have done about 35 reboots.

It also took a long time to load a ballot. If a Democratic voter cast a ballot on the machine and the next voter was a Republican it took maybe a minute to switch to the new ballot. A sales rep who stopped by said that there were several hundred possible ballot configurations that it had to search through. I didn't really understand that explanation. There were only two ballot configurations. Why couldn't they both be cached?

It took about an hour and 35 minutes to close the polls. It took a long time to print out tallies and shutdown machines, and there were four paper result sheets to fill out. There were five different envelopes to return, plus a cellphone and all the materials and pamphlets.

Most of the voters were older, almost all more over 60, many were in their 70s and 80s.
Very few voters were under 35. I think about three were in their 20s.

The electronic voting machines are fairly small and the enclosure is small. We set them on two tables. They offered much less privacy than the old voting machines with the curtains, which was a little awkward at times. It did make it easy for people to ask questions about how to vote. They asked a lot of questions and we could explain it to them or show them using the printed out example ballots. A lot of people got stuck on the review page that showed the votes cast on previous screens.

A few people, mostly older people, spent a long time voting--more than five minutes. Our instructions said to stop people after three minutes unless there was no one waiting, but it didn't explain how to "stop them." We did not stop them, but we never had more than four people waiting. If we stopped them, would we invalidate their ballot? We couldn't force them to cast the ballot without pressing buttons for them, which we're not allowed to do.

I wonder how much testing do these voting machines really get? They are used twice a year. For our primary, no machine executed more than 75 transactions. For a busy general election, we'd probably have 300 transactions per machine. If a machine executes a few hundred transactions per year, how much opportunity do you have to exercise corner cases and have confidence that the bugs are worked out. I wonder if they gathered enough diagnostic data when the machine did get rebooted.

It would be helpful to have a better way for people to learn how to use the machines. For the old lever machines, they had a toy voting machine that you could try out while you were waiting. I remember playing with it when I was a kid. When I voted for the first time, I knew exactly what to expect. We didn't have a PC where voters could try it out and the paper printouts didn't capture the experience at all. I think a video showing all the options would make the most sense. You could put a TV and a video player in each polling station.

The process for election works produces a lot of redundant paper records, which seems like a good thing. You have three lists of the voters who voted--an official list of voters (plus carbon copy), log books with the voters signatures, and throw-away forms where the voters print their names. All three records are numbered, so it's easy to track down record keeping errors. There's some redundancy in the computer records, but only as multiple copies of the final tally. At the end of the day, we print out a summary of the votes and export the data onto two USB memory sticks. I believe there is also a copy on the local hard disk. I don't understand if there is any easily audited record of individual votes, because we only see the totals at the end of the day.

Friday, May 05, 2006

Faith Healer

We saw Faith Healer, starting Ralpha Fiennes, Cherry Jones, and Ian McDiarmid, last week in previews. The playwright, Brian Friel, is one of my favorites and I had read Faith Healer in college, but didn't really remember the play. I thought the performance was on the best we had seen: All the actors, perhaps Jones most notably, were excellent. The play itself is wonderfully written and constructed. It's a showcase for actors, requiring them to hold the audience's attention for a 30-minute monologue.

We don't see many plays, so I was curious to see what the reviews would say today after its official opening last night. Did we overestimate it because we don't get to see many Broadway shows? I guess we didn't.
Clive Barnes, New York Post: Play or not, "Faith Healer" is, to use one of its key words, a "fantastic" theatrical experience, outdistancing the current Broadway pack by a country mile, with three performances to be treasured in memory, and reinforcing Friel's position as one of the three or four finest living English-speaking playwrights.
Ben Brantley, New York Times: Playing the title role in Brian Friel's great play "Faith Healer," which opened last night in a mesmerizing revival at the Booth Theater, Ralph Fiennes paints a portrait of the artist as dreamer and destroyer that feels both as old as folklore and so fresh that it might be painted in wet blood.

Sunday, April 16, 2006

CN Tower

Tara was at a philosophy workshop in Toronto at the beginning of the month. Grace and I spent the weekend walking around Toronto. On Sunday we went to the observation deck of the CN Tower. One part of the tower has a glass floor. I'm afraid of heights, but I convinced myself to walk out on the glass and take a picture looking down. It's about 1100 feet to the ground. Posted by Picasa

Thursday, April 13, 2006

My Election Victory

I was elected Judge of Elections in Easton last November. Here's the official evidence. I won with a single write-in vote, although my official notice didn't mention that I was tied with Morris Ankrum, who played a judge on Perry Mason. I was actually elected in a district I don't live in, so I couldn't serve there. The county asked me to work a polling station in Forks Township instead.

Friday, April 07, 2006

Python Tutorial Wiki

Fredrik Lundh put the Python tutorial in a Wiki. One week later it he's seen 175 edits. It's probably the most important Python documentation project going. There haven't been 175 edits to the tutorial in the last five years.

For years, I maintained that Python's documentation tools were just fine. People suggested all sorts of new tools and gimmicks, and I thought that they didn't improve on what we already had. Sure, Latex is hard to format and the tools are a little cumbersome, but writing documentation is hard, so surely the tools aren't the issue. (See stop energy and space-program architecture discussions.)

I'm happy to see I was completely wrong. Removing barriers to entry is critical for this kind of collaboration. Every barrier turns away a few people until you're left with a few people who are committed but too busy to do anything. The Alternative Python Reference has exactly the right goals

Wednesday, April 05, 2006

Python 2.5 alpha 1 released

Python 2.5 alpha 1 was released today! There are lots of new features to try -- and probably lots of new bugs to report. I'm eager to hear how it goes.

My own concern is with the compiler changes for this release. There are a handful of lingering issues, including the line number table problems I started digging into on last Friday's bug day. I fixed several bugs over the last few days, but the debugger/trace support is probably still off a little bit. There are probably a few more embarassing bugs to be found. A few weeks before release, for example, we found that the code generated for a slice with a double colon was completely wrong.

Please posts bugs to the SF bug tracker. (And I note with some glee that Fredrik has scraped all the content out of the SF bug tracker, neatly side-stepping the SF export bug that has stalled the development of a new tracker for the last couple of years.)

Wednesday, March 29, 2006

Python Bug Day and Alpha Release

There will be a Python Bug Day on Friday. I hope to fix several AST-related bugs. When we merged the ast-branch to the trunk, we commented out a few tests for edge cases we weren't handling yet. Well we still aren't handling those edges cases, and they'll cause crashes when we push a release. Thomas Wouters also found a small bug in the AST arena implementation.

I'm looking forward to this bug day, because it's on a week day. I can make time for Python development during the week, but weekends are mostly reserved for family time. I hope weekday bugdays are convenient for enough people that we can do them regularly.

The Python 2.5a1 release is imminent, too. Anthony Baxter had originally planned a code freeze for Thursday (tomorrow), but pushed in back a week because of the bug day. The exact schedule hasn't been worked out, but I'd expect the alpha in the second week of April. The final release is currently schedule for late summer, but I'd expect that to slip into early fall.

There are lots of new things in Python 2.5. The new bytecode compiler is sure to destabilize things a bit, but provide several long-term benefits. I'm ambivalent about the language changes: The conditional expression syntax is awful, as is the relative import syntax with dots between from and import. I don't feel much need for a with statement, but won't be surprised if I'm wrong about that. I certainly appreciate RAII in C++ and with supports the same kind of pattern. The new generator expression seems useful in the abstract, but the actual realization of it is weird. The yield statement is now an expression and may return a value? Huh?