Wednesday, August 29, 2012

Nearing completion

Current launch screen for the app
So I've been working a few hours every night trying to get closure on the Maya Calendar application - and I'm almost there. Except for a marathon Bejeweled Diamond Mine session this evening (I didn't want to quit until I'd topped 200k) I've pretty much been working on finishing up the application. I've got the backgrounds all changed - they look very nice now - and am working on the final touches. I was going to do a universal application - both iPhone and iPad - but the size on the app was making it ridiculously large. Like 60 MB large. Wow. Um - no.
What's left you ask? Well, I've got some "about" kinds of things to finalize. Need to get the application version information in there as well as information about HOW to use the app. Plus I wanted to put in some text about the long count calendar - where did it come from, how was it used, etc. Once I get those things in and working as expected I think I'll be ready to build it for distribution. I don't have an iPad version yet at all. I think while I'm waiting for the App Store approval process to complete I'll work on the iPad version. I've got all of the graphics and logic - just need to change up the display. I think.
Things have been coming together over the past few days. I feel that I've been productive - moreso than in weeks past. In order to get things finished I need to do something I haven't ever done before, so I do still have a little more work to do, but I feel now that I'm closer than ever to having something completed that can be submitted to Apple. And that will be a huge boon to my self-esteem these days. I also made some adjustments to the graphics that, for a non-graphic artist, I feel pretty good about.
Anyway - just a quick update. Looks like things are getting close. Now to sprint to the finish line and be done with this.

Sunday, August 26, 2012

Oddness with the Maya Calendar

So I've been reading up a LOT on the Maya* calendar over the past few months. There are two different calendrical systems - the Long Count (which is what we hear about when people talk about the end of the world in 2012). The current date in Long Count (as of this post) is There's another calendar is called the Sacred Round and uses what are called Tzolk'in and Haab dates. This calendar was more religious in nature and had a full cycle of about 52 years. When doing calculations for Long Count or Maya calendars it's common to include both the Long Count and the Sacred Round dates.
One thing that seems clear is the basic calculations to get the Sacred Round dates. The Wikipedia article describes pretty clearly the arithmetic required to derive these. The regular Sacred Round cycle is 360 days and there are 5 Wayeb days (that were considered unlucky) to make the calendar 365 days long. Close to the 365.2422 days our tropical calendar is, but it means that the Sacred Round shifts one day forward compared to the tropical year every 4 years.
One problem is that I would like for my application to work for dates all the way back to 9999 BCE (and forward to 9999 AD/CE). Most calculations are done using Julian days as a baseline, but the Julian dates start in 4730 BCE, a little later than my 9999 BCE desire. What's a developer to do? Well, one option is to try to address the negative values that come from going before the start of the Julian dating scheme, which is what I initially thought of doing. Then I realized that since there is a higher-order cycle above the currently accepted five values, I could add what's called a piktun worth of days to the count, in essence moving back the Julian calendar about seven thousand years. I did this and it worked great for the Long Count calculations - I just subtracted out a piktun if it was past the beginning of this cycle or not - it all worked out. The Sacred Round, however, was a different story.
The reason is that the Sacred Round starts at specific values for tzolk'in and haab. Moving back a whole piktun, though, means I needed to recalculate the tzolk'in and haab values. I figured out what the new offsets were and after resolving some oddness with displaying the correct glyph for the tzolk'in and haab I seem to have gotten everything working.
The only things I have left to do to get this thing out the door is finish the polish for iPhone and get the iPad version looking reasonable. All of the testing I've done to date is solid. I still have a few things left to validate, but I actually have a high confidence that it will work pretty well. Then two versions - one free and ad-supported and one for $0.99. Then I'll have broken my 3.5 year drought of getting apps into the App Store. Yay?

* You'll note that I'm not using "Mayan" anymore. I learned that Mayanists (scholars who study the Maya history) use "Mayan" for linguistic elements (the language) but use "Maya" as an adjective for "things that are from the Maya culture"). I will bow to their superior expertise and understanding in this particular matter. 

Sunday, August 19, 2012

More Mayan Madness and Inspiration

So it's been a while since I've posted. Unfortunately in the weeks since then I've had a hard drive "almost" fail, a Time Machine restore TOTALLY fail, the hard drive FINALLY fail, and lots of restore pain. In short, it's been a hell of a few weeks. But now I'm mostly back to normal (well, the laptop is) and running again.
19 Aug 2012 in Long Count
I've been working on the Long Calendar app for the past few days. So far I've added a lot of better graphics to it so it looks better than it did before (see picture to the right). I think it's starting to look a little better. I wasn't planning on working on the glyphs until I had completed everything else, but I'm actually really close now. I have two remaining bugs. For some reason the Haab and Tzolkin calculations are incorrect. I'm guessing I messed something up when I fixed some +1/-1 problems earlier. And BCE dates aren't working correctly right now. Again - I think I managed to break them at some point during development.
One thing I'm not doing much and need to be doing a lot more is the unit test. Xcode 4.2 integrated a unit testing framework into the system, which is awesome. I need to spend some time really beating it up and understanding it a lot. With this applet I feel that it could be beneficial (it would have caught the changes that broke the calculations), but I'm also pretty far down the path. I've got a set of tests that I do whenever I make changes, so I'm not totally out of sync with current development methodologies, but still feel that with all of the agile experience I have that I'm not being "true" to the methodology by not doing it for my own projects. Especially since Apple has done the "right" thing by encouraging developers to do it. Next project I must do it.
Regardless, things are starting to come together with this. I expect that I'll be able to get this completed this week, I hope, and get it into the AppStore next weekend. Earlier would be better, but there's a lot going on right now - lots of swirl and lots of stress.
On a good note, though, I spoke with a friend from my HP days - Cooper. He works at Microsoft right now and I was in Seattle last week and rang him up. He's one of the most talented engineers I know (perhaps the most talented). He's also one of those people who is completely committed to whatever it is that he's working on at the moment. He inspired me to work on things that made me happy when we worked together. We actually started talking about starting our own company before MS offered him riches that would make Solomon blush. But it's Coop who really encouraged me to dream bigger and work harder to achieve those dreams.
I've sort of lost sight of that in the doldrums that are everyday development. It's easy to forget the why of what you're doing in the day-to-day of doing. What do I want to have? The ability to be with my family when and where we want to be. To be able to provide for them while not being beholden to a time clock at a wage-slave job. To not be a sarariman. As you probably know, I have a 9-5 at Comcast. The "job" is good - challenging to be certain, but I'm well-compensated and enjoy working with my coworkers. But it's not what I want to do in the long-term. Before I got this job I told my wife that I wanted my next job to be my last one - that I would make this Otto Von thing work come hell or high water. And what's happened in the 2.5 years since I started at Comcast? Not a whole lot. I've managed to learn a lot but at same time waste a lot of effort not focusing on the end goal.
Talking with Cooper has really re-focused my energies on that end goal. I was reminded of the possibilities we had back at HP. Of the things we talked about doing and the places we'd go. Of the games we'd write and the lives we would change. Of the paradigms we'd create with our innovation. We'd be the Nintendos of the game world. And that's gotten lost.
So, here we are in August. What will the next few months bring? I don't know, but I do know that I'm reconnecting with those "halcyon days of my youth". I'm remembering WHY I'm doing this and why I need to make this more than just a hobby. It just takes a look at my family and a chat with an old friend to bring everything back into focus with a clarity I could scarcely recall. Almost like a haze that slowly dims your vision. Over the years it just seems fuzzier than it used to be. And then you clean the haze away. Now I just need to keep the haze away.