Archives

Blog index

Blog

  • Casting Out Winter


    Overnight we turned the clocks forward an hour. This afternoon the temperature on our weather station reached 66F (18.9C). The sun went down an hour later as the clock reads, so Charlie got to play outside longer than normal. The skunk cabbages are emerging.

    It feels like we turned a corner and spring is on its way in.

    I went out to the upper west branch of the Croton River (the west branch reservoir outlet) this afternoon for a few hours to cast out winter and the cobwebs that have accumulated on my casting form.

    I was delighted to see lots of little black stoneflies on the rocks and some tiny BWOs in the air.

    A couple nights ago I tried some dry versions of the little black stonefly, hoping that I’d run into some on the river. This pattern comes from Mark Sturtevant and features a peacock body, CDC wing, and grizzly hackle.

    I also tied some glass bead dark sakasa kebari and some size 20 CDC BWOs.

    I’m glad I tied the dry little black stoneflies. I was rewarded with an 8″ wild brown trout, the average size for that stream. My heart started racing when I saw it take my fly, then immediately dropped when I realized it had spit it out. I took a breath and carefully cast again to the same spot, a feeding lie below where water funneled between two large rocks. The little fish snatched my fly again, and to my delight, I hooked it. I quickly brought it to hand, and just as quickly released it back from whence it came.

    My first fish of 2026, on a dry fly no less.

    The banks were still icy and the water was 41F (5C), so we still have a ways to go before the sulfurs start hatching, but I’ll take the little stoneflies for now.

    The warm sun, when it peeked out from behind the clouds, felt invigorating. The breeze was mostly chilly, but every now and then a gust of noticeably warm air would blow by, and it felt like standing in front of a vent. It was a welcome feeling after this long, cold winter.

    I was surprised that there was still so much snow on the ground there in Carmel. Over in Peekskill almost all of our snow is gone. I hiked a little over a mile upstream to fish a section I haven’t fished before, and the trudging was slow going.

    A kind whitetail led the way for about a half mile and led me to a shallow crossing before some steep terrain. I was also fortunate enough to see a blue heron out doing some of its own, and a freshly excavated pileated woodpecker feeding hole.

    While trudging, I noticed a spot where something had eaten a mallard. I noticed the distinctive feathers right away. I suspect a bird of prey, because there were no footprints around the rocky bear spot littered with feathers. I selected a few subtly barred flank feathers from the scattered remains. Perhaps I’ll tie a few patterns so the duck can return to its river in a different form.


    When I got home, Charlie was happily digging in the garden bed, ready to plant tomatoes and tomatillos. Me too, bud.

    Amanda suggested we round out the day by firing up the grill and making hotdogs instead of the sheet pan dinner we had planned. A great idea! If you want it to be spring, you must live like it is spring.

    I’m hoping to spend as much time as I can outside these next two days while we have this relative heat wave, before the standard cold, rainy March weather comes back later this week. Perhaps I’ll even get out and entice a couple more trout to rise to my fly.

  • Page Family Tree WP block by Telex


    I used Telex to create a Pages Family Tree block for my Digital Garden.

    I wanted to be able to see my hierarchical post types in context, so it shows siblings and two levels of ancestors and two levels of children in relation to the current page I am on. I use it in the sidebar.

    Here is what it looks like in action:

    Download it or remix it here:

    Page Family Tree — Telex
    Look at this Page Family Tree WordPress project I created with Telex!
    telex.automattic.ai

  • Skunk Cabbages

    The skunk cabbages are emerging, a sure sign of spring.

    Dates we noticed them previous years:

    • March 9, 2025
    • March 12, 2024
    • February 11, 2023
    • February 10, 2022

    These photos are also me testing out a used Canon Extender EF 2x III that I picked up. The reviews are accurate: A bit of a reduction in sharpness and a reduction in speed on auto focusing. You lose a couple of aperture stops, too. Still very useful and gets a useable 400mm zoom for a small fraction of the price. H

  • Month of February 2026


    The month of February started out with some fun sledding with friends in the nature preserve at the end of our street after the first big snow.

    I got out and took some photos of the ice:

    We read some of The Hobbit together on the couch. Amanda is a much better verbal reader than I am.

    We went to swim class. Making lots of progress this month in terms of confidence in the pool and it is cool to see. Going to be a fun summer!

    Amanda and Charlie did some nice Valentine’s Day art and Charlie was very involved in picking out flowers for Amanda.

    We had some friends over for dinner. I made red beans and rice.

    Charlie helped me fix a chipped windshield.

    Charlie is also getting more independent and doing things like making his own cinnamon toast.

    We learned that Charlie likes antique stores, so we visited many of them throughout the month. We picked up some cool old local maps, a vintage umbrella holder for our entryway, some Cuban maracas.

    This year, the daffodils popped out of the ground on February 19.

    • 2026: Feb 19
    • 2025: Feb 24
    • 2024: Feb 8
    • 2023: Feb 14
    • 2022: Feb 18

    February was a tough month. Between snow days, weather delays, winter break, and sick days, we didn’t have a full week of school the entire month. For the shortest month, February felt pretty long. Looking forward to spring.

    But I did have a fun coworker. Currently he works in our in-house art department.

    During the week off school, a dad friend and I took the kids to the Norwalk Aquarium. It is a pretty good aquarium in an otherwise unremarkable city.

    • They breed jellyfish there and give them to other aquariums.
    • They had awesome touch tanks. Every aquarium has a ray touch tank, but this one also had a jellyfish touch tank and a sturgeon touch tank.
      • Charlie did not want to touch the jellyfish or the rays, but surprised me by jumping right up to touch the sturgeon. When I asked him why he didn’t want to touch the others but he did want to touch this one, he said: “Stingrays and jellyfish sting you, but sturgeons don’t!”
      • The local TU chapter (Mianus) sponsored a trout tank with brown and brook trout, and had some great info on the Mianus river watershed there. Pretty cool.

    We went to the Catskills one weekend. I took lots of photos there, too!

    We rented a cabin in the Phoenicia area. (Yes, we went to the diner and yes, it was great!) We made some s’mores in the fireplace. We explored at the Catskills Visitor Center.

    I did a bit of fishing, though the water was 33F and I saw zero fish, even in the deepest pools I could find. Oh, well. It was nice to get out and scout some locations for the spring.

    I also went back to the Jerry Bartlett collection at the Phoenicia Library. I added a lot of books to my “I need to track down a copy of this” list.

    We spent an afternoon at West Kill Brewing. Incredible place. Highly recommended.

    On the way home we stopped at Bread Alone Bakery and Woodstock.

    We also went to Woodstock for my birthday weekend in 2023. Here is Charlie in downtown Woodstock then vs now:

    Charlie and I had some fun with a Makey Makey Go that a coworker sent to me in the holiday gift exchange. First we turned an apple into a drum, then a piano, then a robot that repeated a recording of Charlie saying “Poop!”, which is pretty much the best thing for a 4yo.

    Then I blew his mind and made the computer answer his questions by typing “say ….” on the command line. I made it say nice things about him and he got the biggest smile and said “Thank You” to the computer. It was sweet.

    Cute Charlie quote:

    “Jonas, Soren, and I were foolin’ around on the playground.”

    Curious dad: “What does foolin’ around mean?”

    “It is like… doing cheeky businesses!”

    February ended with a nice day walking around Beacon with Charlie and Amanda.


    AI has taken over my work life. If you don’t work in tech, it is hard to explain just how much work has changed in the last couple months. We are all trying to surf this wave as best we can and building lots of tooling.

    There is lots of good and bad, but I’m generally optimistic about it. Things are changing rapidly and there is lots of experimentation happening day-by-day. Don’t take things you see on social media too seriously. Dive in and get your digital hands dirty and build some things for yourself.

    One of my friends is out on parental leave and coming back in two weeks. I told him he is coming back to a different company.

    Not a developer but want to learn how to go beyond just AI chat? This is a good place to get started:

    Claude Code for Product Managers | Free PM Tutorial & Course
    Learn Claude Code IN Claude Code! Free Claude Code tutorial for Product Managers — master AI agents, file ops, and PM workflows. Hands-on, no videos.
    ccforpms.com
  • Cecil Heacox’s Charmed Circle of the Catskills articles


    Last weekend I read Ed Ostapczuk’s Ramblings of a Charmed Circle Flyfisher. Recommended!

    In it, Ed writes:

    In 1969, I read a two-part article written by Cecil E. Heacox that appeared in the March and April issues of Outdoor Life titled “Charmed Circle of The Catskills.” That poetic, yet simple, set of articles about the Catskills had a profound effect upon my life. Heacox wrote, “I call this region charmed because its fine fishing in wild, forested settings has survived even though it is within a day’s drive of one-sixth of the population of the United States and Canada.” He added, “The story of the Charmed Circle is touched with a mystical quality, trademark of the Catskills since the days of Rip Van Winkle.” In that two-part series, Heacox wrote about the many facets of trout fishing in the following Catskill streams: Rondout, Esopus, Schoharie, Beaverkill, Willowemoc, Neversink, and the Delaware. He skillfully took a neophyte like me on an enchanted piscatorial journey—one that I never forgot nor ventured too far from all these years later. Heacox pronounced the aforementioned rivers “topdrawer streams” because they were the “birthplace of dry-fly fishing in America, bailiwick of talented fly-tyers, and proving grounds for custom-rod makers” and “have lured fishermen from all corners of the world to the Charmed Circle for more than half a century.”

    Cecil Heacox was no ordinary flyfisher who just picked up a pen and began writing, mind you. No, he rose professionally through the ranks of the New York State Department of Environmental Conservation (DEC) from a junior aquatic biologist in the Catskills to regional fisheries manager to DEC’s deputy commissioner. Years after he retired, I had the very good fortune to meet him once—a true gentleman in every sense of the word.
    He autographed my copy of his 1974 book, The Compleat Brown Trout, and I thoroughly thanked him for his 1969 Outdoor Life articles. To this day I still have, and treasure, both copies of the original magazine articles.

    Wow! I’d seen these articles referenced before and the phrase “Charmed Circle” is now ubiquitous, but I hadn’t read them. I decided I needed to look them up and educate myself.

    Two hours of searching online later, I simply couldn’t find them, and I’m no slouch when it comes to tracking things down online. I looked everywhere I could think of: Library collections, Google Books, Outdoor Life’s website archives, the Internet Archive, etc. I found the scanned Outdoor Life 1898-1961 collection, but sadly that stopped eight years too soon. I’m pretty sure these articles weren’t available online. Dozens of references, but no original text.

    I was in the Charmed Circle that weekend, so I drove over to the Jerry Bartlett collection at the Phoenicia Library, figuring they’d have a copy. No dice. Lots of great works and I left with a long to-read list, but not the Cecil Heacox articles.

    I tried fruitlessly a few more times over the next couple days. Finally, I struck gold. Someone was selling all twelve 1969 issues of Outdoor Life magazine in an eBay auction. I snapped them up.

    Long story short, I scanned both articles and put them up on the Internet Archive so you can read these classics, too.

    Here they are:

    Enjoy!

  • Thirty-six


    Last year was quite a year. Less than two weeks after my thirty-fifth birthday, I was in the hospital for five days from a blood clot in my kidney. That kicked off a year of focusing on my health.

    First, I had many specialist appointments for six months. I’m all good on the blood clot and kidney front and off of the blood thinners. But the positive thing that came out of the whole unpleasant ordeal is that I started seeing a doctor again regularly for the first time in 15 years.

    I learned that my cholesterol is slightly high (not a contributing factor for this blood clot, but something to watch), and I was able to lower that by altering my diet and exercising more. I started going to CrossFit regularly in July.

    My stress levels have gone down at work. From April through June I was on sabbatical, and my average resting heart rate decreased over that period. When I returned to work in July, I was switched to a new position that I find more enjoyable and less stressful.

    My sleep has improved this year on two fronts. First, recovering from the blood clot forced me to slow down. For four or five months my energy was gone by ~7pm each night, so I spent most evenings reading in bed and falling asleep early. My energy levels have improved and I’m staying up a bit later now, but for the most part I’ve been getting consistent sleep.

    The second front my sleep has improved upon is managing my acid reflux. In one of my many CT scans, I learned that I have a hiatal hernia, which is a major contributing factor to my acid reflux. I’ve taken famotidine for it for years, but it has always been a problem, and I was sick of taking medication, so I sought out alternatives. I raised the head of my bed for a few months, which helped a lot, but wasn’t great for the bed. I ended up getting a Medcline pillow, which has been incredible. Immediately it managed my acid reflux and allowed me to get off of medication for it. It has also been better for my lower back, since it forces side sleeping and helps with spine and hip alignment.

    The next health thing I’m working on is improving my digestion. I got completely wrecked with strong antibiotic injections, then oral antibiotics. I took probiotics for a couple months to recolonize my gut floura, which helped, but I still needed some improvements. The last two months I’ve been focusing on increasing my fiber intake through my weekly beans project (see the posts here) and a daily Floura bar. Without going into too much detail, the increased fiber has been a positive improvement. I’m hoping it shows in the cholesterol numbers in my next blood draw, too.

    Side note: Did you know how little fiber Metamucil and the like have? They only have ~5g of fiber and taste like a terrible sludge. Floura bars have 13g of fiber and taste amazing. They are made from 12 different plants instead of the husk of one kind of seed. I’m a fan.

    All things considered, I’m feeling better than I have in the last couple years.


    Last year I wrote this:

    There is so much in our own communities that we ignore/miss/tune out/don’t notice. One of my goals this year is to explore and experience where I live in new ways.

    This is an extension of trying to lean into the seasonality of this region. Noticing how the brook in the woods changes from season to season. Keeping an eye on the wineberries so I can pick them at peak ripeness. Noticing when certain wildflowers emerge. Which birds are around when.

    Taking it a step further, I’d like to see the same place from a new perspective. I’d like to walk or ride my bike some places we normally drive and experience it at a slower pace. Fish a spot we’ve only driven by. Try catching some striped bass where I normally row my boat. Have coffee in a new park. Go to different playgrounds with Charlie.

    I think I’ve done pretty well on that front this past year. I fished a lot of new streams, rowed and paddled new places, taken more woods walks, volunteered with Trout in the Classroom, visited new playgrounds, eaten at different restaurants, noticed three different kinds of trilliums in the woods, foraged, photographed different places, and have walked and driven new routes in daily routines.

    I ended my post last year with an intention:

    What do I want my thirty-sixth year to look like?

    More local and seasonal focus. More time outside. Daily connection with Amanda and Charlie. Take advantage of ideas/inspiration/excitement when it strikes. Keep making things.

    How did that go?

    • More local and seasonal focus.
      • This went very well (see above), and I will keep it going this year.
    • More time outside.
      • This was the highlight of my sabbatical. I spent almost every day outside for three months. Beyond that, we spent as much time outside with Charlie as we could. The extreme cold this winter put a damper on that, but we still bundled up and went out when we could.
    • Daily connection with Amanda and Charlie.
      • All-in-all this went well, but I can still improve here. Recently work has accelerated and I’m working more in the evenings, and I need to set a better boundary there. This winter has been hard with how cooped up we’ve been, and I’ve been losing my patience with Charlie, who probably just needs to run around outside and play in a completely unstructured way, but can’t. I need to work on that.
      • Amanda and I recently bought Bricks to help us reduce our screen time. That should help.
      • Amanda and I have been more intentional about going out for lunch dates, which has been wonderful. Dinner dates would be great, but finding a sitter is hard, so at this stage of life lunch dates are where it is at.
    • Take advantage of ideas/inspiration/excitement when it strikes.
      • Pretty good on this one. We’ve made house improvements, made things, and taken trips this year by acting when inspiration strikes instead of sitting on it. I’ve also read some great books by buying them when they catch my interest, instead of adding them to a black hole “to read” list.
    • Keep making things.

    One other thing I want to note: It has been great getting back into photography these last two months after a decade hiatus.


    What do I want my thirty-seventh year to look like?

    I want to prioritize my health, prioritize being present with Amanda and Charlie, spend as much time outside as I can, keep making things, and keep blogging.

    A few ideas for this:

    • Staying consistent with CrossFit. Illness and snow days have derailed that this month, but next week is a new week.
    • Turning more small bowls in the workshop. Keeping a list of workshop ideas. Like those candleholders I saw in Woodstock last weekend!
    • Themed photo walks with Charlie.
    • Taking Charlie with me to sample streams for the Big Apple Brook Trout project.
    • Bricking my phone more.
    • Just hitting publish.

    Previous birthday posts: 35, 34, 33, 32

  • Weekend in the Catskills


    Amanda, Charlie, and I spent last weekend in the Catskills, exploring the Phoenicia and West Kill areas. (Or, depending on how you look at it, the Esopus and West Kill watersheds.)

    I took along my camera and tried to capture some of the beauty of that region in the winter.

    Woodland Valley Rd bridge over the Esopus.

    I love these signs and have a growing collection of photos of them.

    Dusk.

  • Escarole White Bean Soup


    This week’s bean dish was a white bean soup with escarole and ham.

    I was going to make a vegetable soup with yellow eye beans, but when I was in the grocery store, I spotted escarole, which I don’t see in many stores around here, so I bought a head of it and resolved to make some soup. I hadn’t cooked escarole before, so I was excited to give it a shot.

    I started with Rancho Gordo’s recipe from their new book:

    ESCAROLE SOUP WITH GIANT WHITE BEANS AND COUNTRY HAM – Rancho Gordo
    A favorite soup from our newest book, The Bean Book. Escarole, or broad-leaved endive, is another bitter vegetable that is often used raw. In this soup, you’ll wilt the escarole just a little so it retains some of its body and releases more flavor. To make this dish vegetarian, omit the ham. 3 tablespoons olive oil or
    www.ranchogordo.com

    I made two small tweaks to the recipe:

    1. I used a small cottage ham instead of country ham. I used the whole pound of ham, so I increased the amount of other ingredients to keep the ratios the same.
    2. I used duck stock, which is what I had. It was rich and delicious. I think I would have preferred a nice vegetable stock, though. I’m running very low on stock right now. I need to make more. The duck stock was the last container of any homemade stock I had in the freezer.

    This was a relatively quick recipe to make (for a bean soup). I soaked the large white lima beans that morning to speed up the cooking time. Once those were cooked, everything else came together in about 30 minutes.

    This was good, but probably not going into the standard rotation. Worth having once a year when escarole is in season, though. Or when you have some leftover ham.

    Next time, I’ll use vegetable stock and add more red wine vinegar than the recipe calls for.

  • Blizzard


    I was curious why Fern last month wasn’t a blizzard and the one this week was.

    Apparently, the wind!

    From the National Weather Service:

    Blizzards are dangerous winter storms that are a combination of blowing snow and wind resulting in very low visibilities. While heavy snowfalls and severe cold often accompany blizzards, they are not required. Sometimes strong winds pick up snow that has already fallen, creating a ground blizzard.

    Officially, the National Weather Service defines a blizzard as a storm which contains large amounts of snow OR blowing snow, with winds in excess of 35 mph and visibilities of less than 1/4 mile for an extended period of time (at least 3 hours).

    We ended up getting 15 inches of snow this time. Last month we got 16 inches. Though the amount of snow was the same, this one felt different. The 50mph winds plastered snow to the sides of our house and vehicle, and created major drifts. We couldn’t see beyond our yard for hours due to the low visibility.

    Thankfully our power stayed on, though I was prepared and got the generator out and ready to start given the circumstances.

    The snow from Fern had finally melted by last Friday.

    It piled up against the back door.

    Charlie got to try out his new snowshoes.

    Behind-the-scenes view.

    After shoveling.

    We made an igloo, then ate lunch in it the next day. This storm generated two days off from school.

    Nice long shadows on the fresh snow.

    A short venture into the woods.

    From a quick tally of the what I remember, we’ve gotten close to 50 inches of total snowfall so far this winter. More coming the next couple days.

    I’m tired of shoveling, but I’m glad we’ve gotten persistent snow this winter. The last couple years were mild. Seasonal variety is great, and I’m glad Charlie gets to experience the full breadth of our seasons. Playing in snow above your knee is magical when you are a kid.

  • FediBoost Plugin

    Brandon Kraft built a WordPress plugin that solves a core frustration in the fediverse: Sites have their own identities, but most of us already have separate identities in the fediverse, too. FediBoost automatically boosts posts from your site’s identity from your own identity in the fediverse.

    Kraft wrote about it here:

    Introducing FediBoost – The Journeyman – Brandon Kraft
    kraft.blog

    It does what it says on the label, and it even works with custom post types if ActivityPub is enabled for them.

    I tested a pre-release, then pitched in and added CLI support. I’ve been using it here for about three weeks.

    If you federate your blog posts with the ActivityPub plugin and want to automatically boost them from your main account, give it a try!

  • On using AI in blogging


    Right now, I don’t use AI to compose my blog posts. I sometimes use AI in the pre-writing ideation stage and later in the editing/review stage, but not the composing/“putting pen to paper” stage. Six months ago I might have made “not using AI in personal blogging” a principled stance, but my thinking has evolved since then and it is now more of a personal preference.

    I think the most important part about blogging under your own name is that you are able to completely defend your work. I think provenance matters less than the ability to defend it. So few people are truly original writers. Most of us borrow phrases, sentences, and structure from other things we’ve read, often without realizing it. We get input and edits from peers, too.

    AI might be an extension of that. I don’t see AI composition as fundamentally different from ghostwriting. There is an awful lot of handwringing about AI-generated writing, but ghostwriting is not controversial in the same way, and the end result is the same: someone else wrote it.

    There is something to be said for personally grappling with the ideas and the words you put on the page. But what is the goal there? We don’t struggle for struggle’s sake. We struggle with words, whether ours or someone else’s, in order to understand their meaning and implications. When we read or hear things that ring true for us, we often adapt, remix, and make them our own. The crucial step in-between reading/hearing and adopting is wrestling with it.

    What about developing and writing in your own voice? Given a decent sample set, AI can already convincingly mimic “your voice”, so that is not a good heuristic.

    When you publish a post, you must be willing to defend it line-by-line, just as a publisher of a newspaper must be willing to defend what is published in their paper. Though on your personal blog, you are the de facto editor, fact checker, and legal review. If you can’t point to a line and say why it is in your post, it must be cut. That is true whether you wrote it or AI wrote it.

    What do you think?

  • Red Beans and Rice


    As we are coming up to Mardi Gras/Fat Tuesday, this week’s bean dish was Red Beans and Rice. This Tuesday is looking a little busy for us, so we opted to make it this weekend and invited some friends over for dinner.

    It was Valentine’s Day, so Amanda and Charlie set the mood with hand-painted heart decorations.

    For an appetizer we put out a cheese board and I made some roasted nuts tossed with butter, brown sugar, rosemary, salt, and smoked paprika. The classic Union Square Cafe bar nuts.

    For dessert we served a King Cake from Haydel’s.

    I used the Rancho Gordo recipe as a base (I’m loving their new Bean Book), but made it my own.

    New Orleans Red Beans and Rice Recipe – Rancho Gordo
    This New Orleans Red Beans and Rice Recipe is a main dish made with Rancho Gordo dried heirloom Domingo Rojo Beans, rice and Andouille Sausage.
    www.ranchogordo.com

    The biggest change to the recipe is that I added some of my home-cured tasso ham to the trinity at beginning. I added some carrot, too. I know that isn’t traditional, but I like it.

    The Rancho Gordo domingo rojo beans are fantastic. They hold their shape nicely and create an unctuous broth.

    The dish took about four hours from start to finish, though most of it was simmering time with occasional stirring. I’d say about an hour of that was active chopping, stirring, and watching time.

    It was fantastic overall, though I think the weakest point may have been the andouille. I haven’t found a good local source, so I picked up some standard Aidells at the grocery store. I’ve heard Barb’s Butchery in Beacon makes their own andouille, so I think I’ll run up there to pick some up next year.

    Laissez les bons temps rouler!

  • made with love


    , ,

    Amanda and her friend Megan have been working on a project to support the local immigrant community impacted by ICE.

    Hi friends. We’re excited to share a little something we’ve been working on for the past few weeks — after bedtime, during swim class, and on the couch while our families watch Cars (Charlie) or Frozen (Miles) for the 10 millionth time.

    The world feels so heavy right now, but we believe that little acts of love compound.

    If you’re in the Westchester area, we hope you’ll pick up a wand for your kids. If you’re not, we hope you’ll reach out for our free DIY guide to make your own … and maybe you’ll sell an extra or two. And if you’re not crafty, we hope you’ll feel inspired to use your own unique gifts to spread some love. We can’t wait to see what you do.

    With love,
    Amanda & Megan

    Here are a few more photos of the heart wands they are making:

    Their DIY guide:

  • LaTeX to Gutenberg conversion


    Do any mathematicians read my blog? Perhaps one or two of my former math professors or classmates?

    At work, I forked an old package that converts .tex files to WordPress-compatible HTML and updated it to generate modern Gutenberg markup for the WordPress block editor.

    I’d love help testing it out and identifying the rough edges.

    Here it is:

    GitHub – a8cteam51/LaTeX2Gutenberg: A port of LaTeX2WP to work with Gutenberg
    A port of LaTeX2WP to work with Gutenberg. Contribute to a8cteam51/LaTeX2Gutenberg development by creating an account on GitHub.
    github.com

    Here a PDF of the example.tex file in the repo generated from the popular pdflatex package, along with the generated Gutenberg output for comparison.


    Look at the document source to see how to strike out text, how to use different colors, and how to link to URLs with snapshot preview and how to link to URLs without snapshot preview.

    There is a command which is ignored by pdflatex and which defines where to cut the post in the version displayed on the main page

    (more…)
  • Action Scheduler clean up


    Action Scheduler is a library for triggering a WordPress hook to run at some time in the future. It is used in a lot of large plugins to handle background processing of large job queues. It is an extremely useful tool. Unfortunately, it is also easy for bugs to make the queue or logs explode in size.

    I had a fun runaway action scheduler issue to deal with at work today that ended up creating 26.7M rows in the wp_actionscheduler_actions table before we patched the bug, so I had to figure out how to clean it up. I’m blogging about what I learned so future me can doesn’t have to figure it out again.

    Action Scheduler Defaults

    By default, after every run, Action Scheduler cleans up completed and canceled actions older than 31 days. It does not clean up failed actions by default. Failed actions will stay in the wp_actionscheduler_actions table until manually cleaned up.

    You can change the default retention period or statuses that are cleaned up with filters:

    action_scheduler_default_cleaner_statuses

    action_scheduler_retention_period

    Action Scheduler CLI

    wp action-scheduler clean

    wp action-scheduler clean --batch-size=500 --batches=1000

    wp action-scheduler clean --status=failed --batch-size=50 --before='90 days ago'

    Bash

    Bash and sql to delete 50K rows at a time with 2s delay after each delete, pausing to re-assess every 1M rows:

    for i in $(seq 1 20); do echo "Batch $i/20..."; wp db query "DELETE FROM wp_actionscheduler_actions WHERE status = 'canceled' LIMIT 50000;"; sleep 2; done

    Truncate

    The fastest option.

    1. Export pending actions
    2. TRUNCATE TABLE wp_actionscheduler_actions;
    3. Import pending actions

    Processing backed up queues

    1. First try https://github.com/woocommerce/action-scheduler-high-volume
    2. When all else fails, use the CLI, increase the batch size, --force, and if it is big enough to have multiple runs going, make it more efficient by having each run focus on a different group or hook.
  • Big Apple Brook Trout


    Trout Unlimited is doing a citizen science project in our area: Environmental DNA sampling to locate hidden brook trout populations in the NYC suburbs: Fairfield, Westchester, Putnam, and Long Island.

    Their plan is to cover 400 miles of streams, starting with locations where there was historic Brook Trout presence, but no recent state sampling. Then expand to include other streams to find previously unknown populations. This will help guide TU in restoring and protecting the habitat for these native salmonids.

    Gerald Berrafati of the Mianus chapter is leading the effort. I met him out fishing the Amawalk last spring, so I decided to go out to his presentation at the Mianus chapter’s meeting to learn more. (I’m a part of the Croton chapter next door.)

    Big Apple Brook Trout — Mianus Chapter of Trout Unlimited
    www.mianustu.org

    They’ve already taken 130 samples and confirmed brook trout populations in 21 streams, with early signs that number could be as high as 40, including an unknown salter spawning population on Long Island. That is incredible in such a densely developed region.

    The way eDNA testing works:

    • Collect a water sample
    • Filter it to capture organic material
    • Extract and amplify DNA via PCR
    • Match against reference databases to identify species
    • Tag the results with GPS coordinates and add to a database

    You can learn more about it here:

    eDNA Primer – An introductory knowledge base on environmental DNA
    edna.dnabarcoding101.org

    The testing is so sensitive that it can detect fish a mile or two upstream of the sampling location. That is pretty wild. It only can tell you absence/presence though, nothing about the size of the actual population. It needs to be followed up with stream assessments, electro-fishing, and spawning surveys.

    Another citizen science tool TU has is the RIVERS app, where folks can submit on-the-ground information about a stream while they are out fishing. A geotagged photo of a brook trout is a great way to confirm presence. You can also tag old dams, erosion sites, etc. I downloaded it and will use it this season.

    I signed up to help in Westchester and Putnam. I’ve asked other fly fishers where they’ve caught brook trout in the the area and have some ideas of places to check out. Charlie and I will go out on some hikes to take water samples in the spring once things thaw out. I need to get him some waders!

    TU gets their eDNA testing kits from Jonah Ventures. I’m going to buy one separately to sample Dickey Brook in Blue Mountain Reservation near our house. It primarily runs through protected land, has decent flows year-round, and has some macroinvertebrate life. I want to know what else is in there!

    Aquatic eDNA kit (fish + phytoplankton) – Jonah Ventures
    Using the JonahWater aquatic environmental DNA kit, you can reconstruct aquatic assemblages in your local water body! By filtering water and then sequencing the DNA on the filters, we can tell you the species of fish and algae that live in your neighborhood. Simply collect water in the syringe, push it through the filt
    store.jonahventures.com
  • The blog post I think about monthly


    I’ve thought about this post from I Quant NY at least once a month for the past decade. I finally found the link again over the weekend. Here it is:

    Such a simple data analysis, essentially sorting a column in a spreadsheet, revealed a problem with how parking near bike lanes and hydrants are marked. This post led to real world changes (repainting this and other areas to make it clear not to park there.)

    This post had an impact on my life.

    I found it during a creative dry spell. It inspired me to pick up my interest in data analysis and visualization and start blogging again, which led to a post that ended up getting me a job at a startup:

    Sortly after that is when I started experimenting with implementing Sol LeWitt wall drawings with D3.js. The I Quant NY post was the impetus I needed to break that dry spell.

    It also reframed data science a bit for me. You can get real world insights just by asking simple questions and looking in places nobody else is looking. You don’t always need fancy models, sometimes you can just sort a spreadsheet in different ways.

  • Back cover photo in 2026 issue of Tenkara Angler

    The 2026 print issue of Tenkara Angler went live today:

    One of my photos from the fly swap post is on the back cover. Exciting!

    If you are into tenkara, the print issue is full of good stuff. Worth checking out.

  • Creamy Rio Zape Bean Dip


    This week’s bean dish is an appetizer for the Super Bowl party we are going to this afternoon.

    I doubled the recipe on this Rio Zape bean dip from Rancho Gordo:

    Rio Zape-Felicidad Heirloom Bean Dip Recipe – Rancho Gordo
    This Rancho Gordo Rio Zape Bean Dip appetizer recipe blends our heirloom beans and spicy Rancho Gordo Felicidad Hot Sauce.
    www.ranchogordo.com

    I’ve made a couple different recipes with Rio Zape beans, and they are the tastiest bean varietal I’ve tried so far. Velvety texture and a pinto-y flavor with hints of coffee and chocolate.

    From Rancho Gordo:

    In 1935, Rio Zape beans (also known as Hopi String beans), were found in the Ancestral Pueblo cliff dwellings of the Zuni Pueblo in New Mexico. Then, in the 1960s, archaeologists found them in the excavation of a sealed tomb in Rio Zape, Durango, Mexico. It’s believed that the beans were sealed in the tomb around 600 AD. A beautiful bean with a mysterious history!

    I added Mexican-style chorizo, but I think it would completely stand alone without it.

    As an aside, I’m starting to get the hang of cooking dried beans on the stove and reducing the pot liquor down to keep that flavor.

    We are serving this with tortilla chips.

    Early sampling at home is showing this to be a very tasty dip, probably one that we’ll make again in the future, perhaps in a vegetarian or vegan variant, depending on whose house we are going to.

  • Three Amaro Nonino cocktail recommendations


    I love amaro, and Amaro Nonino is a good gateway amaro if you haven’t yet explored the category.

    Here are three excellent cocktails in which to enjoy Nonino. All of these are in books on my shelf, but alas, you can’t link to books, so I linked to online sources.

    Fallback

    This is a wonderful autumn and winter cocktail by Sasha Petraske. Though a lot of people enjoy applejack in the fall, I’d argue it is traditionally a winter drink because the process of “jacking” is essentially leaving buckets of the liquor outside and removing the ice that forms on top, thereby jacking up the alcohol content by removing water.

    • 1 oz rye whiskey (Rittenhouse)
    • 1 oz apple brandy (Laird’s Straight Apple Brandy)
    • 1/2 oz sweet vermouth (Carpano Antica)
    • 1/2 oz Amaro Nonino
    • 2 dashes Peychaud’s bitters
    Fallback
    cocktails.pnewman.com

    Just the Paperwork

    This is from Sother Teague, the brilliant mind behind Amor y Amargo, my favorite bar in Manhattan. It is technically a scaffa, not a cocktail, but English is fluid enough the meaning of the word has expanded since it was originally coined. So, close enough.

    It is room temperature, so great for winter.

    • 1.5 oz Amaro Nonino Quintessentia
    • 1 oz Cognac
    • 1 oz Cocchi Americano (though I often use Cap Corse)
    • .5 oz water (room temperature)
    • 2 dashes orange bitters
    What the Scaffa? Just the Paperwork cocktail & What longer replacement cycles for commerce platforms means for the commerce tech market
    Issue No. 12 – Exploring the ramifications when commerce platforms are no longer leading the charge.
    cocktailsand.substack.com

    Spaghetti Western

    This comes from Death & Co, another great bar in Manhattan (and actually next door to Amor y Amargo!). A variation on the Oaxaca Old Fashioned.

    • 1 oz Reposado Tequila
    • ½ oz Mezcal
    • ¾ oz Amaro Nonino
    • 1 dash Orange bitters
    • Garnish: grapefruit twist
    Spaghetti Western Cocktail – The Drunkard’s Almanac
    The Spaghetti Western cocktail is a variation on the Oaxaca Old Fashioned, and like that drink emerged from Death & Co. in New York. Recipe here.
    drunkardsalmanac.com

    Enjoy!

  • Using AI for email triage


    For the first time in a decade, I switched email apps. I’ve been a longtime Airmail user, but I moved to Spark for both macOS and iOS.

    Spark Mail — Smart. Focused. Email.
    Spark helps you take your inbox under control. Instantly see what’s important and quickly clean up the rest.
    sparkmailapp.com

    The AI features are what pushed me over the edge. The ability to prompt things like these have been incredibly helpful for keeping my inbox tidy:

    • “Archive all marketing emails older than 14 days”
    • “Show me all marketing emails I haven’t read that I probably want to unsubscribe from”
    • “Show me recent personal emails I haven’t replied to”

    It is also nice to ask questions and get answers based on email as context instead of having to rely on keyword search. For example:

    • “What book did _____ recommend to me recently?”
    • “Get me all information for my trip to _____ next week.”
    • “What’s the latest update on _____ ?”

    I don’t like AI for creative work, but I love it for analysis, debugging, triage, and rote tasks. I’ve been using AI to triage work ticket queues, and it hit me one evening that I should be using this power for my own email, too. I hate email, and I want to spend as little time on it as possible. AI helps with that.

    The UI is nice, too.

    Overall, Spark blows Airmail and Apple Mail out of the water. I can’t believe Apple is so far behind on their mail app, given that they’ve had a headstart with on-device ML and a gigantic user base for so long.

    Setapp users will notice the Plus version of Spark is included.

    Security concerns with having AI “read” your email? First, Google already “does” that. Second, use a different inbox (like Proton) and PGP for things you need secure. Or move it to Signal. Or go for a walk in the woods without your phone.

  • Uniqlo Crossbody Bag

    When I’m out on photo walks, I like to have both a wide lens and a zoom lens with me, but I don’t want to carry my big gear bag.

    I couple weeks ago I picked up a Crossbody Bag at Uniqlo for $25, intending to use it on park outings and woods walks with Charlie (backup clothes, some wipes, a small first aid kit, water, and a snack). When we got home, I discovered that it fit my 70-200mm zoom lens perfectly, so now it is a photo walk bag, too.

    It doesn’t have any padding, but that is fine for walks. It isn’t a travel bag, just an outing bag. The zipper across the top makes changing lenses easy. Plenty of room for extra batteries and a lens cloth, too.

    Here it is. Left is has my 24-70mm inside, right it has my 70-200mm inside.

  • Automatically fixing links with the Wayback Machine

    Broken links on the web are inevitable, but losing valuable context doesn’t have to be.

    I’ve been working on a plugin at work, in conjunction with the Internet Archive, to help combat link rot on WordPress sites.

    • The plugin scans your content for outgoing links and checks the link statuses on an ongoing basis.
    • If a link is broken 3 times in 9 days, it gets redirected to a snapshot on the Wayback Machine if there is one.
    • The link continues to get checked, and if it comes back, the redirect stops.
    • The plugin also archives your site’s content on the Wayback Machine, future-proofing links that point to your site, too.

    I consider this a “set it and forget it” plugin. One it is running, you don’t need to take any action. It works quietly behind the scenes. I’ve been running it on this site for months. Check out the links in Making Rosin and Fly Tying Wax… one of them is broken, and because it redirects to the Wayback Machine, you’ll be able to tell which one it is.

    After a soft launch in October, the announcements went out today. I wrote the one for Automattic:

    Fixing Links with the Wayback Machine – Automattic
    Automattic is excited to collaborate with the Internet Archive to launch the Internet Archive Wayback Machine Link Fixer, a new free WordPress plugin that keeps your links alive.
    automattic.com

    One went out at the Internet Archive, too:

    Preserving the Open Web: Inside the New Wayback Machine Plugin for WordPress  | Internet Archive Blogs
    blog.archive.org

    Glynn Quelch is the main person building it with me, and he has been an incredible collaborator. Thank you for your help, Glynn!

    If your site runs on WordPress, consider installing the plugin to protect your links.


    Update: TechCrunch picked it up!

    The Wayback Machine debuts a new plug-in designed to fix the internet’s broken links problem | TechCrunch
    Should a linked web page go offline, the new feature will then redirect readers to the archived versions, so that there is no drop in service. The tool also archives a user’s own posts, helping to ensure their longevity.
    techcrunch.com

    Other coverage:

  • Hudson Ice Floes

    After picking Charlie up from school yesterday, we went on a drive to photograph the ice floes on the Hudson River. One of my favorite things when we lived on the Yonkers Waterfront was seeing the ice floes in the middle of winter. We haven’t had much ice the last couple years, so I was glad to see some form during this cold snap.

    Looking across at West Point from Cold Spring.

    Storm King.

    This brought to mind the scene in Mark Helprin’s Winter’s Tale where Virginia Gamely skates down the frozen-over Hudson from Lake of the Coheeries to New York City with her infant on her back. She paused for a rest at the bend near Constitution Island, right behind me when I took this photo.

    I should reread Winter’s Tale next winter.

    Looking north to the Bear Mountain Bridge as the sun dips low in the sky.

    We enjoyed hearing the ice chunks smash together as they floated down the river.

    We couldn’t get the view we really wanted from up on Bear Mountain Bridge. We parked and tried to walk across, but the walkway on the north side still had a foot and a half of snow on it. Charlie suggested we could just walk on top of the snow, but that would have put dangerously high relative to the guard rails, which didn’t feel safe. We settled for this obstructed view instead, and vowed to return during the next cold snap.

    A view from the scenic turnout on the goat path coming down from Bear Mountain Bridge.

    We had a great view of Iona Island.

    The Peekskill waterfront from Charles Point. All of Peekskill Bay is solid ice. Only the navigation channel on the west side of the river by Jones point is open.

    Charlie brought his camera, too.

    He was mad I wouldn’t let him walk down the railroad tracks around the bend. It is an active freight route, and a mile-long train rolled through about 15 minutes later!

    It feels good to be taking photos again, and it was neat to see these parts of the river covered in ice. I’ll try to remember how cold we were today when I’m out there sweating in the guideboat this summer.

  • How NYC handles snow


    It is common knowledge that NYC puts blades on garbage trucks to plow snow:

    One thing I didn’t consider is that switching to electric garbage trucks impacted their effectiveness as snow plows.

    My friend Trevor, who designs and installs efficient energy systems in buildings in NYC, told me a few other things this weekend about how the city handles snow that I didn’t know.

    The Department of Sanitation melts snow using huge snow melting machines because there is nowhere else to put it. Trevor needed a 10ft high pile of snow moved this weekend in order to place a crane over structural supports in the subway system, so the sanitation department brought in loaders, scooped the snow into dump trucks, and hauled it a few blocks away to be melted in giant hot tubs. Here’s an article from the NYPost.

    The hot tubs – which can melt roughly 60 to 120 tons of snow per hour – are stationed at sites like Broad and Water streets in lower Manhattan, where football field-sized mountains of snow are dumped into the melting tubs at 38 degrees Fahrenheit.

    A video:

    Trevor also mentioned that the MTA uses old jet engines mounted to old work cars to blow snow out of yards and to help melt ice on the third rail. Untapped New York has a good article about it:

    How NYC Subway, LIRR, and Metro-North Responds to Snowstorms – Untapped New York
    Winter Storm Gail is starting today, dumping a foot or more of snowfall. Here’s how the NYC subway, Long Island Railroad and Metro-North prepare for storms.
    www.untappedcities.com