2017 in Review

Wow, again it’s been a year since my last blog post.  So I’ll make this post a synopsis of my year.  I did update all of my apps with the latest SDK, and some improvements all around.  I’m 95% done with my estimation app.  My goal is to publish it by Christmas, so I can focus totally on the exciting new stuff I can do with my new iPhoneX!  I’ve played around quite a bit with Maya and Unity this year, trying to get prepared for AR/VR opportunities, but I have to admit, I took off quite a few weekends to dive, read, dance, take cooking classes, and otherwise unwind.    

Now I have to decide if I want to buy an external GPU so I can do a VR app.  I think it’s brilliant that Apple has standardized the NN models.  There is so much potential here.  The problem with VR is it’s still at a stage where it’s just as much about optimizing the performance to get all those pixels to the screen within 10ms, and it’s pretty low level stuff.  Even with the computer graphics class that I taught last year, that level of detail is outside of my expertise.  I know I need to understand enough of it to program it efficiently, but I don’t really have the desire to learn the low-level gpu performance tweaks necessary to get 90 fps.  So I’m leaning towards developing an AR app as I think it will provide some crucial foundation skills.  

On the professional side, in addition to learning some Kotlin for Android, I created VUI apps for Amazon Alexa and Google Home.  I used JNode on their respective servers to provide the dialog and collect the necessary information, and submitted the design document for our ColdFusion experts to implement on our own servers.   I suggested it be done on our servers since VUI is going to be ubiquitous shortly, and even web browsers will eventually be more voice activated than not, so it makes sense.  And even though the free service sounds like a lot of at 100k requests a month before they start billing you, my company gets more hits than that in a day, by far, so it could get unnecessarily expensive quickly if we have to pay for Amazon and Google server usage.   I really enjoyed working with JNode, and with the Voice assistants in general.  You can throw up little private apps quickly that are only meaningful for you and your family.   To talk to a server, though, I need a secure site, and I’m not quite willing to spring for that yet.   

I am officially my company’s ‘AI Expert.’  I know because I’ve heard them refer to me as that on several occasions, not that I’ve been given any kind of title or official recognition.  Plus they gave me the VUI project to design, so that’s a benefit in itself.  New things are always more fun than old things.   There are quite a few companies touting themselves as bringing AI to the travel industry, so I have another goal of trying to understand the value that they offer.   This is primarily because it will benefit Hotelplanner, and I want to provide as much value as I can to my employer, and I am the most qualified to do it.  Unfortunately, it consists of listening to marketing types overhype and sensationalize what they can do, and I don’t relish those types of conversations.  I suspect VR will transform our industry faster than AI will.   But it will be interesting to find out what really is available underneath all the BS.  

Computer Graphics using WebGL

Wow, it’s been almost a year. But in my defense, I took on too many projects, and had no spare time this past year. I taught a class in Computer Graphics, using WebGL at Nova Southeastern University. Since I work full-time at Hotelplanner during the week, most of my weekend was spent preparing for classes, and grading assignments. It was quite the learning experience, but not one I’d choose to repeat. I enjoy programming 100 times more than I enjoy teaching. But still, it was motivation to become immersed in WebGL and learn more than I ever would have casually with the three.js libraries and javascript. Creating graphics is rewarding in and of itself.  And being able to say I was an adjunct professor helps me remember what a bad-ass I actually am!

So here it is, my first totally free weekend in a very long time. No duties or obligations forcing the path ahead. I feel torn in several directions. I’d love to create something in VR. I’d love to create some 3D models in three.js and Maya or Autodesk. I’d love to dabble in some AI tech. I’d love to revamp my aging apps that are in desperate need of updating to remain current. I’d love to develop some server skills so I can have some cool things on the web. So many exciting tangential things to all of these. It’s difficult to decide where to go. And most of it involves deciding on new platforms and new languages or frameworks to learn. All of which takes time.

New stuff is always more fun than old stuff. But I probably will at least update my RhythmID app since its my oldest and most popular.

I just signed up for the Safari Books Online update. I think it’s a really great deal at $199 a year and unlimited access. What a world we live in, where so much information is available!



Android Volley Framework

I’m close to finishing the multiple feeds to get hotel quotes on the Android app for HotelPlanner. I’m using the volley messaging framework, which is quite nice at handling the lower levels of message transport. In both the hotel list and the room rate list, I request rates from multiple vendors and merge them into the native UI as they arrive. In the end, I was very sorry that I used wkWebViews in the iOS app. It was quite expensive in terms of both memory and performance, and not as reliable as I would like. But the json feeds are lightening fast and I am very happy with them. I am keeping the webview for the checkout page only since I don’t have a good api for that, and it’s difficult to test thoroughly. And quite important when you’re taking people’s money that you don’t make mistakes!

Fun with WKWebviews and Javascript

Forgive me, o God of Blogs. It has been 3 months since my last posting.

I’ve been working with WKWebviews in my Hotelplanner.app. Actually, I’m using the Sencha javascript and datastores to populate the native UI elements. One of my top goals this year was to incorporate hotel rates from all of our feeds, and start pulling reviews from a different site than I’d been using. Since the browser already has this logic, I just keep the browser hidden and use its logic, which is powered by javascript. Just as relevant for the app as it is for the browser. I just never show the browser, except for check-out. This gives me the ability to add a lot of functionality to the check-out page, which is difficult to test without actually booking rooms. All in all, I’m very happy with how easily it all ties together. With the speed of Nitro js in the iOS browser, HTML5 is becoming faster on the phones.

And, since I’m getting involved with javascript, I thought it might be nice to learn some Node.js, so I’m working through a book on that. I may power my website using js rather than coldFusion. I haven’t decided yet. The advantage of js is it is growing more popular by the day, which is the disadvantage of coldFusion. But Hotelplanner uses coldfusion, so it would be quite useful to become more proficient in that language. Not to mention I have lots of examples on how to do things!  Life is full of trade offs.


Who’s Who: Remembering Names and Faces

Forgive me of God of Blogs, it’s been over two months since my last posting.  Which is appalling when you consider that I have actual news!

I launched a new app on March 24th called ‘Who’s Who: Remembering Names and Faces.’ This app gives you several ways of adding photos, and several ways of drilling and recalling the names associated with them. Originally, I had the ability to share groups of photos with others through CloudKit, but Apple kept rejecting it, saying it’s against their privacy policy to share people’s photos. It was the killer feature of my app, as you could have all kinds of use cases for group leaders to collect and share group members photos. It’s still a cool app, but not the potential blockbuster I had envisioned.

As part of my marketing initiative, I did a press release through PRWeb since all the marketing books and blogs agree that is essential. It costs $159. I got 2 downloads from it.  But maybe it’ll drive SEO links for future searches for an app like mine.

I launched a Google Adwords campaign a week later. Since my app sells for $1.99, I put the max bid at $1 for a pay-per-click ad. The ad takes them directly to the itunes store for downloading the app. After a week, I have had 120 impressions, and 0 clicks. It has cost me nothing to be seen by people who are searching for my ‘long tail’ keyword phrases. I have had one download this last week.  Probably worthwhile but not the overwhelming success I was hoping for.

Meanwhile, I’ve been contacted by several companies wanting to promote my app for me. At this point, I’m reluctant to pour any more money into marketing, and will look for free ways to promote it.

My Rhythm ID app is downloading between 5-10 every day, but as an ad-supported app, it’s only generating about $10 a month in income. I’ve never done anything to promote it other than a Facebook and Google+ page that I post Memes to every month or so. It is discovered by people searching for the keywords in the app store. Although I’ve had several thousand downloads, and several dozen positive feedback emails, I have had exactly 0 reviews which I suspect would help it. I’m wondering if I shouldn’t focus more on this app, and see if I can get the ad-generated income up. Although it’s hard not to just start a new app!  I must learn some marketing that works if this app writing hobby that I love is ever going to be more than a hobby.


Shiresmith Publishing

Forgive me, o God of Blogs, it has been four months since my last post. I had been waiting to post good news, but Apple keeps rejecting my latest app. There is just no way around the rule of not being allowed to upload people’s photos to iCloud. I thought I was really onto something. sigh. I have to take out a bunch of the functionality and make it a much less useful app now. Live and learn. It’s not like the cloud kit skills will disappear.

I am having a great time with the Hotelplanner app. First, a total redesign by our phenomenal graphic designer Ray. Now, he’s given me animations to go along with the design. Beautiful and challenging. I learned quite a bit about animation from my sister’s children’s book that I did, so this will be very enjoyable. At least on the Apple side. It’s square one for Android.

I keep planning to focus on marketing, and yet here I am, still drawn more to creating than selling. Apple took a lot of wind out of my sails. I actually spent a day writing a press release for my rejected app. I know I shouldn’t give up. There is still functionality to be salvaged. After all, my original idea didn’t have sharing. It was just such a killer idea once I had it that it’s hard to get excited over the scaled down version.

I created an LLC called Shiresmith Publishing that I plan to change my Apple ID to use since it seems more professional to sell from a company than from an individual.  It cost a little under $200 in Florida where I live, but it’s a yearly fee.  Taxes get a bit more complicated, but with any luck, I’ll make an app that makes taxes complicated anyway!  There are worse problems to have.


Trials and Tribulations of Autolayout

Sigh. I learned the hard way that if you uncheck autolayout, it applies to every viewcontroller and you lose EVERYTHING that you’ve done. So I am redoing autolayout for my HotelPlanner scenes. I am enjoying the storyboard and segue implementation that I’ve converted the app to. And I’ve started changing the animations to animating constraints rather than frames. It’s all quite intuitive once you get it, and the visual aspect makes it quite fun. I am still missing a basic concept on autolayout’s root frame size though, as I am currently struggling with getting the detail views of my splitviewcontroller to show up with the correct widths.

How to stop Camtasia recording automatically on Mac

I use Camtasia 2 for recording video on my computer, but there is no way to schedule a stop duration. You can do this relatively painlessly using applescript so you don’t have to set timers and run to turn Camtasia off manually.

1. launch Applescript Editor (Script Editor in Yosemite)

2. Type in this code, changing the delay value to the desired number of minutes * 60:

tell application "Camtasia 2"
   delay 3600
end tell

3. Start the Camtasia recording, then press the play button in the Script Editor.

It’s as simple as that. Now you can record the screen unattended and it will stop by itself. Of course, you need to save the script with a name you can remember so you can reuse it.

Screen Shot 2014-08-11 at 9.46.33 PM

iOS and Me

I’ve been playing around with CloudKit in my new app. I had to rethink my entire app after Facebook changed their API in April and one of my most important functions ceased to be possible. It is taking me way too long to get this baby out the door. I’m hoping to be ready by the iOS 8 launch. It’s not easy to work and make apps on the side and have a life, LOL. I gave up too many weekends getting my doctorate degree.

I’m in the process of converting my Hotelplanner app to Storyboards. When that is successful, I will convert it to use autolayout in anticipation of using the new size classes of iOS 8. But that will be awhile. I need to support at least a couple of releases backward.

The temptation is huge to rewrite half my classes to incorporate newer technologies! Only so many hours in a day. I have to restrain myself.

There are so many things on my todo list!  After my app is released, I am going to focus on Swift and on making 2D characters and scenes.  I am determined to do a game and I may as well learn the new SpriteKit, SceneKit, and Playgrounds in the process.


Posted in iOS

My Excellent WWDC Adventure

WWDC 2014
I just returned from WWDC 2014. The mother of all releases! It was a good WWDC to go to. My brain is swirling with ideas and possibilities. So many new frameworks, and a new language to boot! I wish I could just code iOS all day long for the next few months!

I loved the energy, and I especially got a lot out of talking to the Apple engineers who were quite enthusiastic to give advice on your code and how to improve it. The sessions were very cool, but after a few days you get really tired of sitting passively for hours on end. My brain was full. People bring their laptops to try to code along, with varying degrees of success. I only carried mine the first day, where I discovered my shoulders don’t really like carrying a backpack around all day long. And on the last day where I sought out Apple engineers to talk to, and happily that paid off. That was my favorite time of the entire event after the keynote.

I was hoping to make more friends, but I’m not very extroverted and was as alone there as I am at most social events. San Francisco was quite an experience. Very pretty and interesting and cold. It’s June for crying out loud. Being a Florida girl, I decided I didn’t want to move there after all. No matter how invigorating the intellectual climate is.

I feel privileged to have had the opportunity to go. But it’s not something I would lay out the money for on my own. After all, the videos are available immediately now, and at home you can pause them and move around and even code along. If I were more of a party-goer, it might be different since there were parties that I did not go to every night. I did enjoy the Apple Bash since I have no trouble talking to strangers after a glass of wine. But my mind doesn’t work well the next morning after drinking even small amounts, and it’s just not worth the trade-off to me.