When working on projects its helpful to know in which direction you are headed. Its good to place goals, do a bit of planning, and get things right to save time in the future. Unfortunately however, there is little to no information online on how to successfully manage and keep a big software project going. Sure there are management books on how to motivate people, or how to lead coworkers, or even how to plan every step of the project with careful diagrams, flow charts, and process graphs. As far as I could find a year ago there was nothing on how to get down and dirty and manage things like a build process, or an automatic unit test suite, or how to deal with different platforms in your build system. For the past year I have been working on a big project that required all these things and whenever I fell into a trap, or discovered a new idea, or came up with a new operation I wrote down little snip-its to be eventually published in this article. I hope others looking for information on how to manage a project effectively and efficiently will find some of these ideas very helpful.
I ran into an interesting problem the other day that I think is worth sharing. Fans of the pluggable factory design pattern, inversion of control, etc will be interested to know that these methods do not work very well when compiled into static libraries. Sounds obvious but what may not be so obvious is why.
I stumbled onto this problem when I changed one of my exe projects to a static library so I could setup two exe’s, one for unit tests, the other for releasing. (Which by the way is a wonderful way to unit test an exe project) Most of my projects these days use some form of inversion of control so I had static variables creating maker classes which would register themselves with the factory. As explained in one of my previous articles here.
When I changed my project to a static library and linked it to a separate exe project my maker classes stopped registering themselves. Why does this happen? Well after a bit of a research I found out that when you link in a static library, the linker only links code into your project that you actually use. All extra code is left uninitialized and put in a corner to sit while the big boss code runs. A very interesting side effect of static linking.
Anyway, to fix this problem in visual studio you need to set “Use Library Dependency Inputs” in Linker options on your exe project. This will make the linker link in all the object files themselves, instead of selectively linking them as needed. I am researching some way to do this per library, because as of right now if you set this it will link ALL libraries like that.
In linux it would seem the option is -z allextract, but I have not tested this one.
If you need your static objects from a static library to be initiated like normal, this should do the trick.
Security questions, my number one most hated thing online. I can see the logic behind these questions, the web site verifies personal information with your answers in case you misplace your password, username, etc. So what is my problem with these very nosy fields? Well first off who would want to tell random-shopping-place.net her maiden name, or his favorite pets name? I’ll admit most of the information is not worth much to most people, but I recently logged onto a site where they wanted five different security questions. Questions to choose from ranged from favorite band to favorite elementary school teacher. One question guys, that is my limit.
Ignoring the personal information and the question addicts, what else do I have against these questions? Well first rewind a bit and think about why they use these questions. Typically these questions are used to restore account access after you have been compromised or forget your information. Occasionally some people want answers just to change your log in info. Why do web sites feel the need to verify that the one with valid credentials can also answer a bunch of personal questions? Its just another useless security layer that might prevent <1% of unauthorized accesses for the retards using ‘password’ as their password. Security questions are nothing more than a retard test, and having to pass a retard test each time a user wants to log in is insulting to everyone; or at least it should be.
Salary is a big deal for a lot of people. In fact its such a big deal for some people that they will sacrifice themselves or their coworkers to squeeze just a little more $/hour. In general I think its safe to say that most people work for money. Right? Generally, people work to make money, and by that what I really mean is that people work to make enough money so that hopefully someday they will not have to work anymore; at that point they hope to enjoy living off the interest accrued from whatever retirement package they choose to use when they started working.
Well, what is money? What are those greenish photo credit: hickoryhollow113 pieces of paper or numbers on a bank statement? They are just a means to achieve an end; in other words, retirement. Sure you go on vacations, buy big houses, marry someone, but if you take a step back and look at the purpose of these little bills to any civilized human being on the planet you will see that it all leads up to the point where all of a sudden there is no reason to continue working anymore because you have enough invested that even 4% return will pay your salary each year.
Ultimately these pieces of paper are your retirement, nothing more. They certainly do not represent any real wealth, as millions found out last November. Do not get me wrong I am not going to discuss what some call “The Federal Bank Conspiracy.” Which includes theories explaining the devaluation of the dollar, global government, criminals in fancy suits (although you would do yourself a favor by learning a little bit about the origin and meaning of those green bits of paper). I am just going to explain some of my own reasons for not defining my life by my eventual retirement.
Sadly, Pax is over, fellow gamers are packing up, and exhibitors are leaving before the cleaning crew shows up. There was a lot of SWAG, a lot of people, and a lot of games. I mentioned a few booths in my first post, so this time I am going to try and cover some notable booths I did not mention or did not get a picture of the first time around. I am trying to cover some of the major features here, but this is by no means a complete feature list.
Day one of the PAX expo is officially over and I have some pictures and information about the exhibitions to talk about. The day started harmlessly enough, we queued in the queue room to wait for the exhibition hall to open. While we waited the enforcers made sure we were not bored by entertaining us with internet memes and blow up beach balls.
Read the rest of this entry »
User defined types in Microsoft SQL are really handy. Using these objects you can construct queries like
select duration.minutes from cdrs; select duration.seconds from cdrs;
You can also program them to read weird string inputs that other data types can not handle. Recently I wrote a custom data type to read a duration field of the format minutes:seconds.tenths; so standard input went something like ‘002:34.2.’
Writing a custom data type is actually very simple. You just open a new sql data type project in Visual Studio and VS will integrate nicely with your sql server; even going so far as to upload the data type for you and run tests. There are numerous tutorials online for programming a data type however so I will not cover that aspect.
Like I said I recently created a data type for my data parsing. I put it into my table but soon found that assigning my specific data processing user permissions to the object was harder than you would expect. I kept getting the error
[Microsoft][ODBC SQL Server Driver][SQL Server]EXECUTE permission denied on object 'data_type', database 'db', schema 'dbo'. (SQL-42000)
grant execute on [data_type] to cdr;
returned ‘object not found.’ Ms sql’s security assignment tool did not help either, it never did ‘find’ the object I created.
I eventually found my way to this msdn page which at least revealed the secret missing keyword. To set the permission on the object use this query
grant execute on TYPE::[dbo].[data_type] to cdr;
Unique character names in MMOs have long been a pet peeve of mine. I am sure most of you have experienced the frustration when your favorite character name ends up taken by some else, and if you are like me it might take as many as 20 tries to get an available name. Well, here is a question for all you MMO programmers, why the hell are you still using character names as a unique identifier? There are so many better options to identify players in the world, every name does not need to be unique. In fact I frequently find that running across players entitled ‘FancyPants12’ or ‘Moooo4me’ does more damage to game play than a simple change would. When I am in the process of being adsorbed into an MMO through very nicely executed immersion techniques, stumbling onto these players breaks flow, disrupts my concentration and I find it harder to follow the story line (or even care about it).
I bring this up because this last weekend I started playing Aion. A very nice game that I have high hopes for, but its probably the first MMO that I am actually interested in a bit of the lore; I even went so far as to read some of the important quest text. Its shocking yes, but they really did do a good job making the player feel like they are not just a drop of water in an ocean; which is worthy of recognition in itself. Unfortunately, Aion suffers from the unique name dilemma so while I am trying to rescue the damsel from a horde of black winged bandits I am constantly running into ‘XXSlayerXX’ or ‘RoGeGardian’ and that is just terrible from an immersion perspective.
But what can be done about it? After all, a lot depends on character names. PMs, brokers, mail, friend lists, etc etc. Obviously a new system has to enhance game play, not restrict it. I propose a system where each character is assigned a unique number, not a name, which can be used for all these means of communication with just a little extra effort on the programmers side.
So a few things happened and it appears that I will be attending Pax West 2009. Being someone who did not know the convention existed until about a week ago I like to consider my position at PAX as ‘complete noob.’
Anyway why I am I posting this? Well I have nothing to say about Pax in particular, like I said I have never been there and my general understanding is its like an E3 only good and open to the public. I was roped into taking this trip by a friend and we plan to spend a week along the west coast. That being said Pax started out as only a minor side attraction for us, as we had already planned on traveling out there. It was not until I started reading about community events and enthusiasm that a lot of people seem to have that I started to seriously look forward to attending the conference.
I bought a new computer recently, complete with the new Core i7 from Intel, 6GB DDR3, and GTX 275. The last time I did computer hardware research was when I built my old computer 4 years ago so I have been a little out of the loop. After getting some pointers and doing research myself I put this computer together and I am so impressed that I wanted to write something about the Core i7.