Day 0 6/2/24 11 miles. Amtrak was fine no hiccups. Got to Prince at 6:45pm. Got to stone Cliff campground at 9pm.
Beautiful roads very quiet. Stunning sunset with fog. Fireflies!
Campsite has like 3 different parties camping. Derailleur acting up for biggest gear. Will try to fix tomorrow.
Day 1 Mile 48, 37 miles. Rainy morning. I slept in til 8:15am. Made oatmeal. Left around 9:45am.
First 10 miles were killer. Babcock State Park was nice. Got some ice cream at the gift shop.
Met 2 mean dogs. Had to spray them with water. Met a nice dog who followed me for 45m.
At mile 48, 37 miles today.
Day 2 -6/4/24 Mile 88, 40 miles today
Morning was brutal. Lots of hike a bike, maybe like 4 miles. Then big gravel climbs. Neverending. Somehow broke 2 water bottle cages
Finally made it to richwood, wv. Loaded up on food at marts and dollar general.
Big climb out of town to Monogahela national forest. Then huge descent.
Got to big rock campground at 5:20pm
Took socks off at camp and my toes were all wrinkly. Probably because I crossed a stream in the morning. I should check the next dollar general for flipflops.
Day 3 - 6/5/24 Mile 130, 42 miles Started raining heavily. Had a nice chat with guy at campground who couldn't believe I was going up dogway mountain. I was having fun in the rain, not so bad and nice slow climb. Stopped at shelter for turkey sub and apple (bought yesterday).
Rain let up and I had a great climb up the mountain for next 3 hrs or so. I got to the 3 miles of unmaintained single track (pochahantas trail) and went for it. I should not have. It was miserable and it started pouring again. Let this be a lesson. I got to road with coal mine workers. Big uphill, it started pouring and Garmin glitched out.
Made it to the top and fixed Garmin (take out and put back sd card). Then a huge descent that would have been fun if it wasn't raining. I was exhausted and had to walk up the next hills to arrive at droop mountain state park around 6:30pm. No camping here only day use. Went to use first bathroom I see and I hear it start pouring even more as rain hits the roof. I get out and run my bike into a picnic shelter.
Laid out all my clothes to "dry". Might try to stealth camp here. There's actually an outlet that works here under this shelter. Time to charge up.
Feet are destroyed since they've been drenched since the single track.
Day 4 6/6/24 168, 38 miles. Poured all night.didnt sleep that well. Poured in the morning so I stayed in bed an extra hour.
Descend to Greenbriar river trail (GRT). Nice. Easy riding to jacks corner, burger and salad. Had a nice chat with man about biking (he saw my bike). Easy riding to marlinton.
Loved marlinton, did laundry. Got pizza 2nd lunch. Loaded up at IGA and dollar store. Met man in parking lot who told me the scoop about camping in town for 7 days for free and getting a shower. Seemed like a homeless type vibe. Bike shop guy gave me a discount on a water bottle cage because he was working the computer for other customer and made me wait 1 min to checkout lol .
I left town and went to GRT. Saw man from jacks corner with his family riding bikes. Made it to campsite. Took a bath in river and changed into clean clothes! Maybe bought too many groceries.
Day 5 - 6/7/24 195 , 27 miles. Went to bed at like 9pm last night, woke up at 7am exhausted still. Couple easy miles on GRT. Hard day idk why. Big climb in Seneca state Forest to fire tower overlook. Big fun flowy single track on Allegheny trail down. Kinda eh boring country roads to green bank observatory. Nice quiet double/single track after, but not too hard.
Got to hosterman trail bridge near 4pm. Decided to stop here. Will try to do 25ish miles tomorrow as a rest day.
Guy pulled up at 5 ish and said don't mind me just going for a walk. When he got back at 5:30 I asked if I could camp here, he said yeah no one will be here or bother you. Then we chatted about outdoors/nature. Nice dude, clearly super introverted, said he worked for the train here.
Day 6 -6/8/24 Mile 234, 39 miles,
Felt like I slept in but when I checked the time, it was 7:15am. Cooked big breakfast, oatmeal with craisins, pecans, and bananas in it.
Started huge climb up cheat mountain. Honestly wasn't that bad. Felt easier than climb to fire tower yesterday. Maybe because the grade was easier today. Beautiful forest roads, saw nobody.
Came down and had funny conversation with 2 dudes. "Do you know where you're going?" Yup I came from new river gorge... Headed to Maryland ... Etc "Wow you're crazy" "Do you have a gun?" No "You know there's bears out here right?" Yup Hahahah
Started to see a lot of people out and about on shavers fork and forest road 227, todays saturday. Most dispersed campsites occupied by ppl with their trailers/RVs. felt good so I kept cranking it. The rear hub does not sound good. Hope it can make the 70 miles to Davis bike shop. I don't want to go to Elkins even though that bike shop is closer. Would require a big off route trip and it would be highway riding.
Kept going until 3pm and then turned down a national forest road with a gate that was closed to motor vehicles. Now I'm chilling hope everything feels good tomorrow. Maybe I can do a chill 35 mile including off route resupply to Stuart recreation area.
Did not do the rest day as planned lol. Later that night at like 8pm im in the tent and I hear a car pull up. "Anybody in there?" Yeah what's up? "Ok just checking"
I camped like 50 feet down a side road. Maybe I should've gone a bit farther to be out of sight.
Day 7 6/9/24 Mile 266, 36 miles Felt like I slept in, but checked time when I hit the road and it was like 8:15am. Guess my body is getting up earlier and earlier. Very foggy morning. Off and on rain. Then hot. Riding kinda eh, nothing special. Also I was super tired.
Got to strip mall 2 miles off route at like 11:30am??. First hit Walmart, bought some groceries and flip flops! Wish I had some earlier the days when it poured. Nice to have at camp.
Then Sheetz for an Italian to go. Then Burger King for lunch. 2 bacon double cheeseburgers. Had a brief chat with other customer who saw me park my bike outside. He told me wv sure is beautiful and he's right. And I take a long lunch break from 12-1. Then I rejoined route and did the 8 miles to Stuart recreation area and got here at 2:15pm
33$ for campsite?? Kinda steep. But I took a shower and feel good now. Also nice to have flipflops for shower.
Would like to do 39 miles tomorrow to Davis. Then take a 0 day on Tuesday. Hopefully can get the bike fixed up there. We'll see what tomorrow morning brings.
Day 8 - 6/10/24 Mile 305, 39 miles. Woke up at 6:45 and peed. But it felt cold so I went back to bed for an hour. Road wound around the river, nice gravel. 10 miles later the route diverged into the fernow experimental forest. I initially went up it for like 10 min then decided to go back and stick to the easier gravel for the 6 miles or so. There was a warning on the route for rocky climb further up and I wanted to save the effort for once. trying to learn my lesson from the pochahantas trail disaster. Road to Parsons was pleasant enough. Then a cool bridge and into the blackwater canyon trail. Almost 10 miles of slowly climbing single track. Very beautiful had the whole trail until the end to myself. Forced my way uphill and past Thomas to Davis. Went to the bike store and they fixed my hub and lubed my chain for 15$ labor nice. And they gave me some good bike advice for the future. My bike is pretty messed up but should last until the end of this trip at least. Then when to little Caesars and ate an entire pepperoni pizza in one sitting. at fast food places like that they have the calories listed on the menu and i think i just ate 2300 calories. Then came to rest rite campground. The lady gave me a discount for only 15$ tonight. I think I want to stay here again tomorrow and take a rest day.
Day 9 -6/11/24 Rest day. Laundry, shower, grocery store. Also did 8 miles r/t to check out a trail with a nice overlook.
Day 10 - 6/12/24 Mile 352, 32 miles Decided to skip part of route and ride highway for 3-4 miles instead. Then entered dolly sods. Big climb up to top. Got some water at red creek campground.
Got to bear rocks overlook and then started descent. 5 min later found gated forest road. Went down it and got here at like 1:45. It's kinda the perfect campsite but I only did like 32 miles today. So then I went back and forth for an hour about whether to stop or keep going. And now it's 3 and I think maybe I should've kept going. But for now I'll stop. I think too much about these decisions. But it is a nice spot and I have service here
Day 12 Mile 395, 43 miles Yeah probably should've kept going yesterday. Because when I got to McGuiness to resupply it was closed because it was like 8am. If I went there at 3pm yesterday it would have been open. And it turned out there was a lot of public land in the spruce knob/Seneca rocks area. Duh. Oh well. I don't think I ate enough today and I don't have enough water at camp to make freeze dried food? Or maybe I should and just skip oatmeal breakfast tomorrow. Today was tough. Walked a lot and it was hot. Super sunny and not much shade. At 3pm I turned off road and went into forest. Idk if this is a good spot. But I'm exhausted and dehydrated and low on water. 4 miles uphill tomorrow and then 2 down hill before water. That's a guess from the map. poor planning by me. Hopefully I can hit the grocery store tomorrow and also only do 35 miles hahaha dang I'm slow.
Day 13- 6/14/24 Mile 434, 39 miles Last night I made freeze dried lasagna. It was good. Didn't have oatmeal this morning due to water. It was pretty hot by 8am already. Got to Peru at like 9:30am spent time filtering water and hanging out. Then buzzed the general store owners to open the store. They live next to the store and have a bell you can ring. Had nice brief chat, unfortunately food picking was slim. Bought some Ritz crackers and Hershey's chocolate bars. Saw a bear in the woods but it ran away. Cranked up the mountain easy. Then 15ish chill miles to misty valley store. This part goes past chicken farms and smells horrible. I remember it from TransVA route i did on previous trips, it uses the same road for a couple miles. Went big and bought snacks and two sandwiches at store. Had a break to eat one, then kept going. More farm roads and then very slowly turned into national forest? I stopped seeing "no trespassing" signs and saw a little path into the woods with a fire pit in the clearing so I turned down it and kept going and set up camp. Got here around 4ish. But I took a big hour break at 9:30am and another break at 2:30pm at the sandwich place.
Day 14 -6/15/24 Mile 476, but only did 30 miles
Big climb out of George Washington national forest. Some of the forest looked like it had been burned like in a forest fire. But maybe it was intentional because only one side of the road. Not sure if I was in national forest last night camping but no big deal, it was a good place to stop. Coming out of the national forest south of wardensville was interesting. Suddenly the view opened up and bam, big hill with the highway. Got into wardensville and bought some snacks and bananas and some tacquitos at the 7/11. The tacquitos were actually super good. But I wanted more food to eat and also for dinner. Kept rolling and saw a BBQ stand but passed it. Found kerrs grocery store on Google maps. An actual store! Since a couple days ago I had a list on my phone of what I was craving. Ended up leaving with big bag of grapes, 2lb tub of of yogurt and 2 premade sandwiches. I went to the park to break and feast. Ate a lot of grapes and yogurt. Then I decided to skip the little 15mile loop on the route south of wardensville and head for hawk recreation area more directly. It was like 3pm when I left the park and it was sunny and hot. Had to do some hill climb on a busy road. I stopped at turn offs like every 5m to rest. Finally reached forest road. It was still hot and I was exhausted but now I could relax. Made it hawk recreation camp and there were like 6 out 15 sites taken. way busier than i expected. I rolled around the circle and found the water pump but it was out of service. I asked the couple next to it if there were any other pumps and they said no, but the guy offered to give me some water. At first I said no because I felt awkward but then he was like are you sure? And I said ok if u have extra. Anyways he ended up filling up my 2L hydropak. thank you to Fred and Joy. I set up camp and ate my grapes and yogurt. Laid down in the tent and it was so hot. I had to get up and move the tent when the shade moved. Later another couple showed up and set up in a site accross from mine. Later the guy approached me and asked if I was bike packing and we had a great chat. They were there for one night from Pennsylvania. The problem with staying in campsites with other ppl is that they make noise still at 9pm when I want to go to sleep. Also their presence makes me embarrassed to piss in the bush next to my tent so I had to make the 2min walk to the bathroom.
Day 15 - 6/16/24 Mile 527, but took shorter route for 43 miles Made some oatmeal. Last night I was messing with OsmAnd and it gave me a 43 miles route to pawpaw where as Geoff's route was 50 miles. So I decided to follow OsmAnd's. I had a hard time getting the gpx out of the app but what worked was "sharing" the track with termux and then moving the gpx from the termux storage to normal phone storage. Then I used the USB c sd card reader to move it to the Garmin. Ended up working flawlessly. The days riding was fine. It was a Sunday so maybe that helped to keep traffic low because I'm sure Geoff's route used even less trafficked roads, but mine was fine. Up until the end highway. Super hot and sunny all day. Stopped at park at capacon bridge to eat sandwich from yesterday in the park at 11am. Got to slatesville and bought Gatorade and pizza slice and took an hour break at 12:30pm. Still super hot. Then had a moderate climb north where I took a break every 5minutes for awhile. Until finally hit the highway section. This part I could've followed Geoff's route but my way would save 5 miles. It was a 55mph 2 lane road with tiny shoulder at points. There was like 2miles of uphill then a mostly huge downhills to paw paw. With some intermittent uphills that I took breaks before grinding out. Finally got to paw paw and went to gas station / general store. First I bought some ice cream plus snacks. But then from chilling inside eating for 30min I noticed other customers ordering sandwiches so then I got one too. Thought about going to a Bed and Breakfast run by a local biker, but decided to go to purslane run c&o free campsite. Rolled up at 4pm, only one here. Went down to the river to wash but there were a lot of river users, canoeing etc so I didn't do a full naked wash. Just wash the legs, then arms and armpits with my underwear on the whole time. Now I feel good. Had a primal scream when I first rolled up to the campsite in victory.
Day 16?? 24 miles? Woke up late. It was already hot. Got biking at 10am. Tried to go to schoolhouse kitchen but it's closed on Mondays. Get to Cumberland around 2pm. Eat Sheetz fruit salad and pack burger. I wanted to hang out in the Sheetz AC and charge my phone and use their wifi, but this Sheetz didn't have places to sit in it. some other sheetz are bigger inside and have tables and chairs. So I packed the burger and headed to KFC accross the street. Ordered a chicken sandwich then hung out for 2.5 hours. The KFC seemed to be optimized for drive through and mobile pickup only. They didn't have that many tables inside and there was big open space in the middle of the restaurant. But I dragged over a little table to the one wall outlet I saw. Left KFC at like 5 and went to campsite. It's 92 out. This campsite is also next to rail yard so there's a ton of noise. Don't think I'll sleep much tonight. But I hope I don't miss the Amtrak tomorrow at 9:30am.
Day 17 -6/18/24 4 miles to Amtrak station. God it was hot last night. And didn't sleep well due to train noise. Woke up at 6:30am and had alarms set for 7am just in case. Ate some tortilla and Nutella since I ate all the oatmeal yesterday. Then packed up and rode into town. It was already hot. Went through a slightly rough part of Cumberland that had some homeless people. Rolled up to the Amtrak station at like 8:20, train at 9:30. The station was locked so I sat outside. Right after I pulled up a white van dropped off 4 black dudes. They literally got out of prison that morning. One of them asked to use my phone and I said yes. Then I texted the address of the station to a number he gave me. Then the other 3 took turns calling people. They were nice but my first instinct was oh shit they could steal my phone. That was just an instinctual thought they never gave signs of it. Never felt unsafe or anything. 2 of them got picked up in cars sometimes over the next 40 minutes. The other two had bus tickets to Baltimore. We got chatting, I told them about biking 500 miles through wv. I showed one of them all the pictures I took. And we chatted about the outdoors and camping and the national forest and the bear I saw. They told me about a bit about prison but I didn't really pry. One of them just got out from 5 years in federal prison in West Virginia. He kepting saying FCI so i was kinda curious which one in WV, but I didn't ask. Then their bus came and they thanked me and shook my hand/dapped me up. Not a bad experience at all, something that would never happen to me if I didn't travel like this
By coincidence, the Marc train was free to ride that day.
Must Get on between cars 3 and 4
Poured last night.
Poured for first 15 miles
Poured for last 15 miles
Got to c&o bunkhouse around 6. I'm the only one here. Nice hot shower. Watch YouTube. Rain is so loud on roof
75 miles
I gave up :(
Western Maryland rail trail
Rural road
Intense rugged trail
Wiped me out. 6 miles took 3 hours?
River crossing - was high
Water above knees
Bike was floating?
Bottles floated out of stream.
Was soaked, was raining. Had flat tire
Tube was wet, patch didn't take
Took high water detour back to Hancock
Now I'm at hostel
Kinda wishing I didn't give up
Also lost 1 flipflop somewhere
Lesson: if you feel like giving up, camp early, asap. And give it a thought next day?
Did 27+16 miles. 43
I didn't give up! I went back through the high water detour and got to campsite 11 at mile 45, the original goal for day 2. So it's like I just took an extra day. But all my clothes are wet and I used some gas + oatmeal.
Should've kept going 2 miles yesterday to campsite rather than take high water back to town. Oh well now I know: when I feel bad, just stop for the day.
Also the knee compress is awesome. Knee hurts? Put compress on it, and you can keep pedaling
Day was tough even though I only did 36ish miles. Got to camp at 3ish
Morning rain. Didn't pack up until 9
Hard. Got to school house kitchen at 1:40
Listened to podcasts while towpath riding. Skipped route in forest and kept to towpath from town creek to purslane run, then paw paw tunnel
It was open this time! At sorrel run, full of people, backpackers? I yoloed and went up big climb. Very foggy. Started downhill and got to camp 53 at 6:30ish
Did 94-45-10+5 = 44
Made oatmeal. Wasn't raining this morning!
Had nice long chat with dude at camp 51. He knew the forest pretty well. Used to bike a lot so we talked biking in DMV
Saw old juvie camp. First day of forest roads with sunlight! Atmosphere rocked
Hard 30 miles of forest road. Only had 1 cliff bar and tortillas left for snacks. Rejoined c&o, passed through little Orleans. Bills place was closed on Wednesdays
Finally made it to Hancock at like 3:30.
Got to camp at licking creek c&o 116
60ish miles?
Late start this morning
16 miles to Williams port
15 connector on roads with light traffic to get to Antietam/Sharpsburg. Instead of 30miles on c&o
21 c&o to point of rocks
Had nice chat with couple from Harrisonburg doing a day ride
15 hard miles to Leesburg
Downtown is not bad
6 miles on w&od
3 miles to ashburn metro this part was hellish. the sun started to set and ashburn is not made for biking. and the metro is not made to be easy to get to by anything other than cars
Got to metro at 7:42pm
73 miles?
Hard. Got to camp at 4pm tho. Had a scare of low water, since camp had none. Nor toilet Gravel in forest was nice. Elevation was difficult Michaux 19 mile 51 Couldn't find fire lookout tower
Beautiful forest I had to hike some of it near caledonia To many rocks Shippensburg trail was funny Got McDonald's and some treats from sheetz Rail trail was chill Stream crossing was kinda fun. Water 2 ft deep maybe Got to Tuscarora site 86 around 4:15 Mile 98?
Nice forest gravel. Pretty fox campground and then hike a bile trail. Started very crazy, downed trees Then crazy 20% graded uphill. It was so steep, hard to even push bike without slipping. 1 hr for a mile maybe. Then beautiful ridge double track. Downhill to Waterford, nice diner lunch. Vegetables! Uphill pish back into forest. Started raining so I stopped 3mile early at 4:15 Rain stopped shortly after I setup camp, so I got bummed and thought I should've waited it out then kept going those 3 miles
Tuscarora 11 at mile 137
Nice gravel in forest, big down hill to mcveytown. Got food at market at 9am
Motorcyclists on bdr?
Big climb, down to allensville. Amish town. Got passed by horse and buggy
Hiked to hawk platform Greenwood and furnace campground Passed on it. Too many ppl + RVs
Rothrock state forest. Gravel very loose but , simply beautiful, my favorite part. Late afternoon/evening
Got to Penn Roosevelt at 7:40 192
Gps snafu Rothrock still pretty Bottle cage bolt fell off, water bottle handle broke in the fall Skipped pump trail, just stayed on gravel. Push to Petersburg was tough, almost ran out of snacks Huntingdon was a cute town. Chilled at sheetz WiFi. I think my phone reception is broken Met a really old woman who said she used to bike from broad top city to Saxton. She couldn't hear a word I said and put her next to my mouth.
Crazy climb past juniata river, mosquito's were wild. Got to terrace mountain trail head at 6:15. Couple came walking down. Luckily I didn't set up tent yet. Decide to camp on trail ~249
Took detour around unmaintained terrace mountain trail Got to trough creek state park at 9am Hike They had no potable water? I decided to push on. Lunch at raystown lake resort cafe Kinda funny. fancy resort and me stinking to high heaven Found a spot on terrace mountain trail 2 miles before putts campground Took a bath in raystown branch juniata river Mile 266 around 2:30pm I feel nervous about tomorrow. I think I got a little sunburnt. Left of nose
Lost trekking pole tip cover Noticed front qr skewer unlatched Noticed broken water bottle cage HB&t rail trail Linda's general store. 9am pizza and can of olives + sub for later End of rail trail to breezewood was boring Breezewood resupply was not fun. Terrible place for bikes Abandoned turnpike was wild. Chatted with 2 other ppl on bikes there. Not on edt lol they drove up to the nearby parking lot. Apparently there's a longer tunnel further on, but I left to enter buchanon forest Found real camp spot (sh007) at 5:30 at mile 310~
Very windy last night. And cold. Didn't sleep great. Enjoyed bit of Buchanan forest. Then miles to Hancock were meh. A dude in car pulled up and we talked a bit, he offered me water but I had enough. At Hancock, sheetz and picnic area. Nice break got there at noon. Chatted with a guy going Cumberland to DC My plan was to go 20 miles on the c&o to campsite. But I went 60 miles in the c&o and the campsite there had like 6 or 8 ppl. It was 7:30pm and my knee was hurting cuz I pushed it 90 miles lol. Guess I'll stealth camp between locks. I wanted to catch the Marc at point of rocks tomorrow and be home tomorrow. It doesn't run on Saturdays so I have to be at point of rocks at 7:55 am latest.
Woke up around 6am, hastily packed up, and biked 12 miles to point of rocks to catch the 7:55am train to DC
Left about 10am, brought wawa for lunch
Leapfrogging with 2 old dudes also going to pit from DC
Stopped at 50.3 bald eagle island HB. 3 dudes arrived after sunset to the campground with bright lights. noisy, had to close tent fly
Pushed it too much and knee hurt
Resolved to go slower for knee. Left camp by 9am. A bunch of boy scouts on bikes. Lunch at sheperdstown, Saw football game. Met a couple from reston. Drove to Harper's ferry for a day ride. Guy went to UVA.
Camped at Jordan junction HB
Mile 101.2
Arrived at 6:30
There's like 7 ppl here. Previous campsite had no water, next site in 9 miles so I decided to stay. Ate dinner then found out water pump here was broken. Tired and sticky
Left at 8. Went 9 miles and water was turned on there! Had breakfast left at 10. Seem to be parallel to highway all morning, can hear heavy traffic. Hancock lunch at sheetz, At at nice picnic area, charged my phone to 50. Met homeless type dude with cough. He had a bike with a bunch of heavy gear and knew area. Western Maryland rail trail, parallel to c&o, Decided to go on c&o wasn't sure if paved rsol trail connected
Met beard dude, Has done pit to DC and bsck any times.
Met couple who said WM trail connects to c&o, they were right
Met old woman and young woman, on cruiser bikes wanted to know how far it was to the next vehicle access point. Asked for phone but I also had no bars. They bit off more than they thought.
154.1 sorrel ridge hb. No one else here. No service.
Next day will be long. Paw paw tunnel detour, 1 hr says beard guy
Good sleep, Left at 8:45 Paw paw tunnel closed, used hiking trail. Took 40min, beard guy said 1 hr. I rode down, he advised not too. Single track kinda fun. Rode my breaks the whole time, but that's what they're for.
Since mile 160 seen like 20 loaded bike tourers, guess its close to cumberland. drizzling. Not My favorite part of c&o. Stinky sewage plant. Cumberland, not that nice. Got Italian sandwich and banana at 3pm from euro deserts place. Historic cumberland = covered in freeways.
Immediately got on GAP. Started up hill. 5 miles Ate Italian in parking lot. Best Italian yet. Rode up 10 miles to frostburg with an older couple. Very nice. They're retired. Told me about GAP. Set a nice pace, made it fly by. Arrived at 6pm.
15$ lawn camp in frostburg @ 15.5 mile. Shower!! 7eleven and take out Chinese
Big rainstorm at 2am. Didn't sleep well after storm. Intimidated by 57miles. Perfect weather. Sheetz in meyersdale. Gap from meyersdale to confluence very excellent. All I dream that gravel should be.
Maybe didn't enjoy as much as I should've because I was pushing myself to do 57 miles which was very hard. Got into ohiopyle. Didn't feel like eating in town. Vibe didn't feel right, they were leisurely vacationing, I just destroyed myself.
Kentuck campground 72.6 Camping in walk in spot without paying. Couldn't find any staff. Setup tent at 7, still soaking wet. Had Patagonia soup for dinner
A little more than 4oz (.5 cup) of oatmeal and craisins is a good breakfast. Had a good sleep. Kentuck campground was very nice, had water + flush toilet. Walk-in sites very quiet.
I didn't pay for it. Tent dried out. Trail in state park was still amazing. Stopped in connellsville at 11:30 to buy Italian.
Got to dravo HB at 5:00pm. Sticky and my butt hurty.
Good sleep. Windy morning. Coldish day. Cold and drizzled in Pitt. Only 27 mile day. Hung out in parks before going to warmshowers host at 4pm.
Enjoyed evening with tom and bonnie. Bonnie bullied me into letting tom drive me to Amtrak tomorrow morning.
Left DC on sunday
took w&od to purceville
had a nice BLT bagel for lunch
got soaked near bluemont
somehow broke my bike pedal, i think on some gravel hill
only noticed after i stopped riding for the day
stayed at bears den hostel
followed transvirginia until i took some paved roads and diverged to front royal
got this part of the route from cycle.travel
got to front royal and ate big calories at the mcdonalds
biked a little bit the front royal library and hung out for an hour as huge rainstorm passed around 3-4pm
Entered shenandoah national park. had to pay to get in.
Uphill was hard. I'm not the strong of a biker. pulled into lands run parkin area around 7pm. there was one car in the parking lot.
I pushed my bike down the fire road and saw two women coming up back to the parking lot. so i assumed i now had the place to myself. set up my tent right on the trail. against the rules. i also didnt have a backcountry permit.
biked to big meadows campground. i took lots of breaks, but never got off and pushed my bike. i took a whole lane and made cars pass me, and they all passed pretty safely.
Over all a lot of climbing. but I had my new bike with panniers so i didnt have a backpack which was a great change. and my new bike is not a kids bike. i got some knee /ankle pain from pushing myself too hard on the elevation. and i got a weird shoulder pain that lasted like 5 days after i was done riding. it was like a pinched nerve or something
After my last ride on the TransVA ended with me having to stop early, I wanted to give it a 2nd try. This time I was more prepared. I had replaced my chain and cassette since the last time, since they were broken/needed to be replaced.
I left my apartment around 9am. It was sunny and hot! Not too much traffic on the W&OD trail. It was a Wednesday, compared to last time I started on a Saturday. I drank a lot from the various water fountains along the way on the w&od. Last time, I was here in April and all the water was turned off. It was nice that more stuff was "in season" on this trip in August.
I finished the W&OD and reached Purceville around 3pm-ish and took a break at the benches right at the trail head. A woman came up to me and asked me if I was going on a trip (I clearly was with all the gear on my bike). We chatted a bit and I mentioned that I was going to stay at the Bears Den Hostel that night. She told me how she had biked there before from Alexandria and enjoyed it. She also recommended staying at hostels - she had stayed in them all over the world and met a lot of cool people.
The next part of route is not as nice as the rail trail W&OD. It goes through some busier roads. Eventually I got to the quieter gravel roads, but then it started raining around 5pm.
Eventually I got the the dreaded Route 7 segment. This time I turned left onto the shoulder of the oncoming traffic, because I knew I had to turn left again. I didn't want to have to cross 4 lanes of traffic to get on the correct shoulder and then cross four lanes of traffic again to turn left.
So I cautiously walked on the left shoulder facing oncoming traffic until I finally got the road that the hostel was on. Then it was a huge uphill that I was too tired to ride. So I pushed my bike up the hill until I got the hostel drive way.
Bears Den Hostel is really nice. If you ever want a short adventure from DC, I recommend biking there and staying the night, then biking back the next day. I paid $21 to lawn camp and have a frozen pizza for dinner. It also included pancakes for breakfast the next day.
At the hostel I had a nice shower and a chat with a ~55 year old man who was through hiking the AT. He told me about some of the cycle tours he had done.
After a nice pancake breakfast I took off. I left fairly late. Last time, I stealth camped in some woods next to the highway and left at like 6am or something but this time I left around 8am. I knew it was going to be a long day to Van Buren Furnace, so I mentally prepared myself for the suck.
This time I decided to take better advantage of the stores along the way. So I bought a pulled park sandwich around 11am. I had to poop really badly around 1pm so I stealth pooped in some overgrown field that didn't look like any body used. yeah I do feel kinda bad about it, but hopefully its fine and no one uses that field (of course i dug a proper cat hole etc.)
It was a long long day. I got to try out my new water filter on some stream. It was really nice and much better than the crappy lifestraw thing I had before.
I got a slice of peach pie and Richards Fruit market. Then I got to garden market around 4pm and this time got a big salami and cheese sandwich to have when I got to camp. Finally I arrived around 7pm.
This trip I was using a Garmin Etrex20, which I got off ebay, as navigation. So my phone was away and turned off, and since I didn't have it on hand I didn't take many pictures.
Same as my last trip I spent the 2nd night at the Van Buren Furnace primitive camp site area. It was pretty nice. Once again I had the whole place to myself.
Same as last time, the trail became quickly unrideable. I don't have perfect memory, but it was worse this time. See back in April before the hike a bike section there was just rough rocky double track. But this time that double track was completely covered with big overgrown plants. In places the grass/plants came up to my hips. So I was pushing my back through that before I even got to the trail section. Luckily it seems like I didn't get bit by any ticks. There were a lot of flies about. I had some Picaradin, but I'm not sure how helpful it was. I had some long pants on the trip, but I did this section in shorts, maybe that was dumb.
I got to the hike-a-bike trail section. Last time there was basically a stream running through the entire trail, but this time it was drier with more plant growth. Not much to say it kinda sucked. Finally I made it out to a huge downhill section which was really nice.
Around this part of the trip I switched from the TransVA normal route to the TransVA Valley route. The Valley route is an alternative that has less climbing and less off road sections. I realized that I still wasn't cut out for the real TransVA. My bicycle was still too small for me and climbing was tough. I was enjoying the quiet state gravel roads the most. The forest-y double track was full of flies this time around and not enjoyable.
So partly up the mountain that I remember climbing back in April, the Valley route diverged and took some gravel road downhill.
Later that day, I ended up biking up some super steap section to the top of mountain/hill. So it wasn't all valley. There were some beautiful fancy homes up on that mountain though. Some nice fancy cabins with big wraparound porches hanging over the elevation drop of the side of the mountain.
Coming down from the mountain, the landscape opened up to a bunch of fields. I passed by a house and a dog came running out of the yard, barking at me. I can admit now that it wasn't a big dog. it was pretty small but it was running really fast at me and I got scared because of the last dog encounter I had where it bit me. In my startled state, I biked off the road onto a field. There was a ditch in the field where it met part of the road and my front wheel sunk into it and I fell off my back scraping my elbow on the asphalt. The dog reached me and just barked at me a bit until the owner came out and yelled for it. I picked up my bike and starting walking down the road. My elbow was dripping blood pretty badly, but I had some band aids.
The rest of the day was uneventful, until I reached a highway section with no shoulder. It was pretty sketchy, but I only had to go on it a little bit until I got to where I was spending the night: benny's beach campground. It was a weird situation, but eventually I explained to this guy that I wanted to stay there one night and I only had a bike. He was really confused about me biking from DC. He thought I was doing it to raise awareness or money for some cause, but eventually I was able to explain that it was just for fun.
It was pretty expensive, but they had a shower there so it was worth it.
Day 4 was when things got tough. I wanted to make it to Todd Lake by the end of day, but that didn't end up happening. Somehow was super tired. Probably because I didn't sleep well previous night. It was cold, windy, and rainy and I woke up at 4 am.
I was moving pretty slowly. And then it started raining pretty hard 4pm. I waited it out under the awning of country store before Stokesville. I got pretty lucky since the rain pretty much stopped after an hour. I hung out an watched the people who came into the store, I got some strange looks haha. The rain stopped, but I gave up on trying to make it to Todd Lake. I stayed at stokesville lodge for the night. They had a discount: only $5 for bike camping. They also asked if I was doing the TransVA which was pretty cool.
I felt really bad that evening, like I was going to throw up.
I gave myself a slow morning and late start, since I felt bad the previous day. I decided to make it a light day, and only try to do 28 miles. It ended up still being pretty hard. It was all up hill at the beginning. I saw some mountain bikers coming down from where I was headed. I eventually made it to Brailey Pond, and took an hour break. I saw a lot of fishers and had nice chat with man and his family. He was amazed that I came from DC, wanted to make sure I was okay. I explained what I was doing, and he asked if I was doing it because I had to. I said no, for fun, he said you have to check, sometimes its all people have gestured to my bike.
After the break, I began the big uphill on Route 250. In the middle of this, Garmin ran out of battery. It gave a low battery warning then died like 30 minutes later. I didn't expect it to go through 2 AAs that fast, so I wasn't carrying any extra batteries with me. I switched using my phone's GPS as navigation.
This really uphill section took a lot out of me. People pass me could tell it was tough I guess. A pickup trucks with bikes in the back gave me a honk honk. And later, two motorcyclists coming down gave me thumbs up.
Finally I made it to the top, and had a nice view waiting for me at the Confederate Breastworks.
From there, it was still a bit hilly, but over all going down hill, so it was manageable. I made it to Shaws Fork around 6. It was a nice campground I had the whole place to myself. I set up camp, and I think I feel asleep before the sun had set.
I made really good mileage early in the day, on mostly gravel roads. There were a lot of washboards, and the road was a long a river. I took an hour long break at a community center before route 39. Then I began the slow uphill to Douthat state park. I bought a twix ice cream bar. I made the decision to end the trip. I was just too tired and might not have had fun anymore. I biked 9 miles downhill to clifton forge, which is actually a pretty nice town. I got picked up at Clifton Forge Amtrak "station".
Overall, I had a pretty good time. I think the trip was around 300 miles.. Now I know a better strategy to deal with dogs: just stop riding, get off, and put the bike between myself and the dog. Don't try to out run them. I still want a better bike. I still did this trip on my >10 year old 14" Kona Lana'i which is too small for me. Maybe the COVID bike scarcity will die down, and I can buy a nice bike. I want one with a lower gear ratio for those big mountain climbs
The TransVirginia is a gravel bikepacking route from DC to Damascus, VA. Its ~550 miles long.
I wanted to bike the TransVA as my next trip. My previous trip was ~120 miles form DC to Harpers Ferry, so this one would be a lot longer. I planned on completing the route in 12 days.
I left my apartment on a Saturday morning in April.
The original route calls for riding the C&O from DC to White's Ferry. Normally there is a ferry to carry you accross the Potomac, but it stopped running recently. So the TransVA creator had to come up with some alternate routes at the beginning. Regardless of the ferry, I didn't want to ride the beginning of the C&O again because I had done it many times before.
So I took the W&OD from Arlington to Purceville, and get back on the TransVA proper there. The W&OD is a flat rail trail, so I was able to do the 45 miles pretty easily.
Biking through Loudon County was fine. I encountered my first gravel roads of the trip. At the end of they day the route goes along a highway for a bit and that part was bad. I had never biked on the shoulder of the highway before. At one point I had to dart accross 4 lanes of traffic (like making a left turn onto the highway). There was a little median in the middle to wait at, so I played it super safe and only went accross when there were no cars. By that point I was super tired and not able to make it to where I was planning on camping that night. So I ended up finding a sketchy place close to the highway and set up camp there. I almost fell asleep eating some refried beans.
The morning of day 2, I got up when the sun rose because I was awake and cold. I packed up and made it down the highway section pretty easily as the traffic was light. There was never really any danger on this section because the shoulder was pretty wide, but it still made me nervous.
I biked ~10 miles, eventually crossing the highway back again and stopped to make breakfast at this park. Oatmeal, yum. While eating breakfast I took a look at the route notes and realized that that day had a whole lot of miles I had to do.
The next miles were nice, on some roads with very little traffic. I biked past a lot of horses. And by some big properties with huge houses.
The surroundings become a bit more rural and opened up into fields. There were tons of "No trespassing", "Private Property", and "No hunting, No fishing" signs.
Eventually I stopped at this small store attached to gas station to buy some snacks. As I was putting my stuff away and getting ready to bike again, a man came up to me and struck up a conversation about biking. He said that he also liked to take camping trips with his bike. I told him I was doing the TransVirginia but I wasn't sure if he knew it (I'm not sure how famous this route is), but he did ask me how many days I was biking for.
After that the route went back to being forest-y. Eventually I grew extremely tired. With maybe like 5 miles to go for the day I had to convince myself to keep pedaling and not to walk the bike.
Finally, I got the campsite, and it was a beautiful one. Much better than the night before. It was flat and had some logs to sit on. And it was right next to a stream.
I had nice morning at that great campsite then set off. I promptly went the wrong way and didn't realize it for 30 minutes. Luckily I was going all up hill, so to get back the right way was a lot faster than 30 mintues.
The roads were pretty rock, so it was slow going.
Soon after I got to the hike-a-bike section. I can't imagine riding this section. I also can't imagine doing it with panniers. It was single track with huge boulders and fallen logs. The whole thing had a small stream of water coming through 80% of the trail. I started off trying to stay dry but eventually gave up on that. It was too difficult to try to push through the dry parts so I just went straight down the middle and got wet.
As I was pushing my bike through this section, I ran into a guy coming the opposite way. He was wearing all camo and had a rifle. He said it looked like I had it tough and I said yeah there should be a road soon. He confirmed there was road about 1 mile more along the trail. That mile took me a long time.
Eventually I popped out onto some gravel roads. Then there was a huge, huge downhill. It was downhill for 30 minutes. Multiple times I was going so fast I hit bumps and caught air. I felt my backpack lift off my shoulders. And a couple times I hit a bump and one of my water bottles flew out of the cage and I had to stop and walk back 50 feet to get it.
The gravel roads were extremely enjoyable and I was the only one on them. No other bikes. A car passed me once in like 2 hours. It was amazing.
Eventually the route took my uphill. The next hours were really tiring. Most of it I walked my bike. In the future I would like a bike with lower gear ratio.
I became extremely tired and started going a lot slower. Everytime I thought I was at the top and there was no more mountain left to go, the route went into the distance and uphill some more.
Eventually I reached the top without really noticing and started going downhill. Now I was in some really rural areas. There were a lot of abandoned lots and rundown houses.
Also I started to pass chicken farms. They had signs like "Purdue family farm since 2017" and that sort of thing, so these were real factory farm type chicken farms.
I was biking on asphalt roads now. I was biking down this road sticking to the right as much as possible (no shoulder) when I heard barking to my left. This dog came running out of the yard and runs accross the street and starts chasing me. It got real close to my left leg as I'm pedaling and bit me. I got really startled and bike away. I stopped and examined the 2 bike marks on my left ankle. They weren't bleeding, so at the time I didn't think much, but my heart was still racing from the encounter. 5 minutes later I found out I was going the wrong way so I had to turn back and bike past that same yard. Luckily the dog didn't come out.
At time time I didn't know that dog bites were dangerous and could get easily infected, so I just went about my way. I was still riding on the road through some rural areas. At this time I realized I wasn't going to make it to the planned sleep stop at my usual 6-7pm time. I was running behind due to all the walking up the mountain.
The sun began to set and I started thinking about stealth camping at some random spot. I couldn't really find anything though and was still kinda sketched out due to the dog bite.
Eventually the sun completely set and I put on my head lamp to see where I'm going. I followed the route but see this sign on a tree with my head lamp that says something like "Private property no through route to National Forest". I spent 10 minutes going the other way and trying to find the right route. I was using my iPhone and OSMAnd as navigation, and it updated my position on the map very sporadically. Eventually though I realized the route was past that sign. So I turned off my head lamp and headed towards someones house before crossing this sketchy bridge and making it into the national forest. It was pitch black and the campsite marked on the route was 5 miles away or so. I gave up and set up camp at the next flat spot I saw.
Then next morning I woke up and got right back on those National Forest roads. I was the only one there for the next 5 hours or so. The path was wide but pretty rocky and bumpy. It started going up and up and up. I pedaled about half of it and walked the other half
Eventually I reached the top and found out that I was on some hunting roads. Or thats what the signs said anyways. I saw this house on top of the mountain but I don't think anybody was in it. Maybe they just come up to stay there when they're hunting. Eventually I passed a guy walking his dog and said whats up so I figured I wasn't far from an actual road. I was in pretty good spirits at that point. Pretty tired but just loving the nature. I was pedaling up a brief uphill, taking it easy when I heard a loud snap. I looked down and saw that my bike chain broke
I did not have the tools to repair it. No chain tool. No powerlink, no nothing. I could tell by the GPS map that I wasn't far from the highway. After half an hour of pushing I made it to a parking lot for the High Knob trail in West Virginia. I had some brief ideas of going into Harrisonburg and getting a new chain to continue. I tried hitchhiking for like 10 minutes, but didn't have any luck, maybe since this was still during the pandemic (I had my first dose of the vaccine at the time). I also asked a couple people in the parking lot for rides. But then I gave up on the trip and called someone to get a ride back home.
Once home, I went to the bike store and they said I needed a new cassette as well. My knee had also been giving me some trouble, so I decided to just give up and not try to do the rest right then. I also found out that dog bites are pretty serious so I made sure to get it checked out. Maybe it was good I had to stop before the 12 days because if my chain didn't break I don't think I would've stopped to seek medical attention. but I know more now.
But maybe sometime soon I'll be back, better prepared. Maybe I should get a bike thats the proper size and not 10 years old.
I've programmed a lot in interpreted languages and I have been curious to learn more about how they worked. Sure I knew the basic of scanning, parsing, do what the AST says to do, but I didn't have a firm grasp of that last part. I came accross the Crafting Interpreters book and thought it would be a good oppurtunity to learn more. This document is about my thoughts from following along with the first half of the book where you implement a tree walking interpreter for the language Lox. I chose to implement my interpreter in Rust, but the book uses Java.
A lot of what I learned is about how to implement those internal workings of an interpreter. I won't really specify them here since the Crafting Interpreters book can explain them better than I can. I will describe some small issues I encountered and thought were notable that the book doesn't go into. Mostly details from how my implementation differs from the Java implementation in the book.
I was already familiar with scanning and parsing since I've written compiler front ends in the past, but I really enjoyed using Rust to do it. I chose not to use any external crates and just hand wrote a recursive descent parser following the book example. I enjoyed using algebraic data types in Rust to handle tokens and AST nodes. Since the book was implementing the interpreter in Java they did the whole visitor pattern to walk the AST. Originally I started doing the a similar thing by creating a Visitor
trait, but I ended up ditching it and just using match
. After this experience, I love algebraic data types and match expressions. It makes it so easy to encode your logic into the type system. Now whenever I use any other language I really miss those Rust features.
At other times I tried to encode business logic into the type system and failed. Consider the following pseudo-Lox code:
var x = 5;
{
var x = 2;
print x;
}
After parsing, but before interpreting we have a resolver phase. Its a semantic pass over the AST where resolve each use of a variable to which exact version it should resolve to, ex 2 should be printed not 5. I was familiar with a basic approach doing this where you walk up a linked list of scopes, but in this Lox language we also added closures and other trickier things so the resolver is a bit more complicated. So it was fun and interesting to learn about how to implement those features with a semantic pass.
After the resolver, the interpreter uses a map the resolver created when it comes accross a variable usage. Our resolver created a map of tokens to values. In Rust its a HashMap
. There ended up being a lot of lines like map.get(...).unwrap()
in when using this map. One thing I wanted to do, was use Rusts type system to better represent that the get
call would always return a resolved value, but I didn't end up doing that. Maybe its not decidable or something like that. Since I know I wrote the resolver correctly, I know those get
calls will return Some
, not None
, so ideally the rust type system would be able to enforce that.
In Rust memory is managed with ownership. Every variable in Rust has an owner.
Who owns the lexeme? input can come from a file or from standard in if the user is using the REPL mode. We need to save lexemes for example identifiers need the lexeme to figure out what they are referring to. Originally I just had tokens store the lexeme as reference to a slice of the input (file or standard in), however this became an issue with allowing the REPL to work.
Consider the case where a user types in one line of code into the REPL. The interpreter needs to keep track of what that line did because maybe it declared a variable and later lines of input will use that variable. however my implementation was roughly like:
let interpreter = Interpreter::new()
loop {
let input = read_input()
interpreter.interpret(&input)
}
This mean that input was dropped after one read-evaluate-print cycle. So I ended up having the tokens store a full on String
for the lexeme. Originally I was trying to keep it a reference because references are faster to copy around. But then again, this was just a toy tree walking interpreter. I was trying to learn how interpreters work not make a performant one. And if I was, I should have been following the second half of the book where you implement a byte code interpreter. And even though I wasn't, it was just guesswork on my part that keeping the String
would be slower than &str
. As they say: premature optimization without profiling is bad.
clone()
everywhere?The tree walking interpreter described in the first half of the Crafting Interpreters book is written in Java and the author uses the Java runtime in order for implementation objects to be garbage collected. This Rust implementation does a lot of copying and clone()
-ing. I would need to do some rearchitecting in order to avoid these unnecessary copies, but I chose not to do that since this is a toy interpreter and I was following along with the book. The goal of this project was to learn more about interpeters, not to make a fast interpeter.
For example, functions ending up having unnecessary clone()
everywhere with how I implemented them. Since this is a tree walking interpreter, when a function call takes place, the interpreter visits the AST that was inside the function declaration.
ex pseudo code
fn visit_function_call(f: LoxFunction) {
visit(f.declaration_ast);
}
When a function declaration is visited it creates that LoxFunction
and since it needs the AST of the declaration, I ended up cloning that portion of the AST and assigning it as member of the LoxFunction
struct. This could involve a lot of copying if the function declared is very large. Since each AST nodes can reference a bunch of other AST nodes, you could end up copying a huge subtree of the AST. Since I was follwing along with a Java program this was a straightforward approch to take, but looking back at it, the Java implementation was just copying Object
references. I should have made the LoxFunction
just hold a reference to an AST node. Of course then I would have had to make sure all the lifetimes match up correctly etc, since LoxFunction itself is clone-able etc (since in Lox functions are first class values).
Another interesting case of translating from Java was how the interpreter dealt with certain values. For example, I knew that the super
variable would always refer to a class value, but I had to do something like this:
let superclass = match super {
Value::ClassValue(c) => c,
_ => {
// should never occur
return Err(LoxError {})
}
};
I knew that super
would always be Value::ClassValue
and none of the other possibilities of Value
, but I was just storing all variables as Value
s I couldn't encode that special logic about super
.
In the book, the Java implementation was something like
LoxClass klass = (LoxClass)v;
which would also be a runtime error if the cast ever failed.
Instances are reference counted. So its easy for 2 instances to reference each other and form a cycle and they will not get cleaned up until the program finishes execution.
class X{}
var x1 = X();
var x2 = X();
x1.x = x2;
x2.x = x1;
// x2 and x1 will not be dropped until the program ends
In the second half of the book, the author implements a byte code interpreter written in C and I believe they create a garbage collector/runtime. The garbage collector would avoid the issue of instances being reference counted in this interpreter. If I ever read and follow along that part of the book, I will try to implement the byte code interpreter in Rust with a garbage collector and hopefully avoid the many copies that this interpreter makes. I'm curious to see if Rust makes writing a garbage collector hard or not. Can I do it in safe Rust? Can I do it with the built allocator that Rust uses, like how it allocates when I do Box::new
or do I have to drop into something more low level? I'm curious to find out.
On 10/22/20 I biked from DC to Harpers Ferry, WV. Well actually I started at my apartment in Arlington, VA. I took thursday and friday off from work. On thursday morning I got packed up and left around 10am.
I chose Harpers Ferry because it wasn't too far away. This was my first multiday bike trip so I didn't want it to be too difficult. I bike from Arlington down the Custis Trail into Rosslyn pretty much all down hill on my loaded up bike. Then I crossed the Potomac into D.C.
The Chesapeake and Ohio Canal towpath (C&O) is a trail from DC to Cumberland, Maryland. (and then it turns into the GAP continues to Pittsburgh, PA). The C&O trail runs along an old canal. I guess there is a flat path next to the canal for animals to pull the boats along the canal. This flat part was turned into a path for bikers, hikers, runners and horse riders (on parts of it). This is the path I would take for ~60 miles to Harpers Ferry.
The part of the C&O near DC is pretty busy usually, but there weren't too many people on it during a Thursday morning. I stopped at mile 16 at the Swains Locke campsite for a snack. There were a group of older people at what looked like a painting class. I had biked past this campsite before on a Friday night and it was super busy and loud. Theres road access to it so I guess people come here to drink. After a brief chat with a guy and pee in the portajohn I continued on my journey.
One thing to note about the C&O trail is that there campsites along the way and they have water pumps. The park staff will go around and test the water quality and if its bad they'll take the handle off the pump, so you can't use it. So this means that you can't know ahead of time which campsites will have working pumps. So I was biking for a quite awhile before I found a campsite that had a working pump to stop for lunch at.
I made it to the Calico Rocks campsite at mile 47.6 around 5pm and stopped their for the night. I setup my tent next to the potomac river.
The next morning it was pretty cold when I eventually made it out of my tent. Not sure what time it was since I didn't check. But I biked the ~ 13 miles to Harpers Ferry. They were some weird miles though going past a waste treatment plant (I think?) and a trailer park. I locked my bike up at a rack and climbed up some stairs and over a bridge. It was still really foggy so the view wasn't great. I wandered around the town and it was very touristy, which makes sense. It was all about the history of the town and some John Brown uprising stuff. I bought a bacon, egg, and cheese sandwich and a blue gatorade and made my way out.
On the way out, the fog had cleared up and I had a nice view of the Ohio and Potomac rivers meeting.
Then I biked another 10 miles or so back towards DC before stopping to eat my sandwich. Had some pleasant conversations with other bikers. At one point I stopped for a couple minutes on an aqueduct and talked to do other bikers. They were out for the day going to Whites Ferry and back (idk where). We talked about how the aqueducts were built over the river since the canal had to be flat for the boats to get pulled. One of the bikers knew more about the history of the C&O and she said that it was a financial failure. Apparently it took like 10 years to finish and then trains were widespread and completely outclassed it for shipping things.
The next stretch from about mile 40 to mile 30 back to DC was beautiful. It was fall, the leaves were all colorful, and I had the trail almost to myself. I played some music on my phone and just enjoyed the ride in the amazing weather. I had originally planned to spend 2 nights camping on this trip, but when I was on my way back I just thought ehh I could get another rough night of sleep and get back tomorrow morning or I could finish it off tonight. Sleeping was not great the night before because my setup is not the comfortable. I have this 3/4 length sleeping pad that is not too nice to sleep on. maybe I just need to get used to it.
But I decided to keep going. I stopped at 4pm for a can of salmon and then made my home. I didn't plan that much. I didn't have any light on my bike so I biked like the last 15 miles in complete darkness which was probably not that smart. By the time I saw the Georgetown buildings in DC I was super exhausted. And then I had to bike that big uphill from Rosslyn to Courthouse. Yikes. It was a good trip though. In the future, I want to go on a longer trip and go on a less traveled path. Because the C&O Trail is super busy in parts and full of hikers/horse riders/and walkers. I really enjoyed that stretch where there weren't many people and want more of that for a future trip.
One day I was reading the wikipedia page on type systems (see here) and came across the quote:
any sound, decidable type system must be incomplete
I tried to read the source for that line (see here), but I couldn't understand it. I thought, surely that can't always be true? Aren't there some super simple type systems are sound, decidable, and complete? What does it mean for a type system to be sound, decidable or complete?
Let our type checker be M which takes a program w and returns true or false
M is sound if: for every program w, if M(w) is true, w will not have any run time type errors
M is complete if: for ever program w, if w would have no run time type errors, M(w) returns true
M is decidable if: for every input i, M(i) halts and returns true or false.
A trivial M that is sound and decidable, but not complete:
def M(w):
return false
A trivial M that is complete and decidable, but not sound:
def M(w):
return true
A trivial M that is sound and complete, but not decidable:
def M(w):
Run w
return true if there were no type errors while running w, false otherwise
But just because I came up with these examples, doesn't mean there isn't some sound, complete, and decidable M, right? Couldn't there be some super simple type system, that only has booleans, that we could create a sound, complete, and decidable type checker for?
Another issue I have is with our definitions of sound and complete. They're a little under specified: what is a "run time type error"? Not all run time errors are type errors, example: dividing by zero. What counts as a run time type error?
With all these questions, I want some answers. Also sometimes when I'm reading type system computer scienc-y adjacent things I come accross lambda calculus notation which I don't understand at all. I'd like to learn the basics of type theory at least. Also what is Curry Howard Correspondence? it sounds neat, programs as proofs? Also what are Hindley-Milner type systems? I've come accross those when reading about type inference and couldn't really understand its wikipedia page.
After some searching I came across Types and Programming Languages by Benjamin C. Pierce. I'll start reading this and see if it helps
On my earlier question about what counts as a "run time type error":
The bad behaviors that can be eliminated by the type system in a given lan- guage are often called run-time type errors. It is important to keep in mind that this set of behaviors is a per-language choice: although there is substan- tial overlap between the behaviors considered to be run-time type errors in different languages, in principle each type system comes with a definition of the behaviors it aims to prevent. The safety (or soundness) of each type system must be judged with respect to its own set of run-time errors. --Types and Programming Languages, Benjamin C. Pierce, page 3
literally in the introduction.
If the set of run time type errors is not locked down, couldn't I just make a type system, and say that the set of run time type errors is the empty set? then my type checker can just always return true, like the trivial example for sound and decidable above, since run time type errors never occur (there aren't any). In which case my type checker is complete.
There must be some context that wikipedia quote was assuming without stating. Or maybe the source it was quoting specified some earlier context about what type systems it was talking about.
My new question: Is there some level like: once your type system encodes such and such level of information your type checker can no longer be sound, complete, and decidable? If there is no exact level like this, are there some desirable common features of type systems that cause type checkers for those systems to not be sound, complete and decidable?
Click here to see all posts.