Categories
General Marketing/Business

A Business Practice I’m Not Liking

I was on a student health insurance plan up until July. Since I am no longer in school, I can’t take advantage of it anymore. I started to look for a new insurance plan earlier that month, and I figured I would cancel my plan once I knew I had a replacement. Unfortunately the search and application process took a bit longer than I expected and so I was forced to cancel it before I had anything.

No big deal. I just sent an email to eHealthInsurance.com, my “agent”, and asked them to cancel my Fortis Health Insurance plan. Simple.

I did end up sending it a bit later than the expiration date, but I made an assumption that I had a grace period. You know, because good companies don’t terminate your plans without saying, “Hey, we haven’t received your payment, so we’re letting you know that your plan is danger of being terminated.” In fact, they did send me such letters.

So I was surprised to find a letter yesterday telling me that they cancelled my plan on July 27th, 2005. Um, it’s frickin’ September, and you are telling me this fact NOW?!? A whole month later you decide to inform me of this decision? The letter’s purpose was to inform me that they cancelled it because of non-payment. Huh?! I CANCELLED it, and obviously they should have received the cancellation since they didn’t send this letter until a couple of days ago. I cancelled weeks ago.

The best part? The letter informs me that this reason can be used when I finally do apply for new insurance from any company.

Why not inform me that the plan was cancelled, oh, I don’t know, when you cancelled it?

Recently I had a similar problem with my cell phone bills not getting paid. I received a bill that didn’t mention that my last month’s payment was received, but I assumed this bill might have been sent a bit earlier. After all, my payments were handled by the phone company since I had a payment plan that allowed them to take what I owed them out of my account every month. Up until the situation I describe below, I was very happy with their customer service.

I forgot that I received a new debit card from my bank and didn’t think to update the expiration date on record with the company. When I noticed that my bank statement didn’t match what I thought I should have paid out, I called them and found out about this situation.

You know what would have been frickin’ useful? Getting notice in some form saying, “We tried to collect payment, but your expiration date on your card is not correct.” Or if they don’t have that information, how about just, “There was a problem trying to get payment. Please call us.”

But no. I had to find out myself. I didn’t get charged a late fee, but I was wondering if I would have been if I had waited longer to call them.

Both of these situations are my fault in the end. I made bad assumptions. I forgot to update my information. I admit that these were my problems.

But what kind of a business forgets that its customers might be human and make mistakes? These two companies aren’t the only ones either. In the past few months, I’ve been getting the feeling that companies don’t WANT to do business with me. Seriously, why do I have be the one who finds out what the situation is? Why can’t the business be proactive and inform me about what I need to do if I need to do anything?

Imagine if I would have been sent a letter the day that they cancelled the plan. I would have been better prepared to do something about it, especially if it potentially has such a huge effect on my application to other insurance providers. Imagine if T-Mobile would have told me that they had a problem collecting payment THE DAY THEY TRIED TO DO SO. The problem would have been resolved then and there. Instead a month went by before I knew about it.

I’m 24 and haven’t been working with services and businesses for too long. Up until a number of years ago, I wasn’t in charge of my finances. I’m disgusted with the level of service I receive at some places. Has this been the status quo, or is it a new trend with businesses? Why do businesses think that they are better for upsetting me about completely preventable things? After all, wouldn’t they get paid sooner? Wouldn’t they keep business from going to their competitors?

Categories
Marketing/Business

Steps to Online Business Success

10 Steps to a Hugely Successful Web 2.0 Company has some of the same points I’ve read in many different places distilled into a single list. It touches on topics that have been covered in greater detail on blogs like Creating Passionate Users, such as the idea that people like to tell friends about cool things to show that they are in the know.

Categories
Game Development

Oracle’s Eye Development: Frame Rate Independence

Last time I mentioned that I had made a stick figure to move around. I implemented four degrees of movement for it, but I still don’t have a timer to make it move at a sane rate. Since this project is late anyway, I figured I might as well learn about implementing frame rate independent movement.

I actually looked at my GiD entry and found that it was handling the timer code badly. Basically, the game would update every time an SDL Event occurred. Normally the event would just be the timer callback and would run fairly regularly. But if you pressed a key or released a key, an extra update and draw would occur. Now, I programmed it to allow you to hold the key down to move so it only speeds up when changing directions and may not be as noticeable; however, if you press keys multiple times, it becomes very obvious. For my first GiD, I suppose it isn’t that big of a deal.

For Oracle’s Eye, I decided to create frame rate independence. It basically means that the rendering happens independent of the game world updates. The game can go from 30 frames per second to 100 frames per second to 15 frames per second, but the game world will still update once every 10 milliseconds or whatever I want to set it to. It should result in smoother animation and movement.

When I started this project I didn’t think that I would be working on such an “advanced” topic. It sounded a bit complex and beyond my abilities. Well, screw that thinking. It can’t be THAT far beyond what I can currently do. In fact, when I think about it, making games in general is still a challenge I haven’t decisively overcome yet, so I’m charging forth. Screw you, Pessimism!

Luckily someone just posted about this topic on the SDL mailing list and so now I have a link: Game Physics: Fix Your Timestep!. Reading it gave me some idea about what needs to be done, but variable names like t and dt and functons that come out of nowhere make it hard to follow. I was able to find another article on gamedev.net called Achieiving Frame Rate Independent Game Movement. It is a bit shorter, more to the point, and easier to follow.

Problem # 1: It is a good thing that I haven’t gotten too far with my game project because implementing this feature is going to require a redesign. I originally envisioned moving my characters about by telling them to move so many pixels directly. For example,

player->moveX( moveSpeed );

should move the player sprite to the right by moveSpeed distance. If moveSpeed is 5, then the sprite will move to the right five pixels.

It would have been fine, but with FRI movement, I would need to do something different. As I understand it, I would have to know where the sprite started and where it will end up. Then I have to calculate at any given moment where it is along that path. Whereas before I would have moved the player sprite an arbitrary number of pixels, now I will need to determine how many pixels it moves each second then calculate how far to move it per frame. If a player should move 60 pixels per second, then the total movement of the sprite in all frames in that second should add up to 60 pixels. The trick is figuring out the movement each frame.

Problem #2: FRI movement works much better in 3D than in 2D. In 3D, the actual 3D model is just math. You can interpolate the animation of the model, and it will look smooth no matter how slow or fast you run it. I’m using sprites, and sprites have only as many frames of animation as I created. Let’s say I have three frames of animation for a walking sprite. Normally, I would just update every so often and make the animation step forward each time, but with FRI movement, how do I handle the partial movements AND animate at a normal pace? I can’t update each movement because then it looks like the player sprite is running way too fast. Do I have to figure out how far it should move before each frame gets updated? Does it even make sense to have FRI movement in a 2D game?

Starting this, I felt a bit overwhelmed. That’s a lot of things to take in, and all I wanted to do with Oracle’s Eye is make a simple game. Still, I forged ahead. I figured it is better to learn about it sooner rather than later.

I found a few more articles: Main Loop with Fixed Time Steps on Flipcode and Frame Rate Independent Movement on Gamedev.net. I also found a few threads on gamedev.net that discuss “time based movement”.

It actually doesn’t seem so bad now, at least for Problem #1. In fact, I don’t have to change my existing code all that much. I changed the moveX() and moveY() functions to take floats as arguments instead of ints. I added some timer variables: one for the delta, one for the current time, and one for the last time.

In my PlayState::update() function:

gTemp_currentTime = SDL_GetTicks();
gTemp_deltaTime = (gTemp_currentTime - gTemp_lastTime) / 50.0f;
gTemp_lastTime = gTemp_currentTime;

Then for each of the directions, I just change the code from:

gTemp_player->moveX( -gTemp_speed );

to

gTemp_player->moveX( -gTemp_speed * gTemp_deltaTime );

The 50.0f is fairly arbitrary. The code I got it from used 1000.0f to convert from milliseconds to seconds, but I found that the delta almost never became anything greater than 0, which meant that nothing moved. Using 50.0f seems to be fairly fast and smooth on my system. Of course, it depended on gTemp_speed which is in pixels per second. If I set it to 50, it ran quickly. Setting it to 25 slowed it down quite a bit, but it was also jerky, and setting it to 100 made it too fast.

It also didn’t take me too long to implement it, so I got suspicious that I did something wrong. After all, it shouldn’t matter how fast the sprite is moving. I will likely have sprites moving at different speeds, so what gives?

I found yet another tutorial, and this one actually made use of SDL. It turns out that I don’t do much differently. I ended up having to add SDL_Delay( 10) to the draw() function to get it to slow down enough, but I think that is a bad kludge. I believe that the reason it won’t move the sprites between each frame is because there isn’t enough to do between frames. The time between frames looks like 0.0 and so nothing happens. The delay allows changes to happen, but there is still the ugly jerkiness every once in awhile.

The next day, I tried again. I changed it so that it will constantly loop until deltaTime is something other than 0. It worked and looked great, but I found out that I forgot to remove the SDL_Delay() line. When I removed it, it ran incredibly slowly again.

So I changed the loop. I basically checked to see if the start and end times were 1/30th of a second apart since I wanted the game to update game logic at 30 frames a second. If the difference was less than that time, I delayed. It seems to work out well. 1/60th of a second looks even nicer, but I’ll have to do more testing to verify.

Unfortunately the use of floats/doubles means that when movement gets converted to ints for Kyra’s sprite movement the precision gets lopped off. I think this loss of precision is the reason why some of the movement might look a bit jerky. Of course, Problem #2 might be a tougher issue, but I’ll have to tackle both of them another time.

I am fairly pleased with what I have done in a few hours over the course of a couple of days. To think that I originally believed that I wasn’t up to the task and would have skipped it. I win.

Categories
Marketing/Business

Software Piracy Is Not Theft

In The Escapist’s Casual Friday came the article So What’s It Worth To You. I agree with the main point. Voting with your dollars is important. When you pirate a good game, you basically send the message that the game wasn’t worth paying for and so more good games won’t get made. I appreciate Blancato pointing out that major piracy that involves companies trying to make a quick buck are the major problem, not necessarily Joe Schmoe Gamer who got a copy from his friend. I also like how Blancato mentioned that draconian anti-piracy measures will turn off paying customers. After all, if you pay for something and have to jump through hoops to play it, but the person who pirates a copy gets to just play it sans hoops, isn’t there something wrong?

All well and good, but I am still getting pretty upset that people will equate software piracy with theft. The two are not the same. Even the courts say that they are not the same. The only ones who claim they are the same are the companies who gain an advantage in making you think that copyright infringement is the same as theft. Oh, and the people who hear this kind of thinking and start to think that way as well.

One problem is that people like to make analogies with things that just aren’t like software. People compare software to cars. If I take a car, that’s theft, so why isn’t it theft when I “take software”?

It’s because you aren’t preventing someone else from “taking” software. When I take a car, there is one less car for the car dealership to sell. That’s actually stealing something. When I “take” a game, it’s theft if I literally steal the box from the retail shelf. If I instead make a copy of a CD from a friend, I didn’t steal anything, and no court will ever allow the prosecution to claim it was an actual theft. When someone makes a copy of a game or music CD, it’s illegal because of a violation of copyright. It’s an infringement on the copyright holder’s rights. Of course, if the ESA, MPAA, and RIAA all complained about the “rise in copyright infringement” it wouldn’t invoke as much feeling as “they are stealing from us!”

Software piracy isn’t as cut and dry as some would have you believe. The way some people argue it, when someone pirates a copy of a game or movie or music, it directly equates to lost revenue. It would be true if every pirated copy would be paid for by the infringer, but in reality, come on! Let’s ignore the real criminals who make many copies for the purpose of selling them since they are clearly a separate case. Let’s focus on the casual pirate. He/she might make copies of every game simply because he/she likes the idea of collecting all these games. Take away the possibility of pirating those games, and I really don’t think this pirate will have the ability to pay for it all. This pirate will just not collect as much. Pirated copies of games like Catwoman wouldn’t magically turn into revenue, I’m sure.

I’ve yet to see a real study on this issue, but I wonder just how many of these non-professional pirates would be forced to buy a game that he/she couldn’t pirate. I think that most people would just not play the game, but that’s just my hunch.

Still, you can’t say “theft” and mean “software piracy”. Yes, software piracy is serious. Yes, it can mean that a developer might make less revenue. I do not deny that it can have very real effects. But let’s call it what it is and stop trying to manipulate people. We’re grown ups now. We can handle the truth. Software piracy is copyright infringement, but it is not theft.

Categories
Personal Development

Principles of Success

Anthony Salter writes about success.

He basically found what I found: that most productivity and success gurus all know the same things. Clearly there are some basic principles to success.

Essentially success can only come to those who have a specific goal. After all, how can you succeed when you don’t know what success looks like? The next step is to make a definite plan for achieving that goal. Definitely planned work saves a lot of time and effort. Finally, take action on that plan. It really is that simple, and yet most people aren’t taught this procedure.

Salter notes that self-discipline is necessary and rare for success, but he finds that the same authors and speakers that talk about success don’t seem to say much about motivation except to have faith in God. That’s fine, but what if you don’t believe in God? Obviously atheists have had success, so what gives?

I haven’t read the same authors that he has. For motivation, Steve Chandler’s “100 Ways to Motivate Yourself” audiobook is the only productivity audiobook I have currently. Listening to it always makes me feel motivated. It even helps me feel motivated if all I do is have it on while I am driving and not paying attention to it. I think the reason is that I am feeding my mind positive thoughts. Anyway, one of the coolest things Chandler mentions is “knowing that you are enough”. No one is coming. It may sound lonely, but it is really quite empowering to realize that you are all you need. I believe in God, but I am a firm believer in Benjamin Franklin’s assertion that “God helps those who help themselves.” Rather than abdicate responsibility for your life, you should embrace it.

Will power gets you started. Self-discipline keeps you going. Motivation reminds you why you’re doing it in the first place. And all of these things will be most effective when you define success, make a plan to achieve success, and have something to start in the first place.

Categories
Geek / Technical

Good Programmers Are Lazy And Dumb?

I think Why Good Programmers Are Lazy and Dumb will find its opponents the same way that Seth Godin’s “All Marketers Are Liars” book did. The article doesn’t actually mean “lazy” and “dumb” in a derogatory way. Lazy means efficient. Make good tools to help you develop even if it means that your programming skill won’t be required anymore. Dumb means smart. Don’t accept assumptions when you troubleshoot a bug.

I personally don’t think it is correct to use the derogatory terms, however. It’s not like “failure means success for body builders”. Calling myself dumb and lazy, even if I know the real meanings behind them, isn’t very motivating. Still, it is good to identify assumptions you may erroneously have. It is also good to find the most efficient way to handle a task.

Categories
General

It’s, Uh, Blog Day

According to Gaping Void, it’s Blog Day today.
From the apparently official site:

BlogDay was created with the belief that bloggers should have one day dedicated to getting to know other bloggers from other countries and areas of interest. On that day Bloggers will recommend other blogs to their blog visitors.

With the goal in mind, on this day every blogger will post a recommendation of 5 new blogs. In this way, all Blog web surfers will find themselves leaping around and discovering new, previously unknown blogs.

Ok, cool. I’ll give it a go. I’ll head on over to Technorati, click on Blogday since apparently everyone is talking about it, and see what blogs I find there.

1. Lironbot is a graphic artist from Israel and, as it turns out, runs Linux.
2. Life Beyond Code is Rajesh Setty’s blog. He is an entrepreneur and published author.

Ok, I know the point was to find different cultures and areas of interest. So I’ll try a different tag. Um…poetry. I don’t read a lot of it, so that has to be different enough.

3. sweeti’s space had an interesting poem comparing friends to computers.
4. ….

Ok, I couldn’t find too many for Poetry that I liked. WAY too much teen angst. How about philosophy?

4. The Master Smiled is sort of like Gaping Void except instead of business card drawings there are cartoons to accompany each post. Reminds me of the stories of Master Foo from Rootless Root.
5. …

Ok, philosophy gets pretty heavy. Politics? I’m still burned out from 2004. Sports? Meh. Sex? Too risky to check while I am at work.

5. Paperback Writer is actually pretty cool. The blogger is a published author and writes about writing. Pretty cool.

Interestingly, this conscious search for new blogs alerted me to some problems. Way too many blogs are subtitled along the lines of “Joe’s Interesting Thoughts” or “Sue’s Views on Things”. Wow, is that vague or what? Mine at least mentions that I am an indie game developer. Of course, if you don’t have a focus for your blog, that’s fine, but there should be something, right? Another issue is that some blog layouts are really, really hard to read. People have told me that my blog needs to update it’s look, and I agree, but I think it is at least functional. Some blog layouts get in the way.

Also, there is way too much teen angst poetry.

Categories
Game Design

Less is More

Roads Gone Wild is an article about making roads safer by removing traffic signals and signs. I found it through Brian Marick’s agile development blog.

Roads have historically been built with the assumption that cars and pedestrians don’t mix. Seems like a sound assumption, right? No one really questioned it. Road signs were used to enforce driving patterns. For example, blinking red lights and stop signs require drivers to stop at an intersection. Also, streets and people were segregated, and so people felt safer walking in certain areas but not in others.

Traffic congestion is the result, but it was assumed that wider roads would alleviate the problem. Studies are showing that this is not the case and will only make matters worse.

There is a new trend to reduce the number of signs on roads. Instead of placing stop signs at intersections, an island can be placed in the center, and the drivers can navigate around it safely. I presume it is because drivers are much more engaged and don’t just space out while driving through. Whatever the case is, the big idea is that the physical features of the street, the architecture, can dictate traffic much better than traffic signals can.

The bonus side effect is that pedestrians and cyclists feel safer near major roadways. Businesses get attracted to these new markets, and now you have transportation mixed with local development. Previously, transportation and storefronts didn’t mix so it required a lot more space and therefore money.

So basically, good architecture influences behavior better than arbitrary rules. The requirement of a road sign can be an admission of the road designer’s failure to make a better road. Stop signs shouldn’t be necessary because a road can be architected to require people to stop in the first place.

It’s a cool idea, and I wonder how it applies to games. I’ve seen games that present a level layout that requires the use of a special item. For instance, in Super Mario World one of the first levels that allows you to collect the feather to give Mario the ability to fly also has a coin bonus area that requires you to fly to collect the coins. There doesn’t need to be a sign or clue. Players see a feather, see a ramp next to the incredibly tall pipe, and figure out that they need to run up the pipe and start flying to collect the coins. Similarly, in Wind Waker, when you get the leaf, it gives you the ability to blast a puff of air. When you see the rotating fans in a dungeon’s room, you know you can use the leaf here. There is no need for a sign or message to let you know what to do.

I think that most games do a good job of making level layouts intuitive, but I know that some games have placed markers or signs to guide the player. In reality, they probably weren’t necessary if the level was designed better. Obviously some markers are necessary for immersion, such as wooden signposts in a fantasy RPG. Others are used as optional tutorials, such as the signs in Super Mario 64. But some might be used to make up for deficiencies in the game itself.

If anything, it should give a game designer some pause if he/she realizes that a marker is getting added to compensate for a bad design. Provide hints to the gamer instead of rules. Cracks in a wall indicate a possible cave to explore. A player should be able to place a bomb or smash through. On the other hand, if the game requires the player to set some “I-know-about-the-hidden-cave” variable before a bomb will be effective or the cracks in the wall visible, that’s just bad and arbitrary.

Categories
Games Geek / Technical

Casual Games Article in The Escapist

Casual Fortunes: Getting Rich Slowly With Casual Games talks about casual games and mentions Steve Pavlina’s Dexterity Software, Thomas Warfield, and David Dobson among other developers. It even mentions the Indie Gamer Forums and Game Tunnel!

Categories
Geek / Technical Politics/Government

MS Vista Anti-Piracy: Wow, What B.S.

Well, here’s MS Vista’s anti-customer restrictions explained.

So apparently if you buy a DVD, and Vista doesn’t like your HD-television (read: you didn’t buy a newer one), it will decide you don’t get to make use of high definition quality video. I already knew I didn’t like the digital restrictions management that Windows Media Player made use of. Now Hollywood and Microsoft get to dictate whether or not you can make full use of your paid-for television and movies. It would be like Windows detecting that a server you are connecting to is not using Microsoft software and so throttling your bandwidth to make the connection arbitrarily slower. Or like Microsoft’s IIS sending non-IE web browsers different, outdated HTTP headers.

I have a friend who couldn’t play a DVD from his computer through the VCR that he had hooked up to his television. He wasn’t copying anything, but he basically had all video and audio going through the VCR to the television, and the DVD player apparently detected the VCR and prevented the video from transmitting. In order to play the DVD, he had to disconnect his VCR and connect his computer to the television directly. It is a complete hassle for the customer that doesn’t do anything to prevent copyright violation. Anyone can still take a DVD and make a pristine copy without the need to break the copy protection, so what was the point of it?

And now Vista will be enforcing customer restrictions in a similar way. Lovely.