Upgraded to a new host

I decided to look around for a more affordable VPS providers with better specs for the money, and found Hetzner. Now I’ve gone from a 2 core, 2 GB, 40 GB instance to a 4 core, 8 GB, 160 GB server for a little more than I’m paying now at DigitalOcean. I’m hoping this new service won’t let me down. I was also kind of disappointed with DigitalOcean, they don’t have the type of droplet I originally had for $12.

In other news I’ve been doing a little bit more web development in my spare time, so that motivated me to possibly start working on my personal website again. I’ve also finally started looking into container technology like docker. I’m not sure what I want to containerize, but I’m sure I’ll find a project.

Obligatory I’m Still Alive post

It’s almost a running joke at this point, but I’m still alive! COVID hasn’t killed me yet, and we haven’t been plunged into a nuclear winter; so yay!

I have no idea what I’m doing with this site, other than keeping it up as beacon of hope that I may one day find the motivation and willpower to upload some monumental project that will change the world. I did upgrade the server to the latest LTS release of Ubuntu, as well as the latest version of WordPress. I’m hoping I can at least update some things, and post some new content; but as you know I’ve made that promise many times over the past 15 years. I can’t say it’s for the lack of time, because I have plenty of time after work.

Anyway, I hope everyone else is doing great, and if you’re still checking up on this site from time to time I thank you.

.NET Socket *Async methods have a design flaw.

So I was attempting to make use of IO completion ports and build a high performance socket server in C# by making use of the *Async methods such as ReceiveAsync with SocketAsyncEventArgs. However I’ve encountered a problem which I cannot seem to find a solution for which involves a StackOverException being triggered by the execution of these methods. You see, at first glance everything appeared to be humming along nicely, until I decided to flood my server with about 12,000 randomly sized packets. That’s when the problem shows up.

I have a TryReceive method that makes the first call to ReceiveAsync, and if it returns FALSE, then I call the ProcessReceive directly, otherwise it gets called by the Completed event getting invoked on the SocketAsyncEventArgs. ProcessReceive then does some processing of the message and then calls TryReceive to start the process all over again. For whatever reason, the ReceiveAsync is always completing synchronously and creating a recursive loop with my two methods.

I’m not really sure what to try at this point, other than possibly trying to call it on another thread, but I’m worried that might cause some other recursive thread call issues. If anyone has any ideas feel free to hit up my contact form.

Here’s some extracted snippets of code to show how the calls are structured.


I’m not sure how many people follow my GitHub, but I’ve been learning React and Angular. So far if I had to pick a favorite it would be Angular, I prefer it’s stricter separation of code and markup, and it’s bigger collection of functionality that’s built in. I’ve got another domain (garbagefile.io), that I’ve wanted to do something with for a while, so I’m thinking I’ll build something in Angular and host it on there. My main site will stick with WordPress for right now, unless I get the motivation to rewrite it in Laravel or some other PHP framework.

I’m also working on a new version of my AIM server in .NET Core that should be a lot more scalable and feature rich. I’ve wanted to build it for years now, but I didn’t feel as though I had the skills or the technology stack to do it successfully. My goal would be to have it support up to 5000 connected users at once starting off, and to have it possibly scale up to 500,000 users (highly unlikely to ever get that amount, but I can dream can’t I?). Other goals include having it support AIM 1.x – AIM 5.x, as well as possibly creating plug-ins for those versions to support OSCAR over SSL, and stronger password hashing methods such as Scrypt or BCrypt.

Anyway, I hope to update this site soon with more updates, but if not, I guess i’ll see you next year!