This Space for Rent

Feb 28, 2010

Domestic vermin picture of the day

BikeyMavis

Mavis protects the midlifecrisismobile.

Feb 27, 2010

I sense a great cuteness in the force

SunnysideSilas

Silas frolics on the playstructure at Sunnyside School while we wait for Russell to finish with a party at the Avalon theatre/penny arcade.

Feb 26, 2010

Friday Dust Mite Blogging™

StillLifeWithCat

You can never have too many cat & Dust Mite photos.

2 comments

Feb 25, 2010

New Code!

After considerable delay (including some bug reports that came in the day before I wanted to originally release the new version) I’ve pushed discount up to version 1.6.2 with the eradication of a few bugs, the addition of a new manpage (covering the new callback functions introduced in version 1.6.0), and yet another rewrite of the emphasis handling so that pathological emphasis won’t produce incorrect xhtml.

In no particular order, this New Code! adds/fixes

  • another pass at the emmatcher to make certain that pathological indentation won’t produce bad xhtml
  • fix a bug in autolink that made a hanging prefix generate a bogus <a tag.
  • restrict the depth of a ETX header to <h6>
  • write a manual page for callback functions.
  • don’t emphasise _ or * when they’re in the middle of whitespace.
  • unescape trailing ‘ ’s when they’re in the middle of a code section or []() link.
  • tighten the parser for footnote links so that a construct like []-<]: won’t erroneously become a footnote.

(and, of course, a bunch of new test cases to cover the bugs; the test scaffolding has been tweaked a bit to make make test a little less chattery; it no longer reports the result of each individual test (unless a test fails) but only the group result of each .t file’s worth of tests. You can override it by doing “VERBOSE=1 make test”, if you want, but it defaults to being somewhat less chattery.

1.6.2 was going to have a mod_discount apache module (suggested by Austin David @ Yahoo) in it, but, alas, I was using my old 13" macbook while the Macbook Air was in the shop having the lid replaced, and the disk in the old macbook let the magic smoke out before I moved the three files I was working on back over to the Air (both the old macbook & the air are running macos 1.5, but only the macbook air has had the appropriate black time machine magic done to it to allow me to do time machining to the airport base station with external disk that I’m using instead of a newer, but more expensive, time capsule.) Ooops. Perhaps in 1.6.3; it would be useful for me, because 95% of my website is now markdown that I have to hand-theme into html format, and I’d be better off if I simply had it done in the traditional apache-style utter black magic.

But even without mod_discount.c, it’s still nice New Code! which obligingly fixes a few annoying little buglets and won’t be quite so enthusiastic when it runs bizarre emphasis.

4 comments

Feb 21, 2010

Out on the line (170km isn’t quite the same as 200km, but it’s close enough for today)

I have filled my rando quota of junk from the road today

Today, I went to Vernonia for lunch and found this screwdriver lying by the side of the road on the way back. It, fortunately, wasn’t a brevet, because despite my 14.3-14.4 mph moving average (only estimated because I left my GPS turned off for the first 10 miles after we stopped for lunch) I spent about 3 hours of the 10 hour trip stopped and either eating, photographing, or waiting for the rest of the lead group to catch up to me.

NewHongKong is closed

The outbound lead group & I arrived in Vernonia before the restaurant opened, so we spent about half a hour sitting outside waiting for the doors to unlock. And then we slowly ate lunch, because one of the non-lead people on the ride had a spoke break (and knock her rear wheel so badly out of line that it was rubbing against the frame) and had to creep the last six miles into Vernonia much like Pete the flamingo. (I’ve had this happen to me, and it was amazingly annoying despite it happening to me in the city. The Vernonia-Scappoose highway is not in the city, so I can only imagine how frustrating it must have been to creep along while being outrun by passing slugs.) So we ate slowly, and after she showed up we provided important sidewalk superintendent services while the wheel was fitted with a temporary spoke and retrued, and then finally, at sometime around 13:30, set off back towards Portland.

Have I mentioned that the midlifecrisismobile is a fabulous success? Well, it is. Despite having to stop to grab the mandatory piece of rando junk and recover a water bottle another of the lead group dropped when we went over a bridge with sunken joints on the Banks-Vernonia linear park I managed to catch up with them, then go on ahead and force them to catch up to me several times on the last 20 mile run into the city (they caught me just at the climb over the west hills, then briefly dropped me before they took a wrong turn, and then caught up to me for the final descent from Skyline down to downtown Portland (a less optimistic description of this would be “they were in the throes of dropping me again except we ran out of uphill”) The mlcm is gratifyingly fast for me; there was too much of a sustained ESE headwind on the return to take full advantage of the bike, but it moved right along when I put my head down and pedalled like mad to try and get away from the wicked wicked headwinds.

And I almost brought along enough food. I microwaved a couple of potatoes the night before, then loaded the handlebar bag up with them, a couple of cookie bars, and three packages of Clif gelatine blocks. I was planning on bringing a big honking Toblerone bar, too, but I forgot to pack it when I was rolling out the door at the ungodly hour of 7am, and forgetting that meant that I spent the last 20 miles scrounging every last spare kcal out of my system as I first cranked along ever so quickly to try to get away from the wind, and then cranked along ever so slowly to try and get to the top of the West Hills. (And now that I’m home, I feel absolutely flattened. This is the hardest long(ish) ride I’ve ridden, possibly because when I was moving I was moving along as quickly as I could. Oy. If I could maintain this rate on a R200 (without spending 3 hours off the bike) I think I could actually do a < 9 hr loop.)

NorthScappooseCreek

But it was pretty, and well worth the trip.

Feb 20, 2010

Now this brings up an interesting question…

It's nice to have a bicycle map, but these are all 4 and 6 lane roads.

Assuming that these hopeful little purple and green lines are actually usable bike routes, and assuming that I could maintain a 15mph start-to-finish average, I could probably make it to the area of Moffett Field from anywhere populated on this map in < 2 hours. But, at least from the sky, the trolley, and from what I remember about riding the commuter trains & buses when I was last down in that neck of the woods more than a decade ago (I worked for Apple, then McAfee, for a while and commuted from Los Angeles, then (briefly) from Portland; I did one other commute job in San Francisco, but that’s 50 miles north) it’s all pretty relentless post-war apartment and densely packed housing (without good mass transit. Oy) which is not exactly my cup of tea (densely packed apartments are good in a place like Chicago, NYC, and the parts of Los Angeles, San Francisco, and Seattle that developed before the United States started to massively subsidize the automobile culture. But 100 years ago the southbay was wall-to-wall crops, not condos.)

The interesting question is whether there’s anyplace on this map that even slightly resembles the east side of Portland, and which is close enough to the edge of the sprawl that I could make it out into the countryside in finite time. I’ve been offered a job down there, and as part of my scheme for deciding whether to accept (and it sounds like it would be a really really interesting job, even though it would cost us a minimum of US$50k/year more to pay for living expenses) I need to figure out whether there’s a place that I could live that would let me ride my bicycle and not plunge me into complete depression. Sure, I could just buy a house with some land up in the mountain range that separates the southbay from the pacific, but my bank account doesn’t have US$5,000,000 in it for just this eventuality (and, even more sadly, I didn’t think ahead and charter myself as an investment banking company so that the US Government would just give me the money I needed) so I’d need to find someplace where the rent (either real rent or a pretend mortgage) would be affordable on whatever (unspecified) salary the prospective employer wants to offer.

Perhaps I will stop at the corner store and buy a lottery ticket while I ponder.

3 comments

Feb 19, 2010

Friday Dust Mite Blogging™

Hitchhiker

Dust Mite hides out in a pile of flowers.


New Code!

Discount is not yet up to the official 1.6.2 release, but I’ve got another prerelease for people who are adventurous. 1.6.2.pre2 fixes a defect that Mike Schiraldi reported; if autolink is on, a fragment like

http://a.url.is.here
ht

would generate

<a href="http://a.url.is.here">http://a.url.lis.here</a>
<a href="ht">ht</a>

because the autolink buffer was prefilled with http://… and my autolink check routine was calling strncasecmp() without bothering to make sure that the input was actually long enough to match (and thus T("ht") nicely overlaid the previous “http://”, and strncasecmp() didn’t know that it was only supposed to check S("ht") characters instead of the 7 characters in http://. Damnit.)

All the other feature changes from 1.6.1.pre1 are still in (better behaving emphasis on pathological input, new test cases, new output format for make test so that it doesn’t display output for individual tests unless one of them fails, and some markup repair for where I misread the standard) so this is the New Code! you’ve been looking for to liven up your cold dark rainy weekend.

PS: I’ve also started writing a manpage for the callback functions I implemented in 1.6.0

PPS: And I’ve started writing configuration support for shared libraries on Linux (hypothetically; the only Linux boxes I’ve got run a.out, baby, so I’m just guessing that the C compiler on modern Linuces uses the same (poorly documented) command line options that FreeBSD uses,) elderly versions of FreeBSD, and spanking new versions of FreeBSD. That library support isn’t in this prerelease, but might make it into the official 1.6.2 release if I’m feeling confident enough about it by the time I’m happy with the bug reports (or, hopefully, lack thereof) from the new features I’ve already put in.


Railroad picture of the day

Amtrak 172 @ Springwater

When I went out for a short afternoon loop today, I reached the bridge over the SPYellow Menace just before the southbound Coast Starlight did. It was a nice warm sunny day, so I just had to stop and wait for the train to go by.

Feb 18, 2010

DIY cassette kit

CassetteKit

A few hundred miles ago, when I was in the middle of running the UGB 200, my bicycle started to develop an annoying clatter whenever I went over a patch of uneven pavement. Over the next couple of weeks, I walked around the bicycle, tightening a fender here, taking a link out of the chain there, until I finally got to the cassette today and realized that it was shifting a little bit from side to side. And when I pulled the wheel out to remove the cassette and clean it before tightening down the lockring, I discovered, in quick succession, that

  1. the lockring was loose. Really loose, to the point where I could unscrew it by hand, and then
  2. the cassette had converted from a cassette to a pile of chainrings and spacers, with the bolt that held it all together floating loosely halfway into what used to be the cassette.

Hmm. That would certainly explain the clattering, as well as some of the floating shifts that would happen when I shifted out to the 32 or 11 ends of the cassette. And fortunately I had another cassette (from the 650b experiment; I pulled the cassette before I sold the wheelset so I could have a spare) so I could set this kit aside in case I want to reassemble it with a 36 tooth dump gear (35 inches instead of the ~40 inches I get with my current 48:32 dump gear) if I need a somewhat lower gear for riding my Canby-Timothy 300k after the snowline is comfortably above Barlow Pass (yes, yes, I suppose I could put a double or triple on the front and hand-shift it for alpine sections, but I did most of the Barlow 300k on my xtracycle (which bottoms out at 33 inches) so I should be able to do half the climbing with the somewhat more ridiculous lower gear the midlifecrisismobile has.)

And, in case you’re wondering, yes, I cranked the lockring about as tight as it can go on the ex-650b cassette.


(A somewhat better) Trolley picture of the day

VTA996+dish

I posted yesterday’s trolley picture of the day when I was sitting in the departure lounge at lovely San Jose International Airport (10 years since the last time I was there and they’re still working on the same roadways into the airport? And there’s still no direct trolley link to the thing, even though it’s a whopping 3/4s mile away from the 1st St mainline? Oy) and thus didn’t have time to carefully look at all of the pictures. Because it I had, I would have noticed that I managed to get one that had both the NASA/Lockheed/whoever dish on the southwest side of Moffett and one of the new (and dumpy looking; the old high-floor VTA cars looked like a low-budget knockoff of the Bombardier/BN first gen cars in Portland, but the almost all white paint scheme the VTA uses does not work well on low floor cars with really high ceilings) VTA trolleys at the same time.

Well, now I’ve fixed that little oversight (at least as much as I can with the little point-and-shoot Nikon I was carrying because I didn’t want to lug my Pentax from airport checkpoint to airport checkpoint.)

Feb 17, 2010

Trolley picture of the day

VTA996

A downtown (San Jose) train approaches the the Lockheed Martin station in Sunnyvale (just south of Moffett field) at about 3pm today, before a slower-that-molasses crawl up the line to downtown San Jose and beyond (I got off just before the San Jose passenger station, so missed the slow crawl out to the end of that line.)

It’s been a decade since I last rode a VTA trolley, and it seems like they’ve gotten slower :-(

2 comments

Feb 15, 2010

Railroad picture(s) of the day

When I went out for a short loop this afternoon, I found myself crossing the Springwater bridge over the SPYellow Menace mainline at about 13:55, and, even though I didn’t want to cool my heels there waiting for the southbound Coast Starlight (departs Portland at 14:15) I could route myself southwards along the Yellow Menace mainline and catch the passenger train further south. It wasn’t even 14:00 when I reached uptown Milwaukie, so I proceeded southeast to Clackamas Towne Center & the I205 bike path (reaching the I205 overpass over the Yellow Menace at 14:20.) I stopped there to wait for the Amtrak train, but was surprised by a northbound Yellow Menace train instead.

UP5360etal_20100215

This northbound train on the single-track mainline meant that either (a) the southbound Coast Starlight had already gone by (not very likely; This is about 9 miles away from Union Station as the railroad flies, and that nine miles includes a slow creep across the Steel Bridge and through downtown East Portland) or (b) that the southbound Coast Starlight wouldn’t be showing up for another 25 minutes (the line only doubletracks south of Brooklyn Yard, which is 5 miles up the line; Amtrak runs at 60-70 mph through here, but freights move at a somewhat more deliberate pace up the hill to Milwaukie) and I could proceed down to Oregon City and take a picture of it there.

So I did. And I parked myself off the road halfway between the Oregon City railroad station and the Metro waste recycling plant, waited about 2 minutes, and was rewarded with the southbound train going as fast as it could towards downtown Oregon City:

ATK172etal_20100215

And when the train passed, I realized that it was getting close to 15:00, and that meant that if it was running on schedule I might be able to shoot the northbound Coast Starlight as it passed through Oregon City. So I proceeded down to Oregon City, parked myself by the side of the road, and waited around to see if anything interesting would show up on the trestle through downtown. And after about 5 minutes, I heard an Amtrak horn going *hoot!* *hooooooooot!* and the requested second passenger train zipped on by at line speed:

ATK118+114_20100215

It would have been a perfect trainspotting day if I’d seen a P&W train when I came back home (via West Linn, Lake Oswego, and Terwilliger to downtown Portland) but, alas, no other diesel trains were spotted on my way home.

Feb 14, 2010

Domestic vermin picture of the day

CabinetDorrie

We were cleaning out one of the large kitchen cabinets, and when we took the whole thing out to scrub it out, Ms. cat took the opportunity to go and check this possible new hiding spot out.

Feb 13, 2010

Trolley (construction) picture of the day

MLKconstruction

I had to go downtown this afternoon to pick up some tea from Kobos, and I decided to loop back along MLK to see how much construction had been finished on the latest trolley line. Two blocks of MLK were barricaded off, and contained one block of completed streetcar track and another block of streetcar track tucked to bed under a plastic sheet while the concrete slab dries.

This won’t give a one-seat ride from the suburbs to the new development along MLK/Grand, but it will make it a lot easier to get to instead of depending on the #6 bus. (And, who knows, perhaps someone involved with fleet acquisition at Tri-Met will start pushing for lightweight interurbans that can run on the lighter-weight roadbed that they’re using for the downtown trolley line, and then start running suburb-to-central-city-loop trains.)

Feb 12, 2010

Friday Dust Mite Blogging™

Dorrie is unsure about this stuffed eight-legged thing

Dorrie and Dust Mite have an important conversation.


Whoops

Well, I’m back to using the Macbook Air, and this time without bothering to rsync my home directory back over. I’d been using the old 13" Macbook (I believe I’ve had influenza this week; Russell has been under the weather with very influenza-type symptoms, and since running the UGB 200k again last weekend I’ve been feeling steadily more achey and less motivated to do, well, anything, and the last couple of days I’ve been feeling so sleepy that I’ve taken impromptu naps instead of anything else) and not getting around to moving anything over to the other machine, and just this evening, after a dinner of Ethiopian food that can’t be beat, I was looking over Julie’s shoulder when the macbook fan started whirring, softly at first but then louder and Louder and LOUDER. I tapped the wake-up button to get its attention, and all it did was to light up the screen and continue to whirr. So I hit the Big Red Switch, then turned it back on and wandered into the kitchen to get something nutritious to drink.

The Mac was sitting there with a pre-boot white screen, and it was singing “whirrr CLUNK! whirrr CLUNK! whirr CLUNK! softly to itself. And it continued to sing that little song after a couple more power cycles.

So it’s dead now, hopefully in a way that will let me pull it back to life briefly so I can extract the copies of apache I loaded onto it so I work on a mod_markdown handler for gehenna, but in any case it’s not usable for me right now, and it’s only my natural sloth that has prevented this convenient crash from taking out a bunch of my work.

1 comment


New (experimental) Code!

Discount has not been officially pushed up to version 1.6.2, but is floating in a 1.6.2 prerelease state. I’ve reworked emphasis matching (again!) so that it won’t generate html that will make the baby Jesus cry, but before I fold the work back into the mainstream I want to send it out so that people can beat up on it for a while.

Aside from redoing emphasis so that pathological emphasis won’t (hopefully) generate misblocked <em> and <bold> blocks, I’ve also done a couple of quick fixes:

  1. A * out by itself in the middle of whitespace will no longer be treated as emphasis. Ditto for a _. (I don’t know why it was doing this; perhaps I misread the spec. I didn’t discover this until I built up a recent version of discount on one of my servers that was running an ancient version of the code – the configuration there wasn’t set up to build with all of the bells and whistles in the modern code, so when I pushed the archive over there and made it, the standard test cases failed on 1*2 + 3 * 4, which was emphasized by discount, but not by Markdown.pl.)
  2. I handle the standard markdown two-spaces-at-eol-is-<br/> case by substituting ^C<EOL> <space><space><EOL> in text blocks, then later converting all ^Cs into <br/>. But I wasn’t doing the second subsitution inside []() or backticked code, so ^C could make it into the output if a []() or code that extended across lines. 1.6.2 (and this experimental prerelease) unsubstitutes ^C back to a pair of spaces in those two places.

If you’re feeling brave, this is the New Code! you want to download, test, and play with. Hopefully it won’t eat your markdown text, and I can release a real 1.6.2 shortly.

Feb 06, 2010

A successful test

the mlcm, after running the UGB 200

I had everything I needed to load up on the bicycle last night, so that I could just hop out the door this morning and ride the UGB 200k without fuss, muss, or bother.

Well, everything except one thing – I forgot to eat breakfast, and this had the undesirable side effect of causing my legs to convert into powerless noodles when my body had scavenged all the food value out of the cookie bars and (small) lunch I’d eaten. The result of this mistake was that I spent about 35 miles of the loop slowing to a crawl if I hit any sort of sustained climb (fortunately the randonneurs I was riding this loop with – Bill Alsup and Ed Groth – were taking a fairly leisurely approach with extended stops for fud and/or coffee, so I managed to catch up with them after they zoomed away on hills between Champoeg State Park and Gaston (I loaded up with orange juice at Gaston and got my oompf back for a short while, so I managed to catch up with them after I stopped for a phone call halfway between Gaston & Cornelius. And when we stopped at the Rock Creek Tavern I bought and ate a large pile of tater tots, which kicked in about 45 minutes later while we were going up Skyline and resulted in me shooting ahead like I was shot out of a cannon. On an uphill. Note to self: carry baked potatoes along along with the cookie bars.))

But even with that (and 20 minutes of thumbtwiddling in downtown Portland as we waited for two trains (One Amtrak, one transfer freight) to clear our path) I still finished the loop with a 13.9 mph moving average and 9h03 moving time. This is almost a hour less than the best moving time (and almost a mph better than the best moving average) that I got on the Trek (and the final loop time, including the many stops and me not actually bothering to get a receipt at the ultimate control until after I’d been there for 25 minutes, was 11h20 minutes)

And, to add that additional bit of joy in mudville, it turns out that the mlcm – with its el-cheapo Nashbar 25mm tires – descends faster than the xtracycle does.

This is very unlike the loop I attempted with 650b wheels, which, after averaging a princely 12.8mph moving average combined with a flat tire and many stops on the runcreep up to Highland Road (reaching the summit just in time to realize that I’d have to average 22mph into Canby if I didn’t want to DQ the loop. I bailed out at that point and just went home) turned out to not be even close enough to actually finish a R200.

I will need to replace the prototype#2 handlebar bag (which appears to be sagging forward; I’m going to have to adjust the Nitto F15 so that the handlebar bag sits level) with a prototype#3 bag (and replace the tiny saddlebag with something more like the Frost River Echo bag so I can move my spare clothing back and keep the front bag for fud, fud, and more fud (plus my pentax,) and it would be nice to replace the high-trail fork with a low-trail one (for the porteur rack I’m planning to braze up (but haven’t because (a) I don’t own a brazing torch and (b) I don’t know how to braze yet) for the bike (because if I go up to Sandy for donuts, I need a way to carry them back,) but other than that this bicycle is pretty much what I need for going stupidly long distances stupidly early in the morning.

1 comment


YAFYE picture of the day

UP4526_20100206

When I was riding up to the east end of the Hawthorne Bridge this morning so I could ride another loop of the UGB 200, my trip north on Milwaukie/12th was rudely interrupted when this train came rolling across the 11th/12th/Clinton crossings just as I got there.

I ended up detouring via 4th St, but it turned out that I could have just waited for the train to go by, because it was long gone by the time I reached Clay St.

Feb 05, 2010

Friday Dust Mite Blogging™

DustMacAir

The Macbook Air is back, but since I’m not using it right now (I need to move ~orc back over to it first) I’m letting Dust Mite play with it.

Feb 02, 2010

New Code!

Discount has been pushed up to version 1.6.1 because of some fairly hilarious security holes that the users at reddit found when they put discount in to speed things up a little.

A large userbase is wonderful for finding defects, and they’re still finding them, but I’d rather not have exploitable code as the state of the art for everybody to use. So, here’s some New Code! which patches some security holes and tweaks the rendering a little bit to try to make it a bit closer to how the reference dingus works.

Version 1.6.1 fixes

  1. two security holes (scripting attacks via stupid oversights that I never had test cases for) consisting of

    • if explicit html is forbidden, I was putting out a &lt; then streaming out text until I reached a ‘>’. So if someone did <hi <script>attack<hi</script>, it would work, and
    • I was being overly greedy about escaping (with \) " and ', so a malformed title string could contain arbitrary text, up to and including scripts.
  2. three markdown.pl compatability cases

    • lines at the end of a paragraph never get <br/>‘ed,
    • blockquotes can be indented up to 3 spaces,
    • SETEXT-style header lines can have trailing spaces,

I also tweaked one more markdown.pl compatibility case, in that list items absorb new paragraphs if they’re indented at all. The reference implementation is somewhat pathological about how it treats nested lists (in a way that I do not wish to follow) but I changed my “subsequent paragraph snarf” code in markdown.c to absorb paragraphs indented by at least the indent level of the list (so if the list is indented two spaces, following paragraphs indented two spaces will be absorbed.)

There are, of course, some more fun standards glitches that the reddit userbase have gleefully discovered in their saturation bombing quality control session, but they weren’t reported until today (and, of course, one of them involves emphasis, which is always fun to try to implement properly) and, more importantly, aren’t fatal, so they’re going to wait for version 1.6.2, which will follow as soon as the rubble isn’t bouncing quite so vigorously as it is now.


Trolley picture of the day

Tri-Met401AppleStore

I went down to the local Apple Store®©™ to try and get warranty service for my badly injured Macbook, and while I was trying to lock up my bike (there are not very many bike parking spots around Pioneer Place, and those that exist are either packed with bicycles or blocked with newspaper dispensers) a westbound pair of SD70s came whooshing on through. I didn’t have my Pentax (I was carrying a point and shoot Nikon) and by the time I’d gotten the camera turned on an booted up, most of the train had gone by, leaving nothing but the rear car within the viewfinder.

Half a trolley is better than none! *click*

Feb 01, 2010

Flattery will get you everywhere (#2 in a series)

We get so many comments (and comment-viewings) per second that doing this translation has always been a major burden on our servers. The more CPU cycles we spend on it, the more application servers we need, and in turn the more connections going to our database servers, the more places we have to roll code out to, and all sorts of other growth problems.

But you shouldn’t feel one ten-thousandth of a guilt unit over this news, because we’ve just switched our rendering engine from markdown.py (which is nothing to sneeze at and has served us well since the beginning) to a 100%-compatible, pure-C implementation of Markdown known as Discount. (Get it?)

In our tests, Discount is fifteen times faster than markdown.py, which should allow us to reclaim some of our computing power and devote it to other areas of the site that are struggling.

–Announcement in the reddit blog this afternoon.

Admittedly, there are still some defects in 1.6.0 (there’s going to be a 1.6.1 coming out in the next day or so (after the reddit userbase has had their chance to find and exploit more of the security holes in my code)) but it’s nice to see some of my programs being useful to people other than myself.

4 comments

—30—


orc@pell.portland.or.us

Archives