Just a quick update on a small problem I uncovered. I was working on OttoJotts last night trying to get Beta 1.1 out the door (I did eventually get it out, although it was Beta 1.11) when I stumbled on a problem with the UIScrollView I'm using for the help file. When I created the first Beta 1.0 I ran into an issue with the buttons not working on 4 inch screens (I originally wrote the app for iPhone 3G to give you an idea of how long this has been). I went through all of my xib's in Interface Builder and updated them to use auto layout and - ta da! - everything worked. Except for help.
My help screen has two elements - a UIButton to close the help screen and a UIScrollView to view the incredibly long png I created for the help (it's over 2k pixels in length). When using auto layout with a UIScrollView, the scroll view interprets the setting meaning a slightly different experience than what you'd expect. When I turned off auto layout, the scroll view worked perfectly well and I was able to view all of the help text correctly - with one exception: the UIScrollView was now positioned at the bottom of the interface rather than directly under the button.
I still have some things to work out with the 3.5" and 4" screens so I'm holding off on fixing that until a later date. Still, it's something to keep in mind - UIScrollView and auto layout are not good buddies.
The story of a small development company working on iPhone and Facebook games. You'll find the ups/downs/ins/outs of working on iPhones, Facebook, and general life. Come join the journey!
Monday, April 7, 2014
Saturday, February 8, 2014
Facepalms
Before the holidays, I was really focusing on OttoJotts by trying to finish up what were a dozen or so tasks that needed to be finished before I could release the game. I had determined, based on the lack of response I was getting from my artist on a separate project, that I should focus on something that I had a lot of control over and had made some good progress on completing. After I broke everything down that remained to be done, I found that I had a month or so of work left on OttoJotts to finish it off. I blazed through several different tasks, had to create some new ones, but overall was making some good progress on it. Then the holidays happened.
The Thanksgiving to Christmas period at my house is one of lightly ordered chaos. Catniss has several performances of The Nutcracker with the Colorado Ballet during that time and the spousal unit sings professionally as a caroler for different functions. Toss in a couple of illnesses and the whole time is just ridiculous. I was certain I wasn't going to get much done over the break so I didn't really even bother. And then for Christmas I received Call of Duty: Ghosts, so I had at least a campaign to complete before I could get back to anything. Then it was January and I joined a CoD clan and then we had a clan war and then... Long story short - nothing really happened on OttoJotts from November through January.
When I tried to get back into it, though, I found it more and more difficult to get back into the groove. I found plenty of opportunities to procrastinate and not work on OttoJotts at all - including finding some data from fiksu.com about iOS 7 adoption (you need to check out that site). Given that adoption rates are around 82% for iOS 7 and I've been having trouble getting OttoJotts to draw properly in iOS 7 (something changed in the basic UIView stack I still don't understand), it put even more of a downer on wanting to work on it. Plus, I had something else potentially brewing at the 9-5, so my motivation was a little more depleted than I thought it could be (without being completely disinterested).
BUT (and it's a big but), that's when things started heading south. The "something else" dried up and I started feeling like the 9-5 isn't going to be terribly viable for much longer (which suxors hardcore). Suddenly, without really feeling like I was up to it, I decided that I need to get back to doing what I should be doing, even if I didn't feel like it. I started checking out what needed to happen with OttoJotts and just couldn't, for the life of me, actually open up the project. I'm just a little burned out on it. It was supposed to be a pretty quick little app that would go into the App Store and then maybe make a buck or two. Instead, it's turned into months and months of continuing development that don't quite seem to be going as well as I'd hoped. All of the backend work is challenging for me (I'm a front-end - but not UI - guy). While there are still only about 80-100 hours of work left on it, I think I'm going to put it on back burner while I reinvigorate with something else for a while.
I thought I had been recharging a bit by playing some other games and taking some time off, but I think it's had the opposite effect. It's put new and interesting distractions in my path to getting anything done for real. Unlike some acquaintances, I haven't hit it big on the App Store and can't just semi-retire at the moment. Until then, it's nose to the grindstone no matter how distracted I want to be.
It's not that I don't love doing this - I do - but it's that I just find myself in the same position over and over again: unable to complete some portion of the game because I lack some skill. I need to either acquire said skill or find someone who is willing to help - and unfortunately I haven't found people who are likeminded about doing this. Or I do and they totally flake. *sigh* As a result, I have a hard time being motivated to work on things.
All of this said, I have about 4 games that are in various stages of completion. If I can just get ONE of them done and out, I think I can make enough to either hire the people to finish the others or perhaps attract enough interest to get people engaged. And then I'd have a small group of games earning a little money in the store for me and that might be enough to get the ball rolling. Which would be totally cool.
So, I am once again ditching my current project (OttoJotts) for something else - for now. Hence the facepalm (to left). It's been a rough few months and I am not at all motivated to do this, but I am motivated to not be dependent upon a salary. I'm not thinking of quitting any time soon, but going to work when you don't have to makes the trip a whole lot easier and more pleasant. And THAT'S the goal - to have the flexibility to do what I want to do when I want to do it. Don't we all?
![]() |
| Catniss in Nutcracker |
When I tried to get back into it, though, I found it more and more difficult to get back into the groove. I found plenty of opportunities to procrastinate and not work on OttoJotts at all - including finding some data from fiksu.com about iOS 7 adoption (you need to check out that site). Given that adoption rates are around 82% for iOS 7 and I've been having trouble getting OttoJotts to draw properly in iOS 7 (something changed in the basic UIView stack I still don't understand), it put even more of a downer on wanting to work on it. Plus, I had something else potentially brewing at the 9-5, so my motivation was a little more depleted than I thought it could be (without being completely disinterested).
BUT (and it's a big but), that's when things started heading south. The "something else" dried up and I started feeling like the 9-5 isn't going to be terribly viable for much longer (which suxors hardcore). Suddenly, without really feeling like I was up to it, I decided that I need to get back to doing what I should be doing, even if I didn't feel like it. I started checking out what needed to happen with OttoJotts and just couldn't, for the life of me, actually open up the project. I'm just a little burned out on it. It was supposed to be a pretty quick little app that would go into the App Store and then maybe make a buck or two. Instead, it's turned into months and months of continuing development that don't quite seem to be going as well as I'd hoped. All of the backend work is challenging for me (I'm a front-end - but not UI - guy). While there are still only about 80-100 hours of work left on it, I think I'm going to put it on back burner while I reinvigorate with something else for a while.
I thought I had been recharging a bit by playing some other games and taking some time off, but I think it's had the opposite effect. It's put new and interesting distractions in my path to getting anything done for real. Unlike some acquaintances, I haven't hit it big on the App Store and can't just semi-retire at the moment. Until then, it's nose to the grindstone no matter how distracted I want to be.
It's not that I don't love doing this - I do - but it's that I just find myself in the same position over and over again: unable to complete some portion of the game because I lack some skill. I need to either acquire said skill or find someone who is willing to help - and unfortunately I haven't found people who are likeminded about doing this. Or I do and they totally flake. *sigh* As a result, I have a hard time being motivated to work on things.
![]() |
| My favorite captain |
So, I am once again ditching my current project (OttoJotts) for something else - for now. Hence the facepalm (to left). It's been a rough few months and I am not at all motivated to do this, but I am motivated to not be dependent upon a salary. I'm not thinking of quitting any time soon, but going to work when you don't have to makes the trip a whole lot easier and more pleasant. And THAT'S the goal - to have the flexibility to do what I want to do when I want to do it. Don't we all?
Saturday, September 14, 2013
Cautions and issues with iOS 7
I've been working on OttoJotts quite a bit over the past few weeks, making some great progress. One thing I've had to do is perform all of my testing in iOS 6 and earlier because I'd been seeing weird display problems with iOS 7. I thought it might have been just some issues with the betas of iOS but now that I have the gold master of iOS 7, I'm seeing the same problems. And now you can too:
What you're seeing is what the screen looks like in iOS 6 and 7, side-by-side comparison. Each letter is a label and I load a box and place it behind each label. On everything but iOS 7 it displays properly as you can see. I thought it might have been a problem with the background color on the label being something other than clearColor, but that doesn't seem to be the case either. I don't know why the boxes aren't displaying at all right now. Definitely going to require some additional work before I put this out to the App Store.
I am pretty surprised by this pretty major change in iOS. This seems like pretty basic functionality that has been changed. I know that a lot of it is because of the new UI paradigm that Apple is trying to introduce, but this seems like quite a major change in implementation from previous versions. What this seems to me is that every app developer is now going to have to be extremely careful about this upgrade and what it means to their apps.
Good luck with your apps.
![]() |
| iOS 6 on left, iOS 7 on right |
I am pretty surprised by this pretty major change in iOS. This seems like pretty basic functionality that has been changed. I know that a lot of it is because of the new UI paradigm that Apple is trying to introduce, but this seems like quite a major change in implementation from previous versions. What this seems to me is that every app developer is now going to have to be extremely careful about this upgrade and what it means to their apps.
Good luck with your apps.
Labels:
development,
graphics,
iOS,
ottojotts,
user interface
Sunday, September 8, 2013
Crawling toward the goal line
For several months I've been using a Kanban board (via www.kanbanflow.com - a great FREE resource) to track the work I need to get done on OttoJotts. It's been helpful seeing both the work that I've been getting done (very minimal) and what's still left to do (big and growing daily). That said, it's been nice going through and moving things from Ready to Pull to In Progress to Done. I'm keeping my WIP (work in progress) limit to one because, yeah - I'll get distracted if it's more than that.
Almost all of the work left to do is around the two player game. I will need to go back and sort out all of the bad decisions I made around single player games when I get into Beta, but until I complete these remaining 11 stories, that's not worth my time. The nice thing about the board is that I can see how much time I've estimated it will take to complete each story. And when I sum them together, I get 176 hours remaining. Which is actually pretty cool. I am, in theory, 4.25 weeks from being done with OttoJotts. Assuming that I worked 40 hours a week (which I don't) and that I haven't terribly over- or underestimated any of these stories (which is kinda likely).
STILL! 176 hours is actually reasonable. There is real potential to be done with this thing before I sprout daisies. And bringing together a lot of technologies and pieces that I have only some familiarity with (and certainly wouldn't claim proficiency or expertise). Well, beyond using agile methodologies to track the work (and even that was a latecomer to the project). Overall I'm feeling, well, accomplished.
I had this gigantic negativity about the project when I put it on the back-burner last year. The size of the work that needed to be done seemed ginormous and insurmountable. But when I picked it up again and poked at it I saw some small successes and those kept building into other successes - small, to be sure, but present. And then when I finally took an accounting of all of the things that I wanted to complete before I could explore the possibility of releasing the game - 176 hours were all that remained. And out of those 176 hours there are 80 hours that I put in for what I consider will be some large efforts - things I don't have any idea how to do. The good thing is that they're down well-trodden paths - I just need to find the guide map and make my way down those paths.
So, it's been a LOOOOOONG winding road getting here, but the end really truly is in sight. And thanks to tools like KanbanFlow I've been able to focus on prioritizing the work I need to do next and focus on the current item only. And, hopefully, this is the beginning of something really exciting.
![]() |
| Part of my Kanban board |
STILL! 176 hours is actually reasonable. There is real potential to be done with this thing before I sprout daisies. And bringing together a lot of technologies and pieces that I have only some familiarity with (and certainly wouldn't claim proficiency or expertise). Well, beyond using agile methodologies to track the work (and even that was a latecomer to the project). Overall I'm feeling, well, accomplished.
I had this gigantic negativity about the project when I put it on the back-burner last year. The size of the work that needed to be done seemed ginormous and insurmountable. But when I picked it up again and poked at it I saw some small successes and those kept building into other successes - small, to be sure, but present. And then when I finally took an accounting of all of the things that I wanted to complete before I could explore the possibility of releasing the game - 176 hours were all that remained. And out of those 176 hours there are 80 hours that I put in for what I consider will be some large efforts - things I don't have any idea how to do. The good thing is that they're down well-trodden paths - I just need to find the guide map and make my way down those paths.
So, it's been a LOOOOOONG winding road getting here, but the end really truly is in sight. And thanks to tools like KanbanFlow I've been able to focus on prioritizing the work I need to do next and focus on the current item only. And, hopefully, this is the beginning of something really exciting.
Labels:
agile,
development,
methodology,
ottojotts,
personal,
php,
testing
Thursday, August 1, 2013
Strangeness with cryptography
I've been working on user logins for OttoJotts over the past few days. I made quite a few changes to the back-end and now need to make sure the app on the device can access the database. Unfortunately, I've been running into a bit of strangeness around the cryptography that, quite honestly, really makes me "wanna go Hmmmm". And here's what's going on.
I originally compiled this application for iOS 4.2 because I was looking for the broadest acceptable application I could make. And things seemed to be okay. But when I started compiling for other versions (different makes of iPhone and different iOS versions), I started running into problems matching the hashed password I created with the one in the database. At first, I thought I might have just entered the password incorrectly. Then I thought that perhaps I'd forgotten the password I used. But as I've been experimenting, I've been seeing some extremely odd behavior. I've been using the awesome HashValue.m/.h from Matt Gallagher over at CocoaWithLove.com. I thought it was going fantastically until this weirdness. So, here's the weirdness:
I originally compiled this application for iOS 4.2 because I was looking for the broadest acceptable application I could make. And things seemed to be okay. But when I started compiling for other versions (different makes of iPhone and different iOS versions), I started running into problems matching the hashed password I created with the one in the database. At first, I thought I might have just entered the password incorrectly. Then I thought that perhaps I'd forgotten the password I used. But as I've been experimenting, I've been seeing some extremely odd behavior. I've been using the awesome HashValue.m/.h from Matt Gallagher over at CocoaWithLove.com. I thought it was going fantastically until this weirdness. So, here's the weirdness:
- iOS 5.0 hashed password:
- 688c25748beb3803ad93d8988517c460bb15b6373d0d67ad7167726a0ecafaa6
- iOS 5.1 hashed password:
- 1199821a832d0101cec47672ad52dfeba2fc72e9e4afbe1d9d2f53918d9fb581
- iOS 6.0 hashed password:
- 0640e82d98943f4856dc687618e458178caaf696151235271f689d634f861c69
- iOS 7.0 hashed password:
- c19c441adbd2f45366d28a9dcb45cb9858bc721f09d11cd958a7b065a4976f19
I have to assume that I'm doing something wrong here. I mean - SHA256 and MD5 should be the same result regardless of what kind of OS is calculating it, otherwise it would be worthless as a check. But I'm definitely seeing different behavior from the different iOS versions. Changing devices doesn't seem to change anything - just the iOS version.
I dug into the HashValue.m code and all it does is call CC_MD5 and CC_SHA256, which is standard iOS. So I'm a bit perplexed, at this point, as to what I'm doing wrong. If anyone has any idea what's going on, I would really appreciate what you think is the problem.
Update: 01 Aug 13 @ 21:51
Looks like the wrapper I was using had some oddness about it. When I changed over to calling it directly, everything worked perfectly - I get the same hash every time, regardless of the OS version. Which is exactly what I expected. So now that I've resolved that, I need to stick all of this stuff in the keychain and I can call it a day. F*k me.
I dug into the HashValue.m code and all it does is call CC_MD5 and CC_SHA256, which is standard iOS. So I'm a bit perplexed, at this point, as to what I'm doing wrong. If anyone has any idea what's going on, I would really appreciate what you think is the problem.
Update: 01 Aug 13 @ 21:51
Looks like the wrapper I was using had some oddness about it. When I changed over to calling it directly, everything worked perfectly - I get the same hash every time, regardless of the OS version. Which is exactly what I expected. So now that I've resolved that, I need to stick all of this stuff in the keychain and I can call it a day. F*k me.
Labels:
cryptography,
hashing,
ottojotts
Tuesday, July 30, 2013
Lessons learned
So last night I was working on getting a singleton1 created to store the player data so that I don't have to track it through all the different view controllers in OttoJotts (there are quite a few). I had done it with the dictionary already and that was working beautifully, so I thought this would be a piece of cake. I created the new class (using NSObject as the base), pretty much copied and pasted the code, made the requisite changes, and compiled. And I got this cryptic message:
I was a little surprised. I had declared that PlayerAccountData was a singleton. I mean, hadn't I just copied and pasted the code? Hadn't I made the changes that I needed to make? I went back and checked - yes, everything looked correct and all the changes had been made. What the heck was going on here? Why would this not compile? Obviously I'd done something wrong. Oh wait - this was the Xcode 5 developer preview; could that mean something? I searched online to see what I could learn and was stumped. Nothing seemed to work. And no one else seemed to have seen this. What on earth was going on?
Then I noticed that things seemed "not quite right" in the file. And here's what I mean by "not quite right":
1. The SynthesizeSingleton macro I'm using is from the incredibly awesome Matt Gallagher of CocoaWithLove.com. The singleton code is located here.
![]() |
| The unusual error |
Then I noticed that things seemed "not quite right" in the file. And here's what I mean by "not quite right":
![]() |
| Comparison of the new and old code |
The original code had coloring for the SYNTHESIZE_SINGLETON_FOR_CLASS macro which the new code didn't. Now what the hell did that mean? Why didn't it recognize it as regular code? I tried adding the #import for the SynthesizeSingleton.h - no luck. I tried removing it - no luck. So back to the web! And nothing. And I had a sad face.
Something made me open the right-hand side bar for the file - and that's when I noticed something interesting. There was a check box under the section called "Target Membership". It was unchecked for the new file. But right there was my app logo next to the check box. And when I clicked it? The syntax coloring changed for SYNTHESIZE_SINGLETON_FOR_CLASS! Well, how 'bout them apples?
So what was the lesson learned or, in my case, re-learned? Really check to see what's happening with the error messages you get from Xcode. Sometimes they seem cryptic but actually contain the exact information you need to fix the error. But I think in this particular case it means that sometimes the differences between what you expect and what you get may be slightly hidden from you. I didn't even think about the right-hand properties sidebar for my .m file - and it didn't dawn on me that when I added the file to the project that it wouldn't be appropriately associated. But the next time I add a class, I'm going to be double-checking to make sure that the target membership is set correctly. And maybe this saves you a little time in the end too.
Happy coding.
1. The SynthesizeSingleton macro I'm using is from the incredibly awesome Matt Gallagher of CocoaWithLove.com. The singleton code is located here.
Labels:
debugging,
development,
ottojotts,
xcode
Sunday, July 28, 2013
OttoJotts REBORN!
Once, a long time ago in a land far, far away, there lived a wanna-be game developer who decided oh-so-frivolously that he would write a game based on a game from his youth. One that he had played with his very erudite mother and worked wonders to both improve his vocabulary and his spelling. He thought that he could write the basic game in a few weeks and then the multiplayer version in a few months and be done by the end of summer. But alas - our wanna-be game developer had a case of the hubris.
He was able to complete the core game mechanics in a week or so and then spent far, far too many days working on getting the user interface to work. For, you see, our developer wasn't "graphically inclined" (read: his artwork suxors). So he spent many a day trying to get some basic things looking good enough to play. And then - amazingly - the single player version was complete! And there was much rejoicing!
As he began to work on the two player version, however, he stumbled and stuttered and fell flat on his face, for his game required a "back-end" (read: database and middleware to talk between the device and the database). And he despaired because again, alack, his database skills were "lackluster" at best and his middleware skills were, perhaps, rated "mediocre". He worked diligently, though, trying to connect all of the pieces. And finally, he got some of the information he wanted to get from the device to the database and back again! And there was more rejoicing!
But then came the actual "two player" work. And there was much gnashing of teeth and grunting of exertion and swearing of curses. And the developer grew weary and tired and despaired of ever completing his opus. He feared that perhaps he would always just be a "wanna-be" game developer.
And then the Great Fruit From Which A Bite Has Been Taken decided that the manner in which he getting information from and to the database was WrongTM. And it was deprecated (read: removed). And the developer was despondent. Not only would he have to actually finish the work to allow two player games to work but he would also have to change all of the code that worked to do that work. And he despaired. And exerted. And cursed. And gave up.
One day, he found that his current hosting provider was deprecating the product he had grown to love these past 10 years and would require that he move to one that was far more limited or one that was WAY more complicated. He decided to move his website and his databases and his code to a new provider who offered a product more in line with his old product. And it was good.
Then, while distracted with another as-yet-fruitless pursuit, he decided to open up the old code and see whether it was possible to make the needed changes for the new database host and make sure he followed the rules of the Great Fruit From Which A Bite Has Been Taken. After looking at the code and the middleware he decided that it wouldn't be that bad after all. And he poked and prodded the middleware, making a tweak here and a revision there until - it worked! And there was astonishment!
And our poor, despondent wanna-be game developer is no longer so despondent (although he is much poorer). He had Purpose. He had Intent. He had - a real opportunity to actually get back to finishing the damn thing.
So now, to you, my gentle reader who has so patiently put up with this long and purposeless fable, I make claim to the Twitterverse, the Facebookverse, and general Internetverse that OttoJotts is REBORN! And it WILL. BE. DONE! (By Halloween.) (No seriously, I mean this.) (Stop laughing.) (Dicks.)
He was able to complete the core game mechanics in a week or so and then spent far, far too many days working on getting the user interface to work. For, you see, our developer wasn't "graphically inclined" (read: his artwork suxors). So he spent many a day trying to get some basic things looking good enough to play. And then - amazingly - the single player version was complete! And there was much rejoicing!
As he began to work on the two player version, however, he stumbled and stuttered and fell flat on his face, for his game required a "back-end" (read: database and middleware to talk between the device and the database). And he despaired because again, alack, his database skills were "lackluster" at best and his middleware skills were, perhaps, rated "mediocre". He worked diligently, though, trying to connect all of the pieces. And finally, he got some of the information he wanted to get from the device to the database and back again! And there was more rejoicing!
But then came the actual "two player" work. And there was much gnashing of teeth and grunting of exertion and swearing of curses. And the developer grew weary and tired and despaired of ever completing his opus. He feared that perhaps he would always just be a "wanna-be" game developer.
And then the Great Fruit From Which A Bite Has Been Taken decided that the manner in which he getting information from and to the database was WrongTM. And it was deprecated (read: removed). And the developer was despondent. Not only would he have to actually finish the work to allow two player games to work but he would also have to change all of the code that worked to do that work. And he despaired. And exerted. And cursed. And gave up.
One day, he found that his current hosting provider was deprecating the product he had grown to love these past 10 years and would require that he move to one that was far more limited or one that was WAY more complicated. He decided to move his website and his databases and his code to a new provider who offered a product more in line with his old product. And it was good.
Then, while distracted with another as-yet-fruitless pursuit, he decided to open up the old code and see whether it was possible to make the needed changes for the new database host and make sure he followed the rules of the Great Fruit From Which A Bite Has Been Taken. After looking at the code and the middleware he decided that it wouldn't be that bad after all. And he poked and prodded the middleware, making a tweak here and a revision there until - it worked! And there was astonishment!
And our poor, despondent wanna-be game developer is no longer so despondent (although he is much poorer). He had Purpose. He had Intent. He had - a real opportunity to actually get back to finishing the damn thing.
So now, to you, my gentle reader who has so patiently put up with this long and purposeless fable, I make claim to the Twitterverse, the Facebookverse, and general Internetverse that OttoJotts is REBORN! And it WILL. BE. DONE! (By Halloween.) (No seriously, I mean this.) (Stop laughing.) (Dicks.)
Labels:
development,
iOS,
iTunes,
ottojotts,
personal
Sunday, April 21, 2013
Simple diversions
I've been working on my game for a bit over the past few weeks, but have run into something of a roadblock. I don't know whether I want to continue on this path - I'm having a hard time "finding the fun" in it. Plus, the "real job" has been a real Debbie Downer, so I've been in a bad mental state. Not sure if the problem I'm experiencing is general malaise or if it's indicative that the game really isn't that fun. I've been playing some Modern Warfare 3, Civilization V, and Skyrim (trying to level my blacksmithing to 100) trying to recharge my enthusiasm. Not really helping so far. Although I did get my blacksmithing to 100 and then made it "Legendary" which reset it. Not really sure what the benefit there is, yet...
I attended the Mile High Agile conference on Friday and one of the sessions was about "gamification" in the agile space. A lot of the context was "how do you insert game elements into your teams so that they stay engaged". He provided some examples like LinkedIn's profile completeness (you want to be at 100%, right?) and the Nike+ product (which I'd heard about in a different context) tracking/sharing/comparing against your friends. There are some game elements in there to be certain. I'm not sure what elements of gamification would work at the 9-5, but the jarring reminders about basic game design left me contemplating the game I'm writing. Some of the basic elements (progression of difficulty, activity loops, etc.) just really aren't there. Is this because I'm failing to write something of quality or is it because there are different elements? What is the "fun"? How hard/easy is it to "find the fun"? Will it end up being the same game over and over again (and therefore boring) or will people stay engaged? How might I make the game continually challenging?
All of this was swimming through my head all weekend and I wasn't really any closer to resolving it until actually writing it out in this blog. I have some ideas about progression now. I had already decided on some kind of "ranking" system, but that was just a rudimentary tracking system based on the number of games you'd played successfully. But the difficulty of the game never changed - until now. I think I know how the single-player game can be more dynamic and grow with the player. Nothing fancy, mind you - but enough to make it something someone might be able to start with and then get better at over time. Not counting the multi-player version, of course (which will be hot-seat only for now, I've decided - back-ends and me are just not working right now).
So for now I'm working on the fully-expanded version and will then winnow it down for the first time players. But the point is that I'm now feeling a little more energized about working on this. Sometimes all it takes is a conversation with yourself to get back on track. Owen Goss, the main guy at Streaming Colour Studios, tweeted me this morning (whilst I was in the depths of whining about my un-developed/un-released software) that I needed to just "ship it!". And he's absolutely right. Funk over - development restarting. Thanks Owen.
I thought I'd leave this here, though. It's my Xbox Gamer Card and shows how much (or how little) I'm playing. And if you have an Xbox live account and want to kick my ass (not a hard thing anymore), maybe I'll see you online.

I attended the Mile High Agile conference on Friday and one of the sessions was about "gamification" in the agile space. A lot of the context was "how do you insert game elements into your teams so that they stay engaged". He provided some examples like LinkedIn's profile completeness (you want to be at 100%, right?) and the Nike+ product (which I'd heard about in a different context) tracking/sharing/comparing against your friends. There are some game elements in there to be certain. I'm not sure what elements of gamification would work at the 9-5, but the jarring reminders about basic game design left me contemplating the game I'm writing. Some of the basic elements (progression of difficulty, activity loops, etc.) just really aren't there. Is this because I'm failing to write something of quality or is it because there are different elements? What is the "fun"? How hard/easy is it to "find the fun"? Will it end up being the same game over and over again (and therefore boring) or will people stay engaged? How might I make the game continually challenging?
All of this was swimming through my head all weekend and I wasn't really any closer to resolving it until actually writing it out in this blog. I have some ideas about progression now. I had already decided on some kind of "ranking" system, but that was just a rudimentary tracking system based on the number of games you'd played successfully. But the difficulty of the game never changed - until now. I think I know how the single-player game can be more dynamic and grow with the player. Nothing fancy, mind you - but enough to make it something someone might be able to start with and then get better at over time. Not counting the multi-player version, of course (which will be hot-seat only for now, I've decided - back-ends and me are just not working right now).
So for now I'm working on the fully-expanded version and will then winnow it down for the first time players. But the point is that I'm now feeling a little more energized about working on this. Sometimes all it takes is a conversation with yourself to get back on track. Owen Goss, the main guy at Streaming Colour Studios, tweeted me this morning (whilst I was in the depths of whining about my un-developed/un-released software) that I needed to just "ship it!". And he's absolutely right. Funk over - development restarting. Thanks Owen.
I thought I'd leave this here, though. It's my Xbox Gamer Card and shows how much (or how little) I'm playing. And if you have an Xbox live account and want to kick my ass (not a hard thing anymore), maybe I'll see you online.
Labels:
conferences,
development,
personal,
process
Monday, January 21, 2013
UITableViewCells and Forgotten Wisdom
I've been playing around with a new game for my daughter based on an old game called Electronic Detective. I'm actually making a version of it for her to play (since my old solid state system, for some reason, only plays about half a game before crashing out). I had originally planned on making everything fit onto a single screen (which would have been better on iPad, but I'm a sucker for pain which is why I'm making it for iPhone), but decided to be considerate and moved from a single UIViewController view to a new UITableView layout. But the new version of Xcode makes creating UITableViewCells a little, um, wonkier than I remembered.
NB: I'm sure this is all 1,000,00% easier with storyboards, but I'm not using them as I'd like to target devices more than 6 months old. And yes, that was some slight sarcasm.
The first thing I ran into is that when you add a UITableViewCell .h/.m to your project, it doesn't allow you to create a .XIB with it. You need to create the .XIB separately. Then, the thing I've learned, is that you need to set the class for the VIEW to be the new .h/.m class name you selected. Do not set the File Owner to be the new class - leave it as UITableViewCell.
If you don't do that and leave the view as the UITableViewCell or if you set the File Owner to be the new class, you're likely to run into a dreaded "this class is not key value coding-compliant for the key XXXX" error. This is not terribly useful but some searching on slashdot and other places guided me in the right direction. If you've come here because you searched for that and you're using UITableViewCells, then here is likely what you're seeing as a problem.
This is one of those problems that I continue to stumble upon as I work through things only periodically. I forget some of the tricks and tips I've learned previously. But as my spousal unit and I have decided that she will not be returning to her job at Lockheed-Martin (as they have recently changed their leave-of-absence policies denying her the ability to take a second year off to watch our illness-prone son), I need to start getting some more titles in the App Store - and quickly. Given that, I will be working more feverishly to get things completed and released and will be sharing far more on this blog than I have been of late. And I will hopefully be retaining more of this forgotten wisdom.
Wish me luck!
NB: I'm sure this is all 1,000,00% easier with storyboards, but I'm not using them as I'd like to target devices more than 6 months old. And yes, that was some slight sarcasm.
The first thing I ran into is that when you add a UITableViewCell .h/.m to your project, it doesn't allow you to create a .XIB with it. You need to create the .XIB separately. Then, the thing I've learned, is that you need to set the class for the VIEW to be the new .h/.m class name you selected. Do not set the File Owner to be the new class - leave it as UITableViewCell.
If you don't do that and leave the view as the UITableViewCell or if you set the File Owner to be the new class, you're likely to run into a dreaded "this class is not key value coding-compliant for the key XXXX" error. This is not terribly useful but some searching on slashdot and other places guided me in the right direction. If you've come here because you searched for that and you're using UITableViewCells, then here is likely what you're seeing as a problem.
This is one of those problems that I continue to stumble upon as I work through things only periodically. I forget some of the tricks and tips I've learned previously. But as my spousal unit and I have decided that she will not be returning to her job at Lockheed-Martin (as they have recently changed their leave-of-absence policies denying her the ability to take a second year off to watch our illness-prone son), I need to start getting some more titles in the App Store - and quickly. Given that, I will be working more feverishly to get things completed and released and will be sharing far more on this blog than I have been of late. And I will hopefully be retaining more of this forgotten wisdom.
Wish me luck!
Sunday, December 30, 2012
Care when posting from the web
I've been working on a new application (Electronic Detective for my daughter) which will be the basis for a longer-term game effort and ran into a strange thing. I decided that how I was going to be doing the UI for a particular portion of the game was just incredibly clunky. I had remembered a piece of information that needed to be included and rather than shoehorn it in, I decided to take a step back and see what made the most sense. In this case it was changing things from a static UIView to a UITableView. This opened up a lot of potential real estate and made it possible to do some things I was struggling to fit on the screen before.
I was searching to find the best way to get UITableViewCells working with the new Xcode (4.5) since they've sort of changed how they operate since last I'd done one (a long time ago - in a galaxy far, far away). I found a good sample from a blog post and decided to just copy/paste and modify the sample code. And things were fine - until I got a very strange build error - "unexpected '@' in program". Um, whiskey tango foxtrot was that? I searched a bit more and the answers proposed didn't seem to really address my particular error. Here was the offending code (from a code blog I found):
I replaced all six quotes and things started working the way I expected. So, as a word of caution, Xcode apparently will maintain some special characters when you paste code from other sources. Make sure that if you're pasting that you double-check the characters. If things don't look correct to you, they probably aren't. It may be a bit weird, but it may be worth your effort to retype some of it manually in the editor to see if it's a problem with the paste or with the code. You could save yourself a little mental anguish by trying a couple of simple things. Good luck and happy coding.
I was searching to find the best way to get UITableViewCells working with the new Xcode (4.5) since they've sort of changed how they operate since last I'd done one (a long time ago - in a galaxy far, far away). I found a good sample from a blog post and decided to just copy/paste and modify the sample code. And things were fine - until I got a very strange build error - "unexpected '@' in program". Um, whiskey tango foxtrot was that? I searched a bit more and the answers proposed didn't seem to really address my particular error. Here was the offending code (from a code blog I found):
There didn't really seem to be anything wrong. The highlighted lines were the ones causing the problem and I couldn't really see a problem. Each of the literals was perfectly correct. What the hell was going on with this code? Then I stumbled upon a stackoverflow question and answer that provided a little insight. What was weird about the editor was that it wasn't showing the text formatted as "text" - it was just showing as black text, not the typical red you'd see. Then I read the part about the "smart quotes". I replaced the first "quote" with a regular "quote" and the text higlighted. That's when I realized I must have pasted in smart quotes and that's what was causing the problem.- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{static NSString *CustomTableCellIdentifier = @”CustomTableCellIdentifier”;UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CustomTableCellIdentifier];if(!cell){NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@”CustomCell” owner:self options:nil];if(nib.count > 0){cell = self.customCell;}else{NSLog(@”failed to load CustomCell nib file!”);}}
I replaced all six quotes and things started working the way I expected. So, as a word of caution, Xcode apparently will maintain some special characters when you paste code from other sources. Make sure that if you're pasting that you double-check the characters. If things don't look correct to you, they probably aren't. It may be a bit weird, but it may be worth your effort to retype some of it manually in the editor to see if it's a problem with the paste or with the code. You could save yourself a little mental anguish by trying a couple of simple things. Good luck and happy coding.
Labels:
debugging,
development,
iOS,
objective-c,
user interface,
xcode
Subscribe to:
Posts (Atom)






