Sunday, May 12, 2013

Speech Recognition

I just updated the Ouija board app to recognize spoken questions.  I used OpenEars which is based on work done at CMU.   All recognition is done on-board and no network connection is needed.

Adding speech recognition is super easy have a look at

Sunday, May 27, 2012

iScryHD enhancements

I plan on inserting a camera view to turn the mirror into a mirror on devices that have a front facing camera.  Along with this will be a new way of controlling the app.   Of course this will be a free upgrade to the few that have purchased the app already.  This will be a exciting and novel way to interact with applications.

Stay Tuned!

github, gitignore and xcode 4

So Apple has git support built into xcode, However I found if I took an existing project.  Added git support and tried to push to github (gitlab in my case)  via Xcode 4.   No Dice,  Said I had uncomitted changes!  WTF!  I had no source files with uncommited changes so I did commit,  There is a file under the project folder xcuserdata, that tracks changes in the state of the UI, so anytime you bring up an editor, etc, this file changes, which makes it impossible to keep synced with the remote GIT repository from within xcode.  The trick is to make sure that you have a good git ignore file before you do the initial commits, or adds.  This way you will have an xcode 4 "clean" repository.   I found several good sources on the net.  Here are a few links to get you started:

So for those of us that are lazy,  I have a file named .gitignore_global in my home directory which contains the following:  (feel free to cut and paste into your own .gitignore_global file)

I then ran the command:
git config --global core.excludesfile ~/gitignore_global
That will set this file as the "gobal"  ignore file for ALL git projects.
If you have set this file after committing the project you must remove the offending files manually.  To do this use the git rm command such as
git rm --cached FILELIST
Hope this helps.


Sunday, May 20, 2012

iScry HD

iScryHD app is up!   This App uses cocos2d version 2.   Very cool features in v2.  It has support for retina displays on both iPad and iPhone.  It automatically adducts pixel locations so that you don't have to.  For instance the flame locations were specified on non-retina display,  and automatically adjusted for retina displays!  As in standard iOS, images are loaded by a naming convention,  however the image name suffix can be specified by the programmer.  All in all a very solid, great upgrade.

Sunday, November 27, 2011

Linux Install Annouyance

I was installing Fedora 16 on a fairly new HP elitebook laptop.  This laptop had never been setup before.  A clean slate.  HP setup screens are not the typical BIOS setup that most manufacturers use.  It is a major pain to use IMHO.  It does allow for much control over hardware/firmware.  I think HP may call it simple but I think it mostly stinks.  Dealing with HP setup was an annoyance, but not the main issue.

As set up progressed, there is a screen where you can choose additional Fedora Repositories.  I want to select these.  First you config the network.  That was easy.  Next it connects and downloads the repository metadata.  This is where the problem happens.  The connection is made, stuff is downloaded, then a cryptic error message stating that a network error has occurred.   No way to debug!  After much googling, network sniffing, etc.  I finally found the problem.  The TIME WAS NOT SET ON THE SYSTEM CLOCK!  This made the signature checks on the repository fail!  Leading to the bad and misleading error message.  Remember the little annoyance with setup!   So before you begin ANY OS install, check your system time in the BIOS first.  This will save a lot of time and aggravation.

After all that, I got Fedora 16 installed, however the HP will not recognize the system as bootable! I fell back to Fedora 15, That installs and works just fine, but 16 not so much.  15 is good enough for my needs, so I did not run down the problems with Fedora 16.

I will also avoid HP products in the future.


Thursday, November 3, 2011

Rolf! Accepted ! How (NOT) to Make Money on Apps

 Rolf! Big Dumb Fighters has been accepted!  This is just the base game.  Plans are to have in app purchases of additional scenarios, characters, weapons, etc.  This will be an experiment in how to generate revenue.  

First a little background.  I am an indie developer that can barley afford the tools to make apps, let alone any budget for marketing or advertising.  I knew going in that I could not compete with any well funded organization such as PopCap or EA.  I also had no visions of grandeur or unreasonable expectations.   I was looking at this as a hobby that would at least pay for itself and something to have fun doing.   So far, my assumptions have been correct.  I am having fun,  It sorta self sustaining and its fun to watch the results.  I also started this blog, which seems to be pretty much me talking to myself.  At least I have an interesting, and educated audience!

Results to Date:

  • Free Version - larger Pay Version  FAIL  No one wants to buy something that they can get for free
  • Niche Market     Sorta Works My best sellers fall into this category.  iScry, Witch Board, etc.  Also by best sellers I mean a couple a day from this category.  Hardly sustainment income.
  • In App Ads       FAIL  Apple changed the rules and my revenue cratered!  Was doing pretty well at 2x sales, now not so much.

So Now I have a niche  app (dont tell me that these games are not a niche!)  that lends itself nicely to in app purchases.   I have updates in work to Rolf! that will have scenarios, characters, weapons, etc for sale inside the application.  Future posts will chronicle progress.

Thursday, October 27, 2011

PDF in IOS without Navigation Controller

Another sample of the Art of Rolf from Elmore!  If you like his stuff head over to his site and have a look.  All art in Rolf is used under license.

In the creation of Rolf! I wanted to add the paper game rule book to the game.  The format of the book is PDF and I though it should be no problem.  After much googling (please no Binging,  That does not EVEN sound right does it?) I found that there are several ways to go.  A lot of folks used a web view and let webkit do the rendering.  That was ok, but things did not look like I wanted.  Also I wanted to be able to print or add it to iBooks.   The Document Interaction framework seemed to be a perfect fit.  It was but there was a hitch.

First  here is the code when the rule button is pressed:

  if(self.docController == nil)
        UIDocumentInteractionController *dc = [UIDocumentInteractionController interactionControllerWithURL:url];
        dc.delegate = self;
        self.docController = dc;

   [self.docController presentPreviewAnimated:YES];

This worked perfectly.  The PDF is shown in its own view.  A menu of supported operations is present.  Perfect,  except when you hit the provided DONE button it crashed.

Hmmm  What delegate method gets called when the done button is pressed.  This is the tricky part.  According to the apple documentation on presentPreviewAnimated
This method displays the document preview asynchronously. The document interaction controller dismisses the document preview automatically in response to appropriate user interactions. You can also dismiss the preview programmatically using the dismissPreviewAnimated: method.

So over to the delegate protocol ( UIDocumentInteractionControllerDelegate) docs.

So you Must implement this Optional Method!
- (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controller

I know, pretty intuitive huh!  Here is the passage from the docs:

Although technically optional, this method is required if your application attempts to display a preview for a document. The view controller returned by this method is used as the parent for the document preview.
Hmm does not sound Optional.

Ok so now what happens when you are done with the preview and hit the DONE button?

Again from the docs:

If you return a navigation controller from this method, the document interaction controller is pushed onto the navigation stack using the standard navigation controller animations. If you return any other type of view controller, the document interaction controller is displayed modally, in which case, the view controller you return must be capable of presenting a modal view controller.

In Rolf!  I am not using a Nav controller to move between views.  I did not want to give up the real-estate and wanted better control over the navigation.  So I thought COOL.  All views are capable of modal transitions.  NO Problem. The Preview IS presented modally.   Nope I was wrong.  After looking through the views in the debugger, I found that several properties on the view were nil.

Long story short Modifing my code to:

 if(self.docController == nil)
        UIDocumentInteractionController *dc = [UIDocumentInteractionController interactionControllerWithURL:url];
        dc.delegate = self;
        self.docController = dc;
    self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

   [self.docController presentPreviewAnimated:YES];

Did the trick.  Notice the next to the last line!  That was it!

Happy Coding!