RegistryKey.GetValue() returns null on existing values

I encountered a very curious issue today, as a user of one of my tools complained that the tool was crashing because of an access to an uninitialized field. Because of the error reporting system in all my tools that gives the user the stack trace to pass on to me, I saw that the line that was causing the crash was a GetValue() on a registry key and value, that the user insisted existed. So, looking around StackOverflow, I noticed that if you compile to x86, you may have issues accessing some keys and values in the registry, because Windows may give you the wrong Registry view by default (I guess Windows gives a different view to 32-bit applications that the one it gives to 64-bit ones). I was accessing the keys by using OpenSubKey() on Registry.CurrentUser, but I guess that gives me whatever registry view Windows wants to give me.

So, given that there’s two RegistryViews, I thought I should change my GetRegistrySetting() and SetRegistrySetting() code to try both. Once I did, the problem was gone. Read on for the code that is part of my LeftosCommonLibrary set of tools, or just view the file that contains the code below in GitHub.

Continue reading

Downloading/Editing/Compiling an Open-Source App (Visual Studio, Git)

Downloading/Editing/Compiling an Open-Source App (Visual Studio, Git)

So, I see that my blog is the one place I forgot to announced that I’ve accepted the position of Software Engineer at 2K Sports to work with the NBA 2K team. Oh well. So, yeah, that’s pretty much it. Expect more about that soon. (I’m really excited about it, magnitudes more than this first paragraph shows, but this is not exactly the reason for this post.)

However, not everyone took that too well. There’s a lot of people using the tools I created for NBA 2K12 and 2K13, and they’re disappointed to see me go and stop developing game-specific tools (other tools like NBA Stats Tracker and Hex on Steroids I’ll still work on as a hobby whenever time allows). However, since all my work is open-source, there’s nothing stopping you, any of you, to grab the source code, edit it to your heart’s content, compile and re-release. There’s even a project that I know people were waiting for, namely Roster Workshop, which was to be 2K13’s equivalent of last year’s Roster Merge & Repair, improved and with a whole lot of new features, that never got released with how things turned out. Still, nothing stopping you from releasing it and keeping on working on it. Any of my tools.

Continue reading

Out of ideas? Not out of things to do (to improve your code)!

Out of ideas? Not out of things to do (to improve your code)!

This will seem like the most obvious tip ever, but I thought I’d get it out there for those that may have forgotten about it in a while. If you’ve ran out of ideas on what to work on  your project next (i.e. you have no new features or improvements in mind), try going through your codebase and find the oldest pieces of it. (Side note: Having your codebase be in something like a Git repository that can tell you when each line of code was committed and thus last edited can be amazingly helpful.) Chances are you’ve grown since then. You’re a better developer. You have more tricks up your sleeve. Maybe you know of a new algorithm, a new library, a new, better way to do things. Maybe you’ve read about security risks you weren’t aware of. There’s almost definitely going to be something there that could use some tidying up, some improvement.

Look for redundancies, variables or parameters that seemed helpful at the time, but now seem obviously unneeded. Look for opportunities to refactor, to optimize, to parallelize. Look for possible security risks, replace unsafe procedures and methods with safer ones. Maybe try doing a whole piece of code from scratch.

Continue reading

Going from C# to C++ in preparation of …”something”

After a few years of developing only in C# (all my hobby projects, e.g. modding tools, as well as my thesis, were written in C#, targeting .NET 4 and using WPF for the pretty (the what?) UI), I’m “back” to C++. To be brutally honest, I haven’t used C++ much. I did use it for whatever university assignments I had that required it, and I learned some pretty basic and important concepts with it, such as server-client architecture, multi-threading, message passing, parallelism. Only reason I didn’t get into it more was because when I did decide to get in trouble and start developing on a daily basis on projects I loved, I had already discovered C#. C# promised the power of C++, with a minimal amount of the trouble that C++ could cause you. Its power, the level of automation and abstraction the .NET platform offered, and how well tied it was with Visual Studio made it an absolute pleasure of a language to develop in. I could do everything I wanted, I had Visual Studio’s magnificent visual debugger, IntelliSense, documentation, I had LINQ; you could say the world was my oyster. And I created some useful things with it. All my modding tools were put to use by the basketball modding community, and NBA Stats Tracker was even used by a varsity basketball team in the US. I learned a whole fucking lot from using C#. My first big project, the delicateness of code where a single, innocent-looking change can break so many things in the rest of your project, trying to refactor and messing things up, trying to find what went wrong in a stack trace that was 9 calls deep, how to properly design an object-oriented program, what to do when you manage to crash the CLR (yes, that actually happened), so many things that I simply cannot list of the top of my head, really.

But C# is a world of convenience. 50% of what you need to do, it’s there, in the libraries. Memory allocation? Done for you. You declare and allocate everything the same way, not having to worry if something won’t fit in the stack, not having to worry about dangling references, segmentation faults, undefined variables.

Enter C++.

Continue reading

A user-friendly Update Notifier and Downloader (C#, WPF)

For quite some time, my update notification mechanism for most of my projects consisted of a Web Client async request to download a version file, check it against the current version, and show a message that would lead the user to a download page. This is all simple and great, but if you’re like me and you release updates constantly, you’d be better off using a delta updater, that knows which files have been updated since the last release, downloads them and installs them. For NBA Stats Tracker, I’ve taken the middle road. I release new versions quite frequently, so getting the user to the download page, then using the download link, then going through all the steps of installing it could be a hassle, deterring them from downloading and thus using the latest version. I thought I’d make the update process just a few clicks and minimize the time it requires to update to a few seconds.

Here’s how it works.

Continue reading

How to get detailed error reports on unhandled (and forced) exceptions in WPF (Updated)

UPDATE: The post has been updated since first being published with some improvements to the code.
UPDATE #2 (May 15, 2013): The post has been updated again with much cleaner code and additional functionality.

To err is human. And so, many (well, hopefully, not that many) times your programs may crash. And most of the time, they won’t crash inside your development environment, hooked to a debugger that will give you all the information you need on why and where the error happened. They’ll crash on your client’s machine. So, what can you do if you’re developing a WPF application, and want your program to produce nice, detailed error reports that the users can send to you?

It’s quite easy, actually.

Continue reading

Leap of Faith

For quite some time now, actually it’s been since I first decided I wanted my thesis to be a full-blown basketball statistical analysis tool, I’d been wondering if, and how, I would ever be able to earn some money, even little, out of it. That’s the main reason that even after submitting it as my thesis, the project remained closed-source. I was thinking that I would keep it that way, find a way to put a decent protection on it, and sell it for a fee.

And then I came to my senses. In an era where every proprietary piece of software that’s locked down is cracked, what’s the point of keeping your source closed? All the rest of my work is open-source, why should this be any different? Sure, anyone could take the source now and compile it and have the tool for free, but even when it comes to open-source projects, there’s ways to earn something. Especially a tool like this gives you the chance to be hired to actually use it for a team, rather than have them learn how to use it, or you could “sell” “priority support”, as in get paid to work on features or to be stand-by for bug-fixes and support 24/7 (or, to put it better, to offer support to the client as soon as humanly possible).

Plus, going open-source gives you all the well-known advantages of having the whole open-source community help, and even contribute directly if they want to.

So, it is a leap of faith. Maybe it was the right move to make, or maybe I’m an optimist and a delusional and I should be instead gathering money to buy some good protection.

Well, the leap of faith was taken. So, open-source community, fellow developers, make me proud.

P.S. The GitHub repository is at https://github.com/leftos/nba-stats-tracker. I’ve also migrated most of my current projects to GitHub from BitBucket, and you can find them at (well… duh) https://github.com/leftos.