It’s that time of the month again: GROUNDHOG DAY RESOLUTION REVIEW DAY! My sleep schedule has been all over the place, and I’ve been much more of a hermit than I think is healthy. Still, in hindsight it’s been a busy, exhausting, but somewhat productive month. I’d describe the past month as one of getting work done while trying not to worry about my upcoming trip to Taiwan, an island country just 80 miles off the coast of China, where my family is from. Because of the focus on work, I had backburnered a lot of my personal goals with the exception of ones that have other people involved with them somehow.
I’ve assembled this month’s report as a pictorial review with commentary, covering some of the weird things I happened to take pictures of, such as the braised pork lunch box I made for a friend of mine. Read more after the jump!
Work has been exhausting, but I’m again learning some important lessons that I had never quite absorbed before. One of them was even reinforced by my recent viewing of The Martian, when character Mark Watney is telling some students about surviving being marooned on Mars (paraphrasing loosely). “You solve one problem at a time. Then you solve the next problem. That’s how you survive.” And so I’ve found this the case with my coding work. My task before leaving on vacation is to get as much of it working as possible so the rest of the team can DO something with it. The task itself can be expressed fairly succinctly: “A bee dances, pointing the way to a flower. Another bee goes to the flower, picks of nectar and pollen, and then returns to the hive.” The task itself has taken me six weeks to get through each phase, though in my head it’s pretty clear what is needed. It just is that I’ve never built or worked with these concepts before, and though I have a notion of how they work it takes what seems like an AWFUL amount of time. Four hours to implement a data structure that implements what is essentially a queue? Inside I am screaming, “that’s crazy, or at worst imcompetent!” But really…it isn’t. I have to solve the problem one bit at a time. And like The Martian, the methodology of the approach itself becomes really interesting once I’m over the initial grouchiness and self-recrimination for not being a smarter, faster programmer.
For this month, I implemented or enhanced a number of new systems in the code:
- A counter/latch/timer object that makes it easy to test conditions like, “hey, did this value change from negative to positive?” and “yo, have 150 milliseconds elapsed yet?” without littering the code. It makes for clean, readable code, which is just the way I like it.
- An actual behavior tree with several working behavior nodes, which is a form of game object “intelligence” (called “AI”). This has actually taken me a lot longer to get my head around, having first bumped against it in the summer. I think I get it now, and have my own implementation based on studying the behavior3js project and then filling-in my conceptual blanks as I adapted it to the code framework. It’s pretty exciting seeing it actually work, though my journey with this approach is just beginning. HINT:
- A particle system management class with extensible pool object management is a fancy way of saying, “hey, I want a spray of objects to explode over there when I say, ‘Explode(100,100)’, and I don’t want to be bothered about any of the details. Just do it.”
- A waypoint navigation manager that essentially maintains a list of coordinates that a piece in the game world wants to go to one-after-the-other.
All of this crap had to happen before I could get a bee to do anything at all on the screen, and it took many weeks. While I was doing it, I documented all the systems and their concepts (well, most of them) so I could remember how they worked later. Rather than fret that I had to make “progress” as fast as possible, I put in the time now to make systems that I thought were reasonably elegant with a strong conceptual model of operation. These are reusable rocket parts, not throw-away code bits to create the appearance of progress. And I feel pretty good about it. As these pieces come together, building a complex and robust system becomes easier and easier.
The Living Room Cafe: Furniture!
To my great surprise, the expensive new sectional couch arrived many weeks ahead of schedule, so I took a day to assemble it. It’s a LoveSac “Sactional” Series 5, which is the smaller of the two types. It came as 9 separate boxes, comprised of two base units and six side units and the set of covers.
I’ll write a more in-depth review in the future, but I’m pretty happy with the furniture. At first, I was not so happy due to some problems with the hardware, but the local store manager drove to my house to fix it the same day I called it in…that’s service! Then after that, I was thinking HAVE I MADE A HUGE MISTAKE when I sat on the assembled couch, thinking of how many Steelcase office chairs I could have gotten with the same money. The assembled sectional itself is rather plain looking, and it doesn’t LOOK like it cost as much as it did. It did feel very solid, so I sat in it for a while with my laptop. I noticed a few things:
- The low profile, square-slabbed design looks good without calling attention to itself. This is what I wanted initially, but I had forgotten.
- The square, modular design lends itself to easy customization with accessories that I could design. For example, I could probably make some kind of electrical outlet attachment and it would friction-fit between the cushions and one of the sides. Likewise. adding cat-proofing could be easily done with wrap-around vinyl bands because the sides are detachable. If I wanted to make a sleeve cover, the square shape of the side pieces makes that super easy as well.
- There really are a lot of different configurations I can put even just with a 2-base, 6-side set. For example, it occurred to me that I could make a room divider with it, taking all the sides off except two. Also, storing the extra sides behind the loveseat configuration I have it in creates a wide shelf that I could easily put a nice hard top on, creating a very pleasant working couch.
So yes, I am happy. It’s a great couch system, I think. I plan on writing up a fuller review in the future.
The Living Room Cafe: Table Progress!
The new tables are also close to being done! The major holdup has been on my side, as I had to create some table base attachments to connect the cast-iron bracket to some intermediary hardwood so I could use the take-down inserts I bought. As the craftsman I hired doesn’t use power tools, it was up to me to figure out how to do that. I have been researching my options to do as much of it without having to buy a drill press, and became entranced with an old tool accessory from the 70s from a company called Port-Align. I bought a used one off Ebay and it became part of the process to make the attachments. Darold, the woodworker, will screw the hardwood into the bottom of the table tops he made and seal it, hopefully getting it all done before I leave on my trip. When I get back, we’ll be ready for a soft opening!
I was inspired to make some Chinese-style braised pork belly using a different cut of meat than I usually use. The usual recipe I use calls for an entire 8-10 pound pork shoulder, but the local Vietnamese market also carries strips of pork belly (the same cut that’s used to make bacon). The lovely thing about braised pork belly is the delicious sauce, but it requires a good 3-4 hours to make. After mentioning this at my local specialty food store Lanna Asian Market with Joy the proprietor. As I got hungrier and hungrier talking about it, I vowed to make it and to bring a sample back so she could let me know what she thought of it! Here’s what it looked like:
The proprietor, Joy, was expecting a different style of preparation, but still liked the presentation. I happen to like making lunch boxes like this as they remind me of Taiwan street food, so I tried to assemble something that was reminiscent of my memories. Unfortunately, Joy had just had some dental work done and couldn’t really chew the Chinese brocolli, which I’d prepared crunchy the way I like it…oops!
Electronic Music and Video Games
In the electronic media landscape, I’ve been listening a lot to an Internet radio station called Digitally Imported, which features a lot of electronic music that I haven’t heard before. There are a dizzying number of genres, and after clicking around for a while I discovered something called “Glitch Hop” that really appeals to me. It’s like percussive electronic noise fused with sampled R&B and melodic hooks with a touch of funk. It’s been good for maintaining my energy levels as I code at home.
I’ve also been monitoring the re-launch of one of the MMORPGs I play in, Wildstar. Only a year old, Wildstar launched as a subscription-model game for $14.99/month or so, similar to what World of Warcraft was charging. I love the visual design of the game, and I’ve discovered a good community of players that I get along with, so it’s sort of my “internet social club” where I can mingle with other imaginative nerds. However, as a game it didn’t retain the interest in a paying playerbase with its purposefully “hardcore 8 hour grind to glory” approach to play. It has retained a lot of casual players, though, and the studio has regeared the game into a Free2Play version with a lot of casual-friendly content that rewards much shorter sessions. I spend most of my time just hanging out, occasionally engaging in character role play about running a hay farm, and taking pictures of pretty parts of the world.
For a change of pace, I’ve also given Final Fantasy XIV: A Realm Reborn a try. This is the other major MMORPG that still charges a monthly subscription (World of Warcraft is the other one), and I wanted to see why it was able to do this when Wildstar did not. I haven’t put in a lot of time yet, but I can say with certainty that it’s a deep, richly-detailed world with an emphasis on an ongoing story. This is entry number 14 in the series, which got its start way back in 1985, so there is a LOT of background story! To my eye, the graphics feel a little dated, but they’re still very good and at level 20 I’m finding the play to still be interesting. The pace of play is much slower that Wildstar, which actually makes FFXIV feel relaxing by comparison! I didn’t even get to FIGHT anything for the first 90 minutes of play, instead being directed from person to person in service of establishing story and context. In this game, story and the world history is paramount, and the game designers aren’t shy about forcing you to experience it. This is a game that feels like it’s designed to be an online third place through the design of its supporting play systems; in fact, the game doesn’t even disconnect you if you are idle for long periods of time because they want you to be in their world even if you are doing something else outside of it.
Final Evaluation of Tomato Growing Season 3!
The third version of my tomato planter design worked really well. For the entire summer, I refilled the water reservoir only four or five times for the 90 day period, which makes the planter very friendly to my travel plans. Tweaks for next year will be tuning the water delivery volume, and possibly figuring out a way to seal the unit so rainfall doesn’t cause uneven growth rates that lead to the fruit splitting open (“catfacing”).
The main problem has been fungus. The first two pictures above show the fungus that developed during a humid July, but I didn’t recognize it until it was too late. I’m surprised it happened at all, since the subirrigation planter design doesn’t result in moisture on the leaves themselves. There was a period, though, when I had sealed the soil later but allowed a small patch to drain, and this released moisture near the plant’s stem. It also attracted what I think were blackflies; they apparently thrive on moisture and lay lots of eggs. I removed the cover to let it all dry out, which eliminated the blackflies, but perhaps the fungal problem had already set in.
The plant is pretty much dead now, and I harvested the last red tomato a couple weeks ago. It’s been an excellent run, though!
Unexpected Cat Health Problems
In less fun news, I took in one of my cats, Katai aka ‘Kat’, to the vet to get a “lion cut”, as his long fur had become very very matted. During the course of normal updating of his records, they discovered that he was diabetic, so this threw a huge wrinkle into my plans. I have to give him insulin twice a day with a syringe, and I also have to arrange for daily care while I’m gone for 3 weeks. It turns out, though, that giving a cat an injection isn’t that difficult at all, and this would be the preferred way of giving Kat any medication in the future I think.
The Month Ahead
As I write this, I’m preparing for my trip to Taiwan. It’s going to be a long trip, and I’m going to use this as a way to see how well I can function away from home in a creative/business sense. I’m not a natural adventurer, so I’m a bit stressed about it. I’m very curious what my reaction will be like, and hopefully I’ll be able to blog while I’m discovering it!
As far as my goals for the year are concerned? I had to look ’em up again from my February 2nd kickoff post:
- Breaking Dependency on Time because I believe this will lead to greater creativity and productivity due to an improved attitude. I have a weird obsession with time.
- Minimization of Energy Sapping Possessions and Responsibilities because I believe that my cluttered home/work environment is not bringing me joy.
- Full-time Stationery Business by End of Year because the timing is right to make the transition. An established business will hopefullly enable me to spend extended time with family members on the other side of the world.
- **Finding the Will to Create and Share because this past year has been tough on my drive to share and create, and I want to get it back. It is essential, I think, to a meaningful life.
- Health and Strength because I’m getting old (47!) and have been neglecting all aspects of personal maintenance.
Hmm, surprisingly I am on-point with several of them. The two that I am not pursuing at the moment is the stationery business (back-burnered because of my focus on having a better attitude toward developing software) and Health (I have a completely random sleeping schedule, and am eating terribly again). Apparently I’m not able to juggle all five goals at once. Or possibly, I don’t have the will to engage the hard problems. That actually seems more accurate, so let me state something as this month’s focus:
- Solve each problem one bit at a time. But don’t put it off. Certainty lies on the other side of each uncertain action, yielding practical knowledge and reward.
The trick will be remembering to look at that…oh hell, I will write it down on a sticky note…it says this:
“Solve problem. Solve another problem. And find the answer slowly. But with increasing certainty with every problem faced.”
See ya on November 11!
Groundhog Day Resolution Posts for 2015
Here are other posts about Groundhog Day Resolutions for the 2015 season.
- The original post about Groundhog Day Resolutions
- 02/02 - Kickoff - Setting Goals
- 03/03 - Resolution Review #1: ETP Notebooks, Video Games, and Living Room Cafes
- 04/04 - Resolution Review #2: Acquisition Mindset, Micro Thing Challenge
- 05/05 - Resolution Review #3: Releasing Expectations for Better Productivity?
- 06/06 - Resolution Review #4: Embracing Structured Productivity
- 07/07 - Resolution Review #5: Floor Installation and Dad Visitation
- 08/08 - Resolution Review #6: Embracing Slowness (or at least tolerating it)
- 09/09 - Resolution Review #7: A Month of Slow Movements
- 10/10 - Resolution Review #8: Making Bacon and Plowing Through
- 11/11 - Resolution Review #9: An Economy of Giving
- 12/12 - Resolution Review #10: Finding Certainty