Overview ☀ I was doing some housekeeping on seedfolder , a small .NET global tool I maintain that creates a project folder and fills it with sensible dotfiles. It targets net8.0 , net9.0 and net10.0 . .NET 8 and .NET 9 both reach end of support on 10 November 2026, so the plan was simple. Wait for November, drop both, ship a .NET 10 only version. Then I asked myself a question I could not answer…
Overview ☀ I wanted to know what time of day people read this blog. It seemed like a question analytics should answer in about thirty seconds. It took considerably longer, because the answer I got back covered 28 days and refused to go any further. Meanwhile a report two clicks away was cheerfully showing me numbers from June 2023. The cause turned out to be a single dropdown I had never looked at…
Overview ☀ OpenRouter emailed me to say my credits were about to expire. I had bought $10 in March 2024, spent seven pence of it, and forgotten the account existed. Credits older than twelve months expire if the account sees no activity, and running any inference resets the clock. Easy enough. Send a request, keep the money. Except I could not prove it worked. The dashboard rounds every figure to…
Overview ☀ GitHub has gh . Bitbucket has nothing. Atlassian never shipped a first-party command line tool for Bitbucket Cloud, so anything you want to automate ends up as a pile of curl calls with a hand-rolled Authorization header and a jq filter to make sense of the answer. I built bbx to close that gap. It is a .NET global tool that wraps the Bitbucket Cloud API v2, prints JSON on stdout, keeps…
Overview ☀ With .NET 10 now released as the latest Long-Term Support (LTS) version, it was time to upgrade SeedFolder to support the newest framework. This comprehensive .NET 10 upgrade guide walks you through migrating a .NET global tool from .NET 8 and 9 to .NET 10 while maintaining full backward compatibility. Whether you’re upgrading a .NET global tool, console application, or library, this…
Overview ☀ Sometimes you need to extract structured data from YouTube videos for analysis, documentation, or automation. While there are various web-based solutions, having a command-line tool that outputs clean JSON makes integration with scripts and pipelines much easier. I built ytx - a .NET Global Tool that extracts YouTube video metadata and transcripts as structured JSON. The tool takes a…
Background When setting up a new Windows machine, I used to rely on Scoop and Chocolatey for package management. Both are excellent tools, but when Microsoft introduced Windows Package Manager (winget) , I decided to give it a try on my latest machine setup. The problem? Finding winget package IDs was tedious. While winget search works, I wanted something faster - a web interface where I could…
Overview ☀ It’s been over 4 years since I first published my .NET Core Global Tool blog post about creating SeedFolder. What started as a simple tool to copy my personal dotfiles has evolved into something much more powerful and hopefully eventually will be useful to the broader developer community. The original version was quite limited - it basically just copied my specific .editorconfig ,…
Overview ☀ While testing a feature locally on my macmini I was uploading an image when I got the following error: Unable to load shared library ‘libgdiplus’ or one of its dependencies Dependencies 🌱 So, after a quick google the following was suggested to me: mono-libgdiplus brew install mono-libgdiplus I already had this installed but I re-installed just in case That did not work so the next…
Overview ☀ The very latest version of .NET Core was launched at .NET Conf . It is the free, cross-platform and open-source developer platform from Microsoft which includes the latest versions of ASP.NET and C# among others. I decided to wait until the upgrade was available in all the various package managers such as homebrew on macOS and apt-get on Ubuntu and chocolatey on Windows before I…
Evolution and Updates 🔄 Since publishing this post, SeedFolder has evolved significantly! The tool now supports multiple project templates, cross-platform compatibility, and has been enhanced with the help of GitHub Copilot. Read about the journey from a simple dotfile copier to a comprehensive project scaffolding tool in my follow-up post: Evolving SeedFolder with GitHub Copilot - From Personal…
All of a sudden spotlight on my macOS Mojave macmini stopped working… There is a process called mdutil which manages the metadata stores used by Spotlight and was the culprit for my issue. The fix after some Google Fu and some trial and error was to restart this process as follows: sudo mdutil -a -i off sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist sudo…
Every time apt-get upgrade upgrades my local MySQL instance on my Ubuntu laptop I get the following error: ( 1698, "Access denied for user 'root'@'localhost'" ) The fix each time is the following, so here it is for me next time save me wasting time googling the error every time. sudo mysql -u root use mysql ; update user set plugin = 'mysql_native_password' where User = 'root' ; flush privileges ;…
Last night I decided to pull the trigger and upgrade from Ubuntu 19.10 (Eoan Ermine) to Ubuntu Focal Fossa 20.04 A fairly smooth upgrade all in all. I did have to re-enable the .NET Core APT repository using the following command: sudo apt-add-repository https://packages.microsoft.com/ubuntu/20.04/prod I also discovered a neat shortcut to move programs from one workspace to another: Ctrl + Alt +…
Background What do you do when you have a website that you do not want Google or other search engines to index and therefore NOT display in search results? Robots! 🤖 In the past, you have simply been able to add a robots.txt file. This is a file that website owners could use to inform web crawlers and robots such as the Googlebot about whether you wanted your site indexed or not and if so which…
Background Today I wanted to clean up my Pocket account, I had thousands of unread articles in my inbox and while their web interface allows you to bulk edit your bookmarks it would have taken days to archive all of them that way. So, instead of spending days to do this, I used their API and ran a quick and dirty script to archive bookmarks going back to 2016! Here be dragons! Now, since I ran…
Background So, I have a small ASP.NET Core Razor Pages application that I recently enhanced by adding Vue in the same way that I once would add jQuery to an existing application to add some interactivity to an existing page. Not all websites need to be SPA’s with full-on JavaScript frameworks and build processes and just like with jQuery back in the day I was able to add Vue by simply adding a…
Background A while ago I was working on a project that consumed the Instagram Legacy API Platform . To make things easier there was a fantastic library called InstaSharp which wrapped the HTTP calls to the Instagram Legacy API endpoints. However, Instagram began disabling the Instagram Legacy API Platform and on June 29, 2020, any remaining endpoints will no longer be available. The replacements…
In my last post I deployed the standard Blazor template over to vercel static site hosting . In the standard template, the FetchData component gets its data from a local sample-data/weather.json file via an HttpClient . forecasts = await Http . GetFromJsonAsync < WeatherForecast [ ]> ( "sample-data/weather.json" ); I wanted to upgrade this by replacing that call to the local json file with a call…
Update - I did deploy an ASP.NET Core Web API backend via Docker to fly.io So, I decided it was time to play with Blazor WebAssembly which is in preview for ASP.NET Core 3.1. I decided I wanted to publish the sample on Zeit’s now.sh platform which has now been rebranded Vercel If you want to follow along this was my starting point I use Visual Studio Code and for IDE support with vscode you will…
A couple of days ago Canonical the custodians of the Ubuntu Linux distribution released the latest long term support version of their desktop Linux operating system. Codenamed Focal Fossa the 20.04 LTS release is the latest and greatest version. For more information about its new features head over to their blog . For us .NET Core developers each new release of Ubuntu generally means that whenever…
Today NET Core 3.1.200 SDK - March 16, 2020 was installed on my development and production boxes. With a new release, I tend to also install the Windows hosting bundle associated with each release, and in this case, it was ASP.NET Core Runtime 3.1.2 However, on installing it, the next request to the website showed a 503 Service Unavailable error: Debugging the w3 process in Visual Studio showed…
When you build ASP.NET Core websites locally, you can view your local site under HTTPS/SSL, go read this article by Scott Hanselman for more information. For the most part, this works great out of the box. However, I am building a multi-tenant application as in I make use of subdomains such as https://www.mywebsite.com and https://customer1.mywebsite.com . So naturally, when I develop locally I…
A static HTML website I look after is hosted on a Windows Server 2012R2 instance running IIS, it makes use of a web.config file as it has some settings that allow this site to be served from behind an Amazon Web Services Elastic Load Balancer. Today it kept crashing with the thousands of these events in event viewer: Event code: 3008 Event message: A configuration error has occurred. Event time:…
Today, I fixed a bug where session cookies were not being persisted in an ASP.Net Core Razor Pages application. The answer was in the documentation . To quote that page: The order of middleware is important. Call UseSession after UseRouting and before UseEndpoints So my code which did work in the past, but probably before endpoint routing was introduced was this: app . UseSession (); app .…
Another quick one for today, Every now and again my intellisense gets confused in Visual Studio Code displaying errors and warnings that should not exist. The fix for this is to restart the Omnisharp process. So first off get the commmand pallette up: Ctrl + Shift + P Then type: >omnisharp:restart omnisharp Everything should then go back to normal. Success 🎉
I am in the process of building and publishing my first ever NuGet package and while I am not ready to go into that today I can post a quick tip about fixing an error I had with a library I am using to help with git versioning. The library is Nerdbank.GitVersioning and the error I got was when I tried to upgrade from an older version to the current one. The error? The…
A very very quick one today. Sometimes when developing on macOS I want to view hidden files in Finder but most of the time it is just extra noise so I like them hidden. There is a keyboard shortcut to toggle the visibility of these files. cmd + Shift + . (thanks to osx daily for the tip and image.) This keyboard shortcut will show hidden files or hide them if shown… Success 🎉
Today I was writing a Windows batch script that would at some stage run git pull . When I ran the script it paused and displayed the message: Enter passphrase for key: 'c/Users/Administrator/.ssh/id_rsa' No matter how many times I entered the passphrase Windows would not remember it and the prompt would appear again. So, after some time on Google and some trial and error, I was able to fix the…
In this post, I’ll address a common issue many developers face when working with MySQL on macOS: the “MySQL server has gone away” error. This error can be frustrating, but it’s usually straightforward to fix. Understanding the Error When connecting to MySQL via the terminal using mysql -u root , you might encounter the following error messages: ERROR 2006 ( HY000 ) : MySQL server has gone away No…
Building server-rendered HTML websites is a nice experience these days with ASP.NET Core. The new Razor Pages paradigm is a wonderful addition and improvement over MVC in that it tends to keep all your feature logic grouped rather than having your logic split over many folders. The standard dotnet new template does a good job of giving you what you need to get started. It bundles in bootstrap and…
Back in the older classic windows only .NET Framework days, I would use a cool framework called TopShelf to help turn a console application during development into a running windows service in production. Today instead I was able to install and run a windows service by modifying a .NET Core Worker project by just using .NET Core natively. Also, I was able to add some logging to the Windows Event…
I mostly code in Visual Studio Code Insiders on either macOS or Linux but on the occasion that I develop on windows, I do like to use the old faithful Visual Studio. And today I fixed a slight annoyance that I have with Visual Studio 2019. If you cut or copy on a blank line accidentally which does happen you will lose your clipboard contents. To fix this in the search bar at the top enter Apply…
I have started to cross-post to the Dev Community website as well as on my solrevdev blog . A previous post about Timers in .NET received an interesting reply from Katie Nelson who asked about what do do with Cancellation Tokens . TimerCallBack The System.Threading.Timer class has been in the original .NET Framework almost from the very beginning and the TimerCallback delegate has a method…
Today I came across a fantastic command line trick. Normally when I want to create a directory in the command line it takes multiple commands to start working in that directory. For example: mkdir tempy cd tempy Well, that can be shortened to a one-liner! mkdir tempy && cd $_ 🤯 This is why I love software development. It does not matter how long you have been doing it you are always learning…
A current C# project of mine required a timer where every couple of seconds a method would fire and a potentially fairly long-running process would run. With .NET we have a few built-in options for timers: System.Web.UI.Timer Available in the .NET Framework 4.8 which performs asynchronous or synchronous Web page postbacks at a defined interval and was used back in the older WebForms days.…
Another quick one today. I was recently listening to an episode of syntax.fm where wes bos was talking about a new site uses.tech . This is a site that lists /uses pages detailing developer setups, gear, software and configs. This inspired me to create my own /uses page. Success 🎉
A quick one today. Sometimes I will click on a link in an external application such as Mail.app (I am careful where these links come from of course!) and nothing will happen. Well, Google Chrome will launch if it was closed when I clicked the link however the URL I clicked will not open. Nothing, no new tab. nothing. The fix before was to re-install Google Chrome but today I found this quick…
Tonight has all been about trying to get rid of some ASP.Net MVC yellow screens of death (YSOD) caused by MySQL timing out. Background My application is a fairly old ASP.Net MVC 5 web application that used to talk to a local instance of MySQL and now has been ported the cloud (AWS) with the MySQL database migrated to use Amazon’s Aurora Serverless MySQL database service . I have a few of these…
Tonight a desktop notification popped up on my Ubuntu 19.10 desktop to remind me that my Arc Menu Gnome Extension had an update. Here is the Arc Menu in action: Normally I can update it via either Google Chrome or Firefox using the Gnome Extensions website however tonight when I tried the update an error occurred. Literrally an Error ! Missing Menu The menu was also missing and I tried to…
Recently I installed a VS Code extension called GistPad about which the marketplace docs go on to say: GistPad is a Visual Studio Code extension that allows you to manage GitHub Gists entirely within the editor. You can open, create, delete, fork, star and clone gists, and then seamlessly begin editing files as if they were local. It is a great extension and I am using Gists way more now. Install…
Today I noticed a windows machine that I look after had absolutely loads of versions of the dotnetcore framework installed on it. It seemed like every major and minor version from 1.0 to the latest 3.1 and many previews in-between had been installed. To see if your machine is the same try this command in your terminal: dotnet --list-sdks Microsoft has a page titled How to remove the .NET Core…
Today I decided to take a look at my Google Analytics for this website and I had way more traffic than a site like mine ought to have. Drilling down into the stats I noticed that most of the traffic must be from either bots or spiders. Google Analytics does have a setting though to filter those out. Log in to your analytics and go to View Settings where there will be a Exclude all hits from known…
Background Recently I was working on a website built before dotnetcore was even a thing. It was targeting an older version of the original .NET Framework. I am slowly modernizing it. Firstly I upgraded the nuget packages and re-targeted it to .NET Framework version 4.8. Next, as the solution was split into many projects I was able to migrate many of these projects to be netstandard. The idea is…
The other day I was going to test and debug some code on a Windows Server 2012RC machine. When running my asp.net core 3.1 razor pages website I encountered the exception: ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY This site worked fine elsewhere so to try and narrow down the problem I created a brand new asp.net core website to see if it was something in my code that was the issue but I had the same…
Note, August 2026: this post is from December 2019. The screenshots were originally hotlinked from Twitter’s image CDN. They are now served from this site so the post does not break if those links stop working. The text and the images are otherwise unchanged. So today, I raised a GitHub issue because after I had opened the result of dotnet new mvc in VSCode the problems window would have…
I host an aspnetcore website on a Windows Server 2012 R2 running IIS on Amazon AWS and it’s generally fast and stable. However, the past two nights the server has restarted unexpectedly leaving the website down with the following error message: HTTP Error 500.30 - ANCM In-Process Start Failure The first night a simple IISRESET command was all that was needed to get the site running again, however,…
Every time there is a new release of dotnetcore I need to get it updated on the three environments where I develop and deploy code: macOS, Windows and Linux (Ubuntu). Homebrew and Chocolatey update the version of dotnetcore for me automatically, sometimes there is a delay but they will eventually update them. However, for Linux each release of dotnetcore I always have to manually intervene and…
Today I think I have fixed a bug that has niggled away at me for ages. 🍪 A severe case of ‘works on my machine’ I have some code that consumes an external API that once authenticated would then, later on, make another API call to fetch the end users recent images. This worked great… Except for some users who reported they once logged on would not see their images. However, for the longest time, I…
On my Ubuntu disco dingo laptop, There was a bug affecting VS Code’s IntelliSense that I had just been putting up with for a good few days. The imported project “/usr/lib/mono/xbuild/15.0/Microsoft.Common.props” was not found There was no such problem on macOS or Windows however as I like to write code on my Linux daily driver laptop it became harder and harder to ignore. It’s a bug that I raised…