Dracula Pro

I’m one of those weirdos who experiments with fonts and color schemes and application themes more than I probably should. For the most part, I do actually stick with some sensible defaults, but I keep coming back to it and messing around. Sometimes, this is just a way to procrastinate and avoid real work. But I think there’s a fine line between procrastination and “sharpening the saw.” My eyesight is bad enough at this point that even a small improvement in legibility can help me out a lot.

So this week, for some reason, I got on a “playing with themes” kick again. I’m not even sure what kicked it off. But my focus this week was the Dracula theme. The basic free version is available for quite a few apps! I first started using it with git bash, the version of bash that comes with Git for Windows. That was quite some time ago. Dracula was included with the default themes there, and it was easier on my eyes than any of the other defaults. I’ve seen it included here and there with other apps, but hadn’t paid much attention to it.

But, again, something drew my attention to it this week, and I got curious about the paid Dracula Pro version. It costs $80, which seems like a lot just for a pack of themes, but they throw in some other stuff too. After some dithering, I decided to go ahead and pay for it. I haven’t seen a lot of reviews of it, so I thought I’d write one up here.

I’m not specifically a “dark theme” or a “light theme” guy. I lean more towards light themes, so paying for a pack of mostly dark themes doesn’t really make much sense for me, but I found Dracula to be more usable than most other dark themes, so I thought I’d give the Pro version a try.

After you pay for it, you’re directed to a Gumroad page where you can download a zip file. It’s a big 750 MB file, which surprised me a bit. Most of that space (about 600 GB) is the audiobook version of the creator’s book, 14 Habits of Highly Productive Developers. I think maybe they should have put that in a separate zip file, but I guess it was simpler this way.

I’ll walk through the contents of the zip file here, with some comments on what I’ve tried so far.

  • As mentioned above, there’s a content folder with copies of the ebook and audiobook for 14 Habits of Highly Productive Developers. The ebook is available in English, Portuguese, and Spanish. EPUB and MOBI versions are included for each. The audiobook is available in English and Portuguese, in MP3 format. I haven’t tried reading/listening to any of it yet, but I did copy the EPUB to my Kobo. I’ll probably compress the MP3s into a single M4B file and copy it over to my iPhone at some point too.
  • Next, there’s a design folder, with some info about the color palettes that I guess would be useful if you were designing a theme for a new app and wanted to use the Dracula Pro palette.
  • There’s a fonts folder, with five fonts, all of which are already available for free. So it’s useful to have them all together in one place, but it doesn’t add any value really. The fonts are Cascadia Code, Fira Code, Inconsolata, JetBrains Mono, and Victor Mono.
  • There’s an icons folder, with custom icons for a bunch of different applications. I don’t see much point in messing around with icons. I guess some people like doing that, but to me, it seems like a lot of work for little gain.
  • Then there’s the themes folder, which is basically what you’re paying for. It includes themes for 21 different apps. I’ll get into some details on that below.
  • And last is the wallpapers folder. There are a bunch of files here, but they’re all basically the same wallpaper design just in different sizes/resolutions, and with slightly different color combos.
  • I should mention that the description of Dracula Pro says that it comes with a “bonus screencast,” but I don’t see that in the zip file, or any reference to it in the email receipt.
  • I’d also mention that the description on the website says “Your license covers multiple computers with activation on up to 3 devices.” Based on that wording, I was a little worried that there would be some kind of half-assed activation software included with the package, but there isn’t. (Not that it would even be possible to enforce that for most of this stuff, but I’m glad they didn’t try.)

So that’s a bunch of stuff, and it’s well-organized, but it’s up to you to decide if it’s worth $80 or not.

There are seven variants of the theme, six dark and one light. The main dark theme is called Dracula Pro. The light theme is called Alucard. the rest of the themes are all named after various vampire-adjacent characters (Buffy, Blade, Morbius, etc). It’s cute. So far, I’ve only messed with Dracula Pro and Alucard. The other dark themes seem to be minor variations on the main Dracula Pro theme.

Here’s what I’ve tried out, and what’s worked for me and what hasn’t:

  • I’ve applied the Visual Studio Code theme on my home and work computers. It’s distributed as a .VSIX file. (The free Dracula theme is also a .VSIX file, available in the VS Code extension marketplace.) Since the Pro VSIX file isn’t freely available, it’s not in the Marketplace and needs to be installed manually. And it won’t sync between computers like the Marketplace extensions will. So that’s a bit of a pain, but not a big deal. It’s working well for me, and I think I’ve going to stick with it.
  • There are no themes in the pack for the regular Visual Studio product, which was a bit of a disappointment. The free Dracula theme is available in the VS Marketplace (here), so I’m not sure why they didn’t create a variant for the paid theme. Honestly, though, for VS 2026, the “Cool Breeze” theme (one of the included default themes) seems to work really well for me, so I’m sticking with that anyway.
  • On my Mac, I tried the Dracula Pro and Alucard themes for the Mac Terminal app.  Both are fine, but I don’t do that much work in Terminal on the Mac, and was happy enough with the default theme.
  • For Windows Terminal, I imported the Dracula Pro theme, and I’ve decided to use that as my new default for git bash and Ubuntu tabs, but I’m leaving the PowerShell default as-is (the “Campbell” theme), since I think Dracula Pro doesn’t work as well with PowerShell.
  • I tried Dracula Pro and Alucard in Notepad++, but have had some issues there. I won’t get into details here, but I might not bother going further with that. (Or I might, if I get bored and want to mess around with XML files for a while…)
  • There’s not much else in the way of themes that I want to try. My main text editing environments at this point are Visual Studio, VS Code, Notepad++, and Dynamics AX 2012, which isn’t customizable at all. Terminal windows, for me, are mostly through Windows Terminal and sometimes Mac Terminal.app. So this is covering most of my bases.

As to fonts, I’ve been reviewing my font settings too, and for now, I’m trying to standardize on Cascadia Code. I was already using that for a lot of stuff anyway.

So that’s my review of Dracula Pro. Was it worth $80? Is it that much better than the free version? I don’t know. But it was a good opportunity to review all of my font and color settings and try to make things a little better, so I don’t regret it.

one more Towers of Hanoi experiment

OK, after my last post, I was going to spend the rest of the day watching the last episode of Stranger Things, but I got the itch to return to my AI experimentation, so I did. Specifically, I decided to try my idea to upgrade to Copilot Pro and build the app again from scratch with a different model. The end result can be found here. I set the model to Claude Opus 4.6 (high) and worked through it.

Things went much more smoothly than they did the first time (when I was using Haiku 4.5). Still, the end result wasn’t quite as good as the one produced with Claude Code.

I’ve got a 30-day free trial of Copilot Pro, so I may experiment with it some more over the next few weeks. Of course, I have a paid Copilot sub available to me from work too, so I really don’t need a personal sub, if I’m just using it to mess around a little. So I don’t think I’ll keep the personal Pro sub.

For personal experimentation, going forward, I’ll probably use my Claude Pro sub, since I’ve paid for that for a whole year.

Oh, and one more thing on the Towers of Hanoi: I’m finding myself slightly coveting the wooden puzzle shown on that episode of Astrid. I’ve looked around on Amazon and Etsy, and there are a lot of versions of it out there, but none of them really grabbed me. So for now, I think I’ll stick with the virtual versions.

more on Claude Code and GitHub Copilot CLI

Since my last post, I’ve been doing more experimenting with both Claude Code and GitHub Copilot CLI. I’d been having trouble coming up with any good ideas for little projects to work on, but I recently watched an episode of Astrid, in which the main character is working on a Towers of Hanoi puzzle. I’m pretty sure I had a little BASIC program for a Towers of Hanoi game running on my TRS-80, a very long time ago. I hadn’t thought about it much since then though. But it seemed like a good little old-school challenge I could use to spend some more time with AI coding tools.

I started out with Claude Code. My methodology was to start out by writing a “requirements.md” file and placing it in a new folder. I then launched Claude Code in that folder and asked it to generate a “PLAN.md” file, with a detailed plan to create the application. I then iterated through the steps in the plan, letting Claude do most of the work. That worked really well, and I had a running, bug-free, application in just about an hour. Checking my usage, I saw that I’d used just a third of my session limit and 4% of my weekly limit. And I was using whatever the default model was, probably Opus 4.6? You can see the whole project here, if you want.

After that, I tried the same experiment with Copilot CLI. That didn’t go nearly as well. The generated PLAN.md file wasn’t bad, but it was a good bit less detailed than Claude’s. And, while I got to a “finished” application pretty quickly, it had a fair number of bugs in it. I spent a little time working through those bugs today, and I have a finished application now, though it’s still a little rough around the edges. In terms of usage, I’m at 50% of my monthly max (though of course I’m on the free plan here). For the model, I used the default, which was “claude-haiku-4.5”. I think that may account for a good bit of the difference I saw between Claude and Copilot here, though it might not be all of it. I think that, if I paid for a Pro plan and switched to Opus 4.6 here, I would have gotten results similar to Claude. I’m not sure though.

So where to go from here? In both of these cases, I had asked the AI to create a C# console app for the game. I’m considering going back to the Claude one, and asking it to rewrite the user interface using a TUI library, like Terminal.Gui or Spectre.Console or maybe Consolonia. I haven’t played with any of these, but I’ve been curious about them, so that might be interesting.

I’ve also considered asking Claude to add a SPA project to the solution with a web-based user interface. I could either tell it to use a specific technology for that, or leave it open and see what it does. That might be fun.

I could also bite the bullet and pay for the Copilot Pro plan, and then repeat the exercise from scratch in Copilot with a better model and see how that works. And/or take the PLAN.md file from the Claude implementation and let Copilot use it. It would be interesting to see how much of a difference a good, detailed, plan makes.

Well, I’m off today for Presidents Day, and I’ve already spent a good bit of the morning messing around with this stuff. Maybe it’s a good time to have lunch, and then switch to just relaxing for the rest of the day.

Mermaid, Copilot, Claude Code, Project Euler, and some other stuff

Once again, I’ve been meaning to write up a bunch of stuff here on my blog, but just haven’t gotten around to it. In my last post, from about two weeks ago, I blogged about the nightmare that was Main St overnight construction. Well, the good news is that there’s hasn’t been any more over the last couple of weeks. The bad news is that they haven’t been able to do it because the weather has been so bad. We had a big snowstorm, followed by very cold temperatures, so a lot of the snow is still on the ground. I won’t get into all of the inconvenience that’s caused. I have other stuff I want to blog about. Let’s just say that a combination of stuff, staring with the construction, then the weather, has really put a dent in my productivity and equanimity this year.

So on to the next thing. One thing I’ve actually managed to learn and enjoy playing around with this year has been Mermaid, a language for creating diagrams programmatically. I’ve always hated creating diagrams with drag & drop tools like Visio and Lucid. I’m just not good at it. I never get things quite right. With Mermaid, I just describe the diagram in code and let the system render the diagram. It might not always look as pretty as a carefully handmade Visio or Lucid diagram, but it’s good enough for me!

I stumbled across Mermaid via a reference to it in David Sparks’ Obsidian Field Guide. I learned it by reading a book called Creating Software with Modern Diagramming Techniques, which also discussed the C4 model, which is a simple framework for thinking about how to use diagrams to describe a given computer system. None of this was really planned; it was just serendipity, but it turned out to be fun and useful. I’d recommend looking into it, if you have to create diagrams, and like the idea of doing it through code.

Topic number three: AI-assisted programming. I’ve been messing around with GitHub Copilot for a while. I passed an exam on it late last year. I’ve been using it at work, for my C# work. (A lot of my work is in AX 2012, using X++, so it’s not easy to use AI assistants for that.) I’ve found Copilot to be a mixed bag, in practice. I do use it, but it’s often more trouble than it’s worth.

I keep hearing good things about Claude Code, though. We’re not allowed to use it at work (sigh), but I eventually felt I had to give in and try it. This article about Microsoft not just allowing, but encouraging, their employees to try Claude Code was the thing that really pushed me to dive in.

So I’ve spent some time this week trying to figure it out. First, I had to sign up for a Claude Pro subscription, at $20/month. (I actually decided to go all-in and pay for a full year, at $200.) That money was another thing that was holding me back with Claude Code. Since I already have access to Copilot, I didn’t want to pay for another AI subscription. But, yeah, I gave in.

The next stumbling block for me was knowing that Claude Code is oriented more towards Linux and Mac developers, vs. Windows. It relies on Node.js and npm, which are… not my favorite tools. GitHub Copilot is integrated right into Visual Studio and VS Code, so you can get started with it quite easily, if those are the tools you’re using. (And, for me, they are!)

After some weeping and gnashing of teeth, I finally decided to set it up in WSL on my Windows 11 laptop. That wasn’t too hard. I initially used it in conjunction with a repo I had on my Windows drive, and which I was trying to work on in Visual Studio 2026. But that’s not a great way to work. Claude Code needs to be able to build and run your project, and if I’m doing that on the Windows side, it’s going to leave Claude crippled.

So, then, I took the leap and set myself up for .NET development under WSL. (That, also, wasn’t too hard.) So the setup I settled on is, basically, opening a WSL prompt in Windows Terminal, changing into my project folder (now in the WSL filesystem), running “code .” to open my project in VS Code, then running “claude” from the prompt to set up the Claude Code environment. (Using VS Code from WSL is described here.) So I switch back and forth between Claude Code running in the terminal and VS Code.

Once I started doing that, I was surprised to see that I could chat with Claude Code from a chat window in VS Code. Honestly, I’m not even sure how that happened, since I didn’t install the Claude Code extension in VS Code. I’m going to have to figure that out at some point.

But my main way of working was to chat with Claude in the terminal session, let it change stuff in my project, then review it in VS Code, and build and test it there. (I did let Claude build and test it a bit, too. That worked.)

The project I choose to use for my Claude Code experiment was my Project Euler repo. (I last messed around with it back in 2023.) I’ve found that Claude Code can easily solve Euler problems by just typing “implement a solution for problem XX” and then letting it go. That’s probably because so many other people have solved the problems, then blogged about them. So Claude probably has a bunch of solutions and information about the older problems in it’s training data, so it’s all baked in. But I wanted to use trial and error, and actually learn some stuff, so I figured out how to prompt it to work with me rather than just doing the work itself. Part of that was explaining my intentions in my CLAUDE.md file. (I’m not sure how much that helped, but I think it did.)

So, at this point, I know I’m only using about 10% of the power of Claude Code. Maybe less. There’s a lot more I could try. Small steps for now. I’m making progress!

New Year’s Day 2026

Well, here we are, with another New Year’s Day post. I’ve been doing these posts since 2008 or thereabouts. It occurs to me now that I should create a category for these posts, so I can see them all together. So I just did that. The category is NYD, and I have added it to all (or most) of my previous New Year’s Day posts.

Health

2025 was a bit of a rough year. Honestly, it didn’t start well, and it didn’t end well. I started the year sick, and I ended the year sick. There were a good number of healthy days in between, of course, but right now I’m fighting a cold (or flu or whatever) that’s been on and off since Thanksgiving. And I had my second bout of COVID in 2025, in July. That was unpleasant.

Travel

I don’t think I left NJ at all in 2025. No trips to NYC or anywhere else. I didn’t even go too far within NJ. I finally closed my E-ZPass account and returned my tag last month. I hadn’t used it since 2019.

Weight

I started the year at 165 pounds, and ended it at 167. (It’s gone as high as 169, but hasn’t stayed that high for more than a day or two.) I’d hoped to keep it at 165, but I haven’t quite managed to do that. In 2024, I went from 160 to 165, and the year before that, from 150 to 160. So I’ve cut my yearly increase from 10, to 5, and to 2 pounds. So that’s progress!

Exercise

It’s kind of funny that Apple Fitness doesn’t have a fancy “year in review” function the way so many other apps/services do. Going into the Health app, and looking at some yearly graphs, here’s what I see:

  • I’m averaging around 500 move calories per day over the last year.
  • I’m getting an average of 7800 steps in per day.
  • I’m averaging 28 minutes per day of exercise.

I also just downloaded an app called Fitness Wrapped, which is supposed to generate a year-in-review, but it requires payment before showing me the 2025 summary. It looks interesting, but I don’t know if I want to pay for it.

Either way, I think I did fine on exercise in 2025. It seems to be down from 2024 (550 move calories and 45 minutes exercise per day), but it’s fine.

Work

We didn’t do performance reviews this year, but I did get a small raise. It was slightly bigger than 2024’s raise, but smaller than 2023’s, for what that’s worth.

In January 2025, I transitioned to a new boss. (My previous boss is now my boss’s boss, so he’s moved up a bit.) The new boss is someone I’ve worked with for years, and I think we have a good relationship. It can be hard to tell, when you don’t have a formal performance review or any other structured review, but I think I’m doing OK.

Learning

My 2024 performance review included a goal (from my previous boss) that I pursue a SAFe Certification. I wasn’t that enthusiastic about it, but I figured I should give it a try, so I did a bunch of e-learning around it, including a long series of videos on O’Reilly Learning. The cert exam is pretty expensive, and I never got an OK to go through with it, so I dropped it at some point and concentrated on other stuff.

I also mentioned in interest in pursuing an AZ-204 certification in my New Year’s post for 2025. I did actually go through with that one, and two other Microsoft certs. I passed the AZ-900 in April, the AZ-204 in June, and the GH-300 in December. So I’m a bit proud of getting all of that done.

This year, I’ll need to renew the AZ-204, if I want to keep my “Azure Developer Associate” status. I have until June to do that. And the renewal test is simpler than the initial one; you can do it without all of the Pearson OnVUE nonsense. So I’ll probably do that.

Books

Now onto some fun stuff. My Goodreads 2025 reading challenge shows me as having read 60 books. I think it was actually more like 50; the challenge picks up stuff from my Kindle that it probably shouldn’t, but I’m not going to try to clean that up.

I finished reading A Memory of Light in January, so that finished up the Wheel of Time series that had taken up so much of my time in 2024. I didn’t take on a similar project in 2025; I just read a bunch of random stuff, really.

  • I read a few Robert A. Heinlein novels that I thought I hadn’t read before, but which I discovered that I had read, probably in my teens. So that was interesting.
  • I was going to read a few Kurt Vonnegut books, but I see I only read one, Breakfast of Champions. Maybe I’ll get to a few more this year.
  • I managed to finish The Stand, by Stephen King, which I’d started in 2019, and then abandoned. That’s a very long book, and took a good chunk of time to get through.
  • I got on a Star Trek kick near the end of the year, and finished the Rise of the Federation series. I also started the Prey series. I’m almost done with that. (I was going to try to finish off the last book yesterday, but didn’t quite make it.)
  • I didn’t do a lot of self-help reading this year. I did finally manage to read How to Win Friends and Influence People, but that’s about it.
  • And I didn’t do much book reading for professional purposes. I read one random book on AI, and started another. I’ll probably mark that second one as “abandoned” on Goodreads and give up on it. I wasn’t getting much out of it. At this point, I guess I’m mostly doing all of my professional learning in video form, via O’Reilly and Pluralsight.
  • My comic book reading this year was pretty random. I read through a few volumes of Greg Rucka’s Lazarus series. I’m enjoying that, and should get back to it soon. I read all three volumes of Ed Brubaker’s Velvet series. I really enjoyed those too.

For next year, I’d like to maybe make some progress on my backlog of Dresden Files novels, Laundry Files novels, or maybe Discworld. (I said the same thing in last year’s post, and didn’t do any of that. So maybe in 2026.)

Summary

2025 felt like a “let’s just get through this” kind of year. I don’t blog about politics much, but… geez. And my health has been up and down. I’m hoping 2026 will be better, on several fronts, but I’m not sure it will. I’m pretty sure I’ll get through it though. I’ll end with links to a couple of funny New Year’s Day comic strips: Over the Hedge and Lio.

Evernote to Obsidian, work in progress

As per my previous post, I went ahead and migrated myself from Evernote to Obsidian yesterday. I’m now almost at the point of no return. (Or at least at the point where I’d have wasted a lot of effort if I were to throw it away now and go back to Evernote.)

I used Yarle for the migration. I’d done several experimental, partial, migrations first. For the final migration, I did all of my Evernote notebooks all at once. (I had a thought in my head that Yarle might resolve cross-notebook links if I did that.) The migration went pretty smoothly, but Yarle seemed to lock up at one point. I checked the count on the output files, and it seemed like it had created all of them, so I did an “end task” on it and proceeded from there.

In the end, I’ve wound up with a lot of broken links. I’m starting to wonder if killing the Yarle process was a mistake. Maybe it had created all of the .md files, but was still reconciling the links? I don’t really know enough about how Yarle works.

Either way, I’m now cleaning up hundreds of broken links. With the broken links plugin, I’m able to at least identify them easily. There are actually two different kinds of broken links in my vault now: there are many ‘regular’ broken Markdown links; I can ID those with the plugin. Then, there are links that point out to share.evernote.com, which didn’t fully get converted to Markdown links. Those are technically ‘valid’ links, but of course they open up my original Evernote notes in a web browser, so I’ll need to clean those up too.

I started doing the link cleanup manually, but at some point, I saw how big the job was getting, and decided to write a couple of helper scripts. With the help of Kagi Assistant, I wrote two PowerShell scripts. The first cleaned up links where Yarle had left them in a format like this:
[[guid/guid|name of link]]
In that case, I wanted to change them to:
[[name of link]]

Here’s the script I used:

 Get-ChildItem -Recurse -Filter *.md | ForEach-Object {
    $content = $_ | Get-Content -Raw
    $new = [regex]::Replace($content,
        '[[[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|([^]]+)]]',
        {param($m) "[[{0}]]" -f $m.Groups[1].Value},
        'IgnoreCase'
    )
    if ($new -ne $content) {
        $_.FullName                    # show changed file
        Set-Content -NoNewline -Path $_.FullName -Value $new
    }
 }

And for the second case, I wanted to clean up the external Evernote links, like this:
[name of link](https://share.evernote.com/note/guid)
To again change them to this:
[[name of link]]

So here’s that script:

Get-ChildItem -Recurse -Filter *.md | ForEach-Object {
    $content = $_ | Get-Content -Raw
    $new = [regex]::Replace($content,
        '[([^]]+)](https?://share.evernote.com/[^)]+)',
        {param($m) "[[{0}]]" -f $m.Groups[1].Value},
        'IgnoreCase'
    )
    if ($new -ne $content) {
        $_.FullName                    # print the altered file
        Set-Content -NoNewline -Path $_.FullName -Value $new
    }
}

I didn’t even really test these scripts, I just backed up my vault, then ran them. And, surprisingly, they seemed to work right on the first attempt.

So that got me through most of the link cleanup. I then did a bunch of manual fixes, and just kept going until the “broken links” list was empty.

(I may have mixed up my tenses in this post. I started writing it as I was working on the migration, and finished it after I got all the link cleanup done. Sorry.)

My next task will likely be attachment cleanup. I guess that’ll go in yet another blog post!

GitHub Copilot GH-300 exam

I took and passed the GitHub Copilot GH-300 exam last week. That’s the third Microsoft exam I’ve passed this year! (The others were AZ-900 and AZ-204.) This exam was pretty easy. I did these two learning paths from Microsoft:

…and that was it, really. I worked through some of the example projects. And I made a point of trying to use GitHub Copilot for some stuff at work over the last couple of months.

Overall, I’m not that impressed with GitHub Copilot. It’s cool when it works, but when it gets confused, or gives me bad info, then I feel like I’ve wasted my time. Generally, for most stuff, I’ve found that searching Stack Overflow gets me better results than asking Copilot.

I haven’t found a single case yet where trying to get agent mode to do something even mildly complicated produces good results. I have, of course, already hit the issue where agent mode insists that it’s doing something, when in fact it is not doing anything. That’s frustrating. And once it’s gone down that path, you really can’t convince it that it’s lying/hallucinating/whatever.

Maybe I just haven’t learned all the ins and outs of prompting it yet. I’ll keep trying. I’m still not quite “drinking the Kool-Aid” on all of this AI stuff. There’s a lot of overblown hype out there. I do think there’s some usefulness to it, but it’s not as powerful as some people think it is.

Fun With Windows Sandbox

I managed to solve a problem using Windows Sandbox a while back, and I thought I should blog about it.

The basic problem was this: I needed to run a PowerShell script that relied on a specific combination of old modules. It had to be run in the old Windows PowerShell, not PowerShell 7. I had originally hoped that I could find some way to set up a PowerShell sandbox of sorts, but there didn’t seem to be an obvious way to do that. So then I started looking into Windows Sandbox.

We start with a .wsb file that defines the sandbox. Mine looks like this:

<Configuration>
  <Networking>Enable</Networking>
  <MappedFolders>
    <MappedFolder>
      <HostFolder>\\my-pc\c$\dev\Projects\myproject</HostFolder>
      <SandboxFolder>C:\myproject</SandboxFolder>
      <ReadOnly>false</ReadOnly>
    </MappedFolder>
  </MappedFolders>
  <LogonCommand>
    <Command>c:\myproject\myfolder\sb-start.cmd</Command>
  </LogonCommand>
</Configuration>

This maps \\my-pc\c$\dev\Projects\myproject from my dev VM to C:\myproject in the sandbox.
And it runs c:\myproject\myfolder\sb-start.cmd once the sandbox starts.
I had a little trouble getting all of this right. I really wanted to have the logon command set up the PowerShell environment fully, and maybe even run my script, but that didn’t work.
So the startup command file just has this:

cd C:\myproject\myfolder
explorer.exe .
powershell.exe -executionpolicy unrestricted -command "start powershell {-noexit}"

So it starts Explorer and PowerShell, pointing at my work folder. Good enough.
Then, I manually run a script I call sandbox-setup.ps1, which looks a bit like this:

Write-Warning "This script installs the modules needed for the weird old script." -WarningAction Inquire
Set-ExecutionPolicy RemoteSigned -Force
Install-PackageProvider -Name NuGet -Force
Set-PSRepository PSGallery -InstallationPolicy Trusted
Install-Module -Name WeirdModule -AllowClobber -Scope CurrentUser
Install-Module -Name Az.Accounts -RequiredVersion 2.9.1
Install-Module -Name Az.KeyVault -RequiredVersion 4.6.1

And then I can run the actual script. It produces a .CSV file, which is written to the mapped drive, so I can shut down the sandbox after running the script.

On the one hand, this feels like a kludgey way of doing this. On the other hand, it’s the simplest way I could think of. For more info on running PowerShell scripts in Windows Sandbox, see here.

playing with AI and enjoying sports

OK, so that’s two completely different topics, but I’m going to throw them together in one post. I’ll start with AI.

At work, I’m still very limited in the AI tools I can use: basically, just Copilot and our own internal chatbot. (And it’s just the plain Copilot chat that I can use, not GitHub Copilot.) I’ve been wanting to experiment with some of the coding tools that are out there, so I decided to try some stuff out on my (personal) laptop. I was going to try Claude Code first, but I decided that GitHub Copilot would be easier for me to set up.

I started by enabling it in my personal GitHub account, and setting up the extension in Visual Studio Code. Then I tried something simple: asking it to write a “hello world” console app in C#. It did that successfully, but of course that’s a pretty low bar. I then tried to get it to help me create a git repo for the project. That worked, but it didn’t create a .gitignore file , so all of the binary output files got added to the repo. When I pointed that out, it apologized and created a .gitignore file, but it didn’t really offer me any help with cleaning up the mess it created. And, while the .gitignore file it created was “good enough”, it was a little questionable.

So I stepped back a bit, deleted the git repo and the .gitignore file, and tried again in Visual Studio 2022. I went through the usual steps in VS 2022 to initialize a git repo, and that created the usual VS .gitignore, so that was a lot cleaner than what Copilot did. Then, I set up Copilot in VS 2022. It probably works a bit better in VS 2022 over VS Code, at least for me.

I had Copilot in VS 2022 make a few little changes to the program to see how it worked. I had it add a line to output the current date and time, and that was simple enough. I then had it add some code to show the operating system and version, and that was a bit dicier. I had to coach it through making changes so that the program would actually output “Windows 11 Pro” instead of Windows NT or Windows 10.

So my opinion on this stuff hasn’t changed much. It’s interesting, and can be useful, but it’s wrong about half the time, and it’s often no more efficient than just doing an internet search and copying something from Stack Overflow. I kind of want to try it on something bigger, but I’m not sure what I should try.

On the sports topic: as per my last post, I signed up for NFL+ Premium recently, and have been watching some preseason football. The annual Jets/Giants preseason game is tomorrow night. That’s usually fun.

I’m still not sure what I’m going to do about the new ESPN service. I’ll have to look at the price for switching my Disney+/Hulu/ESPN+ bundle to include the full ESPN.

And I’m still planning on skipping the new Fox service, on general principle. Which is a bit tough, since the first two regular season Giants games are on Fox, so I won’t be able to watch them. My plan, for now, is to watch NFL RedZone (via NFL+) on Sundays and see if that’s good enough to keep me entertained and show me enough of the Giants game.

I’ve been looking into RedZone a bit; it’s interesting. It seems to be quite popular. I’d been aware of it previously, but have never watched it or really learned anything about it. There’s been some concern about what will happen to it after the NFL/ESPN deal goes through (assuming it does). That shouldn’t affect anything this season; it should be at least a year before that’s finalized.

Meanwhile, I’ve watched a lot of Phillies baseball this week. I’ve just been in the mood for baseball instead of, really, anything else. They’ve lost their last three games, so that’s disappointing, but I still like watching them.

Frustration

I have a bunch of stuff on my mind, and a few topics for blog posts I want to write. But I’m going to start with a little decompression about my work week. (I should first say that I need to be careful about this, since our policy on blogging about work has been tightened up recently. But none of this will come anywhere near to violating it, I think.)

We’re working on an upgrade to our AX environment right now, and we started some testing in a new test environment this sprint. This includes (for me) getting some web services working on the new test server, and getting them to point at the new AX test env. So a lot of my time this week has been spent whacking away at web services with a hammer, trying to get them to work. That’s always frustrating. It always seems like I need to try six different things until I finally hit on the one that actually fixes the issue. And I always feel like an idiot for not being able to get there faster.

I’ve been thinking about why this kind of work is frustrating, and I think a big part of it is having no clue how long it’s going to take, or how close you are to solving it. With certain kinds of work, you can break a problem down into parts, and work through them, so you know when you’re 10% done, or 30% done, or 80% done. But with this kind of troubleshooting, you don’t know if you’re going to need to try 5 things or 10 things or 20 things before you find the right thing. And you don’t always know if there’s one thing wrong, or two things, or ten things.

I won’t get into details on the actual issues I hit, but I will say that one of them was basically a new permutation of this issue I hit back in 2011, so it was fun to see that again! And another one was related to the topic of this post from 2020.

I’ve been using AI tools to help me with this work, and I’m not sure if they’re any more useful than just plain old internet searching. Sometimes it seems like they are; I can get a lot of seemingly-useful ideas from a chat with Copilot. But then the real answer comes from a simple search that leads to a Stack Overflow question/answer, or a GitHub issue. (For instance, one big problem I had this week was solved by reading through this GitHub issue from Microsoft’s WCF repo.)

My big project for this afternoon was working on a side-project for a little competition we’re having at work. (It’s one of those things where small project teams propose something, do a little work on it, then present it to the CIO. And then I guess the winning project actually gets green-lit.) That project is turning out to be a bit frustrating too. (It was supposed to be a nice break from the frustrating stuff!) First, I needed to get myself set up under our corporate developer account with one of the big package carriers, which we only managed to get done yesterday. And I’m still not completely set up, to where I can do what I actually need to do. But I can start testing, so I started work on that.

The project involves using the carrier’s webhook API for package tracking. My idea was to start out with a simple Azure function that I could point the webhook at. Then, to start, I’d just log the info I got from the carrier. The next step would be to hook that Azure function up to some kind of queue in Azure. Then, after that, writing another Azure function that would pick stuff out of the queue and send out notification emails. Basically, I was going to put my AZ-204 skills to work on a real project! (Well, not entirely real, but a POC at least.)

It took me the whole afternoon to get a simple Azure Function set up. I started out trying to use Copilot chat with GPT-5, which they rolled out yesterday, to help me out. That looked really impressive, showing me status info about what it was doing, and generating a lot of text with pretty specific instructions. But it seemed to be giving me quantity over quality. I turned GPT-5 off, and then managed to get a lot farther.

My initial idea was to just enter the C# code for the function directly in the Azure portal, but I set it up in isolated mode, which apparently doesn’t let you edit code directly in the portal. So then I tried using Visual Studio Code, which is supposed to be an easy way to quickly develop and deploy Azure Functions. That led me down a path of installing a bunch of stuff locally. I was initially doing this on my laptop, so I had to install .NET SDK 8, plus a bunch of VS Code extensions. At some point, I got nervous about how much stuff I was installing on my laptop, and switched over to my regular dev VM, which is where I’m supposed to do development. So then I had to install all that stuff there too, since I’d never installed the .NET 8 SDK there, or set up VS Code for Azure dev. So I probably killed an hour just getting my environment set up.

And then, once I had everything set up, I started hitting a bunch of weird little snags with editing, compiling, and running the function. I eventually gave up, and with some help from Copilot, set up the simplest Azure Function project I could, entirely from the command line, then got it running and uploaded to Azure. So that probably took another hour, and the end result was just something that would print “Welcome to Azure Functions!” when you hit the URL for the function.

After that, I got the thing working in VS Code, and managed to change the function from a GET to a POST function. And I thought I had gotten far enough with it that I could hit it from the carrier’s test page, but all I can get back from that is an error, with no details giving me any clue what’s wrong. And that’s pretty much where I ended my week.

I don’t really drink anymore, but I think I kinda want a beer right now. Or maybe just a bowl of ice cream.