Still on my new Windows 10 IoT LTSC setup, I found a page which seems to have a large amount of Firefox tweaks. I’ve tried most of them, and honestly I didn’t notice any improvement, but I hope it pays off in the long term:
Blue Desk
Rodrigo’s blog.
Monday, May 25, 2026
Sunday, May 24, 2026
Disable Win global hotkeys
Today I installed a new 1 TB SSD drive, since my old 120 GB one capacity was out of control. Windows 10 IoT LTSC was the OS of my choice, along with the incredibly smooth massgrave.dev aid.
One thing that didn’t work was the global shortcuts of foobar2000.. At first I thought it could be related to the newer 64-bit version I finally installed, but ChatGPT – first time on this blog – told me that IoT LTSC is stricter about hijacking Win hotkeys. And it gave me directions on how to disable them globally, which I didn’t even know it was possible. Create a new key under:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced
- New, String Value
- DisabledHotkeys
- AS
The above will disable Win+A and Win+S global hotkeys, which is amazing.
Tuesday, April 7, 2026
Reusing code in const and non-const methods, C++17
I found the code below from this great answer in StackOverflow. It allows you to implement the const method with your logic, then use this one-liner to implement the non-const method. It’s a trick from the great Scott Meyers:
const T& f() const {
return something_complicated();
}
T& f() {
return const_cast<T&>(std::as_const(*this).f());
}
I’m using this thing everywhere.
Thursday, April 2, 2026
Project templates in Visual Studio 2022
After configuring C and C++ projects countless times, base on these settings, I finally bit the bullet and created a reusable template in Visual Studio 2022. And it’s surprisingly simple: create the project and then go Project → Export Template.
The project name itself can be used inside files with $safeprojectname$ string. In order to have it replaced even inside .rc files, edit the .vstemplate and add:
<TemplateContent>
<Project TargetFileName="ayylmao.vcxproj" File="ayylmao.vcxproj" ReplaceParameters="true">
<ProjectItem ReplaceParameters="true">RES\$safeprojectname$.rc</ProjectItem>
</Project>
</TemplateContent>
There’s no GUI for deleting a template, though. One must manually remove the zip files from two different locations:
- Documents \ My Exported Templates
- Documents \ Templates \ Project Templates
To restore a template, simply copy the zip back to:
- Documents \ Templates \ Project Templates
Sunday, February 15, 2026
The Rust doc_cfg fiasco
In WinSafe, Cargo features are used extensively to gate the DLL modules which are currently implemented. This is good because you specify only the modules you need, reducing your compiler effort. The Rust documentation doc_auto_cfg unstable feature was extemely useful, applying tags on each entity specifying the required feature for it.
Then, at some point of October 2025, doc_auto_cfg was merged into doc_cfg. And it’s now completely broken.
I filled an issue at the official repo. I’m not the only one missing that feature, but no one seems to care. This is so demotivating I stopped WinSafe development completely.
I found a workaround by pinning the compiler version using rust-toolchain.toml, along with the last version where doc_auto_cfg works, which I painfully found out:
[toolchain] channel = "nightly-2025-09-27" components = ["rust-docs"] targets = ["x86_64-pc-windows-msvc"]
With the above file, the command line to generate the docs is:
RUSTDOCFLAGS="--cfg docsrs" cargo doc --all-features
Or even better, directly specify the toolchain the command line:
RUSTDOCFLAGS="--cfg docsrs" cargo +nightly-2025-09-27 doc --all-features
This compiler has the 1.92.0-nightly version, and it seems I’m gonna using for a long time.
Update: after 4 months, the bug was finally fixed.
Friday, November 21, 2025
Windows 10 SDK 10.0.20348.0 is gone
I was caught by surprise today after updating Visual Studio 2022 to version 17.14.11. All my projects failed to compile, because the SDK files disappeared. I first thought something broke with VS Code support, but then I saw that Visual Studio itself had the same problem.
Turns out the Windows SDK I was using – 10.0.20348.0 – was simply deprecated and removed in this update, according to here, and the release note itself. Indeed, Visual Studio Installer won’t show it anymore.
Apparently, now I’ll have to install a Windows 11 SDK, even if I’m running Windows 10. I hope this doesn’t break my stuff.
Wednesday, November 5, 2025
Non-movable and non-copyable C++20 classes
On my fantastic journey implementing WinLamb v2, I’m diving deep into C++20, grasping a lot of concepts I never understood before, and having a lot of fun along the way.
One of the things that I implemented was the idea of non-copyable and non-movable classes, at first, using macros. This felt inelegant, so I implemented P2895 paper with utility classes. It ultimately failed with the nested ListView classes, so I discarded the idea too.
My final solution was to = delete move constructor, which will prevent all copy and move. The hard rules are not particularly easy to memorize, so I’ll let them here for further reference:
- The two copy operations are independent. Declaring copy constructor does not prevent compiler to generate copy assignment and vice versa. (Same as in C++98.)
- Move operations are not independent. Declaring either one of them prevents the compiler to generate the other. (Different from copy operations.)
- If any of the copy operations is declared, then none of the move operations will be generated.
- If any of the move operations is declared, then none of the copy operations will be generated.
- If a destructor is declared, then none of the move operations will be generated. Copy operations are still generated for reverse compatibility with C++98.
- Default constructor generated only when no constructor is declared. (Same as in C++98.)
Example:
class Foo {
private:
Foo(Foo&&) = delete; // non-copyable, non-movable
};
Friday, October 24, 2025
Ibanez Wizard profile history
Since I’m on the market for a “battle” RG guitar to play with bands, I reminded a change that happened to the fretboard width of Wizard necks, from 56 to 58mm. According to Rich, it happened back in 2005.
Digging a bit more, I found more information about the Wizard neck profile history, which I compiled in the table below:
| Neck | Width | Thick | Radius |
|---|---|---|---|
| Original Wizard | 43/57mm | 17/20mm | 17" |
| Pre-2005 | |||
| Super Wizard | 43/56mm | 17/19mm | 17" |
| Wizard | 43/56mm | 18/20mm | 17" |
| Post-2005 | |||
| Super Wizard | 43/58mm | 17/19mm | 17" |
| Wizard | 43/58mm | 18/20mm | 17" |
Monday, October 20, 2025
Using VSCode for C++ projects
For a long time I thought I only could use Visual Studio to write C++ programs on Windows, because MSVC toolchain requires some particular initializations before being able to run.
Turns out there is a way to smoothly run all the MSVC machinery from within VSCode. The answer is the same I found last year in automating MSVC builds: we need a .bat file to call MSVC’s own .bat, then we invoke VSCode executable right after.
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" "C:\apps-portable\VS Code\Code.exe"
Save this .bat somewhere, and put a shortcut to it in your start menu, naming it “VSCode MSVC” or something like that.
To my surprise, multiple things work better in VSCode than in Visual Studio itself:
- file navigation;
- file creation and deletion;
- code and comment folding;
- keyboard shortcuts;
- error reporting – VSCode highlights in red the files with errors, while in Visual Studio I have to build the project and look at the output to see which files are broken.
Monday, October 13, 2025
Perfect non-locking string winding
While searching my future Ibanez RG Prestige, I found this StewMac video of how to properly wind the strings around the tuning machines:
I remember having seen this technique before, but this time I’m keeping the reference.
Saturday, September 27, 2025
Single target dir for all Rust projects
Rust, just like C++, generates a lot of output files when you build an executable. Particularly, when writing my programs with WinSafe, I use the library straight from a sibling directory, so I can test any changes right away – the side effect is that all those output artifacts are generated repeatedly for each new program.
So I’ve just tested the target-dir global option for Cargo, which will use a single target directory for all projects. This would, in theory, prevent the constant rebuilding of WinSafe artifacts.
Since the output dir changed, I had to also change the deploy.sh scripts to point to the new location. Other than that, everything seemed to work as intended, and I’m pretty satisfied with the results.
This is now my global ~/.cargo/config.toml file:
# https://github.com/rust-lang/cargo/issues/3381#issuecomment-710388554 [net] git-fetch-with-cli = true # https://redd.it/1dua24f # https://blog.rust-lang.org/2023/11/09/parallel-rustc.html [build] target-dir = "D:\\Stuff\\Core\\rs\\_target" #rustflags = ["-Z", "threads=8"] # Change default toolchain: # rustup show # rustup default nightly-x86_64-pc-windows-msvc # rustup default stable-x86_64-pc-windows-msvc
As an extra benefit, when I want to clean the target directory, now I just need to delete the single _target one.
Monday, August 18, 2025
Previewing Go package documentation
While developing Windigo, I’m using the auto-generated docs at pkg.go.dev. It’s not perfect, but it’s something.
I didn’t know, however, a way to preview the generated docs while still developing the library.
Go 1.25 brought a new go doc option which allows us to preview the documentation by creating a temporary, virtual server. It downloads a whole bunch of packages, builds them, and then effectively displays the current docs:
go doc -http
This is being a game changer, I can now preview all the documentation instantly. Thanks to this guy who told me that.