Source Control Headaches…
It seems like it’s at least once a week that I end up fighting with source control (Vault, I’m looking at you). You’d think there’d be a better way to do things. I’ve looked at Mercurial and Git, but both seem somewhat complicated and less Windows-friendly (and less user-friendly). Anyone have any suggestions for decent source control systems on Windows?
Still Alive…
I’m still alive, I’ve just been super-busy lately. I might be picking up a little side project that would involve writing a small business app for a friend. I’ve never worked with things like printing in .Net, and I think it’d be good to get the experience of doing so.
I don’t think I’ll be getting an entry into the ‘Unofficial 4 Elements Contest’ over at GameDev.net. I’m just too busy with things going on to do another contest, let alone finish all the other things I’m working on (or things I’m doing). I do laud the efforts of those putting on and entering the contest though. Kudos to you guys!
Crawl In a Hole and Die
There are a few things of late that have really gotten on my nerves. Here they are:
[em]Exceptions happening in the normal flow of logic[/em]
I generally work with Visual Studio set to break on any exceptions. I do this because I like to know where exactly things explode (which is often). To turn this on in Visual Studio, go to Debug->Exceptions and check both checkboxes next to “Common Language Runtime Exceptions”. This will cause Visual Studio to halt on the line of code that throws an exception. This is particularly useful when debugging things.
This also becomes really annoying when not debugging things that still throw exceptions. I’m sorry, but they are called [em]exceptions[/em] for a reason. An exception is something that happens that is not ordinary – something not normal. If you are having exceptions thrown in your regular sequence of events in your application, you are quite possibly doing something wrong. Consider reworking function calls so that rather throwing exceptions they return true/false on success. Of course there are legitimate times to throw exceptions (like when being given garbage input), but that shouldn’t be your normal flow of events. Perhaps understandable if you are parsing through irregular input, but you really shouldn’t be throwing exceptions all willy-nilly.
[em]Fix/Patch it until it gets too bad to work with[/em]
If your code looks like a rat’s nest made of spaghetti and tangled kite string, it’s time to reconsider not just your code but your coding practices. Cars require preventative maintenance. Homes require preventative maintenance. Lawns require preventative maintenance (in the form of mowing regularly). So does code. Code often grows with modifications, updates, etc. Before things get too bad, perhaps you should reconsider cleaning things up and reworking things before they get too ugly. Maintaining a rat’s nest is an ugly, ugly, job that no one really wants to do. Why not take a little time to make things better before they get worse? There’s something to be said about the old adage ‘A pound of cure is worth a pinch of prevention’.
[em]Lists of things[/em]
If your users have to make selections from long lists of items, they are probably going to want to punch you in the face after a while. Part of my first co-op (student work term) position involved working with a certain piece of software that was used to copy things from a test environment to a production environment. This involved selecting items from very large lists (picture a .Net list box or a drop-down list box with several thousand similarly named items. After several weeks of this I was ready to go postal on the person who created it.
Users are not computers – they aren’t good at filtering out the stuff they need from the stuff they don’t. Help them out. Limit list controls to a proper amount of items. Allow large lists to be searchable. Allow filters to be used to limit visible information to things that are relevant.
[em]Small things make big differences[/em]
90% of applications are rubbish because of a 10% difference. Let’s be completely honest -a lot of the applications out there are garbage, including some that I’ve made or worked on. They aren’t garbage because they don’t work, they are garbage because they don’t work as well as they could. When your user says “Why can’t I do that?”, that may be a subtle clue that something is missing or incorrect (or that the user doesn’t understand their own business logic).
Anyway, that’s more than enough of a rant for now. Moral of the story: write software that doesn’t blow chunks.
Icing and Cake
(For my American readers, icing is what you would refer to as ‘frosting’)
The other evening I was thinking about cake and icing. People seem to like both cake and icing. Cake on it’s own, without icing is too plain, boring, or dry. Icing on it’s own is too sweet to eat very much. When the two are put together, though, the overall product is much more desirable.
This isn’t about icing and cake. It’s about balance and a solid foundation.
So often I see posts in various forums where new members of the community demand to know what everything is about. They expect to be spoon-fed answers to questions that have answers which are easily found (usually in the Frequently Asked Questions). They want to be able to make amazing games that compete with the latest triple-A titles that take many man-years of development, and yet aren’t willing to even do a simple search for answers to the questions they ask.
Likewise, people seem to want to live in the newest, biggest houses, drive the fastest cars, and spend time with the most attractive women. They see the sweet icing of the cake, and they want it.
People also seem to want the sweet rewards of a close relationship, but aren’t willing to put in the quality time and effort that it takes to form such a relationship. Relationships built on lustful desires rarely last.
Here’s a little one of life’s lessons:
You can’t expect to have the sweetest things in life if you aren’t willing to pay the price.
If you want the icing, you’d better be prepared to make and eat some cake.
DataGridView not updating row contents when setting cell.Value
I ran across this last night when working on Todo 4.0 – apparently there is some sort of bug (or undocumented feature) that makes it so that when you update a cell’s value via the .Value property, the DataGridView itself is not refreshed. Adding or removing rows from a DataGridView causes it to be refreshed and redrawn, but if you edit just the contents of a single cell via the cell.Value property, it doesn’t refresh or redraw the grid. The actual value for the cell is updated, but the displayed value is not updated.
There seem to be a few common ways of fixing this:
- Change the underlying DataSource for the DataGridView and call DataGridView.Refresh()
- Call RefreshEdit() if the row has not already been added to the DataSource (as seen here)
- Remove and re-add the row
I went with the latter. There’s probably a better way to do it, but I couldn’t figure out anything at the time (programming when tired can be a challenge).
Hey Autodesk, Listen up!
So a while ago, back when I was in university I had a chance to take a class on 3D modelling using Maya 2008. I quite enjoyed the class and found the skills that I learned there could easily be applied to making models for video games I’d like to make. Unfortunately, as a student I didn’t buy an educational copy of Maya because it was an expense that I couldn’t then justify. Now that I’m no longer in school and am making money I decided to take another look at it. Unfortunately the price had gone up another $1500! $1500 more than the $2000 that they were already asking! Yeesh! Here’s the thing – I don’t need all the features or all the fancy renders or that – I just need a modelling, skinning, rigging, and texturing tool to make some fairly simple models for a homemade game. There’s no way in heck I’m paying $4500 for Maya now, despite me actually having a job and having more money now. I still can’t justify that kind of expense.
Hey Autodesk, listen up! I’m not going to pirate your software, and I’m not going to pay out the nose for it! What I will do is take my business (and my money) elsewhere. What you could do though is release a cut down version for the indie gaming community! Get people hooked on the cheapo version and you might actually sell a few more copies of the full blown thing, rather than having people resorting to piracy.
There’s a niche market there, just waiting to be tapped. Hey Autodesk, if you don’t get on it, somebody else will – and they will be the ones cashing in from it.
Coming Along…
So I’ve slowly been doing a little bit more work on Todo 4.0. Things are slowly coming along, but I’ve got a minor design decision to make. On the side bar, where you can add/edit/delete tasks, I currently have three buttons – one to add a new task (“Add Task”), one to save changes (“Modify”), and one to delete a task (“Delete”). I’ve been thinking about removing the “Modify” button and have it automatically save the changes made to a task. This would help clean up the UI and make it a little bit more like Microsoft OneNote (which automatically saves everything). Of course the downside to this is if someone makes a change to a task and doesn’t want to save it (say, accidentally pasting something over top of the task details), and that change is automatically saved.
So, here’s a chance to voice your opinion:
I’ve more or less put anything XNA related on hold until I get Todo 4.0 done – that way I actually have some motivation to get Todo 4.0 “done”.
Telus – Oh, believe me, I will!
So I recently had a roommate move out that had all the utilities in his name, so it was agreed that I would take over the place and switch everything over into my name. He went ahead and called all the utilities to let them know about the switch-over, and then I called them and got things arranged. At least I thought I did.
The other night, a friend was at our place and said that the caller ID was still showing up as being in the old roommate’s name, even after I had called and gotten all the details switched over almost a month ago. Then, last night I got a call from my old roommate who said that he got an e-bill from Telus (our telephone and internet provider), which he should not have gotten. Not only that, but it was larger than normal (I’m guessing because of the charge of having the billing information switched over). Now you’d think that even after I called and had the switch the billing information over to my old Telus account, and had everything switched over to my name, that I would be the one getting the bill. Apparently not.
On top of all of this, they called several times during the day throughout the last month asking for my old roommate, even after being told several times that he has moved out. Hey, take a freakin’ hint – he’s moved out and no longer lives here! I shouldn’t need to tell you that half a dozen times!
So, I’m going to issue an apology in advance to the poor sap who is going to get an earful tonight: I’m sorry that you have to work a low-paying job at a call center, especially for Telus. I don’t personally hate you, your mother, or your dog, it’s Telus I hate.
Telus, if you want my money, maybe you should be sending the bill to the right person.
Since I’m in ranting mode…
Also, Fido (my cell phone provider), if you want my money as well, maybe you should make sure your online payment system is up and running all the time. The first time I went to go pay my bill online on your website I wasn’t able to access it because your online payment system was down. You’d think that, you know, being a business and all, you’d make it nice and easy for me to give you money. Then, this past time when I went to pay my bill I again had issues with your online payment system, which repeatedly booted me back to the main page without any reason. You might want to fix that.