2009-04-02

April Fool's Day

I love all manner of games and jokes. This makes April Fool's Day significant for me. I have never pulled a huge prank like filling a friend's dresser drawers with packing peanuts or rotating all the furniture in room by 90 degrees. However, subtle pranks can be just as fun if executed well.

Last year was my first April Fool's Day as a professional programmer in an office environment. I hoped to make an impression by "infecting" some of my coworkers computers with a little joke program. A quick Google search lead me to a list of free possibilities, but my Anti-Virus software wouldn't even let me try them. I then decided to replicate my top choice by hand. I picked a few people around the office and found images that they would hate, such as an MSU Spartans logo for the die-hard U of M fan and a Green Bay helmet for the Lions fan. The program briefly flashed the selected image periodically, after the idea of subliminal advertising. It worked well to annoy the targeted individuals, but it felt like a rush job.

I realized about a month ago that I hadn't put any thought into a joke program for this year. As I was pouring over the possibilities, two memories collided in my head. The first was a programming term that I must have read somewhere: "Trapping the mouse." The term means restricting the movement of the mouse cursor to a particular range, such as the canvas of a photo editor or to the window of a game. The second memory was of a TV show I watched on PBS as a kid, Ghostwriter. The show featured a ghost that could only communicate by manipulating written words, but had free range to create text in a computer. The collision of the these memories sparked the idea of having a ghost randomly appear and drag the mouse cursor around the computer screen.

I started by mocking up quick version with a stick figure graphic and simple angular movement. Once I got the mouse trapping to my liking, I upgraded the graphics to the little ghost you see to the left. I then set about making the movement based on the rotation of a simple vector. I started experiencing some "rotational loss," meaning the vector would shorten each time it was rotated, which lead to the ghost eventually coming to a standstill while still trapping the mouse. After I solved that problem, I added some bounds checking to keep the ghost on the available screens at all times. My first pass at the bounds checking would occasionally lead to an infinite loop of corrective action, so I added a loop counter that would bailout of the corrective loop and allow the suspect move, assuming the next move would also need bounds correction, but would be easier to calculate. As a "finished product," I settled on each trap event lasting only 3 seconds. I had the program compile to the innocuous "afd9.exe" and stored it on my shared folder, so I could launch it from any computer on the network.

I started the program secretly on 6 coworkers computers. I also demonstrated it to 5 other coworkers. All responses were positive, from "That's cute, now get it off my computer" to "Very clever, well done." One of the secretly started instances was never trigger, but I showed him how it triggered when he said he felt left out. I am very pleased with the final product and the response. I think it was a good pick me up for the office morale. Now, what should I do next year?

2009-03-29

Benjamin J Hobbs: Terrible Blogger


I wanted to start this blog to tell the anecdotes of my life, but I left you all with a cliff hanger almost 2 months ago. I could give you the very valid excuse that I've been busy with new customers coming online at work, but that feels like a cop out. So let me give you Cliff Notes version as a catch up.

The car was only down for one week. The day after the accident, Enterprise switched us out of the Delivery Van and into a Nissan Sentra. Nice ride, but not really my size. State Farm completely covered the repair, so we threw in some maintenance work while it was in the shop. The Malibu ended up coming back to us in better condition than before the accident.

The weekend before the accident, we added two new members to our home. Harvest and Whinny are a male and female, respectively, from the same litter. The names are actually verbs that cats cannot perform. The picture to the left is from there first weekend home, and they have practically doubled in size since then. They have been such a blessing and stress reliever. They love to cuddle, which is a must at our house, but also chase each other around the house, making us laugh every time.

Jenny and I filed our taxes in late February and got a sizable return due to the First-Time Home Buyer's credit. I've got to thank President Bush for getting that one through congress. The return allowed us to each get new computers. Jenny got a little pink Netbook from Dell, and I built a cool looking powerhouse for gaming and development. The return also helped us make some much needed repairs around the new house. We gave a list a mile long to our plumber friend, and bought paint for every room.

I decided to do something significant for Lent this year. The Church I attend doesn't make a big deal about the forty days of Lent, but I still try to use the time to make myself a better person and a better follower of Christ. This year I decided to do quite a serious fast. I didn't give up food altogether, as that is reckless and dangerous for a 40 day period. I did reduce my intake to one meal of my choosing each day. Jenny worried about my health, and encouraged me to supplement my single meal with juice. I took her advice and started drinking V8 Splash and V-Fusion during the mealtimes I skipped each day. The goal of the fast is to improve my Bible study. I have not seen as much improvement in the quantity of study as I originally planned, but the quality of study has made a marked increase so far. There are two more weeks until Easter, which will mark the end of my physical hunger and hopefully a continued hunger for the Bread of Life.

I think that covers the major bullet points of the last two months. I hope to write more frequently in the near future. In fact, check back this Thursday as I will have a scheduled post telling of my April Fool's Day joke program for this year.

2009-02-04

Accident in the Early Morning

It started like the last few Wednesdays. Jenny and I left really early so I could drop her off for class at Great Lakes Christian College. As I headed back to the freeway, I had to drive three-quarters of the way around the round-about at Willow and Canal. Just as I passed the halfway point, the car coming from the opposite direction failed to stop in time, and hit my car. I managed to control my car and get out of the round-about. So did the other driver. However, she did not stop on the other side of the intersection. She hit me and kept driving. The elderly couple that were driving behind her at the time said they couldn't get her license plate number when stopped to check on me. I didn't see any damage right away, so I decided to drive on. The rear of my car was throwing violently as I drove, so I stopped at Horrocks to call the police and report the accident. The police officer came, wrote up the incident, and went on his way. Jenny managed to borrow a friend's car and met me at the store. We made the calls to Shroyer's for a tow, State Farm for the insurance claim, and Shaheen Body Shop for the repair. And as quickly as she came, Jenny returned to class. I waited about an hour for the tow truck to pick me and the car up. By the time we got to the body shop, I had missed the opportunity to catch a ride to work with my dad. The estimator at the body shop told me they would probably need three day to repair the damages. So Enterprise picked me up. The only vehicle they had available to rent at the time was a full size service van. I got on the freeway as soon as I could and got safely to my cubicle quite late. My coworker Peter took the follow photos during lunch.

2009-01-18

New Year's Resolution

Among the other resolutions I've made again and again, such as losing weight or exercising more, I added a new one this year:
By the end of the year, I would like to create a piece of software outside of TrainMaster.
This resolution is not for profit. I'm not looking to turn a buck on the side. My goal is not to pad my resume, although creating something on the side won't hurt the resume either. The one thing I'm after is stretching myself, putting myself to a challenge I hadn't encountered before.

When I started fostering this idea last year, I looked at a couple of different technologies. Microsoft has recently released XNA, it's development platform for the Xbox360. The technology looks sound. Many homebrew developers are already publishing on the platform and making notable amounts of money. While the publishing mechanism seems straight forward, I lack a few key elements in the development process. Namely, an HDTV and an Xbox360. Maybe next year.

Another technology I looked at was the Facebook platform. I like the social interaction that Facebook brings to the Internet. This option was more appealing because it offered more new languages to develop in and new challenges in deployment. Items I still need to publishing on this platform includes setting up a directory for web serving and perhaps an extra charge for a stable IP address and a domain name.

Of course my dream platform is the impressive WiiWare. I've always loved Nintendo products and attempted to get a development kit from them for my high school programming independent study. I was shot down then and told that development kits only go out to recognized developers. While the concept of WiiWare would seem to denote a shift to the small guy like 2D Boy and Semnat Studios, one must still go through Nintendo to get the development kit. Looks like I'll have to put this one on the future list.

While console development stays a dream and goal of mine, I think I will spend this year focused on the Facebook platform. So I will end this post with some questions for the Facebook users out there to answer.
  1. What do you like most in an application?
  2. What are some things you don't like about some applications you've tried?
  3. When you play a game on Facebook, how long do you perfer each session to last: several clicks, several minutes, or more?
  4. Do you prefer direct or delayed interaction?
  5. Should your interaction be limited by your friend list, or do you like to interact with new people?
I thank you for your input, your opinion is valuable to me.

2009-01-10

Where did December go?

It is hard to believe we are already a third of the way through January. I had been planning to post about an overly busy weekend at the beginning of December. I also planned to post about the busy end of year deliverables that piled up. Then again I hoped to post about all the different Christmas parties I went to. When I finally got time to breath, I found my time filled with a return to the free MMORPG that I'd been playing with some of my friends. By then, New Year's Day had come and gone, and I was back at work setting an aggressive bug fighting schedule. And here we are on January 10th and I'm blogging for the first time in a month, so let's make it a good one.

The first weekend of December had Jenny and I driving all over the Greater Lansing Area for an assortment of dinner parties. Saturday night was spent in Grand Ledge, and my first visit to the home of my pastor, Frank Weller. He had invited us and a number of other couples to a dinner party and informational meeting for a program called Joshua's Men. This program is a year long leadership training course. I look forward to participating in Joshua's Men in 2009, and I'll have more to say about it once it kicks off. Sunday night was spent in Williamston, for the annual P.I. Engineering Christmas Dinner. This year, the party was held at our new warehouse space, which is currently being rented by a textbook binder. It was a delicious dinner and and a fun evening touring our newest facility. Monday night was spent in Lansing, at Jenny's work party. The Elmwood Nazarene Child Care party was a potluck dinner, and was fairly awkward for me. I only knew one other couple at this party, and I was feeling ill that evening. Lucky for me, Jenny knew in advance, and didn't parade me around in front of all her coworkers. Three completely different dinner parties, one busy weekend.

Early December was spent delivering our first Mainline Simulator. The project director was on site with the customer, installing the hardware. I was in the office in Willamston, sending through software and content updates from myself and the other members of our team. Overall, it was a successful install, but there is more to be deliver on the software and content side in 2009. The rest of December was spent fixing bugs for our first Train Yard Simulator customer, and then cloning that code for the training facility they resold our project to. I also had to set up a generic Yard Simulation for a brand new customer looking to spend some of their 2008 budget. Finally, just before the office holiday break, I had to make a copy of the source code for our Escrow Lawyer. Five big deliverables, one busy work month.

Friday, December 19th was a terribly snowy day. So snowy, in fact, that every district in Ingham county was closed. Snowy enough to change the plans Jenny and I had to change our plans for celebrating our 4th Anniversary. We also had to reschedule the Getchel family Christmas feast from Saturday the 20th to January the 3rd. Christmas Eve brought a half day of work, the Jardine family gift exchange, and Christmas Eve Candlelight Service at SLCC. On Christmas day, I spent time with a sick Jenny at home, my parent's house and her parent's house. She found the most comfortable place to nap at each place. So many Christmases, so many fun times.

I spent three whole days in my pajamas, on my sofa and playing ShadowBane. ShadowBane is a free to play Massively Multiplayer Online Role Playing Game. Some close friends introduced me this fun game. It has an open world to play in, an aggressive Player vs Player format, and highly customizable character classes. I had neglected playing with my friends for a few weeks and logged back on to find our guild had captured our own city. I spent those few day catching up and enjoying myself. If you feel so inclined, you can download the free software, send me a message and I'll help you get started in the game and induct you as a member of the Keepers of Dawn.

Jenny and I spent our New Year's Eve celebrating with our small group. The Cohoons, the Batdorffs, the Simmons, and all their kids stayed up until midnight to witness the turning of the calendar and the dropping of the ball. We filled the lead up to midnight with Wii gaming, Apples to Apples, Darts and deep fried anything. It was a great evening that spilled over into the next day with Bowl games and Board games. Great times with close friends.

Friday, Janurary 2nd was a bit of a write off. I had to return to work, but had very little to do. Most people spent the day cleaning up their work stations and work spaces. I took the opportunity to defragment my hard drives. The following Monday, I met with the project manager and discussed all that needed to be done for our Mainline customer. He suggested i set the schedule for the tasks ahead. I set an aggressive one that forced me to make the changes and improvements to our software that had been stewing around in my brain for a while. I spent most of the week on track, but encountered some un expected hold up late in the week. Next week should witness me getting back on track and completed on schedule.

All told, I ended 2008 pretty busy, but I wouldn't have it any other way. Life has been good for Jenny and I. 2009 looks to be just as busy and better than ever. I have new opportunities to learn and grow. I look forward to grabbing on to each of those opportunities and becoming a better programmer, a better husband, a better leader, and a better man. And maybe, just maybe, I'll blog more often.