Playtime with RubyMotion and ShowKit

I’ve been spending time recently with RubyMotion. Since I’ve been working in Ruby for the last several years I thought I’d give the Ruby flavored iPhone development approach a go. At this point I’ve only spent a couple days hacking around but thus far I’ve enjoyed the process.

To guide my “playtime” with RubyMotion I decided to take a look at the ShowKit SDK and try to port one of their examples to RubyMotion. The most obvious candidate was their Conference demo, which allows two ShowKit users to video conference. I downloaded the XCode demo code from ShowKit’s github repo and pretty quickly worked my way through migrating the code to RubyMotion. While their are some very minor differences from Ruby to support the Objective-C heritage of the runtime, I felt right at home. Within a couple hours I had a mostly functional app running. As with any experiment it was fun to see it up and running on iOS devices, and being able to video conference with my wife and daughter in the next room was really….well…pointless but fun.

While this small experiment didn’t require much work I did use BubbleWrap and motion-layout for the project. After exploring the BubbleWrap API I can see lots of useful bits that I’m sure come in handy when building “real” apps. The first version of my UI didn’t handle device rotation but within a few hours of playing with motion-layout, and eventually getting my head around some of the more obscure, less documented features of the ASCII based layout language I had a UI that responded appropriately to both device orientations. Overall my UI is pretty ugly but it is functional. I’d like to spend some time trying to make a nice stylized UI so I may do that with this demo project, or perhaps start another project and explore that part of iOS development (with RubyMotion). I didn’t mess with interface builder at all for this as I’ve heard from other iOS devs that they tend to self draw their UI’s and I’ve always done the same so figured I’d go that route, especially given the super simple UI.

All and all my RubyMotion experience was positive. I need to spend some time on a greenfield app rather then a port, and do something a little more involved to get a true feel for the toolchain but I can see why folks enjoy working with RubyMotion. I do find myself asking myself (yes I like to talk to myself often) whether taking the plunge into Objective-C and XCode would be a better use of my time and I’m still a bit torn. I’ve also used Xamarin in the past and their cross platform story combined with a language I like (C#) make me feel like I need to purchase the Paradox of Choice.

On the ShowKit front, I found the SDK to work as advertised.  My app was more or less a line by line port of the Objective-C version of their demo. While I didn’t spend any time on the more difficult elements of building a real app with ShowKit I did find the documentation sufficient and the SDK to work as I expected. I have a few ideas for how I might leverage it in real projects ™ in the future so as those ideas become more concrete I’ll look to share more experiences.

Github Repo: https://github.com/eichert12/MotionConference

Play

In response to my post about feeling like a “jack of all trades”, Jon pointed me to this article about the importance of play.

Over the last couple of years I’ve “played” less and less. I’ve felt obliged to work on the next most important thing™ on my todo list. The result has been less then ideal. In an effort to stay productive by not distracting myself from what I saw as the most important thing, I instead led myself into a destructive mindset that took the enjoyment out of work. Sometimes the best thing for you to do is pick something new, fun, and exciting and set aside some time to play with it. Don’t set any goals or constraints, just play. Don’t worry about the todo list, or all the other “more important things” on your plate, instead have fun.

Jack of all trades, master of none?

I’ve always enjoyed diving deep into topics to try to understand and master the topic. This has served me well in my development career, whether it was trying to get up to speed on a new technology or a new methodology, I’d dive in and read as many papers and books on the topic as I could find.

Over the last several years I’ve slowly felt myself drifting away from these deep dives. Not because I no longer like it but because of the impracticality of doing so. As the core developer in a small bootstrapped software biz I need to be well versed in many aspects of the development of our products, as well as the running of the business. Although I’d love to take a deep dive and immerse myself in individual topics or areas of interest I just can’t find the time nor rationalize the investment of time when I have so much else going on and a long list of things that needs doing.

As a results I’m finding myself to be in the situation of feeling like a “Jack of all trades, master of none”. Some days I love it, other days I hate it. It can be fun to do front end development (HTML, CSS), backend development (Rails/Ruby/SQL), mobile development (iPhone), machine learning ( R), and sales presentations all in one day BUT it can also be extremely frustrating. To feel as if your knowledge is only so deep in any one of these areas, and to long for a day when you can dive deep again…only to realize that day may not come.