NYCC, days three and four

After watching a few panels on Thursday and a bunch on Friday, I wound up mostly doing other stuff yesterday and today. This is one of those areas where there’s a big difference between actually being at a con, compared to just watching panels from home. If I was actually in New York, at Javits, I would have gone to more panels, even if I wasn’t that interested in them, purely because I was there. At home, given the choice to watch a panel that I’m not that excited about vs. binge-watching season one of Star Trek: Picard, well, I opted to spend most of my spare time watching Picard. I’ve now seen the whole first season. Plus all of the Ready Room episodes on YouTube. And maybe a few episodes of Greatest Discovery. And maybe I also read some reviews from tor.com. Basically, I kind of overdid it on Picard.

My viewing was briefly interrupted by this horrible truck parade that came through downtown Somerville. The linked article says “hundreds of pick-up trucks, SUVs,” and so on, but it was really more like a few dozen total, mostly pick-up trucks and motorcycles. They made a lot of noise, but there really wasn’t much to it. The BLM marches we’ve had in Somerville are generally better-attended, though they make less noise and take up less space, since they’re all on foot.

The combination of all that Trek with the truck parade convinced me to give Biden a few bucks so I can watch this Trek the Vote to Victory thing on Tuesday.

Back on the subject of NYCC, I did watch and enjoy the panel on Genndy Tartakovsky’s Primal, and was happy to learn that there are new episodes airing right now, and more coming. If I hadn’t watched the panel, I wouldn’t have known about the new episodes. I had thought that Primal was a “one and done” kind of thing, and really didn’t expect any more. I’ve already watched one of the new episodes, and it was great.

And the Animaniacs panel was great too. I think I’d heard mention of the new Animaniacs show some time back, but had pretty much forgotten about it. Turns out, it’s going to start up on Hulu on November 20. Of course, I really don’t want to sign up for a Hulu subscription, but I’ll keep an eye out for a Blu-ray release or if they put it up for sale on iTunes or whatever.

There are a few more panels I might watch tomorrow or later in the week, but I think I watched all of the ones that I was really interested in. Now, I have to try to get used to the idea of “going to work” tomorrow. Weird, though, that going to work looks almost exactly the same as being on vacation. I’ll be waking up in my own bed, and I’ll be spending most of my time alone in my apartment, staring at a computer screen, just like a did on my time off. (The trick is that I have to try to do productive work that somebody will pay me for, while I’m staring at the computer screen.)

I guess things are going to stay this way, at least to some extent, for quite some time. The latest word from Dr Fauci is that we probably won’t get back to “normal” until the end of 2021. Which probably means no NYCC or SDCC next year either.

NYCC day two

Today was the second day of the virtual NYCC. I spent a lot of time today watching panels. I didn’t really have anything else to do today, and there were a bunch that I was interested in. I might as well just list them out, with some notes:

  • Adam Savage’s Favorite Cosplay Show & Tell – This was a fun little “show & tell” with Adam Savage showing off some random stuff, including a couple of spacesuits. He’s always fun to watch.
  • Ready Player Two – This was a conversation between Ernest Cline and Wil Wheaton, about Cline’s new book, the sequel to Ready Player One.
  • Twenty Years of Harry Dresden – And this one was a conversation between James Marsters and Jim Butcher, about the Dresden Files. (Interesting that both this one and the Cline panel involved a conversation between an author and the actor who does his audiobooks.)
  • Lewis Black’s Rantcast – This was basically an NYCC special episode of Black’s Rantcast podcast. It was funny, of course, but also surprisingly touching. He was reading letters from fans ranting about stuff they missed (and didn’t miss) about the usual in-person NYCC.
  • Batman Beyond Cast – A discussion with Will Friedle, Kevin Conroy, and Andrea Romano.
  • In Conversation with Scott Snyder & James Tynion IV – This was the only actual comic book panel I saw today. Honestly, I didn’t get much out of it, since I’m not currently reading any of the Batman books that Snyder and Tynion are working on. I may eventually pick some of them up, but not until I’ve caught up on my backlog. (Or at least put a dent in my backlog…)
  • SYFY’s Resident Alien – A panel with Alan Tudyk and other folks involved in this new series. They showed the first ten minutes of the first episode, then did a Q&A. I’m a big fan of the comic, and I’m a little concerned with how different the show seems to be, based on what I’ve seen of it so far. I’ll give it a chance, when it airs in January, but I can’t say I like the direction they seemed to be going in, from those first ten minutes. (I think part of what I didn’t like might have been a misdirect, but I’m not sure.)

I won’t bother with links. If you want to watch any of these, you should be able to find them on NYCC’s YouTube page.

Impulse purchases are always part of the con-going experience. Yesterday, the Trek panel got me to run out and buy Picard season one on Blu-ray (though I was going to do that eventually anyway). It did not convince me to sign up for CBS All-Access, but they’re gradually wearing down my resistance on that. Today’s panels pushed me in the direction of a few purchases, none of which I’ve actually pulled the trigger on. I almost ordered some of the Dresden audiobooks, but I held off. Ditto on a Batman Beyond Blu-ray set. (If I could have found that on sale for a bit cheaper, I would have bought it.)

I haven’t reviewed tomorrow’s panel schedule at all. I’m hoping I can find a few comics-oriented panels to watch. So far, the con has been heavy on promotional panels for books, movies, and TV shows. (Actually, not many movies, now that I think of it. Mostly TV shows. The movie industry has pretty much shut down for now, it seems.) I’ll have to do all of my usual Saturday chores tomorrow, so I’ll probably be busy until around lunchtime. But I’ll likely fill the afternoon with random panel watching. And I should be able to relax all day Sunday and enjoy whatever they have going on for that day. Then, it’s back to work and the “real world” on Monday. Sigh.

NYCC day one

Today is day one of NYCC, or Metaverse, or whatever we’re supposed to call it now. Much like SDCC, it’s all virtual this year. They’re really trying to make it a full con experience, which is nice. There are a bunch of panels streaming on YouTube. I took today and tomorrow off from work, just like I did for SDCC, and I’m trying to get into the con frame of mind, as much as I can. I watched the Star Trek panel earlier today, live, and just finished watching the recording of the Doctor Who panel. (I had a doctor’s appointment today, so I had to break out of the con mood for a couple of hours mid-day to take care of that, and missed seeing the Who panel live.)

I’m not sure which panels are being done live vs. prerecorded, but according to this article, about 25% of them are supposed to be live. So that’s cool. They’re all being streamed “live” at a specific day and time, with the YouTube chat window going, so that helps thing feel a bit more “live”, even if it’s just a prerecorded panel.

The article linked above compares Metaverse to SDCC@Home and DC FanDome, and how NYCC is trying to learn from what worked (and didn’t work) from those two events. And here’s another article about Metaverse, and the evolution of virtual cons. I’d be really happy if we can go back to having in-person cons next year, but I’m not optimistic. If there are in-person cons next year, I probably won’t want to take the chance on going to one, unless, by some miracle, this country actually gets its act together enough to get COVID-19 under control so large gatherings are safe again. I suspect that cons will still be mostly virtual through at least the first half of 2021.

The Star Trek panel was fun. I’m still resisting the urge to sign up for CBS All-Access, but I might break down and do it soon. Lower Decks looks like it’s a lot of fun, and I’m guardedly enthusiastic about season three of Discovery. I picked up the first season of Picard on Blu-ray today, so I’ve got that to watch now. And I guess I can wait a while on Lower Decks and Discovery, since they should both come out on DVD/Blu-ray eventually. (I already have the first two seasons of Discovery on DVD.)

I actually bailed out of the Star Trek panel a bit early, so I missed the announcement that Captain Janeway will be returning in the new Star Trek: Prodigy show on Nickelodeon. I’ll probably watch that one as it comes out, since it’ll be on “normal” TV and I can TiVo it.

There are a couple of more panels I will probably watch tonight, including one on The Expanse, and one on the Sandman audio adaptation. There’s really not much going on today that’s actually related to comic books, which is a bit of a bummer, but there’s more stuff tomorrow.

NYCC, masks, and other stuff

It’s almost time for NYCC, though this year it’s going to be a virtual event called Metaverse. I’ve gone to NYCC a bunch of times, and have been on a roll recently, going in 2017, 2018, and 2019. Alas, I’ll just be watching from home this year. I really wish we could have gotten this COVID thing under control by now, but nope. I haven’t looked closely at the panel schedule yet, but I’m taking off Thursday and Friday next week so I’ll be able to watch some stuff and simulate the con experience a bit, like I did for the San Diego con a few months back. This whole “staying home all the time” thing is starting to wear on me.

I know I still need to take COVID-19 seriously though. Our president’s inability to do so may have been the start of a super-spreader event here in Somerset County. That’s probably an exaggeration, but it’s still not good.

It’s been really hard to process news this year. And the news of Trump’s infection is particularly hard to process. It’s not surprising news, really, given his disdain for mask-wearing and all that. But it’s hard to fit all this stuff in your head and figure out how to react to it and how to deal with it. This column from Politico has a pretty good take on it all. And Nick Kristof’s column in the Times is useful too. (Reminder: wear a mask!)

…and now I’m starting to go down a rabbit hole, reading stories on the Politico and NY Times sites about Trump’s condition. I need to stop doing that, and maybe go out for a nice walk. Maybe ending up at the coffee shop where I can get a nice cappuccino and a pastry. (Which I will bring back to the apartment, of course, because actually eating/drinking at the shop is still too scary. Sigh.)

Bruce Springsteen

I missed the big news from this morning, until a bit later than I usually would have read it. I generally start my day by scanning Twitter and/or Facebook and/or the NY Times, but I started the day today reading this interview with Bruce Springsteen in Rolling Stone. I have no regrets. It was a good article and much more pleasant to read than the news.

I spent a good bit of the day today listening to Springsteen while I was working. I never really liked Bruce when I was younger. I’m not entirely sure why. I liked a lot of what is now called “classic rock”, but I didn’t like Bruce. I started to appreciate him a bit after college, when I got a chance to hear some of his quieter songs, and other stuff outside of his big hits. I still didn’t like him enough then to actually buy any of his albums, but I had a bit of respect for him. And that respect has grown, as he’s done some pretty interesting stuff over the years. Still, not enough to go out and buy any albums though.

But now, for some reason, I’m getting interested in both his new album and his back catalog. I’m even unironically enjoying some of his old hits (though some still strike me as a bit corny). So I listened to some random stuff today, via Amazon Music, and Spotify, and YouTube.

I still haven’t talked myself into getting a paid subscription to Spotify or Apple Music or anything, so there are limits to what I can listen to that way, and I’m still the kind of guy that wants to buy CDs or MP3s. I went around in circles today, thinking about buying some stuff, and eventually settled on buying a used copy of Essential Bruce Springsteen from a seller on Discogs for $6. (It should be the full 3 CD version.) I also found that there’s a good bit of live Springsteen stuff available via nugs.net. That might be worth digging into, though I don’t want to wind up with a live Springsteen obsession that looks anything with my live Phish obsession from several years back. (It didn’t really cost me a lot of money, but it’s taking up a lot of disk space.)

Bruce is also on the cover of the AARP Magazine that I just got in the mail today. I haven’t read the article yet, but I’m looking forward to it. And I just remembered that Springsteen on Broadway is on Netflix, so I can add that to my watch list.

Today is also Bandcamp Friday, again. Today, I bought Good Music to Avert the Collapse of American Democracy, Volume 2, along with a live Jason Isbell album, and the new Drive-By Truckers album. So, not as much as last month (only about $40 vs $75 last month).

COVID Alert NJ

I installed the new COVID Alert NJ app on my iPhone today. It’s been more than six months since the pandemic started, but hey, better late than never, I guess. NJ.com and NJTV have articles about the app, and ABC 7 has a write-up on New York’s app, which is basically the same as the NJ app, but with a different color scheme (purple vs. blue). The first state to release an app using the new Apple/Google API was apparently Virginia, which released their app in early August.

NJ’s app was apparently created by an Irish company, because I guess they couldn’t find any competent software developers in NJ. (I kid. There are plenty of competent developers in NJ, but we’re slow and expensive.) The company is called NearForm. They started with the app for Ireland, I think, then started rebranding and customizing it for other countries and for several US states.

I found a Guardian article from a few months ago indicating the the Ireland app had over a million installs at that time. NJ’s app is currently at just under 35,000 installs, according to the app itself. (I’m not sure if that’s just the iOS app or combined iOS/Android.)

The tech behind these apps is kind of interesting. Here’s a write-up on it, from Apple’s web site, and one from Google. This stuff is helpful, but only if they can get a lot of people to install the app and enable it. And, well, we know how much all the other stuff that only works if we all do it is working out here in the USA…

 

Weird Al on the presidential debate

I don’t usually post about politics, but I feel like I need to write something today, just to maybe mark a few odd items, for posterity:

  1. Weird Al’s reaction to last night’s presidential debate was silly and made me feel a little better about the whole thing. (Not a lot better, but a little.) The fact that it’s posted on the NY Times site makes it a little weirder, but somehow even better. It amuses me to think about the editorial process that led someone to decide that Weird Al was the right guy to go to for reaction to a presidential debate.
  2. In less amusing news, my House rep, Tom Malinowski, is getting death threats from QAnon, after a misleading press release and ad from Republicans. Here’s a Post story on the ad, and here’s an NJ.com opinion piece on his opponent’s refusal to address the issue at all. I’ve donated a few bucks to Malinowski’s campaign on a couple of occasions, and I really do think that he’s a good guy. I’m sure he’s not perfect, but he comes off as smart, serious, competent, and concerned about his constituents.

I thought I had an item #3 for that list, but I’m exhausted now, just thinking about the election.

NJ MVC, IFTTT, RSS, and other acronyms

This post may wind up covering a variety of barely-related topics. I have a bunch of stuff in my head today and I’m making connections between things that might not make much sense. Buy anyway…

I had to renew the registration for my car recently. I normally do that by mail, and I did that again this year, and got the registration card back, no problem. But then I got a letter saying that NJ MVC had undercharged me by $7 due to a computer glitch and I’d have to pay that. The letter didn’t really include any helpful information about how to submit that $7 to them. It wouldn’t let me do it online. And there was no indication that they’d accept it by mail. I definitely don’t want to go near an MVC office right now, since they’ve been mobbed ever since they reopened in July. (Apparently, the line at the Somerville MVC starts forming at 4 AM every day.) I really wasn’t sure what to do, but thankfully I found an article on nj.com today explaining the problem and indicating that it was OK to mail in the $7, and gave the address to send it to.

NJ.com has been reasonably useful throughout the pandemic. They’ve run a lot of good, useful, articles. (Mind you, they also run a lot of nonsense and clickbait.) They started asking people to pay $10/month to subscribe to the site at some point earlier this year, and I thought about doing it. But I couldn’t quite talk myself into it. First, there’s the aforementioned nonsense and clickbait. Then, there’s the worry that they won’t make it easy to cancel.

In the past, I’ve often used virtual credit card numbers when I’m subscribing to something that might be hard to cancel. Citi used to have a good program for virtual card numbers, including a Windows program that you could use to generate them on the fly and copy them into forms on web pages. But that program stopped working a while back. And the web-based version relied on Flash, and I don’t have any browsers left on any of machines that are still running Flash. So I kind of gave up on them.

I saw an announcement today from 1Password saying that they were going to start integrating with privacy.com to allow users to generate virtual card numbers right from 1Password. That sounded promising, but it draws from your bank account, and not from a real credit card. So it seems like there could be complications there. But that got me thinking about virtual card numbers again, so I checked Citi’s web site, and found that they’ve finally rewritten their virtual card functionality to work without Flash. (They’ve also eliminated the Windows program, which is a bummer, but I was expecting that.)

And I saw that NJ.com recently added an option to pay $100 for a full year, rather that $10/month. So I went ahead and paid for a year of NJ.com with a virtual card number. I figure their article explaining the $7 MVC mess was worth at least $20 to me. And somebody’s got to pay for all of their articles on pork roll sandwiches and ranked lists of 326 Bruce Springsteen songs, so it might as well be me. A year from now, I’ll figure out if I want to pay for another year.

Overall, I’ve been struggling with how to both consume and support local news during the pandemic. I generally watch NJTV News every night. Their newscast is pretty good and covers a lot of NJ news, but it’s mostly political state-level stuff. I don’t currently support NJTV or Thirteen, and I probably should. I watch enough stuff on PBS that I should toss them $5/month, at least.

I’ll also occasionally look at MyCentralJersey.com, which covers some local Somerset county news, but they’re hiding a lot of stuff behind a paywall now. They have a deal for $39 for one year, and I might go ahead and pay for that with a virtual card too.

I try to get a lot of my news through email and RSS. I use IFTTT to set up some email stuff, and The Old Reader to manage my RSS feeds (along with Reeder on iOS). IFTTT has recently introduced Pro subscriptions, and I would need to start paying for Pro to keep doing some of the stuff I’m currently doing with the service. I don’t really want to do that, so I’ve been looking at shifting more stuff into The Old Reader. But I hadn’t really looked too closely at IFTTT Pro. I just noticed a blog post from David Sparks that’s got me a little more interested in it. It sounds like they might be adding enough value to make it worth the minimum $2/month that you can pay for Pro under their current “set your own price” plan. It’s not quite clear, but maybe you can actually write code as part of Pro applets? That would be useful.

So, yeah, this is me going down a bunch of rabbit holes and thinking about spending a bunch of money. I should probably stop now.

performance tuning surprises

Here’s another blog post about the program I’m currently working on at my job. This is the same program I blogged about yesterday and a couple of weeks ago.

Today, I was trying to fix a performance issue. The app originally ran really fast. It just had to make a few API calls, filter and combine some data, then spit it back out in JSON format. It took less than a minute to run. But then, I was asked to add a new data element to one of the files. An element that I could only get by calling a new web service method repeatedly, once per order, for about 7000 orders. It shouldn’t be an expensive call, but the end result was that my 1 minute runtime was now up to 10 minutes.

The first thing I tried doing was adding some concurrency to those 7000 new API calls. I did that using the first technique described in this article, implementing a ConcurrentQueue. I wasn’t really optimistic that it would help much, but I thought it was worth a try. It didn’t really help at all. The program still took about 10 minutes to run. So I undid that change.

The next thing I did was to look and see if I was repeating any of the API calls. While I was processing 7000 records, there were some cases where the same sales order number was found on multiple records, so I was making extra unnecessary API calls. So I implemented a simple cache with a dictionary, saving the API call results and pulling them from cache when possible. That didn’t help much either. About 90% of the calls were still necessary, so I only got down from 10 minutes to 9 minutes. But that was at least worth doing, so I left that code in place.

Then, finally, it occurred to me to look at how I was calling the API. This new API call was part of the WCF SOAP service that I’ve mentioned previously. Well, the way I wrote my wrapper code for the API, I was creating a new call context and service client for every call. I didn’t think that would be a huge issue, but I went ahead and refactored things so all the calls used the same call context and client. Well, that got the execution time back down to one minute. So really all of that extra time was spent in whatever overhead there is in spinning up the WCF client object (and I guess tearing it down when it goes out of scope).

That was really unexpected. I hadn’t thought about it much, but I assumed the code behind the instantiation of the service client was just setting up a structure in memory. I guess that maybe it’s also establishing communication with the server? Theoretically, I could dig into it, but I don’t really have the time for that.

The moral of this story is that, when performance tuning, some of the stuff that you think will help, won’t, and some of the stuff that seems dubious, might actually make a huge difference!

Trying to debug a .NET Core app as a different user

I’m working on a .NET Core console app at work that, on one level, is pretty simple. It’s just calling a couple of web services, getting results back, combining/filtering them, and outputting some JSON files. (Eventually, in theory, it’ll also be sending those files to somebody via SFTP. But not yet.)

There have been a bunch of little issues with this project though. One issue is that one of the web services I’m calling uses AD for auth, and my normal AD account doesn’t have access to it. (This is the SOAP web service I blogged about last week.) So I have to access it under a different account. It’s easy enough to do that when I’m running it in production, but for testing and debugging during development, it gets a little tricky. I went down a rabbit hole trying to find the easiest way to deal with this, and thought it might be worthwhile to share some of my work.

In Visual Studio, I would normally debug a program just by pressing F5. That will compile and run it, under my own AD account, obviously. My first attempt at debugging this app under a different user account was to simply launch VS 2017 under that account. That’s easy enough to do, by shift-right-clicking the icon and selecting “run as different user”. But then there are a host of issues, the first being that my VS Pro license is tied to my AD/AAD account, so launching it as a different user doesn’t use my license, and launches it as a trial. That’s OK short-term, but would eventually cause issues. And all VS customization is tied to my normal user account, so I’m getting a vanilla VS install when running it that way. So that’s not really a good solution.

My next big idea was to use something like this Simple Impersonation library. The idea being to wrap my API calls with this, so they’d get called under the alternate user, but I could still run the program under my normal account. But the big warning in the README about not using impersonation with async code stopped me from doing that.

So, at this point, I felt like I’d exhausted the ideas for actually being able to run the code under the VS debugger and dropped back to running it from a command-line. This means I’m back to the old method of debugging with Console.WriteLine() statements. And that’s fine. I’m old, and I’m used to low-tech debugging methods.

So the next thing was to figure out the easiest way to run it from the command-line under a different user account. I spent a little time trying to figure out how to open a new tab in cmder under a different account. It’s probably possible to do that, but I couldn’t figure it out quickly and gave up.

The next idea was to use this runas tool to run the program as the alternate user, but still in a PowerShell window running under my own account. I had a number of problems with that, which I think are related to my use of async code, but I didn’t dig too deeply into it.

So, eventually, I just dropped back to this:

Start-Process powershell -Credential domain\user -WorkingDirectory (Get-Location).Path

This prompts me for the password, then opens up a new PowerShell window, in the same folder I’m currently in. From there, I can type “dotnet run” and run my program. So maybe not the greatest solution, but I’d already spent too much time on it.

One more thing I wanted to be able to do was to distinguish my alternate-user PowerShell session from my normal-user PowerShell session. I decided to do that with a little customization of the PS profile for that user. I’d spent some time messing with my PowerShell profile about a month ago, and documented it here. So the new profile for the alternate user was based on that. I added a little code to show the user ID in both the prompt and the window title. Here’s the full profile script:

function prompt {
    $loc = $(Get-Location).Path.Replace($HOME,"~")
    $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' } else { '' }) +
    "[$env:UserName] " +
    $loc +
    $(if ($NestedPromptLevel -ge 1) { '>>' }) +
    $(if ($loc.Length -gt 25) { "`nPS> " } else { " PS> " })
}
$host.ui.RawUI.WindowTitle = "[$env:UserName] " + $host.ui.RawUI.WindowTitle

You can see that I’m just pulling in the user ID with $env:UserName. So that’s that.

I’m not sure if this post is terribly useful or coherent, but it seemed worthwhile to write this stuff up, since I might want to reference it in the future. I probably missed a couple of obvious ways of dealing with this problem, one or more of which may become obvious to me in the shower tomorrow morning. But that’s the way it goes.