Paris is hot.
Well, at least it was hot during the week of RubyMotion #inspect2015. And nobody seems to have air conditioning.
But that's is pretty much the end of my whining about last week. Everything else was great. It was my first time to Paris, and I really enjoyed the trip.
Keynote - RubyMotion 4
Laurent Sansonetti delivered the keynote, as he has the last two Inspects. He talked a little bit about the state of RubyMotion. The hype is gone, but the tools are starting to mature. It's a good time to be a Motioneer.
New Live REPL - on device
For RubyMotion 4, Laurent introduced a new REPL for both iOS and Android that actually works on device.
This is a big deal and I'm especially happy about the Android side of this, since the Android REPL has been less than impressive.
Watson demonstrated, using RedPotion, that live code reload works on device using the live code reloading technique that I discovered a couple months ago and Todd Werth and I built into RedPotion.
Laurent talked about how difficult it was to do this. He's doing quite a bit of coordination between the REPL and the device, because the REPL needs to know the memory addresses of symbols in the device. Sounds difficult.
RubyMotion Cross-Platform Game Framework
Laurent announced and demonstrated something he's been working on for a while. It's a cross-platform game framework that wraps Cocos 2D and provides a new 2D game-oriented UIViewController in iOS and Activity in Android.
Like most developers, I have a few little games floating around in my head I'd like to make sometime. This game framework looks pretty good, and being able to use Ruby is a huge plus for me.
Laurent made a little Flappy Birds clone and played it on both the iOS and Android (Genymotion) simulators. Physics, sprites, sounds, controls all work.
Now I just need someone to make sprites and sound effects for me.
RubyMotion 4 will also support native WatchOS apps. I need to do some more digging into these.
Rich Kilmer - CargoSense
Rich, rocking white pants, demonstrated the stack he's been using for his RubyMotion apps at CargoSense. He showed his layout system. Given that I've been a part of three layout systems on RubyMotion so far (ProMotion::Styling (deprecated), MotionKit (see below), and RedPotion), there were a lot of similar concepts.
Someone joked that every RubyMotion gem expands until it includes a layout and styling system.
Rich's system has some really interesting things, though, and we discussed it afterward in the break room. Look for RedPotion to incorporate some ideas from his system in the future.
Tatiana Vasilyeva - RubyMine
Tatiana demonstrated some neat features from RubyMine for developing RubyMotion apps. Despite protesting that she wasn't a developer before starting the talk, she did a great job and we didn't believe her.
Many developers come to RubyMotion to get away from IDEs, but if you want to use an IDE, RubyMine looks like a pretty good option. I especially like some of the introspection tooling.
Todd Werth - RedPotion (part 1)
Todd introduced RedPotion (and BluePotion), which aim to be the "Rails of RubyMotion". He talked about why the community came together to build it.
Ruby itself didn't really take off until Rails came along, and it feels like we're at a similar point with RubyMotion. RedPotion is a collection of the most widely-used RubyMotion-iOS gems, knit together into a cohesive API.
Todd talked about some of the features of RedPotion but mostly explained why we did it and where it's going.
Jamon Holmgren - RedPotion (part 2)
My presentation focused on code examples, showing how RedPotion's API is clean, straightforward, and Ruby-like. I talked about how easy onboarding, common conventions, and a shared community vision are all really important for RubyMotion developers, and how RedPotion accomplishes that.
Darin Wilson - BluePotion
Darin introduced BluePotion, which is RedPotion for RubyMotion-Android. RubyMotion-Android has very few gems written for it, so BluePotion is a really great way to bring the most popular gems to the Android side.
He talked about how the goal of BluePotion isn't "Write once, run anywhere" but rather "Learn once, write anywhere".
I'm very excited about BluePotion. I think we can achieve 80% API parity with RedPotion, especially if YOU help.
David Larrabee - Integration Testing
David (Squidpunch, ProMotion core team) discussed the various integration testing techniques out there. Without Capybara, we have to use other means to do full integration/feature tests, and Squidpunch has it pretty dialed.
Squid also mentioned a few other testing techniques for iOS apps. He didn't have much to say on Android unfortunately. Next Inspect?
Amir Rajan - A Dark Room
Amir gave an awesome talk about doing meaningful work and his experience building a #1 overall app. Everyone sat, spellbound, as he worked his magic.
I'm very proud of the fact that the second commit on A Dark Room was "Integrated ProMotion". In a small way, I contributed to its success, and that's something very cool.
Amir gave a second talk right afterward, walking through the meteoric rise of ADR.
When the video is posted of his two talks, it will be must-see.
Paul Sturgess - Title Challenge
Paul presented on the unique CPU and memory constraints he faced building a football (soccer) simulation/management game for iOS. Paul was able to work on this game full time as part of an agency that supported his work. I talked to both Paul and his boss Laurent Maguire and they're very cool.
Gant Laborde - Validations
Gant showed the very cool validation library he created. It's a great example of how to create your own plugins/addons for RedPotion. Gant is a lot of fun to be around and we spent a whole day touring Paris after the conference. "Oh hey, Jamon, look over there, it's just a few blocks more to see that other thing." Over and over.
Boris Bügling - WatchOS
Boris talked about building watch apps. His talk was really interesting and his slides were mind-bending.
Mark gave a great talk about "cutting away, living your dream, and programming RubyMotion full time". Mark lives in an RV with solar panels on the roof, traveling the USA, skydiving, and does RubyMotion consulting for InfiniteRed. He's also a ProMotion core contributor.
Colin T.A. Gray - RubyMotion App Architecture
Slides 1 Slides 2
It was great to see Colin again. He talked about bringing some concepts from Swift (at his day job) to RubyMotion. He also gave an update on MotionKit.
MotionKit's great constraints DSL will be extracted and rebuilt as a RedPotion plugin. One of the common questions we get about RedPotion is "where is the constraints system?" This will answer that and make a lot of people happy who came from MotionKit (including me). RMQ's layout system is more than capable in most cases, but many RubyMotion developers want to use constraints. Since RedPotion is going to be the "Rails of RubyMotion", it just makes sense to have that as a feature.
Thoughts on RubyMotion
RubyMotion 4 seems like an evolution rather than a huge change (like RubyMotion 3 was), which shows that the product is maturing. This is a great thing for companies who may have been scared off by the hype. RedPotion and BluePotion are the culmination of three years of work by the community, and there's a steady influx of new developers, mostly coming from the Rails world.
I think it's a great time to be using RubyMotion. There are a lot of alternatives out there now, but they all have tradeoffs. RubyMotion's excellent new REPL, pretty gem APIs, and tight-knit and encouraging developer community are great reasons to stick with it.
It was another great #inspect! It was definitely worth going and I had a great time meeting and talking with RubyMotion developers from around the world.
Going forward, I plan to be putting out a lot of RubyMotion (especially RedPotion/BluePotion-related) articles, tutorials, and news on this blog. Keep an eye on it, or follow me on Twitter to get alerted to new articles.
Also, don't forget to join our Motioneers Slack channel if you haven't yet, sponsored by ClearSight, my Rails and RubyMotion development shop! Let's talk RubyMotion. :-)