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.

passed the AZ-204 exam

I’ve posted a few times recently about my efforts to study for the AZ-204 exam. TL;DR: I passed the exam today!

I’d scheduled it for today, back in May, using a free voucher that expires on June 30. So I had to schedule it before then.  I was pretty sure I wasn’t going to be ready for it, so the plan was to take the test today, fail it, and then use the score report to figure out where my strengths and weaknesses were, then come back and take it again in a month or two, after doing some targeted studying.

But I managed to eke out a passing score: 707 (where 700 is passing). So, just barely, but good enough.

These tests always take a lot out of me. I’m not sure why. I’ve always been like this. I used to get physically sick before big tests, back in high school. I managed to figure out how not to do that, or I never would have made it through college. But even, oh… 40 years later, I still get stressed before a big test. These days, of course, I don’t need to take very many tests.

I’m not really sure where I’m going to go next, in terms of learning and certifications. I was really assuming I’d need to keep working on the AZ-204 material for the next couple of months. Maybe I’ll just take a break and watch a lot of TV and read a lot of comics over the summer. Then get serious again in September!

mixed feelings about Microsoft

I’ve been having a lot of mixed feelings about Microsoft lately, and I feel like I need to blog about this, so I can get some stuff straight in my head.

Overall, my feelings about Microsoft have gone back and forth, over the years. At one point, I thought of Bill Gates as being pretty darn evil. After his retirement, and his reinvention as a philanthropist, I softened up on him a bit. I never liked Steve Ballmer. And I liked Satya Nadella quite a lot, in the beginning, and even read his book, but I’m starting to have mixed feelings about him. So that’s the CEOs.

As for operating systems, I tolerated MS-DOS and Windows 3.1, and knew I had to learn and use them, but never much liked them. When Windows 95 came out, I was actually kind of excited about it, enrolled in the preview program, and installed it on my home machine, from floppy disks. My enthusiasm for later Windows versions has varied. I do mostly like Windows 10, which is what I’m running on my home desktop PC right now.

And as a programmer, I’ve also gone back and forth. I liked classic ASP when that was released. And I liked ASP.NET, and .NET in general, when that came out. I’ve been an enthusiastic .NET developer since 2002.

Microsoft Build was this week, and I (as usual) registered for the online component of the conference, and tried to watch some of the content. Honestly, I couldn’t find much of interest to me. They’re really pushing AI, and, while I’m not entirely against it, I’m also just not as enthusiastic about it as they’d probably want me to be.

Watching this week’s Windows Weekly reminded me of some of the issues I have with Microsoft right now. First, MS is having issues with employees protesting during events, mostly around Israel/Palestine, and I don’t think they’re handing that well. (And here’s something from Brian Eno about the issue.) Second, I don’t think the layoffs they did recently were necessary, or handled well. Third, they had Elon Musk on stage during the Build keynote. (I don’t think I need to say why that’s bad…) Overall, they’re doing what I guess I should expect a giant tech company to do, but, well, I was hoping for better.

So, where does that leave me? Well, I still need to use Microsoft products for work, and a big part of my job is supporting our relationship with Microsoft, so I still need to be invested in the ecosystem. I registered for the AZ-204 exam today, for the end of June. (I blogged about that recently here.) I still have a lot of studying to do, to prepare for that. So, in general, I’m still going to keep learning and trying to keep up with this stuff. I can’t give it up and switch to Linux.

On the home front, I’ve been thinking about what I should do about my ten-year old Windows 10 desktop PC. It’s still my main machine, and it still works fine. With Windows 10 reaching end of support in October, I need to do something, but I can’t decide what to do. I might decide to subscribe to a third-party update service for Windows 10. That’s probably a little risky, but might be my best choice.

I’ve also been playing around with the idea of switching the machine over to Linux. That’s probably a horrible idea, but I kind of want to do it. There’s a campaign going on to encourage switching from Win 10 to Linux, and that’s what put the idea into my head. I would really still need to run Windows, though, so I’d have to figure out if I could make do with using my Lenovo ThinkPad for all my Windows stuff, or if I could dual-boot the desktop machine, or run Windows in a VM, or something. Regardless, I would just be complicating things and making life harder for myself. (Which doesn’t usually stop me from doing something stupid, but…)

My other thought was getting a Mac Mini and trying to gradually move my home stuff off Windows and onto Mac. That’s a lot more doable. (I already have a MacBook and use it for a lot of stuff.)

Well, this post has been a mess, and I don’t think I’ve decided on anything. But maybe I’ve moved forward a bit with my thinking. I going to leave it there, and try not to worry about it too much right now.

Programming for Dynamics AX 2012 in 2025

Yes, it’s 2025 and I’m still writing X++ code for Dynamics AX 2012. Sometimes, there are hurdles when you have to write code in an almost dead language for an almost dead product, and you’re trying to get information from the internet. I thought I would take a quick break and write a blog post about that.

First, the state of internet search, in general, is kind of rotten right now. That’s well-documented. And when you’re searching for information about an almost-dead product, it gets harder.

In terms of search engines: at work, I can generally use Bing, Google, and DuckDuckGo. None of those is blocked, though I can only log in to a Microsoft account, not a Google account. So whatever advantage there is to having your search history saved, I can only get that with Bing.

(At home, I’ve been experimenting with Kagi. That’s blocked at work, so I can’t use it there. I may be writing up a blog post on Kagi soon, but that’s for another day.)

I haven’t seen any advantage to using one search engine over another when searching for Dynamics AX content. I think Google is probably the best, to be honest.

A few general observations:

    • Microsoft documentation for AX and X++ is usually still out there, somewhere, on Microsoft’s site, but it doesn’t always surface near the top of any given search. A good starting point for that might be here.
    • AX lives on as “Dynamics 365 Finance and Operations”, or… something like that. Some of the documentation for FinOps also applies to AX 2012. A good starting point for that is here.
    • Axaptapedia used to be a good resource for AX info, but it seems to be gone. It does occasionally still show up in search results. You may be able to find it on archive.org. (Though that’s another thing that’s blocked at work. Sigh.)
    • There are a lot of AX-related blogs out there. Most of them are dead at this point, but still up on the web. And many of them were never really much good. Some were just cash grabs, scraping info from other blogs and sticking Google ads on them and hoping to make some money (presumably). Some were well-intentioned, but provided questionable advice. You can still find some useful blog posts out there, but you need to sift through some dross to get to the useful stuff.

Aside from using search engines, you can also try to get useful information about AX and X++ from LLMs, like ChatGPT and Copilot. I’ve had some success with that, but I’ve found that LLMs are prone to a lot of hallucination when it comes to X++ code. (Again, there are limits to the LLMs I’m allowed to use at work. I’m basically limited to Copilot and our internal LLM chatbot.)

I’ve recently been working on a problem, trying to optimize some fairly complex X++ code. I got some fairly useful advice and assistance out of our chatbot, but also some entirely wrong information. For instance, I needed to review some stuff about X++ collection classes. Our LLM hallucinated a few functions which would be great, if they existed, but they don’t. One was “Global::conSort()” which was supposed to sort a container, and “Set::toContainer()” which was supposed to convert a set to a container. Alas, neither of those exists!

It also gave me some incorrect information about sets. It told me that using a SetEnumerator does not necessarily guarantee that the set will be returned in a sorted, or even predictable, order. But I’m pretty sure that it does always return the set in sorted order. I haven’t found a definitive answer for that anywhere, but here’s a blog post that indicates that sets are returned sorted. And Axaptapedia seems to agree. (And all my testing supports that.)

And here’s one more blog post that has what I think is a pretty good answer:

No matter what order elements are added to a set or keys are added to a map, when using an enumerator to traverse the set or map, the elements are in a sorted order (for string and numeric types). However, the MSDN documentation for the set class states that elements are stored in a set “in a way that facilitates efficient lookup of the elements.” It might not be safe, therefore, to rely on this sorting behavior as it might possibly change in the future.

Good enough for me, for now. So maybe the LLM wasn’t entirely wrong on this, but for my purposes, I’m fine assuming that the output of a SetEnumerator is sorted.

AZ-900 Azure Fundamentals exam

I’ve been messing around with various prep materials for various Microsoft exams for a while now. I go back and forth, but I never seem to get far enough to actually take a test. The ground shifts under me, and I have to switch my focus to something else.

I’d been working towards taking the AZ-204 exam, starting in mid-2024, but I kept getting sidetracked. Well, I got serious about it again recently. But then I realized that there’s some overlap between AZ-204 and AZ-900, and I could probably prep for the AZ-900 in just a few days. I already know a lot of the material on AZ-900, so there wasn’t much extra stuff to learn.

So I spent some time last week studying, then got enough done over the weekend that I felt I could take the exam today. And with the online exams, you can generally get a same-day appointment. So I did that, and passed the exam today!

The process for the online, at-home, exam is pretty much the same as it was in 2023, when I passed the PL-900 exam. The one wrinkle I had this time was that I couldn’t get through the pre-exam system check. Long story short: I had to go into “Windows Features” on my laptop and disable anything related to Hyper-V. They don’t want you taking the exam on a VM, which I can kinda understand, but they also make it impossible to take the exam on a laptop that’s configured as a VM host, which is kinda silly. I also had an issue where the proctor made me wander around my table with my laptop, showing her my entire kitchen table via the webcam, to make sure the table surface was actually clear. And she had me take off my watch. So the prep was a bit of a pain, and took longer than the actual test. I don’t remember the proctor bothering me at all last time.

I paid for the exam myself, using a 50% discount that I can get through ESI (Enterprise Skills Initiative), so it was only $50. I might get reimbursed for it, or I might not. I decided to take this exam without running it by my boss first. I was afraid he might throw some obstacles in my way, and I just wanted to “strike while the iron was hot,” so to speak.

I’ve also rediscovered today that my “test anxiety” problem is still a thing. I’ve always had it. It peaked in high school, where I went through a phase where I would get physically sick when dealing with high-pressure tests (like finals or mid-terms). At some point, I realized what was happening, and got it under control. (There was really no guidance for mental health stuff for teenagers back then, so I’m not sure how I did it. I just figured it out on my own.) Anyway, even taking a dumb little Microsoft cert exam still makes me break out in a sweat, apparently.

I’m probably going to try for the AZ-204 later this year, if I can find the time to finish the prep.

vacation clean-up

So we’ve got water back, though the water pressure is a little weird, and we have a boil water advisory. Meanwhile, I’m trying to check a few things off my to-do list today.

A few days ago, I finally wiped my TiVo, unhooked it from the TV, and boxed it up for recycling. I got it in 2015, so it had a good run. Almost ten years.

That made me look at the situation under my TV a bit closer, and convinced me to see whether or not it was worth keeping my PS3. I got that in 2008, so it’s even older than the TiVo. I’d unplugged the HDMI cable on it at some point, for some reason. I plugged it back in today and turned it on, and surprisingly, it worked.

It wasn’t hooked up to my current WiFi network, which means it’s been at least two years since I’ve turned it on, since I bought that router in 2022. It took a bit of work to get it going. I had to reset my PSN account password, then generate a new device setup password, and get it entered on the dumb on-screen keyboard on the PS3. But it’s working now.

The PlayStation store for PS3 was discontinued in 2021. And I’m not sure if the Blu-Ray player works. So I’m not sure if it’s at all useful. I should probably talk myself into resetting it to factory defaults and recycling it. One thing at a time though.

My other big cleanup thing today was to put together a pile of old tech books and dump them in a book donation bin. (I know tech books usually don’t have much resale value, but this bin specifically says that it’s OK, as long as they have UPC codes. They might just toss them, but I’m fine either way.)

It took some effort to convince myself to dump them. I know they were all out of date, and I can access most of them through O’Reilly Learning if I need them, but it was still hard, for some reason. Most of them were from the stack of books I used to keep at my desk at work, before they moved us to our new smaller cubicles, which don’t have any space for books.

I guess I still have trouble letting go of old stuff, in general. Part of me still thinks I’m going to finish reading that book about SharePoint 2010 development, or playing Final Fantasy VIII, or watching all the Svengoolie episodes on my TiVo. But I need to let go of some of this stuff and move forward.

CrowdStrike, Pluralsight, agile, anime

Today’s another day where I feel like I have a bunch of stuff to blog about, and it’s all pretty random. So I’ll break it up with some sub-headings.

CrowdStrike

I woke up this morning to news about this issue, via my Mastodon feed, which I always check first thing in the morning. It didn’t hit my company, thankfully. But it does seem to have caused a lot of chaos. I almost kind of hoped it would hit us, since it would have been nice to have a day off. (Not really though.)

Pluralsight

I’ve had a Pluralsight account since 2016. At some point, my company got a corporate account, and I got myself added to it, so I don’t have to pay for it anymore, which is nice. Recently, my company has decided to go all-in on Pluralsight, and they’ve given everyone in the IT department an account. (Previously, it was just a select few.) They’ve also put some structure around it, asking us all to do three skill assessments, then pick one of them to try to get better at. I’m going to try to improve my score on “C# Coding Practices.” I’m currently “above average”, so I guess I’m shooting for “expert” now.

I’m a little puzzled about why they seem to have put so much effort and expense into this one particular thing, but I guess I’m glad they have.

Agile/Scrum

My group within the IT department is currently going through an “Agile transformation.” I mentioned this a couple of weeks ago. Things are going… OK, I guess. We’re in our first official sprint right now. I think we’re on the right track. We have a scrum master who seems to know what he’s doing.

We’ve divided the group into two “feature teams”, which is kind of weird, since it seems to be a fairly random split. I guess I understand why they did it; scrum teams aren’t supposed to be too big. They also want us to come up with names for the teams. That’s one of those things that initially made me groan, since the only acceptable corporate team names are all going to be terrible. I’ve accepted the inevitable now, though. I was pushing for a Harry Potter house name for the team, maybe Hufflepuff or Ravenclaw. Consensus seems to be on “Scrumbags” which I also kind of like.

Anime

I finally finished watching all of my Master Keaton DVDs this week. I bought most of them in 2006, and I think I’ve finally watched all of the stuff I bought from Right Stuf back then.

I still have a couple of DVD sets from long ago that I need to watch. I think I might start Devil Lady soon. I bought that from Overstock.com in 2005, so that’s been collecting dust on my shelf for even longer than the other stuff. And I have a set of Excel Saga which I got in 2007. Honestly, I’m not entirely sure why I bought either of those. But hey, they should both be fun to watch.