Rest in Peace, Nick Nikolaidis


Nick Nikolaidis, aged 78, of Bethel, Vermont, passed away peacefully on Friday, March 29. He was born on May 31, 1945 in Athens, Greece to Anna and Miltiatis Nikolaidis. 

Nick immigrated to America in 1963. He embodied the immigrant’s American Dream, arriving in New York City with $20 in his pocket. His first job was at Morgan Guarantee (Later JP Morgan/Chase). In 1966, Nick met Heidi Boepple on a blind date in New York City. They married in 1968. 

While driving through New England one weekend, Nick and Heidi became enamored with central Vermont. Rather than spending their savings on a planned vacation to Aruba, they bought a one-room cabin in Bethel. It was their primary residence for more than fifty years. They owned and operated the Buckboard Restaurant in Randolph in 1976, and later the Black Forest Café and Caterers in Bethel. Nick worked in the foodservice industry for his entire adult life, including time spent catering at the Green Mountain Horse Association in South Woodstock, VT and weddings, parties, and auctions. 

Nick’s favorite pastime was collecting postcards. He was an active member of several postcard and stamp clubs. He can be fondly remembered sharing his love of this hobby at the Bethel Forward Festival. He was a founding member of the Bethel Business Association, a longtime member of the Bethel Historical Society, and an active member in the Bethel Town Hall restoration project.

For the past 8 years Nick showed his love and dedication to Heidi through his diligence and care after her stroke. She was able to live in her own home for the majority of that time because of Nick’s unwavering devotion.   

He is survived by his wife, and his son, Peter, whom he referred to as his “pride and joy.” 

A memorial service will be held at the United Church of Bethel at 2 pm on Friday, April 19th, 2024 with Pastor Thomas Harty officiating.  A reception will follow at the White Church. The service will also be livestreamed via YouTube.

The family would like to extend their heartfelt thanks to Gifford Medical Center, Dartmouth Hitchcock Medical Center, and the Cedar Hill Nursing Home for their support and care during Nick’s final days. Special thanks to Craig and Tonia Pratt for their years of loving care for Nick and Heidi. 

Nick showed care by providing delicious food (especially spanakopita) for his loved ones and community. His passion for good food, wine, and the Bethel community will be sorely missed.

Giving FoundryVTT Another Chance (thanks to SSH)

A few years ago, during peak COVID, I was playing role-playing games (like Deadlands and Dungeons & Dragons) 3-5 times a week. I was glad to reconnect with my favorite hobby as a kid, and also to reconnect with friends with whom I’d lost touch.

Initially, I played on Roll20.com because that was where my D&D friends were. But some time later, my Savage Worlds (mostly Deadlands) friends introduced me to FoundryVTT.com. I was blown away at how polished the UI was, and the great support for Savage Worlds that Roll20 lacks to this day.

But Foundry was not without its drawbacks. I won’t go into a comparison of the two platforms – there are dozens of those just a Google or YouTube search away if you want them. The one drawback that Foundry had which Roll20 could not claim was simple: every time I tried to upgrade Foundry from version 9.something to 9.something+1, it broke my games. I reached out to Foundry’s “support” on Discord, which was a complete joke. I was told by one lurker in the channel that he could not help because I was running on Windows. So I backed up my configuration, ported it over to a Linux server, and… reproduced the problem. Still no help was to be found.

Eventually, I gave up. Despite having invested hundreds of dollars and – more importantly – dozens of hours configuring Foundry to my and my friends’ liking, I gave up and went back to Roll20.

And almost immediately questioned my decision. Sigh. After a few months on Roll20, and seeing more Savage Worlds games and modules available for Foundry, I decided to give it one more shot. After all, there was a Mac version now, and I could hack at it locally on my MacBook, so why not?

It took a couple hours, but I eventually successfully migrated my old Foundry 9.x installation and worlds to version 11. I was thrilled to see that – somewhere between 9.x and 11.x, the bug I experienced which broke my worlds during upgrades – had been fixed!

But I had one lasting problem – I like having my Foundry server local on my laptop (especially when working offline on an airplane or in Vermont when the power goes out), but I need a way to let my friends play on it too. And I don’t want to have to remember to back up and restore and move my world around from my Mac laptop to a Linux or Windows server, having to deal with path differences, and re-licensing it every time I start the server.

The solution? I set up SSH forwarding to redirect traffic sent to my Foundry server on to my Macbook.

ssh -i my_ssh_key.pem -R my.foundry.server:30000:localhost:30000 -p 2222 [email protected]

This command allows you to access a server running on your local machine via port 30000 on the remote server my.foundry.server, by creating a reverse SSH tunnel through the remote server.

  1. ssh: The command to initiate an SSH connection.
  2. -i my_ssh_key.pem: Specifies the private key file (my_ssh_key.pem) to use for authentication. This key should correspond to a public key that’s authorized on the remote server.
  3. -R my.foundry.server:30000:localhost:30000: This creates a reverse tunnel that forwards connections to port 30000 on the remote server (my.foundry.server) to port 30000 on your local machine (localhost). This is useful if you’re running a Foundry Virtual Tabletop server on your local machine and want to make it accessible from the remote server’s address.
  4. -p 22: Specifies that the SSH connection should be made to port 22 on the remote server. This is useful if the SSH server on my.foundry.server is configured to listen on a non-standard port.
  5. [email protected]: Specifies the username (ubuntu) and hostname (my.foundry.server) of the remote server. You should replace ubuntu with the appropriate username for your remote server.

Now, as long as I can reach my foundry server (on port 22 in this example) and have a decent speed connection, my friends can play on my server while I have the convenience of having it local with me wherever I go.

Cheap Marathon – 2023

Last weekend I completed my second “classic” marathon. That is to say, a plain 26.2 miles. It was in Derry, NH, and is known as the “Cheap Marathon.” They don’t spend a lot on frills, that’s for sure. Just water and Gatorade at the aid stations, and bananas and yogurt at the finish. For completing, no medals – just a ribbon that says “I ran 26.2 miles and all I got was this lousy ribbon.” It was worth it.

I shaved several minutes off my 2021 Baystate Marathon time. My time was 4:26, compared to 4:38 in 2021. However this does not factor in the 4+ minutes where I stopped to call 911 because a gent in front of me collapsed along the trail. Turns out he had a pacemaker that thought he was working a little too hard and he needed to be stopped. It was dramatic. Despite my Apple Watch Ultra failing me (which is a topic for another post), it came through for him. Within seconds I was on with a 911 operator, who dispatched EMTs to the scene. Once he was in good hands, I continued my run.

Cheap Marathon Complete

I am happy to report that my knee was fine the entire way – not so much as a twinge. So I am comfortable saying this has healed.

Now… what to run this fall…?

Running Update

I’m now twice officially a runner. Why? Because statistically – I read somewhere – nearly 100% of runners suffer an injury. Last year I had a mild stress fracture. This year, I apparently had a torn meniscus. Hurray. So I’m double-officially a runner now.

It’s been five weeks. I’m in PT. It’s going great and I’m returning to running now.

Running Update 2022

Running continues to be my primary focus outside of work. Okay, I admit it – on most days I could leave out the “outside of work” qualifier. My long runs continue to approach marathon length. I recall how in 2019 I thought “maybe I’ll get to the point where I just run a half marathon equivalent (13.1 miles) twice a week and that will be my training schedule.” Now I’m back to the point where I’m doing 30-40+ miles a week as my prep for the Vermont 50 is peaking. It feels great. I love the continued training, challenge, and improvement.

2022 June July Running Log

Apple watchOS Breaks External Heart Rate Monitor Connectivity

I have owned an Apple Watch since Series 2. I also had a Series 4 with cellular, and now own a Series 6, also with cellular. I bought the Apple Watch because it was rated as being the most accurate general purpose, wrist-based fitness tracker. There are certainly other options, and better ones just for running, but I went with Apple because I am fairly comfy in their ecosystem.

I’ve known for some time that wrist-based heart rate monitors (HRM) are inaccurate. My Apple Watch will show me at 180 bpm when I am working moderately/hard. My maximum heart rate is around 173 bpm, so, no. Just no.

As of watchOS 7, it’s like the Watch does not even try anymore. I will start my run and it’s a good half mile before it even can show a reading. When it finally does, it is wildly inaccurate. At a friend’s suggestion, I bought a Wahoo TICKR FIT a couple years ago. I wear it on my upper arm, and it gets within 1-2 bpm of what a chest strap Wahoo TICKR X gives. This is good enough for my purposes. For comparison, when the Apple Watch says I’m at 180 bpm, the Wahoo TICKRs will show me being somewhere in the 150s.

As of watchOS 8.4, things got worse. The Bluetooth connection between the Watch and three different HRMs (Wahoo TICKR Fit, Wahoo TICKR X, and Polar H10) all lose their connection to the watch within seconds of starting a workout. They periodically reconnect, but then continue to lose the connection. The end result is periods of accurate readings along with equal periods of inaccurate readings. The result is the same – useless, garbage data. On the Apple Watches, I test by pairing the HRM and using the Workout app. On my iPhone, I pair the devices and tested with Strava or the manufacturer’s apps.

To troubleshoot this, Apple sent me a new Apple Watch. It is running watchOS 7.6.1. While this version is buggy, it works and will reliably hold a connection with any of the three HRMs I have tried. When I paired a couple of the HRMs with a friend’s Apple Watch, running watchOS 8.4.2, she experienced the same, erratic and inaccurate behavior. So at this point, I have tried the combinations shown in the following table.

Apple DeviceWahoo TICKR XWahoo TICKR FitPolar H10
Series 6, Cellular, watchOS 8.4, 8.4.1, 8.4.2XXX
Series 4, Cellular, watchOS 8.4.2XX
Series 6, Cellular, watchOS 7.6.1
iPhone 13, iOS 15.3.1
✓ = Works as expected. X = Does not work reliably. – = Untested

I have gone well above and beyond what any customer should have to do to troubleshoot this. I have reported my findings to Apple and Wahoo at my own time and expense. And I have gotten zero positive results.

After weeks of troubleshooting, Apple reported back that the problem is with the third-party manufacturers. Apple will not work with me further to address the issue. Apple said they would work with the manufacturers, but not with me. As I only have the Wahoo devices (returning the Polar, since it behaved the same), that leaves them. Wahoo maintains no one else has reported this behavior, even though I have clearly demonstrated the issue with two of their products on two separate Apple Watches.

Wahoo’s website says that their products work with the Apple Watch.

https://www.wahoofitness.com/devices/heart-rate-monitors/tickr-fit-optical-heart-rate-monitor

So what’s a guy to do? I have clearly demonstrated the problem, but no one wants to own it. At this point, if I want reliable metrics, I need to stay on an old, buggy, insecure version of watchOS. I didn’t even get into the fact that I cannot activate cellular service on the replacement watch running watchOS 7.6.1. I’ll save that for another post.

UPDATE: As of watchOS 8.5 (2022-03-14) everything seems to be working again normally.

UPDATE: Nope, nope. As of 2022-03-17 it happened again.

Running Update 2022 – Stress Fracture, Hampton Half Marathon, Non-Minimalist Shoes, and an Ultra

Hampton Half Marathon Finish

A few days after my first marathon last year, my right foot swelled up. Massively. I took a couple days off, and did (relatively) short runs. The foot hurt and would swell up like a baloon. I self-diagnosed as having a stress injury (fracture?) and accepted I may have to stop running for the rest of the year. I was able to get an appointment with a sports orthopedist at MGH, and he prescribed physical therapy. X-Rays showed no (remaining) fractures.

How to Not Look Dumb in Online Meetings

If you’re like 99% of the civilized world, you’ve been on a Zoom, WebEx, GotoMeeting, Hangout, Meet, or other similar platform within the last two hours. Even though it’s been just over a year since the first reported case of COVID-19 in the US, I figured it would not hurt to give some folks some best practices on attending online meetings.

Know if Your Camera is On

I recommend cameras on for small meetings. It shows that you are (or are not) engaged. For a large meeting with dozens of people in attendance, don’t turn your camera on if no one else has – just go with the flow. If you’re a manager and you want people to be more engaged, have your staff turn ’em on.

If your camera is on, act accordingly. Don’t be that guy.

Mute if You’re Not Speaking

If you’re a good meeting attendee, and you’re paying attention to what’s going on, you may not need to mute. However, if you’re splitting your attention, typing, using a scratchy microphone, or have background noise (kids, spouses, pets, traffic, smoke detectors, etc.) please mute. And then remember to unmute when you speak. Another reason to keep your camera on – if you forget to unmute, people can helpfully tell you “you’re muted.”

Use a Good Microphone

Lots of people have cheap headsets or use their laptop microphone. Some of these sound absolutely terrible. If your microphone is the kind that hangs by your neck, you’ll likely make a sound like steel wool over a chalkboard every time you turn your head. Laptop mics also tend to have a lot of echo and can sound like you’re very far away. Using your phone for audio is often better. Amazing! A device built for audio calls is better at audio. Most platforms offer an iOS and Android option, and these will usually let you call in over the Internet and via a phone call. Try these if anyone complains of audio quality issues when you’re using a laptop microphone. And if other people on the meeting are complaining about your audio quality, do something about it. Don’t ignore it or just hope it gets better.

Use Do Not Disturb

Another annoyance is the constant buzz or beep of notifications going off in the background. Enable do not disturb or sign out of your email and messaging platforms.

Share Only What You Want

If you’re presenting, share only the application you want everyone else to see. This is safe than sharing your entire screen. Showing up nude when your camera is on is pretty bad. Slightly less embarrassing is getting a pop-up on your screen about how stupid someone else in the meeting is.

3 Must-Use Commands With Tupperbox in Discord

For the last few months, I’ve been using Discord, Slack, Hangouts, Signal, Skype, and Teams for chatting with friends, family, colleagues, and clients. Discord is very like Slack, with a few differences because it’s geared toward gamers while Slack focuses on businesses.

Both Slack and Discord support add-ons in the form of ‘bots (robots, or programs that watch for certain events and respond to them). Tupperbox is a robot that has popped up on a couple of servers on which I role-play. It’s used to let you assign actions to issue different responses, based on the inputs. In my most frequent use case, I give it a trigger phrase and it takes whatever follows and makes the text appear to have come from someone else. I can use the robot to make a sentence I type look like it came from one of my characters instead of myself. Instead of “Peter Nikolaidis says that Hector Roundtree says ‘Forsooth!'” you would see “Hector Rountree: ‘Forsooth!'”

The trick is that I need to register every character and its associated trigger phrase, and this confuses me every time, despite the built in help. So I figured I’d document the exact characters I typed right here for next time (and for you, of course, dear reader)!

How register a new character/avatar/name:

tul!register "Hector Roundtree" hrtext

Any time I start a message with the letters “hr” and repackage anything after that to appear to have come from “Hector Roundtree” himself.

I also like to have a different icon for each of my characters. The first step is to upload a small (thumbnail) image, preferably a square with the face in the center, to a publicly reachable URL. I’ve had zero luck linking to OneDrive or iCloud photos, so I upload them to my WordPress site and reference them from there.

tul!avatar "Hector Roundtree" https://example.com/uploads/images/hector-roundtree.png

The above text will register the image with posts made by Sir Hector, instead of a big question mark icon.
Update: Another option I only recently discovered is to drag and drop the avatar picture right into the post, instead of giving a URL. This is a much simpler option!

What if you goof and want to start over? You can always remove and re-register. For example, I registered “JJ:” for one of my characters, and “hr” for another. The problem? For one, the colon is extraneous. I could use “JJ” instead. Also case matters, so “JJ” is not the same as “jj” or “Jj.” I often type posts from my phone, which likes to autocorrect things. For instance, if I start a new post by typing a letter ‘h’ and an ‘r’ by default this will be “Hr.” Great, except I registered “hr” so every time I want to post as Hector, I have to uncapitalize the ‘H’ first. What a pain! That’s where the remove command comes in.

tul!remove "Hector Roundtree"

The above text will remove Hector, letting me re-add him with a simpler trigger phrase. This time I’ll use “Hr” to make for easier posting from my phone.

tul!register "Hector Roundtree" Hrtext

How to Hold Your Foot in a Strap With Minimal Effort

I like to use a strap in leg extensions, especially in long-held Yin poses. The problem? Holding the strap gets tiring! Looping it around the fingers can hurt after a while, and even if you hold it around the meaty part of the hand, it still takes some muscle power.
The solution? Loop the strap around both wrists so that it holds itself in place. Start by making a loop.

Take the bottom of the loop and lift it toward its center so as to make two smaller loops toward the bottom.

Slide your hands through the small loops.

Grasping the strap, loop it over your foot, so that your hands rest lightly on the strap and are held in place by it.

Recline, extend, and relax!
Here’s a video where I walk through the process.