Saturday, August 7, 2010

Alpha 2 Love

It's official. On Thursday evening I sent out OttoJotts Alpha 2 to testers. I've picked up 3 more testers since Alpha 1, which I'm hoping will help when I start getting into needing to test multiplayer. The Alpha 2 has a LOT of stuff in it, including:
  • Statistics for game play, including games played, won, and average guesses per game
  • New help file - this is a huge improvement and MUCH better than Alpha 1's
  • New background images - basic changes, but look pretty good; not final, though
  • Server-based word lists (the entire word list is on the server now)
  • Persistence between launches. Less of an issue with multitasking in iOS 4, but a major pain in anything previously
  • Automatically scrolls to the bottom of the guesses list on load - something that should have been done for Alpha 1
  • Upgrade to iOS 4 support - this was far more involved than I expected it to be
  • Numerous UI improvements and tweaks - just a lot of pet peeves and usability tweaks to make it easier to use and understand (I hope)
So quite a lot, but the lion's share of the time was spent in migrating from iOS 3.1.3 support to iOS 4, primarily because some things just didn't work as expected in iOS 4. Part of that arose from needing to refactor a bunch of stuff and reworking some of the child/parent messaging, but overall things seem pretty stable with Alpha 2 (on my devices), so I'm happy for the nonce. I'm hoping to get some feedback on the build while I start work on Alpha 3 (almost completely multiplayer stuff). It's coming together - slower than I expected, but I think it's going to end up being pretty good when I'm done.
Back to the salt mines.

Tuesday, August 3, 2010

Quick Departure

I'm going to take a few paragraphs here to discuss another topic outside the typical vein of the blog. That issue is Net Neutrality.
As a netizen for lo these many years (almost 25 now), the thought of a free (as in liberty) and open internet has been something that seemed completely inherent in the 'net. That someone would come along and consider restricting access was bound to crop up, but the thought is anathema to the openness of the 'net.
I look at the issue from two perspectives - as a consumer and as a small business owner - and this latter perspective is where I have the primary concerns. As a consumer, I already (over)pay for access to the internet and it seems reasonable, based on other costs, that I should. I already pay for electricity, gas, and water - internet access seems like another service being provided and the provider deserves to be compensated for that access. I can even choose how much I want to pay for the bandwidth I choose to consume - again, all reasonable. I would, however, be concerned with a "prioritized traffic" provider. I should be able to access all of the legal content I want to access when I want to access it, provided that I'm paying for that right.
As a business owner, though, I have serious concerns. The crux of the net neutrality debate is centered around businesses providing content. Services like BitTorrent were just a symptom of what the industry as a whole was experiencing - a lot of people using a lot of bandwidth. That BitTorrent could be used to break the law was, I'm certain, an impetus for internet providers. They saw this as an opportunity to "tax" business owners to get access to their services. As an ISP, the thought of all of the potential funding just below the surface would be irresistible. And it makes sense. "As a user of our network," they'd reason, "you should be required to pay commensurate with the amount of traffic you're pushing over our network." This is, however, just over the concept of "reasonable". Why? Business owners are already paying for access to the internet from their hosting services. And there are, literally, thousands of ISPs - should businesses have to pay every since ISP to prioritize their traffic? I can only assume the ISP answer to that question would be a resounding "yes!"
The biggest concern for me is the following scenario. Assume that the providers are able to prioritize their traffic based on who pays them. As a company that's not Google or Microsoft or Apple, I'm at a significant competitive disadvantage if I can't pay to get my traffic prioritized. The average person using the web will not wait more than a few seconds for a web page to display before they pick a different page (i.e, not mine). If there's a delay in displaying my information because my traffic isn't prioritized highly because I couldn't afford to pay every telco that wants to provide internet access, I lose customers or, at the very least, customer satisfaction suffers.
One of the arguments against net neutrality is that if companies haven't done it yet, there's no reason for them to do so in the future. There are a few points to be debated here, but the three that ring most true for me are: a) companies haven't really been able to do this yet, so there's been no real test of this concept, b) companies have a terrible history of doing things in people's best interest (look at the labor revolution of the late 19th century for a great example - and then go thank a union worker), and c) they're already looking at it. Comcast began to packet filter BitTorrent traffic - determined via empirical tests. And it's not that far of a leap from selectively filtering traffic to charging for that traffic. This also causes problems for consumers who now need to determine whether their provider will allow them to access the content they want to view.
So you may be asking where I stand on the whole issue (if you haven't already jumped to a conclusion). Actually, I prefer that we take a "wait and see" attitude, but we need to provide an organization - it can be the FCC, but I'd prefer an elected body rather than appointed - to oversee and insure that things don't get out of hand. We should be proactive rather than reactive to the potential direction this issue could move. Time and again we've seen that as things progress without direct confrontation about it, people become willing to accept the status quo, not status quo ante. I don't believe we need regulation, but we do need the ability to quickly address any complaints.

Monday, July 19, 2010

Continuing Hurdles

As I've posted previously, there are some things I really appreciate about Microsoft's approach to supporting its developers (at least back in the day when I was writing Windows code). Primary among them is that Microsoft gives you the source code to their framework, the Foundation Classes. You get to see everything that the framework does, all the way down to the Win32 calls. And even then you can see the disassembly if need be. Apple has taken the opposite approach - they hide everything. I was talking with my mom tonight and I likened it to a server in a restaurant. You tell her your order - "I'd like to put a button in this location with this text" - and then she runs off, makes your order, and delivers it to you, but you never get to see how the secret sauce is made or if the cook spit in your food. Well, right now I'm feeling like Apple's spitting in my food.
I had been working diligently on getting my Alpha 2 completed. iOS 4 had just been released and I figured I'd get A2 out and then upgrade to the new Xcode version that supported iOS4. Then I got my new phone - iPhone 4, yay! (except for the antenna problem - boo!) - but it had iOS4. *sigh* So while I could install my iOS 3.1.3 version of software on my iOS4 phone, I couldn't debug it. And wouldn't you know, I experienced a crash. So I figured - well, maybe I'll just upgrade, recompile for iOS 4 and things will magically work! Okay, I didn't really think that, but I figured I was really close and this upgrade was: a) ultimately necessary, and b) worth the investment. So I bit the bullet and upgraded. And compiled. And fixed some problems.
But then I tried to run it. And found that now it crashes, but in a very unusual way - the stack is getting blown somewhere. Not that I changed anything that would cause that - it's just the combination of the code I had written for 3.1.3 apparently had a bug or there was a feature of the compiler that made it play nice. And this is where the first paragraph comes into play. The crash is happening deep inside Apple's code and I can't figure out where it's crashing.
Because of the crash, I've been unable to actually locate the place where the stack goes "kaboom". I've run into this a couple of times in the past on Windows - unallocated memory in release mode that overwrote the call stack pointers - but this is in debug mode, which should be a lot nicer and friendlier. But because I can't quite figure out where in the framework code it's crashing (because I don't have the source code), I'm stuck now doing another task that I'd postponed until after Alpha 2 and redesigning part of the code to help identify the general area that's causing the problem.
So, while I'm actually pretty close on having everything complete, I'm spending more time refactoring something that I'd planned to do later and am being forced to do now. I guess I should be looking at the glass as half-full as I now don't have to do this in the future, but at the same time my general timeline for Alpha 2 has gone out the window.
So because of a bug that I couldn't track down on the new OS I had to do two additional tasks that I'd planned on doing later. This has actually been the general story of my experience with iPhone development. Of course, Apple does tend to schedule all of their upgrades around the June timeframe (because of WWDC), so maybe I should just stop starting apps in April. And then maybe I'll feel like Apple's not spitting in my food.

Monday, June 21, 2010

Surprising Progress

So I got some sleep Friday night after posting up about how crappy I felt. Saturday wasn't bad - I could breathe (mostly) and I had some level of mental alertness. We had an errand to run involving a road trip to Laramie (about 2.5 hours away "by way of the regular highway" (article here and lyrics here). We saw a flyer at Cathy's gymnastics for a dog looking for a new forever home. We called up Susie's mom who agreed to take the dog provided Susie thought it would be a good match. We met the dog (his name is Tank) on Wednesday, thought it would work, and picked him up Friday. Saturday was the hand-off to the mother-in-law in Laramie, so we packed everything up and headed off north. Had a pretty relaxing trip back Saturday night and I crashed pretty hard that night.
By Sunday I was feeling a LOT better, despite being awakened way too early by Cathy (she doesn't quite understand the whole "daddy gets to do what he wants to on Father's Day"). Still, I felt much better Sunday and decided to finish up Dragon Age: Origins (which I did). It was a somewhat hollow victory, though, so I went back a few saves to play a different path through the game. I'll be curious to see what's different about the two paths.
The good thing was by not working on OttoJotts at all on Sunday I was that much more excited about doing it today. I went home for lunch and got some good work in on the game. Makes me wish I didn't need to go back because things were working well. I've got a few screens added at the beginning of the game to allow players to create games. I've done a little bit with the multiplayer stuff, but that's actually not an Alpha 2 item but more like Alpha 4. Still, the basics are there for it. The single player selection is coming together pretty well.
I also touched base with a UI designer to see if she'd be interested and what she'll charge for doing the UI for it. Right now it's pretty cheesy, but it's functional. I'd like this to actually be good (maybe even compete with Words with Friends kind of good) and I know enough about my limitations to know that won't happen if I do it. :)
I've also touched based with Greystripe, a in-game advertiser that does the ads for Words with Friends, and will be looking at incorporating that into the game. That's a later addition as well. Maybe Alpha 3 as Alpha 4 is looking pretty full with the multiplayer games being added.
So, I'm pretty happy with things despite losing an entire weekend (well, one day by choice). I think Alpha 2 release might be this weekend if things keep going well, even if I run into a few bumps on the road. I did realize this weekend that I've been working on this (very) part-time since 29 April. That's kind of scary, actually, but things are progressing. It's just an important personal milestone to get this done and out in the wild. Once that happens, I feel like I can really claim to be an independent game developer. :)

Friday, June 18, 2010

Illness = No Work

So since my production of Patience I've been feeling "not too well". I had some kind of bronchitis thing going on the first week of production, but got on antibiotics and felt awesomely better by the end of the run. Then it came back. Right now I'm finding it hard to breathe while I sit at the computer. And that's after taking Mucinex DM.
One of things I try to avoid doing while ill is coding. I found pretty early on that my thought processes don't operate at peak efficiency and that I end up having to refactor some of the code I write while under the weather. It's not as bad as a CUI (coding under the influence), but it's a close second.
This illness has delayed my work on OttoJotts, but things are progressing. I've got scrolling working properly and added some information about which guess has been posted. I still have several things to finish for this alpha - primarily statistics tracking. I'm doing it locally for alpha 2 and will store it in the DB for alpha 3+. Alpha 3 may incorporate multiplayer or I may punt on that until Alpha 4 - still deciding how much work needs to be done for the current tasks associated with 3.
Overall, I'm just hoping that I'll be getting better and then able to focus on getting the alpha work done. And then get it out to my testers. Or so I hope.

Tuesday, June 1, 2010

Alpha 1 Released!

I went home over lunch (the spousal unit is "not well") and decided to take another stab at the installation. I cleaned everything, rebuilt, and sent it back to her email address. When I unzipped everything and dragged it onto her iTunes it seemed MUCH happier - my icon showed up in her Apps list, which was nice. When I click "Sync" it all installed happily and life was looking much brighter. When I ran it on her iPhone and it actually WORKED, that was great (and it connected to the website to get the word list), life was FAN-FREAKING-TASTIC!
I've packaged everything up and sent it out to my alpha testers who will hopefully be able to install it and test it. And I hope they'll be able to read the help screen. In the interest of just getting the alpha out the door I opted to punt on the scrolling help image. It's a placeholder anyway and I couldn't see continuing to hold up the alpha to make it work when it wasn't going to be in the final project anyway. The existing solution is less-than-optimal, but it's also temporary.
In the meantime, my game is now out in the wild. A momentous day for Otto Von. W00t indeed.

Alpha 1 Updates

Well, it was a busy weekend for the Empire Lyric Players, which meant it was a busy weekend for me (because I'm president of the group). Rehearsal Friday til 10:something-way-too-late, Saturday off (I played a TON of Dragon Age: Origins - definitely needed the break to stave off the pending mental collapse), then move-in on Sunday, which went much faster than I expected. We arrived at noon to help unload and they were finishing getting everything off the trailer into the theatre. WOW. I don't think move-in has ever gone that smoothly or had as many participants (practically the entire cast was there). Then errands on Memorial Day and first rehearsal in the theatre. Hard to believe our show goes up in 2 more days!
But wait - wasn't this a post about Alpha 1 Updates? Why yes, you're right - it is! Thanks for the reminder. So where IS Alpha 1? The short answer is "coming soon". The longer answer is a bit more complicated. I was having any number of problems getting my app debugged. It was working fine in the simulator, but as soon as I installed it on my iPhone it would crash on launch. No warning - just "no longer running". I couldn't attach a debug process, the console log (thank you Xcode Organizer!) showed nothing untoward, NSLog messages showed nothing... I was at a complete loss. I restored my phone to just 3.1.3 and then re-synched with iTunes. Still no love. Then, magically, it started working.
For anyone who's been a developer for any period of time, the "magically disappearing bug" is a frightening thing. Why did it go away? When will it resurface (because without fail it will)? I still can't find anything wrong, though, so it's hard to say it wasn't not some kind of configuration problem, but I'm not happy. I thought I would try to install it on Susie's phone as well to see if it surfaced there (I turned mine into a development device so I could see what was happening, but it didn't help). When trying to install on Susie's phone I got the strangest error:
The application "OttoJotts" was not installed on the iPhone "Susie's iPhone" because an unknown error occurred (0xE8008001).
Whiskey Tango Foxtrot? Why would iTunes not know what the error is? Oh, au contraire, mon frere, but iTunes DOES know what it is. What error 0xE8008001 is telling you is that you have an unsigned application that iTunes won't let you install on an iPhone. In other words, iTunes thinks the application is not a valid App Store or Ad Hoc distribution. Of course the question now is why doesn't iTunes think it's a valid ad hoc distribution? As to that, I'm uncertain at present. I need to dig into why it doesn't seem to think that I'm building an application with the right provisioning certificates. The error I was getting before from her iTunes was that there weren't any valid provisioning profiles for the application, which seemed odd as it was the exact one I was including in the build settings. She's running her iTunes on Windows and I'm on Mac, so that's always a joy, but still I've done it previously without too much trouble. Definitely more digging necessary, but here's the kicker - this is HELL WEEK.
What is Hell Week? In performance parlance, it's the week before a show opens. Every night is a rehearsal and generally you're still working a regular 9-5 (-ish) schedule that week, so you're up at the butt-crack of dawn to get to work, work a full day, then go to the theatre and spend another 5-6 hours at rehearsal. Then back home to bed all to do it again the next day. Good thing the show opens on Thursday. We have a JDBC movie night on Friday and I might end up crashed on the field at Invesco/Mile High. :)
Over the next couple of days I need to figure out what's up with the provisioning profiles and see why this isn't working as I thought. Maybe in a couple of days I'll actually have the Alpha done and out to testers. When I do, I'll make sure to let everyone know via this blog.

Thursday, May 27, 2010

Understanding at last?

So, I was looking at the iPhone Developer Center trying to figure out from the tech notes why symbolicatecrash, which I was reading would be working just fine, was not working just fine. What I believe it is now, though, is that my SDK version is 3.1.2 and my iPhone OS version is 3.1.3. *sigh* Just shows to go you that as a developer you should always stay up-to-date on the latest SDKs when they're released. Now I need to see if there's a way for me to download the old 3.1.3 SDK. Why, you ask? Because of the iPhone SDK 3.2.
The new SDK requires Snow Leopard which I haven't installed yet (I just ordered it). In the interim, I'm just kind of shooting in the dark with what's happening. Given what I've been reading, it seems like that's the issue, which would be nice. If so, it would at least mean that I'm not a complete idiot. :) The worst part is that even if I do get it to symbolicate, I need to find out why it's failing.
Overall it's been a pretty frustrating experience, but at least it looks like things are turning around and this does seem like the most likely answer to the problems I've been experiencing. And it's also not been abundantly clear from the blogs I've been reading what this issue is.
So, there we go. At least for now. *sigh*
Update: I found a link to the old 3.1.3 SDK which I'm downloading now while I wait for Snow Leopard to arrive. I'll at least be able to do iPad development once I get Snow Leopard, but it's not been a big item on my to-do list, so I've delayed. Apparently one version too long. Wish me luck!

Alpha 1 Troubles Continue

I've been trying a variety of different methods to characterize what's happening with my application, but, to date, they've been unsuccessful. I was looking at some crash logs from my phone, but I've been unsuccessful in getting symbolic information for the crash logs. I've been looking online for a solution, but no luck. What I know is that it's not crashing in my code directly - rather, it's buried pretty deep in some core Apple code (which is never terribly helpful). I've been trying to undo the changes I had done to see if that resolves the problem, but, again, no love. I did add some logging to my app and it all seems very happy - my code loads fully and THEN I have a crash.
This is probably the most difficult kind of issue to resolve. First, you don't have anything but the crash logs. Using symbolicatecrash is not an ideal solution to resolving problems. I may need to turn my phone into a dev device and see if I can debug from there. I actually still have several avenues of attack, but they're more alleys than avenues or boulevards. :)
Will keep you updated.

Tuesday, May 25, 2010

Alpha 1 of New Game Delays (sigh)

Well, the first alpha of the new game is just about complete. Most things have gone as well as I'd hoped, although one section of the game was causing a few more fits and starts than it should have had I just bothered to think about it. I chalk it up to my progressing illness which resulted in being practically incapacitated yesterday and unable to breathe. I have asthma and am not unfamiliar with breathing problems, but this was closing in on how I felt when I was hospitalized with pneumonia and some exotic secondary infection modern medical science was unable to identify (gotta love those). Regardless, I resolved the issue moved on with life.
I then got to the final two things I needed to do before I could begin looking at an Alpha - a basic help screen and, you know, actually getting it ON a device. :) I got a basic help screen image typed up and figured I'd just add a UIImageView object with that as the image to a UIScrollView and voila - it'd all just work. But, no. Nothing on the iPhone seems truly simple and this was no exception. I began working through my primary reference book but it was silent on scrolling. Crap. So I began surfing the web hoping to find something - a few ideas, but nothing that actually did what I expected it to do. As of this morning, no change - help is still not scrolling. *sigh* I may need to create a completely separate application to test the theory and then make sure I've dotted all of the i's and crossed the t's in my app to enable everything.
The second part, which I decided to do after punting on the help, was to get it installing on the device. I had already done that with a previous version and figured this wouldn't be a problem. I built it, installed it, sync'd my iPhone, ran it - and it crashed. CRAP! Oh, wait! Glimmer of hope - I was referencing a local file (I was developing sans network at one point and changed the code). Change the code, reinstall, sync iPhone, run app - crash. Whiskey Tango Foxtrot? This was working fine in the simulator... and still does. Okay... Wait - there's some kind of crash log available. Quick search on the web and I find what I need - where it is and what it looks like. And it looks like a symbolic dump of a Windows app with the same level of detail (i.e., none). Wait - what's this "symbolicatecrash" script? It enables you to turn your crash logs into something with actual symbols? Cool. I'll at least know where the crash is. Except that it didn't work. I poked around a little today and think I might have an idea why it's not working as expected, but again - it's delaying Alpha 1. I did try adding some additional checks this morning quickly to see if I could get around what I thought the bug was, but it did nothing. Great...
So, Alpha 1 is practically in the bag. Unfortunately, there are still 2 bugs holding up release to the wild. Okay, it's more of a caged environment, but still. Hoping it will be done in the short term. I would hate to have ANOTHER application for the iPhone that gets stuck in "Alpha Hell".