• Excelsior!

    I thought this would take so much longer… I have a web map designed and working, and I was able to add generic routing functionality to it (via the Leaflet Routing Machine plug-in). Here’s a screenshot:

     

    A screenshot from my web map showing a path around town, using the Leaflet Routing Machine and my PostGIS/pgRouting database.

    The actual routing engine on the server side is done with PostGIS/PgRouting, accessed through a PHP script — Leaflet Routing Machine does not normally work with PostGIS,  but I found another plug-in (called lrm-pgrouting), which included a PostGIS function and some Javascript, to add this functonality. Unfortunately, the unmodified lrm-pgrouting plug-in requires something called Geoserver (rather than just a plain old PHP script) to talk to PostGIS, but it was easy enough to modify the plug-in to use PHP, and writing the script itself was the easiest part of the whole thing.

    Once I got routing up and running, I came across a few problems, mostly with how the directions are displayed: the display only showed street names and distances — that is, no turn information — and, for wherever the route continues straight on the same road through an intersection, there is an unnecessary instruction to “go straight.” Both of these were due to errors in lrm-pgrouting which I managed to fix to my liking.

    So, success! But this is using a generic routing function, rather than the “climbing vs busy road vs recommended commuter routes” function I ultimately want to use, so there’s some room for improvement. I also think I may want to abandon the Leaflet Routing Machine and do the input and display on my own. Also also, all this stuff currently resides only on my laptop; I have to find a host that will let me run a PostGIS database (among other things). I still have some work to do.

     


  • Housecleaning

    The warm weather finally broke (again) with this recent rainy spell, let’s hope it lasts but for now it’s nice and cool…

    While we were in Pittsburgh I kind of got fed up with my phone sending me messages about memory use — it wasn’t really all that close to full, but it was getting closer every day, for no reason I could see, and the messages were getting more ominous. I had already moved as many apps as I could to the external drive, my photos, music etc, there should have been very little on the internal drive at all, much less enough to cause problems.  What gives?

    I started looking through the folders on the drive, Googling their names and trying to find what was going wrong. Turns out (among other things) that my photos were being stored several times on my phone, over a thousand photos, each a few megabytes, and while my regular photo storage is on the external drive, the backups were filling the problematic internal one. Several minor changes to the settings, turning off “cloudagent” or whatever, and I recovered a huge chunk of storage space. I was so happy I deleted a bunch of apps I don’t use, freeing up another chunk. The best part? They’re staying freed up.

    Meanwhile, back home on the laptop… my hard drive has two partitions: one large partition where my old system was, and another one that holds the root of my current system, which is smaller than the first partition but by no means small. Unfortunately, it was also constantly growing, and I was down to like 25 gigabytes — which sounds like a lot, but the disk is old and on the small side, and still it’s 350 gigs. I’m down to less than 10 percent usable space?

    Once again, it was the cloud. I’ve been putting it off for a while, but I knew that the problem was my Dropbox folder, which was huge and growing (photo backups from my phone), and things would be a lot better if that folder was on the bigger, emptier partition. This required some work — the Dropbox preferences program wasn’t working correctly, so I had to fix that first, then the move itself took a while — but in the end, the move was a success, and I freed about 25G on my main partition.

    That got me excited enough to look at what was on my auxiliary partition, maybe there was even more I could free up… I have my old system backed up on a network drive, but the old home folder (about 65G) was still there, and all the useful stuff had been moved over to the main partition already. I couldn’t bear to just erase it, so I moved it all over to the network drive (where there are now two full backups, but with two terabytes it’s a drop in the bucket) and now I have tons of free space — 190G of 350G total — on my drive.

    I know, the excitement is palpable…


  • Some Photos of Our Pittsburgh Trip

    We were out in Pittsburgh over the weekend; Anne and I went with Ben to her nephew Mike’s wedding. An awesome time (though exhausting), hanging and partying with Anne’s siblings and their kids. We drove up Friday morning, the wedding was Friday night, we went to Mattress Factory, an art museum, on Saturday, followed by a picnic at Anne’s brother Bill’s place, and drove home Sunday. Boom!

    So anyway, here are some of the pictures I took.


  • Getting Things Done

    I woke up — late — this morning, with a full day of tasks and errands I wanted to get to: I had a noontime ride planned with Ted B, a friend from back in Manalapan days, and I wanted to get to some computer stuff (mapping, among other things). I was thinking of mowing the lawn, I had some laundry to get done, and, since we’re heading to Pittsburgh for a wedding this weekend, I wanted to get my packing and other preparations for the trip done ahead of time. I have a simple to-do list I keep, a list of the day’s chores and errands, which I update whenever there’s enough to do that I might forget something, and it was all there.

    But life comes at you fast… When I came downstairs Anne said “I want to show you something,” and brought me around the back of the house, where the concrete wall near the basement was all moist — keep in mind, it hasn’t rained here in more than a week. Uh-oh, we’ve had an intermittent problem with the downstairs toilet running, leaky flapper or whatever, a DIY fix-up that would be addressed soon enough, but this now looked like we had a serious leak working its way though the floor and out. Anne called the plumber, and I canceled my ride — she had to take her Mom to the doctor, so I was now on “wait for the plumber” duty.

    I also looked over my to-do list. The planned yardwork was basically weed-whacking and mowing, but the grass hadn’t been doing much growing, and meantime something had been digging in the new mulch (covering the crocus bulbs) so I swapped mowing out for sprinkling cinnamon and cloves around the garden — the Internet says that keeps critters away, we’ll see. I did the same for other things on my list, paring down and swapping out a few things, and managed to get all the things done for today’s modified plan.

    (The plumber came, declared it was most likely condensation from the constantly-flowing toilet pipes, and replaced the flapper for us. We’ll have to keep an eye on it to see if the problem goes away, but I’m hoping.)

    One thing I had on that list was to look at some productivity software I downloaded, something called Task Coach. This is a task and time management tool, almost to the  point of being a lightweight project management tool, where tasks and subtasks can be added, organized, prioritized, assigned prerequisites, tracked, etc. It has a lot of really neat features, including a few I was looking for — for a friend — about a year ago: Lori M, another grade-school buddy, put out a request for recommendations for some to-do list software, which had to include (among other things) the ability to add notes at the project as well as the task level. The moment has long since come and gone to make any recommendations, but Task Coach has this and more. It’s really good, except…

    When I was a kid, allergies precluded me from doing the lawn work at home; my brothers got that job instead, and I was the one who took care of the swimming pool. This meant chlorinating the water daily, maintaining the pump and filter, cleaning out the skimmers and skimming leaves manually, and, most important but also most time consuming, vacuuming the pool. It was kind of a pain but really did not require that much effort.

    Then one year, my parents got a Polaris automatic pool vacuum, sort of like a Roomba for the pool. It would run constantly — it was almost hypnotic to watch, like a slow-moving aquatic creature foraging — and my vacuuming days were over. Sort of: I basically traded the vacuuming job for the one called “maintain the automatic vacuum,” cleaning it out, disentangling it when it got caught in things, and even vacuuming occasionally when the machine didn’t work well enough. In other words, my effort level did not actually get reduced with the coming of this “labor-saving device.”

    It’s something I always remembered, and often used as a good, and surprisingly apt, joke/parable over the years, especially at work. And now here I am, looking at the same situation: beneath a certain level of scale or effort, brute-force methods often work better than the more elegant solutions, and I find myself wondering if I’ll spend more time curating my task lists with Task Coach than I actually save by being organized — Task Coach looks like it would only really shine when it’s managing more complicated projects than my daily chores. We shall see.

    In the meantime, I still have my simple, ever-growing text file. Whenever I feel the need, I start my morning (or end my evening) by writing up, at the top of the file, a list of the tasks that need doing that day. Then I can run through the checklist, marking them done as I go. I can add or remove tasks as it occurs to me to, and if I don’t get everything done — no big deal, I can reschedule it, or not, as I see fit. The file sits there on my desktop where I can see it whenever I go to browse — my usual worst time waster. Just knowing that I have a list of things that I need to do and check off seems to drive me a bit; it gives the day a little bit of an unpleasant sense of urgency, and days that I don’t use it feel deliciously unstructured (even if I do manage to get things done), but “to-do list days” leave me with a real a feeling of accomplishment. It’s the little things…


  • Some Photos From Our New York Trip

    I took a bunch of pictures in Watkins Glen and the Corning Museum of Glass, thought I’d show some of them here.

    In Watkins Glen, we camped at the state park, and there was a trail basically from our campground to the trails along the Glen, and then into town. It was cool and convenient, but the park was very crowded, overcrowded actually, and so it wasn’t as much fun as if we had the place (relatively) to ourselves.

    The Museum of Glass was also very cool, but it really wasn’t a museum about glass per se, with history of glassmaking, chemistry and physics of glass, etc, which I would have liked — they had that, but it was more geared for kids, and in the “kid section” — but more an art museum, and museum art history, where the common medium is glass. Early artifacts, modern creations… the craziest part was the gift shop, where I saw several items in the $10,000-$50,000 price range and fragile as, well, glass, just sitting out on pedestals where kids were running around and anyone could bump into them…

    Anyway, here are my photos


  • Go, But At What Cost?

    Listening: “Golden Brown” by the Stranglers

    Well, so much for my previous experiment — don’t compartmentalize, just write — the real task is to actually take the time to write something. I haven’t been motivated lately  to do any writing, but in my defense there have been a lot of things to write about, which might have caused a bit of vapor-lock. Among other things, I’ve still been volunteering at the Canal Museum and at CAT, we did another overnight trip up to Jim Thorpe, and I’ve been exploring mapping and routing again.

    Listening: “Colossal” by Wolfmother

    Listening: “Beautiful Red Dress” by Laurie Anderson

    ON THE BIKE:

    We did another trip up the towpath: Anne and me, Sarah A and Dianna H. We rode to Jim Thorpe, lunching in town and camping overnight at the lake. Breakfast in town, then Anne continued north on her own from there while Sarah and I did the return trip (Dianna met her husband in town and got a ride home). Anne’s destination was Watkins Glen, and I caught up with her by car there a few days later. I brought my road bike, but we didn’t do much cycling, just some hiking at the Glen, then a trip to the Museum of Glass in Corning on the way home.

    Listening: “Help Me Mary” by Liz Phair

    I kind of got the mountain biking itch again: I did a ride on some seriously “old school” trails, with Greg H up in the Poconos near his cabin, probably my favorite ride of the year so far (except for a persistent creaking out of my pivots). Got the pivots fixed, rode Nox on a weekday with Anne, and did Deer Path/Pine Tar in Jim Thorpe Sunday. I’ll be doing a towpath ride later today.

    In between these things, I also took the Cycling Savvy course. Really fun, and though it covered a lot of the same ground as Road 1/LCI, I came away with more than a few choice new insights. I also rode across the Hill-to-Hill Bridge with my sister-in-law, which should have been a crazy idea, but by the time we did it (as part of the course), it was easy enough to be a bit anticlimactic.

    Listening:“Drumming Song” by Florence + The Machine

    We also managed to do some riding as part of Lehigh’s Car-free Day.

    Listening: “Make You Mine” by Heather Nova

    All this music just lets you know how slowly I write, and also how many in my “Favorites” playlist are female vocalists…

    READING

    I re-read The Mathematician’s Shiva recently, as well as all the “Expanse” books (which didn’t hold up to a re-read as well as I would have liked), and China Mieville’s Iron Council (ditto), the most recent new book was Walkable City by city planner and walkability expert/advocate Jeff Speck. Interestingly, he once was commissioned to do a study of Bethlehem, and gave a talk at Lehigh about his findings. (The town skipped over a bunch of his advice, but they did incorporate at least some of it, some parts more slowly than others.) It was fun (at first) to see him name-drop Bethlehem, and CAT, likely referring back to his study, but it became annoying after a while since it was mostly examples of what we were doing wrong…

    Case in point: I had just finished the “Cycling Savvy” course when I got to Speck’s critique of “Vehicular Cycling,” where bicyclists are trained to bike (on the roads) as drivers of vehicles — in other words, “Road 1” and “Cycling Savvy.” His contention, and there is some merit to it, is that while this may help an individual graduate be safer, it makes cycling grim and scary, a turn-off, thus reducing the number of actual cyclists on the road — and since the biggest driver of cycling safety is not cyclist skill (or wearing a helmet or whatnot), but the number of cyclists on the road, the vehicular cycling approach actually reduces general cycling safety. Oh well, he has a point, but I still liked biking over that bridge.

    Listening: “Old World” by The Modern Lovers

    FUN WITH POSTGIS

    I’ve been playing with a new project recently: building a web map for cycle commuters in the Valley. In the end it will show the major Lehigh Valley towns, and the locations of the major employers, and recommended routes that a cycle commuter might use to get around; I used Leaflet to get these basics down, but then I thought that what the map really needs is routing, and I thought it would be best to build a custom routing engine using PostGIS and pgRouting.

    Listening: “Wildewoman” by Lucius

    So, I’m back to my routing kick; this will be part 2 but I’ll be abandoning my previous project in favor of the web map.

    Listening: “Twenty-first Century Schizoid Man” by King Crimson

    First step (of many) was to make sure I had pgRouting installed properly along with PostGIS, and they both were, no problem. Next up was to build my road network — for right now I’m working on a smaller area, a part of Bethlehem City. I got the road data from OpenStreetMap and used the osm2pgrouting utility to get the roads into the database. So far so good, and the whole process was surprisingly easy.

    Using the routing functions took me a while to work out, but in the end they were also pretty straightforward. PostGIS/pgRouting seem to be easier to use, and easier to do sophisticated things with, than the original QGIS networking utilities.

    Listening: “White Unicorn” by Wolfmother (oh no the same band again!)

    Two things in particular came more easily: dealing with one-way streets, which I ignored in the first project since it seemed more trouble than it was worth (you could always walk your bike) and the actual “cost” of cycling.

    The basic idea behind routing is to find a path through the network that minimizes some function, the total of the “costs” of moving from each individual point to point within the network. The default cost function for my first project was distance (the default, and by far the easiest thing to do), which is a pretty good cost function as far as it goes. But with bicycling, elevation changes could also play a major role, and with pgRouting it’s easy enough to define your own costs.

    Listening: “Funkytown” by Lipps Inc.

    So I decided to consider total ascent, every meter climbed, as part of the cost; I found some studies that cyclists generally take a meter of ascent as equivalent to eight meters of travel — that is, you  might go eight meters longer to avoid another meter of climbing. I also thought that grade would affect that eight meters, and found another online study that multiplied ascent by a factor proportional to some power of grade. I eventually opted to go with a geometric factor, doubling elevation cost every 5% change in slope.

    Listening: “Strangeness and Charm” by Florence + The Machine

    I’ll get into it some other time, but I got QGIS to break up my network for finding ascent, and SAGA to assign elevations from DEM data, then wrote a Python script to extract and calculate the elevation costs. Took some doing, mostly dealing with my own typos, but finally I got the whole thing to work, and it routes beautifully — in QGIS, on my machine.

    Listening: “There There” by Radiohead

    I learned a few interesting things about elevation along the way. A sanity check of my cost results showed some anomalies, especially on 8th Avenue — it turns out my original “elevation data” was raw Space Shuttle radar data, and it picked up the top of the old Martin tower which screwed up nearby elevations. (This difference between ground elevation and radar/lidar elevation readings, the realm of buildings and trees, is — according to the Internet — very important to telecommunications people, who call it “clutter.”)

    So for my second iteration I used actual DEM data  (“digital elevation model,” the elevations at the surface of the Earth, as if it were scraped clear of buildings and vegetation), and that fixed the Martin Tower problem but revealed another one: bridges, my nemesis… I’ll have to figure out how to adjust elevations on bridges so they don’t follow the depressions (creeks, rivers) they jump over.

    Listening: “Furr” by Blitzen Trapper

    Well, that’s it for now…

    “But I still dream of running careless through the snow,

    And through the howling winds that blow

    Across the ancient, distant flow

    To fill our bodies up like water till we know.”

    … now let’s ride!

     


  • The View From Musikfest

    Pretty good night last night: we went with some of Anne’s orchestra friends and saw a trio (violin, piano, clarinet) doing Mozart and a few more modern classical pieces at the Moravian Church, then grabbed a beer at the Sun Inn, which was amazingly quiet compared to the street just outside. Left there, went home for some quick food, then caught Scythian — or the first half of their show anyway, thunder and lightning clearing the metal-pole tent. Doug & Lori joined us, as well as John & Donna who stopped by their place to grab some Scotch they got in Scotland. Much fun ensued, studying the relative merits of different Scotches… (This morning started a bit more slowly than we’d planned.)

    We caught another chamber music trio earlier this week, as well as a Faroese folk singer one evening; both of these were at the Moravian Chapel behind the church — these both were firsts for me, being inside these buildings. We also saw the Skatalites at Volksplatz, but other than that, and last night’s rained-out adventure, we’ve been avoiding Musikfest after dark. With age comes wisdom?

    Speaking of wisdom, I realized that my use of categories here (“the sporting life,” “cultural ramblings,” etc) has caused me to fragment my writing, trying to keep myself to one subject per post. I usually don’t have enough to say about any one thing to sustain a full post though, not on any regular basis at least, so my posting has dropped off and I’ve ended up not writing about anything. Therefore, I think I’ll make a conscious effort, to go back to my previous diary-like mishmash of whatever pops into my head, or into my life. Thus…

    Reading: The other book I read in Canada was A Gentleman In Moscow, by Amor Towles. This is the story of a Russian aristocrat who is sentenced by the Bolsheviks to house arrest for life in a luxury Moscow hotel. The novel has som many surprising twists that anything else I reveal would be a spoiler, so I’ll just say that this was a great book, and well worth reading.

    What else has been going on? I was back volunteering at the Canal Museum on Wednesday, but while there I heard that they had so many bike rentals last weekend that they needed to get some of the spares out of storage, and their tires were low on air, etc. So, I went in yesterday and went through all the bikes, making sure that they would be ready for use if needed this weekend. I also did some volunteering at CAT on Tuesday, building up a bike with Anne. In terms of actually riding bikes, Anne and I did a road ride, with lunch in Riegelsville, and Doug and I rode Jacobsburg on Thursday. Yesterday was rainy, and tonight threatens more, so if I ride tomorrow it’ll probably be a road ride.


  • The Expanse

    Just before we went on vacation I picked up James S.A. Corey’s Babylon’s Ashes, the sixth and latest in the sci-fi series “The Expanse.”  I read about half the book before we even left, and finished it not long after. Six novels so far — and last night I downloaded (and devoured) a short story in the same universe, “The Butcher of Anderson Station” — and I still can’t get enough. Now I have to wait, maybe subsisting on Kindle short story downloads, until the next installment comes out in a few months…

    The books are total “space opera” adventures in a future several hundred years away, in a well-built storyworld consisting of overpopulated Earth, independent Mars, and a hardscrabble society of “Belters” living on asteroids and the moons of the outer planets, where a billion-year-old alien artifact is found that triggers unimaginable upheaval.

    I won’t say more, but will say that I highly recommend it.

     


  • From An Old Family Recipe

    I caught a cold in Canada, which seemed to be get better before it really settled in — D’oh! — so I’ve been indoors the past two days, just feeling out of sorts and sniffly. I spent most of yesterday studying up on graphing in R, but since we’re out of laundry soap I thought I’d go the other direction today and make a batch. (Anne left the ingredients in the kitchen, I took it as a hint.) Here is the recipe:


    DIY Laundry Soap Recipe

    • 2/3 of a bar Lye or Fels Naptha Soap
    • 1 cup Borax
    • 1 cup Washing Soda
    • Medium-sized pot or saucepan, and a 2-gallon (or bigger) bucket

    Grate the soap, then put it in the saucepan with 6 cups of water and heat it until it melts. Add the washing soda and the borax, keep heating until they dissolve, then remove from heat.

    Add 4 cups of hot water to the bucket, then add the soap mix and stir. Add another gallon plus 6 cups of water, stir again, and let it sit and gel for 24 hours.


    And… voilà! In basically the time it took to write this, I made a year’s supply of laundry soap for like two bucks.

    Note that this is double the concentration of the original recipe, so while it’s OK for HE washers (it contains no “sudsing agents”), you should only use the amount your washer recommends.

    So anyway, Musikfest starts tonight. We should be able to hear it happening from the porch, but we may also head down to check out the festivities if I’m feeling festive.


  • Oh, Canada!

    Just got back last night from a trip to Canada’s Maritime Provinces — specifically, Prince Edward Island and Halifax, Nova Scotia. Awesome time: we had a great time with friends, the weather was sunny, breezy and delightfully cool, and I learned to eat and enjoy mussels as well as lobster. Great local brews, and great bicycling too, in both places. We were gone just under two weeks, spending about 4 days on PEI with Judy, Toby, Erika and Josiah, as well as Steve and Kathy, before heading down to Halifax on our own for another 4 or 5 days — it’s all starting to blur, can’t remember the days… Two days travel time each way, and now here we are!

    Our friends Donna and John are also coming home tonight after two weeks in Scotland; if they (and we) have the energy we’ll meet them to catch up over a few quiet beers, the last before the summer mayhem descends. Because… Next Up Is Musikfest!

    RIP Toni: My friend Doug’s mom passed away last week, after a long struggle with cancer. (We didn’t even know until we were back in the States.) I’ve known her for a long time — the mother of a good friend, she was my first regular reader/commenter at my first blog — but I haven’t really talked to her in a few years. She was a fiesty, outspoken woman; it’s painful to think of her as gone even if I know she’s now free from her suffering, and hopefully at peace.