Author: lpaulriddle

  • Jasmer Challenge

    One of the more popular geocaching “side games” is called the “Jasmer Challenge”. The goal: for each month since geocaching began in May 2000 (when Selective Availability was turned off), find at least one geocache that was placed in that month. As of this writing, that means finding 214 caches: one placed in May 2000, one in June 2000, one in July 2000, etc., all the way up to February 2018. It’s a difficult challenge to complete, because of the travel required, and the scarcity of some of the months. For example, there are only four remaining active hides in the world that were placed in August 2000.

    I’ve been working on this challenge off-and-on for about 3 years. Many people, including some of my friends, have taken “geo-trips” specifically for finding caches to help them fulfill the Jasmer Challenge. Geo-trips aren’t really an option for me at this point in my life (not that I’m complaining by any means), but I am fortunate enough to have the opportunity to travel for work several times a year. Work travel often gives me opportunities to work on my geocaching goals, including (you guessed it) the Jasmer Challenge. In 2017, I found myself with only two months left to go to qualify: July and August 2000. I was able to find the latter in April 2017, and the former in February 2018.

    April 2017: GC36, “Geocache 612” (hidden 8/21/2000)

    “Geocache 612” is one of the four remaining caches from August 2000. It’s located in Kalkaska County, MI, which is in the northern section of the lower peninsula, about 3 to 3.5 hours north of Detroit. My opportunity to find it came in April 2017, when I traveled to Ann Arbor for a work gig at University of Michigan. Upon arrival, I rented a car and drove 7 hours round-trip, with the weather threatening the entire way, and made the find. The full story of this find may become the subject of a future post…

    February 2018: GC18, “Tarryall” (hidden 7/2/2000)

    “Tarryall” is the oldest active geocache in the state of Colorado. It’s located about 2 hours out of Denver, in a rural area at about 8600′ elevation. I’ve had my eye on it for a long time, as work seems to bring me to the Denver area every couple of years. I had plans to find it in 2016, but decided to drive east and find another old cache instead.

    Late last year, I learned that I would be heading to Golden, CO for a few days in early February 2018. Now, if I had my choice, I’d rather get sent to Colorado in spring or fall (note to readers: I am not a skier). I just figured that Colorado at 8600′ in February would be, well, snowy, and to maximize chances of success, it would be better to eliminate snow as a potential complicating factor. No such luck, but I decided to plan a mission to Tarryall in spite of it, and hope for the best.

    First thing I would need would be a car. I’ll throw in a plug for Zipcar, a car-sharing service which I’ve used for several years. It’s great for just this kind of thing. As long as there are Zipcars available nearby, they can be rented by the hour, 24/7, and there are no rental counter lines or pushy agents to deal with. Just reserve, find your car, and drive. On this trip, I was happy to find that Colorado School of Mines (the site of my meeting for the week) had cars available. I reserved a 4WD Ford Escape, which I figured would give me the best chance for success should I have to deal with any bad weather.

    I chose the first full day of my trip (a Monday) to make my attempt. My day job didn’t start until 12 noon MST, and by body clock would still be on eastern time. I figured I would need 2 hours for the drive out and 2 hours for the drive back. If I left at 4:30am, and planned on being back by 11, that would allow 2.5 hours for caching.

    Departure day arrived. The weather forecast in Colorado looked beautiful, with highs above freezing, and no snow predicted in either Golden or the area around Tarryall. Maryland was another story, though: we had an ice storm the day I was scheduled to fly out. No significant flight delays, though, other than to de-ice the plane. I arrived in Golden, got my stuff ready, and went to bed early.

    After about 5.5 hours’ sleep, I was up bright and early and making preparations to head out. I left my hotel at a little after 4, found my Zipcar, and was on the road at 4:30, just as scheduled. It was very windy around Golden, as a front had gone through overnight; but the weather at the lower elevation was a balmy 50°F (considerably warmer than back home in Maryland).

    The drive was dark. Really, really dark. At about the halfway mark, I drove through Kenosha Pass, which has an elevation of 10,000′. This was the one area where my careful planning failed me. I had checked weather in Golden, and in Tarryall, but not here. Here, it was snowing. Not a huge amount of accumulation, but heavy enough to coat the roads and reduce visibility. Thankfully, the wind had died down, but it was snowing. And dark. And my car was out of windshield washer fluid. And did I mention dark? I was having a hard time seeing the road. The truck in front of me decided to pull over to wait it out. Morale was slipping, and I considered turning back.

    I decided to soldier on. In spite of the snow coating the road, I could still see the yellow lines, so I knew it wasn’t deep. I stopped to manually clear my windshield, which helped with visibility. The Ford Escape seemed to be having no issues with traction. Braking was still crisp and responsive. There was no one else on the road to worry about. I cut my speed and drove carefully. Eventually, as the elevation dropped a little bit, conditions improved. I started to see the first glimmers of light in the east. The roads were no longer snow-covered. I might just make it!

    I pulled into the parking area for Tarryall at about 6:30am, right on schedule. I had read that with a 4WD vehicle, it was possible to drive on the unpaved ATV road up to about 0.1 mile from the cache. Instead of doing that, I elected to park near the main road and walk from there, which was only about 0.5 mile. I hiked out; I found the cache; I did my happy dance. By now, the sun was up, and the area was just beautiful. I’m not saying that Maryland isn’t beautiful, but we don’t have stuff like this. I hung around for another hour or so, and found another cache, before returning to my vehicle for the drive back.

    The drive back was uneventful. I stopped for several more caches. It was hard to resist the urge to stop for even more caches (fellow geocachers can relate to that kid-in-a-candy-store feeling), but I had a deadline, and couldn’t be late getting back. It was still snowing at Kenosha Pass, but the plows were out doing their thing, and the drive was much less daunting in full daylight. I made one more stop, for gas and a really bad gas-station sandwich. I rolled back into Golden with plenty of time to spare.

    So, thus ends my quest to complete the Jasmer Challenge. It was fun, and it sent me on a couple of crazy adventures! If you thought it was over, though, don’t fret: once one has completed the Jasmer Challenge once, the next step is to complete it twice. I’m already crossing my fingers that work will send me to Atlanta, where I’m told another August 2000 and another July 2000 hide are lurking…

  • Frigid-er (sort of)

    Today was my second really, really cold bike ride this week. Conditions today were a little different from Wednesday. The air temperature was a steady 10°F, slightly warmer than Wednesday. The real story was the wind, which was around 13mph when I left, and 17mph when I arrived, with gusts up around 25mph. The wind chill ranged from -5° to -8°, which was enough for the NWS to post a wind chill advisory. I decided to shorten my morning ride from my usual 12-14 miles down to around 8 miles.

    I wore the same clothes that I wore Wednesday, except I added arm warmers as a base layer, and wore a winter cycling jersey instead of a thin athletic pullover. This turned out to be too much, as my chest and back were sweating by the time I finished the ride. My feet were comfortable for the first half of the ride, but when I turned upwind, my toes got uncomfortably cold. Still hoping to find a good solution for cold feet. My head stayed comfortable, but I was getting winded on uphill stretches that ordinarily are no problem for me. I think the balaclava was interfering with my breathing. I might want to consider getting a balaclava with a mouth vent.

    On the plus side, the constant wind kept my glasses from fogging up so much. There’s a silver lining to everything.

    I have to admit that the ride was getting a tiny bit unpleasant at the end, mainly because of the cold feet and the breathing issues. I think if I can solve those two problems, and remember not to go too overboard with the layers, I should be fine riding in these conditions in the future.

  • Top 10 Geocache Finds, 2017

    Continuing my tradition from last year, I’ve compiled a list of my 10 favorite geocache finds of 2017. It was tough to whittle the list down to just 10, but that’s sort of the point, I guess. In a departure from last year, I’m including a short blurb about why each individual cache made the list. Once again, these are in no particular order. Trying to order them would make this even more difficult. So, here goes…

    • Ruined-Chicken Multicache (GC2BE4)
      This 6-stage multi-cache is located in Fair Hill NRMA in northeast Maryland. It is well done on many levels. I found it back in January with Alzarius. The cache name didn’t make sense until after we had found a few of the stages. A close runner-up is the nearby Fair Hill Multicache.
    • To Catch a Cacher (or Reverse THIS! #3) (GCTM39)
      This is a puzzle cache located near Warrenton, VA. It was published in 2006, and as of this writing, has been found a grand total of 5 times. In spite of some familiarity with the puzzle subject matter, it took me a long time to solve it, but it was quite a learning experience. I chose to make it my 3000th find. This cache also had a very close runner-up: The Digital Detective (or Reverse THIS! #2 ).
    • 91° (GC5BD60)
      This “extreme” cache is located in Gunpowder Falls State Park, in northeast Baltimore County, MD. It is a 3-stage puzzle involving a field puzzle, a tree climb, and a rappel. It’s noteworthy in that it’s the first truly “extreme” cache that I tackled on my own. I feel like I earned my stripes here. It was also a really fun outing with the kids (actually multiple outings, as it took us a couple of trips to complete it).
    • Maryland’s 5 Oldest Challenge (GC25W3Y)
      This cache is noteworthy not for the hide itself (which is just Tupperware in the woods) but for the challenge, which involves finding the 5 oldest active traditional, multi-, unknown, virtual, and letterbox hybrid caches in Maryland. That’s a total of 25 caches, and many of them are quite challenging, including long hikes and/or difficult finds, and they’re located in almost every corner of the state. It took me 2 or 3 years to complete the challenge.
    • The Cache of Wolfenstien Enigma (GC3YTTM)
      A puzzle cache located in Valley Garden Park, not far from Wilmington, DE. A very elegant and challenging puzzle, with a nicely-themed container, located in a beautiful park.
    • Geocache 612 (GC36)
      This is one of only 4 remaining active caches that were hidden in August, 2000. It’s located in Kalkaska County, MI, which is in the northern part of the lower peninsula. The cache is really in the middle of nowhere. It’s located off an unpaved logging road, about a mile from the nearest paved road. The hide itself is not all that remarkable, but the quest to find it was lots of fun. After flying into Detroit for a business trip, I drove 7 hours round-trip just to find this cache (although I did find a few others along the way). The weather was threatening the entire way, but the heavy rain held off until after I had found the cache. It was a long day, but it netted me the penultimate month I needed to complete the Jasmer Challenge. Still waiting for an opportunity to find a July 2000 hide, which is the final month I need.
    • Whiskey! Tango! Foxtrot! (GC3212W)
      This was an extreme cache in Pennsylvania (outside Wilkes-Barre), by the fabled keoki_eme, that is now archived. It had 8 or 9 stages, including an abandoned mine, an old mine shaft, several rappels, and about a 10 mile hike. I tackled it with a group of seasoned extreme cachers, some of whom remarked that it seemed easy for a keoki_eme cache, because it didn’t involve any 70′ tree climbs. Being my first, I didn’t have anything to compare it against; hopefully it won’t be my last, though. My kids came along, too, did a few rappels, and soldiered through the entire hike with minimal complaining. This cache makes the list partly for the time spent with friends, and also for one of the most fun rappels I have ever done (into a deep, narrow crevasse). Sadly, the cache was archived at the time (long story there), and we collected the stages as we went along. Too bad no one else will get to enjoy it.
    • Spice Creek small boat (GC4265)
      This is (to my knowledge) Maryland’s oldest “hydro” cache. It’s located in southern Prince Georges County, on in island in a small tributary of the Patuxent River. It doesn’t get many finds, because it’s not easy to get to GZ. The channel isn’t navigable at low tide, so you need to launch at or near high tide. To reach the closest launch point, you have to portage your kayak about a half mile through the woods, on a narrow trail. From there, it’s about a 3 mile round-trip paddle. The cache is worth the effort, though. The paddle is beautiful. The cache is an old-school ammo box hidden on the high point of the small island. After careful planning, I tackled it solo in mid-September.
    • Not Your Mother’s Multi (GC5MH6R)
      Another “extreme” cache (are you sensing a trend here?) that I tackled with my son. It’s a two-stage multi in a park near Middle River, MD. The first stage is a cleverly-hidden field puzzle. The second stage is about 30′ up in a tree. This was the first “real” tree climb I’ve tackled by myself (with gear), and it was a blast. I used a throw bag and line, and at first, wasn’t sure at all if we would succeed. But sure enough, after a few errant throws, we got the tree rigged. There’s always an extra sense of accomplishment when the outcome is in doubt. Great fun, and I also got to spend quality time with my teenage son. Doesn’t get much better than that!
    • Venona’s Box (GC2WP0R)
      This is a challenging puzzle cache located in Morgan Territory Regional Preserve, north of Livermore, CA. The puzzle solution required knowledge of computer graphics, programming, and linear algebra. I solved the puzzle in 2015, and had intended to find the cache later that year, but flight delays forced me to postpone the attempt until 2017. It was worth the wait, though. An absolutely beautiful hike, with stunning views at the cache location.

    Well, there you have it. I can’t wait to see what 2018 has in store!

  • Frigid

    My bike ride to work this morning was officially my coldest ever. I left home at 7:00am, rode approximately 12 miles (my phone battery died about 9 miles in, so I don’t have the exact figure), and arrived at work a little after 8. Official air temperature at BWI was 7°F at 6:54, and at 7:54, it had dropped to 5°F. I’ll average the two and call it 6°. There was no wind to speak of, so I didn’t break my wind chill record of 2°F, set back in 2009 (air temperature that morning was 14°). Based on the forecast, that record may fall on Friday, assuming I ride that day.

    I rode my 1993 Specialized Rockhopper, which I’ve owned since it was new. I have it outfitted for winter, with Schwalbe Marathon Winter studded tires, Pedaling Innovations “Catalyst” flat pedals, and “Bar Mitts” handlebar mittens.

    Clothing I wore:

    • Head: fleece balaclava, cycling helmet, glasses
    • Torso: merino wool t-shirt, polyester long-sleeve athletic pullover, polyester/nylon/spandex fleece pullover, hi-vis bike jacket/windbreaker
    • Legs: fleece-lined cycling pants (Performance “Triflex” brand)
    • Hands: Gore-Tex cycling gloves with inner liner
    • Feet: Wool socks, Altra “Superior” athletic shoes, Performance “toesties” toe covers, Planet Bike neoprene shoe covers

    Overall, this setup was pretty comfortable, as long as I stayed under 20mph, at which point I would start to feel the wind underneath the balaclava. My fingers started off a little cold, and warmed up as I rode (can’t say enough good things about the Bar Mitts). My toes got slightly chilly about 30 minutes into the ride, as they always seem to, but not overly so. I’m a recent convert from clipless back to flat pedals, and I must say my feet stay a lot warmer in the winter than they used to with cleats. As always, the studded tires did their job keeping me upright through icy patches.

    The only real issue I had this morning was one that has plagued me in the past: my glasses fog up really easily in this kind of cold, particularly when the balaclava is covering my nose and mouth. I haven’t found a really good fix for this. They clear up on their own, as long as I keep moving, but it’s still a pain, and potentially dangerous, when they fog up and obscure my vision. On climbs, I sometimes have to pull the glasses down so I can see. I may try out a product called “VisorGogs”, as they are cheap, and I have heard that they make good winter cycling glasses. If I do, I will report back here.

    The ride home this afternoon looks like it’s going to be about 20°F warmer than this morning. It’s going to feel like summer!

  • Top 10 Geocache Finds, 2013-2016

    I thought I’d start a new tradition of picking my 10 favorite geocaches found each year. 2013 is the first year that I had 10 or more finds, so I’ll start with 2013 through 2016. These are in no particular order…

    2016

    • Subterranean Adventure (Thunder Underground) (GC2PD3Q)
    • Magna Cum Laude, My Hat’s Off to You! (GC5FY1V)
    • Psycho Urban Cache #10 – Derelict Grunge Acropolis (GCT9NC)
    • Mingo (GC30)
    • Maryland Heights (part II) (GCGZV1)
    • Vampire Empire (GC1A2T0)
    • Cacher’s Oven (GC3ERVX)
    • IMPOSSIBLE? – NAH! III DOUBLE TROUBLE IN LEESPORT (GC1Q2GC)
    • The Ghost Fleet of Mallows Bay (GC3ECVM)
    • A Triangle is a Perfect Square (GCH4A4)

    2015

    2014

    2013

  • Cloud

    For a long time, I have been running an Ubuntu desktop in my basement “office”. However, lately, I’ve been using it less and less, in favor of my laptop. It runs a local web server which hosts a private wiki that we use for household stuff (recipes, scanned documents, etc); it also has two monitors, which occasionally comes in handy when I’m doing something that requires a lot of screen real estate. And, it runs Gnucash, my financial software of choice. But for the most part, it functions as a print and file server, and that’s about it.

    A couple of months ago, I had an epiphany. It occurred to me that I don’t need this PC in the basement. I might use it one or two days a month, but for the most part, it sits there sucking up power. So, I came up with a plan:

    • Get a DVI adapter cable for my laptop so I can run it with an external monitor, which should solve my screen real estate issue.
    • Spin up an AWS EC2 t2.nano instance to run the wiki, and possibly, Gnucash.
    • Retire the PC, and get a Raspberry Pi or similar device to take over as print server and file server.

    So far, I’ve got the AWS instance up and running, and moving the wiki over to it was surprisingly easy. I have to worry a little bit more about security now, as the AWS instance is available from anywhere on the Internet. My old web server was only accessible over our home LAN.

    This AWS instance is the first “personal” web server I’ve ever had. Previously, I used public web space on a server hosted by my employer (a University). But, I’m trying to migrate things away from there, in an effort to separate my “work” and “personal” online identities. To that end, I’m also using the new AWS instance to host all of the content that was previously on the University’s server.

    Lastly, I used to host this blog at wordpress.com, but now that I’ve got my own server, I figured there was no reason not to host my own WordPress instance. So, I moved the blog over as well.

    I have to give a shout-out to Let’s Encrypt, a free online Certificate Authority. Before they came around, I would have had to shell out big bucks for a SSL certificate.

    I thought Gnucash was going to be a sticking point. It’s not really a cloud-friendly app. I didn’t really want to install a full X-Windows environment on a t2.nano instance, just to have somewhere to run Gnucash. That seemed like killing a fly with a sledgehammer. Initially, I tried running it on the Mac via X11 forwarding. I set up XQuartz on the Mac, installed gnucash on the t2.nano, and tried it out. I was not happy with the performance at all. I ended up running the Mac-native version of Gnucash, and storing the data file on Dropbox. That seems to work OK, and gives me a centralized repository for the data file, while allowing me to run Gnucash on multiple Mac desktops (providing I remember to exit when I’m finished with it — it does not deal well with multiple instances accessing the data file simultaneously).

    Speaking of Dropbox, I’ve just started using that as well. Although there are a couple of annoying things about it, I think it’s going to work well for me. It fits in well with how I like to work (read: it works well with the shell) and also supports Linux natively, which was a must-have for me. I’ll likely write something up about Dropbox once I’ve used it for a little longer.

    For now, I still have the PC sitting in the basement. I still have to buy a Raspberry Pi, install Linux on it, and set it up as a print server. It’ll also run a 3TB USB disk that I’ll use as an offline backup for my Dropbox files, as well as VMs, and other assorted things that are too large for Dropbox. Stay tuned!!

  • Greetings Earthlings

    I took a look at my long-neglected blog this afternoon, and realized that it has been about 2.5 years since I posted anything here. That’s right around the time I picked up geocaching as a hobby, and ever since then, I’ve been using my geocaching logs to get my writing fix. Still, it sometimes feels like I lost something when I abandoned the blog. There’s something to be said for just stopping to write whatever comes to mind, whenever the spirit moves me. It’s kind of like a public diary. Maybe I should return here every now and then. I’m here now, at any rate.

    I am still commuting by bike regularly, although I’ve dropped from 4-5 days per week down to 2-3 days per week. The lack of bike infrastructure in my area, combined with the realization that no one is really doing anything to improve matters (in spite of talking a good game), has left me a little jaded. It actually seems like the area is getting less bike friendly over time. I no longer find myself looking forward to riding, although I’m sticking with it because it’s become routine, and it keeps me in shape. I hope the situation changes, but I’m not holding my breath. Maybe it’s time for a new bike; that might improve my outlook. Moving would also help. You can bet that when we eventually move, we’ll be taking a close look at walkability and bikeability of the areas we consider.

    On the positive side, a year or two ago, I discovered that I can hike to work. I have to allow about two hours each way, so it’s not something I can do every day. But recently, I’ve refined and improved my route a bit, and am doing it about once a week. The majority of my route takes me through Patapsco Valley State Park, which is a really nice walk. The route is strenuous, and complements the biking nicely. I’m hoping that the cross-training will keep me more balanced, and help to stave off injury.

    I also bought a kayak in late 2014. I’ve yet to figure out how I can incorporate that into my daily commute, but not for lack of trying. 🙂  In the meantime, it’s been a fun recreational activity, particularly when combined with geocaching.

    Hopefully will write more soon. In the meantime, keep moving!

  • Random Biking Notes

    It’s been a while since I’ve been inspired to write anything here, but I wanted to sneak a post in for April 2013, preserve my streak of blogging at least once a month.  Twitter is largely to blame for my lack of blogging, as with my current schedule, it’s much easier to fire off a quick thought in 140 characters than it is to formulate several paragraphs.

    I’ve burned through another rear rim on my road bike.  I broke a spoke earlier this month, and upon removing it, I noticed that the rim was cracked in several places.  So, off to the bike shop for a new rim and wheel rebuild.  I blame the trashed rim on Baltimore County’s crappy back roads.  I think I need to put some wider tires on this bike and ride at lower pressure.  The problem is, I can’t fit fenders on this bike with anything larger than 23mm tires.  Maybe I should lose the fenders and buy another bike that I can use in bad weather.  You can never have too many bikes.

    While the new wheel is on order, I pulled out my single speed bike, which I hadn’t ridden since last summer.  I used to ride fixed gear all the time, until I threw my hip out spinning downhill, and then I gave it up.  I flipped the rear wheel around to the freewheel side and have been riding the bike that way.  When I first tried that a couple years ago, I hated it because the gearing was too low to pick up any speed going downhill.  Now, I’m not as speed-obsessed as I was back then, and I don’t mind it as much.  Sometimes it’d be nice to be able to build up a little speed in traffic, but it’s a fair trade-off in exchange for the simplicity and ease of maintenance of a single speed bike.

    That’s all for now.  Hopefully my next entry will come before May 31.  :-)

  • How to Save Money on Pool Chemicals

    I’ve learned a few things about swimming pools after owning one for 12 years.  #1, pools are a huge money pit.  #2, pool chemicals, particularly when sold as such, are extremely expensive.  And #3, for a lot of pool chemicals, you can save a significant amount of money by purchasing the equivalent product from an alternative source.  You just have to know where to look.

    This write-up is geared towards concrete/plaster pools with salt water Chlorine generators, but much of the info is applicable to all pools.

    Chlorine

    If your pool doesn’t have a salt water generator (SWG), liquid chlorine is generally the most economical way to chlorinate.  The trade-off is that it’s more labor intensive than using Trichlor pucks, and the liquid chlorine has a shorter shelf life.

    For pools with a SWG, it’s still a good idea to keep some liquid chlorine on hand for shocking, opening/closing the pool, and off-season maintenance.

    Standard Clorox bleach is the same thing as liquid pool chlorine, just in a lower concentration. Buy standard, plain old Ultra Clorox, with no added fragrances or other stuff. Check the label for concentration; you want at least 6.25% Sodium Hypochlorite. 2 parts of this is equivalent to 1 part liquid pool chlorine, which is 12.5% Sodium Hypochlorite. The weaker concentration also has a longer shelf life.  Look for house brands at stores like Wal*Mart, but make sure the label clearly shows the product concentration.

    In my area, it is still more cost-effective to buy 12.5% pool chlorine in 5-gallon jugs. Namco Pool and Patio sells them for $17 (+ $6 refundable jug deposit) as of 2010, which works out to $3.40/gallon. At this price, you’d have to find Ultra Clorox at $1.70/gallon to get the same value.

    Salt

    If you have a SWG pool, you’ll periodically need to add salt to it.  Look for “solar salt” at Home Depot or Lowes, in 40lb and 80lb blue bags. It is sold for use with water softeners, and typically goes for around $5 for 40lbs. Look in the aisle with the water heaters and water softener systems. There has never been a discount for buying the 80lb bags, so I get the 40lb bags for ease in handling.  Don’t use table salt; it contains iodine and you don’t want that in your pool.

    Alkalinity Increaser

    Arm & Hammer Baking Soda (Sodium Bicarbonate) is the same stuff as the “Alkalinity Increaser” the pool stores sell. We buy the big bags of it sold at warehouse clubs. It’s typically less than half the price of the pool store stuff.  Another bonus: it’s classified as a food/grocery product, so in most states, you won’t pay sales tax on it either.

    pH Reducer

    If you have a plaster pool and/or use a SWG or any kind of hypochlorite product (liquid chlorine or Calcium Hypochlorite powder), your pool’s pH will tend to rise over time and you’ll need to periodically add acid to lower it.  Look for Muriatic Acid at Lowes, in the paint section near the turpentine and paint thinner. It is sold in gallon jugs. I have never found it at Home Depot.  Muriatic acid is significantly cheaper than “dry acid” or sodium bisulfate, which is typically sold for pools.  The trade-off is that it’s more hazardous to store, so be careful with it.  Be careful: you want the stuff with the orange label, not the “safer muriatic acid” with the green label.

    One year at Home Depot, I scored several 8-pound jugs of Sodium Bisulfate (dry acid) at around $2.50 a jug. This is an amazing deal, probably cheaper than wholesale. I think it was around December. You can’t count on finding a deal like this every year, but sometimes it does pay to check the pool sections in big box stores during the off season.

    Calcium Hardness Increaser

    In plaster pools, it’s important to keep the water from getting too soft, or it will become corrosive to the pool plaster.  Look for bags of Calcium Chloride ice melter at the big box stores in the winter. In early 2010, I found 50lb bags of this at Home Depot for around $17, which is about ¼ the price you’d pay for the same stuff at a pool store. The catch is, you have to read the label carefully. You want pure Calcium Chloride, and it can’t be mixed in with any other chemical. Most winters, the box stores sell blends of different chemicals, which are cheaper by the pound than Calcium Chloride, but you don’t want to put them in your pool.

    Cyanuric Acid

    Sold as “stabilizer/conditioner.” Can’t really cheat with this stuff, unfortunately, as it doesn’t have many applications outside swimming pools. It often sells at $4-5/lb at pool stores. If I had an opportunity to buy this at wholesale, I’d stock up. But lacking that, I’ve shopped around for online deals, and the best price I’ve found currently is at Inyo Pool Products, at $70 for a 25lb pail. That’s $2.80/lb, plus a $5 handling fee per order. Dry cyanuric acid lasts forever, so stock up.

    Test Kit Reagent Refills

    These really add up, particularly the good quality reagents from Taylor. Surprisingly, the best online prices I’ve found are at Leslie’s Poolmart, where shipping is free for orders over $50.  As of 2011, you can also buy refills directly from Taylor on their web site.

  • Enumerating Contract Bridge Auctions with Lisp

    I’ve been a fan of Contract Bridge for a long time.  I’m really bad at it, but all the same, I find it fascinating and compelling.  One of the interesting facts about Bridge is the astronomical number of possible auctions.  For any given deal, there are over 128 × 1045 possible auctions. The exact number is:

    128,745,650,347,030,683,120,231,926,111,609,371,363,122,697,557

    That’s a lot!  Being the nerd that I am, I decided to dust off my LISP skills (mostly neglected since college) and write a program to enumerate them.  To wit:

    (setf allbids
          '("1C" "1D" "1H" "1S" "1NT"
            "2C" "2D" "2H" "2S" "2NT"
            "3C" "3D" "3H" "3S" "3NT"
            "4C" "4D" "4H" "4S" "4NT"
            "5C" "5D" "5H" "5S" "5NT"
            "6C" "6D" "6H" "6S" "6NT"
            "7C" "7D" "7H" "7S" "7NT"))
    
    (defun printMore (bidList bidStr)
      (if (null bidList) nil
        (progn
          (mapcar #'(lambda (p)
                      (printAuctions bidList (concatenate 'string bidStr p (car bidList))))
                  '(" " " P " " P P "))
          (printMore (cdr bidList) bidStr))))
    
    (defun printAuctions (bidList bidStr)
      (let* ((matrix
              '(nil
                " P P Dbl"
                " P P Dbl Rdbl"
                " P P Dbl P P Rdbl"
                " Dbl"
                " Dbl Rdbl"
                " Dbl P P Rdbl"))
             (bidMatrix (mapcar #'(lambda (x)
                                    (concatenate 'string bidStr x)) matrix)))
        (dolist (x bidMatrix)
          (progn
            (print (concatenate 'string x " P P P")
                   (printMore (cdr bidList) x))))))
    
    (defun printSomeAuctions (startBid &optional (prefix nil))
      (let ((bidPos (position startBid allbids :test #'equal)))
        (if bidPos
            (let ((bidList (nthcdr bidPos allbids)))
              (printAuctions bidList (concatenate 'string prefix (car bidList)))))))
    
    (defun printAllAuctions ()
      (progn
        (print "P P P P")
        (mapcar #'(lambda (p)
                    (printSomeAuctions "1C" p))
                '(nil "P " "P P " "P P P "))))

    (printAllAuctions) will iterate through and print out every possible Bridge auction.  Don’t hold your breath waiting for it to finish, though.  The computer I was using, a Linux box running CLISP, printed out around 14,000 auctions per second.  At that rate, it will take 291.4 × 1033 years to complete.  That’s over 21 septillion (21 × 1024) times the age of the known universe.