Twin Cities Code Camp 7

October 24th is the date for the next Twin Cities Code Camp and registration is open.  TCCC is an awesome, free event that everyone that can make it should attend!

For those who don't know, the code camp is a free event held on a Saturday that focuses on many aspects of programming (definitely not only Windows stuff!).  The day is packed with multiple rooms all featuring presentations by great developers so you're bound to learn something.

After every TCCC I'm always pumped to look into something I just learned that day and it's always something new and useful. 

Go register at the site and if you're interested in speaking there are details there as well.  The TCCC site is TwinCitiesCodeCamp.com

Twin Cites Code Camp

Geekdom Strategy Comparison

Last night a few buddies and I geeked out by sitting around for 5 hours and playing the strategy board-game Descent.  It was my first time playing and although we lost, I feel I got a decent 'welcome' into Descent.  And, other than Dungeons & Dragons, was the first strategy game I've ever played (yes, I have never played Risk).

While I understand the appeal of the game, I didn't enjoy it as much as I do when I play D&D.  Though, it's really apples and oranges considering in Descent I was a Hero and in D&D I am typically the DM.  Our play session seemed unnaturally slow for a game.  Each player spent loads of time saying "I could do this, or should I do this?"  That's great you're thinking up a strategy, but what were you doing when it wasn't your turn?  This could be the players I was with, but they had a pretty good understanding of the core system and were still taking hours of time debating the proper way to go down a hall.

The last few D&D sessions I hosted we played with miniatures but no play mats or visible indicators of walls, simply obstacles, enemies, and players.  We still had a great deal of strategy involved regarding placement of characters and such and the game wasn't slowed to a halt by long spurts of indecision.

In comparison, either one of two things generally happened.  Either I overly deluded the strategy in D&D by removing most (not all) walls (the players were outside for the most part), or the Descent guys were over-strategizing (or I suppose regular strategizing).  To me, the game of D&D where strategy was involved but the game kept moving along is a preferred situation compared to a game that stalls on possibilities.

Although, maybe I'm just a strategy noob with 'strategy ADD'.

Project Turf

Awhile back, after the release of Pong I started work on a new engine to fix all the issues I didn't like with Pong.  Every sprite in Pong was hard coded and was unbearably large because of that (some sprites had 20+ lines dedicated to them just to place and check for user input).  I started work on an engine I called 'Turf' because I had no idea what kind of game I wanted to make at the time so I developed simple parts of it such as rendering and saved it until I had some time to fully develop it.  I started creating a simple 2D sidescroller in it but never got very far due to the demands of school.

Now that school is over, I needed something to work on instead of waste time playing games all night after coming home from my day job.  I've created a team of 10 people working on different aspects of a new platformer for Xbox 360.  The engine itself still needs work, but I'm extremely impressed with the amount of work coming out of our team.  We've been fully together about a week now and so far we've got the basic story planned, partial game design written, the portion of the engine I've developed, a piece of audio to listen to, and a fancy new dynamic menu editor to generate in game menus.

I'll create a simple blog later tonight as our 'PR' page and link it from here.  Until our artist gets cracking though, it's going to be text updates.

One Week Healthy

It's been one week since I've started really focusing on what I've been eating and my lifestyle.  My interest was piqued two weeks ago when the health center part of the company I work at mentioned a summer 'Healthy Lifestyle' program where you would follow a table of things to do every day for a month (with 3 calendars for 3 months) and get points for each item you do on the list each day, at the end the most points would win prizes.  The items on this calendar range from getting 30 minutes of exercize MWF (walking, playing with your kids, etc...), eating 3 servings of fruit on Tuesday, eating 3 servings of veggies on Thurs, eating a serving of dark chocolate later in the month, and even drinking a small glass of wine!

Now I know I have a bad habit of starting a healthy choice lifestyle and quitting a week or two in after seeing no results so I decided I'd do the lifestyle calendar but wouldn't sign up for the contest to win stuff because I want to prove to myself I can do it, not that I'm doing it for a prize.  After all, you need to work on becoming healthy for yourself and not someone else.

So far I've followed the calendar every day by eating lots of fruits and vegetables and walking 3 days a week.  Since one of my major goals has been to lose weight, I knew I had to change something in my diet.  I started eating a salad with every meal and sometimes as the main meal (most lunches are now a salad variant).  But it's not only about salads, it's about portion control (I know, everyone says that right?!).  I've stopped taking seconds and when I load up with something like veggies I think in my head 'How much is that? Do I have too much?'.  This way I can load up my plate to a point, clean the whole plate, and without second portions I'm not getting way too many calories.

For example, last night we had a dinner of BBQ'd grilled chicken legs, asparagus, and sliced french bread.  While preparing it I told my dad I wanted no BBQ sauce on the chicken which ended up getting a slight coat of sauce but after that he didn't BBQ it again when he did the others.  I was already preventing unneccesary calories before I even was at the table!  When it was chow time I grabbed 2 chicken legs, a single slice of bread, and a big helping of asparagus (which was cooked with olive oil and sesame seeds, not butter!).  I broke down a bit and after finished my plate grabbed one more chicken leg (which I attempted taking the skin off) and another helping of asparagus but no bread!  We've had this meal times and times before and I used to have eaten something in the range of 5-6 fully BBQ'd legs, a similar pile of asparagus, and 3-4 pieces of bread.

They say having people in your home who help you achieve your goals makes you more likely to succeed.  Yes, the impact of my eating has hit my family who have also been eating much better (not having potatoes at EVERY meal!).  While this is helpful, there are going to be times when peer pressure hits you, or those support systems aren't very supportive.  As a prime example, last Friday (when I first started eating healthy) we went out for a fish fry.  The waitress walked up to me and said "What would you like?"  I replied, "The normal sized baked fish with cottage cheese, and could I get just cottage cheese on the side?"  She said, "Sure, what do you want for potatoe?"  I hadn't said it correctly, "No, I don't want any potatoes, just cottage cheese and fish and maybe a slice of bread."  She just stared at me blankly as if I had just came from another planet.  After another few explanations of 'no potatoes', she replied "Well I'll see if they can do that".  How would that be hard for the kitchen staff?  Make the fish, and a side of cottage cheese, and put them on the same plate.  Through this interaction with the waitress my mom said, "Just get a baked potatoe!"  My support system had crumbled and I needed to stay strong.  As the waitress walked away my aunt looks at my mom and says, "What did he want?"  My mom looks back and says, "Oh he didn't want any potatoes because he's on a diet" (The end was said very annoyingly)  My aunt just laughed and rolled her eyes.  Great support system, eh?

Another example, Monday was a diet killer night.  Italian sausage sandwiches.  If you don't know how my mom makes them, you don't know a great pile of calories.  French bread sliced open and toasted with a large italian sausage patty covered in pizza sauce, and piled with melted cheese.  (I'm getting hungry thinking about it!)  Unbeknownst to me, most of the calories came from the sausage patty but I still tried to prevent unneccesary calories before eating.  I asked for much less cheese and the addition of cooked bell peppers on top.  Not only was the sandwich delicious, I saved myself from going over my daily calorie limit (see next paragraph).  The sandwich I had that night was a smaller 'half'.  My mom makes 4 halves, and I used to easily eat 2 halves.  I finished the 1 half and that was that!

My iPhone is a saint in achieving my goals.  I downloaded a free app called 'Lose It!', a calorie counting software which had me input my current state and my goal and tells me when I'll reach that goal and gives me a daily calorie total.  Now I've tried calorie counting websites before and they're not bad, but how often are you within reach of a computer while you're eating (granted adding my food to my phone during dinner isn't great table manners)?  So far I've kept under my daily value each day which is 2,525 for losing 1 pound a week at my current size.

Another note that everyone mentions is liquid calories.  In the last week I've had nothing but water and a few cups of juice or low-calorie beverage.  Not bad considering when I started at work (3 weeks ago) I was starting a cycle of almost 2 soda's a day (sometimes diet, sometimes regular).  In theory, I'm saving approximately 290 calories per bottle (that's of Mountain Dew) of regular soda, which in certain days would put me over my daily limit (remember italian sausage night?).  Lets say I craved Mountain Dew one week and had 2-20 oz bottles each day at work (5 work days).  That's 2900 calories in a week, which is about 2 bottles away from a full pound of body weight.

There's much more I could go into about liquid calories, but you're smart and can use Google to find out the benefits of water over other drinks.  So how much did I lose so far?  Well the scales have fluctuated (as they should) but I weigh myself every morning when I wake up, and this morning I was 232 lbs (weight loss of 3).  Now this could be a fluctuation since it's not very large, but I've weighed myself every morning for the whole week and not once have I been over my starting weight (morning after pasta night I had rocketed back up to 235, that was YESTERDAY morning, I've dropped down 3 lbs since yesterday!?  Pasta threw a wrench in my morning weigh-in).  So there's a definite loss happening, and I can almost feel my body becoming tighter (it's only possible to get a double chin if I cram my chin against my chest).  More importantly, I've felt better!

What have I learned?  Strict.  You need to be strict with yourself.  While at college I would go to the gym twice a week, eat almost more every day, and then would go get chinese buffet on Saturday as my 'non-diet' food to celebrate my gym-going.  How does that even make sense?!  It's about being able to pick and choose between a new lifestyle and an old lifestyle and sticking to your choices.

XNA Game Studio 3.1 Released!

XNA 3.1 has been released bringing Avatar support and many other features.  Check it out:

http://creators.xna.com/en-us/news/xnagamestudio3.1

Also of large note, with that release Microsoft is changing Xbox Community Games to Xbox Indie Games.

I'm not a fan of the name change.

New Keyboard

I decided last night that after 5 years of the same keyboard it was time for a new one.  I purchased Microsoft's Natural Ergonomic 4000 (yes, my keyboard has a 4000 on it's name, like 'SuperJuicer 9000').  The keyboard is very nice and has some nice features but the biggest problem is two-fold.  1) I've never used an ergonomic board before.  2) I taught myself to type (rather incorrectly at that) so now that my keyboard has a giant split in it, I need to learn to type properly.  I'm training myself at work on a standard board, but it's going to take awhile to get used to.  Currently it's torture trying to type like this, this post took me the better part of 20 minutes to type!

E3 Press Conference Impressions

E3 was promised to be back and big again this year and it sure seemed to be with Microsoft leading the press conferences on Monday.  Microsoft's main focus was on 3 items, new games, a new peripheral, and new Xbox updates.  Typically these are always the things they focus on though usually when they get to one section or another the audience groans in boredom (for example, when they drone on about Scene It! and other goofy family games no one watching will typically care about), but this year MS came out strong on all fronts.  Games announced included Beatles Rock Band, Crackdown 2, Halo Reach, Left 4 Dead 2, and others.  Gameplay previews included Call of Duty: Modern Warfare 2, Splinter Cell: Conviction, and Halo 3: ODST.  The new peripheral was possibly the biggest talk of the meet, developed as "Natal" (pronounced na-taal), the peripheral is a large-ish camera and microphone that sits under or on your TV (similar to the Wii motion bar).  Natal also features voice and facial recognition software to know who is playing and automatically sign them into their correct account.  Also mentioned along with Natal was a new Metal Gear Solid game using Natal developed by Hideo Kojima himself.  Finally, Microsoft talked about many new Xbox updates including features able to link your Xbox with your Facebook and display what games you're playing, update your Twitter status from your Xbox, and free use of the last.fm music service.  Also mentioned was the ability to use a credit card and play full Xbox 360 games from the marketplace.

Apparently, the 'bigger, better' show applied to MS but not to Nintendo, whose conference was less than spectacular.  Highlights of the meeting include new games and one new peripheral.  Nintendo announced a slew of new games but the biggest announcements were Super Mario Galaxy 2 and a new Metroid game developed by Team Ninja.  There seemed to be a heavy focus on bring Mario back, with 2-3 other new Mario based games.  They also talked about the 'hardcore gamers' by bringing a Dead Space game, a new Resident Evil, and leading to the Metroid game.  Also of interest, several DSi games featured user-creatable content and distribution methods in 2 games.  Finally, the peripheral, which is extremely poorly understood or just not that useful.  Called 'Vitality', it is a finger scanner you attach to the Wii-mote to read your heartbeat and tell you if you're stressed, excited, or a variety of other feelings.  Sounds like a gimmick...

Finally Sony finished up the 3-core conference meets with one LONG event.  They focused a lot on games including demos of God of War 3, a user-creation based kart racer, MAG, and Uncharted 2.  Also shown were Gran Turismo for PSP, Gran Turismo 5, The Last Guardian (known online as Trico), a new Metal Gear Solid for PSP, a PS3-exclusive game by Rockstar North called Agent, Final Fantasy 13, AND Final Fantasy 14 Online!  Also announced was the PSP Go, a slimmer PSP without all the trimmings for the 'techie on the go'.  Sony is trying to compete in the motion wars by showing a controller that works with the PS Eye to produce 1:1 movement in games, which they showed LOADS of small tech demos featuring the technology.

How To Not Get Programmers

I recently went back to one of the online development forums I had talked within a bunch awhile back and had a greeting of 10 new messages of people asking for me to join their project (I had requested a project there awhile back).  Here's one message in particular that got my attention:

"hey well im lead programmer ATM, i must say I started learning C++ 3 weeks ago. I know this sounds stupid making a game while you dont know about templates and stuff. But i feel like i known C++ for a year. I can send you a sample of my work. We are using a Premade engine, so your DX skills will be no use, but you could write openGL shaders for our use. Our game is an FPS and I will supply you with more info if you'd like to join. Its for linux and mac providing we have a mac to test on. If you'd like to make a windows port, you are welcome but im not putting effort into making something specially for that shitty OS. Anyway going back to the features, we want to use V3 shaders, raytracing (believe it or not), depth of field (if i can manage picking), motion blur, volumetric fog and clouds (if they wont appear to be low), per pixel lighting and bla bla etc etc.

So are you interested??"

Let me help by mentioning some comments on your message.

First off, there is no immediate structure to the message making me instantly think "new guy" or "young kid".  Secondly, I can understand if you want me to join as a lead programmer, but to say you've only known it for 3 weeks but it feels like a year might be good that it 'feels' that way, but I guarantee you don't know how to effectively use what you've learned.  But, thankfully they're using a premade engine so my skills are useless.

Next, you mention the game is targetted towards Linux and Mac but you don't have a Mac to test on?  You then proceed to call Windows a shitty OS, which is absolutely not the case, especially in games where Windows has the majority of all PC games ever made (Mac and Linux have games but they're typically the bigger companies developing for all systems or sometimes ports).  Though it should be OK because I'm just writing the shaders and apparently someone who has programmed for 3 weeks will write the shader processing engine.

Sorry, I'm not interested.

Intro to Scrum Development

Recently I read a portion of a good book ('Agile Software Development with Scrum' by Ken Schwaber with Mike Beedle).  I read this book in order to understand the Agile/Scrum development style used at my new workplace.  I took a course last semester in which we used a Scrum development style based on the input given by a student who worked where I've just started and while we seemed to grasp the idea of Scrum, we had it often incorrect according to the book.  This is some of the basics of what I learned in the few chapters I read (no infringement intended!).  Everything is in my own words (I don't even have the book anymore).

What is Scrum?

Scrum, in the sense I'll be talking about, is a development style of the 'agile' type.  Agile development is a method of developing software iteratively, meaning you take your project, chop it up into pieces, and work on the pieces until the whole project is complete.

How does Scrum add onto Agile development?  Scrum has multiple user roles defined with it and a specific technique for processing those 'pieces' of your project.  Essentially, Scrum creates a bottleneck (in a good way!) between management and the development team in order to keep the development team focused on the current piece of work.  For understanding, let's use the idea that your whole project is the engine of your car (or some vehicle).  We'll build on this idea throughout this post.

Roles in Scrum Development

In Scrum development, the development team, is called the Scrum team or just team.  Pretty simple, huh?  The Scrum team is comprised of those in the workplace that focus on the development portion of the project.  These include (but aren't limited to) engineers and designers.  Anyone who will have to take an assignment and produce some kind of output directly effecting the project.  (Note: In my description, directly effecting the project means something like a concept drawing, a demo build, code, etc...  More on this in a bit.)  In Scrum development a team of about 5-8 is used though if the team is too large, it becomes difficult to manage.  If the team is too small, the work (which we'll talk about in a bit) probably won't be distributed or managed well enough between them.  In our car symbolism, think of the scrum team as the pistons of the engine.

The Product Owner or Project Owner is the person at the head of the project, typically a project lead.  The Project Owner should be a single person (not a team) for reasons we'll discuss later about work (suspense!).  This person will delegate the work to the rest of the team.  This introduces the idea of the Sprint Backlog.  The backlog is a large topic, so we'll come back to the Product Owner after discussing the workflow of Scrum development.

Scrum Development Work-Flow

Remember all those times you've been working on a project (in a non-Scrum team) and someone walks up to you and says, "Could you do me a favor and add this feature?"  You know in your mind that by accepting that person you'll be adding more to your workload and thus increasing your development time.  Depending on when you start that feature-add, it could potentially increase the development time of whatever you were working on before your 'friend' came over and disturbed you.  Not only does this make you less productive (being productive is a matter of quality, time taken, and other factors) but it could even lead you to the dreaded feature creep (something no project EVER wants!).

Scrum prevents this situation by creating a bottleneck (mentioned earlier) between you (the developer) and your feature-needing friend.  Again, this bottleneck isn't a bad thing, it's in place to make your life easier by making you more productive.  When a request for a feature is needed, the request is dropped into the Sprint Backlog, a list of all the features and work needed to be done before the project is finished.  This can include bugs, new features, or changes to currently existing features.  Before going on, what is this sprint thing? 

A Sprint is a period of time the Scrum Team takes to work on a chunk of items that were placed in that backlog.  Typically a Sprint is 30 days (about a month).  A month typically is a long enough time to do a good amount of development but short enough that if time is spent during that month on a feature that gets scrapped, the time isn't 'wasted' time (since it was still used on the project and knowledge is gained).  Notice I mentioned a 'chunk' of the backlog.  This ties back to the idea of working on pieces of your project.  So, the Sprint Backlog contains all the work needed to be done on the project and during each Sprint, the Scrum Team selects a portion of the backlog (NOT the whole backlog) to work on.  In our engine idea, the Sprint Backlog is the fuel tank, holding the future fuel to be processed.  Thinking at a higher-level, the Sprint is the time is takes to process a portion of that fuel.  And finally, the 'bottleneck' holding back the fuel is the fuel-injection valve.

Roles in Scrum Development (cont'd)

Each item placed in the Sprint Backlog will typically have a different priority than any other item in the backlog.  This is where the Project Owner comes back in.  One of their primary roles in Scrum development is managing the Sprint Backlog.  They should be labelling each item in the backlog as well as giving each a priority so the team knows when to work on each.  Prior to each Sprint, the Project Owner and Scrum Team will meet in a Sprint Planning Meeting to determine which work from the backlog will be worked on during that Sprint.  The Project Owner will say "I want this, this, and this done."  And the Team will reply, "Well we can finish this and this during the Sprint."  This defines the work that will be done in the future Sprint.  Isn't it cool that the Team decides what to work on, instead of management?!

There is one more large player in Scrum development even though the system seems complete.  The Scrum Master focuses on, well, keeping the team focused on the task at hand.  Recall earlier I described the situation in which you as a developer are approached to put in a quick feature as a favor.  From everything about Scrum that's been discussed, there is nothing to prevent that situation from happening once again.  Sure, we can hope that all work gets put through the Sprint Backlog, but how can we be certain?  This is the primary role of the Scrum Master.  He/She makes sure the team is on task and following the work for the current Sprint.  The Scrum Master accomplishes this tasks by typically having daily Scrums, a short 15-minute meeting where each person in the Scrum Team describes what they're working on.

To keep Scrums on topic, there are numerous things a Scrum Master will do to control the group including limiting the speaking participants to only those on the team (i.e. NO interrupting, suggesting non-teammates like management).  One of the biggest ways to keep topic in a Scrum meeting is to only answer 3 key questions:

  • What have you done since our last Scrum meeting?
  • What are you going to do before the next meeting?
  • What is preventing you from completing your plan?

Obviously, if your friend stops by, asks for that favor, and you start working on it, it'll come up in the meeting and the Scrum Master has the task of putting you back on the Sprint work and stopping by your friends office for a little 'chat' about distractions.  Essentially, Scrum Masters play the 'bodyguard' for the project by protecting the team from distraction.  In our engine example, the Scrum Master is the metal housing the pistons, engine, and other items related to the engine.

Conclusion

So that, in a nutshell, is Agile development with Scrum.  It probably seems like a lot of info but there really are only 3 primary roles.  And the benefits are amazing!  They give power to the team to control their work, not upper-upper management.  If all this sounds interesting I'd consider grabbing a copy of that book, 'Agile Software Development with Scrum' by Ken Schwaber with Mike Beedle.  They go into much more detail about their personal struggles with project teams and how Scrum development evolved.

Love

Love is a bird,
like a dove on a pole,
followed closely behind,
by a black-feathered crow.

When this dove falls
and fall though it will,
the crow comes along
and eats up its fill.

This crow could have babies
and each one be sent,
off after doves
a lovers lament.

The crow could live long
but never have loved,
and never be as fine
of a bird as the dove.

 

Man, I write bitchin’ poems.