Mayweather

At 44 Mayweather probably isn’t going to win many fights against people who are at the top of their game. He’d still have a good chance against non-boxers and celebrities. However, if you fight celebs and take them out too quickly then other celebs might not be so willing to fight you. I think we’ll see a few more Celeb vs Mayweather fights and he will always let them go the rounds.

A Time For Everything

There is a time for everything,

and a season for every activity under the heavens:

a time to be born and a time to die,

a time to plant and a time to uproot,

a time to kill and a time to heal,

a time to tear down and a time to build,

a time to weep and a time to laugh,

a time to mourn and a time to dance,

a time to scatter stones and a time to gather them,

a time to embrace and a time to refrain from embracing,

a time to search and a time to give up,

a time to keep and a time to throw away,

a time to tear and a time to mend,

a time to be silent and a time to speak,

a time to love and a time to hate,

a time for war and a time for peace.

Meghan and Harry

I’ll bite and give my opinion on this. They are two millionaires living a lavish life in LA while simultaneously whinging that they have been hard done by. These are people who had a $70,000 wedding cake, paid for by the state. They couldn’t be more out of touch with normal people, many of whom have been struggling with the repercussions of a deadly global pandemic. The world has much more important things to be worrying about.

Database Issues

Long story short: MySQL 8.0 was running really slow, so I switched to MariaDB and everything is running a lot quicker on all my sites and web based apps. Thankfully I already had backups of my databases.

Development-wise I’ve mostly been focusing on my work stuff and university work, so haven’t had a lot of time for hobby projects. I’ve also been completely redecorating the house which has been fun. Hopefully in Summer when I don’t have university work to do and all the house maintenance is done I can work more on hobby stuff.

However, I have been doing a bit of work on Timeshed, particularly to the IT inventory manager and the maintenance tracking side of things because I use them to help me with work stuff. I actually use those features on a day-to-day basis. It’ll be nice to make that part use friendly so other people can use them

I’ve also been developing a quiz buzzer that people can use in Zoom quizzes. The players can use it on their phone or computer and the host can use it on a computer:

Players: https://buzzer.pftcs.com

Host: https://buzzer.pftcs.com/resultbb

Server Move

I just moved my server over to my new house. There teething issues due to using different routers and a different isp, but I think most things are fixed now.

Over the next few weeks I’m planning to do a lot of work on Timeshed. I’ve written up a list of blue prints that should make it a lot more user friendly. Should be interesting when it’s ready.

HoverRace Netfix Test Release

Last night I released a version of HoverRace that will potentially fix some of the problems that were stopping online racing from working. For the nerds out there,  I’m using upnp holepunching to handle the peer to peer data transmissions. It should work behind some routers, but not all routers. I’m still planning to make it use servers instead of peer to peer between players, but that will require a major rewrite.

Here’s the download: https://github.com/johnsie/HoverNet/releases/tag/1.24.2

HoverRace in VS 2019

It took a bit of work, but I got the HoverRace C++ solution compiling in VS 2019. The solution had previously last been compiled in VS2010 Express, so there was quite a bit of deprecation and bug fixing to deal with. Luabind had a bug that made it break with more recent Boost C++ Libraries and only the recent Boost Binaries work with VS2019. The solution was compiling a fork of Luabind with a fix applied and recompiling WGOIS and OpenAL 32 in VS2019 and loading them into the Solution.

I checked it all into Github and typed up some documentation explaining how to compile, so hopefully HoverRace will continue to exist and maybe even attract new developers.

The github for this project is at https://github.com/johnsie/HoverNet

Got a few minor fixes to to do and then the name of the game will be sockets programming in C++

Delegates in C#

Delegates are used in C# if for some reason you want to pass methods as parameters.

For example:

You have the number 10 and you want to print it out in several different formats. You might have several different methods to do this:

  • A method to print it as a whole number
  • A method to print it as monetary currency with a pound, euro or dollar sign.
  • A method to print it as a decimal

Fine… The thing that those those methods all have in common is that they take in the integer and do something with it. In this case the integer we pass will be 10, but by design it would probably be better if the methods can accept any integer eg. public void PrintAsMoney(int){}

We could create a delegate called PrintValue

public delegate void PrintValue(int value);

And that delegate can later be used in a method to represent the three methods

PrintValue printDelegate=PrintAsInt;
printDelegate+=PrintAsMoney;
printDelegate+=PrintAsDecimal;

We’ve now set which methods should be used when printDelegate is invoked. We already know that all those methods are compatible with our delegate because they can all accept an int.

So… let’s invoke the delegate

printDelegate(10);

Our program knows which methods to use and to pass the number 10 to, because we just specified that when we set the methods for printDelegate. So all in one clean swoop it passes the number 10 to each of those methods that were subscribed to the delegate and the required data is printed. This is a multicast delegate because it uses more than one method. A standard delegate will only pass one method but works pretty much the same way.



Static Classes, Methods and Variables

Today someone  asked me what the difference between a class and a static class was. Of course my mind went blank and I got to squirm for a bit. I think it’s basic software engineering that any developer should know and it was a bit embarrassing. So as soon as I got home I did some Googling, watched some videos. It’s nice being single and having time to do that kind of stuff. Here’s what I’ve come up with:

A static class is one which you don’t need to make an instance of but can contain a collection of useful functions.

For example x = Math.Sqrt(144): uses the Math class but of course you don’t need to create an instance of the Math class to do that. If you try to create an instance of the Math class you will get an error message… Because it’s static 😉

A method that belongs to a static class is therefore automatically a static method.

You identify  both by using the keyword ‘static’ to make it easier for other developers and the compiler to know what’s going on.

Eg: static class UsefulTool

public static void HelloWorld

This is useful for tools/methods that you may want to re-use in your projects. I’ve actually been using these sort of collections of functions for years, as would most developers who don’t like repeating code necessarily.

A static variable is one which is about the class, not the instance of the object. So, for example you could have a counter within your class that is incremented each time a new instance of the class is created. At any point you can get the value of the static variable without refering to the instance of the object:

x= Car.count;

The code above would display the number of instances of the Car object that we’ve created (If the static int count gets incremented each time the constructor is loaded. Ie every time there is a new instantiation of an object )

A non static class that can instantiated as an object can also have static methods. For example the Car class could have a static method called GetCount(); which returns the value of static int count.