The blog home of Jeff Putz

Different approach for birthday week

posted by Jeff | Wednesday, June 29, 2022, 7:39 PM | comments: 0

I have historically preferred to make the week of my birthday a, well, week-long thing. It was slightly muted last year, but non-existent the year before. This year, I've decided mostly that I need to delay it. We're doing a cruise in a few weeks, and cruising is of course contingent on not having Covid. So mostly I'm going to be doing nothing, kind of a self-imposed quarantine. Diana had her second booster since she's over 50, and Simon had his first, so even relative to the newer omicron variants, they're less likely to get it, though no one is really 100% able to avoid it.

It's an annoying situation, because immunity is presumably waning to some degree, and the bivalent boosters won't be here until the fall. This particular cruise is important because it is an inaugural sailing, and those don't come around very often.

But I did get a pedicure yesterday, so that's a good start. Might work on something else this weekend, we'll see.


The end to the myth

posted by Jeff | Tuesday, June 28, 2022, 2:00 PM | comments: 0

I've been trying to process the last week, which has been a pretty bad week for American history. Despite the reemergence of racism and blatant fascism, I generally held on to the fact that the courts did in fact hold up the Constitution as intended. This week, while the lower courts continue to act as expected, the highest court took a turn for the worse, arbitrarily deciding that states get to make up their own rules when it's convenient.

But this brings up the larger specter of the reality that we are not self-governed by the majority. Our democratic system is deeply flawed. Most Americans believe the government does not belong in your body or your bedroom. Most believe that the ridiculously broad interpretation of the Second Amendment is incorrect. And we now have a court where a third of it was appointed by presidents who did not win a majority vote. Democracy feels like a myth. As it is, "We the people" has never, at any point in our history included "all the people," and now it excludes quite literally half of them.

What do you do with this? I used to write a lot about my struggle with the obvious flaws in our society, but largely stopped because I don't believe that energy results in any meaningful change. Of course, I vote and I donate frequently to the organizations that continue to promote human rights, but is it enough? I'm tired of a vocal minority setting policy. The oppression, discrimination and marginalization of people is not academic to me. These people are my friends, family, coworkers and community.

I think we're about to see a level of activism not seen since the 60's, but in order for it to make any difference, white, middle class, hetero Americans need to engage. Our basic civic engagement and understanding of how government works is not just inadequate, it's barely recognizable.

The shit's at a breaking point, and the moral imperatives are clearer than ever. The United States now ranks among the lowest of democracies in terms of civil rights, low in healthcare outcomes despite the highest per capita spending, poor education outcomes, high per capita gun violence... we're not really winning much of anything. American exceptionalism is a myth.


Stop and be sick

posted by Jeff | Monday, June 20, 2022, 3:22 PM | comments: 0

I've been going at my hobbies pretty relentlessly lately, writing lots of code, making video, and stuff. But then on Friday, I woke up with that weird tickle in my throat, and just felt crappier by the hour. I made it to my last meeting at 3:30, and checked out immediately after. The fever and stuff came that night. On Saturday, I took a Covid test, as one does these days, and was negative for that, fortunately. Diana had a pretty bad sinus infection previously that she struggled with for a week, and this felt a little like that, although I seemed to have turned a corner. I had a little fever this morning but slept it off. Still a little pressure in the head, but not like yesterday.

It's just remarkable to me though how this stopped me in my tracks. I have in recent months really felt like I wake up with purpose every morning (again, pretty sure it's the bupropion), eager to do stuff, and this illness just stopped it all. I'm usually zen about being sick. I watch the movies that make me feel better (Pitch Perfect marathon!) and just turn off my brain. But I noticed this time I was anxious to get back to it all.

As Covid restrictions have lifted, I really expected to be subject to more of the common stuff that causes illness, especially with a child in school, but that hasn't really panned out. My last illness, not counting the 24 hours of side effects from the vaccines, was a little less than a year ago with something very similar. While I'm remote, Diana works in a theater, which is a whole lot of people gathering in one place. So my point is that I'm surprised at how infrequently I've been sick in the last year.

Ready for this to pass. I've got a lot going on this month!


Popcorn and panic attacks

posted by Jeff | Friday, June 17, 2022, 12:20 PM | comments: 0

Diana and Simon went to Epcot on Tuesday, and they scored a virtual queue slot for the new Guardians of The Galaxy: Cosmic Rewind coaster. Even better, the time was later in the day after work, so I could join them (fun fact, only one person in the party has to be in the park to get into the virtual queue). We had already been on the ride once at the time of the passholder previews, and we were pretty excited to get another lap. Diana and I believe this is the best ride at Walt Disney World.

We were in the first staging room before the preshow when Simon started to freak out. That seemed odd since he had been on the ride once and had been talking about it ever since. It was an outright panic with tears. He started to communicate that this mostly had to do with the fear of losing his souvenir Skyliner popcorn bucket, which he bought with his own money a few weeks ago (cheap refills). By the time we got through the preshow and on the ramp down to load, we learned that it absolutely was the concern over losing the bucket that was causing the extreme panic. There was no consoling him. He ended up bailing to the pass-through to the exit while we did the ride.

I imagine that anyone's first response to this is to point out how ridiculous it seems to be so concerned over something relatively unimportant in the grand scope of the universe. But as much as I think that, I can't be the shitty parent that invalidates and ridicules his feelings. Diana was infinitely patient with him in this case, which is good because I wasn't sure what to do. I was looking forward to riding with him, as doing coasters together is one of the few things that he prefers to do with me. This isn't the first time that he hasn't been able to adjust over some seemingly irrational situation.

And of course, observing him causes the realization that I've experienced the same feelings. I remember not wanting to use stickers on things, because if I used them, then I wouldn't have them. I would avoid bringing certain toys on camping trips, deathly afraid of losing them if I did. Even today, I obsessively pat down my pocket to make sure that my phone is still in it. I'm also on the edge of panic when boarding any kind of transportation, bus, plane or boat, extremely anxious to get onboard and I don't even know what possible outcome I'm worried about. So I get where he's at, I just wish he had the coping skills to overcome it.

I'm starting to understand that this is a large part of the journey for an autistic person, developing the ability to cope with the situations that are irrational or deeply uncomfortable. And because it's a spectrum and everyone is so wildly different, everyone will get to different places at different times. And the brain wiring doesn't change. You may be able to cope with that situation, but it doesn't mean you aren't experiencing the situation. This is one of the biggest things for me to come out of my diagnosis, because now I recognize that the cognitive cost of these experiences sometimes leaves me exhausted.

As for Simon, he was very aware of his feelings and understood them, to the extent that he regretted not being able to handle them and ride with us. This awareness seems to be more common every year, and I think that awareness is the first step in developing the coping mechanisms. I'm hopeful that I'm right. It's difficult as a parent to recognize this, compartmentalize it, and react more clinically to it for the sake of helping him grow.


A video about gas

posted by Jeff | Thursday, June 16, 2022, 7:17 PM | comments: 0

I made a video about gas. Specifically, it's about gas prices. People have been saying all kinds of silly things on the Internet about gas prices, fundamentally misunderstanding the basic economics of supply and demand, and further making it a political issue. I'm not going to change their minds or anything, and I know that. For reasons I'll never understand, a lot of folks prefer willful ignorance over knowledge.

My bigger intention though is that I had been thinking about how fun it might be to do an entire video out of stock footage, using stuff from Storyblocks. I'll probably never make the subscription cost back, but maybe I'll find some other uses the next time I impulsively want to do this. The idea came to me and then it was a video within 24 hours, which for me is super unusual because I don't usually exercise that kind of follow-through.

One thing for sure is that I forgot how much fun it is to write for video. It's a different muscle, and one that I haven't used much in recent years. The words come with specific images in mind, and in this case, having a library of essentially everything recordable, there really was no limit to what I could write. Not having to actually go out and shoot stuff sure is easier. I also didn't want to spend a lot of time on graphics, which is why I just scribbled stuff on a screen capture and used that instead. It's satisfying to be lo-fi in 4K!

I'd like to do a video about home solar and storage, but I need a drone to get footage of my roof. You know, for science.


I saw Glitter Jesus!

posted by Jeff | Monday, June 13, 2022, 6:11 PM | comments: 0

Our Broadway season in Orlando ended last weekend with the 50th anniversary tour of Jesus Christ Superstar. It seems like a small miracle that we didn't have a single show cancelled, although maybe I'm not that surprised given the strict Covid protocols of the touring companies and a robust set of understudies, standbys and swings in every one of them.

I've wanted to see a professional version of this show since I was in high school, because I found the music interesting as a time capsule of sorts from the early 70's. My aunt was in a community theater production around that time as well, which I recall mostly was on a very small stage. It was also interesting to me as the earlier work of the composer that did Phantom of The Opera, Andrew Lloyd Webber. All the theater kids in school had Phantom sweatshirts and what not, and I had a cassette copy of the original cast soundtrack. The JCS soundtrack was rough and super analog. Fast forward to the NBC live performance of the show a few years ago, and it gained new life for me, sounding "bigger" and surprisingly not particularly dated.

Let me say that I'm not particularly interested in it as a religious piece. I believe there likely was a Jesus because the historical record is fairly compelling, as he seems to have pissed off quite a few Jewish and Roman authorities at the time. Whether or not he was the son of God is a matter of belief, and that's up to you. While I border on atheism, because religion feels like a thing to give meaning to our tiny existence in the vast universe, and a means of comfort relative to our mortality, I hold no ill intent toward anyone who chooses to believe. Ditto for any religion, unless you weaponize that religion to oppress, hurt or demean others.

The musical version of these Biblical events center mostly on Judas' role in betraying Jesus, and reconciling that he had little choice in the matter. Jesus also has to reconcile his persecution as the plan of his father. These paint God in a cruel light. Meanwhile, the apostles and Mary spend time contemplating their admiration for a man convinced of his own doom. It's all very dark, were it not for the rock music that goes with it.

It's compelling to me though because the themes of fate and duty are common throughout literature. I mean, we know the Titanic is going to sink, but it doesn't mean there aren't good stories leading up to it. So goes the story of Jesus, attempting to inspire people to be good to each other and calling out that everyone is flawed and shouldn't be casting stones (a lesson that, sadly, seems completely lost on many self-identifying Christians). Add in end-to-end music and opportunities for dynamic choreography, and you have Jesus Christ Superstar.

I wasn't sure what to expect, because we understood it to be a non-union show, though apparently the principles and some others are in fact union. It's not that I use this as a measure of the ability of the performers, but rather it's often an indicator of how willing the the producers are to pay for the right talent in all parts of the production, from the performers to the musicians to the production designers to the touring technicians and stage managers. If you need an example, look back at the non-Equity tour of The Little Mermaid. What a train wreck. There also seems to be some hostility on behalf of Lloyd Webber's production company and unions, exhibited just a few weeks ago when they abruptly canned their London run of his new Cinderella. Anyway, I'm not sure what you call this, because it's mixed. I imagine that post-Covid, unions are willing to make some concessions just so people can work.

The good news is that the show was mostly excellent. The principles were all completely awesome and exceeded my expectations in every way. They were backed by a fairly large band that was also amazing. I can't pick out exactly why, but there are definitely tweaks and improvements to the arrangements compared to the 70's version, and I think they worked those out in the NBC show. Matching the talent on stage was a brilliant set, and a lighting design that was rock-n-roll without being obnoxious overkill. I really loved it.

It wasn't perfect though. There were some really strange choreography choices, not the least of which was humping hips and mic stand stroking to the lyrics, "Touch me, touch me Jesus!" There was a lot of African movement reminiscent of The Lion King, which I did not understand. There were also a lot of frantic jazz hands and Fosse arms that came off a little silly. They did have a "mob leader" role that expressed a lot of sentiment with dance, and that was a good choice to move the ensemble beyond background filler. They had more intent that way.

They also decided to use handheld microphones for a lot of stuff the principles did, and it didn't do anything to add to or advance the story. In fact, some of them were just props, as the priests and soldiers had microphones, but they weren't actually used (they also had traditional headset microphones). And in a particularly awkward way, they used a microphone to imply Judas' suicide.

But the strangest choice was the 39 lashes performed by the ensemble throwing glitter at Jesus. I've said this before, but that entire scene, with a guy angrily counting off to the side, could be cut from the show and I don't think anyone would miss it. Someone suggested that no, it was crucial to the story because the Bible, to which I responded that accuracy isn't essential when Jesus is playing guitar with backup singers. In fact, I just looked it up, and if it was so important, perhaps it would have been mentioned more beyond, "Then Pilate took Jesus and flogged him." That's it? Worse yet, flogging to the limit of 39 times was a Jewish custom, not Roman, and the Bible doesn't count them at all. Like I said, leave it out. It's boring, regardless of how much glitter is used.

Those criticisms aside, I really enjoyed the show, and would absolutely see it again. It's a fascinating case study of Andrew Lloyd Webber's career, because the same guy who made the epic dog shit (cat shit?) of Cats is the same guy that composed this fantastic rock opera about a religious figure, which I imagined was well out of his comfort zone. Also Evita and Phantom. Even School of Rock. And then there was Love Never Dies, quite possibly the worst story ever put on stage. If I can say anything about him, it's that he was brave enough to fail after high levels of success.


Cleaning up the non-deliberate UI of POP Forums

posted by Jeff | Tuesday, June 7, 2022, 11:17 PM | comments: 0

Someday I'll have the answer to understand why I can't quit my open source forum app. Recently, I got over the hump about starting to revise the UI, which has evolved in a non-deliberate way for years. Instead of trying to embrace one of the many libraries out there, all of which are overkill and don't make a lot of sense for walls of text, I decided that native web components are supported well enough that it made sense to port my spaghetti code to those. I'm actually having fun with that and learning new things and using Typescript in a non-trivial way, but that's a totally separate topic. I wanted to capture where things are today, in part so I can laugh at it at some future date, but also to organize my thoughts. I'm on a tear with commits, partly because I don't have a great way yet to test without deploying a build. Safari on iOS is the new IE11, and it tends to not work like other browsers.

First off, let me work through the topic list.

I've already started to revise the upper right navigation because there will be a new notification count up there, and I wanted to keep those counts and the search visible even on mobile. One thing about that is the inclusion of the recent link, which is often redundant everywhere but the home page. Some people prefer to use that as their starting point instead of the individual forums. Those folks also don't use the mark-all-read function, so they have hundreds or thousands of last-time-read records. My suspicion is that I can include a notification all-read function to be the same thing.

The other thing I've never quite found a use for is the topic stats (they appear under forums on the home page as well). These don't even appear on mobile at all, and they exist mostly because forums have had those since the beginning of time. Definitely no one cares who made the last post in a forum, and I'm not sure if they care about it in topics. I look at the reply count sometimes. I think that people may be interested to know what's "hot," but depending on the community, that could mean lots of view or lots of replies, or both. I wonder if there's a way to visually represent that.

The post pages are a bigger mess. The moderation log button only appears for moderators (obvs), but the subscribe and favorite buttons seem clunky. Also, "subscribe" currently means email notification, but it'll switch to in-app notification, and users will have an option to subscribe to anything they post in automatically. There aren't really icons for these actions that follow an understood convention, let alone in six languages.

The date I call out because it does show things like "4 minutes ago" and update every minute. They count up the first hour in minutes, then say "today" or "yesterday" with the appropriate time, in all six languages. The problem is that they come from the server and depend on the user's profile time zone, otherwise defaulting to a time zone in the settings. Ideally, this would all be in the browser using the browser's time zone and I can persist the language parts in the header or something. Rewriting that will be gross though. It's 60 lines of code that I barely understand, and I haven't researched if the browser knows anything about the use or non-use of daylight saving.

The post tools I've always hated. I do think that these could use icons, something like a chain link, a reply icon as seen in every email app, quotation marks and a square-and-pencil (delete is only seen my moderators). I'm worried that these would appear even junkier than the words, and I don't know if they translate well into the other languages. No matter what, I'm thrilled with the improved post quoting.

Private messages are kind of dumb the way they're set up now, because they follow an email paradigm. It would be easy enough to just make this straight-up chat, I guess. I already converted the new message badge to be real-time, so the notification mechanism is already there. I would have to ditch titles and limit users to one "thread" per user, or groups of users.

Stats show that exactly five people use the activity feed on CoasterBuzz, and I literally know most of them. I imagine I could throw it away and keep the individual feeds on user profiles for novelty, and beyond that, the future notifications may satisfy the same curiosity.

The other thing not pictured here is the Q&A forum layout, which is better than it used to be. That's a pretty specific use case, and mostly known to people who use something like StackOverflow. We have one of those on PointBuzz, and no one ever marks an answer as "the one," which could be a UI problem or people don't care or both.

I'm giving myself the rest of the year to act on this stuff, and I'll ship whatever I have. The number of things in the "done" column are already pretty high. Heck I'm just thrilled with the post quoting. It already eliminated the gratuitous whole-post quoting.


Pissed about gas prices? We had a solution years ago

posted by Jeff | Monday, June 6, 2022, 11:00 PM | comments: 0

It definitely feels like we've achieved a new level of crazy town and willful ignorance when the goofy reality denying crowd wants to blame gas prices on the president. Forget for a moment that basic sixth grade economics explains supply and demand, which is why prices are what they are. The more sinister issue is that these asshats have been opposed to the solution for years. It's a solution I already enjoy, by the way.

For reasons I don't understand beyond the influence of lobbyists, these same reality-challenged people have for years been opposed to the adoption of renewable and sustainable energy. The benefits seem pretty obvious, not the least of which is that we'll stop killing the planet, and you should be able to smell the money for all of the new jobs it could create. Reinventing the way we create and consume energy has a lot of opportunity with it, and it not only means jobs but also generally lower costs for consumers.

Maybe you've heard, but solar power has been around for decades. Now the lifetime cost per MWh is less than any fossil fuel. Ditto for wind and hydro. The critics suggest that the sun doesn't shine all day, and while I'm thankful that there's at least one truth that they accept, there's a solution for that too called batteries. Create a distributed generation model, on rooftops, over retention ponds and sub-regional utility scale plants, and you can create clean energy everywhere.

I bring up the subject of electrical generation because it is tied to the electrification of cars. While the economy of scale math means that EV's are "greener" even when the power comes from coal or oil generation (for real, I did the math), the truth is that electricity is a far less expensive way to move stuff around. A lot of people think of Tesla as the start of mainstreaming EV's, and that's mostly true if you overlook Nissan because of their lack of sales volume, but the truth is that GM pioneered the production of EV's way back in 1996 with the EV1. That program eventually ended officially because GM said it wasn't profitable, but the people leasing offered to buy them and GM refused, collecting them all and crushing them. There was a whole documentary about that car, but the short story is that demand and interest was potentially as high as 15% of the California market, leading to the theory that GM was either pressured by the oil industry or feared for its parts business, both of which were threatened by electric cars.

By 2013, when Tesla Model S started appearing on the roads in trivial quantities, it was clear that even at the crazy price there was a lot of interest. This makes sense, because Toyota's hybrid Prius went through the same cycle. Today a used Tesla is worth crazy money. Our 4-year-old Model 3 could fetch $45k right now, and we only paid $52k in the first place!

Where I'm going with this is that electric cars could have been a thing by now had lobbyists and politicians not been so against it two decades ago. The battery tech would have advanced faster, the cost would have come down, and we could be there. Shortsightedness is why we're not. Ford may have been guilty of participating in the delay as well, but they're going to laugh all the way to the bank when they can't make enough electric F-150's to meet demand.

Two-thirds of my electricity comes from my roof, and that includes the part that goes into our cars. Between the two of them, we've save $200 this month by not having to buy gas.

So thank your asshat politicians for being against renewable energy and fighting against EV rebates. Today it costs me about 3.5 cents per mile to drive somewhere, but if I was still driving a Prius, it would cost me 16 cents per mile. If I was driving a typical SUV, 32 cents a mile. And the year that I installed solar and bought that Model 3, I got all of my federal taxes back, and some carried over to the next year.

Tell me again the case against renewables and EV's. This mini-crisis about gas prices could have been avoided. And frankly, I'm going to be smug about it.


The world at arm's length

posted by Jeff | Monday, June 6, 2022, 2:00 PM | comments: 0

In the last few weeks, I have largely disengaged from much of the world via the Internet. I don't watch news on TV, I've largely dropped into a "post-only" mode on social media. I read a lot of the headlines on the NYT, and I read a lot of stuff from Ars Technica. That's about as deep as I can go.

The result is that my mental health is better than it has been in some time. Part of my bupropion journey is the recovery of joy, and with it, sadness to some degree. My emotional self is no longer dull, and it has been fantastic. I feel music and movies again. I notice sunsets. I want to see people (in small numbers). I'm very driven to do things I enjoy. Despite some objectively shitty years, for everyone, I am optimistic and content often.

That doesn't mean that I don't know what's going on. I'm just trying to avoid getting sucked into the whirling vortex of shit. One of my friends and I had a conversation about this a couple of weeks ago, on a day when our tourist endeavors were not going to plan. At one point we resolved to just stop and people watch. We recognized that we're fortunate to be able to do that, among other things that would be considered a luxury to some. And indeed I have the additional advantage of being a straight white guy. For as much as the world isn't right, I'm likely least affected by the ugly parts.

Let me be clear that I don't feel guilty for having such privilege. I don't want anyone else to feel that way either. That's the part that unfortunately a lot of white, straight, middle-class Americans don't seem to be getting. No one wants you to feel bad or guilty about where or who you are, despite the asshats on cable "news" who insist that's what "they" want you to feel. But what you should do is recognize the inequities of society and commit to resolving them in whatever way possible, because that's what decent human beings do.

It sounds like I'm describing an impossible duality here, but I don't think that I am. There are a lot of upsetting things going on in the world, but I can keep them at arm's length and find ways to change them. At the very least, basic civic engagement is a start, as is voting for people who aren't white nationalists, racists, anti-Semites, homophobes, fascists or otherwise horrible people. I mean, for some reason they can come right out and declare how terrible they are, so they're not hard to spot. Maybe they're not in the right party, but at some point you have to send a message to them that trying to subvert democracy and squish all of the folks not like them isn't a great look for the nation.

We can donate time and money to things that advance us toward an equitable world. Don't confuse equity with socialism or whatever you think it is. We can all have constructive conversations about the merits of government paying for certain things or not, but these are not the same issues as those that cause some people to be less than others due to policy, past or present.

So yes, I'm learning to do what I can to improve the world, and understand my scope of influence. I can find ways to empower others who have even greater influence. I can keep a distance without burying my head in the sand. What I will do less of is worry.


Tesla Energy is a case study in how not to run a company

posted by Jeff | Saturday, June 4, 2022, 1:14 PM | comments: 0

Way back on March 13 we were hit by lightning for the second time in about the same place. My poor neighbor lost three TV's, cable boxes, a fan, a light and one of his heat pumps. We lost just the cable modem and my trusty old router, but it also fried our electrical plant in a way that kept us off-grid and running on the backup battery. So began a lengthy struggle to get Tesla to fix it.

Let me layout our setup first. Our electrical service is split into two panels in the house. One is all of the high-voltage stuff... the oven, water heater, HVAC, car charging, and what not. The other is everything else than runs on a typical 120V outlet. The latter can be powered by a Powerwall battery in the event of power loss, so at the very least we would have lights and a powered fridge. The solar plant is divided into two inverters, with the smaller load connected on the outside of the battery switch, and the the larger one on the inside of the switch. You can't use solar and/or batteries and still be connected to the grid in an outage, because you don't want to electrocute line workers that would assume in an outage that there's no electricity there. So in the event of an outage, the larger solar inverter, the battery and the lower voltage panel all become one synchronized system isolated from and switched off from the grid. The smaller solar inverter, since it's outside of the switch, disconnects.

When the lightning hit, the contactor switch would not engage back to the on-grid position. There are a lot of reasons this could happen. The contactor itself could be broken, or the inside system, the battery and solar inverter, could not synchronize to the grid. It all has to run at the same frequency to work, since the power is coming from potentially three sources. The contactor is part of what Tesla calls the gateway, and it has a computer that makes the synchronization happen, as well as meters that measure all of the parts. The synchronizer and the meters could go bad as well, and in fact the meters are what were damaged in the last lightning hit. In that case, we couldn't go off-grid and use backup because the meters couldn't detect the current correctly.

So the day after the hit, I called Tesla, and they saw the same thing I did when reading the numbers off of the gateway (it has a web interface I can see inside our network). The numbers were erratic and all over the place, as if to suggest that the sun was turning on and off and we were having a constant brown-out from Duke Energy. Of course, this wasn't the case, as I could observe the solar output on the inverters as steady, and our lights were certainly not blinking on and off. But they guy on the phone insisted that I had a utility problem. OK, fine, I'll play the game. I called Duke Energy, and they sent a guy out, who promptly put his meter in front of and behind the meter, to show that the power was steady and clean. By the time I made my third call to Tesla, they were still insisting that nothing was wrong with the system, it was the utility. Eventually I pointed out again that their remote measurement was incorrect, and I knew this because I physically observed the guy from Duke probing around, and physically observed that the solar was steady. This debate went on for more than an hour as he consulted with coworkers and I told him he was putting me in the impossible position of Duke telling me everything is fine on their end, and Tesla insisting (without a human on-site) that Duke was the problem. Eventually, he relented to send out a tech, but only if I signed a thing saying I'd pay for the visit ($300) if nothing was wrong.

The next day, a young guy came out and did some troubleshooting, and he wasn't sure why we were stuck off-grid. He tested and measured all of the things, confirming that the metering at least was wrong. It got late and he was instructed to relay to another tech the next day. That day, Alfred came out, who happened to be one of the guys who installed the Powerwall and rewired everything to split the loads. Super nice guy, real electrician and genuinely wanting to help. The thing is, that's the case for all of the techs who have been here. The people on the ground are really awesome. After messing around with it for awhile, he determined that contactor seemed to be the problem, but it's not a part they typically have separately of the gateway. The only course of action left that day was to bypass the contactor, which would also take the solar out of the equation. But at least I'd be back on the grid.

Here's where I point out how not to run a company. Tesla does everything by ticket workflows. So for example, when I had the initial installation, a ticket was generated to have the permit guy get a permit for the installation. Only that sat on his desk for like two weeks, preventing the next step, scheduling, from happening. I eventually called them and asked what was going on, and sure enough they found the permit guy wasn't permitting. In the case of my contactor part, I called once a week, for seven weeks, four to the main support number, three to the scheduling people (once I got that number), and each time they weren't sure why they didn't have the part, but would call me back within 24 hours to let me know what they found out after calling around. All seven times, they did not call back. There was a ticket tied to my case in the hands of someone at a warehouse, who clearly wasn't doing anything.

I'm familiar with this sort of thing, because it's partly how we build software. Support resources do it this way too. But in order for that to work, someone, in some role, has to be accountable for the higher outcome. Always. If you simply put a name on a task, and that person isn't accountable to outcomes, then there's no incentive to see it through. As a result, no one is actually advocating for the outcome. I've seen that a hundred times. It's an anti-pattern. In software, you need to have someone accountable for delivery, typically a manager (me), who is advocating for the customer or stakeholders to see it through. Stale tickets cause me to poke and prod until they're resolved. Similarly, in support situations, someone is looking out for the customer and following up on work assigned to others.

For Tesla Energy, customers have to advocate for themselves or things stop happening. It was the case with the solar installation, with the Powerwall installation, and getting the repairs done for both lightning strikes. They're absolutely terrible to work with, and as much as I think their products are elegant and amazing, I can't recommend them. Again, the people on the ground doing stuff are great, and I can't emphasize that enough. The infrastructure around them and the customer is awful.

On the eight call, the rep said my part was in the warehouse and he scheduled me, indicating he wasn't sure why someone had not done so already (I know why, see previous paragraphs). Adam came out, and he actually had an entirely new gateway that he would cannibalize. First he replace the contactor and sensor unit. Once in place, again, it got stuck off-grid. So he replaced the synchronizer and computer module, surprised because that might mean it was the computer all along and not the contactor. Unfortunately, the gateway he just cannibalized had been sitting somewhere for so long that the security certificate in it used to talk to Tesla for monitoring had expired, and there was no way to remotely update it. He was able to get everything into a normalized state though, meaning I finally had the larger part of the solar plant generating again, I just couldn't switch to backup in the event of a power failure. He was able to find the part quickly and schedule a return visit the next week. That came June 2, and he got everything back to normal within an hour or two.

It took 81 days, almost three months, to resolve this. In that time I missed the largest solar production window of the year, and incurred a couple of gigantic electric bills. Tesla stopped making the gateway that I have some years ago, so if this one goes, I imagine they would have to replace the whole thing. If it does, I can only imagine what a struggle it will be.


I made Phrazy with Blazor

posted by Jeff | Wednesday, June 1, 2022, 11:29 PM | comments: 0

About a month ago, I wrote a bit about how I made a word game, but I haven't talked much about how I built it, so let me go a little deeper there.

Phrazy was built on top of Blazor, which for the unfamiliar is a way to use familiar C# and .Net tech to compile to web assembly, a standard supported by all of the major browsers. My first real stab at building something with Blazor came toward the end of 2020, when I made a cloud based music player that I call MLocker. I've been using that app for more than a year almost every day, and while it's far from perfect, it's robust enough, and was easy enough to build, that I was compelled to build something else with it.

Inspired by the success of Wordle as a web-based game, I came up with Phrazy mostly because it was easy enough to imitate the classic hangman game. A lot of people see it and think of Wheel of Fortune, but hangman inspired that too. Blazor can generally be organized in much the same way as a React or Vue app, meaning that you can build a series of components nested within each other until you have a complete application.

Phrazy starts with a class called the "game engine." The game engine does what it sounds like it does, and acts as the centralized state for everything that the game has to track. Most components use dependency injection to interact with the one instance of the game engine, through its properties, methods and events. When it first loads, it does some initialization to see if there is a game in progress or it needs to fetch the day's puzzle from the server. It will also see where you ranked the last time you played. Each player is assigned a random identifier, and that identifier is the only thing sent to the server with your play results. It's used to record the results of your play and to rank all of the players by number of guesses, then time, once a day. I'm using local storage in the browser to store that state, because it's more robust than cookies.

The game engine has a state box that keeps track of the puzzle, which letters you've already guessed on the keyboard, the time you started (the clock is "ticking" even if you leave the game because it stores your start time), whether or not you're in solve mode, and the state of each letter on the board (not guessed, guessed, solving and typed a letter, solving and have not typed a letter). That state model is simply serialized to local storage a few times a second, so if you bail, the state is stored.

The structure of it all is straight forward. The Blazor "page" has a number of components on it, including the keyboard, the timer and the game board. The keyboard in turn has a bunch of key components, and the game board has a bunch of tiles. What gets rendered in each of these components largely depends on the game state stored in the game engine. Re-rendering or changing the state of these components depends entirely on the events that they subscribe to. The game engine has a bunch of events that correspond to things you would expect, like choosing a letter on the keyboard or pressing the solve button.

How does this work in practice? Let's look at the entirety of the Key component:

@using Phrazy.Client.Services
@using Phrazy.Client.Models
@inject IGameEngine GameEngine

<button class="key @GameEngine.GameState.KeyStates[Letter]" @onclick="Click" style="@(GameEngine.GameState.IsGameOver ? "cursor:default;" : "")">@Letter</button>

@code {
    [Parameter]
    public string Letter { get; set; } = null!;

    protected override void OnInitialized()
    {
        GameEngine.OnKeyPress += StateHasChanged;
    }

    private async Task Click()
    {
        await GameEngine.ChooseLetter(Letter);
    }
}

There isn't much here to look at. When it initializes, it binds its StateHasChanged method to the game engine's OnKeyPress event. That means that if the engine calls OnKeyPress?.Invoke(), for example in the engine's ChooseLetter() method, everything subscribed to that event fires, which is literally every key. You can see that the button's CSS class is set to @GameEngine.GameState.KeyStates[Letter], and there are classes set to "not guessed," "hit" and "miss," meaning it ends up gray, green or red respectively.

That's how the whole game works. The game engine responds to input, changes its state, and the appropriate components are coaxed into re-rending in response to those changes via events. If you've spent most of your career writing code for a stateless web or transient data flowing through high volume systems, it's a lot of fun to have all of the state just sitting there!


Responding to terrible things

posted by Jeff | Wednesday, May 25, 2022, 7:20 PM | comments: 0

Another senseless tragedy happened yesterday, on the heels of another one that happened a couple of weeks ago. I don't know that I can add much to that discussion, and truthfully I don't even know what to do with it. Whenever I think about it I kind of mentally retreat and start thinking about the song "Rivers of Mercy," which describes where I've been a lot in the last few years.

So what do you do in response to something as horrible as children dying in a hail of gunfire? There's obviously no rationalizing it. You don't need to have kids to feel the seriousness and sickness of it, and wonder why this is the only country where this sort of thing happens, and we don't do anything about it. You wonder how the same people who want to force a woman to give birth, saying they're so committed to life, do nothing to limit the death of humans already born. The people who think that gun safety laws get in the way of "law abiding citizens" want to restrict the voting rights of, yes, law abiding citizens. And the worst conclusion of all is that you can only conclude that this minority of people are prescribing a society for a majority, and that implies that democracy itself doesn't work. It's all pretty fucking dark.

A fair amount of therapy in recent years has been devoted to looking for purpose and trying to reconcile my impact (or lack thereof) in the world. It's such a big subject that I wouldn't know where to start. I understand myself that it's likely I've had greater, more important impact as a volleyball coach than I'll ever have advocating for equality and social justice. In fact, what kind of hubris does it take to believe you can influence the change we need? There's a fine line between hubris and courage. Much of the time, that leaves me in a place where I make donations to my favorite acronym organizations and hope that it helps.

Then you settle into that mode of, well, it's mostly my birth lottery that I don't have to deeply worry about things if I don't want to, because they don't deeply affect me. But you've got these idiots who are like, "I shouldn't feel bad for being a heterosexual, white, male Christian!" Well no shit, no one is asking you to do that, they just want you to exercise a little basic fucking human respect and stand up against hate, discrimination and marginalization of people not like you. That's not really a heavy lift. Not being an asshole to others is not a heavy lift.

And don't even get me started with social media and what that does. Some people get deep into performative advocacy, where you say something weighty and get likes and you're "doing something." Worse yet, there are people on the other side of that equation who will judge you if you're not at least doing that performative advocacy. These "woke monsters" want nothing more to call you out. I hate that word, "woke," since it has been co-opted by fascists to imply that exercising human empathy is somehow a moral shortcoming, but I'm talking about the thing that Obama said a few years ago, where people mistake judging others as agency of change. I've certainly been guilty of it.

I also don't think we should give other people shit for disengaging, at least temporarily. Yeah, that's a privilege to, but looking out for your mental health and being a part of solutions are not mutually exclusive things. That binary thinking is the reason things are such a shit show in the first place.

Stream of consciousness here, I know. It's all I can do to reconcile the news, which I've avoided quite a bit.


Garbage and Tears For Fears and the most epic concert

posted by Jeff | Tuesday, May 24, 2022, 8:05 PM | comments: 0

I completely missed seeing Garbage when they toured a few years ago for Strange Little Birds, which in my opinion is every bit as good as their first two albums. They came to Orlando, but I didn't have anyone to go with and I just missed it. I was determined then to see them with Alanis in 2020, and since they weren't coming here, I would go up to DC and see them with my friend Ken, who lives there. Obviously that didn't happen. Garbage did tour with Alanis last year, but I didn't make that happen.

Then, Tears For Fears came out of nowhere with their first album in 17 years, and it turned out to be impossibly good. Then they announced a tour with Garbage. They were coming to Tampa, but we planned to be on a cruise then (it was later delayed), so I figured I'd go to the Cleveland and meet Ken there to see them in the place I saw my first show 34 years ago, Blossom Music Center.

The scene was pretty weird at first. We got the paid parking because I remember how crappy the grass lots are, and the odds of rain were high. Everywhere around me it seemed like there were... old people. And they were mostly driving expensive cars. Then I realized, holy shit, I'm old people. I'm at that stage of adulthood where I have a fair amount of discretionary income and retirement is closer than college graduation. I was also surprised by the number of people bringing their kids, and the kids didn't seem to hate it.

There was a weather delay letting people in, which I think had the opposite of the intended effect. We were among the first in, and we just barely made it into the pavilion before the sky opened up Florida-style. A lot of folks got very wet. I think a lot of people with lawn tickets also got to swap them for the pavilion, because there were almost no people out there by the time the show started (30 minutes late).

The two bands seem distant, except they're not. Obviously the fandom of the two overlaps, or I wouldn't have made seeing them a priority. Tears For Fears is generally labeled as an "80's band," as their first three albums came in 1983, 1985 and 1989. Songs from the Big Chair often makes various lists as one of the most important records ever, and it stands to this day. I saw them on the Seeds of Love tour with Oleta Adams singing and playing piano, and they were fantastic. Roland went on without Curt and made two albums after that, and they reunited for an album that had a little success in 2004, but went unnoticed by me. Then they come roaring back with The Tipping Point, which is one of the best albums released in my lifetime. I'm not even exaggerating. These guys have seen some shit, and the music is even better for it.

Garbage has made just as many albums, with their debut in 1995. That's only six years after TFF released Seeds of Love, though it feels like more. Garbage went dark between their fourth album, Bleed Like Me, and their next, Not Your Kind of People. They too, have seen some shit. Garbage came along at a time when new music was exciting and varied a ton, in some ways the way one-hit-wonders did in the 80's, only it felt more rock-n-roll. I got to see them at their 12th show ever in late 1995, where a very uncertain Shirley Manson paced around on stage with a band that was conceived as a studio project. Of course, the patronizing music press was skeptical of bands with women, but it wouldn't stop them.

As best I can remember, I've seen Garbage a total of eight times now, twice after the debut, and twice in 2012. They had really found their voice and on-stage style by that second show, opening for Smashing Pumpkins in arena shows (and frankly being better than them). You could tell they weren't having as much fun by Bleed Like Me, but they were professional and still put on a great show. When they rolled in on this, the second night of their tour with TFF, I was confident in their ability but not sure how the crowd would react.

They played for an hour and squeezed in 12 songs. They did their mashup of "Wicked Ways" with Depeche Mode's "Personal Jesus," which was kind of neat since I had seen that band on that very stage doing that very song. They did their James Bond theme, "The World Is Not Enough," which I've only heard one other time. At the start, I think there were legitimately some people in the crowd who were not aware of them, but by the end of the show, they were fans. At one point Shirley even said they weren't sure how they would be seen by these crowds, and the noise was so intense that she seemed to struggle to keep it together. It was clearly an emotional moment for her. They ended on "You Look So Fine," which they seem to alternate with "Vow" as their last song (it didn't make the playlist this time). The crowd noise lasted well after they left the stage.

It's a weird arrangement, because they've certainly headlined arenas, especially overseas, and I think they're more co-headliners than openers. They barely made a dent in their catalog after an hour.

The main event was on just 20 minutes later. For an hour and 40 minutes they played an incredible 19 songs spanning most of the catalog (only one song from the non-Curt albums). They were accompanied by Carina Round, an incredibly strong singer-songwriter that has worked with them before. The rest of the band was absolutely solid and clearly among the best at what they do.

What's really amazing is that Roland and Curt sound as good as they ever have, now age 60. Roland in particular shows the miles, channeling Gandalf a bit with that long white hair. And he is a wizard of sorts, when it comes to songwriting. But what's clear is that these two are better when together. They've said in a lot of recent interviews that they started this journey working with a lot of outsider help, at the encouragement of agents and the label, but didn't like what they were making. They said they eventually just sat down together with guitars and that led to a lot of what came out.

So confident in the new album, they played 7 of the 10 songs from it, more than any other album. And it absolutely worked out, because they're amazing live. The harmonies on "Rivers Of Mercy" were just stunning. "My Demons" was more intense live than I expected (and the lighting design was epic). "Long, Long, Long Time" was similarly wonderful with Carina's vocal. They also gave her a stripped down arrangement of "Suffer The Children" that was superior to the original on The Hurting. Of course, I was most thrilled to hear "Bad Man's Song," which was 10 minutes of fantastic changes, improvs and solos. If you don't believe me, check out this video shot by the person behind me that includes the back of my head. There were just so many great moments, ending, natch, with "Shout," as one does when you're Tears For Fears.

There are a lot of bands touring on nostalgia lately, and that's fine. As Ken put it, these are the "401K" tours of aging musicians. But what's different about Garbage and Tears For Fears is that they've been at it for a "Long, Long, Long Time" (see what I did there?), and they're still making music that's every bit as good as what they did two decades ago or more. I know, what you call "art" varies from person to person, but continuing to evolve your craft and creating exceptional new things, to me, makes you the best kind of artist.

It's somewhat fitting that this is where I saw my first show in 1988, Def Leppard with special guest Europe. I stood there all the way at the top of the lawn, in the rain, for three hours, with my first date ever just at the end of grade nine. This time, I was six rows from the stage, not in the rain. I've never spent that much on concert tickets ($330 each with all of the fees and taxes), and it seemed like a momentary lapse of reason to do so. I can't rationalize it, but it's been so long since I've been to a show that I figured why not. Experiences not stuff. I don't regret it, and the show exceeded my expectations in every way.

Now the question is, since our cruise got delayed a month, do we go see them in Tampa?


Cedar Point trip, May 2022

posted by Jeff | Tuesday, May 24, 2022, 10:30 AM | comments: 0

Considering that I've had PointBuzz in my life for two decades, it's almost embarrassing that I haven't been to Cedar Point in years. 2016, I think. So a series of things lined up that made it time. My friend Ken from DC and I were planning pre-Covid to see Garbage on their tour with Alanis in DC, which of course didn't happen. Then, unexpectedly, Tears For Fears came out with a new album and announced a tour with Garbage, and obviously I couldn't miss that. They had a Tampa date, but we were supposed to cruise that week. That cruise got moved, but by then we figured out that the Cleveland date would be workable. And while we're there, why not go to the just-opened Cedar Pont? I haven't done a trip like that without my little family in a long time.

I wanted to have a full day at the park, so that meant arriving on a travel day before, and having the show after. I priced Lighthouse Point cottages, and they had a ticket deal that made it cheap to get 3-day tickets. I would break down the cost to be $250/night plus $100 each for the three day tickets, which is pretty reasonable. I used to stay in those cottages every year for closing weekend. I was pleased to discover that ours was exceptionally clean and in good shape, with mattresses that weren't very old. My last stay there they were pretty tired. And for extra fun, there was a family of five water snakes living under the sidewalk.

Appearances were even better when we got into the park. It's just immaculate, with fresh landscaping and paint. The appearance of the park has benefitted over the years from a real focus on design, and the company has some of the best. New midways, ride stations, restaurants, they all look so good. I never really noticed how cheap everything looked back in the Kinzel era. It wasn't unclean, it just didn't have the aesthetic at the time. I did not observe any spot that appeared tired or in disrepair, whether it was in the park or the hotel, where we ended up spending a lot of time.

The most impressive improvement though is that the park has completely changed how it thinks about food. Kinzel famously said on an investor call once that "people gotta eat" with regard to pricing, but you knew he meant quality didn't matter either. Crappy hot dogs and burgers were what you got. I never understood this, because eating good food makes for a better experience that you remember, and you can't make up for that just because you have great rides. So the park has added a number of new restaurants in the last few years, and every one of them serves real food made by humans and directed by chefs. It's a totally different scene. The highlight for me was at the new Farmhouse restaurant, on the site of the old cars in Frontier Town. I had hand-breaded chicken tenders and fried smashed red potatoes, and they were amazing. Ken had flank stake and some kind of corn thing. Really great food and a long way from cheap death dogs.

Their beverage game is better, too. There are a number of places where you can get actual liquor. The pours are a little stingy for the cost, but it varies a lot by location. The self-service soda and all-day drink offering is pretty popular, and worth it if you'll get three in a day. We had it with our ticket package, and honestly there's no universe where I would drink 36+ ounces of soda in a day, so I wouldn't buy it.

The general vibe among the seasonal staff is fairly positive and professional in all departments, which is great to see. It's also a relief to see there are no issues with culturally diverse hair, or tattoos and body piercing. I noticed it right away checking in, as one of the women there had a septum ring. (Take note, Disney, you need to get over this.)

I wanted to front-load the positives, because I'm going to get super negative. A lot has changed since the last time I was there, and mostly I've read about it on PointBuzz. Having that site for 23 years, I've seen plenty of silly complaining and entitlement, so I was skeptical about what's going on there. Unfortunately, a lot of what I experienced was pretty well aligned with what people have been complaining about lately. Ride operations are, at best, a disaster.

I started out pretty optimistic on Thursday, when we arrived. It was weird being there that afternoon, having driven through Walt Disney World in the dark that morning on the way to the airport. We headed to the front since I assumed early arrivals had made their way back. First up was Gatekeeper, and I was pretty optimistic. The crew was doing a great job, and that's a hard ride to run quickly because of the loading arrangement on each side. But dwell time in the brakes, with three trains, was not long. I've seen trains on the lift as one crossed through the mid-course, but that's tough to hit consistently. And as I said earlier, really impressed with the overall friendliness of the operators. Waited about 20 minutes.

Next we went to Raptor, and that's where I started to notice that things were not as they once were. The queue implied a wait time of around 20 minutes, but we waited just short of 40. There were two trains in the brake run most of the time. When we got up to the platform, I watched a few cycles, and it was never one thing that was causing delays. The crew wasn't really hustling, but most of the problems were related to guests. People too big to ride weren't identified to wait for the "big" seats, empty seat restraints weren't popped on arrival (also, empty seats), guests were dumping massive amounts of junk in the bins, etc. It's the same Raptor it was 20 years ago, so I don't understand what changed. I'm sure you could find someone from those days and ask them how they did it.

Blue Streak was a little slow-loading, mostly because buckling your own seatbelt is insanely difficult, in those cramped PTC's, and it isn't any easier for the operator to check the belt, which buckles on the inside. Wow does the ride need some track work, by the way. Those poor trains flex and twist visibly in ways that are unsettling.

Valraven had about a 45 minute wait, so we passed on it, and we would later regret that. Headed to Melt and had some delicious grilled cheese. Not too many compromises on the menu, but that location was using non-fresh-cut fries. On the plus side, they had Blake's Triple Jam cider, a favorite I found in the current Epcot Flower & Garden festival.

Had to walk-off that grilled cheese and cider after that, so we didn't rush to ride anything. Millennium Force was down, so that was a bummer. Got on Rougarou in about 20 minutes. Again, they were running three trains, but there were two in the brakes most of the time. They don't have crap bins, but they have show cubbies, which I've never seen before on a floorless ride. I remember back in the day I would just sit in my slip-on shoes for Dominator at Geauga Lake. This scene was a lot like Raptor, there was no one thing slowing them down, it was a lot of things.

We worked around to see Magnum was not running, and Gemini wasn't either. The mechanics were going to Gemini, because they were walking behind us, at the same leisurely pace. We went back to Steel Vengeance, but the wait was two hours, so no thanks. Maverick was down and evacuating on the brake run. At this point, given my 5 a.m. wake time, and having walked 7 miles by that point, I was kind of done around 7. There would be time to ride tomorrow. Or so I thought.

Slow start to Friday, as the travel caught up with us. Got up late, and by the time we were moving it was just before 11. Decided to introduce Ken to Chet & Matt's Pizza, including the crazy delicious dessert pizza. He was not disappointed. We were in an out of there inside a half-hour. We were disappointed to see that Millennium Force was not yet running on the way out, but it was when we got back.

We picked up our Fastlane bands and headed to Valraven. It was down mechanical. We saw some mechanics go in, so I thought we would just hang out with a beverage for a bit. We saw the guests on the stairs stand up and clap, and thought they were close to opening. However, as far as I know, they never did. Raptor was down, and I assumed it was because the wind, then measuring 12-20 mph, was coming off of the bay, the one scenario where it can prevent the ride from reaching the mid-course. But the next six hours would prove very disappointing.

For a few hours, we wandered around looking to ride the things we missed, and every single one was either down mechanical or closed for "weather." Raptor, I understood, because I've seen the train sitting between the cobra roll and mid-course. But Steel Vengeance? In what universe does wind stop that ride? There's no point at which it's ever moving slowly, and certainly doesn't have the air drag of an inverted ride. Maverick, Millennium Force, Magnum, Gatekeeper were also DOA. This went on until 5, when we relented and met up with friends at Farmhouse. The food there is delicious.

We got up from dinner around 6, and looking around, none of the things were running. At this point, I'm pretty annoyed. We headed down the trail to the little tavern in the old wood shop for some drinks. It turns out that they too were going to close an hour early, contrary to the sign, despite a steady stream of customers. We finished our last drinks there around 7:20, and the only thing we could see running was Rougarou. So we used Fastlane and it still took nearly a half-hour before we boarded. By the time we got off, it was 5 minutes to closing, but it didn't matter. A quick scan of the skyline showed nothing was running anyway.

So ended the single most disappointing day I've ever had at the park, and I traveled a thousand miles to have it.

That night, we had drinks at the Surf Lounge in Breakers, where the nice bartender kept it together while training a new guy. She never missed a beat. We needed some snacks, so we headed over to Friday's where the poor bartenders were completely slammed, and they were understaffed. That was the only miss for food-and-beverage for the time we were there. We closed it, and hung out at the fire pits for a while before heading back to the cottage.

Slow start to Saturday, because of the drinking, and knowing we had to drive back to Cleveland and be up late for the show. We were in the park by 11, and knew we had to get out by 2 to make a dinner date. First attempt was Steel Vengeance, where the line was already two hours. Really regretted blowing the Fastlane the day before. Maverick was, wait for it, down. Down the trail we made to see that Millennium Force was fortunately running. The side said it was between 20 and 45 minutes, so we went for it. The actual wait was closer to an hour. Only two trains were running, and once again, I couldn't explain the slow loading, with dispatches averaging every 4 to 5 minutes. I'm sure part of it is that the operators have to eyeball the amount of slack on the belts at an inch, which is a horrible practice because it's subjective and difficult to see without bending over weird. I'm not sure why the belt and bar tugs of yesteryear are now obsolete. I felt bad for the operators, because that's gotta be tough on the back.

We were off the ride around 12:30. Valraven was running, with an hour wait, but given the optimistic expectations, our need to get back to the car by 2, and my general annoyance with the last 24 hours, we skipped it. Got another "free" soda and took it to the Breakers patio where we hung out.

The show that night was one of the most epic I've ever seen, but that's a different blog post.

I'm not sure what to do with our experience. Cedar Point certainly holds a nostalgic place in my heart, but it's a strange mix of massive improvement in terms of food, design and upkeep, but ride operations and maintenance are the poorest I've ever seen. I'm not sure what to do with that. I mean, for the last 9 years I've been taking my kid on a Vekoma roller-skater with two trains that rarely stack, and that's with children riding. I did a new roller coaster a few weeks ago at Epcot that is moving well in excess of 2,000 people per hour, and by the way, they don't have seatbelts and you check your own restraint. And it's not just that, because there was a time when ride crews at Cedar Point were trying to break throughput records, safely and professionally. Five minute dispatches on Millennium Force would never stand (that's fewer than 500 riders per hour, if you're counting).

I love you, Cedar Point, and champion the fact that you finally take culinary efforts seriously and empower your designers and planners to make the park more beautiful than ever. But you need to get your ride shit together.


If no one quotes you, you haven't said a thing worth saying

posted by Jeff | Monday, May 16, 2022, 9:50 PM | comments: 0

For as long as I've maintained POP Forums, more than two decades, one of the things that has been impossible to train users on is when and how to quote a previous post. To this day, people will click "quote" on the last post, so you see it twice. This mattered even more when people had dial-up modems because extra text meant slower loading. Bandwidth was also expensive. It's the online equivalent of repeating back everything someone said to them before you respond. I mean, at worst, it's annoying, but you just want people to follow conventions.

After two years of not having much in the way of direction for modernizing the front-end of the forum, I started to get more motivated to do... something. I probably have a half-dozen blog posts about this, but the challenge has always been about what newer libraries and frameworks to use, and if they made sense. Most of these tools are intended to facilitate a very interactive application with lots of forms. But forums aren't that, they're mostly static text that sometimes people add to. The tools are also kind of all-or-nothing and not really well-suited for just little sections of pages. I did re-do the admin side with Vue.js, and I really like it, but it doesn't make sense on the public side. The win is that all of my inaction has given time for all of the browsers to catch up and support more basic standards around custom "native" web components. These are little chunks of user interface and code bundled into reusable components. And if you're really clever, you figure out how to make them talk to each other and react to changes in data.

To be clear, I could have done this ten years ago, but it was a lot harder. With the components, the Typescript language (a superset of Javascript), and use of some familiar design patterns, I had kind of a moment of clarity about what to do. I think that building Phrazy and MLocker, which use different technologies, but a similar structural approach, helped me out quite a bit. The other day I started figuring out what use cases to build out, and at the top of that list was trying to think of some better way to handle quotes.

The old way was sort of backward. You pushed "quote" and the editor opened with the entire post in a quote box and the author's name above it. The expectation was that you would trim it down to just the part you were responding to. Many people didn't trim, and so the context of the response was basically hidden. Not a great way to do it. Some years ago, I though, if I could just select the text I want and use that to populate the editor, that would be ideal. If I can do it on multiple posts, even better.

I looked around to see if anyone else was doing this, but there aren't many actively developed forums anymore. One I did find sort of does what I was after, but it uses plain text boxes and old school "forum code" with a live preview next to it to see what it will look like. One of the founders of the company making that still thinks that regular people want to learn and use markdown to format text. Not great. I just wanted it to be simple: Select, click, type your response. I prototyped it in an hour, and I started to wonder why I didn't do it years ago. It's super simple, and I could have pulled it off. The novel part for me was that the pieces are not tightly connected. Right now, the button just activates the old code to load up the box, and the box "listens" for quote text to load in. It's the sort of thing that people generally lean on the libraries for.

The problem I didn't account for was discovery. How do you teach people to use it? That ended up being simple as well. If you push the quote button and haven't selected any text, a little message pops up to say "select text." Hopefully Google Translate got the other five languages I support correctly for "select text!"

I've still got a lot of refactoring to do. The plumbing is pretty ugly and spaghetti-like. But I'm super happy with the simplicity of the feature. I'll roll it out to the sites after I complete more refactoring. There's effectively 150 lines of code, and I deleted around 20 of the old code. It's been a long time since I've enjoyed anything more UI oriented on this app.


Simon's education, v7.0

posted by Jeff | Monday, May 16, 2022, 5:30 PM | comments: 0

This is Simon's last week of school. A year ago, we were wondering what this year would look like, not crazy about the idea of him landing in the over-crowded public middle school. As I wrote last year, we decided to put him in a growing private school that generally caters to kids with learning differences. Again, the concern was that he'd get lost in such a huge school at a time when we're trying to figure out what the best way for him to learn is. We didn't feel good about taking him out of public schools, because I really believe in them as an institution, but we didn't feel like we had much of a choice.

A year later, the results are mixed, at best. On the positive side, this was an enormous social opportunity for him. Autism tends to cause you to overlook some differences in people, and I think that made it a lot easier for him to make friends. He had a "BFF" within the first week. On the negative side, the academics were, uh, not ideal. Their intention is to meet kids "where they are," but the problem in this case is that they didn't really have an objectively serious way of evaluating where he was. They said they evaluated him early on, but if they did, there was no transparency. If that weren't enough, grades were arbitrary, and more or less all A's. If we observed him struggling with homework, how is he doing work perfectly in school? They spent like two weeks messing with Rubik's Cubes as "math." The material he was learning was a lot of repeat stuff from fifth grade, and so we're concerned that he's a year behind.

It became apparent to us by the holidays that the school emphasized accommodation over accountability. The goal seemed to be to keep the kids happy, and by extension their parents. Our struggle at home was already trying to balance accommodation with accountability, and frankly they were making that even harder. If I could generalize about Simon's greatest challenge, it's that anything that makes him uncomfortable causes struggle. Whether it's preparing some food item for the first time, or learning a new math concept, or having to understand a word problem, he goes from zero to freak out pretty quickly. I'm sure we're responsible for reinforcing that pattern to some degree, but school seemed to make it worse.

This was causing a fair amount of despair for us. It was a little of "what have we done" and a little "what do we do now" despair. Over the course of the last four months, some things started to come into focus that brought us clarity. The first is that a new middle school is opening up near us, which will relieve pressure on the old one. The down side is that new buildings tend to lack the fun electives and organizations that kids can get involved in, and no matter what they say, we know from three different elementary schools that new buildings never have enough in the way of ESE support. Then his previous elementary principal got transferred to the old middle school, and we saw an opportunity there. We talked with her and went through the process of getting him assigned to the old school, and despite a denial of our request, made the case on appeal and got it done with the endorsement of both principals. So he'll have a familiar face there, and it happens to be one that understands what he needs.

The IEP process is still somewhat challenging, but at the very least we'll have autism and anxiety called out on it, which will entitle him to certain kinds of services. And for all of my concerns about school crowding, at least I know that the public schools have specific curriculum targets and will measure his progress appropriately. I think this is a critical time for him to either like or hate school. I know it will be hard socially (trying not to project my own experience there), but getting to take a video production class or something technology oriented will be a big deal for him. He will have those opportunities. I am convinced through non-academic activity that he's a smart kid, and it's my hope that we can unlock that with the right approach for learning. To help him catch up, Diana is going to work with him over the summer using online resources.

Also, he's half way to graduation, which is unreal.


How I became a rum enthusiast

posted by Jeff | Saturday, May 14, 2022, 5:50 PM | comments: 0

I have a weird relationship with alcohol. In my teen and early college years, I avoided it because of the history of alcoholism and addiction in my family. Like, I militantly avoided it in college at first. In the summer between my sophomore and junior years, I had an opportunity to enjoy it safely, and I was fairly amused at the sensation I had after two beers. When I was legal during my senior year, of course I went to the bar every other weekend, and when I say "the bar," I mean there was only one near the campus. After graduating, mostly I would have a few with friends at home, and sometimes at the wing joint when I met up with friends. The Molson brand Canadian was my go-to, Corona was my backup.

In those early years, I didn't differentiate between "drinking" and "drunk," and given that beer was never really what I would describe as "good," it did seem like you might as well get drunk. I always saw a million bottles behind the bar, but never thought much about what you could make with them. But for my 30th birthday party I made my first mixed drink, in a 30-liter athletic cooler, a classic mai tai that I first had on my first honeymoon a few years prior. I found this rum drink to be delicious.

By the time I got remarried, I rarely drank anything, but hilariously found it convenient to have a box of Franzia in the fridge. I didn't know any better, until my brother- and sister-in-law set me straight. Beer seemed to also disagree with me and aggravate my IBS. Strongbow, the original version of English cider without the tons of extra sugar, started to show up here, and I really started to enjoy it. Then we started cruising, where fruity rum drinks were standard, and we did a mixology class and rum tasting, and everything changed.

I discovered that there were many drinks I enjoyed with white rum, dark rum and spiced rum, usually the common varieties of Bacardi or Captain Morgan. I also learned about sipping rum and the rum old fashioned. Kahlua and Bailey's are a little heavy, but also go well with a lot of things (and each other). Even Malibu, which I had long laughed off as cheap and crappy, was delicious when it was mixed with the right things. I was all about the rum. I think I had avoided liquor in the larger sense for a long time because I associated it primarily with vodka, which I totally don't like.

By the time the pandemic started, the cabinet under our butler pantry sink was full of bottles. In addition to the stuff above, there were the usual bottles of Jack, various liqueurs, the excellent Casamigos tequila, Solerno (which is better than Cointreau) and Pimm's, which Diana introduced me to while in the UK section of Epcot. Indeed, I had built quite a collection of bottles! We do have a bottle of Citron Absolut, because Diana likes the lemon drop martini, and the other stuff I do have sometimes, but I'm mostly about the rum.

We had a little weekend getaway down in Sanibel a few weeks ago, where we got married, and found this amazing tiki bar called Bimini Bait Shack. They had a ton of classic rum drinks on their menu, and most of them were made with a rum called Wicked Dolphin. Diana looked it up on her phone and found that it was distilled in nearby Cape Coral, so we went for a tour and tasting. Left with 12 bottles. After blowing through the vanilla bean variety, which is impossibly good, I ordered more along with a few bottles of the mango flavor. They also make varieties that are better analogs of the above flavors, so I still have a bottle of white, coconut, coffee, aged and likely something else I'm forgetting. It's really great stuff.

Every weekend, I make a drink or two, and enjoy it in the spring Florida breezes. I like rum.


Another air conditioning fail

posted by Jeff | Wednesday, May 11, 2022, 11:05 PM | comments: 0

On Friday morning, it was pretty clear that our upstairs air conditioner stopped working. We had a guy out to look at it, and it was free of fluid or pressure. He saw fluid pooled in the bottom of the heat pump and was fairly certain that the coil had at least one hole. It was going to cost $1,800 to fix. When he arrived today to fix it, with the new coil, he was there with one of his other techs, who noticed a wire rubbing against one of the pipes between the coil and some other part. He pumped the system full of nitrogen, and immediately found that the wire had rubbed a hole in the pipe over time from normal vibration. The coil didn't need to be replaced, and the labor, small part and fluid replacement instead cost around $800. Still not great, but a grand is a lot of money.

The quality of these Lennox systems equates to dogshit. There was a class action suit some years ago because of the copper coils they were using, which don't age well in Florida. But Pulte, the world's shittiest builder (and also being sued constantly), for some reason kept using Lennox even after the class action settlement. The efficiency of the systems is reasonable when it works, but we've had to replace the inside coil on one already, and said unit outside had a hole blown in it from the first lightning strike a few years ago. In between, of course it has leaked out enough to warrant much recharging.

So it's at the point now where you wonder what the gamble is. If we stay in the place for another 10 years, which is questionable, do we spend the $12k+ to replace both systems? It's unlikely that repairs would cost that much, but when you don't have AC, you don't have AC and it's hot.

The decline of this is timed with the fact that Tesla Energy still hasn't fixed my solar/battery plant, so the system is only generating a third of its normal capacity, and that means my most recent electric bill was $230. I haven't seen one that high in years. They have a service appointment for two weeks out, which is completely unacceptable. They're just so fucking terrible at what they do. I'll revisit that when it's resolved.

The last couple of nights were cool enough to get the windows open and sleep OK, but tonight it will be gloriously cool with low humidity. Overnight lows are plateauing around 70, and there are record highs in the forecast for next week.


Carmina Burana in Steinmetz Hall

posted by Jeff | Monday, May 9, 2022, 10:31 PM | comments: 0

After all of the social events and tours, I finally saw a performance in Steinmetz Hall. The Orlando Philharmonic did Carmina Burana along with college and child choirs. You may not know the name, but you know the music composed by Carl Orff. I describe it as three and a half minutes of the most exciting music ever composed. There were more than 150 people in that room to make that music, and there's nothing like it.

And what an extraordinary room it is. The science that isolates that hall is incredible, and all of those sounds, unamplified, fill your head. What an experience.


Home interruption anxiety

posted by Jeff | Saturday, May 7, 2022, 6:59 PM | comments: 0

Our upstairs AC went out again, and this time it's going to cost us quite a bit to fix. I believe these units have been serviced at least six times in less than five years. Having separate units for each floor is pretty common in Florida, so our downstairs is fine. However, that means we're camping out on couches and such instead of sleeping in our beds, and that's not fun. Also, after the second lightning strike that happened almost two months ago, I am still waiting for Tesla to fix the switch between the battery and solar, which means both are bypassed right now and I'm missing half the system during the two months with the highest amount of generated electricity.

This sort of thing causes me a great deal of anxiety. Also in this category are internet outages, builder contractors not fixing the shit they did wrong, movers breaking stuff, selling your house, not being able to sell your house... basically anything that disrupts the peace of home. I'm sure it's an unreasonable expectation, but I want everything to just work in this one place in the world. When it doesn't, I'm constantly on edge.

What I find strange about this is that there are certainly other aspects of life where I don't experience this. If my flight is late, I switch that part of my self off and roll with it to an extent. If there's setback at work, I compartmentalize it. I'm even getting better at managing world events, recognizing the importance of issues without them causing dread. But when home isn't working as home should, I am unpleasant and on edge.

I think this has become more true since first going remote for work a decade ago. When you get to a point where 90% of your time is at home, it's almost an extension of you. Then there was the pandemic.

In any case, another observation about my mental health. Anxiety is something I've been able to manage so far, with varying degrees of success, without drugs. For some reason, that still matters to me even though I've come to terms with the usefulness and appropriateness of using them to help with mental health.