Ah so it's been almost a week since I've posted here. Time got really really slow for a bit there but now maybe it is speeding up as life as we know it becomes more routine.
Such a bizarre predicament that nearly (?) all of humanity faces. We're all in it together, unless we're in denial. When the weather has been nice (most days since I last wrote), the parks have been crazily busy, which makes running really difficult. So instead:
(lucky me with roof deck access) An hour is an excruciatingly long time. At one point before I tried an hour I contemplated doing 24 hours. Now I think that's insane. It might happen. Yesterday was cold and rainy and amazing, I could run wherever I wanted and nobody was around! Bring back winter!
I'm now on board with everybody wearing masks (not N95 but procedure masks etc) when they are out in public. It makes a lot of sense, given the fact that people are contagious before and/or without symptoms. The advice here has always been "wear a mask only if you're sick" which is no longer applicable! Anyway I've spent a great deal of time making a mask (and now starting a second) from
this site's template/instruction, which seems to work well! I don't have a sewing machine so I'm using a couple of tiny travel sewing kits that I've acquired over the years and doing all of the stitches by hand. I'm terrible at it, but getting less so as time goes on.
Musically, I've turned to NINJAM at home again, Andy and I played the other night which was nice. Hope to do more of that!
(obviously it goes without saying, all the people out there who are helping other people: doctors, nurses, delivery people, people working in grocery stores, thank you thank you thank you. I'll try to say this more in person but it's hard with all of the other pressures of life outside of home)
9 Comments
(
youtube link)
Apologies for my outfit (unless you're into legs, in which case, you're welcome), I ran to the studio from home. At 11am the Brooklyn Bridge was pretty empty, thankfully, but on the return it was getting more crowded. Plenty of tourists out walking in big groups, not practicing social distancing in any form. Sigh. Can't stop what's coming.
There were also a lot of people out in Brooklyn Bridge Park. I don't think playing volleyball today is a good idea.
Maybe I'm overreacting, but it's really not looking that way. I hope I'm overreacting. A "shelter in place" order seems not-unlikely for NYC at some point in the near future. We've discussed leaving, but have nowhere we'd want to go. Being home is a pretty good place to be, even if there are too many goddamn people around. Even if we had known what was coming months ago, I'm not sure where we'd want to be. I want to be somewhere else but nowhere else. Maybe after this whole crisis is over (will it be a few months? 18 months? ugh), a move is in order.
Recordings:super8_panic_marathon - 1 -- [0:17]
super8_panic_marathon - 2 -- [50:37]
4 Comments
I bicycled from Manhattan to Brooklyn to play the piano some, and do a little Super8 session:
(
youtube link)
On Wednesday, I had gone to the studio (which is right by Fairway) in the afternoon and stayed until the evening. I went into Fairway, which was pretty normal-ish. After my cancelled band practice and trip home, there had been a presidential address, which was a total failure in pretty much every way I could see, other than getting peoples attention. The next day, I went to the studio, and stopped in Fairway on my way home to get a few more things, and it was a total madhouse. Such a difference in a day.
Anyway since Wednesday we've been practicing Social Distancing, which is both easy and not easy. It's only been 5 days but it's going to be challenging.
A friend and I discussed food strategies via text. What Allison and I are doing now is basically trying to keep a stocked pantry with a list of things that we wouldn't mind having more of, and when we need something, we'll go buy that thing we need and other things from the list of things that we wouldn't mind having more of.
Last Sunday we were scheduled to fly to California, and yesterday I was scheduled to run a 50 miler in Marin County. We cancelled our trip the day before, which made me sad but after an exercise in sunk cost (figuring the difference in cost to proceed with the trip vs cancel, ignoring non-refundable stuff), it made total sense. Yesterday I found out the race was cancelled anyway.
There's my rambling. Someone on twitter said now was a good time to try journalling. My first thought is "my filesystems are all ext4, baby." I lied, I'm on a mac at this moment.
Recordings:super8_distance - 1 -- [32:10]
super8_distance - 2 -- [5:56]
super8_distance - 3 -- [0:49]
Comment...
Windows has a unique (as far as I can tell)
"feature", which I have not experienced first hand but I've heard about. If your system has more than 64 cores (effectively, e.g. 40 cores each with 2 threads would count), then it divides the cores into "processor groups." By default, an application that creates threads and does no additional work has all of its threads run in the same processor group (is this always Group 0? or is it randomly assigned? I have no idea).
The significance of this is that if, for example, you have a 36 core hyperthreaded CPU (72 logical cores), then a traditionally-written multithreaded application can utilize at most 36 cores. (It's also unclear to me if the 36 cores in a processor group in this scenario are 18x2 threads each, or 36 threads on 36 unique cores).
Anyway, we're now testing a REAPER tweak to address this. If you need to implement this in your application, see SetThreadGroupAffinity(), and get ready for some fun using GetLogicalProcessorInformationEx() with RelationGroup and parsing the output to determine the group structure (the documentation for that is a bit light IMO!).
So there you go, everybody.
Recordings:super8 - 1 -- [17:37]
super8 - 2 -- [11:51]
super8 - 3 -- [2:38]
super8 - 4 -- [14:28]
2 Comments
Oops I haven't updated here in months. I posted a thread to Twitter the other night, which I'm now going to post here since it's more appropriate here anyway (I was tired and lazy and on my phone). So here goes (with [edits]):
Yesterday [Saturday, 3 days ago] I did my first 50 mile ultra[marathon]. It was in California, near Malibu [Edit: The race is called the Sean O'Brien 50]. I woke up at 3:30am, left the house at 4:10, picked up @runviper [Edward] at 4:35, arrived at the start at about 5:15, before sunrise. It was cold, 40F [reminded me of home], and since the full supermoon was low on the horizon, dark.

You will see a lot of me making this face in this thread:


The start was supposed to be at 6:00 sharp, though I'm pretty sure it was 30 seconds late:

[That's the organizer with the megaphone, I believe. In the final race information email, there was a really thoughtful paragraph which stuck with me, I'll quote it here:
I believe we are capable of anything we set our minds to. If you visualize it enough, and work hard you can make it happen. Remember that it's a "gift" that we get to run on the trails. There are people who can't even get out of bed. You "get" to participate in an ultra. Enjoy the experience. Be in the moment, and just have fun. It will all come together on race day if you stay positive, and remember what a blessing it is to do what we do. Not even 1% of the population will ever do what you are going to do in less than 1 week. Pretty awesome when you think of it like that? See ya soon my friends!!
Anyway...]
The first couple miles were crowded enough that I didn’t stop to take a picture. It went up a nice hill which made me feel powerful in my ability to climb it while running, then down the other side, through some more park, and then we arrived at a stream.

It was perhaps a small creek, but big enough that crossing it was tricky. There was a loose rope going across to help. A headlamp went flying and started floating down the water. I had a moment of heroism when I recovered it. I crossed with dry feet. Not bragging. After the creek crossing we started climbing again, and the sky started getting light.

and then the sun rose. Around this time I was able to feel my fingers again. I had thin cherry tree 10-miler branded gloves on but they could only do so much. This was almost an hour in, probably around 4 miles in, having climbed about 1500’

After we ascended another 10 minutes or so, the fog covering the Pacific came into view:




There was a photo-op moment going up over some rocks. Approaching it I figured that round thing would be a microwave dish or something but it was actually a light for a photographer.. I’ll see the results eventually I imagine. [edit: that photo wasn't great and too expensive to buy!]

[The] first aid station was about 7 miles in (hour and 40 minutes after the start). Mmm watermelon and oranges. Also potatoes and salt. Eating felt good. [Spent about 2.5 minutes here]

The next hour or so was mostly single track and had a good amount of variety. The charcoaled wood from the fires of last year offered a contrasting element to the blissful joy of the run.






At about 9am (3 hours elapsed, about 13mi, 3200’ ascent) after crossing above a tunnel, we arrived to the second aid station, which had expanded offerings from the first. Sandwiches! PB&J awesome! In hindsight I should’ve had some candy. Regretting not having candy. Getting warm.


There were drop bags at that aid station... dumped my wool shirt, headlamp, picked up sunblock. [spent about 7 minutes here] Soon enough it got very bright, and less photogenic. (note re: video — Spaceballs reference, had plenty of water):
After another hour or so (10:15am?) we crossed over a pass and could see the marine layer again. ~17 miles and 4300’ climbing cumulative...



10 minutes downhill and we arrived at an aid station. Lemonade, fruit, sandwiches, potatoes, consumed. @runviper made a taco, I questioned his judgment for eating beans, then proceeded to join him. No regrets [on the beans] (for me at least) [regrets on not eating candy]. [spent about 5 minutes here]

At this aid station they explained we were 19 miles in, we just had to do 3 miles down to the next aid station, then 8 more miles back up another trail, then the 19 miles back to the start. Legs felt pretty good... time to descend. Oof.


3 miles, 1500’ of descent, and maybe 30 minutes later, the cracks started to show. That tight IT band thing you feel sometimes? hello


eat eat eat [spent about 7 minutes] then back up the hill with full water, going back to where we were, in 8 miles instead of 3. Hey why is it so steep?



After having climbed 1800’ for an hour, you suddenly realize you’re on top of the wrong mountain [edit: but still on the course -- it is a torturous course], and the aid station is a tiny speck on the horizon. There is a gorge separating you from it.

The aforementioned IT/knee thing made the 800’ descent difficult, especially the steeper parts. So I was actually happy to be climbing again, which was good because there was 1000’ to go for the aid station


These 8 miles were brutal. The sun was strong, it was hot, and seeing the expanse between you and where you need to be was intimidating. And knowing once you get to the aid station, you still have 19 miles to go (which are largely downhill, ugh)
After having gotten to the aid station, food [nutella (gnutella) sandwiches, mmm. apparently they had run out of water too, but had since gotten more], ice in the face, etc [spending about 8 minutes], we continue on. There’s a small descent, a few hundred feet later I decide I must stop and get a rock out of my shoe. We are 31 miles in, 7300’ of ascent, it’s 1:40pm, there have been rocks in my shoes all day.
I probably also tried to stretch my IT. anyway we climb 600’ to go back over the pass, and look back at the ocean:


Now it’s just a short 6 miles to the bag-drop aid station. At some point around here I started using anti-chafe stuff everywhere i felt twinges. Seemed to work but could’ve been placebo. I was wincing on all of the steeper descent bits, not taking too many photos

Get to the mile 37 aid station, change shirts back to wool, grab headlamp. Eat a little but damn at this point I’m sick of food. [Should've started eating candy. changed socks, win. Drank cold brew coffee from drop bag. Both win. Also did some stretching of the IT. total time here was 13 minutes]



And another 6 miles of mid-afternoon. With 2000’ of ascent (not too gradual, plenty of my new favorite thing at this point: descent)




We get to the final aid stop at around 5pm (that 6 miles took a while!), just 7 miles to go! Stretch again here [spent about 8 minutes here -- total aid station time was about 50 minutes]


After this aid station it really got to be the magic hour:



and the fog and mist:
the full super moon returned, too




the anticlimactic ending is that I stopped taking pictures, we turned on headlamps, I endured the descents, and in the last 2 miles got my feet soaked trying to cross the stream that I had managed to cross dryly in the morning [tweaked an old injury in my arm doing this, though, hanging on to the rope crossing the stream. didn't really realize it at the time, but it became apparent by Monday], and despaired that the trail never seemed to end.
and then finally finished 50ish miles with approx 11,000ft of ascent and 11,000ft of descent, in a bit less than 13 hours. And @runviper [Edward] was kind enough to wait for me to catch up before crossing the finish.

update: Monday: legs feeling pretty good! had some nice walks yesterday and a hike today. much better than post-marathon, which makes sense since most of it was hiking...
update: Tuesday: flew home, had an easy run.
Comment...
Five years ago, in the year of our lord 2014, I wrote about
the difficulties of drawing bitmapped graphics to screen in macOS, and I
revisited that issue again in the winter of 2017.
Now, I bring you what is hopefully the final installment (posted here for usefulness to the internet-at-large).
To recap: drawing bitmapped graphics to screen was relatively fast in macOS 10.6 using the obvious APIs (CoreGraphics/Quartz/etc), and when drawing to non-retina, normal displays in newer macOS versions. Drawing bitmapped graphics to (the now dominating) Retina displays, however, got slow. In the case of a Retina Macbook Pro, it was a little slow. The 5k iMacs display updates are excruciatingly slow when using the classic APIs (due to high pixel count, and expensive conversion to 30-bit colors which these displays support).
The first thing I looked at was the wantsLayer attribute of
NSView:
- If you use "mynsview.wantsLayer = YES", things get better. On normal displays, slightly, on a Retina Macbook Pro's display, quite a bit better. On a 5k iMac's display, maybe slightly better. Not much.
- Using the wantsLayer attribute seems to be supported on 10.6-current.
- For views that use layers, you can no longer [NSView lockFocus] the view and draw into it out of a paint cycle (which makes sense), which prevents us from implementing GetDC()/ReleaseDC() emulation.
After seeing that enabling layers wasn't going to help the 5k iMacs (the ones that needed help the most!), I looked into Metal, which is supported on 10.11+ (provided you have sufficient GPU, which it turns out not all macs that 10.11 supports do). After a few hours of cutting and pasting example code in different combinations and making a huge mess, I did manage to get it to work. I made a very hackish build of the LICE test app, and had some people (who actually have 5k iMacs) test the performance, to see if would improve things.
It did (substantially), so it was followed by a longer process of polishing the mess of a turd into something usable, which is not interesting, though I should note:
- If you want to update the entire view every time, you can configure a CAMetalLayer properly and just shove your bits into the CAMetalLayer's texture and tell it to present and avoid having to create another texture and a render pipeline and all of that nonsense.
- If you want to do partial window updates (partial-invalidates, or a GetDC()-like draw), then you have to create a whole render pipeline, a texture, compile shaders, blah blah blah ugh.
- There's a bunch more work that needs to get done to make it all work (and adapt to changing GPUs, blah blah blah)...
This stuff is now in the "metal" branch of swell in
WDL, and will go to master when it makes sense. This is what is in the latest +dev REAPER builds, and it will end up in 6.0. I'm waiting for it to completely bite me in the ass (little things do keep coming up, hopefully they will be minor).
As one final note, I'd just like to admonish Apple for not doing a reasonable implementation of all of this inside CoreGraphics. The fact that you can't update the 5k iMac's screen via traditional APIs at an even-halfway-decent rate is really stupid.
P.S. It does seem if you want to have your application support Dark Mode, you can't use [NSView lockFocus] anymore either, so if you wish to draw-out-of-context, you'll have to use Metal...
Recordings:Decanted Youth - 1 - Supposed to Be -- [8:14]
Decanted Youth - 2 - (Vaguely Instrumental) Legacy -- [16:11]
Decanted Youth - 3 - (Vaguely) Round and Round -- [5:15]
Decanted Youth - 4 - The Squeeze -- [6:31]
Decanted Youth - 5 -- [3:16]
Decanted Youth - 6 - (mini cover medley) -- [10:03]
Decanted Youth - 7 -- [9:15]
Decanted Youth - 8 -- [8:26]
Decanted Youth - 9 - Trees and Mold -- [9:37]
Decanted Youth - 10 -- [4:53]
Decanted Youth - 11 -- [9:05]
Decanted Youth - 12 -- [7:02]
6 Comments
This was the second marathon road course I've run (after NY) -- while the course was nearly flat, it was challenging because of:
- Lots of people going through many narrow sections,
- Curbs you could step off of wrong if you were not watching your feet (I partially rolled my left ankle in the first mile, rude awakening. Felt it for the next 10 or so)
- The warm weather (mid 60s and sunny, the sections in the shade were pretty pleasant but in the sun you cooked!)
I wasn't prepared for this race in general (signed up for it a week or so ago), and wasn't optimistic about even finishing (the last month had seen no runs over about 5 miles). I positioned myself between the 3:40 and 3:50 pace group balloons, figuring I'd start by running 9s.
For the first half (and after my ankle rollover especially) I just hung out with the majority of the runners I was near, running 9s as planned. I didn't see too much passing, but maybe it was subtle? The first half went in just about 2 hours, and a bit after I stopped to stretch a little, massage my right calf (which had been getting tight on longer runs causing tendonitis in my ankle, which is why I hadn't done any long runs in ages), and my left ankle seemed to be fine, so I kept on. Around mile 20 I realized that a) I was going to finish, and b) I was actually feeling pretty good considering (my HR had been 130-140 or so the whole time), so I decided I'd run some 8s when the crowded course allowed and get some of those newfangled negative splits, which was successful.
Other notes:
- Seeing Al and friends on the course was awesome.
- Swimming in the harbor after was incredibly cold and perfect and 10/10 would do again.
- Aid stations have signs ahead of them that say "OPEN BAR 100 meters ahead" which I find hilarious.
- Aid stations use a ton of plastic cups.
- I carried a backpack with me which turned out to be handy (extra water, ended up having a liter or so -- the aid stations were few and far between and as a result crowded and difficult.. but even if I stopped and had 2 waters + 1 energy drink at each, I would've still finished very dehydrated).
- If you (like me) are not too familiar with Copenhagen, you don't really notice the loop in the course, because by the time the second time comes around you're in full "make this shit happen" mode.
- The dry-bag backpack that they gave everybody is a fantastic perk, especially given how affordable this race is (compared to NY at least!).
- Copenhagen is really lovely. <3
Video from my sunglasses:
(youtube link)
1 Comment