This blog post describes some of the design decisions I made, and programming challenges I encountered, while writing the food cost calculator application. This post is probably too detailed for anyone to read. Consider yourself warned.
Author: Chad Weisshaar
Staycation
William’s nephew and his wife came to visit us for four full days last week. It gave us a chance to go places and try activities that we hadn’t gotten around to without the extra motivation of having company. Their visit ended up being a “staycation” for us. When they left, it felt like coming home from a real vacation.
Home Cooking Costs Project
I read the book Make the Bread, Buy the Butter: What You Should and Shouldn’t Cook from Scratch a few months ago and it got me thinking about the cost of cooking at home. I recommend the book (and/or her blog) for the personal stories and recipes as much as for her advice about what to make at home. The stories are funny and the recipes have been consistently good. But everyone is different in how much they value their time and enjoy cooking; and the book is targeted toward people who consider cooking a hobby and are willing to do in their free time.
I enjoy cooking and have lots of free time, so her advice is pretty good for me. If she says you should buy it, you should buy it. I thought that I had found one exception: Rice pudding. I figured that she just didn’t try (or want to recommend) using a pressure cooker. My rice pudding was pretty good, especially warm, but Kosy Shack was better, especially the next day. And tapioca is better anyway.
Each recipe in the book has a cost to make and the price to buy. I double-checked her prices for the first few recipes that I made and they were pretty close. A direct comparison is difficult in many cases because the store-bought item and homemade item are too different (hot-dog buns are a prime example).
As I got more curious about how much different foods cost to make, I started to wonder which of the things I eat are the best value and how home cooking compares to dining out in terms of cost. I also wanted to consider the nutritional value of the foods and to include (like the book did) the energy costs involved. I started tracking this in a spreadsheet, but it was too much hassle to keep track of which foods I’d entered already and to do all the conversions between different amounts of foods. So I started looking for software that would help.
Nine years ago I created a FoodDiary program because I was curious about how nutritious my diet was. Was I getting all the vitamins and minerals that I needed? What about all the amino acids? This was about the time that I was giving up beef and pork and I was worried about missing some proteins (I wasn’t). I considered re-writing that program to track food costs but I was turned off by the idea of revisiting the old wxWindows (a C++ graphics library) code. Instead I downloaded the trial version of the popular Living Cookbook software. Their software is pretty nice, and it allows you to track food costs and will figure the cost of a recipe. It has some pretty severe limitations though:
- You had to enter a food price for a particular quantity (their choice) of the food
- When you updated a food, the program had to update all the recipes that contained that food. This process took 15-30 seconds for common foods.
- A recipe couldn’t contain another recipe.
- When entering a recipe you have to enter each ingredient twice: once for the description and once for the nutrition data.
- There is no way to “score” a food. You can look at the amount of each nutrient, but there is no way to consider it as a whole. This was the main focus of my FoodDiary software.
So I finally decided to write a new program to do exactly what I wanted. I probably come to this conclusion a bit too easily and often. I think it’s because it is so easy to underestimate how hard the program will be to write. I had the same problem when I was getting paid to program: I’d take my best guess, double it, and often be way under.
Computer upgrade
I just upgraded my computer’s CPU, motherboard, and memory. It has been a long time since my previous CPU upgrade – almost exactly 6 years. This is the longest that a CPU has ever lasted for me, and it was not top of the line when I bought it. It seems like the rate of performance increases has slowed down, at least in the desktop sector. I wouldn’t have needed to upgrade at all if it weren’t for doing a lot of compiling and wanting to play more modern games.
It seems like the mainstream software the most people use (OS, browser, Office, email) has not really put new demands on computer hardware. Some web pages have become more CPU intensive, but I feel like the hardware demands are limited by the prevalence of phones and tablets. With so many users having low end hardware (even top of the line phones and tablets are slow compared to desktop hardware), software requirements have stayed low.
Maybe once the mobile market has caught up we will see new software demanding better hardware. We should at least see higher resolution displays once the ultra-HD TVs start to arrive.
DRM and eBooks
I received a Kindle for Christmas in 2010. I have really enjoyed the device: It is smaller and lighter than a physical book, hold lots of books/magazines at once, and lets me save clippings and lookup words on the fly. I prefer to read a book on the Kindle, and will even check-out the eBook from the library instead of using the physical copy that I own.
However, it was over two years before I bought an eBook. At first, I got a “New Yorker” magazine subscription. Next I got into reading library books on the Kindle. Lately I have been using the “Send to Kindle” Chrome app to send long-form articles to the Kindle.
The reason that I hadn’t been willing to buy an eBook was the DRM. I don’t feel like I really own the book if I can’t transfer it to another device. The Kindle is a great product, but I don’t want to be locked into that piece of hardware to read my books. If something happens to the Kindle or a competitor comes out with a better reader, I want to be able to switch and not have to re-buy my books.
Recently, TOR books decided to remove DRM from their eBooks. I am sure that it was a hard decision for them. Without the DRM, it is easy for someone to buy one copy and share it with their friends. Of course, DRM doesn’t protect them from a dedicated pirate. All popular titles are already available to someone who is motivated. But DRM does stop casual sharing. Fortunately, TOR hasn’t seen an increase in piracy and the experience has been positive for them. They have no plans to return to DRM.
So my first eBook was “Ender’s Game” from TOR. I hope that other publishers follow suit and provide a product that I can truly own.
Zilch for the touch table
I have been working on a new game for the touch table. It is called Zilch (or Farkle, Greedy Dice or Dice 10000) and it is a “press your luck” style dice game that we often play at the end of a gaming session or while waiting between games. Players roll six dice and can score some or all of their dice. What scores depends on which rules you are playing by; but it at least includes 1s, 5s, and sets of 3+. The scored dice are removed and the player may continue and roll the remaining dice for more points or bank their existing score. If the new dice can’t score anything, the player loses their points and pass the dice. If all the dice score, the player may/must continue and roll all six again.
In my version of the game for the touch table, you can play more than one game at a time so that lots of people are rolling simultaneously. Here 10 players are playing 12 games:
Surprise 50th Birthday party for Brenda
We went to a surprise 50th birthday party for Brenda in Hutchinson Kansas this weekend. We brought the touch table along and had a good time seeing the family and playing touch games.
Click through for more photos: Continue reading “Surprise 50th Birthday party for Brenda”
Up the River
I have been working on the multitouch games these last couple of weeks. I have started creating a new touch game based on the card games Oh Hell, Get Fred and Wizard. These games are trick taking games where you get points for correctly predicting how many tricks you are going to take. The main goal for this game project is to make an HTML based phone interface for displaying the player’s cards. The player will make their bid and select which card to play from their phone or tablet, while the main screen will show the cards played, bids made, running score, etc.
So far I have the game implemented with the player controls on-screen:
Yacht AI
One of the lessons that we learned from PAX is that it is very nice to be able to switch between a human and AI player while playing the game. The only game that had this feature at PAX was Parcheesi. It made people more likely to start a game since they knew that they could be replaced by a computer player if they got bored or had to leave.
So one of our goals is to update the existing games so that you can switch back and forth between a human and computer player during the game instead of just at startup. Most of the games will be fairly easy to adapt to this system. We generally write the computer players in C++ while the rest of the game logic is in torquescript. This separation has meant that we generally pass everything the AI needs to make a decision each time the AI has to play.
Yacht didn’t have an AI at all, so to adapt it to the new system required me to write a computer player for it.
Trip to Boston
We went to Boston to demonstrate our touch table games at the Mesa Mundi booth at PAX. We allowed a couple extra days so that we could do some sight seeing around the city. The highlight of the trip was PAX. PAX would have been pretty cool even if we weren’t vendors, but we got a lot of joy and satisfaction from watching people enjoying our games.
You can see all the photos here and I have a separate post for our PAX experience.