News From a Possibly No Longer Out Of Date Source

(rss) (I keep a second list just for contras I've called: Calling Log)

Friday November 20 2009:

Now With RSS

I wrote something to convert this page into an rss feed

Wednesday November 18 2009:

Public transit maps

I've wanted to see, for some time, I map of the area served by the MBTA that showed for each point how well served by public transit it was. If one thinks of a simple map of how long it takes to get to each place from a given location, the kind of heat map given by triptrop for NYC, the map I have in mind could be seen as setting each point on the target map to the sum of the time estimates on the triptrop map for that point.

There are some problems with this. First, adding raw transit times will weight long distances unreasonably. So we sum 1/(transit_time) over the area instead of transit_time or something similar. Or maybe we use a more complex function? We want some way to say "one hour or two hours a way -- I'm not going to go there anyways. But twenty minutes vs fourty minutes is a big difference". A bigger problem is that not all destinations are equally valuable. Perhaps I would rather go to places with high population density, or high job density.

I thought about this some, found the mbta data available on line, and was considering starting to write something to make a map. Then I talked to julia, she said this sounded like the walk score idea. I initially thought that walk score wouldn't be helpful because they're just using stop locations. It sounds like they are interested in scoring transit better, they jsut haven't done that yet. They have a transit score wiki page, an experimental "how far can you go in 45 minutes" page, and they pointed me to graph server (or maybe it really is here).

Graph server appears to take both the public transit data and the open street map data as input. Cool. They say

Graphserver provides a C implementation of Djikstra's shortest path algorithm. This algorithm can be used to solve any number of problems, including street routing, transit routing, network analysis, etc. The core graphserver library has Python bindings (and deprecated Ruby bindings), which provide easy construction, storage, and analysis of graph objects. There are also a handful of tools designed to work with Open Street Map data and GTFS transit data."
I need to look at this more.

But I'm still not sure what to graph. I looked at some papers on the subject that I found linked from a discussion on transit-developers. I've only read the second of the two, and that I only skimmed, but it looks like this is a really complex problem.

Thursday November 12 2009:

Urban Transportation

For a little over a year I've been using a bike for most of my transportation. I like it, but it can ba a hassle. Specifically, I can't combine it with buses (wheelbase is too long) or the subway (prohibited at rush hour) and it's hard to store. When living in medford, it was the best of not that many options. But in cambridge there is frequent bus service.

The first two weeks I either took the bus (+walking) or biked. For work and back, bus works well. For chinese class at tufts, though, the leg from tufts to work has poor mbta support. Walking this takes a really long time. >Biking it means I need to bike the other two legs as well.

Today I tried using a small "razor"-style folding kick scooter that I'd found in the trash last year. It worked pretty well. Combines well with bus riding. I don't really like riding it, as it feels far more awkward than a bike or walking, but it has a good value for speed_increase / (weight * size).

One thing that seems like it would be more natural to ride is a skateboard. I would need to learn how to control one properly (harder than a scooter, and for effective transportation it needs to not get away from you) but I think it would work better. The downside is that skateboards have cultural associations that scooters don't. (Scooters are dorky, but I'm ok with that.) It's hard to read about skateboards, though, as pretty much everything I've been finding online is based on using them for tricks, not transport. The lack of brakes is also not ideal.

Wednesday November 11 2009:

Friday November 06 2009:

Zonet ZEW1605A on Ubuntu Linux

I just got my new PCI wireless card set up on ubuntu. When I first put it in, ubuntu tried the rtl8180 driver, which froze the computer. I got it to work using ndiswrapper with the drivers from the CD. I've put these up:
Zonet ZEW1605A linux drivers
The ubuntu ndiswrapper tutorial was very helpful. I did need to blacklist the rtl8180 module.

Wednesday November 04 2009:

I tried out my trailer this morning. It worked pretty well. Certainly more work than unladen riding, but the hitch seems to have no slop, the decreased ability to turn right wasn't a problem, and it felt better than biking with a rear rack about half as heavy.

Monday November 02 2009:

Google Transit: Boston

Apparently, google maps has known the mbta schedules since july. I've just noticed this now. It's very good, much better than the mbta's plan my trip page. Things I like: Things I don't like:

Saturday October 31 2009:

Thinking about simulated annealing

I've been reading Duda, Hart, and Stork's "Pattern Classification". Much more detail than we got to in swat's AI class or the following seminar. Some parts are tough going, and I'm definitely not working out every detail, but I think it's helpful.

I just finished reading about simulated annealing, and I think I understand now why it's much more generally applicable than simple random restart hill climbing. In the latter you pick a random point in the solution space, consider all the neighboring points, move to the best one, repeat until you're better than your neighbors. Then repeat the whole process, remembering your best places so far, until you decide to stop. People always talk about the problem with this as "getting stuck in local minima" (with the "down is good" analogy of "gradient descent" instead of the "local maxima" that the "up is good' analogy of "hill climbing" would give) but I didn't really understand. I think now I do.

Consider trying to find the lowest point in a parking lot. The lot is pretty smooth, and pretty consistent, so you could put a soccer ball in the middle and see where it stopped. But what if you chose a ball bearing? The parking lot is smooth on a soccer ball scale, but not on a ball bearing scale. So the bearing gets caught in a low bit (local minimum) while the soccer ball rolls all the way down (global minimum).

In simulated annealing, we use a ball bearing but shake the parking lot so it has a decent chance of getting out of these little pockets and making it's way all the bottom of the lot. So that we don't keep bouncing around for ever, we start off shaking the lot a large amount, and over time decrease our shaking exponentially until we're not shaking at all.

Because simulated annealing decreases the amount of shaking over a very wide range (lots to almost none) it's suitable for all sorts of terrain, from ditches to dents. Hill climbing only works if the terrain is close to smooth.

What would happen if we tried a search system closer to the one with the soccer ball? The soccer ball represents a large portion of the solution space, and at each time step it moves from one set of adjacent points to a new set, under the condition that the highest of the new set of points be lower than the highest of the current set of points. Once could imagine "simulated soccer ball rolling" where one starts off with a giant ball and then makes it smaller over time until one has a ball bearing making tiny adjustments. The biggest problem with this that I see is that rolling a soccer ball requires testing a prohibitively large number of points. Imagine how many points would need to be tested to roll a ball 1/16 the size of the earth over the earth's surface. Worse, there are lots of solutions this search misses because it is strongly biased towards solutions that lie in large flattish regions. Our giant ball rolling over arizona would likely miss the grand canyon.

This diversion with ball rolling aside, I think the part about simulated annealing that really made sense to me is: exponentially decreasing willingness to make things worse is a good fit for a huge range of possible solution spaces.

Thursday October 29 2009:

Learning more about emacs

When I first started using emacs, I chose it because I figured I might someday want my editor to be able to to something crazy, and emacs had the best chance of being up for the crazyness. Over the past five years or so, this hasn't actually turned out to be the case: almost everything I've wanted that's at all complex has made more sense as a stand alone program. This meant I'd not even learned how to write new functions for emacs. So today I learned how. Each of these entries is separated by a little bit of code that looks like:
  <a name="2009-10-29"></a><h3>Thursday October 29 2009:</h3>
  <div class="pt">

    <h3></h3>

  </div>
    
I'd been typing this in by hand, but today I decided to automate this. It turns out emacs supports the unix date syntax, so my dates become something like "%Y-%m-%d" and "%A %B %d %Y:". Very handy. The rest is just inserting characters:
  (defun start-news-entry ()
    (interactive)
    (insert (format-time-string
       "  <a name=\"%Y-%m-%d\"></a><h3>%A %B %d %Y:</h3>"))
    (newline)
    (insert "  <div class=\"pt\">")  (newline)  (newline)
    (insert "    <h3></h3>") (newline) (newline) (newline)
    (insert "  </div>") (newline))
    
So now I can just do "M-x start-news-entry" and not delay my urgent news-thoughts with mindless formatting. Yay.

Wednesday October 28 2009:

Bike Trailer

I built a trailer to pull behind a bike. There are bulky things that without borrowing a car are tricky to move; this should help:
The rope is to suspend milk crates so they are below the level of the axles and give a nice low center of gravity. I'm considering using bungee cords instead for some suspension, but I need to think about how to be sure they won't stretch enough to touch the ground. I still need to paint the frame and add brackets to attach bungee cords to for holding the load.

The frame is made from 2 and a bit 8 foot 2x4s and is 28.5 inches by 34 inches. Glued and screwed together. Asymetrical because the wheels have different widths. The wheels are the oddball 28 inch (635mm) 700B westwood roadster wheels that came with my flying pigeon. For dropouts I used galvanized steel "mending brackets" from home depot with the dropout slot cut with a drill press and hack saw.

I made two different hitches, one for my bike and one for julia's. For both the hitch itself is a QI250 quick dissconnect ball joint. I patterned the hitch after the bikes-at-work trailer hitch design. On julia's bike I used U-bolts to attach it to the frame:
On my bike I used radiator clamps because the tubing on my frame was bigger than the U-bolts I had and it needed to clear the coaster brake reaction arm:
Several parts of the trailer are stronger and heavier than they need to be (hitch L-bracket, 2x4s for the frame, big wheels). The towbar arm and hitch ball may be smaller than they should be. Not sure.

Monday October 26 2009 B:

Exceptions in programming: asking forgiveness instead of permission

In languages like C where there is nothing to check that what you're doing isn't going to explode on you, the normal way to deal with exceptional conditions would be to check first whether there is a problem:
       if (obj != NULL)
           work_with(obj->attr);
       else
           pester_user("obj can't be null!");
     
In languages that run in an interpreter, such as Python or Java, it's possible for the interpreter to make sure you're not doing anything illegal and raise an exception if you do. In C, trying to dereference a null pointer is undefined; code may do absolutely anything afterwards. In Python and Java, though, you get an AttributeError and NullPointerException instead. This is because when you write a.b there is low level code that always runs and checks that a is not null for you. Very handy. This means I can write a python version as:
       try:
           work_with(obj.attr)
       except AttributeError:
           pester_user("obj can't be null!")
     
The general idea that you should do something, then deal with the fallout if it fails, gets called "Easier to Ask Forgiveness than Permission".

There are three reasons, however, why I tend to find it frustrating. One is that to make it work properly I need to know exactly which exception will be thrown if the command fails. So the python statement a[i] will throw an IndexError if a is a list or a KeyError if it is a dictionary. So I need to look or I need to remember. Ugh. Why make me do that? Can this be avoided?

My second issue is that it can hide errors. What if a is an instance of a class I've written that implements __getitem__ to support a[i] syntax, and has an bug in it's implementation that manifests as an IndexError? My code won't see that IndexError as exceptional, but instead just thinks "ok, a is empty".

My third issue is that it's ugly and verbose. I like to write in the 'permission getting' way with:

       if key in a:
           work_with(a[key])
       else
           pester_user("key not in a")
     
while the 'forgiveness requesting' way feels much worse:
       try:
           work_with(a[key])
       except KeyError:
           pester_user("key not in a")
     
(Note that this brings up another issue with basing programming on exceptions: if either a[key] or work_with might throw a KeyError, I can't separate them cleanly.)

This is not actually a very good reason to dislike the second example, as it is no more verbose than the first one. Both are four lines, similar number of characters. They differ in that the first case requires me to know the proper check while the second case requires me to know the proper exception to catch. This shouldn't be import either. Do I just need to get used to the way try/except looks?

I'm not sure I can fix the third (it's ugly!) issue, but I think the first two might be fixable. They come from not being able to accurately indicate what I would like to catch. If I see someone write:

       try:
           work_with(a[key])
       except KeyError:
           pass
     
I see that what they intend is very likely "work with a[key] if it exists". Is there a way we could tell python that? Something like:
       try:
           work_with(<a[key] : bad_indexing>)
       except bad_indexing:
           pass
     
then distinguishing errors raised by work_with from those raised by the lookup is clean:
       try:
           <work_with(<a[key] : bad_indexing>) : work_with_error>
       except bad_indexing:
           pass
       except work_with_error:
           pester_user("work with error")
     
Still not too happy about this, though. Need to think more.

Monday October 26 2009 A:

Went to a contra dance at the new West Cambridge Youth Center on ths site of the old VFW hall. This is where the Thursday night contra was until 2004 when the building was torn down.

The building is remarkably like SpringStep, a relatively new dance space in Medford where the thursday night contra dance met briefly before spending most of the past few years at Scout House in Concord. Both spaces are very orange, but it's not just the similarity in color. The youth center was designed by Cambridge Seven Associates while springstep was designed by Andrew Cohen Architects. So I don't know how they came to be so similar.

Both are a good bit too modern for my liking.

Thursday October 22 2009:

'Freezing' symbols in mathematical notation

I just read How To Write Mathematics by paul halmos (1970). I agree with most of it, but one part (5: Thinking About The Alphabet) I'm not convinced on. He writes:
Mathematics has access to a potentially infinite alphabet (c.g x', x'', x''', ...), but, in practice, only a small finite fragment of it is usable. One reason is that a human being's ability to distinguish between symbols is very much more limited than his ability to conceive of new ones: another reason is the bad habit of freezing letters. Some ols-fashioned analysts would speak of "xyz-space", meaning, I think, 3-dimensional Euclidian space, plus the convention that a point of that space shall always be denoted by "(x,y,z)". This is bad: it "freezes" x, and y, and z, i.e., prohibits their use in another context, and, at the same time, it make it impossible (or, in any case, inconsistent) to use, say, "(a,b,c)" when "(x,y,z)" has been temporarily exhausted. Modern versions of the custom exist, and are no better. Example: matrices with "property L" -- a frozen and unsuggestive designation.

There are other awkward and unhelpful ways to use letters: "CW complexes" and "CCR groups" are examples. A related curiosity occurs in Lefschetz. There, x^p_i is a chain of demension p with index i, wheras x^i_p is a co-chain of dimension p wiith index i. Question: what is x^2_3?

As history progresses, more and more symbols get frozen. The standard examples are e, i, pi, and, of course, 0, 1, 2, 3, .... (Who would dare write "Let 6 be a group."?) A few other letters are almost frozen: many readers would feel offended if "n" were used for a complex number, lowercase epsilon for a positive integer, and "z" for a topological space. (A mathematician's nightmare is a sequence n sub lowercase epsilon that tends to zero as epsilon becomes infinite.)

Moral: do not increase the rigid frigidity. Think about the alphabet. It's a nuisance, but it's worth it. To save time and trouble later, think about the alphabet for an hour now; then start writing.

The concept of "almost frozen" symbols started being interesting to me once I learned to program. I thought: this is neat; the mathematicians are putting type information in the variable names. Sort of like BASIC (where A is a number, $A is a string, ...). I really like that I can pretty much count on 'n' being a natural number because it makes expressions much easier to read. Someone can just write write "let m = 3n" and without any messy type declarations ("where n is any natural number") I can see that m is divisible by 3. Hamos objects to this thing I'd always thought of as a neat way that mathematical communication was efficient, calling it "frigid rigidity". yikes.

The main part of "almost frozen" symbols that I like is that they make notation more consistent between writers. If everyone uses f to name an abstract function, then it's easier to interpret f in new writing, but fstarts to freeze to that meaning. The reason hamos does not want us to "increase this rigid frigidity" is that "in practice, only a small finite fragment of [the infinite alphabet] is usable." I see this as a tradeoff between running out of symbols and consistency between authors. As long as we're willing to reclaim previously frozen symbols when the fall out of use (which his "xyz-space" example suggests we are) we shouldn't have to worry about running out of symbols.

Wednesday October 21 2009:

Cell Out, Coltan, the Congo, and Raising Awareness

Trying to see how reasonable the "Cell Out" campaign is. The idea of this campaign is that people are supposed to all turn their cell phones off for an hour and set the voicemail to something like:
Did you know that Congo has anywhere from 64 - 80 percent of the world's reserve of coltan, a natural resource that is central to the operation of our cell phones? As we benefit from coltan nearly 6 million Congolese have died in the deadliest conflict since World War Two as a result of the scramble for coltan and other minerals key to the functioning of modern technology. Join us in solidarity with the Congolese people and fast from your phone for an hour
So first, there are some problems I have with this message. It implies that our cell phones are possible only because of exploitation of the congo's coltan (after all, they apparently have most of it). But this is misleading. We care about coltan (called columbo-tantalite elsewhere) because one can extract tantalum from it. The tantalum in cell phones and other sources mostly does not come from the congo. Instead, it's mostly austrailian. With official 2006 figures for the congo showing the congolese fraction at .7%. Even if we were to assume that all tantalum mined in africa was in fact mined illegally in the congo and smuggled out to other countries to be reported in their production figures, the same figures show we would get only 15% of global production.

What is more frustrating, they don't source their "64 - 80 percent" figure, and looking on line I can't see anything about the fraction of coltan reserves in various places. The only place I can find, another usgs.gov report, just says "N/A" under reserves in the congo. I should ask them.

Update 10/22/2009: I asked them about this, and they got back to me:
  1. BBC "Congo's Coltan Rush"
  2. Niobium Institute - they removed the info from their site about two years ago. We printed it out before they removed it. They claimed that 80 percent of the coltan in the world is found in African and 80 percent of that is found in the Congo
  3. 2008 US Government Accountability Office GAO Report on the Congo which states 64 percent.
I checked the GAO link and it does say 64%. No indication how the GAO got the number. I've emailed them to ask for details. I also emailed the BBC to ask about their 80% number.

I looked through old versions of the tanb site on the wayback machine. No luck finding the 80% of 80% figure there.

Update 10/27/2009: The GAO got back to me about the 64% reserves figure in report GAO-08-562T:
The source for the information you referenced is from "Under-Mining Peace -- Tin: The Explosive Trade in Cassiterite in Eastern DRC," a report by Global Witness, June 2005.
This is apparently available online. On page 13 of this document there is the line:
Although Australia is currently the largest producet of coltan, it is estimated that Africa possesses 80% of the world's reserves, with 80% of this believed to be in DRC.
and the words "64% of the world's known coltan reserves occur in the DRC" are set off in bold type. There is no citation for this estimate.

Is the Second Congo War really "a result of the scramble for coltan and other minerals key to the functioning of modern technology"? This I find somewhat believable, but it does contrast pretty strongly with descriptions elsewhere that have minerals serving as funding sources for the war but not causes.

The real problem I have with this, though, is that it is crazy to expect individual end users of a material to be aware of its effect on the world. People use so many different substances that they can't know where they all came from. More importantly, if I were to avoid all tainted sources (spend more to buy certified australian tantalum, free range eggs, sweatshop-free clothing, ...) that would have a huge cost in both my time and my money. It would be hard to find out what was ok and what wasn't and then actually buying this stuff would be more expensive. The more I spend on this stuff, the less I can give to oxfam. So while I see value in raising awareness of how bad things are globally, raising awareness of specific things like tantalum in cell phones that might come from the congo seems like a waste.

Thursday October 15 2009:

Narrow band television

About a week ago I thought: a computer sound card can do digital to analogue conversion very well. A computer generally doesn't have an analogue video out port. Could one use the sound card for this? It turns out that this is possible to some extent, but not what I was hoping. The main problem is that standard television signals are high bandwidth, which means that we need a much higher sampling rate than a sound card does. A sound card gives you 44.1 thousand samples per second, but to do full tv at the standard 30 frames a second we need about 150 times that many samples. So anything that works is going to need to be a lot lower quality.

There are two options for trading off quality: you can show smaller frames or fewer frames. It looks like people have done both. These are both technically "Narrow Band Television", but generally the former gets this name and the latter is called "Slow Scan Television". Narrow band is how television started, with very small pictures at full speed. SSTV is more recent, being used by ham radio operators to send primarily still pictures. Both of these are within reach of a sound card and can be done.

For hooking a computer up to a modern but analogue television, SSTV would definitely not work for several reasons. The biggest is that the phosphor on the tv needs to be refreshed very often, and at several seconds a frame the top half of the screen would be long dark by the time the bottom half was drawn. It also seems that while the NTSC format does say the TV needs to sync up to the video input signal, that's mostly for fine correction. Sending the sync signals at a speed 1/150th or so of what was expected by the TV designers is unlikely to work.

Narrow band TV is also not likely to work, but has a greater chance of working. If we can send the syncs proprly, we ought to be able to get it to jump back to the top of the screen after only sending 15 lines or so. This would let us draw a small image, though it would be way stretched. The problem, I think, is that we would need to send the sync signals with greater resolution than we can manage with a sound card.

Tuesday September 29 2009:

The 'expand this here' * operator in python

The python docs (2.6.2) say this about the use of *:
5.3.4:

If the syntax *expression appears in the function call, expression must evaluate to a sequence. Elements from this sequence are treated as if they were additional positional arguments; if there are positional arguments x1,..., xN, and expression evaluates to a sequence y1, ..., yM, this is equivalent to a call with M+N positional arguments x1, ..., xN, y1, ..., yM

7.6:

If the * is present [in the function definition argument list], it is initialized to a tuple receiving any excess positional parameters, defaulting to the empty tuple
This is very handy, but is also limited. In python 3.0, PEP 3132 added some related syntax:
first, *rest = seq
a, *b, c = range(5)
This is again, handy but limited. This star syntax only works in these two cases: functions (star-args) and assignment targets. There are logical extensions that make a lot of sense to me, though. If one can do:
first, *rest = seq
then I want to be able to do:
seq = first, *rest
While the following is ambiguous and so clearly needs to be illegal:
first, *some, *rest = seq
this is not ambiguous:
seq = first, *some, *rest
While we're at it, lets make the following legal:
foo(first, *some, *rest)
All these changes together would make for a very consistent and powerful interpretation of * as 'expand this sequence here'.

Thursday September 17 2009:

Sonic Foot

At an open house our new neighbors held last week, there was a large organ pipe in the front hall. This reminded me of previous musing on why the note 'C', which we think of as pretty central, happens to come out to be almost exactly one foot long. As there were several people at this open house who knew a good bit about music, I started trying to see if any of them knew how this came to be. They brought up three good points in the direction of coincidince:
  1. While we think of 'C' as central, to many instruments it is not relevant at all. Brass instruments like flat keys and string instruments like sharp keys. Some note is going to be close to 12 inches, so it could easily just be coincidence that it is 'C'.
  2. Pitch has changed over the years, generally getting sharper. So if with 'A' at 440Hz 'C' is close to (power of 2 multiples of) 1 foot, then with 'A' at, say, 415Hz, 'C' would have come from a tube almost 13 inches long. There are examples of 'A' as high as 500Hz and as low as 390Hz.
  3. Were people even working in feet back then?
So how is 'C' central? One important way is that in [just intonation] (instead of modern [equal temperment]), 'C' was often the key where the ratios were perfect. That is, in the key of 'C' you would have the fifth be 3/2 times the length of the tonic and the fourth would be 4/3 times. This works out nicely if your 'C' is 12 inches, as then the fifth, 'G' is 18 inches and the fourth is 16 inches. You can, of course, do this in any key, but if you do it in C then they all come out in inches.

Looking for historical detail, I find:

The first mention of temperament is found in 1496 in the treatise Practica musica by the Italian theorist Franchino Gafori, who stated that organists flatten fifths by a small, indefinite amount. This practice was formalised in what is called the mesotonic or meantone (also written mean-tone) scale. It was always particularly favoured by organists and explains why organ music from the period the early sixteenth to the nineteenth century was written in a relatively small number of keys, those that this scale favoured. Arnolt Schlick's Spiegel der Orgelmacher und Organisten (1511) described both the practice of and formulae for mean-tone tuning which makes it clear that it was already in use. Pietro Aron produced a more thorough analysis in Toscanello in Musica (1523), which sufficed for all practical purposes. The earliest complete description was published by Francisco de Salinas in De Musica libri septem (1577).

Based on C, the method relied on using the first five notes from the circle of fifths from C, namely C, G, D, A, E and setting a pure third between C-E by narrowing the fifths by a small amount - from a ratio of (3:2) to a ratio of (2.99:2). D, the note between C and E was set so that the ratio between D and C was identical to that between E and D, so placing D in the mean position between C and E, hence the scale's name. What happened after this to complete the chromatic scale introduced a number of variants which only the more studious of our readers are likely to pursue. Suffice it to point out that the results generally work well in the keys C, G, D, F and B flat but outside these serious problems arise and composers writing for this system avoided keys more distant from C. -- www.dolmetsch.com/musictheory27.htm#mean

The same source claims a few paragraphs later that "in England, it was not until 1842 that the first organ, that of St. Nicholas in Newcastle-upon-Tyne, was tuned to equal temperament."

I wouldn't say this is resolved yet, but I do think that our choice for the pitch 'C' is probably because that pitch is what you get from a 12" (or 2', 4', 8', 16', ...) pipe.

Saturday September 12 2009:

List reply in mutt

Mutt has a nice feature where when you have set it up properly, you can press 'L' for 'reply to list'. I use this a lot, but I'm on a good number of mailing lists and don't like that each time I need to go and add "subscribe listname@host.tld" to my ~/.muttrc. This is annoying. If you invoke 'reply to list' on a mailing list message that you've not marked in the ~/.muttrc, you get the error "no mailing lists found". So, given that such a high percentage of lists are listid setting gnu mailman lists, what if we replace that error logic with:
  1. if would raise 'no mailing lists found error' and
  2. if the message has a list id header and
  3. if the list id header contains an email address and
  4. if the email address is in the to, cc, reply-to, or from field then
  5. reply to list with that address otherwise
  6. raise the error as we were going to

Monday September 7 2009:

I've been thinking about more efficient refridgerators. I see two main issues with the standard fridge design. First, the heat from a typical fridge is dumped out the back, generally into a small space. This is inefficient. Second, the door is on the front instead of the top, so you lose a lot of your cold air when you open it.

I didn't find anyone online talking about how they had run their fridge's coils outside to get better airflow and reduce the temperature gradient. This would be especially efficient in the winter, but even in the summer the increased ventilation would help. The downside is that the fridge then is not moveable without detatching and moving tubing. But for houses or apartments where people were not expected tobe moving their fridges much, it could make a lot of sense. A simpler system could involve running heat conductive metal outside or even putting an open tube (with a valve that closed when it was too warm out, and a filter and grate to keep bugs and animals out) straight into the back of the fridge. Hmm.

Putting access to a fridge on the top does appear to have some acceptance already. This makes lots of sense, but it takes up more space. See this chest fridge (pdf) for an example. It uses about 1/10th the electricity of a new conventional fridge (~30KWh/ year instead of ~400). So how to make it take less space? One option would be to revise the fridge to be a pair of under the counter appliances, on the model of a dishwasher. (A pair because each one would then be half the size of a normal fridge.) They would slide out (The front, sides, and bottom would all slide out, as opposed to a dishwasher design where the door folds down and the racks slide out) with a second slidy bit like the upper rack on a dishwasher. The engineering question, then would be how to support the fridge and its contents when it was slid out.

Update 9/8: Thinking more about this, why not design each under-counter component like a dresser? Each drawer would pull out separately and keep cold air from falling out. You would need to design the drawers carfully so opening the bottom drawer didn't let all the cold from the top out. Something like:

This led me to look for "refrigerator drawers". And apparently these exist, but they're really crummy. Consumer reports says:
But you'll pay dearly for those limited benefits. The tested models cost an average of $2,500 (prices range from $1,800 to $3,200) for what we measured as only about 4 cubic feet of usable fridge capacity (none of the models has a freezer). What's more, while fridge drawers cost little to run (about $32 to $42 a year), they're far less energy-efficient than any type of full-sized refrigerator in our Ratings.
Looking at the pictures, they're designed to be stylish, but not to keep cold air in. For example in the picture below, the sides don't go all the way up:
It also looks like at least some models have open bottoms:
There are expensive commercial ones that don't, though, so this should be fixable:
Another problem with the drawer models out there appears to be size. A traditional fridge appears to have a volume of around 14 cubic feet, where some of that is the freezer. Models I'm seeing for drawer fridges don't appear to give more that 10 to 12 cubic feet for a side by side pair. So you lose two cubic feet.

Monday August 24 2009:

I'm not sure what I think about the existence of this: [[Reliability of Wikipedia]].

Friday August 21 2009:

The schlumph mountain drive bottom bracket with planetary gears looks pretty cool. It is foot actuated and allows a reduction of 2.5. I was curious what sort of gears it would give my bike so I calculated:
front gearrear geargear inches
1118.6
1225.5
1334.6
2144.6
2261.1
2383.1
No wasted gears, a nice shifting pattern with only one double shift, as low a gear as I could want for a really steep hill or a really heavy trailer. A total range of 501%, which is almost as good as a rolholff's 526%. The schlumpf is rated for use with coaster brakes, and my SRAM T3 is tough enough for the schlumpf. But how to justify $.5K for a new bottom bracket?

For reference, my current gearing is based on approximately 28 inch wheels (622mm rims, largeish tires), a 48 tooth front cog, a 22 tooth rear cog, and a SRAM T3 hub that offers 1st, 2nd, and 3rd at 73%, 100%, and 176%.

Thursday August 20 2009:

Who Knows 13?

I was reading about cumulative songs and discovered that what I think of as the passover 'game' "who knows 13?" is more commonly the song Echad Mi Yodea (Who knows one?). In my father's family, we do it as a game where first we go around the table building it up to thirteen (person N goes from N down to 1, then asks person N+1 "who knows N+1), then we go around again trying to say the whole thirteen as many times as we can in one breath. But there is no melody or any sort of song to it. I should learn the song.

The other difference would be the words I know vs the words on wikipedia: (our version is from memory, so it might not be right, but I think it is)

"Popular version" from WP "Rhyming version" from WP Our version
Thirteen are the temperaments of god Thirteen are the attributes of hashem Thirteen are the attributes of divinity
Twelve are the tribes of israel
Eleven are the stars of joseph's dream
Ten are the commandments
Nine are the months of the pregnant Nine are the months til the baby's born Nine are the festivals
Eight are the days of the circumcision Eight are the days til the brit milah Eight are the lights of chanhukah
Seven are the days of the week Seven are the days of the week (ooh-ah) Seven are the days of the week
Six are the books of the Mishnah Six are the days of creation
Five are the books of the torah
Four are the matriarchs Four are the mothers
Three are the patriarchs Three are the fathers
Two are the tables of the covenant Two are the tablets that moshe brought Two are the tables of the covenant (and)
One is our god, in heaven and on earth One is hashem, one is hashem, one is hashem! In the heaven and the earth One is our god, in the heavens and the earth

Friday August 14 2009 B:

For a few years I've checked email with a program I wrote called statmbx. It reads my mailboxes and gives me a summary of what is marked as 'new'. I like it a lot. The code is about as efficient as any code that reads all the mailboxes can be. The only way to make it more efficient would be indexing, and that would be a lot of work. It is a little slow on loaded machines, though. How to make it faster? I realized I use it for two things:

Friday August 14 2009 A:

I've updated icdiff. It should be a lot faster now. Get it here: icdiff.py

Monday August 3 2009:

I just finished reading andrew keen's book, The Cult of the Amateur: How Today's Internet Is Killing Our Culture.. I'm not very impressed. The book is divided into two main sections: first, an extended diatribe against "Web 2.0", and second, a survey of various internet related ills. This second part is relatively well informed, but not very interesting as identity theft, pornography, and gambling have received extensive coverage elsewhere.

Them first section, however, is a mess. Keen angrily derides any system where the information is not provided by paid experts, generally without properly understanding what he is criticizing. His biggest error a misunderstanding of the roles of search and aggregation. This confusion pervades the book, turning ostensibly good things like additional information becoming available online into harms. He rails loudly against google as a parasite [1] and claims any aggregation system not backed by experts narrows our access to information [2] . Then he goes on to complain that with all this amateur content we won't have any way to find what's worth reading. He observes that "the more self-created content that gets dumped on the Internet, the harder it becomes to distinguish the good from the bad" [3]. He asks if "we really need to wade through the tidal wave of amateurish work of authors who have never been professionally selected for publication?" [4] No, each person need not wade through all of it. No, it's not one person's job alone to distinguish the good from the bad. The problem that keen identifies, that the more information there is on the internet the harder it is to make sense of it and determine what is worth reading, is solvable. Blogs, search, and aggregation all solve pieces of the problem, yet keen dismisses blogs as narcissistic, search as parasitic, and aggregation as narrowing.

In the opinion of this non-expert reviewer, keen misses the point.

[1] "Google is a parasite; it creates no content of its own. Its sole accomplishment is having figured out an algorithm that links preexisting content to other content on the internet ... In terms of value creation there's nothing apart from its links." -- p135

[2] "These sites track the reading habits of their community and make recommendations based on the aggregated preferences of the entire community. But such a method cannot be relied on to keep us informed. When our individual intentions are left to the wisdom of the crowd, our access to information becomes narrowed, and as a result, our view of the world and our perception of truth becomes dangerously distorted." -- p94

[3] p31

[4] p56

Monday July 20 2009:

Thinking about money and percentages. Specifically whether it's possible to state one's obligation to the poor of the world in terms of percentages.

Friday July 3 2009:

A little over a year ago I bought an eeepc. I used to claim that I had no use for a portable computer and would not make use of one even if it were given to me. Oh how foolish I was in 2007. The main thing I like about this computer is that I can write or read on the computer in a central area, such as a living room. At swarthmore I managed this for two years by having the central space being in my (shared) bedroom, and senior year I set my computer up in the hall, with ethernet cables running back into my room. This does not work as well in medford, as there are now multiple social spaces. None of which it would really make sense for me to set up a desktop in.

So I gave in, and use a laptop despite my continued hatred of debugging wireless problems. But I'm not writing this just to admit I had misjudged laptops. I'm writing this because I just installed eeebuntu on the computer and made a bunch of customizations. It's like a new computer. So, changes from the factory xandros install:

I also like how it will now autoconnect to the medford wireless and suspend to ram for near instant boots. It's amazing how long I stuck with lazily configured xandros.

Now I just need to figure out how to shrink the firefox status bar.

Thursday July 2 2009:

I've been reading archives of Wandering Thoughts, the blog of a UToronto sysadmin. Lots of interesting ideas. Reading PersistentVsDisposableUsage, in which he claims that most people either open a new shell for each task or use the same set of long running shells for multiple tasks, I realized I fall pretty squarely into the second category. I keep shells open that fill the desktop space, and use whichever one is free. But where I should be, really, is "shell per task", where when doing one class of thing I use a specific shell instance. This would keep history straight.

I also started thinking about what Sameer does with history: all commands typed go both into a full history file somewhere and a .local_history file in the current directory. The local_history idea I don't like, as it clutters things up a lot, but a full history that's more robust than the shell history would be nice. So I added the lines below to my prompt function in bash:

echo "$(date +%Y-%m-%d--%H-%M-%S) $(hostname) $PWD $(history | tail -n 1)" >> ~/.full_history
I think this should work, but it's possible that with appending from multiple places at once it will get clobbered at some point.

I also thought about what commands do I run:

    $ cat combined-history | awk '{print $2}' | susrn | head
    619 ls
    516 find
    413 cat
    304 python
    275 cd
    216 svn
    215 rm
    199 more
    130 for
    122 svc
    
Alternately, taking into account all the compound commands I run by looking at the commands following pipe and semicolon in addition to line starters:
    $ cat combined-history | sed s/'[;|]'/'\nNNN '/g | awk '{print $2}'| susrn | head -n 12
    881 grep
    620 ls
    544 do
    536 done
    535 sed
    524 find
    501 python
    465 cat
    412 while
    315 head
    283 cd
    291 more
    
(combined-history is the result of running history in each shell)

Notes:

Friday June 26 2009:

Sorting mixed lists of numbers and strings

Imagine you have this list:
fname_0006.v0_word 2
fname_0007.v0_word 12
fname_0001.v0_word 15
fname_0002.v0_word 23
fname_0003.v0_word 5
fname_0003.v0_word 7
fname_0005.v0_word 8
fname_0006.v0_word 9
fname_0007.v0_word 11
fname_0005.v0_word 24
Imagine further that you want to sort it. Unfortunately, I can't get gnu sort to let me specify which fields are numeric and which now. That is, I can do:
$ cat file.txt | sort
fname_0001.v0_word 15
fname_0002.v0_word 23
fname_0003.v0_word 5
fname_0003.v0_word 7
fname_0005.v0_word 24
fname_0005.v0_word 8
fname_0006.v0_word 2
fname_0006.v0_word 9
fname_0007.v0_word 11
fname_0007.v0_word 12
Or I can do:
$ cat file.txt | sort -n
fname_0001.v0_word 15
fname_0002.v0_word 23
fname_0003.v0_word 5
fname_0003.v0_word 7
fname_0005.v0_word 24
fname_0005.v0_word 8
fname_0006.v0_word 2
fname_0006.v0_word 9
fname_0007.v0_word 11
fname_0007.v0_word 12
Or I can do:
$ cat file.txt | sort -n -k1,1 -k2,2
fname_0006.v0_word 2
fname_0003.v0_word 5
fname_0003.v0_word 7
fname_0005.v0_word 8
fname_0006.v0_word 9
fname_0007.v0_word 11
fname_0007.v0_word 12
fname_0001.v0_word 15
fname_0002.v0_word 23
fname_0005.v0_word 24
You might think this would work:
$ cat file.txt | sort -k1,1 -kn2,2
fname_0006.v0_word 2
fname_0003.v0_word 5
fname_0003.v0_word 7
fname_0005.v0_word 8
fname_0006.v0_word 9
fname_0007.v0_word 11
fname_0007.v0_word 12
fname_0001.v0_word 15
fname_0002.v0_word 23
fname_0005.v0_word 24
But nothing seems to make it do the right thing. So I abandoned sort for python:
$ cat simple_sorter.py
import fileinput

def tidy(x):
    try:
        return int(x)
    except ValueError:
        return x

line_bits = []

for line in fileinput.input():
    line_bits.append([tidy(field) for field in line.split()])

for bits in sorted(line_bits):
    print " ".join(str(bit) for bit in bits)

$ cat tmp.txt | python simple_sorter.py
fname_0001.v0_word 15
fname_0002.v0_word 23
fname_0003.v0_word 5
fname_0003.v0_word 7
fname_0005.v0_word 8
fname_0005.v0_word 24
fname_0006.v0_word 2
fname_0006.v0_word 9
fname_0007.v0_word 11
fname_0007.v0_word 12

Thursday June 18 2009:

I've been thinking about different ways of stopping bikes. Specifically, different ways of getting the signal from the rider to the brake. Most US bikes use cables inside a housing, pulled by levers:

Instead of a cable in a housing, one can use a tube of liquid in a hydraulic system:

For the rear brake, it is possible to have rear pressure on the pedals act as a brake. This can either be direct, as in a fixed gear bike, or via a drum and freewheels as in a normal coaster brake:

Then you have the most common internationally, the rod brake. This is used primarily on roadsters and is a very reparable design. It's lever actuated and then either directly pulls up on the pad (front) or pulls through a series of linkages first (rear):

An alternative to the standard rod brake is the style used on swiss army bikes where the rod pushes the brake pad down on the top of the tire instead of up on the rim. It needs a different lever design than the normal rod brake beacuse it's moving the rod in the opposite direction:

Finally, there may only be one bike like this, but Sheldon Brown had a road bike set up with a toe strap taking the role of a cable on a caliper brake:

Wednesday June 17 2009:

A few months ago I wrote about the card game Jaguar. It's a card game with lots of tabletalk which pits one player and a secret friend against three others. The only the secret friend knows who they are, so it gets into an interesting dynamic of jaguar vs four people who don't trust each other, one of which intends to betray the others.

Last week I played a good bit of guillotine with my cousins, and was thinking some about how in many games the art and story are both a lot of the fun and pretty disconnected from the actual gameplay. One could port a lot of games to a different setting, really. So why not do this with jaguar?

One would need to come up with a good setting. One in which it made sense to have both a visible enemy and a secret enemy. Maybe three humans, an evil computer, and a player who is secretly a robot? Or maybe a mafia setting, where there's three mob figures, the chief of police, and an undercover agent?

Once you have the setting, there are four more bits to port: what the cards mean, what suits are, the bidding phase, and the play. These will of course depend on the setting. Cards could of course represent people, perhaps ones that one was convincing, hiring, or killing. They could also represent places, animals, or powerful objects. Maybe they could represent a mix of these, with high points being one class, low points being another, and trash being a third. You'd need to be able to have four of each thing. The things need to be able to be put together in a group of five such that one of them wins some how. Suits could be something like the colors in magic, representing different power sources, but they could also be districts.

One interesting idea for a setting might be history. Choosing trump would be choosing which time period was dominant. Then leading a suit would be choosing which time period the activity was currently happening, with out of suit play being sensibly ignored and trump meaning pulling people to the trump time period. Not totally sure how this would work.

More thinking needed.

Monday June 1 2009:

I've been thinking a good bit about discrimination, privilege, race, and the discussion there of after reading through a lot of SF/Fantasy discussion on the subject. (First "Cultural Appropriation Debate of Doom", then "RaceFail", now "MammothFail". One entry point: here) This is not at all a central issue, but it worries me the way people use the word "derail" in these discussions. For example, someone may say "it's not really about race, it's about class". This restatement could be issued by:

The standard response to something that looks like this is to denounce it as 'derailing' or 'silencing'. The problem is, while a dismissal like that is a good response to the third motivation and an ok response to the second, it removes the first without consideration. Making a position off limits like this limits the discussion unnecessarily.

[ There are other things that also get called "derailing", such as a response of "but I have friends who are X" to "your comment indicates prejudice against X people", and I'm not trying to talk about these here. That sort of "derailing" is dealt with in detail in Derailing For Dummies. Most of these are clearly not useful things to be doing. ]

For an example of how the use of this term can be problematic, look at the discussion of derailing for dummies over at the f-word. The original article calls it "derailing" when women who choose to act in a traditionally female manner are told they're not making a true choice because of internalized sexism. Then a commenter calls it "derailing" when feminists are described as objecting to women acting in a traditionally female manner. By applying the term to argument instead of manner it becomes just an insult.

Thursday May 7 2009:

I've been making penny whistles. One thing I noticed is that a C whistle has a resonating length of almost exactly one foot. I wonder if our chosen pitch for C came from this relationship. Looking around online, all I can find is a small reference on the wikipedia page for organ that says 'a foot here means "sonic-foot", a measure quite close to the English measurement unit'. Hmm.

Wednesday May 6 2009 B:

I've just discovered a really great readline setting: "blink-matching-paren". It makes readline (and so bash) signal whether parens match, just as emacs does. When writing complex bash expressions on the command line it's really very helpful.
~/.inputrc:
set blink-matching-paren on

Wednesday May 6 2009:

The Swarthmore CS Department chose a new t-shirt design for this year, which I can't find. In looking for it, I found the design from last year, which I made, and I don't think I've posted:

Sunday April 19 2009:

Pictures for 2008 are up.

Tuesday April 7 2009:

Traffic without lights

If you have a city (or portion thereof) laid out on a grid, you can operate it entirely without traffic lights. The idea is, each city block is a rotary. The rotaries fit together just like a field of gears:
At each intersection, all traffic turns. This means you can't move between places by getting on the street you want and just following it. Instead, to travel paths parallel to the streets you need to weave:
Note that if you want to go diagonal to the streets, as blue does above, this is similar to now. Travel distance between any pair of points is H + V + |H - V|. That is, horizontal distance, plus vertical distance, plus the difference between the two. The extreme cases are the red and blue paths above. In the red case, V = 0, so travel distance is 2H. In the blue case, H = V, so |H - V| = 0 and travel distance is H + V

I don't know how well this would work in practice, but I think it would be pretty good. You substitute constant speed for stop and go, which should minimize both agravating waiting time and inneficient acceleration. You do have a lot of merging, as in the case where each street has two travel lanes you have people going different ways wanting to switch lanes:

Unlike other rotary systems, this does not fail when different directions have hugely different amounts of traffic. Travel consists of moving straight, turning with the road, and merging. In none of these does an unequal traffix flow mess up the system.

Another concern is that this would be tricky for bicycles or pedestrians. I think this works ok for bikes, in that they ought to be able to complete the merges safely, but this would need to be seen in practice. As for pedestrians, we could continue to use the current walk lights, though keeping lights just for that purpose seems silly. Maybe a pure crosswalk system would work? I should ask a traffic engineer.

Sunday March 22 2009:

It would be silly for the place settings we used at our wedding just to sit in the attic unused. So if you want to use them (100 full settings, 120 if you can find 20 glasses) have a look and let me know.

Monday March 16 2009:

Julia and I are married.

:: happy ::

Wednesday March 11 2009:

Introducing icdiff

The first time I used wikipedia to look at revisions I was quite impressed by the colored two column output indicating which bits had changed. Working mostly on the command line, it's been frustrating that diff can't do better than two column output. Even colored diff and cdiff only color lines by whether they're from the left or the right, not whether they're internally different. Python's difflib can create the wikipedia-style two column colored output, though, and with a bit of modification can print to the console with ansi escape sequences:
cbr@heron ~ $ python concoldiff.py text_A text_B
This is an unchanged line This is an unchanged line
This is a line with a speleing error This is a line with a spelling error
This line was deleted
Whitespace     shows up where critical Whitespace shows up where critical
But it's not     shown when not But it's not ugly when not
And here I go, adding a line
And the usage:
  usage: icdiff.py [options] left_file right_file

  options:
    -h, --help           show this help message and exit
    --cols=COLS          specify the width of the screen. Autodetection is Linux
                         only
    --context            print only differences with some context
    --numlines=NUMLINES  how many lines of context to print; only meaningful
                         with --context
    --line-numbers       generate output with line numbers
    --show-all-spaces    color all non-matching whitespace instead of just
                         whitespace that is critical for understanding
    --print-headers      label the left and right sides with their file names
  
Improved Color diff: icdiff.py

Thursday March 5 2009:

In python I often want to do things like this:
       if x.startswith("foo") for all x in a_list:
          ...

       if is_verb(leaf) for some leaf in a_tree:
          ...
    
I usually end up coding these a bunch of different ways, the shortest of which are:
        if False not in [x.startswith("foo") for x in a_list]:
           ...

        if True in [is_verb(leaf) for leaf in a_tree]:
           ...
    
But these don't short circut and are ugly. Sometimes I'll write little funtions but I don't like that either. Currently the syntax if [expr] for ... doesn't mean anything, so this should be possible. I wonder if it would be worth writing a PEP.

Update 3/6/2009: George Dahl writes that python already does this. I should be writing those examples as:

       if all(x.startswith("foo") for x in a_list):
          ...

       if any(is_verb(leaf) for leaf in a_tree):
          ...
    
These examples use generator expressions instead of list comprehensions. And builtins any and all. Especially as one can use any function, not just any or all, this is a much nicer syntax than what I wanted. It doesn't read as fluidly as english, but then again it doesn't deal with these two specific case as special cases of the if statement. So I'm quite happy.

The only other real downside is also I think the reason I didn't end up with this when fiddling around at the python prompt: you need somewhat non-intuitive parens. I'm pretty sure when I was trying to see if there was a way to do what I wanted I did:

    >>> x for x in range(7)
      File "<stdin>", line 1
        x for x in range(7)
            ^
      SyntaxError: invalid syntax
    
And then moved on. As a human I don't see an obvious reason why I can't enter the obvious thing. Is there something else a statement beginning with "x for " could mean?

Sunday March 1 2009:

Card Game: Jaguar

I learned this Italian card game from David Chudzicki and have played it primarily with my cousins. It's the best five person card game I know, and I enjoy it about as much as bridge, though for different reasons.

Basic Idea: Five players end up through a bidding process divided into two teams: the jaguar and their friend against the other three. While everyone knows who the jaguar is, their friend remains secret until choosing to reveal themself. Cards have point values totaling 120, and if the jaguar and friend get more than half they win the hand.

Set Up and Card Values: Take an italian deck of cards or a normal deck with the 10s, 9s, and 8s removed. A dealer deals out five hands, which will come to eight cards each. Which player is the dealer progresses around the circle each hand. The cards are ordered "A, 3, K, Q, J, 7, 6, 5, 4, 2" and are worth points as:

NumberValue
A11"big points"
310
K4"small points"
Q3
J2
<=70"junk"

Bidding: The dealer begins with either bidding or passing, as does each player in turn around the circle repeatedly until some bid has not been topped. Once you have passed you may not bid again that hand. Bidding begins with the highest card, the 3, and proceeds down from there. No suits are involved in the bidding. Once bidding is complete, the winner of the bidding is the jaguar. The jaguar names a suit to be trump and the player with the card of the winning value in the named suit is the friend. Note that if the jaguar names a card in their own hand, the jaguar and the friend are the same player. Scoring is slightly different in this case, as you will see below.

Play: Play consists of eight tricks. A trick is a card being led, then each player in turn around the circle plays any of their cards. Bridge, hearts, and spades players should forget those games' rules about following suit. The winner of the trick is the player with the highest played trump card, or if no trump were played the highest card in the led suit. Example: clubs are trump. Player A leads the 6 of diamonds. Players B, C, and D play the 3, 4, and 5 of diamonds respectively. Player E plays the 2 of clubs. Because clubs are trump, player E would win the trick. If clubs were not trump, player B would win the trick. (Remember that 3s are high). Winning a trick means that that player gets the cards contained (which one cares about only for their point values) and leads for the next trick.

Scoring: By the end of the game, all cards have been played and so it is known to all who is the friend and who is not. The point sum for the friend and the jaguar is then compared to the point sum for the other three players, and the winner is the group with more points. The jaguar and friend lose ties. Points are awarded: 2 to the jaguar, one to everyone else. If you win your points are positive, if you lose your points are negative. So on a jaguar victory, the jaguar gets +2, the friend gets +1, the other three each get -1. In the rare case of the jaguar and the friend being the same player, the jaguar gets 4 points while the other four players each get 1. Note that this game is completely zero sum, so players will generally keep running totals across hands. Among well matched players, people will often keep these totals across games with different players.

Table Talk: During the game, table talk is allowed, encouraged, and essential. The jaguar gives instructions to their friend, whoever they may be, often starting with "please don't reveal who you are until I tell you to." The other four all claim not to be the friend and tell each other what to do, arguing about how best to divide points to defeat the jaguar. New players can often learn the game by just playing with four experienced ones and being told what to do without any out-of-game rule explanation. People will probably lie to each other, and this is not prohibited. Lying about the rules, though, is metagaming and is prohibited.

Monday February 23 2009 B:

Programming: Repurposeability

How much needs to be changed when you find out the problem you thought you were solving differs substantially from the actual problem? Programmers complain about this all the time, generally when it's not their fault. A manager comes in telling you that some cost you thought was negligible isn't. A client finally sees a prototype and tells you you've conflated two similar but crucially distinct categories. It's easy to say "stupid non technical people -- can't they tell me what they really want from the start?", but its not always someone else's fault, and this fixes nothing.

Given that we are always constructing models of problems and nearly always must begin before our understanding is total, times when we must repurpose our code are unavoidable. Then this presents a metric for evaluating a programming style or language: repurposeability. That is, when one writes code in this fashion and finds out that one was solving the wrong problem, how much work is needed to repurpose it to solve the problem one should have been solving all along?

Repurposability is the driving force behind many aspects of good coding style. The avoidance of duplicate code, for example. Say you need to send some debugging output to a file instead of standard output. In java you might have a gui program with hundreds of calls to "System.out.writeln()" that really should be calls to some debug function. So this is a programming style issue. It is also a programming language issue, though. In common lisp one might deal with this problem with a statement equivalent to "in the code called from here, substitute this object for System.out". Similarly in java, you might have hundreds of reads and writes to the object attribute "Foo.bar". The standard arguments for java tell you to make them be to "Foo.setBar()" and "Foo.getBar()" instead, so "if you later change your mind you don't have to change all those references to "Foo.bar". The advice is so to maximize repurposeability. But in python one would solve the same problem by using Foo.bar all along and taking advantage of the ability to wrap it in getters and seters later if needed.

I need to think more about what is needed for repurposeability, but it certainly sounds like a useful metric.

Sunday February 22 2009 A:

Just got back from the english scottish ball at swarthmore. Much fun. Julia and I went to ML friday for "pie and prejudice" pre ball baking, then pendle hill saturday morning, then ball and walkthough for the afternoon and evening. Pretty packed with seeing people, but also somewhat relaxed, with 16+ hours of transit.

Thursday February 5 2009:

Thoughts on two related topics. I've been looking at lisp again -- it had been entirely out of my thoughts since finishing with scheme in cs22 at swat -- and reading practical common lisp. I've also been looking at arc. And thinking about what feels so unnatural to people about lisp. The fastest thing for me to write is bash input. By a lot. Why?

Bash is REPL based. As I build things up in bash that are quite complex I'm always testing as I go. I'll cat a bunch of files, pipe to something else, and if I get anything wrong I notice almost right away. This is very powerful because

Bash puts arguments first. I start with the files I want to work with (cat logs/tuesday/*) then pipe to grep to filter out the ones I don't want, then maybe pipe to wc. All along the way, I can print out what I have so far. And I can think about the data before the next processing step. Some things break this pattern, for example "for x in $(big long expression)" or "diff <(determine A) <(determine B)" but the former can be replaced with "big long expression | while read x" as long as it's not spaces you want to split on. And the latter necessarily takes two input streams, so you have to accept some loss of linearity.

This is not to say I think bash is ideal. The way it deals with unset variables (evaulating to the empty string) is pretty annoying. And always having to worry about special characters doing crazy things is also frustrating. And the things I write are rarely easy for even me to read looking back on them after a while. But it's definitely fast to write.

Lisp shares the first property with bash, but in the other it's nearly the opposite. The analog of "cat | grep | wc" is "(wc (grep (cat)))". Most languages are niether all one way or all the other. They can go "wc(grep(cat))" or "a = cat(); b = grep(a); c = wc(b)" and most programmers use some of both.

Thinking about how easy it would be to write inverted lisp with a reversing macro interpreting everything (not that I actually think this is better -- the top down style of lisp with more thinking ahead is probably good for me) brought me on to the other idea: it might not actually be good for languages to be as extensible by the individual programmer as lisp is. Paul Graham writes that a language annoyance that a java or python programmer would have to wait for a language fix for a lisp programmer can generally just fix themself. Take generics in java or, better, with in python. It's really nice. Instead of having to remember to close things or release locks even in complex error situations, they're dealt with when the block ends. But it wasn't in python for a long time and had to be centrally added. In lisp anyone could write with and not have to wait. This sounds good.

Except that in the lisp case only that person benefits; any one who didn't think to write with doesn't get to use it. In python it became available to everyone. Because smart people who want to have an extended version of the language can't just do it themselves easily, they suggest it as a feature and everyone gets it. Maybe this isn't ideal, but it improves the core language much faster. Looking at arc, I think almost all of it could be implemented entirely as macros and functions in common lisp. And many of the good ideas probably have been implemented in lisp by many people over and over. But without the pressure of users frustrated by the limits of the language, lisp didn't get centralized improvement.

Wednesday January 28 2009:

When I tried to add a new environment variable for reverse resolution by fix_path, it didn't work properly because at bbn there are multiple ways to refer to the home directory with different prefixes. (like /nfs/some/silly/internal/thing/home/jkaufman) So to fix this I've updated it.

fix_path.c:

#include 
#include 

extern char** environ;

int starts_with(char* haystack, char* needle)
{
   return !strncmp(haystack, needle, strlen(needle));
}

int fail()
{
   printf("\\w");
   return 1;
}

/* sometimes there are characters before /home/ that can be completely ignored */
int fix_home(char* in_path)
{
   if (starts_with(in_path, "/internal/reference/home/"))
      return sizeof("/internal/reference") - 1;
   if (starts_with(in_path, "/nfs/another/internal/reference/home/"))
      return sizeof("/nfs/another/internal/reference/home") - 1;
   return 0;
}

int main(int argc, char** argv)
{
   char in_path_arr[2048];
   char out_path[2048];
   char cur_env_name[2048];
   char best_env_name[2048];
   int  best_env_index = -1;

   int  best_env_name_match_amt = 0;
   int index_of_equals;
   char* cur_env_value;

   int e_idx, idx_c;
   char* cur_e;
   char* in_path;
   

   if (!getcwd(in_path_arr, sizeof(in_path_arr)))
       return fail();

   in_path = in_path_arr + fix_home(in_path_arr);

   for(e_idx = 0; cur_e = environ[e_idx] ; e_idx++)
   {
      for(idx_c = 0 ;
          cur_e[idx_c] &&
             cur_e[idx_c] != '=' &&
             idx_c < sizeof(cur_env_name)-1;
          idx_c++)
         cur_env_name[idx_c] = cur_e[idx_c];
      cur_env_name[idx_c] = 0;

      if (cur_e[idx_c] != '=')
         continue;
      else
         index_of_equals = idx_c;

      cur_env_value = cur_e + index_of_equals + 1;


      if (cur_env_value[0] == '/' &&
          strlen(cur_env_value) > best_env_name_match_amt &&
          starts_with(in_path, cur_env_value) &&
          strcmp("PWD", cur_env_name) &&
          strcmp("OLDPWD", cur_env_name) &&
          strcmp("HOME", cur_env_name))
      {
         strncpy(best_env_name, cur_env_name, sizeof(best_env_name));
         best_env_name[sizeof(best_env_name)-1] = 0;

         best_env_index = e_idx;
         best_env_name_match_amt = strlen(cur_env_value);
      }
   }

   if (!best_env_name_match_amt ||
       !(strlen(best_env_name)+1

  

Friday January 23 2009:

I like bash. It does a lot of things well and makes my life on the command line a lot more pleasant. It generally has nice tab completion, but there are some ways it would work better, though:
  1. Tab completion on paths containing environment variables should not expand them. Or if it is going to expand them, it should not follow with a space. If I'm doing everything relative to the directory $ON_B then I don't care that it expands to /nfs/man/this/path/is/freakin/long/on_b. With my shell PS1 hack (below) I don't have to see this depth all the time, but it could be even better.
  2. Tab completion should understand filename wildcards. If I have 'ls $ON_B/{a,b}*/repor and press tab then I want to have the command replaced by ls $ON_B/{a,b}*/report/. The logic is a little tricky. And there's even a bit of ambiguity: if the directory reporting appears in one (or more) of the possible expansions but not in all of them, while the directory report appears in all, do we ignore reporting? This affects whether we append the trailing slash in this case, and has widespread effects in other cases. I'm inclined to have it complete only with things that exist in all matches. Note that with this completion rule, to get something that exists in some of the matches, you need to edit the path being completed to rule out the things that don't have it. So while I wouldn't complete reporting from ls $ON_B/{a,b}*/repor if any of the dirs didn't have reporting, I would complete it from ls $ON_B/{a,b}*/reporti.

On a completely different subject, I've started using the InvertColors Firefox addon, and it makes pages look a lot nicer.

Monday January 19 2009:

I figured out some cool stuff I can do with colored grep. I often want to, when grepping, see the bit that matched in a different color. I knew grep --color would do this, but I'd wanted to be able to do this with multiple greps and multiple colors. Then I noticed the GREP_COLOR environment variable and the grep --color=always options. So I made the aliases:
alias grey-grep="GREP_COLOR='1;30' grep --color=always"
alias red-grep="GREP_COLOR='1;31' grep --color=always"
alias green-grep="GREP_COLOR='1;32' grep --color=always"
alias yellow-grep="GREP_COLOR='1;33' grep --color=always"
alias blue-grep="GREP_COLOR='1;34' grep --color=always"
alias magenta-grep="GREP_COLOR='1;35' grep --color=always"
alias cyan-grep="GREP_COLOR='1;36' grep --color=always"
alias white-grep="GREP_COLOR='1;37' grep --color=always"   
These let me do things like:
user@host /path/to/cwd $ echo hello there | blue_grep ll | yellow_grep ere
hello there
The primary use for me is when I want to look for something and don't really know what it is yet. Often this will include wanting to find things that are near each other, but I'm not sure how near. The color helps immensely with visual grepping.

The main downside to this method is that I have to specify the color. What I really want to have is something where multiple calls to color grep in the same pipe automagically use different colors. Maybe have

Sunday January 11 2009:

Julia, rick, and I played two games of Thurn und Taxis today. I'm starting to like the game a lot.

Saturday January 10 2009:

On friday julia and I went to the boston urban ceilidh at springstep. It was fun, but is always a strange dance. They generally have a different few opening bands each year; this year they had "in fine fettle" start, who have been playing for judy erickson's excellent "step lightly" english dances at springstep. Emerald and Hannika Cassle (sp?) called the final two sets, and while they tend to call the same thing each year and never call particularly exciting dances (example: whole set dance; 1s swing for as long as they feel like, then start stripping the willow down the set. Repeat with the new 1s as soon as the old ones are out of the way), the amazing (Laura Cortese!!) music was enough to make it really fun. And the simple dances meant that the never-danced-before people seemed to be having as good a time as the experienced dancers.

Wednesday January 7 2009:

I go to Fresh Pond Meeting, a Quaker meeting in Cambridge, most Sundays. Last Sunday was the meeting's 20th anniversary (it split off of Cambridge meeting). There was also a reunion sort of thing for current and former high school students, and it was nice to see people. After meeting there was cake to celebrate. Picture of meeting:

Monday January 5 2009:

My winter vacation is over, work has started, and my siblings have gone back to North Hampton. It was nice seeing them. We played a lot of music as well as two new games Suzie and Danner got for Christmas: Taxis and Guillotine. Both seem fun so far. The rules for Taxis we're pretty clear on, but a downside to Guillotine is that there's some ambiguity. Is a noble "collected" (activating anything that says "when you collect a/this noble") if you use an action card that pulls it from someone elses' score pile? Does "Master Spy" go to the end of the line if you play the action card that makes someone else shuffle out a new line on their turn? Or what does he do if he's dealt out from the deck in response to an action card? Or if he's discarded with an action card? All sorts of questions. But still really fun.

Saturday January 3 2009:

I've been thinking about money. I'm not sure how to deal with the fact that some people are living in extremely poor conditions while others never even see such suffering. Most of my money recently (which is really most of the money I've had control over for most of my life) has gone to paying off college debt, but that should soon be done. So I think for 2009 I'm going to try to give half of my income salary to Oxfam.

Edit 6/1/2009: This is minor, but I think this makes more sense with "salary" instead of "income". It's a small absolute difference, but it means it's easier for other people to pay me to do small jobs as I don't discount the money to the same extent (money - taxes - 50% combines to a pretty large discounting).

Sunday November 30 2008:

Rick and I have been playing 9x9 toroidal Go. It's pretty neat. The idea of playing Go on the surface of a torus had been kicking around my head for a while. In concept it's very simple -- you need make only a small alteration to a single rule. When you compute adjacency, treat opposing edges as connecting. For example, the four corners of the board form a 2x2 square. This is really hard to visualize, which is why I'd not actually taken the trouble to play.

Over the thanksgiving break, though, I had an idea. The board is 19x19, so there's room -- with some left over -- for four 9x9 boards. If you play 9x9 Go in quadruplicate, then you can see the toroidal adjacencies and play sort of normally. It's a little annoying to have to place four pieces for every move, but you get really fast at it.

The strategey changes, though, are pretty hard to think about. I'm definitely not yet used to a world without edges.

Saturday November 29 2008:

Thanksgiving was nice, but sort of strange. Alice, Rose, and Danner came from Western Mass; Anne, Lee, and Meghan came from Philly. No same-age cousins, though. Calmer than usual, and a little less fun without Stevie, Susanna, and Claire. But still fun.

We played a lot of the Train Game, and I tried a 'rush' strategy where I ignored all route tickets and just went for the six train fifteen point routes that would use up my trains really fast. I also took routes when it would make someone else take a costly detour. The goal was to finish the game when lots of people would have routes unfinished and couting against them. It worked, and everyone was mad at me. A bit disruptive.

I finished up the light for my bike. I ordered a Cree XR-E (R2 bin, WH tint, about 115 lumens ar 350mA) from Cutter along with a 10 degree / 40 degree elliptical lens with holder at 90% efficiency. I'm running it off my new Sturmey Archer X-FDD hub dynamo (6V at 3W). I put the LED in the place of the incandescent bulb in the chrome bullet headlight that came with my bike. Pictures:

That copper mass under the light? Heatsinking. The light is only about 15% efficient, so the rest of the 3W is heat. Unlike a bulb, that makes the led unhappy. So I have the LED mounted on an aluminium star, that soldered to 12 gauge copper wire, that running through a notch cut in the bottom of the light enclosure and soldered to a beautifully twisted copper marvel (rats nest) to maximize heat transfer with the air.

Thursday October 30 2008:

Yesterday I biked back to the Deutch Bicycle Company to pick up my new front wheel. It is a 622mm (700c) Van Schothorst stainless steel westrick pattern rim with a Sturmey Archer XFDD hub (generator and drum brake). Pretty exciting. I put it on last night. Managed to get the drum brake working with only parts from the rear brake linkage. Have the generator hooked up to the incandesent bike light that came with the bike, but it's not very bright. I'm looking into building myself an LED light instead.

Wednesday October 22 2008:

A while ago (10/9/2008), Julia and I drove out to Holliston to look at the hall for our wedding. It's their town hall, and seemed quite nice. We (I) took some pictures, but they didn't come out looking very good. The Commonwealth Vintage Dancers, however, are good at taking pictures. They took these two:

Saturday October 18 2008:

My bike is now a three speed. And it is capable of stopping in the rain. I am much in favor of both of these. On thursday I got the wheel and it turned out to be 622mm instead of 635mm. I considered trying to get a different wheel, but with the advice of some people online decided that the 13mm wasn't too much and I could try putting a wide (and so also tall) tire on it. This morning I put it on, and it seems great.

Some thoughts on the process of wheel replacement. Taking off the wheel was harder than it should have been because I didn't remember that non-derailleur bikes use master link chains. So I tried to move the hub towards the pedals enough to get the chain off, and I succeeded, but it was harder than it needed to be. In removing the wheel I had to remove part of the chain guard as well. I think if I'd remembered about the master link I would not have needed to, but as it was I did. That was annoying.

One interesting thing about the bike is that the fork ends are not drop outs but instead rear facing. Sort of annoying, but not really a problem. Maybe makes it more reliable?

The hub is a SRAM Spectro T3, which looks like it's a pretty good one. It has three speeds (186% range from messing with the sheldon brown gear calculator) and a coaster brake. The people I got it from included a traditional style sturmey archer shifter and cable which were ideal. Which is good, as the standard SRAM shifter for the T3 is a handlebar twist one which wouldn't have fit my bike at all. One thing I like a lot about the shifter is that it is unlabeled and shiny. The old ones with red lettering were ok, but I really like things that don't actually need labels to be blank. The gears seem like they're placed well, but we'll see tomorrow when I try them.

GearGain fractionsPercentages
10.734-22.6%
21.000direct drive
31.362+36.2%

Tuesday October 14 2008:

My new bike:

The bike is a flying pigeon PA-02 2D, a roadster based for the most part, aside from the double top bar, on the Raleigh Tourist DL-1. I ordered it through a reseller in Texas.

Some statistics:

I still need to weigh the bike, but the shipping weight was 45 pounds. So a little less (box, some packaging, light and dynamo I didn't put on) but not much. Update: I weighed it (with the new rear wheel and it came to 43.8 pounds.)

Now I need to look into finding a new rear wheel, or rebuilding the current one. It definitely needs some sort of brake that is not a rim brake on a steel wheel, and it would be nice to have some gears. So I'm thinking of putting on a Shimano Nexus 3 speed coaster brake hub. Or maybe some used hub. I'm not having too much luck finding bike shops that deal with 28 inch wheels, but the Dutch Bicycle Company in Somerville says they carry them. When I emailed they wrote back to say they had 28 inch stainless steel wheels with stainless steel spokes and a SRAM torpedo 3 speed hub with a coaster brake, which was exactly what I was looking for. I'm probably going to go over there tomorrow or friday after work.

I should also get some bungee cables for attaching things like bike wheels to my rear rack.

Thursday October 9 2008:

I did end up writing a C program to do the path fixing; it makes a big difference when the system is under load.


fix_path.c:

           #include <unistd.h>
           #include <stdlib.h>

           extern char** environ;

           int starts_with(char* haystack, char* needle) 
           {
              return !strncmp(haystack, needle, strlen(needle));
           }

           int fail()
           {
              printf("\\w");
              return 1;
           }


           int main(int argc, char** argv)
           {
              char in_path[2048];
              char out_path[2048];
              char cur_env_name[2048];
              char best_env_name[2048];
              int  best_env_index = -1;

              int  best_env_name_match_amt = 0;
              int index_of_equals;
              char* cur_env_value;

              int e_idx, idx_c;
              char* cur_e;


              if (!getcwd(in_path, sizeof(in_path)))
                  return fail();

              for(e_idx = 0; cur_e = environ[e_idx] ; e_idx++)
              {
                 for(idx_c = 0 ; 
                     cur_e[idx_c] && 
                        cur_e[idx_c] != '=' &&
                        idx_c < sizeof(cur_env_name)-1;
                     idx_c++)
                    cur_env_name[idx_c] = cur_e[idx_c];
                 cur_env_name[idx_c] = 0;

                 if (cur_e[idx_c] != '=')
                    continue;
                 else         
                    index_of_equals = idx_c;

                 cur_env_value = cur_e + index_of_equals + 1;



                 if (cur_env_value[0] == '/' &&
                     strlen(cur_env_value) > best_env_name_match_amt &&
                     starts_with(in_path, cur_env_value) &&
                     strcmp("PWD", cur_env_name) &&
                     strcmp("OLDPWD", cur_env_name) &&
                     strcmp("HOME", cur_env_name))
                 {
                    strncpy(best_env_name, cur_env_name, sizeof(best_env_name));
                    best_env_name[sizeof(best_env_name)-1] = 0;

                    best_env_index = e_idx;         
                    best_env_name_match_amt = strlen(cur_env_value);
                 }
              }

              if (!best_env_name_match_amt ||
                  !(strlen(best_env_name)+1 < best_env_name_match_amt))
              {
                 int off = 0;

                 if (starts_with(in_path, "/home/jkaufman"))
                    off = sizeof("/home/jkaufman");
                 else if (starts_with(in_path, "/home/"))
                    off = sizeof("/home/");

                 if (off)
                    printf("~%s", in_path + off - 1);
                 else
                    printf("%sS", in_path);
              }
              else
                 printf("$%s%s", best_env_name, in_path +
                        best_env_name_match_amt);
              return 0;
           }
     
Then I have to change my bashrc a little bit from before:
PS1="${PS1}$(fix_path)"
And now it's all spiffy fast.

UPDATE 2009-07-20: The line above actually has an untrusted code excecutions vulnerability. If the user can be tricked into navigating to a directory with something like $(foo) or `foo` in the name, then the foo program will be excecuted. This is quite bad. The problem is that the shell evaluates the PS1 variable before display. So we need to change that line to:

PS1="${PS1}\$(fix_path)"
And we postpone evaluation to when the prompt is displayed, instead of evaluating it both when PS1 is set and then again when it is displayed.

Monday October 6 2008:

Working several hours a day on the command line now, I've gotten interested in what I can do with the command prompt itself. For a long time, my command prompt looked like:

user@host /path/to/cwd $
This was quite serviceable, though when deep into a directory hierarchy (especially one laid out by a windows user) /path/to/cwd might be more like a three line monster.

Fixing this, though, isn't too hard. I've made several environment variables already that correspond to common places I want to go to. Because cd $FOO_SRC is way nicer than cd ~/code/current/foo/foo-1.2.4-rcA/src/. So why not make the command prompt know about this? So we could do:

user@host ~ $ cd $FOO_SRC
user@host $FOO_SRC $
So I write a little python program, fix_prompt.py:
           import sys
           import os

           # if it happens to match but it really short, ignore it as
           # its probably not what we want
           IGNORE_LENGTH=10

           # these variables contain paths that would make little
           # sense to abbreviate to (except HOME, where we just want
           # to deal with it nicer)
           IGNORE_VARS=["PWD", "HOME", "OLDPWD"]

           # in order to still show home as ~ and /home/user as ~user
           # we need to have some special logic.  If you wanted a dir
           # /foobar to show up as the dir %, then you could add an
           # entry for that here.
           SPECIAL_REPLACEMENTS=[["/home/" + os.environ["USER"], "~"],
                                 ["/home/", "~"]]

           # we want to sort a pair of lists by the lengths of their
           # first elements, so we need a comparator function
           def longest_a_first_comp(x,y):
               return len(y[0])-len(x[0])

           in_path = sys.argv[1] if sys.argv[1:] else ""

           # get all the environment variables, reversed in mapping so
           # we can do reverse variable expansion. Or is it
           # variable condension?  variable condensation?
           env = [[v,k] for k,v in os.environ.items()]

           # sort them by length.  This is so if we have:
           #    $FOO_SRC="/home/user/src/foo"
           #    $SRCS="/home/user/src"
           # we will take the longer one.  I think this is always what
           # a user wants.
           env.sort(longest_a_first_comp)

           for r in env:
               # the substitution only happens if it would shorten the path
               if in_path.startswith(r[0]) \
                      and r[1] not in IGNORE_VARS\
                      and len(r[0]) > IGNORE_LENGTH\
                      and len(r[1]) < len(r[0]):
                   # prefix with a dollar sign so it looks like an
                   # environment variable.  The dollar sign needs to
                   # be escaped, and it's escape needs to be escaped.
                   print "\\$" + in_path.replace(r[0], r[1], 1)
                   sys.exit(0)

           for r in SPECIAL_REPLACEMENTS:
               if in_path.startswith(r[0]):
                   print in_path.replace(r[0], r[1], 1)
                   sys.exit(0)

           # if we didn't do any condensations, yield the original path
           print in_path
     
Then I tell bash to call it, in ~/.bashrc:
           PS1="\u@\h \w $ "
           promptFunc()
           {
               PS1="${COLOR_GREEN_BOLD}\u@\h"
               PS1="${PS1}${COLOR_BLUE_BOLD}"
               PS1="${PS1}$(python ~/bin/fix_path.py $(pwd)) $"
           }

           if [ $(whoami) == "myusername" ]
           then
               PROMPT_COMMAND=promptFunc
           else           
               # so if someone does an "su" at my terminal its really obvious
               unset PROMPT_COMMAND
           fi
     
Someday I may be on a slow machine that can't run python snappily like I want. Then I'll rewrite in C. Shouldn't be too bad.

One thing that surprises me about this is that I've not been able to find anyone else doing it online. Maybe I'm not calling it the right thing. "Path shortening"? "Path condensing"? The closest I found was some people putting in elipsies in the middle of things. It's sort of a reverse expansion of an environment variable.

Now if only "shopt -s cdable_vars" would let me do tab completion on them.

Sunday October 5 2008:

I've been biking to work now every day for nearly three weeks, and have some thoughts on bikes. These thoughts are directed both towards problems with my current setup and a potential replacement.

I've been riding a (I think) late 70s/early 80s (79-83 by checkers and decals) silver 10 speed steel Peugeot racing bike. It has drop handlebars, is quite light, and looks something like this:

The bike is very nice on dry days, but in bad weather the completely slick tires scare me. The front shifter cable is fraying, and the back one is poorly adjusted. Both fixable. I tend to use only two gears -- 52:14 (high) and 52:32 (low) -- and occasionally one in between (maybe 52:22). These are with the front shifter only ever on the biggest sprocket and using the full range of the rear shifter. I could probably be ok on a bike with a higher lowest gear; my commute is pretty flat.

One option would be to completely redo this bike. I don't like racing handlebars much, I don't like the shifting system (I like hub internal a lot better), the brakes need work, the tires aren't too great. There's no chain guard at all. Another is to buy a used bike. There are a lot of old 3-speeds that are close to what I want. Comfortable high handlebars, hub internal gearing. They'd still need good brakes and tires, and they might well have no chain guard. A third option would be to buy a new one. I've been looking into this, though, and have found few ones like what I want. The bikes below look ok:

What I like about these bikes: But the Pashley ones are in the UK and expensive, while the forever ones are in china and it's unclear how much they cost.

Wednesday September 10 2008:

Back in Medford. Lots of moving things, unpacking, Julia painting, getting library card... I start at BBN on the 15th. One thing I was thinking about with Jonah (potwasher) while washing dishes at Pinewoods was that it would be good if you could easily tell the temperature of a pot by looking at it. Surely there are heat sensitive chemicals, changing color as they heat up. So why not put this on the outside of a pot? Then the potwasher knows when a hot pot has been put on his dirty rack. And the cooks know if somehting out of the dishwasher has yet cooled to touchable temperature. If it works well, you could even use it in the cooking itself -- is the skillet hot enough? See what color it is.

Wednesday July 30 2008:

Been at Pinewoods for a while now. Pretty well settled in. Doing a decent amount of playing music, less dancing than I'd thought, lots of fun. Doing the Papa Stour longsword dance with a class, enjoying it a lot. (Especially "over your neighbors sword at waist height").

A while ago I was talking with some people (at Swat?) about an idea for genetically engineered parasites that would live inside people and let them eat excessively without actually eating too much. I forgot about it, then today came across the following ad:

Sanitized tapeworms, eh?

Thursday May 1 2008:

May Day was awesome. Dancing with Points of Etiquette and Renegade Morris. Songs. Maypole in the evening with Folkdance. (And arguing with Paury Flowers about the large scale event (worthstock this year) forgetting to reserve a rain location and kicking our contra dance out of upper tarble... not so awesome) Thinking that Renegade has managed to take in six completely new dancers (me, becky, becka, finlay, maureen, laura kb) and in six six-kilosecond practices learn six dances (not that I can really do nutting girl) is pretty cool.

Eric and Beth announced they're engaged at dinner today. Which got me thinking about the phrase "ring by spring". Sometimes, "ring by spring or your money back". People don't say it often at swat, though I've heard it some. The idea being that girls should be engaged by the end of the year. Which year, though? I think this varies interestingly. At swat it seems to be senior year. There was a phoenix column a year or two ago where a senior was pretty clearly using it like that. And laurie has used it that way. At messiah, however, it allegedly is sophomore year. And a current BYU student says there it's freshman year. More research is called for.

Saturday December 15 2007:

Decent amount of stuff happening lately, including a surprise engagement contra dance for me and Julia on Tuesday. It was a lot of fun and we were both completely surprised. We have fun, though devious, friends.

I was thinking some about tallies. David Chudziki is visiting and brought with him a new game: Jaguar. It's an Italian trick taking game, quite bridge like. There are all sorts of cool things about it, but one interesting thing is the scoring. The score is set up so it's completely zero sum. In the normal situation the Jaguar and the friend are going against the three other players. If the Jaguar side wins, the Jaguar gets 2, their friend gets 1, the other three get -1. If it goes the other way the Jaguar gets -2, the friend gets -1, the other three get 1. In a tie everyone gets 0. If the Jaguar and the friend are one and the same, the Jaguar gets + or - 4 and the other people get - or + 1.

This is a game in which your score goes up and down by small amounts. If it only ever went up, a classical tally system (vertical line for one, two lines for two, a lower left to upper right slash for five, repeat on a new block) would be great. Tallies give fast write performance and pretty good read performance, but do not support subtraction. So how do we add subtraction?

Consider these tally marks:

The pattern is simple. We add horizontal and upper left to lower right slashes. These added marks are negative. So (a) is 3, (b) is 0, (c) is 4, (d) is -3, (e) is -4. Negation (if we needed it) would be a quarter rotation. And its completely backward compatible with traditional tallies.

Chudziki and friends had been keeping score in arabic numerals and scribbling out each number to write the next. That's a lot slower because the actions involved are more complex. You need to perform addition and subtraction in your head. No fun. You get slightly faster read times, but I don't think that's worth it. Because of the typically small adjustment size, I believe these tallies are also much more space efficient.

Tuesday November 13 2007:

Julia and I were talking about college essays and I decided to look back at mine and see what I wrote. I remembered writing about NEFFA but didn't really remember what I had said. One line in particular jumped out at me, though. I'm talking about how nice it is to have so many dancing cousins, and I write:

when we go into the main halls to contra-dance, we have enough people that each of us can have a partner and no one has to dance with the sketchy old-folks who make up a large fraction of the population.
I wrote that, really? I would definitely not say something like that now. Maybe I'm more part of the dancing community than I was then. This was before I'd ever asked some to dance who I wasn't dating or the cousin of. But still. It's also funny how many different people read that essay and didn't comment on that line.

Sunday July 15 2007:

Pip becomes a lolcat:

Monday July 9 2007:

Facebook friend information presented in a really cool way:

Tuesday May 29 2007:

And the weekend of iron dancing ends. Five nights with all the contras and squares. Mmm.

ThursdayConcordLatter Day Lizards3hr
FridayGreenfieldKenny, Siegel, Lea4hr
SaturdayGreenfieldClew Bay, Latter Day Lizards5hr
SundayBrattleboroTidal Wave, Latter Day Lizards, Crowfoot11hr
MondayNelson2.5hr

Sunday May 13 2007:

Bethlehem

Went dancing at Bethlehem last night. It was a good dance, but it wasn't as amazing as I would expect with Raise the Roof and Beth Molaro. Beth is usually an excellent caller, really fun to dance to, but she did not call nearly as well as usual last night. She made a lot of little mistakes (messing up a walkthrough, some ambiguous directions, calling a dance that started with a box the gnat, men aleman left to music that was begging for a balance before the box, calling a dance that had a pull by across into a balance and swing (2 count pull by, 4 count balance, 10 count swing: balance is weird against the music and ragged through the hall) and then in the same dance a hey into a 16 count swing (put the balance before that swing instead)) but the weirdest thing she did was choose to end the night with a non-equal turn dance that wasn't much more than a glossary dance. Only the ones got to swing and I was dancing with Koren, down from Boston for the weekend, and we were twos most of the dance (save the first two rounds). It did have a ladies chain to partner, though, and I was dancing the girl and Koren is really good at twirling, so that was fun. A few of the times we got in six twirls without being late.

A modern wagon

Compare a Honda Civic to a Ford Econoline passenger van for a moment. The civic handles better, is safer, can go faster while remaining safe, takes less room to stop, and gets about the same mileage per person at 65, substantially better per person at 85. In general, vehicles that hold more people seem to need to go slower than those that hold fewer if they want to be safe and be fuel efficient.

Height is a major component in this. Being taller increases the risk of roll-over dramatically and also makes the van less aerodynamic. Part of why large passenger vans are built the way they are is that they were designed to hold cargo and not people. Why not make vehicle in a wagon configuration instead? You put three or four rows of seating in and put doors on each row. If you keep the width of a van you can have each of the rows hold four people, though the front should probably hold three (don't want to crowd the driver). This gives 11 and 15 passenger options. Alternatively the vehicle could be narrower and hold only three across, seating 9 or 12 people. People also might want individual seats for the front, especially for the three-across version, which cuts 1 of each of these numbers.

Having doors on each row helps in several ways. This comes from no longer needing an aisle to reach the rear seats. This allows weight to be distributed more evenly (fully loaded 15 passenger vans have around 50% of the weight on the left rear tire, causing increased wear and dangerous handling), faster loading and unloading, and greater capacity.

Greater capacity per row also lets the wagon be shorter, an 11 person wagon needing three rows to a 12 person van's four and a wagon-15 needing four to a van-15's five. Each row in a wagon takes up a little more space because the people are lower and a little less upright, but not that much more.

With all the suits about 15 passenger vans rolling over, there are probably a lot of schools, churches, colleges, and community groups that are nervous about their vans and perhaps thinking about replacing them.

Monday April 2 2007 B:

Monday April 2 2007 A:

Saturday we went to bethlehem again. It was one of their blue moon dances where they have an experienced dance, then a potluck, then a normal dance. The band was atlantic crossing; they were really good. When I heard them play at CVFF I wasn't that impressed with them, but then they were competing with the great bear trio and lots of crazy french canadian bands. But saturday they were really good.

The caller was Janine Smith, who was ok, but did several things that annoyed me. She wanted to do demonstrations for anything at all strange, especially during the experienced dance. She called all balances as "and balance now". She often called early. The worst was probably the way she called Hull's Victory. She told us to do the right and left through "the traditional way they do up in New England, with no hands" which sounds reasonable on its surface; in most of new england (unlike bethlehem) there is no initial pull-by-right in the right and left through, it's just a pass through (followed by a courtesy turn). The caller really meant no-hands, though; she did a demonstration and instead of a courtesy turn/cast/twirl she had people doing a half gypsy. A dance having a "pass through across, gypsy neighbor left halfway" does not bother me. Claiming it's the traditional way to dance a right and left through, that it's the way it's done in new england, and that the resulting dance is hull's victory, though, that does bother me.

Update 2/15/2009: Jim Saxe rights to say:
In the early 1980s, I spent two summers in the Boston area. At that time, Hull's Victory and other dances with R< from proper formation were a much more frequent part of the repertoire than they are today in many communities. It actually was fairly common, especially on hot summer evenings, for dancers to do the turn-as-a-couple action without touching. I wouldn't describe it as a left-shoulder half gypsy, though. We'd be side by side--one dancer's right shoulder near the other's left--with our bodies pointing in the same direction, just as if we had near arms around each other's backs, but not actually using the arms. You can see this styling used by some (but not all) of the dancers in this video:

http://www.youtube.com/watch?v=CfdoDCQqUZU
So I was too harsh. Reading back over that initial paragraph I seem a little picky and mean. The picky is me noticing details more in activities once I start trying to really understand them -- in this case starting to call. But the mean isn't excusable.

As for the issue of how to do the figure, the looking-in-the-eyes bit still sticks in my head as non-traditional -- I think I'd heard lots of older dancers saying that was pretty new (70's) to contra. But the main part of my complaint is wrong.

Still, had a good time, both during the dance and singing on the way home. On the way there, though, someone rear-ended us and we had to deal with that for about half an hour. The car in front of us stopped suddenly, I braked hard, stopped just short of them. Car in back couldn't stop in time. It was a slow collision, maybe 10mph, but their car did not do very well. It slid under the van's bumper and crushed a corner. The van did quite well in the encounter; with its big steel bumper it just got paint flecks.

We followed the procedures taped to the passenger side of the van, including calling public safety and getting insurance information. But the general van-coordinator incompetence demonstrated itself again. On the (faded) sheet it said to call the van coordinator at number N1 and if he wasn't there to try the cell at N2. This sheet turned out to be more than two years old. Lorpu Jones, last year's coordinator, had only crossed out the male pronouns and written in female pronouns (well, someone else might have done it). Leaving N1 and N2 alone and out of date. Paul Agyiri, this year's one, hadn't even done that much. So I ended up leaving a message on some random student's voicemail (they reassign phone numbers every year) and calling the van coordinator from three years ago on his cell phone. Adding to this annoyance the police were very slow. They showed up right away, talked to us, were nice. But when they took our licenses to run checks and file an accident report we were waiting a good 20 minutes. Probably a slow computer system. Not their fault, but meant we missed a good 45 minutes of the dance. Oh well.

Sunday March 25 2007:

Yesterday we went to the bethlehem contra. Much fun. The band was the Brazen Hussies and the caller was Tori Barone (who has called at Swarthmore twice I think). The music was very good, but a lot of what made the night fun were silly things.

The dance before the break I convinced people to play 'the game' (I don't know if there is another name for it. This name is not very helpful). People who want to play be consecutive twos so they move through the dance together, then people can switch with any person who's playing. This dance had a 'ladies aleman right 1.5' which was very good for gents switching around. We also started near the top of the set but not right at the top, so that for a lot of the dance we were dancing with other people who were playing and could switch with anyone in the hands-four. Whee.

The dance after the break Tori and Bob Isaacs called a dance together. Well, more like in opposition. There were two sets and each of them walked through and called a different dance. The dances were chosen to have offset balances, so one line balanced, then the other. We were supposed to try and balance louder than the other line. It was confusing at first, especially when they called right at the same time. The most confusing thing for me, really, was remembering that the dance ended with a ladies chain. See, both dances had ladies chains at the end, and when I heard the caller for the other line calling ladies chain I knew that we had any figure except a ladies chain. Really fun once people had the dance, though. I think the dances were something like:

Tori's LineBobs Line
A1(4)Inside hand balance Neighbor(4)Ladies to the center
(4)Twirl to swap(4)Balance wave
(4)Inside hand balance Partner(4)Ladies out, men in
(4)Twirl to swap(4)Balance wave
A2(4)Inside hand balance Neighbor?
(4)Twirl to swap
(8)Gents aleman 1.5
B1(16)Dosido and Swing Partner?
B2(8)Long Lines(8)Right and Left Through
(8)Ladies Chain(8)Ladies Chain
Me and my partner did the B1 with a balance instead of a dosido, maximizing balances and noise.

The last dance I danced tandem with Victor and Chris, which was fun, though a 'ladies dosido 1.5' requires extremely precise pivoting to complete on time. While we were out at the top we noticed that kloveco was sitting out, so we danced as the four of us, tandem pairs. At one point we got confused to where to go and we ended up divided 3-1 instead of 2-2. And then tried to dosido. Didn't go so well. Other dancers didn't seem to mind, though I don't think I'd seen anyone dance tandem at bethlehem before.

People were generally very playful.

Wednesday March 21 2007:

Last monday (3/12) I was at the scout house in concord and bob isaacs called a dance ending (B2) as follows:

Giving standard lengths for the actions you'd have something like:

The problem with this timing, though, is you don't make it through the hey in time for the balance and swing. Heys are hard to do exactly on time, and because this was a hey to the next you needed more time to do an extra pass.

One fix is to realize that the petronella really is two beats of spinning followed by two beats of clapping, wiggling, stamping or standing there. And that people could skip out on those second two beats and go straight into the aleman, leaving plenty of time:

The caller (bob) did not say this is how people were to dance it, but said instead something like "if you don't stop to clap after the petronella you'll have momentum to make it through the hey in time for the balance". When I talked to him at the break he claimed that the petronella still took four counts and that people should be able to do the hey in time if they had momentum, as it was three passes in six counts. Thinking about this more I really don't see how one could retain the momentum of the spin into the aleman while pausing between them for two counts. I also think that when I danced this I was going immediately into the aleman out of the spin. But bob tends to know what he's talking about.

If this dance really does have a two count petronella turn, I'm not sure what to make of it. Dances that have swings after petronellas, like cure for the claps and my good morning mr sanders are more fun if you cut the petronella short and spin into the swing. This feels different to me, though, perhaps because it forces you to go into the aleman immediately if you don't want to be rushed while spinning into swings is just better flow and more swing.

Friday February 9 2007:

At the folksing last weekend we sang the filk "old time religion", and filking has been in my head quite a bit lately. I stumbled across SWIL's filk page and found a nice filk of "Both Sides Now": The Physicist's Lament.

Flurry in a week!

Saturday February 3 2007:

I've been thinking about instruments a lot lately and have two projects I want to work on at some point.

Woodwindharpas

I saw a nyckelharpa a few weeks ago, and really liked the idea of simpathy strings. A keyed fiddle doesn't really interest me too much, but adding sympathy strings to arbitrary instruments does. Particularly woodwinds, on the inside. A fluteharpa or clarinetharpa would be really cool. Now if only I could play them.

I might have to settle for a recorderharpa.

Tracheotomal Woodwind Support System

I wanted to make a bagflute. But attaching a bag system to a flute keeps people from being able to control the sound properly with embouchure. No tounging either. So you can't pipe the air directly into the flute. What you really want is to put the air in somewhere before the whole oral cavity. Hence the "tracheotomal". You find someone with a tracheomy and pipe the air in there. Or you smoke for years, get throat cancer, and get your HMO to buy one for you. Regardless of how you get the appropriate hole, with a foot powered bellows and a bag under your other foot you can play without taking breaths.

Saturday January 13 2007:

Bob McQuillen played for the Scout House dance on thursday. He was good and fun to dance to. The dance was very good and in the dance before the break the energy felt just right for a VFW balance. We were coming around to the partner balance and just before I was going to shout "balance" someone else did. Which was awesome; people were together and enjoying the dance the same way I was. At the break, though, Bob called us up to the edge of the stage "get on up here you youngsters! I want a word with you." I thought he was going to chew us out for stamping so loudly over his excellent piano playing, but instead "you might be able to tell I've been around for a while, but I've never seen anything so cool as that damn balance." Much fun.

VFW balance: Taking the same amount of time as a standard balance (four counts) people stamp with both feet (well apart) and tap their heels together in the air as "stamp stamp stamp tap stamp", though the timing is more like (counting eight pieces) "s-ss-ts-". I think I first saw it in 2003 at the VFW, but I'm not really sure; I wasn't dancing often yet.

Monday October 30 2006:

Rum and Onions XXVII was fun. Not Boston or Asheville, though. Looking forward to NOMAD.

Thinking about different formations in which to start a contra dance in relation to my Ling thesis. What about a proper ocean wave? Or, worse, a proper beckett? It would be tricky to get people back to a proper beckett with symmetrical calls (I think a right hand high, left hand low would do it) but it would be worth it to see peoples faces in response to:

Now take hands four and don't cross over. This is a proper dance. Now take your hands four and circle one place to the right so you're on the same side as your partner. Men are across from men, women across from women. That's right, this is a proper Beckett...

Monday October 23 2006:

Back from LEAF. Loads of fun. Trip overview:

Wednesday Baltimore Dance
Thursday Warren Wilson OFB
Friday LEAF
Saturday LEAF
Sunday Glen Echo

And computing numbers:

miles: 1312
gallons: 39.52
mpg: 33.2

Saturday October 7 2006:

Just got back from Glen Echo. Much fun, though way too far to drive to a dance regularly. The athletics department is so nice; we asked for a van for Saturday, they gave us the keys on Friday, and then when the Pterodactyl Hunt was moved from Friday to Saturday they said they were fine with us taking the van out both days. The student van coordinator would have fined us $25 for a late reservation and then not given us a van. Or something of the sort.

Glen Echo then. The general format of the dance was about the same as most dances I've been to; contra for an hour and a half, a waltz, the break, a hambo at the end of the break, another hour of contra, an ending waltz. The main structural difference was that the break consisted of a large number of short waltzes played by a piano player who was not in the band. This meant that there was more room to waltz and people who liked waltzing could keep doing so. Seems like a good idea.

The hall itself was vary large, perhaps the size of the NEFFA main hall, though not nearly as full. This meant there was lots of room to spread out, and also lots of room for lines to wiggle all over the place. There was also a gap in the center of the room most of the time where there would have been a center set, with three lines on either side. Perhaps an attempt to avoid center set syndrome?

The dance style was overall pretty similar to most other places. The promenade style was western/shoulder and they always used hands on right and left throughs. On petronella walkthroughs there was almost no clapping, though during the dance there was some. Maybe half the people clapping? Like in the Boston area, the better dancers tended not to clap and to do something else instead, generally some sort of in place wiggle. There was not much footnoisyness; both long lines and balances were pretty quiet.

The band was the Nettles, and while they were great to listen to and most of the time worked very well for dancing they seemed not to have much practice with playing for dances. They would do some things that really didn't fit what the dancers were doing, playing syncopated stuff or going quiet when people needed to be all together for something. They also tried to end one dance by fading out, which didn't work very well, partly because by the time it was clear they weren't going to get louder again we were into the A2 with new neighbors.

Laurie was nice and let us crash at her house. And we drove back the next morning. Quite fun overall.

Costs

tolls $18
gas $52.47
milage $126.4

But these include some of the costs of driving Laurie to guitar and some of the elverson costs. Gas we got at 7/8 full, drove down to 1/4, filled up to 9/8 (yes, the meter shows that). Bringing it back from 9/8 to 7/8 was the work of the Elverson trip. So we used 5/8 but put in 7/8. So only $37.14 was used going to Glen Echo.

Now we need to factor in dropping off Laurie. That took us 28.2 miles off the route, there and back, for 56.4 total. That brings the mileage charge due to the Glen Echo trip down to $103.84. And assuming that 22% of the trip used 22% of the gas the Glen Echo gas was only $28.97. So we now have revised costs:
costs Glen Echo Dropping off Laurie
tolls $18 $0
gas $28.97 $8.17
mileage $103.84 $22.56
totals $144.81 $30.73
Reasonably expensive. If you have 10 people, though, it's only $15 each.

Fuel Efficiency

I was also wondering how efficient the van was. We travelled 316 miles before filling up, and then put 23.539 gallons in. Only 16.814 gallons were used on the trip, though, giving 18.78 mpg. Which is quite good for a big van.

Wednesday August 30, 2006

This was a little while ago but I didn't remember to write about it then. At the last thursday dance I was at in Concord (8/17) they called a dance with a variant of the Petronella turn. Each person, with only their neighbor (on the side of the set) repeatedly balances and spins one place to the right. So the hands four goes from a square to a line to a square to a line. Instead of doing the last of the turns, the balance was followed by a box-the-gnat and half a hey. The figure was not introduced as a kind of petronella.

Usually there is scattered and unsynchronized clapping after spins during the walk through. This time there was no clapping. I took this to mean people didn't take it to be a petronella turn, and instead were thinking of it differently somehow.

During the first few times through the dance, there was no clapping at all. Then, perhaps four times through, there started to be some clapping. The clapping built over the next few times, to a point about half of what you usually get on petronellas. Then it seemed to deminish some as more people started swinging their neighbor instead of doing the balance and turn (the dance had no neighbor swing).

Anyways, it was very interesting to be watching.

Tuesday August 22 2006:

Part way back to Swarthmore. Going to the Dawn Dance seems more and more likely. Claire also wants to go, and her parents have a van which I think we can take. We'd probably go up for the whole weekend. I hope it works out; it would be fun and I'd like to see people.

Friday August 11 2006:

I am perhaps a very foolish person. After the dance last night (very good dance, excellent energetic music, lots of good dancers, good caller, even if she did call most of the same dances she called two weeks ago on monday) we went out to the all night stop and shop to buy root beer float fixings. We didn't mostly end up with root beer floats (I ended up getting a chocolate croissant and splitting a bag of raspberries) but it was still fun.

Afterwards Dave had a CD of contra music and felt like calling, so we (eight of us) danced in the parking lot for a while. We've been dancing in parking lots more and more lately. It's fun.

Dave left a little before others were ready to go, so I ended up going home with Jill and her friend Maura. We played cards, music and talked for a few hours. What we didn't realize was that if you get back to the house at 2:00 and hang around for three hours the sun comes up. So the sun snuck up on us, Maura freaked out and fell asleep, and Jill and I walked to a nearby hill to watch the sunrise. Very cold feet (flip flops in the cold dew) but the world was looking very pretty out.

Jill gave me a ride to the train when we got back, which turned out to be an express train faster than driving into Boston. After a five minute layover and a muffin I was out on the 8:05 Lowell to West Medford. And much sleep.

Sunday August 6 2006:

Back from CVFF this time. Much fun. Similar to Falconridge, but different. The atmosphere was much more relaxed and felt less like a fair. At FRidge there were two sets of food: expensive not-very-good greasy fair-style food, and expensive health food I didn't like. Here there was cheap ethnic food, somewhat NEFFA-style, served out of several tents. None of the large trucks that unfold into takeout fast food places.

The dancing was fun, though not quite as good as at FRidge. Great Bear Trio was excellent, and I bought their CD. The floor was loud and very slippery -- and not muddy, due to the lack of rain.

I had been planning on camping, but the camping area turned out to be way far from the festival area. Zoe's family let me sleep on their motel-room rug. Not having to deal with the orange tent was just as well. And riding with them in the car consisted of much singing -- and kazooing -- along to old folksongs.

Fun weekend.

Sunday July 23 2006:

Back from the Falconridge Folk Festival. I had a great, though wet and often sleepless, time. A large but incomplete Swarthmore contingent came up for Saturday, and David German successfully surprised them by appearing magically from Huston. I also met some new people, some on the dance floor, some after they randomly appeared in our tents. But the fire.

The fire was not the most fun thing about the festival. Not fun at all. Saturday night as we were getting ready for bed, there were shouts and what sounded like fireworks. Looking across the tenting field the sky just glowed orange. People called 911 and they tried to bring a fire-truck up the muddy hillside. This ended up taking a very long time, in which the van (late 80s econoline 150) which had been burning was reduced to a charred metal exoskeleton. Someone who sounded like they were in charge told us we needed to evacuate the hill (as we later found out, because the fumes from the burnt were highly toxic). We ended up walking our bedding down to the dance tent where we slept the night. Or our piece of the night. Maybe 4:00 to 7:15. Not really enough.

Thursday July 13 2006:

Medford. Home. Quite nice. Sitting at the computer typing on a Model M is really quite relaxing. Even if the keys are mislabled. Contra tonight. Pictures from Italy after Suzie gets home and unpacks the camera in her bag.

Update: pictures here

Wednesday June 28 2006:

Been in Cortona almost a week now. Enjoying it. Lots of music, gaming, and good food. Pictures to come after return to the States. Perhaps more later, though I wrote something long yesterday and it died, so perhaps not. Off to get gelato.

Saturday June 17 2006:

Just back from the contra dance in Concord NH. Neat place. It was in a community center in a place that really felt a lot like Snicker's Gap by Bluemont. Center of stores in a rural area, wooden buildings, low porches out front. The dance itself was both a really good dance and a really bad dance. But I had a good time. It was small, with several new people and the music was amazing; Nat Hewitt on fiddle with Finn Hewitt on keyboard. The caller, however, was not really so amazing and kept messing things up. Oh well.

What really struck me most was the dance composition, though. There were two squares and I think four proper dances. There were at least four dances with no neighbor swing, two of which had no swings at all. English-feeling figures seemed to be considered the more basic sort; in the second dance -- which was done like a teaching dance -- there were figure-eights, hand casts, and waist casts. Soon after was a dance with contra corners. And people were more comfortable with the contra corners than more modernish things like `box the gnat'. People also did not do swing-style twirls (such as the one going into a swing or after a circle left) or expect them. I guess that the classification `modern urban contra' for dances like the Springstep/VFW isn't that far off.

Addendum 7/21: They also took ladies chain to be by default all the way over and all the way back, with the definition I'm used to being called a 'half ladies chain'. They also once called half a hey for four which while I reasonable call is never once I'd heard before. Half a hey is faster and contra has not had heys for three for so long that there's no confusion. I do wonder what would happen if the caller called "first man, both women, hey for three". Probably confusion, too much to even be solved with a walk through. And unhappiness on the part of the left out man.

Friday June 16 2006:

Verizon appears to be not entirely made up of idiots. In fact, I really only have evidence for one, the intial tech I talked to on the phone. When I called back I got someone who was reasonable and logged the call. The lineman they eventually sent out the next day was quite competent. The telephone wiring in this area is generally messy, because you don't have to be very careful with how you wire for ordinary telephone. But not so with DSL. Anyways, they did a pair change and we've now got a newer DSL-capable line. And we've got DSL on it. Whee faster internet!

Wednesday June 14 2006:

Verizon is a bunch of idiots. Or perhaps it has just a few idiots, selectively placed around the company so as to be optimally annoying. Verizon was supposed to be setting up DSL for our phone line, and the original `service ready date' was thursday at 6:00. Today at 10:00 I received an automated message from Verizon saying that the line was ready and I could set up the modem. At this point I am quite happy.

I excitedly set up the modem, but no luck. The modem worked properly as a NAT box, but no internet connectivity. The green DSL light just sat there blinking. I moved the modem down to the basement where the demarc is, disconnected everything else from line one and had the modem be the only thing there. Still no luck.

Feeling somewhat frustrated, I called Verizon tech support. They had me power cycle the modem and reset it to factory settings, but I had already tried both of those. They then told me that while they would normally escalate the problem to the repair team, because it was before the official service ready date they wouldn't, and I should just wait.

This wouldn't be that bad, if it was not exactly what happened a year and a half ago. We went through the same process, and after a week or so they decided that the house was too far away to get DSL. My dad called back recently to see if things had changed, and they said they'd upgraded their systems since then and all of Medford was covered. But I think it's likely the same thing is wrong as before.

Tuesday June 13 2006:

Finally got around to calculating mpg for the trip to NEFFA:

vechicle gas cost gas price gallons miles mpg
rented van $129 $2.95 43.7 718 16.4
Allison's car $81 $2.95 27.2 670 24.8

Note that miles_van > miles_car because we didn't take the car to NEFFA on Saturday. Also, multiplying by vehicle capacity we get 197 miles-people/gallon for the van and 124 mp/g for the car. So the van does pretty well per person. You could have only 8 people in the van and still come out ahead.

Monday June 12 2006:

Finally got my act together and released a bugfixed PlayGUI: 0-1-4. Much happyness.

Sunday June 11 2006:

Fun day yesterday. Went to the Irish Connections Festival in Canton. An outdoor festival, and in the rain. Not really ideal. My shoes got progressively more soaked as the day went on, until my feet felt like they were simultaneously freezing from the cold and rotting from the damp. General badness. Near the end, though, I thought to look for a bathroom with a hot-air hand drier to use on the shoes and socks. That was amazing; like putting on clothes right out of the dryer.

Yup; warm dry socks was the most important aspect of the festival. There were other fun things too, though. Scrambled Six performed near the beginning; Rosie's last time with the group. There was an 'introductory Irish set dancing event' which turned out to be Kerry Sets. Basically polka in square dance formation. We'd learned them a while ago at NEFFA and our set was eight contra dancers. Much fun.

Later on Crooked Still played. They were excellent, and also quite entertaining to watch. We had front row seats. When they finished, though, there didn't seem to be much happening at the festival for a while so we went off to Concord to catch the second half of the 'alternative music' dance. Lots of fun. And singing tonight.

Sunday June 4 2006:

Medford. Nice place. Been back three weeks now. Lots of dancing, music, reading. At the end of last summer I read Dune and liked it very much. I've started on the other books in that series and am through to the fifth book. They are not quite as impressive as the first was, but I'm enjoying them nonetheless.

I've been playing a decent amount of music lately, mostly guitar and piano. I've also been trying to play the fiddle some, and while I enjoy it I find it very frustrating. It should not frustrate me that I am unable to pick up the instrument and immediately play perfectly, but somehow it does. It would be nice to have a pure lead instrument that I could play; lead on the guitar hurts my wrists and lead on the piano or accordion always feels like it's lacking a bass. Playing in tune and bowing are the hardest parts, which I guess makes a lot of sense coming from a guitar background.

In line with my general goal of getting more practice at playing contra guitar I played in the open band at MIT in mid May. It was much fun, and I think I will try and sit in with Apple Crisp when they play the MIT dance in mid June (soonish!).

As for dancing, I've been dancing nearly every Monday, Thursday, Friday, and Saturday since I got back. Fun, really. And there was the dawn dance a week ago. Going to contras since has them they all seeming so short. But still fun; I have to worry less at a normal dance about conserving energy.

Monday May 1 2006:

May Days

Two May Days, yesterday and today, Bryn Mawr and Belmont Plateau. Both were quite fun. At Bryn Mawr we went to the dining hall and were awfully out of place. The nine of us, some of us male and all of us in our red garnet and black kits stood, not knowing where to go, and surrounded by a very large number of girls sitting at tables in white frilly dresses. They were all in white frilly dresses, and they were all girls. I felt somewhat out of place. The large amounts of Strawberries and cream made up for it though, and we saw Mariah.

Dancing there went well, with Stillington not being too interesting, but Helmsley II going well. The double triangle lock of Helmsley went perfectly. There was also maypole dancing, but that was very silly, being much more of a race than anything else. The students didn't seem to care about the pattern or even keeping the ribbons taut, making a jumbled mess. When the seniors got bored they just left their ribbons in a heap at the bottom of the pole and declared victory. I know that it is a race, but they should have a restriction that you need to do it properly. I suspect that a long time ago it was done right, and then slowly progressed to more and more or a race. But right now it's laughable.

Dancing at Belmont Plateau was also fun, though far too early. As at Bryn Mawr, the Kingsessing Morris Men and the Germantown Country Dancers (Longsword and Garland) also danced. It was a very pretty morning, with no rain or even many clouds. The sun came up as requested and we danced for a little while after to make sure it stayed up.

Just before we started Helmsley, though, a sinister force appeared on the scene. A large blue tractor, apparently sent there to mow the park, started across the field. As it got closer it got noisier, being somewhat unpleasant. Moving across the field, between where we were and where cars were parked, it was almost between the television crew that was recording the festivities and their van, when people realized that there were cables. And that mowers are not nice to cables. The newspeople turned around and started running towards the tractors, waving wildly. It ended up stopping just short of the cables. Unfortunately, while this was happening we tried to start our dance. More accurately, our musician tried to start the dance, and the first dancer in line, Alex George, started off. Being distracted by the tractor and commotion, I didn't move. People poked me, though, and I went on and joined the dance. The dance itself went very well.

Pictures of both May Days are still being collected, as of now, but will be up in the pictures section when they are ready. Will Quale already has some up.

Vans

Also there was much silliness with vans. The student van coordinator, lorpu jones, is frustratingly bad about responding on time requests for vans. We made sure to request one well in advance, but that was not enough. As the time drew nearer and she didn't respond, though, we became more worried, first emailing her again, then calling her room and cell, then repeatedly calling her. When we finally got through to her it was 6:30 in the morning on Sunday and she didn't have a van for us. Luckilly the folks over at Peaslee are very nice and let us use their van for the morning. We were very careful with it.

We also needed a van for the next day, and Lorpu was helpful with that, though letting us know a little earlier would have been nice. That went fine, except it seems the gas gauge is broken, or somehow messed up. We drove a total of 46 miles, and the gauge went from one-fourth to one-eighth full. After dropping people off, though, I went to fill it up. I put $10 (3.2 gal) in, and the gauge stayed at one-eighth. I put in another $10, and another, and it still did not move. Most of the way through the fourth $10, the pump reported that the van's tank was full. The gauge still read well under one-quarter. Sounds broken to me.

Student Council

There's also messiness over the elections for co-president of student council. One of the candidates apparently tested the security of the voting system, and found it to be insecure. He then claims to have inserted two votes, one for himself and one for another candidate. He informed the election committee, whose two official responses were to first cancel online voting and require paper voting in Sharples, and then, several days later, to declare the entire first co-presidential election void, holding a special election with that candidate disqualified.

The problem is, the election committee does not have the power to do this. The constitution states, in Article II, that,

1.6 Election Fraud
1.6.1 Upon reasonable evidence of elections fraud, SC has the power to void a contested election if two thirds of all members present vote to do so.
1.6.2 Any student may protest any specific election result by registering a complaint in writing with a member of the Elections Committee within 24 hours of the announcement of election results. This protest shall be heard in a meeting of the whole Council.
1.6.3 If SC finds that an election was fraudulent to the extent that the determination of the winner was probably affected, the election shall be voided.
1.6.4 If SC finds that a requirement of this Constitution was violated in an election, the election shall be voided.
And then a bit later that,
2.3 Special elections shall be held in the event of election fraud, seat vacancy, or failure of any candidate to achieve a plurality. ...
It appears that it is Student Council that must void the election, and they have not done so. Even then, they would have to find that not only had the candidate committed ballot fraud but also that the "determination of the winner was probably affected". Without this the initial election results should stand, unvoided.

Tuesday April 25 2006:

Much fun at NEFFA. Lots of people. There were 12 of us down from Swat and staying in Medford, resulting in 26 people in the house Saturday night. Driving wasn't as bad as I expected, though it would be nice for the future to have additional van certified people. I danced a decent amount more than in the past, and played in the festival orchestra with Laurie. I still want to try and have there be some ML Breakfast Room contras next year, and I think Laurie and I would be able to play well enough. Allison needs to learn to call.

Finances also worked out ok. The ending amounts were:

expensevancartotal
tolls$26.20$26.80$53.00
gas$129.00$80.50$209.50
rental$138.00$0.00$138.00
totals$293.20107.3$400.60

This works out to $31 per person who went, or $27 per person who told me they were coming. For full cars, if we're renting, it looks like the van is the most efficient. With 12 people it would come to $24 apiece. That's not bad. And I think David German would take a turn driving next year.

Also, housing has happened. Me and David German have the big room of the Quint, Alex George and Chris Green have the small room, and Julia has the single. Laurie is across the hall in a barn double, while above us David Chudziki and Lucas, and Katie and Allison have the two two-room doubles. Other people have gotten rooms in ML too. So nice to have all that stress over with, even though it was mostly other people's stress.

Sunday April 16 2006:

Halfway through three weeks of amazing busyness and contra. Last weekend I flew up to Boston with Claire for three nights, with a dance each night. Friday was the experienced dance at the Scout House, Saturday we went to Greenfield, and Sunday was the joint Suzie, Ricky, Barbara, Jon 50th birthday potluck and contra thingy, again at the Scout House. The first two nights Nat Hewitt played, and was excellent. Much funness. The only real downside was missing family weekend and the crum regatta, but oh well.

This weekend, among such other fun things as interviewing for the SBC van coordinator position and beautiful weather, was the Swarthmore contra dance. The turnout was excellent, including Claire and Lee. The band and caller were good, and people improved noticibly over the course of the night. We started off with some people who'd never danced and others unfamiliar, and finished with a no-walkthrough dance. Yay!

Next weekend is NEFFA, and it looks like they'll be a decent sized Swat contingent, 13 or so. I'm much looking forward to it. And the weekend after the Points of Etiquette(Swarthmore Longsword) dance twice for May Day. First at Bryn Mawr on Sunday at the reasonable hour of 9:00, then the next day on Belmont Plateau at the most unreasonable 5:30. Ugh. But longsword tends to be fun, and Helmsley II is being quite pretty. Then the year ends and I'm in Boston for the summer.

Stuff this summer:

Wednesday March 29 2006:

Chris Green has been trying to make the ML breakfast room corner into a lounge, with couches and funness. In his quest for spiffiness, he bought a sectional couch from GoodWill. Not wanting to carry it all the way back (ugh; effort) I brought along a bike, duct tape, and a two-by-four, and had a much easier time of it. The ML Shuttle driver, Todd, was apparently amused and took a picture.

Monday March 20 2006:

Near the beginning of the semester, when Vince moved to California and left lots of techish stuff in the ML lounge, I found a camera. Specifically, a Kensington 67014 usb webcam. It looks to be about 1999ish, being a late '90s, early '00s shade of beige. It works, though I usually have to restart the display program a few times before the image is clear. It looks decent. See some dice.

I'm trying to think of a nice project for it, perhaps facial recognition and fishbowl attendance monitoring. It doesn't work with the video manipulating code I wrote in cs25, though I could probably mess with the gqcam source.

Wednesday March 8 2006:

I've been back in Medford for almost a week now, and things have started to be very relaxed. Perhaps a bit too much so. Lots of time reading, playing guitar, and messing with computer stuff. The experienced contra on Friday was much fun, and because I'm back for the weekend of the 9th, I'm going to be at the next one. And then NEFFA is two weeks later, with the Swarthmore contra in between. And ideally people will want to go to the April 1st Elverson dance as well. Lots of dancing.

Saturday February 25 2006:

Walking into the Fishbowl lounge, we see students bent over computers and forms. Freshmen and Juniors laugh, Sophomores growl, and the word "major" is heavy on the air. It has become February, a time when sophomores must reflect on their future and realize that they will not be forever Swarthmore students.

There are many approaches to this strange and disheartening news, ranging from obsession to apathy, and students are well distributed over the spectrum. As the Monday deadline approaches, however, the prospect of another year of sophomore-level housing pulls more and more students to the obsessive end. And there is an awful lot to obsess about.

Obsession, even temporary, does have its uses, and now I sit with a completed sophomore paper and forms filled out. I plan now to do an honors major in CS with preparations in natural language and visual information systems, and an honors minor and course major in Ling. Selecting courses is a really fun puzzle. Taking them is fun too, but sometimes less so.

Monday February 6 2006:

The folkdance trip to the Elverson contra went well. We had thirteen people and did succeed in getting a van. The Elverson contra had more young people than the Glenside one, but fewer experienced dancers. Bringing 13 college students also shifted the age distribution.

There should be more contra in the future, but I'm not all that sure how often they can happen without people getting overcontrad and stopping attending. At the very least we should go to the next Elverson one we can, which is the first of April. But I would like it if we could go to one sooner.

Dancing, and reading about midwestern squares with tractors made us curious about the possibility of using an SBC concept grant to host a vehicular Square dance at Swat. The draft proposal is here.

Sunday January 22 2006:

PlayGUI is now ported over to MPD and is sitting here. It needs a better name. And playlist support.

Thursday January 19 2006:

Back in August, when I was thinking of how to get a program that allows several people to remotely control a central music server, a friend recommended "mpd". Not remembering correctly I looked up mplayerd, which has since dropped off the net. It didn't do what I wanted and wasn't reliable, so I wrote my own. I talked to him again over break, and found that he was really recommending mpd. I went off to have a look at mpd and it does seem a better program, especially server-side. It does everything PlayMusicD does and more. The clients though, are not quite as impressive as the server. I think I may rewrite PlayGUI to be a mpd client. The language they're using is not that different from the one I wrote PlayGUI to use, and the ways in which it is different seem to be better. So perhaps this weekend PlayGUI will be reincarnated as somejavampcpun.

Monday January 16 2006:

Back at swat after a nice vacation of tennesee, family, contra, and reading. I finally put together the pictures overview page that I had been meaning to write. Most of them even have mouseover descriptions. Much fun.

Monday December 12 2005:

Exams are starting, so instead I programmed a helper to keep track of what you know about the stacks in Titan Whee!

Tuesday November 29 2005:

Wink finally happened again, Sunday night. Katie was there, taking pictures. She put them up on facebook but I've snarfed them and so they re-appear.

Saturday November 12 2005:

I finally got around to putting some updating into PlayGui. The result being version 0.0.5. There are updates to both the client and server, the most important being a server change to unbreak next and previous and the addition of a "Random N" button to queue up N random songs from the current search results.

Wednesday November 9 2005:

This sunday was Allison's birthday, and we gave a her a surprise birthday dinner party. Where "we" means mostly people other than me. Anyways, it was much fun.

Wednesday November 2 2005:

Some general thoughts about user interfaces and usability, modified from a post I made on Slashdot in the interest of not having to explain views all over again:

Macs are nice. Macs are pretty. Macs are intuitive, easy to learn, and allow you to configure things without learning much about them. All good for some people. The question is, which people? Perhaps the casual home user who just wants a computer to check email and browse the web? For anyone who uses a computer a decent amount, it is worth the effort to learn some unintuitive but powerful programs. LaTeX with emacs would be a good example, in that you do need to go read some manuals, but once you start using them it becomes so much faster and they are so much more adaptable than standard GUI word processors. I use my computer every day. I rely on it for most of my work. As such, the initial experience and the amount of work that goes into learning how to use it effectively are very minor concerns compared to the benefit of being able to work faster, more efficiently, and with less UI sillyness. That OS X is intuitive and pretty is pleasant, but no real help in getting my work done.
This applies equally to Windows, really, with the exception that I think Apple does a better job at creating this sort of interface than Microsoft. There are Linux distributions, such as Linspire that also do this. But I think they all miss the idea that computer use should be about getting work done quickly and conveniently, and that the initial capabilities of a person who has not really learned the system are not all that important.

Computer-human interface is not yet anywhere near perfected. We have at least two powerful and mature systems in the GUI and terminal, and both remain severely limited. Programmers focus on making GUIs look pretty and not on using the extra interface flexibility to better communicate information. Terminal-based programs have very little flexibility in their display, yet they are often much faster than GUI programs at getting information accross.

Sunday October 29 2005:

Halloween in ML went pretty well. Lots of fun costumes, pictures of which are here. I spent most of the night upstairs reading The Ordinary Princess out loud in Blair's room and then playing Carcassone with Allison and Alex.

Friday October 27 2005:

I put up my rulesets for Diplomacy. Anyone want to play a {T-1, P-1}-0.1.0 game?

Saturday October 1 2005:

Finally got around to putting up some pictures. Pictures of the fishbowl are here. David has some pictures from the tea party here.

Monday September 19 2005:

I wrote a little plugin for Gaim to make away messages easier. See here.

Sunday August 29 2005:

Summer is over, I'm back at Swat, and I've finished the first usable version of PlayMusic, a client/server music playing program.

Thursday June 23 2005:

I just got back from a week in Marion with my cousins and family. Marion is on Buzzards Bay off Cape Cod in Massachusetts. It was quite fun, not too buggy yet. Lots of bikes, ocean, puzzles and games.

People like Ricochet Robot. It has a nice feel, sort of like Set, where people can come and go, finding paths as they want. Similar to a puzzle as well. It would also be a nice game to implement as a computer programming exercise, in Commonwealth's CSII class, for example.

Wednesday May 25 2005:

Been home for a little while now. I was playing Can't Stop, a board game, and I was wondering what the probabilities were for it. I wrote a little program and the results are here.

Thursday April 28 2005:

Things are winding down; classes are just about over. I'll probably be working quite a bit during the next few weeks, what with no classes and all, but that should be fun. I've been working on a plugin for Gaim that allows Gaim to interface with the traditional Unix write console messaging system. See my gaim-write subpage.

Saturday April 16 2005:

Justin Herring now has his photo album back. He emailed me a while ago wanting it back, having found my site through a search for his name. it was a little confusing, as I didn't really have any way to verify that the gmail account actually had a connection to him. I asked him to describe parts of the book, but he didn't remember it that well and so did about as well as a careful guesser would have. I told him I would send it, and then waited for a while, figuring that if he was just some prankster who happened upon the site then he wouldn't follow up. He did follow up though, and so I shipped it. I'm not sure how I feel about lying to him. I wanted to be sure that I did not send his album to someone else, but I also didn't want to make it too hard on him if it really was him.

Housing is set for me now. Lucas, David German, and I will be rooming in the fishbowl in ML. Should be fun. Housing is not set for Katie or Allison. They would like to live in ML but as it is a lottery it is hard to know how it will work. I'm quite happy I blocked.

Saturday February 5 2005:

I got an accordion! It's a Scandalli piano-accordion from the 40s, fullsize, with two stops. I'm very happy with it. I had been playing the accordion Davy lent to Rosie during winter break, and it made me remember how much i used to play the piano. So I decided to get one. I bought it on eBay, which was pretty uneventful, except that it arrived on the 26th, but I never got the package slip, so it languished in the mailroom until the 2nd. When I first opened it, it looked like it was in pretty bad condition, because almost half the bass keys were stuck on. I opened it up (which was fun; it's from the 40s and it has a really interesting mix factory made metalwork (to put on the right notes for the chords) and careful woodwork) and there were five or six keys that were slightly out of position so they were stuck under the housing. Freeing them freed their partners, and they all came out. There are a two keys that need oiling but I'll get to them.

Monday December 20 2004:

Back home to Medford. It's nice being back and it's snowing. Snow is nice.

To get back I took the chinatown bus from Philly to NY and then from NY to Boston. It is a very good deal ($10 + $15), and is actually more confortable than a car, as you get a lot more space (if no one takes the seat next to you).

Breakdown of trip:

Sunday November 7 2004:

Anyone heard of Lords of the Rhymes? As in Hobbit Rap? George Dahl got their documentary, and as geekiness goes, it's near complete. Unless you mind profanity (it is rap, you know) I strongly reccomend you hear their songs.

their downloads server is really slow, so I'm mirroring them locally:
  • Lords of the Rhymes
  • Black Riders
  • Nine-fingered Frodo

  • Monday November 1 2004:

    The Mary Lyon Halloween party was on Saturday. Costumes are always fun. Allison and Katie went as Love and Lust respectively. Lucas was supposed to be a pimp, but I don't think he was flashy enough. I prefer gangster. Pimp, however, goes a bit better with Love and Lust, though. And I was a member of Sargent Pepper's Lonely Heart's Club Band. Jolly good fun.

    Actually, the party itself wasn't really much fun at all, so Katie, Allison, Lucas and I spent four or so hours talking to Michael (and reading Hope for the Flowers). I got tired and left at around 1:30 (the first one). By the time the others wanted to leave (2:30) the police had started arresting people for underage drinking if they were walking back and the Party Associates were requiring that everyone take the shuttle back. Lucas, Katie, and Allison were most definitely not drunk (all three religious, Allison a Mormon) but they ended up having to wait another hour for room on a shuttle. But I got to sleep and that's all that counts.

    Friday October 1 2004:

    P'TERODOACTYL HUNT!!

    The P'Terodactyl Hunt is a grand SWIL tradition in the spit of swords, sorcery and second grade. The basic premise is, run around with foam swords hitting each other. There is a bit of a plot in that we (the hunters) are ostensibly trying to kill enough monsters (with a bounty on each head) to buy a p'terodactyl-hunting license and bring that endangered breed one step closer to extinction.

    Standard attire was a trashbag; white for hunters, black for monsters, and a foam sword. No real rules except that hits only count within the trashbag area, and when you die, you have to go to an inconvenient place to respawn. Much fun ensued.

    Wednesday September 29 2004:

    There was a dorm-storage sale last week, and we got a lot of interesting things. The best was probably the mouse for a Lisa or 128k Macintosh. One thing Katie and Sheen found was a photo album. It was rather sad, however, as the album began with a (strongly reccommended reading) loving letter from the previous owner's sister. She called him Justin, and a picture of the times at a swim meet part-way through gave us the idea that his last name was Herring. Justin Herring. We set off to track him down.

    We used the amazing facilities of google to find that Justin Herring, class of 1997, had a rather illustrious Swarthmore career. He was on the swim team, setting third and fourth place records in the 200 and 100 meter butterfly in his sophomore year, and helping get first place in the 200 and 400 medly relays his junior year.

    Justin Herring was also a very political person around campus, gaining notoriety in both the Swarthmore Conservative Union and the Amos J. Peaslee Debate Society. In the former he took opportunities to participate in on-campus political debates against the Swarthmore College Democrats while in the latter he took the battle to the enemy, fighting for the Swarthmore name at UMBC and Wesleyan, and winning awards while doing so.

    So what we have here in Mr. Herring is clearly a dedicated swimmer, a mature conservative member of the Swarthmore community. Yet he leaves behind a photo album that his younger sister clearly poured her love into before he left for college. What sort of conflicted man must he be?

    Note to Justin Herring: if you want your photo album, please email the address at the bottom of the page.

    update: Justing Herring has contacted me and wants his album back. It looks like (uninterestingly) he simply forgot his album, with no intent to slight his sister. We're sorting out shipping.

    In closing, Katie demands that I put up this picture of Allison.

    Saturday September 18 2004:

    So some of you may have heard something about us suspending Sheen from the third floor window of Parish. Well, it is our considered opinion that these rumors are not only false but malicious, and have devoted an entire page for their disproof.

    Friday September 17 2004:

    While some people (Allison) may view this layout as a bit dull 6~ and unimaginative, I view it as exceedingly standards compliant. How many sites do you know that render exactly the same in Firefox, Safari, IE, and Lynx. Of course the images I link to are difficult to view within Lynx, but AA can display them just fine.



    Last modified by Jeff Kaufman: Fri Nov 20, 2009