Showing posts with label ottojotts. Show all posts
Showing posts with label ottojotts. Show all posts

Monday, April 7, 2014

One more gotcha

As I was writing about UIScrollView and auto layout I remembered another problem that gave me apoplectic fits last night. I had just published OttoJotts Beta 1.1 out onto TestFlightApp.com (one of the greatest resources for developers) and found a small bug. I went in, fixed the issue, recompiled and got a very strange error. I was able to build the application, create the archive (Product | Archive), and distribute it, but when I tried adding it to TestFlightApp it would prevent me saying that a required flag in the Entitlements.plist wasn't set.
This perplexed me because I had just done this not an hour earlier with no problem - why was it now beginning to give me flak? I tried thinking through what had changed - just code, I thought - and what might now be causing the problem. "Fine," I thought. "I'll add the damn flag." But I couldn't. Well, now what?
I thought the problem might have been associated with the different provisioning profiles I had set up, so I decided to clean them out. I went up on to my developer account, removed some old, expired certificates and some newer, active (but unused) certs. Then I went back to Xcode and synched my account. It looked like everything got set up properly, so I went back and tried to compile. Success. Then I tried to archive. Failure. And the failure was weird - it couldn't find a provisioning profile. I had cleaned up several and had specifically built using one profile but it was trying to find another one. What the heck was going on?
I searched the interwebs and came upon something in the Xcode project file. I think it was on stackoverflow.com that I found the solution, but I apparently needed to remove some lines from the project file that were referencing the old profile. I made my changes and tried it again - and everything was happy. Even when I put it up on TestFlightApp it went up seamlessly. Yay. *headdesk*
What's the lesson from this little excursion? Perhaps to be careful about when and where you manage your profiles. Or perhaps it's just to be a little wary of how well Xcode integrates with the developer center. I wish I could say it's a matter of reading the whole error message, but in this particular case it wasn't useful in the slightest. Good luck and happy coding.

Autolayout and UIScrollView

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.

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.
Catniss in Nutcracker
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.
My favorite captain
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?


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:
iOS 6 on left, iOS 7 on right
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.

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.
Part of my Kanban board
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.

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:
  • 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.

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:
The unusual error
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":
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.

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.)

Saturday, May 19, 2012

Using Kanban for Work


I've been using agile development methodologies (Extreme Programming (XP), RUP, Scrum, etc) for over a decade now. In every job I've had in that time I've touted the benefits of using agile rather than whatever process was prevalent (usually just basic waterfall). In some cases the teams totally bought into it and saw fantastic productivity improvements (like a 300% increase at one company). I've had grassroots support in the trenches only to have senior management balk at it ("too hard to track", etc. - the typical NIH issues). In some cases, the team decided to implement it anyway. Other times the team thought they knew the technology but just ended up with iterative waterfall (smaller waterfall cycles).
Example KanbanFlow board
For all of my work with Otto Von I've done agile in some way. I've been doing primarily XP with some modifications given I'm a one-man shop. But lately Kanban has been getting a lot of traction in my mind and I've just started using an online Kanban board (see this post for a little more about it). What I like about Kanban is that it's really better adapted to how I need to work and what I focus on from an agile perspective - take on a small chunk of work, complete it, move on to the next.
A slice of cake is like a story
So what does Kanban offer? First, as in all agile methodologies, you start with decomposing the work that needs to be done into small pieces. The key concept is to look at the entire project as a cake that you cut into vertical slices. In most applications there are layers that need to be built (back-end, UI, storage, database, etc). With the slice, you focus on doing all of the work on the layers at one time in the slice while providing some small element of value to the project. In the picture above you can see that I've got stories like "Add Friend". These require UI changes. back-end code, and DB changes. That's my slice for that piece of work. These can sometimes relate to "functionality" or "features", but traditionally features are larger than a story would allow.
Your first column is usually the "backlog" or "To Do" list. These are the stories that you've started to define but aren't really complete enough to really consider for developing. Ideally you prioritize the backlog so you can quickly identify those stories that you need to finish defining first. Your "Ready to Pull" list are the stories, in priority order, that can be worked immediately if you have the bandwidth. The "In Progress" is just that - things that you are actively working. Sometimes called your "WIP" (work in progress), this should contain only those stories that you can work on and complete in two weeks (the standard iteration/sprint length). This insures that you don't try to take on multiple tasks that de-focus you from working something through to completion. Finally, when you've completed a story you move it to the "Done" list. It's pretty straight-forward, but the challenge is making stories/slices that are usable and small enough. It takes a lot of practice and even after a decade I struggle sometimes.
Kanban allows you to have multiple work items in process (your WIP limit). For me that's generally one. I need to focus on that one thing, get it completed, and move on to the next. With a larger team than I have (i.e., more than one),  your WIP limit will be larger. Using the Kanban board lets me prioritize the work that needs to be done. I can add new stories, shift priorities - all things that are important in running a small project.
KanbanFlow, the free(!) online board I'm using doesn't have some typical user story fields (and no, I don't get a kickback for rating them so highly, but maybe I should; are you listening, KanbanFlow?!). For instance, it tracks time in hours not points. I guess you could use the "hours" field as a "points" field, but overall it's a small thing. So far I am very pleased with the software and able to work around (or ignore) the things I don't require.
If you're looking to get some focus on your work, Kanban is certainly one methodology that you should explore. And KanbanFlow is a very good free service should you choose that direction. Good luck and happy coding.

Wednesday, April 25, 2012

OttoJotts and other stuff

Been working on the back-end pieces of OttoJotts over the past few weeks. It's been slower than I'd hoped, both because I'd run into a small issue that was keeping me from moving forward with the game views and because I was finding other things I wanted to do instead (like catch up on Reddit and watch some videos). I've been a bit demotivated the past few weeks. Lots of stuff happening personally and financially that have added more stress than I needed right now.
On the OttoJotts front, though, things have been progressing reasonably well given the time I've spent on them. Right now I've got the account information and the main game list showing up. I still have to get the game details (the guesses and such) showing up and the ability to start games. Still a lot of work left but once I get these things sorted out it's a lot of playtesting and hooking it up to the iPhone.
iPad is still something of a question. I don't own one so I'll need to rely on people who do to test it out. I'd like to make sure that it works and that I have a good set of graphics for it so it looks reasonable. Just hoping that at least one of my friends is willing to help out. *wink wink*
The other issue I've been running across has been my ADHD kicking in wanting me to work on another small project and get it out. That's kind of what OttoJotts was supposed to be, so I hesitate to jump through the hoops to get something started only to end up on month 15 with nothing yet to show for it. I need to take a Kanban approach and just finish the work in progress and then work on the next thing. It's something I've struggled with for years and is once again rearing its ugly head. I wish I were more motivated to finish OttoJotts and get it done. Maybe I'm unable to complete things. Maybe I'm afraid of what happens if I do complete it (total flop). I don't know - it's just frustrating and adds to my stress level.
Anyway, lots to do at the "real job" (for now). I have tons to do still but I can actually pull this out if I can just get some focus on it. Send happy, supportive thoughts!

Thursday, March 22, 2012

SSL certificate issues resolved

So after a bit of back-and-forth with Jumpline support (which was as supportive as hoped if not quite as responsive as hoped), I now have SSL certificates on my website (click here to see). This is cool, but the solution was not as obvious as hoped.
Apparently, the VDS manager (the software that manages my virtual domain) has some, well, quirks about how it expects things to behave. In particular, it requires that the certificate be actually named "server.crt" rather than whatever I defined in the httpd.conf file. Thanks to Andrew and Geoff at Jumpline, who went in and actually modified my server config to make this work, things seem to be working correctly now. It took 2 days of their futzing around to actually make it work, but it does seem to be working.
The other main problem is that I can't use multiple certificates as I'd hoped to do. I could do a wildcard certificate but that costs in the $400/yr price range - something I can't swing financially. So I wasted $12.99, which is sad but at least not an expensive object lesson. Still disappointing.
Now, though, I can begin to work again on OttoJotts for Facebook. I'll have to see how well it goes. I'm putting in a breakpoint, though - if I don't make progress for more than a day that I actually work on things, I'm going to punt and work on the web version instead.
Let's see what the next several days holds in store for OttoJotts...

Tuesday, March 20, 2012

SSL certificates and my web host provider

The past few days have been proven quite difficult - unexpectedly and disappointingly so. Here's the general gist of what's been happening.

I decided that rather than write a full front-end web interface for OttoJotts that I would be sneaky and do it for Facebook, creating a back-end for beta testing. This would give me a leg up on the FB version of the game and would still let me write most of the code needed for things without doing web development directly (I would be able to leverage some of my other efforts to help). I kept getting a failure from FB, though, and found out that it was likely based on secure browsing and a lack of SSL support from my game.
So I went online, found a cheap solution from NetworkSolutions ($12.99/yr for an SSL certificate - that's a good deal) and bought one for my FB subdomain. Installing it has been quite the exercise in frustration, though. For some reason, adding OpenSSL to the Apache service is simple. I just had to click on something, fill out a form, and bam! Installed. The certificates, though, are a different beast.
First, none of the documentation I've found match my configuration. I've been searching for, literally, days trying to find out what arcane incantation I'm missing to make this thing work. There are two separate configuration files - httpd.conf and ssl.conf. In different directories. Which one do I edit? What changes do I need to make to them? The information online seems scattered and confused - and doesn't match the configuration I have.
I've submitted a ticket with my hosting company to enlist their help, but some of the documentation now has me concerned that I won't be able to add a separate SSL certificate for my main site (the WWW one) and one for my subdomain (the one I'm using for the FB game) because of how OpenSSL is configured. Overall what I would have expected to be something that should be bog simple (because of the need for secure connections in an increasingly-connected world) has turned out to be the epitome of legacy manual entry. The only thing that would make it worse if I had to submit it on Hollerith (punch) cards! As it is, it's fortunate that I know vi as well as I do and can navigate my way around a Linux system.
I will update as things progress but for now I can just say that someone (not me) needs to figure out how to make this a lot simpler than it currently is.

Monday, March 12, 2012

More updates

I don't want to sound like a broken record, so thankfully this post avoids that. I've been working on cleaning up the back-end PHP code for OttoJotts so I can create a basic web interface that will exercise the two-player game. One of the concerns at this stage is that I'm going to spend too much time on the iOS front end and less on the actual game play. By working on the back-end I'm focusing my attention on the actual play. This also has the benefit of being the basis for a web interface for other things.
I've almost completed moving all of the actual working code into functions that can be called from either the iOS-supporting PHP code or from an HTML page directly. Given my (relatively) intermediate skills in web development, I'm hoping I can get something written up without killing myself to provide access. Some things, like creating an account and such, I'll pass on as that will require some effort. Rather, I'll just do that manually for now and then later work on getting something coded up that's pretty and usable.
Overall I'm pretty happy with how things have been going. I know that there's an added security benefit to what I'm doing, which is definitely a good thing. PHP has had a reputation for being somewhat "security lax" but there are things that you can do to harden it. Part of this work is doing that hardening.
So, things are progressing even if not visibly. I'm hopeful that I'll be able to get this hammered out in the next few days and then I can work on the web interface. Then I'll be able to test the two player game code and, if everything's working well, be good to go. This does make me wonder, though, whether I should just do a web interface iOS app for the two player game and get the single player game out there. So do an OttoJotts solitaire version now-ish, get the web version working and then write a web UI wrapper app for the two-player game since I'm finding the two versions are radically different. Need to think this one over a little bit...
Until next time...

Wednesday, January 4, 2012

2012 Updates and Such

So I totally suck at updating this thing in any reasonable sense. It was a very busy period since February of last year through the end of the year. My son, Andrew, was born in April and a lot cascaded from that event, as you'd expect. Summer vacation was then upon us and a lot of things cropped up meaning that nothing happened with OttoJotts. Then the new school year was upon us and then Halloween and then Turkey Day and then Christmas (holy crap where did December go?!) and then New Year's. Wow.
So now it's 2012. The end of the world will be upon us in 352 days so I better get cracking on this game. What's on tap for right now is finishing up the two-player games which are started (mostly it's just friend management right now) and getting out Alpha 4 with those and then getting the rest of the functionality into Alpha 5 so I can get Beta 1 polished and out the door. The goal for Alpha 4 is to be out to testers by the end of February, Alpha 5 by Memorial Day, and the final game by Independence Day. What? You don't measure your year by holidays?
So that's the plan. It looks good on paper and may actually be do-able. We'll have to see. I just feel that there's an awful lot left to do and this really, sadly, isn't my full-time job. It's not even really a part-time job what with playing dad with the kiddos and stuff. Hopefully I'll be able to devote some more time to getting this project done. I've only got like 5 other ideas I want to get working on before the world ends in, *checking* yup, 352 days.

Sunday, February 27, 2011

New OttoJotts UI Ideas

I was in the shower today getting ready to pick up Cathy from a birthday party (no, not that one - we unfortunately missed that one *headdesk*). This was not her cousin Zavi's party in Laramie but my best friend Dan's son Matthew's 6th birthday. It was at Chuck E Cheese's and now that I've wasted far too much time with off-topic over-explanation, let me get back to the point of this post - user interface ideas for OttoJotts.
So while I was in the shower I began thinking back to the days when I used to play Jotto and what usually had to suffice for Jotto sheets when we'd exhausted our supply. We opted for legal pads, a ruler, and a pen. So this made me wonder - what if I made the UI look like a legal pad (or at least just lined paper) and then had all of the buttons and letters be handwritten? I think it might be "retro", but I think retro is hip these days (it's so hard to tell sometimes). PLUS, it's something that I, with my limited graphic artist skills could likely pull off. That was a definite benefit.
I think it would be very cool to have a slick UI like, say, Words with Friends, but I'm just NOT a graphic artist. Been there, done that, got my wrist slapped. I may just need to accept my limitations on this particular point (not that I ever thought I was a graphic artist). What does this mean for Alpha 4? Absolutely nothing. I'm sure I'll find ways to try to derail myself from actually working on code and work on the cool new UI, but it needs to wait until Beta 1. The alphas are all about functionality; betas are about polish. So that's kind of the thinking for, say, April. And I've got a cool idea for the badges, but that's later as well.
I guess we'll see how well I can keep this "shiny new toy" on the back burner. I've actually managed to get most of the friend and game creation code done and in, which was surprisingly smooth. There's still a lot of hardening that needs to happen, but I think that once I get into that mode it will be straightforward to do pretty much the same thing to every file. Plus, I need to make the code a little harder to exploit, which I hope I can get done with a minimum of fuss. Let's just hope I can keep up some of the focus here to make this project FINALLY successful.

Saturday, February 26, 2011

Decisions, decisions

So after sleeping on it last night, I have a plan. Scary, I know. I've always planned on integrating OttoJotts into Facebook as well and, since I'm going to do that, I think I need to release the game with 2 player games. First, as I mentioned in my previous post, I don't think there's really enough solitaire content to make the game compelling for 1 player. The 2 player game is really where it's at and, when I honestly think about why I did the 1 player game version, it was mostly to vet the concept and test the subsystems. Now that the 1 player game is mostly complete (sans hardening) it's time to really get into the 2 player game. I need to remind myself about the success that Words with Friends had and it's only a 2 player game - there is no solitaire game available.
So, with that said, I've recommitted myself to finishing the bloody thing with 2 player games available. I've been a bit down about the lack of progress and I'm sure that's what's going on (plus it's been a bit tight financially at Chez DeVoe). I think the need to make a bigger, better splash with OttoJotts is far more important than trying to get just something out the door. If I put out a piece of crap (fart apps, anyone?) then people are less likely to trust that my follow-up games are going to be any good. As the first app from the "studio", I need to make sure that it's a good one that people will think is good quality and good value for the money (if not excellent). Then, as my other apps come online, they'll be more inclined to get something else from me.
What this all means, I guess, is that I'm back on the initial track. After a reasonable night's sleep, I actually have some ideas for handling the game creation. Yes, it will take a little time to get it sorted, but I think it will be cleaner in the end, re-use some code (which is always good), and still meet the needs that the 2 player games require. So, back to the salt mines.

Friday, February 25, 2011

What to do?

So I've been having a bit of crisis of faith on OttoJotts. I think the game is pretty fun and should be enjoyable for total word geeks like me. The concern I'm having, though, is that as I get further and further into the two player games, the more things crop up that need to be addressed. For example, most recently I realized that in order to do two player games I need to revamp how the games are set up - and that they'll be different for 2 player than for solitaire. This, in and of itself, isn't what's causing the crisis, but rather it's the whole process. I've been working on 2 player games all this year. I haven't been doing it full time, but I've spent upwards of 2 weeks of actual time (80 hrs) working on it and I keep finding whole new sets of things I need to do before I can move forward. So now the question is - should I keep moving forward with the 2 player games and have them available at launch or should I launch the single player (solitaire) games and then, in an update, add the 2 player games?
I'd say that a fair portion of the games in the App Store are single player. You might be able to challenge someone to beat your score or something, but in general the two player/multiplayer market isn't quite as prevalent. So having 2 player, competitive gaming would be a differentiator for my game, but the time it's taking (or at least seems to be taking) is making me wonder if it will EVER get out.
Currently I'm still torn on what to do. I'm not sure that the single player/solitaire game is going to be compelling enough to keep someone playing. There's not enough there yet (achievements, etc) to make it something that a player would come back to over and over again. The graphics need to be redone to make it look a bit more professional (any graphic artists willing to work on a royalty basis out there?) and the game play needs to be cleaned up and the app hardened overall (error handling, etc). So I've still got at least 2 weeks of work left to do all of that, even if I dump 2 player games for now.
So, what to do?

Saturday, February 19, 2011

Been WAAAAAY Too Long

Well, it's been a LONG time since I've posted, but we've had a LOT going on here. To give a quick run-down:
  • The 9-5 got interesting at the end of the year as my contract may have ended abruptly. Thankfully it didn't, but it was still quite a bit of shock that it might have happened.
  • The spousal unit got REALLY sick. Sick to the point where she's still on short-term disability from HER job trying to recover. And when she does recover, she likely won't have said job. *sigh* She's been overly prone to illness lately because...
  • The spousal unit is PREGNANT! Yeah, trust me - it was a surprise. A wonderful one, no doubt, but a surprise nonetheless. SO much to do and so little time. Due date is May 2nd and his name is going to be Andrew Ximun William. Yeah, we're sort of into two middle names. His big sister is just thrilled that she's going to be a big sister. :)
Other than that, the work I've decided to tackle for Alpha 4 is the meat of the project - two player, server-based games. That's requiring a lot of doing both PHP and Objective-C, but things are progressing. I've gotten a lot accomplished over the past few days, getting friends lists into the database and retrievable. I just finished creating accounts/logging into an existing account code. Took longer than I'd hoped but it came together nicely at the end. I'm storing hashed passwords (obviously) in the DB, but when I looked at the size of the hash I calculated half the size it really was, so I couldn't log in (because the two hashes didn't match - I wonder why?). I finally got that sorted out and things have progressed wonderfully since then.
Today has been a day about friends and creating games. I've got code in there to randomly find an opponent who's similarly rated (I'm using a modified Elo system for rankings). The idea is that you'll play someone who won't completely blow you away - unless you choose a friend who so far-outclasses you that it's ridiculous. Good thing is that Elo takes that into account and more than 400 point ratings differences tend to result in no change (as the result is practically guaranteed).
Searching for an opponent by their email is almost there as well. I just need to hook up the iOS code to do the query, but the PHP is solid on the back-end. One thing that I haven't done yet and I really need to make sure happens before release is to bullet-proof the PHP back-end. PHP is generally derided for being not-as-security-rich as some other technologies. If you've got pretty confined entry/exit points, though, I think it can be pretty solid. Regardless, in the interest of getting Alpha 4 done and out to testers I've neglected that, but it will need to happen for Alpha 5/Beta 1.
Also thrown into the mix is a new website design. I think I'm getting a lot closer to actually finishing this bloody project and I thought the old design (while state of the art in 2001) has not aged well and was in sore need of replacement. I've gone with a Wordpress front end, but I need to tweak the hell out of it to make it more aligned with my ideas. There are some things that I'm not grokking from the posting/pages side of things with WP, but I'll beat up on it once I'm done with Alpha 3.
So, that's it from here for now. LOTS happening, but hopefully this will be done by May and I can take my paternity leave in the knowledge that I've got my game in the App Store paying for at least some of the diapers we'll need to get.

Saturday, October 2, 2010

Alpha 3 Release

The announcement on Facebook!
It's official - I just sent out Alpha 3 tonight. I wish it were a little more solid, but I've been testing it for a while and it seems stable. I've had a couple of bugs that I haven't been able to reproduce, so I'm going to spend a little time this next build working on using the Build and Analyze functionality. The next version is going to be HUGE, so it's important to get it all working solidly.
As I posted previously, the UI and game play changes for Alpha 3 are pretty good. I've added difficulty levels (making the game a lot easier to actually play), and the UI is cleaner. I've also captured some things and sent it over to a designer friend I'm hoping will be able to help with the graphics and the layout. I feel like there are places where it's pretty good but that there are far more places where it's just clunky and not working at all.
Of course the big thing is that this should let people play a little more frequently as the game won't be quite as impossible as the original. Jotto was a pretty niche product (and my mom and I were firmly centered in that niche), but I think it just couldn't really excel as a game because of it's difficulty. I expect that the game will be much more approachable now and to a wider variety of people.
There is still one thing I need to sort out with the word list, though, which is creating a simple word evaluation page so that people can rate words as Easy, Medium, or Hard. That should help segment some of the much harder words from casual players. I'm hoping that some of my Facebook friends will be able to help parse the list (it's pretty extensive) and provide a basic clumping of words by difficulty. It should be a quick change to the code to enable that in the code.
The next big step (and the next Alpha) will be to have two player games, which entails a TON. I need to get user accounts set up, figure out how to deal with people who change phones but want to keep their information, creating friend lists, getting multiple games working, and, of course, manage the basics of having a server-based game as opposed to a device-based one. Definitely a big challenge, especially the back-end piece. Still, I'm hoping that I'll be able to get it done in time for Christmas - that's my big goal. Hopefully before Thanksgiving - that would be awesome.
So, now that Alpha 3 is out the door, I guess I better get working on Alpha 4!

Tuesday, September 21, 2010

More UI updates and Alpha 3 status

I've been working on the UI layouts for the Easy and Medium difficulty levels. So far it's been going pretty well with the change in direction, so I've got some ideas I need to get feedback on, so if you have an opinion, please share!
The latest version is showing the green and blue boxes around correct answers (green is correct placement). I'm trying to see whether the colors/placement/layout/style seem usable or if it's somewhat unpleasant. I'd like it to be a little more stylized eventually - probably rounded corners and they wouldn't necessarily abut one another - but for Alpha 3 it may be "good enough" to get feedback about the difficulty level game play. The good thing is that things have gone really well with this update. The only thing remaining for functionality is saving/loading and loading old games. The upgrade path has to be supported. I've also considered allowing games of more and less than 5 letters as that's all hooked up on the back-end already. And I'm considering allowing multiple games now, just no more than one game with a particular word length (no more than one 5 letter word game, for instance). Those would be some small updates but might make Alpha 3 a little bigger release.
I was just checking on my list of things that I wanted to do for Alpha 3 and I do have a little bit of work left. What I had on my list to accomplish was the following:
  • Online Leaderboard
  • Player data tracking for game play
Interestingly, I didn't do either of those, but the need to get difficulty levels was more compelling this time around. I may dump those for Alpha 3 just to finish this up and get it out to testers. I'm really curious how the game play works with the easy and medium difficulty levels. It may be cleaner as well because I'm going to be doing a LOT of back-end work with Alpha 4. That next big thing is two-player gaming, so that should be interesting. A LOT of things to do there; could easily take a couple of months to get everything working. It will be a huge amount of work to get all of the different elements integrated, but I do hope that I'll be finished with it by around November. I'd like to get it submitted to Apple around Halloween if possible so I can try to get it out to reviewers before Thanksgiving and out in time for the Christmas season. I don't think sales would be heavily impacted by the holidays, but folks who get a gift card for Christmas might drop $0.99 on my game.
So, if you have any feedback on the UI, please let me know. I think I like it "enough" for the time being to not really worry about it. I'm trying to get this all wrapped up by the weekend so I can get it released and then out to testers. Then it's all two-player games. Wowser!