Saturday, December 12, 2009

Planning for 2010

Going into 2010 I've decided to do more planning. The number one thing I've learned in my professional career in the last three years is proper planning goes a long way. You just can't bring anything of size or merit together without a full idea of what your doing. I like to sum it up with the statement that you have to know what complete means for your project. You should also be clear about what the costs and benefits are. It's alright if the only benefit is fun!

This year I have made more progress than ever in some areas, and the consistant 'nothing' in others. I do have my subversion repository pretty well populated, and I have my personal wiki up (Confluence). What I don't have is anything really completed. This is a theme I have visited before. It lowers my value to employers that a lot of my personal projects have never received that final layer of polish. I'm very good at the planning, problem solving, execution and emergencies. But when it comes to putting the final details in place, I always seem to have wandered over to the next project already.

So moving forward, I want to set more clear goals for 2010. They need to be goals that can be broken down into smaller tasks that I can complete. So in an effort to be ready to go to GDC 2011 with a wonderful resume; I need 2010 to really count.

I'm getting married in August, with a long honeymoon. This will eat up a lot of the year, but we have also handled a lot of the planning already. We're way ahead. If I can stay ahead of my responsibilities, than I can have time for this. This is my passion and I finally feel I can throw myself at it. My debt is paid off and I have a great job (with a lot of offers for other jobs).

I just need a clear plan and realistic goals. I know for sure that I will be featuring more of my project work here. I want to make some posts and share some of what I'm doing. Be a little more relevant instead of just using this as a private notebook. This post will be followed not with my plan, but with my first post following that plan. The plan will go on my Wiki.

Monday, October 19, 2009

BlockBreaker Revisited

I've been working on "BlockBreaker" again, and having considerably troubles. I haven't been able to clear up the blurry/choppy movement of the ball. Further, even after spending a whole day on collisions detection, it still isn't where I want it to be. After some considerable improvements to it, I am now to the point where I'm looping through all of the objects and testing them for collision with the ball. This obviously isn't correct. I will have to learn how to find the nearest block and only test that one. So there is more learning to do.

Besides the problems, the game is working very well. Collision works great when the ball does not strike more than one block at the same time. I can't simply calculate 'first hit', because the first hit may not be the closest.

I want to clear up the problems, but I'm also happy with the progress. The game needs sound and a graphical tweaking. The only real engine coding left to do is high score and the transition between levels.

I've actually considered designing an rpg style breakout game, similar to Puzzle Quest. Breakout does not need to consist only of hitting a ball with a paddle.

Tonight for my coding time, I'm going to look into finding the nearest block, and then into smoothing the ball animation. Maybe I'm still timing everything wrong.

Monday, October 12, 2009

Work on Break Out

This weekend I pulled a version of Break Out I started in 2001 off of a really old backup CD and checked it into my subversion repository.

I learned quite a bit by reviewing the source code. Most importantly was that there wasn't much code at all. This was a single Java file along with a matching HTML to show the applet. This was important for a number of reasons; the first being that it did not seem to contain as much effort as I remember. Reading the code I realized that it probably was only a few hours work, if that much. The size of the code struck home to me that I did not put as much effort into these early projects as I had thought. I seemed to have given it a bit of a try, and then moved on.

The source code for this old breakout, did not user any kind of timer, it simply ran and painted as many times as the main loop could run; it was timed by the Thread.sleep(x) method. Input was also handled by a direct input method; pressing the right arrow button moved the paddle to the right by it's acceleration. Further the constants for the states were defined, but there were no states. I couldn't help but wonder if this wasn't the latest version of this source code, since I did not have a repository back then.

I decided that this was one of those projects that should be completed. At first I simply cleaned it up a bit and it became a fun little game. Of course, this reached a point where I had simply made 1,000 lines of horrible source into 400 lines of alright source, that simply played the same half-game. From there I added my KeyWatcher, MouseWatcher and Timer classes to the mix; introducing a real game loop, better input and locking into 60 fps. I know based on my recent reading that this still isn't the optimal way to handle frames, but it's block breaker and it will never be heavy on the cpu, etc.

I stopped there and got it checked into subversion, then made a page for it on my private wiki. After writing out a bit of a design, I returned to the code and tore out all of the game objects. Although component (aggregate) based game objects are all the rage, I went with a simple hierarchy involving a base class and an extension for each of the types I would need. Proper state was added, and not based on constants.

I spent the rest of the weekend working on collision detection and resolution. I have never really tackled this problem; I've always tried to do a simple approximation of things bouncing and it has never worked. There was a considerable amount of contemplation on the effect of this on other projects. How many projects had failed or been abandoned because I couldn't get this part right?

This weekend I forced myself to sit and do the reading, review the math, and correctly bounce the ball off the walls, bricks and paddle. With this done I was very proud and felt like I was finally approaching projects correctly. I still need to go back and group bricks (two bricks next to each other shouldn't run a separate collision), as well as add a coefficient of friction to the paddle.

The game needs graphics, sounds, actual stages (it just has one) and some fine tuning, but it is hardly the toy script I recovered from the CD.

It's good to be picking up old projects and finishing them.

Monday, September 7, 2009

More progress?

Even without a real workstation, I continue to make progress. I have gotten my wiki setup on the server. I used the copy of Atlassian Confluence I purchased during there donation week. $5 is a deal for a five user license.

I have also started using Calibre and reorganizing my books. I refreshed my book repository on my prs-505 to be smaller and more targeted.

My workouts are improving too, and I plan to see the trainer this week. I need to get protein first thing in the morning. I need to completely improve my diet. 

I am getting anxious about paying off my credit cards. I will suddenly have money to tool with. I'm thinking a boe bot is a good start, but I'm not sure.

Last night I ordered the ram for my 900a and my sling pack. Everything should come together if I can find a suitable iPod or pmp.

For now, it's the holiday and I'm chilling out on the porch. A completed project, btw.


Saturday, September 5, 2009

Organizing?

Interests:

  1. Robotics
  2. Programming
  3. Games
  4. AI
  5. Speech control
  6. Home automation
  7. Cars
  8. Fitness workouts, etc

Fitness is the only really active one, with regular visits to the gym.

Projects do not need to be profitable, but it would of course be nice. It's always been a good motivator for me. Getting to work with others is pretty important.

Work on ai through involving it with the other projects, the same with programming. Cars is the expensive project and requires planning, probably prettyy stale until we get a house. So it comes down to speech control, home automation, games and robotics. I need short and long term goals in each. Possibly multiple projects in each category? Home automation is also hard to really have fun with until we own a home.

Think I will start with some chores and more preparation on the travel kit. Going to hit the bank, check my finances and search for my messenger bag. Thinking I need a new duffel as well.

Will continue this when I get back.

Monday, August 31, 2009

Test post to my blog, from g1

Plans?

I've been doing some more thinking and there are some things I would like to do.

What I realize is that the goal cannot be to complete the project, the project has to be part of some goal. I don't have that goal, and I need it/them. 

When I figure that out, I'll be able to move forward.

I am thinking I have things I still want to do, mud wise; and I'd like to join the spring rts project. I've also been considering a web based rts. something small, but that would be fun and quick. It would show off my abilities, and look great on my resume. i It would  also be very personally rewarding.

I have to do further thinking about this.


Saturday, August 29, 2009

Lost Opportunities

This is a personal post.

I started Animud back in 1995, it's 2009. Over that time I worked on many games and projects (I've made a list), most of which never saw 50% completion. I look back and know that I was always trying to get approval and positive feed back from others.

The mud gave me an audience, a group of friends, and I spent considerable time trying to create things to impress them. I took them for granted, the same way I was taking my real life relationships for granted.

With them gone, I haven't had much direction. The mud being empty has left me pretty empty. With nobody to impress, I don't have the drive to create anything. I'm lost, looking for something to be passionate about. I haven't been coding outside of work, and I haven't brought myself to complete any other projects.

I feel a need inside for short term gratification, because I spent prototyping games, showing off the prototype, and moving on. In addition, I know that I don't enjoy working on things alone - without Scott working with me, I lack drive and commitment. 

Video games have been out of the picture - I find no desire to play them, create them or be involved in them. My attempts to play WoW, Warhammer and Starcraft result in little to no success. Although it is good not to become addicted to these things, I am unable to commit to them to the point of getting to enjoy them. I can't keep myself on any one thing for any length of time.

I feel empty because of all of this, and I spent whole days sitting around doing nothing or watching videos/browsing the web.

What do I do with myself? How do I fill this hole? Is there something out there for me?

Friday, August 28, 2009

My Computer Has Died.

I bought a Asus EEE Pc 900a, and finally got Ubuntu running on it. Just before I did, my normal computer died (cpu/mobo).

I don't know when I'll be able to afford a replacement. Until then I'm kind of in a decision and planning phase (well, still am). During which I'm trying to build a set of equipment (eee pc, prs-505, T-Mobile G1, iPod and sling bag). I still need to aquire the bg and the iPod ($ problem).

Wednesday, August 12, 2009

I have finished jsBreakout.

I have finished jsBreakout, a simple breakout clone written in javascript/jquery. You can play it here, and I didn't obfuscate the source at all. I also posted it to reddit.

It doesn't work in IE 6, but that doesn't really bother me.

I'm happy to have finished a project, and a game - as small as it is.

Sunday, July 12, 2009

I did not write this, I took it from a comment on Reddit.

Make yourself do it every day (with occasional days off; sometimes you have to let your brain chemistry balance itself out), have several projects to switch between when you get burned out, and don't program when you should be sleeping.


That's the easy stuff. Here's the real secret:

You know that feeling when your brain hurts because something is "too hard to implement" and/or there's "too much drudgery" to get through? Overcoming that is probably the most important part of becoming a strong programmer.

Many martial arts involve a kind of conditioning which basically involves getting the crap kicked out of you, generally known as "iron body". This is partially for pain tolerance, but the name "iron body" is apt, because it also causes small chips and fractures in the bones, which heal to make the bones stronger and denser.

It is a simple fact with programming that at one point or another, most problems worth solving will hurt your head to think about. It may be the expanse of implementation details you can imagine stretching to the horizon, the abstractness of the problem, the difficulty of wrapping your mind around a particular equation, etc.

You have a choice: reject this idea, and waste a lot of time trying to find the perfect project which will be all fun all the time. You will become frustrated as you give up on every project you start. Or you can accept this simple fact and train yourself to have "iron mind":


  1. Tolerate a little mind pain and work through it. It will be unpleasant, but you should get over it pretty quickly. You can do fun/easy parts too, but try to get an hour or two of unpleasantness in every day.


  2. GOTO 1.


Two main things will happen. The first is that you will learn to deal with mental strain so that it doesn't bother you so much. The second is that you will learn how to divide up and fit problems into your mind so that they don't hurt to think about. The latter part is, I think, really key, because it is not merely a coping mechanism, but a problem solving skill. As time goes on, the definition of "unpleasant" will change; so long as you keep making yourself work through whatever "unpleasant" means, you will keep growing.

At least, this is how it has been for me.

Also: caffeine. Oh, and water. Caffeine without enough water will just make you feel shitty. If you drink tea, you're guaranteed to get enough water. Stay away from caffeine pills.

SDL on Windows.

So I got SDL setup with codeblocks on Windows. It only took a few minutes, and I begin reworking through the sdl tutorials I was working through under Ubuntu. For a small project I can try to get something that can be checked out of SVN and built under Windows and Ubuntu.

With all my work on automating builds, I wonder how you go about automating a dual O/S build. How are tests handled? I would think you would have a main-line build machine (or virtual) for each O/S you plan to distribute for. I may investigate this further at a later time.

Ogre 3D and Code::Blocks

I installed code::blocks on Windows allong with Mingw. I then installed Ogre 3d sdk and tried to get the examples to compile. I'm getting a strange include error that I haven't been able to find any information on. I'm stopping with Ogre for now. I am interested in updating my ubuntu install of code::blocks to the latest release now.

I'm going to try and get some SDL examples compiling on windows & ubuntu. I've been reading "Physics for Game Programmers" and working through things. I haven't been making much time for this though. Neither have I been able to play games much. 

I will report back my luck with SDL and the Physics progress.

Saturday, May 9, 2009

Looking at Project Planet 2

I was kind of excited about looking at the source code for project Planet 2, but it doesn't seem to be available. I registered for the forums in hope that there would be a member only section with some kind of clue, but I found nothing. Maybe I'm missing something.

I found the source, it was linked via a post in their forum. It uses boost, and I'm not in the mood nor do I have time to set that up for right now. So Project Planet 2 is going to go on the back burner, at least I found the source.

Monday, May 4, 2009

Monday night coding

Work on jsBreakout! continues, updated some collision detection, handling losing a life. Still six things to go on the todo list before I'm considering it complete. The collision detection and physics will never be perfect, it just isn't a big enough project. If I do a breakout in SDL then I'll definately have to do something more thorough.

Sunday, May 3, 2009

More game research

So I worked through more of the SDL tutorials, and I've been working on a breakout game in Javascript. It started out as a bit of a tech demo and then just grew from there. I figure it is a good small project that I can actually 'complete'.

Today I've been researching games for linux. Usually ones written in openGL or Java and meant to run everywhere. I've played a few like Warzone 2100 that can be directly installed on Ubuntu. Most I've tried don't run correctly out of the box - which doesn't speak well for the state of linux on the desktop.

This week was another one of those weeks where I did a lot of thinking about my participation in Math and Physics in college. I should have taken both more seriously. I'm going to have to relearn a lot of math and physics, or at least hone up. I was pretty good at math, it was the physics that killed me, and I'll try not to blame the teacher here.

I want to study more source code than just Bomberclone, so I'm trying to pick a few projects and then really work through their source. My top choices are currently Atlassian's JIRA (not a game), the original Sim City (GPL'ed!) and I'm looking at Billiards (http://www.nongnu.org/billiards/) and possibly Project Planet2 (http://planet2.weirdfox.com/pages.php). Feel free to leave a comment if you have a suggestion.

My work on the MUD has come to a complete halt, it's hard to care about. I really wanted people to work with me on it but I'm obviously alone. I really want to work with others. In regards to that, I've begun to start looking at projects to possibly join; and I'd love to find locals with interest.

I've gotten my hands on 'Physics for Game Programmers' and want to begin working through the chapters, possibly making SDL or Java examples as I go.

My current top priority is the Breakout game in Javascript/JQuery. That and finding a community to join, hopefully with a local element.

Sunday, February 15, 2009

Weekend Warrior Log #2

I've been reading the documentation for SDL after looking through Bomberclone's source code. I then began to work on some tutorials found at: http://lazyfoo.net/SDL_tutorials/index.php

I've done the first two and I'm working on the third. I want to get through the first five today; maybe more. At some point, I should look into compiling the examples on windows.

I've put the examples into my projects/sdl/sdl# directory structure.

What I've learned is that I've been avoiding this for too many years. I don't know if it was fear or success or what. I know part of it is my hate for Windows and the way the industry is so owned by Windows (and doesn't seem to mind!) I will
have to see where this takes me. I'm having a lot of fun.

After a long day of Warhammer and some additional chores I'm back and hoping to get at least tutorials 3, 4 and 5 done.
The third is a simple lib include tutorial, it causes me to look at make alternatives because I know that soon I'll want to start scripting the builds.
I found this article: http://freshmeat.net/articles/view/1715/

I've read through lesson 6, I'm going to go a bit further just reading without compiling examples anymore. Each lesson has shown such a small new idea that I'll wait until there is a more complicated example. Having gotten as far as making tetris and pac-man in Java; I understand the concepts going on. SDL seems really nice though!

Saturday, February 14, 2009

Weekend Warrior Log #1

I pulled bomberclone out of cvs. It doesn't configure correctly and I think it may be because of a missing SDL library on my ubuntu box.
I had to install all libsdl*-dev packages.
Bomberclone built and compiled just fine; I'm going to study the source code a bit and see if I can add some new stuff.
It's written in C with SDL (obviously), and it's a bit hard to follow. It's done very old school MUD style with everything just in a struct and kind of built without an overarching design. I kind of like it even though I can't follow it well. I'll have to spend more time with it.