<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>This is the official blog of RubyMotion, a toolchain for iOS and OS X development that lets do you do iPhone, iPad and Mac apps in Ruby.
Follow us on Twitter or subscribe to our newsletter to stay tuned with everything that’s happening in the community! Not a RubyMotion user yet? Give it a spin today!</description><title>RubyMotion Blog</title><generator>Tumblr (3.0; @rubymotion)</generator><link>http://blog.rubymotion.com/</link><item><title>MotionBundler: Good Old Fashioned Requirements for RubyMotion</title><description>&lt;p&gt;&lt;i&gt;(This is a guest post from &lt;a href="https://twitter.com/archan937"&gt;Paul Engel&lt;/a&gt;, creator and maintainer of &lt;a href="https://github.com/archan937/motion-bundler"&gt;MotionBundler&lt;/a&gt;)&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;When I started writing my first RubyMotion application, I almost immediately wanted to use a Ruby gem to accomplish a certain goal. After setting up my Gemfile, running bundle and rake in the Terminal, I soon discovered that it wasn&amp;#8217;t possible to just require any random gem I wanted to: it had to be aware of it being required in a RubyMotion app.&lt;/p&gt;

&lt;p&gt;Suddenly, my next open source project became a fact. I wanted to create a gem which allowed you to require any Ruby gem in a RubyMotion application. My first attempt was the &lt;a href="https://github.com/archan937/lock-o-motion"&gt;LockOMotion&lt;/a&gt; project. It gets the job done but it wasn&amp;#8217;t test-driven enough and the code wasn&amp;#8217;t well structured. Enter &lt;a href="https://github.com/archan937/motion-bundler"&gt;MotionBundler&lt;/a&gt;, a complete rewrite with a &lt;a href="https://travis-ci.org/archan937/motion-bundler"&gt;100% test-coverage&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I am a big fan of using and writing libraries and gems that are as unobtrusive as possible. I did not want to force the developer to follow special conventions (e.g. using another method than &lt;code&gt;require&lt;/code&gt; to load up code). And MotionBundler does just that.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Setup and Usage&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;MotionBundler is intended to be easy in installation and usage. You need to setup your &lt;i&gt;Gemfile&lt;/i&gt; by separating RubyMotion-aware Ruby gems from the ones that are not. Put the RubyMotion-unaware gems in the &lt;code&gt;:motion&lt;/code&gt; Bundler group, as shown here.&lt;/p&gt;

&lt;pre&gt;
source "http://rubygems.org"

# RubyMotion aware gems
gem "motion-bundler"

# RubyMotion unaware gems
&lt;b&gt;group :motion do
  gem "slot_machine"
end&lt;/b&gt;
&lt;/pre&gt;

Then, simply add &lt;code&gt;MotionBundler.setup&lt;/code&gt; at the end of your &lt;i&gt;Rakefile&lt;/i&gt;.

&lt;pre&gt;
[...]
require "motion/project"

# Require and prepare Bundler
require "bundler"
Bundler.require

Motion::Project::App.setup do |app|
  # Use `rake config' to see complete project settings.
  app.name = "SampleApp"
end

# Track and specify files and their mutual dependencies within the :motion 
# Bundler group
&lt;b&gt;MotionBundler.setup&lt;/b&gt;
&lt;/pre&gt;

&lt;p&gt;Finally, you can just run the &lt;code&gt;bundle&lt;/code&gt; command then the default &lt;code&gt;rake&lt;/code&gt; task to build and run the application. And that&amp;#8217;s all about it!&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Requiring non-Gem Sources&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Just like a regular Ruby project, you are now able to require source files. It can either be a relative path on the file system or a Ruby standard library source file. As an example, let&amp;#8217;s require the &lt;i&gt;cgi&lt;/i&gt; Ruby standard library file and use the &lt;code&gt;CGI.escape_html&lt;/code&gt; method in a RubyMotion controller.&lt;/p&gt;

&lt;pre&gt;
require "cgi"

class AppController &amp;lt; UIViewController
  def viewDidLoad
    puts CGI.escape_html('foo "bar" ')
  end
end
&lt;/pre&gt;

&lt;p&gt;Looks familiar, right?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;How Does MotionBundler Work?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;MotionBundler traces &lt;code&gt;require&lt;/code&gt;, &lt;code&gt;require_relative&lt;/code&gt;, &lt;code&gt;load&lt;/code&gt; and &lt;code&gt;autoload&lt;/code&gt; method calls in your code when invoking &lt;code&gt;MotionBundler.setup&lt;/code&gt;. All four methods eventually are delegated to the &lt;code&gt;require&lt;/code&gt; method which MotionBundler &lt;a href="https://github.com/archan937/motion-bundler/blob/master/lib/motion-bundler/require/tracer/hooks.rb#L28"&gt;hooks into&lt;/a&gt;. MotionBundler calls &lt;code&gt;&lt;a href="https://github.com/archan937/motion-bundler/blob/master/lib/motion-bundler/require/tracer/log.rb#L30"&gt;MotionBundler::Require::Tracer::Log#register&lt;/a&gt;&lt;/code&gt; which traces the calling Ruby source and registers the source file being loaded.&lt;/p&gt;

&lt;p&gt;When &lt;code&gt;MotionBundler.setup&lt;/code&gt; invokes &lt;code&gt;Bundler.require :motion&lt;/code&gt;, all required files and their mutual dependencies are registered. Aside from the Ruby gems defined in the &lt;code&gt;:motion&lt;/code&gt; Bundler group, MotionBundler also uses &lt;code&gt;Ripper::SexpBuilder&lt;/code&gt; to scan for require statements (like &lt;a href="https://github.com/clayallsopp/motion-require"&gt;motion-require&lt;/a&gt; does) in the Ruby sources defined in &lt;code&gt;./app/**/*.rb&lt;/code&gt; so it can trace requirements using &lt;code&gt;MotionBundler::Require::Tracer::Log&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Console Warnings&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;When I was writing LockOMotion it was very difficult to debug certain errors. I have been able to override certain core methods to print warnings which contain useful debug information.&lt;/p&gt;

&lt;p&gt;These are only printed in the iOS simulator console. When running from the device, MotionBundler does not interfere when an error gets raised. As an example, let&amp;#8217;s check out a warning printed in the console when dealing with a runtime &lt;code&gt;require&lt;/code&gt; statement.&lt;/p&gt;

&lt;pre&gt;
[...]
&lt;b&gt;   Warning Called `require "base64"`
           Add within setup block: app.require "base64"&lt;/b&gt;
2013-05-21 13:45:26.851 SampleApp[17300:c07] app_controller.rb:48:in `viewDidLoad': uninitialized constant AppController::Base64 (NameError)
    from app_delegate.rb:5:in `application:didFinishLaunchingWithOptions:'
2013-05-21 13:45:26.855 SampleApp[17300:c07] *** Terminating app due to uncaught exception 'NameError', reason: 'app_controller.rb:48:in `viewDidLoad': uninitialized constant AppController::Base64 (NameError)
    from app_delegate.rb:5:in `application:didFinishLaunchingWithOptions:'
[...]
&lt;/pre&gt;

&lt;p&gt;Here, the &lt;i&gt;base64&lt;/i&gt; file is missing from the build system. You can fix that problem by adding the following code in the &lt;i&gt;Rakefile&lt;/i&gt;.&lt;/p&gt;

&lt;pre&gt;
MotionBundler.setup do |app|
  app.require "base64"
end
&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;RubyMotion Runtime Limitations&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Unfortunately, you still cannot just require every file that works within a &lt;i&gt;regular&lt;/i&gt; Ruby environment. You cannot require C extensions and you cannot evaluate Ruby code passed in a String (e.g. the &lt;code&gt;eval&lt;/code&gt; method). This is why MotionBundler cannot ensure that you can require every Ruby gem out there. They have to be &lt;i&gt;RubyMotion friendly&lt;/i&gt;, for example like &lt;a href="https://github.com/archan937/slot_machine"&gt;SlotMachine&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But as a last resort, MotionBundler offers you to possibility to mock source requirements by loading drop-in replacements written in pure Ruby.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Mocking Sources&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s say you want to use a Ruby gem which requires the &lt;i&gt;stringio&lt;/i&gt; extension. Because &lt;i&gt;stringio&lt;/i&gt; is a Ruby C extension, and that RubyMotion doesn&amp;#8217;t support Ruby C extensions, that Ruby gem will not load up in RubyMotion. However, as mentioned earlier, MotionBundler offers a possibility to bypass this problem by mocking the library.&lt;/p&gt;

&lt;p&gt;Instead of requiring the &lt;i&gt;stringio.bundle file&lt;/i&gt;, MotionBundler is able to mock it with &lt;a href="https://github.com/archan937/motion-bundler/blob/master/lib/motion-bundler/mocks/mac_ruby-0.12/stringio.rb"&gt;a pure Ruby implementation&lt;/a&gt; of it, taken from &lt;a href="https://github.com/MacRuby/MacRuby/blob/master/lib/stringio.rb"&gt;MacRuby&lt;/a&gt;. At the moment, MotionBundler also mocks &lt;a href="https://github.com/archan937/motion-bundler/blob/master/lib/motion-bundler/mocks/mac_ruby-0.12/strscan.rb"&gt;strscan&lt;/a&gt;, &lt;a href="https://github.com/archan937/motion-bundler/blob/master/lib/motion-bundler/mocks/zliby-0.0.5/zlib.rb"&gt;zlib&lt;/a&gt; and &lt;a href="https://github.com/archan937/motion-bundler/blob/master/lib/motion-bundler/mocks/httparty.rb"&gt;httparty&lt;/a&gt; (only its basic features).&lt;/p&gt;

&lt;p&gt;Aside from mocks being defined within the MotionBundler gem, you can also define your own mocks within your RubyMotion application. Just add a directory called mocks within the root directory of the application and put the &lt;i&gt;mock sources&lt;/i&gt; in it. The relative path of the mock source within that directory ensures a certain Ruby file being mocked during compile time.&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s say the root directory of your RubyMotion application is &lt;i&gt;~/Sources/sample_app&lt;/i&gt;. If you want to mock &lt;code&gt;require "yaml"&lt;/code&gt;, create a file at &lt;i&gt;~/Sources/sample_app/mocks/yaml.rb&lt;/i&gt; containing the mock code. If you want to mock &lt;code&gt;require "net/http"&lt;/code&gt;, create a file at &lt;i&gt;~/Sources/sample_app/mocks/net/http.rb&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;You aren&amp;#8217;t supposed to mock entire Ruby gems of course, that would be crazy. But you would rather mock fundamental Ruby standard library sources (like &lt;i&gt;stringio.bundle&lt;/i&gt;) so you don&amp;#8217;t have to dismiss a certain Ruby gem for use in your RubyMotion app on forehand.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Please Try MotionBundler!&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;MotionBundler is available on &lt;a href="https://github.com/archan937/motion-bundler"&gt;Github&lt;/a&gt;. The repository provides a sample application. You can clone the repository, navigate to the sample application directory, run &lt;code&gt;bundle&lt;/code&gt; followed by &lt;code&gt;rake&lt;/code&gt;. Please check out MotionBundler! Pull requests, remarks or requests are very welcome! You can also contact me &lt;a href="https://twitter.com/archan937"&gt;on Twitter&lt;/a&gt; :-)&lt;/p&gt;

&lt;p&gt;Finally, I would like to say thanks to &lt;a href="https://twitter.com/lrz"&gt;Laurent&lt;/a&gt;, &lt;a href="https://twitter.com/qrush"&gt;Nick Quaranto&lt;/a&gt; and &lt;a href="https://twitter.com/kastiglione"&gt;Dave Lee&lt;/a&gt; for giving me some feedback and suggestions.&lt;/p&gt;

&lt;p&gt;You can discuss this post on the &lt;a href="https://groups.google.com/forum/?fromgroups&amp;amp;nomobile=true#!topic/rubymotion/xlZhsPChZiU"&gt;RubyMotion google group&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&lt;a href="https://twitter.com/archan937"&gt;Paul Engel&lt;/a&gt; is a software developer living in beautiful Amsterdam, Netherlands.&lt;/i&gt;&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/50983350225</link><guid>http://blog.rubymotion.com/post/50983350225</guid><pubDate>Tue, 21 May 2013 07:37:00 -0400</pubDate></item><item><title>Introducing ProMotion, a Full-Featured RubyMotion Application Framework</title><description>&lt;p&gt;&lt;em&gt;(This is a guest post from Jamon Holmgren, creator and maintainer of &lt;a href="https://github.com/clearsightstudio/ProMotion"&gt;ProMotion&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Last August I started working on a new RubyMotion app. I quickly realized that one of UIKit’s most frequent pain points is working with &lt;code&gt;UINavigationControllers&lt;/code&gt;, &lt;code&gt;UITabBarControllers&lt;/code&gt;, and &lt;code&gt;UIViewControllers&lt;/code&gt; — it just took too many lines of code to move around in my app. That led to the idea behind ProMotion: abstracting the screen and navigation handling in a Ruby-like way.&lt;/p&gt;

&lt;p&gt;It has been a great experience building it and I’m going to show you how ProMotion could make your next iOS project a lot easier (with lots of code examples!). The source is also available on &lt;a href="https://github.com/jamonholmgren/promotion-demo"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;b&gt;Screens: Ruby-like UIViewControllers&lt;/b&gt;

&lt;p&gt;ProMotion subclasses &lt;code&gt;UIViewController&lt;/code&gt; and &lt;code&gt;UITableViewController&lt;/code&gt; to provide a ton of new functionality and abstraction and calls them &lt;code&gt;ProMotion::Screen&lt;/code&gt;. (&lt;a href="https://github.com/clearsightstudio/ProMotion#using-your-own-uiviewcontroller"&gt;You can also use ProMotion&lt;/a&gt; with &lt;a href="https://github.com/clayallsopp/formotion"&gt;Formotion&lt;/a&gt; or your own &lt;code&gt;UIViewController&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: from now on I’ll refer to &lt;code&gt;ProMotion&lt;/code&gt; by its shortcut alias, &lt;code&gt;PM&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;pre&gt;
class HomeScreen &amp;lt; PM::Screen
  title "Home"
end
&lt;/pre&gt;

&lt;p&gt;Pretty simple. What about &lt;code&gt;viewWillAppear:animated&lt;/code&gt; and other Obj-C methods? We implement simpler versions of those for your use:&lt;/p&gt;

&lt;pre&gt;
def on_init
# Fires right after the screen is initialized
end

def on_load
# Fires just before a screen is added to a view for the first time.
end

def will_appear
# Fires every time the screen will appear
end

def on_appear
# Fires just after the screen appears somewhere (after animations are complete)
end

def will_disappear
# Fires just before the screen will disappear
end

def on_disappear
# Fires after the screen is fully hidden
end
&lt;/pre&gt;

&lt;b&gt;Invisible UINavigationControllers&lt;/b&gt;

&lt;p&gt;When you create a screen you can pass in attributes. One of these is &lt;code&gt;nav_bar: true&lt;/code&gt; which creates a &lt;code&gt;UINavigationController&lt;/code&gt; and pushes the screen onto it. You don’t have to manage the navigation controller at all.&lt;/p&gt;

&lt;pre&gt;
open HomeScreen.new(nav_bar: true)
&lt;/pre&gt;

&lt;p&gt;Within that screen you can open other screens and they’ll be pushed onto the UINavigationController automatically.&lt;/p&gt;

&lt;pre&gt;
open SecondaryScreen
&lt;/pre&gt;

&lt;p&gt;If you pass in a class instead of an instance, ProMotion will instantiate it for you.&lt;/p&gt;

&lt;b&gt;Easy TabBarControllers&lt;/b&gt;

&lt;p&gt;Opening and managing a &lt;code&gt;UITabBarController&lt;/code&gt; is a pain in Objective-C. ProMotion makes it very simple and natural.&lt;/p&gt;

&lt;pre&gt;
class AppDelegate &amp;lt; PM::Delegate
  def on_load(app, options)
    open_tab_bar HomeScreen, AboutScreen, ContactScreen, HelpScreen
  end
end

# in app/screens/home_screen.rb

class HomeScreen &amp;lt; PM::Screen
  def open_another_tab
    # Switches to the AboutScreen created above if its tab title is “About”.
    open_tab “About”
  end

  def open_new_screen_in_another_tab
    # Programmatically switches to the HelpScreen
    # and pushes the SecondaryScreen onto its UINavigationController.
    open SecondaryScreen, in_tab: “Help”
  end
end
&lt;/pre&gt;

&lt;b&gt;Smart SplitViewControllers&lt;/b&gt;

&lt;p&gt;Split view controllers are as easy as tab bars.&lt;/p&gt;

&lt;pre&gt;
open_split_screen MenuScreen, DetailScreen
&lt;/pre&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/fdf24b0a4ae8a53c28d118ecc0466281/tumblr_inline_mmw9cdnIGU1qz4rgp.png" alt="open split screen"/&gt;&lt;/p&gt;

&lt;p&gt;From the left-hand part of the split screen it’s easy to open a child screen in the right. Just add &lt;code&gt;in_detail: true&lt;/code&gt; to the &lt;code&gt;open&lt;/code&gt; command:&lt;/p&gt;

&lt;pre&gt;
open SomeDetailScreen, in_detail: true
&lt;/pre&gt;

&lt;p&gt;This is ignored if there isn’t a split screen so it’s ideal for use in universal apps.&lt;/p&gt;

&lt;b&gt;Effortless Table Screens&lt;/b&gt;

&lt;p&gt;You can easily build list views (“tables”) in ProMotion. &lt;a href="https://github.com/clayallsopp/formotion"&gt;Formotion&lt;/a&gt; is excellent for building forms, but sometimes you just want a menu or list of information. That’s where ProMotion’s built-in &lt;code&gt;TableScreen&lt;/code&gt; works well.&lt;/p&gt;

&lt;pre&gt;
class HelpScreen &amp;lt; PM::GroupedTableScreen
  title "Help"

  def table_data
    @help_table_data ||= [{
      title: "Get Help",
      cells: [{
        title: "Email us", action: :email_us
      }]
    }]
  end

  def email_us
    mailto_link = NSURL.URLWithString("mailto:jamon@clearsightstudio.com")
    UIApplication.sharedApplication.openURL(mailto_link)
  end
end
&lt;/pre&gt;

&lt;p&gt;When the &lt;i&gt;Email us&lt;/i&gt; cell is tapped, ProMotion fires the &lt;code&gt;email_us&lt;/code&gt; method.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/347b94ac65eee3b1435ba96cb349e819/tumblr_inline_mmw9e93T931qz4rgp.png" alt="table screen"/&gt;&lt;/p&gt;

&lt;p&gt;For plain tables, you can add &lt;code&gt;searchable&lt;/code&gt; and &lt;code&gt;refreshable&lt;/code&gt; easily:&lt;/p&gt;

&lt;pre&gt;
class StatesScreen &amp;lt; PM::TableScreen
  title “States”
  searchable
  refreshable

  def table_data
    # list of states
  end

  def on_refresh
    # refresh your data here, usually async
    some_async_call do
      # update your data
      stop_refreshing
      update_table_data
    end
  end
end
&lt;/pre&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/3a4f86e187c181f11511c3917b9a37a8/tumblr_inline_mmw9lkvAlz1qz4rgp.png" alt="searchable, refreshable list of states"/&gt;&lt;/p&gt;

&lt;b&gt;Styling with Style&lt;/b&gt;

&lt;p&gt;Everybody has their favorite iOS styling system and ProMotion works beautifully with all of them. &lt;a href="http://www.pixate.com/"&gt;Pixate&lt;/a&gt;, &lt;a href="https://github.com/tombenner/nui"&gt;NUI&lt;/a&gt;, and of course &lt;a href="https://github.com/rubymotion/teacup"&gt;RubyMotion’s Teacup&lt;/a&gt; are all very good choices.&lt;/p&gt;

&lt;p&gt;For those who want a simple, Teacup-lite styling system, ProMotion comes with one built-in.&lt;/p&gt;

&lt;pre&gt;
set_attributes self.view,
  background_color: UIColor.grayColor

add UILabel.alloc.initWithFrame([[10, 10], [300, 45]]),
  text: “Welcome to ProMotion!”,
  resize: [ :left, :right, :top ],
  background_color: UIColor.clearColor,
  text_color: UIColor.whiteColor,
  shadow_color: UIColor.blackColor,
  number_of_lines: 0,
  text_alignment: UITextAlignmentCenter,
  font: UIFont.boldSystemFontOfSize(18.0)
&lt;/pre&gt;

&lt;p&gt;This &lt;code&gt;UILabel&lt;/code&gt; is added to the view and all the attributes are set. Snake case is converted to camel case automatically when appropriate. There are also some nice helpers like the &lt;code&gt;resize&lt;/code&gt; setting for &lt;code&gt;UIViewAutoresizingMasks&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/270d8c5d7f213fcc1f9978afb358284c/tumblr_inline_mmw9sbCgUR1qz4rgp.png" alt="image"/&gt;&lt;/p&gt;

&lt;b&gt;Perfect for Production&lt;/b&gt;

&lt;p&gt;ProMotion is &lt;a href="https://github.com/clearsightstudio/ProMotion#apps-built-with-promotion"&gt;already being used&lt;/a&gt; in production apps around the world and is becoming quite stable. It’s likely that version 1.0 will be coming soon without major changes to the API.&lt;/p&gt;

&lt;p&gt;Without RubyMotion, it’s very unlikely that a system like ProMotion would exist. There’s nothing like it in the Objective-C world and the community is a lot different there. It’s a testament to the RubyMotion community as well as Laurent and his team for making this possible.&lt;/p&gt;

&lt;p&gt;This is just an intro to ProMotion — head over to the &lt;a href="https://github.com/clearsightstudio/ProMotion"&gt;GitHub repo&lt;/a&gt; to learn more. I hope you take a look at it for your next project!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Jamon Holmgren (&lt;a href="http://twitter.com/jamonholmgren"&gt;@jamonholmgren&lt;/a&gt;) is the owner of &lt;a href="http://www.clearsightstudio.com/"&gt;ClearSight Studio&lt;/a&gt;, a mobile app and web development studio located near Portland, OR.&lt;/em&gt;&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/50523137515</link><guid>http://blog.rubymotion.com/post/50523137515</guid><pubDate>Wed, 15 May 2013 17:50:00 -0400</pubDate></item><item><title>RubyMotion Goes 2.0 And Gets OS X Support, Templates and Plugins</title><description>&lt;p&gt;It has been exactly a year since we launched RubyMotion. Yep, this is right, RubyMotion is one year old!&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/4b46c55e1e3a801dcd2d70b2e53cfc82/tumblr_inline_mmj3f1gtpZ1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;We released over the year a total of 35 software updates fixing countless bugs reported by our beloved users. That&amp;#8217;s almost 3 updates per month on average!&lt;/p&gt;
&lt;p&gt;We shipped significant features such as creating static libraries, debugging support (on both simulator and device), API reference documentation browser, automatic file dependencies, and more. &lt;span&gt;We also shipped support for iOS 6.0 and the new iPhone 5 architecture right after their announcements.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We did not expect the RubyMotion community to grow that fast. In just one year, we got &lt;a href="http://rubymotion-wrappers.com"&gt;exhaustive wrappers&lt;/a&gt;, &lt;a href="http://motioncasts.tv/"&gt;professional screencasts&lt;/a&gt;, a &lt;a href="http://pragprog.com/book/carubym/rubymotion"&gt;couple&lt;/a&gt; &lt;a href="http://www.packtpub.com/rubymotion-ios-develoment-essentials/book"&gt;books&lt;/a&gt;, and we even organized &lt;a href="http://blog.rubymotion.com/post/48547461731/rubymotion-inspect-2013-wrap-up"&gt;our very own conference&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We now believe it is time to focus on the second phase of our roadmap, which will essentially consist of introducing new innovative features on top of our toolchain as well as targeting other platforms.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Today, we are shipping our first 2.x release. We still have quite a bit of road to clear up our roadmap but we believe we are on the right path.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OS X Support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;RubyMotion is now supporting Mac application development. You can create OS X apps using the same toolchain you already know. We ported our static compiler, command-line interface and interactive shell (REPL) for OS X application development!&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/6a8b2b9d52b6ead27c98739d9bbedb35/tumblr_inline_mmhqghwWMg1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;RubyMotion OS X apps are statically compiled to Intel 32-bit and 64-bit architectures, include our custom ARC-inspired memory management system, weight less than two megabytes and do not require any 3rd-party dependency to run.&lt;/p&gt;
&lt;p&gt;The build system also supports OS X v10.7 and v10.8 as deployment targets and includes an &lt;em&gt;archive&lt;/em&gt; Rake task for distribution. 3rd-party projects can be vendored using the updated &lt;a href="https://github.com/HipByte/motion-cocoapods"&gt;motion-cocoapods&lt;/a&gt; gem.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The documentation in our &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href="http://rubymotion.com/developer-center"&gt;developer center&lt;/a&gt;&lt;span&gt; has been updated for OS X. &lt;/span&gt;&lt;span&gt;We have also been adding a few OS X samples to our&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;a href="https://github.com/HipByte/RubyMotionSamples"&gt;sample code repository&lt;/a&gt;&lt;span&gt;, check them out! We will be adding more samples soon, feel free to contribute some too.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Finally, we are also happy to report that popular RubyMotion libraries such as &lt;a href="https://github.com/rubymotion/BubbleWrap"&gt;Bubblewrap&lt;/a&gt;, &lt;a href="https://github.com/rubymotion/Teacup"&gt;Teacup&lt;/a&gt; and &lt;a href="https://github.com/rubymotion/Joybox"&gt;Joybox&lt;/a&gt; have been ported to OS X. We hope that other libraries will also be gradually ported to this new platform.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/CurveBeryl/Joybox-Examples"&gt;&lt;span&gt;&lt;img alt="image" src="http://media.tumblr.com/4e47f57de8fc8bacf019491db2752334/tumblr_inline_mmhqtbPXiX1qz4rgp.png"/&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;As you may know, RubyMotion is an improved version of &lt;/span&gt;&lt;a href="http://macruby.org"&gt;MacRuby&lt;/a&gt;&lt;span&gt;, an implementation of Ruby for the Mac that we started in 2006 at Apple. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;A lot of MacRuby enthusiasts supported us when we launched RubyMotion a year ago, and RubyMotion OS X support has been a consistent feature request over the year, since day 1.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Today, &lt;/span&gt;&lt;span&gt;OS X support ships to all RubyMotion customers, &lt;em&gt;for free&lt;/em&gt;. This is our birthday gift to you guys, thanks for your support!&lt;/span&gt;&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Project Templates&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;RubyMotion now exposes functionality to let users chose a template when creating a new project, by passing a value to the &lt;em&gt;&amp;#8212;template&lt;/em&gt; argument of the &lt;em&gt;motion create&lt;/em&gt; command.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;RubyMotion comes with 3 builtin templates: &lt;em&gt;ios&lt;/em&gt; (the default one), &lt;em&gt;osx&lt;/em&gt; and &lt;em&gt;gem&lt;/em&gt;, which will respectively create a RubyMotion iOS, OS X or RubyGem project.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;For example, to create a new OS X project named Hello:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;$ motion create --template=osx Hello&lt;br/&gt;    Create Hello
    Create Hello/app/app_delegate.rb
    Create Hello/app/menu.rb
    Create Hello/Rakefile
    Create Hello/resources/Credits.rtf
    Create Hello/spec/main_spec.rb&lt;/pre&gt;
&lt;p&gt;&lt;span&gt; 3rd-party templates can also be installed into the &lt;em&gt;~/Library/RubyMotion/template&lt;/em&gt; directory. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We expect certain RubyMotion gems to make use of the system to provide richer project templates that include specific integration code. As an example, the Joybox team is looking into making a template that includes a game skeletton.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;Command-Line Plugins&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Similarly to the template system, RubyMotion now exposes a way to add new commands to the &lt;em&gt;motion&lt;/em&gt; command-line tool, using plugins.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Builtin commands, such as &lt;em&gt;create&lt;/em&gt;, &lt;em&gt;update&lt;/em&gt;, &lt;em&gt;support&lt;/em&gt; and&lt;em&gt; ri&lt;/em&gt;, have been extracted as plugins. &lt;/span&gt;&lt;span&gt;3rd-party commands can also be installed into the &lt;/span&gt;&lt;em&gt;~/Library/RubyMotion/command&lt;/em&gt;&lt;span&gt; directory.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;RubyMotion gems can now extend the &lt;em&gt;motion&lt;/em&gt; command with their own actions, for example custom code generators.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;Common Build Directory&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The build system has been improved to use a common build directory when compiling external project files (ex. gems). &lt;/p&gt;
&lt;p&gt;This makes build times faster as gems will not be recompiled every time the project configuration changes, or when multiple RubyMotion projects are using the same gem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;Weak References&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;RubyMotion now exposes a way to let users create weak references. &lt;/span&gt;&lt;span&gt;For convenience reasons, we implemented the &lt;em&gt;WeakRef&lt;/em&gt; class which is also present in the standard Ruby library. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Weak references can be used in order to prevent cyclic references. A good example is implementing the delegate pattern.&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;class MyController
  def initialize(delegate)
    @delegate = WeakRef.new(delegate)
  end

  def do_something
    # ...
    @delegate.did_something
  end
end
&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;Objects passed to &lt;em&gt;WeakRef.new&lt;/em&gt; will not be retained, and any message sent to a &lt;em&gt;WeakRef&lt;/em&gt; object will be forwarded to the passed object.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;For performance reasons, &lt;em&gt;WeakRef&lt;/em&gt; objects are recognized early by the method dispatcher. The &lt;em&gt;WeakRef&lt;/em&gt; class in RubyMotion cannot be subclassed.&lt;/p&gt;
&lt;p&gt;We expect the RubyMotion memory management system to be able to deal with cyclic references in the future. In this case, the &lt;em&gt;WeakRef&lt;/em&gt; class will be replaced by a no-op.&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/49943751398</link><guid>http://blog.rubymotion.com/post/49943751398</guid><pubDate>Wed, 08 May 2013 13:36:00 -0400</pubDate></item><item><title>RubyMotion #inspect 2013 Wrap-Up</title><description>&lt;p&gt;Just a few weeks ago the &lt;a href="http://www.rubymotion.com/conference"&gt;first RubyMotion conference&lt;/a&gt; was happening in our home town of Brussels, Belgium! And guess what, it was pretty awesome!&lt;/p&gt;
&lt;p&gt;It was the first conference we ever organized. We would like to share our experience in this post as well as cover what happened!&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;&lt;strong&gt;The Venue&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"&gt;&lt;img alt="the grand'place" src="http://farm9.staticflickr.com/8397/8669087616_e3ee416ae3.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We wanted the first conference to be friendly, diverse and exclusive. We initially fixed the maximum number of attendees to 100 because we knew that over this limit it would have been difficult for everyone to meet up and chat. We eventually raised the limit to 130. Despite the fact that the majority of RubyMotion users are located in the United States, we also knew that we wanted the conference to happen in Belgium, for practical reasons.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It took us quite a bit of time to find the conference venue. &lt;span&gt;We visited a few venues but they didn&amp;#8217;t really match what we had in mind. We wanted the venue to be special, unusual, and at the same time professional and prestigious. &lt;/span&gt;&lt;span&gt;We also wanted the venue to be in the historical center of Brussels, because the area is full of hotels, restaurants, bars, and tourist attractions. Organizing the conference in a hotel near the airport was therefore out of the question.  &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The &lt;a href="http://en.wikipedia.org/wiki/Grand_Place"&gt;Grand Place&lt;/a&gt; is Brussels&amp;#8217; main square and also the center of its historical center. We started looking around for potential venues and we eventually figured out it was possible to rent a house on the Grand Place itself! We quickly jumped on the opportunity.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We got 130 visitors from every continent. A lot of different accents were heard, making the event very diverse. Most of the attendees were visiting Belgium for the first time, so they got to taste our awesome beers and chocolates!&lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;&lt;strong&gt;The Schedule&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"&gt;&lt;img alt="conference room" src="http://farm9.staticflickr.com/8396/8669094132_86cf539d06.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The conference featured a single track over 2 days. We pre-selected 10 speakers for the announcement and opened a call-for-papers. We originally wanted 18 presentations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Pre-selecting as many speakers was probably a mistake because we received close to 80 talk proposals. We didn&amp;#8217;t expect to receive as many talk proposals and it was very tough to decide on the remaining selection. We had to reject a lot of very interesting talks.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We eventually decided to go with 20 presentations, which means we had to fit 10 talks each day, and still leave enough room for breaks and lunch. We took over the challenge and&lt;/span&gt;&lt;span&gt; eventually managed to finish the conference on time!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a href="https://itunes.apple.com/us/app/rubymotion-inspect-2013/id622542872?mt=8"&gt;&lt;img alt="image" src="http://media.tumblr.com/ca86e5adee05570923ee7503b634c405/tumblr_inline_mlnin1HgrJ1qz4rgp.jpg"/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We decided not to print the schedule on paper and preferred to have an iOS app instead. We teamed with the awesome folks at &lt;a href="http://epic.net/"&gt;Epic&lt;/a&gt;, who already made the conference website, to create &lt;a href="https://itunes.apple.com/us/app/rubymotion-inspect-2013/id622542872?mt=8"&gt;an iPhone app for the conference&lt;/a&gt;. &lt;span&gt;The app was obviously written in RubyMotion, using the &lt;/span&gt;&lt;a href="https://github.com/rubymotion/teacup"&gt;Teacup&lt;/a&gt;&lt;span&gt; and &lt;/span&gt;&lt;a href="https://github.com/rubymotion/sugarcube"&gt;Sugarcube&lt;/a&gt;&lt;span&gt; libraries. You can find the &lt;/span&gt;&lt;a href="https://github.com/epicagency/rubymotion-inspect"&gt;full source code&lt;/a&gt;&lt;span&gt; on GitHub.&lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;&lt;strong&gt;The Food&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"&gt;&lt;img alt="the conference food" src="http://farm9.staticflickr.com/8390/8669438934_d86e3d7e4d.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Offering delicious food was extremely important to us. We did not want to give away dry sandwiches that you can find in most conferences.&lt;/p&gt;
&lt;p&gt;We welcomed visitors with fresh pastries (cooked onsite), coffee, tea and juices. Each attendee also received chocolates from &lt;a href="http://www.benoitnihant.be/"&gt;Benoit Nihant&lt;/a&gt;&amp;#8217;s Haute Couture selection. Benoit is one of the remaining &lt;em&gt;true chocolatiers&lt;/em&gt; of Belgium.&lt;/p&gt;
&lt;p&gt;For lunch, our attendees had access to a full Belgian buffet which included cured meats, steak tartare, duck, various salads, fresh vegetables, salted waffles and more. A huge assortiment of homemade deserts was also available, including chocolate mousse, fruit tarts, tiramisu, and more. And we of course served beer!&lt;/p&gt;
&lt;p&gt;Most attendees told us they had the best conference food experience ever.&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;&lt;strong&gt;The Shirt&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"&gt;&lt;img alt="image" src="http://media.tumblr.com/24de39342c060f4c0e1f07934faed011/tumblr_inline_mlnm198BvV1qz4rgp.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We designed the conference shirts by ourselves. We didn&amp;#8217;t want to go with a traditional &amp;#8220;conference name + date&amp;#8221; shirt, so we iterated quite a bit on the design.&lt;/p&gt;
&lt;p&gt;We finally ended up choosing to represent a coat of arms. The logo we went with features two wyverns (an homage to the &lt;a href="http://www.llvm.org"&gt;LLVM project&lt;/a&gt;) supporting the existing RubyMotion logo on a white shield, crowned with a sparkling ruby.&lt;/p&gt;
&lt;p&gt;The motto is written on a white ruban and reads &lt;span&gt;&amp;#8220;#inspect RubyMotion 2013&amp;#8221;.&lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;&lt;strong&gt;The Presentations, 1st Day&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"&gt;&lt;img alt="rich talking" src="http://farm9.staticflickr.com/8388/8669153626_213247cfc8.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;A Brave New World: Learning iOS for the Ruby Refugee&lt;/em&gt;, by &lt;strong&gt;Nick Quaranto&lt;/strong&gt; (&lt;a href="https://speakerdeck.com/qrush/rubymotion-the-sleeper-has-awakened"&gt;slides available&lt;/a&gt;). Nick covered his experience using RubyMotion to write a couple sample projects (which eventually turned into the official Basecamp iPhone app) and talked about the &lt;a href="https://github.com/qrush/motion-settings-bundle"&gt;motion-settings-bundle&lt;/a&gt; and &lt;a href="https://github.com/qrush/motion-layout"&gt;motion-autolayout&lt;/a&gt; gems he extracted in the process. &lt;/span&gt;&lt;span&gt;We later recorded an &lt;a href="http://blog.rubymotion.com/post/47542877666/rubymotion-success-story-basecamp-for-iphone"&gt;interview with Nick&lt;/a&gt; that you can also check out. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Behaviour Driven Motion using Calabash&lt;/em&gt;, by &lt;strong&gt;Karl Krukow&lt;/strong&gt; (&lt;a href="https://speakerdeck.com/krukow/rubymotion-number-inspect2013-behavior-driver-motion-using-calabash"&gt;slides available&lt;/a&gt;). Karl introduced the Calabash framework and how you can write acceptance tests for RubyMotion apps with it, using the &lt;a href="https://github.com/calabash/motion-calabash"&gt;motion-calabash&lt;/a&gt; gem. (Note: A few days later it was announced that LessPainful, Karl&amp;#8217;s company, was &lt;a href="http://techcrunch.com/2013/04/16/xamarin-launches-test-cloud-automated-mobile-ui-testing-platform-acquires-mobile-test-company-lesspainful/"&gt;acquired by Xamarin&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Controlling the Real World with RubyMotion&lt;/em&gt;, by &lt;strong&gt;Rich Kilmer&lt;/strong&gt; (&lt;a href="https://speakerdeck.com/richkilmer/bluetooth-le-number-inspect-2013-brussels-belgium-28-march-2013"&gt;slides available&lt;/a&gt;). Rich talked about the history of bluetooth, starting from the first specification up to the bluetooth4 standard, and described the APIs that you can use to interface from RubyMotion. And before you ask, yes, Rich was &lt;a href="http://isrichkilmerwearingwhitepants.com/"&gt;wearing white pants&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Elevate your Intent&lt;/em&gt;, by &lt;strong&gt;Matt Green&lt;/strong&gt; (&lt;a href="https://speakerdeck.com/mattgreen/elevate-your-intent"&gt;slides available&lt;/a&gt;). Matt talked about the complexity that can rise when designing iOS apps and offered a solution through his &lt;a href="https://github.com/mattgreen/elevate"&gt;elevate gem&lt;/a&gt; that we recommend checking out.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Accessibility and RubyMotion&lt;/em&gt;, by &lt;strong&gt;Austin Seraphin&lt;/strong&gt; (&lt;a href="http://www.slideshare.net/AdrianoMartino/ruby-motion-andiosaccessibility"&gt;slides available&lt;/a&gt;). Austin, a blind developer, talked about accessibility and how RubyMotion makes it easier for blind people to develop apps. &lt;span&gt;Undoubtedly one of the most acclaimed talks of the conference. Austin also covered his trip to the conference in 3 blog posts that we highly recommend: &lt;a href="http://behindthecurtain.us/2013/04/15/an-unexpected-journey/"&gt;An Unexpected Journey&lt;/a&gt;, &lt;a href="http://behindthecurtain.us/2013/04/17/inspect-2013/"&gt;#inspect 2013&lt;/a&gt;, and &lt;a href="http://behindthecurtain.us/2013/04/19/the-journey-home/"&gt;The Journey Home&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"&gt;&lt;img alt="austin talking" src="http://farm9.staticflickr.com/8386/8669145480_4a5ca23a7f.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;CoreData For The Curious Rubyist&lt;/em&gt;, by &lt;strong&gt;Jonathan Penn&lt;/strong&gt; (&lt;a href="http://cocoamanifest.net/features/2013-03-core-data-in-motion.pdf"&gt;slides available&lt;/a&gt;). Jonathan introduced CoreData, Apple&amp;#8217;s framework for data persistence. He covered what CoreData is, when to use it, and the builtin framework classes you will have to deal with when integrating it in your app. &lt;a href="https://github.com/jonathanpenn/core-data-journal-sample"&gt;Demo code available&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Life and Times of an Object&lt;/em&gt;, by &lt;strong&gt;Joshua Ballanco&lt;/strong&gt;. Josh started with a simple app that was crashing and investigated the crash using low-level tools such as gdb and malloc-history. Eventually, it turned out that the bug was in the RubyMotion runtime!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Concurrency in RubyMotion: Use the Multicore Luke!&lt;/em&gt;, by &lt;strong&gt;Mateus Armando&lt;/strong&gt; (&lt;a href="https://speakerdeck.com/seanlilmateus/concurrency-patterns-in-rubymotion"&gt;slides available&lt;/a&gt;). Mateus talked about how it is necessary to use concurrency and the various approaches to it, such as &lt;span&gt;GCD and NSOperationQueue.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Get More From RubyMotion with RubyMine&lt;/em&gt;, by &lt;strong&gt;Dennis Ushakov&lt;/strong&gt;. Dennis didn&amp;#8217;t have any slides, he simply started developing a RubyMotion app straight within &lt;a href="http://jetbrains.com/ruby"&gt;RubyMine&lt;/a&gt; and demo&amp;#8217;ed the excellent RubyMotion integration we (HipByte and JetBrains) have been working on together, featuring smart auto-completion, debugging on simulator and device, refactoring, documentation viewer, and more.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Crafting iOS Dev Tools in Redcar&lt;/em&gt;, by &lt;strong&gt;Delisa Mason&lt;/strong&gt; (&lt;a href="https://speakerdeck.com/kattrali/crafting-ios-dev-tools-in-redcar-the-ruby-editor"&gt;slides available&lt;/a&gt;). Delisa talked about Redcar, an open-source editor written in Ruby, and introduced its very extensible plugin infrastructure. She eventually showed how she managed to &lt;a href="https://github.com/kattrali/redcar-rubymotion"&gt;integrate RubyMotion in Redcar&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;&lt;strong&gt;The Presentations, 2nd Day&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"&gt;&lt;img alt="mattt talking" src="http://farm9.staticflickr.com/8405/8669129582_e15ddae294.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;NSRevolution: How Ruby hackers built the new Objective-C Open Source community&lt;/em&gt;, by &lt;strong&gt;Mattt Thompson&lt;/strong&gt; (&lt;a href="https://speakerdeck.com/mattt/nsrevolution-how-ruby-hackers-built-the-new-objective-c-open-source-community"&gt;slides available&lt;/a&gt;). Mattt talked about the influence of the Ruby community on the younger iOS community. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;More Than You Need to Know About CocoaPods&lt;/em&gt;, by &lt;strong&gt;Eloy Duran&lt;/strong&gt; (&lt;a href="http://www.slideshare.net/alloy020/ruby-motion-inspect-2013-without-notes-18676749"&gt;slides available&lt;/a&gt; + &lt;a href="http://t.co/b7uk8llnHb"&gt;video 1&lt;/a&gt; and &lt;a href="http://t.co/66oHxZD87x"&gt;video 2&lt;/a&gt;). Our hero Eloy talked about &lt;a href="http://cocoapods.org/"&gt;CocoaPods&lt;/a&gt;, the missing package manager for Objective-C libraries, and also featured a sneak-peak at their sister project, &lt;a href="http://cocoadocs.org"&gt;CocoaDocs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Wrapping iOS in RubyMotion&lt;/em&gt;, by &lt;strong&gt;Clay Allsopp&lt;/strong&gt; (&lt;a href="https://speakerdeck.com/clayallsopp/wrapping-ios-with-rubymotion"&gt;slides available&lt;/a&gt;). Clay covered various techniques you can use to create elegant and nice Ruby wrappers on top of iOS API patterns, such as callbacks, delegates and enumerations.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Goodbye IB, Hello Teacup&lt;/em&gt;, by &lt;strong&gt;Colin Gray&lt;/strong&gt; (&lt;a href="https://github.com/colinta/goodbye-xcode"&gt;slides available&lt;/a&gt; + &lt;a href="http://media.colinta.com/goodbye-xcode.mp4"&gt;video&lt;/a&gt;). Colin started talking about Teacup, a library to style user interfaces, and eventually announced &lt;a href="https://github.com/colinta/motion-xray"&gt;motion-xray&lt;/a&gt;, a powerful iOS inspector running inside RubyMotion apps that can be opened using a device gesture.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Using BubbleWrap to Quickly Build RubyMotion Apps&lt;/em&gt;, by &lt;strong&gt;Marin Usalj&lt;/strong&gt; (&lt;a href="https://speakerdeck.com/mneorr/bubblewrap"&gt;slides available&lt;/a&gt;). Marin gave a nice overview of the &lt;a href="https://github.com/rubymotion/BubbleWrap"&gt;Bubblewrap&lt;/a&gt; project, which aims at becoming the ActiveSupport of RubyMotion.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"&gt;&lt;img alt="juan speaking" src="http://farm9.staticflickr.com/8399/8669443586_96461aef04.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Mixing CoffeeScript in RubyMotion apps&lt;/em&gt;, by &lt;strong&gt;Michael Erasmus&lt;/strong&gt; (&lt;a href="https://github.com/michael-erasmus/inspect-talk"&gt;slides available&lt;/a&gt;). Michael talked about his experience building a cross-platform mobile app where CoffeeScript was used to build the common logic.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Building Interactive Data Visualization Charts&lt;/em&gt;, by &lt;strong&gt;Amit Kumar&lt;/strong&gt; (&lt;a href="https://speakerdeck.com/toamitkumar/rubymotion-building-interactive-data-visualization-charts"&gt;slides available&lt;/a&gt;). Amit talked about the various libraries one can use to integrate interactive charts in an iOS app, and eventually announced the &lt;a href="https://github.com/toamitkumar/motion-plot"&gt;motion-plot&lt;/a&gt; gem, a nice RubyMotion wrapper sitting on top of the &lt;span&gt;CorePlot framework.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Cocos2D, an Easier Way&lt;/em&gt;, by &lt;strong&gt;Juan Karam&lt;/strong&gt; (&lt;a href="https://speakerdeck.com/curveberyl/cocos2d-an-easier-way"&gt;slides available&lt;/a&gt;). Juan talked about his gaming experience, basic game programming concepts, and eventually announced &lt;a href="https://github.com/rubymotion/Joybox"&gt;Joybox&lt;/a&gt;, a RubyMotion gaming library integrating the popular Cocos2D and Box2D frameworks. He even wrote a simple game during his talk!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Let’s Move with CoreMotion&lt;/em&gt;, by &lt;strong&gt;Akshat Paul&lt;/strong&gt; and &lt;strong&gt;Abhishek Nalwaya&lt;/strong&gt; (&lt;a href="https://speakerdeck.com/akshatpaul/lets-move-with-core-motion-rubymotion-conference-number-inspect-2013"&gt;slides available&lt;/a&gt;). The inseparable friends gave a speedy talk about CoreMotion, Apple&amp;#8217;s framework for motion sensors integration. They talked about the core builtin classes and how you can use them from RubyMotion.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;RubyMotion: Past, Present and Future&lt;/em&gt;, by &lt;strong&gt;Laurent Sansonetti&lt;/strong&gt;. Laurent gave the final conference presentation. He talked about what made him create RubyMotion, the current state of the project, and what the future holds.&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;&lt;strong&gt;The Party&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"&gt;&lt;img alt="the party!" src="http://farm9.staticflickr.com/8390/8668345025_04c35275da.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We concluded this wonderful conference with an awesome party! &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Our friends at &lt;/span&gt;&lt;a href="http://www.github.com"&gt;GitHub&lt;/a&gt;&lt;span&gt; graciously sponsored the party. We booked the entire Hoppy Loft room of the &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/D%C3%A9lirium_Caf%C3%A9"&gt;Delirium Cafe&lt;/a&gt;&lt;span&gt;, one of Brussels&amp;#8217; legendary pubs, which features thousands of different beers.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.github.com"&gt;&lt;img alt="image" src="http://media.tumblr.com/ec3e3346a18918cc098c42ed51f99fac/tumblr_inline_mlnt9nj3tY1qz4rgp.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Conference attendees were able to taste quite a lot of delicious Belgian beers. We ended the party at around 4AM!&lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;&lt;strong&gt;The Sponsors&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;RubyMotion #inspect 2013 would not have been possible without the support of our great sponsors.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.heroku.com"&gt;&lt;img alt="image" src="http://media.tumblr.com/4050afe267a44087cd28c3d22f8573e1/tumblr_inline_mlnpepNp7y1qz4rgp.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Our lead gold sponsor. &lt;/span&gt;&lt;a href="http://www.heroku.com"&gt;&lt;strong&gt;Heroku&lt;/strong&gt;&lt;/a&gt;&lt;span&gt; is the first and best multi-language cloud application platform, or platform-as-a-service. Heroku allows developers to deploy, scale, and manage their apps without needing to think about servers or systems administration. Over one million applications have been deployed to Heroku.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.jetbrains.com/ruby"&gt;&lt;img alt="image" src="http://media.tumblr.com/694921db2f2261057f7852e1b9e43a0d/tumblr_inline_mlnpjsSra31qz4rgp.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One of our silver sponsors. &lt;a href="http://www.jetbrains.com/ruby"&gt;&lt;strong&gt;JetBrains&lt;/strong&gt;&lt;/a&gt; is a world leader in smart development tools that help software developers simplify their challenging tasks and automate the routine ones. &lt;a href="http://www.jetbrains.com/ruby"&gt;RubyMine&lt;/a&gt;, the most powerful Ruby IDE, provides smart coding assistance and advanced testing and debugging features for all types of Ruby projects and cutting-edge technologies, including RubyMotion.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cyrusinnovation.com"&gt;&lt;img alt="image" src="http://media.tumblr.com/02db05a4742170754d9b413971374842/tumblr_inline_mlnpruXA8N1qz4rgp.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One of our silver sponsors. Here at &lt;strong&gt;&lt;a href="http://www.cyrusinnovation.com/expertise/rubymotion/"&gt;Cyrus&lt;/a&gt;&lt;/strong&gt;, our team of forward-thinking developers are continuously expanding their skillsets to incorporate the latest tools in software development. With RubyMotion, Cyrus is once again at the forefront of innovation helping our clients cut down both development time and costs.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nedap.com/"&gt;&lt;img alt="image" src="http://media.tumblr.com/4eb4232536c6dfcd7bcbb16e5c3d179c/tumblr_inline_mlnpzvkdQm1qz4rgp.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;One of our silver sponsors.&lt;/span&gt;&lt;strong&gt; &lt;a href="http://www.nedap.com/"&gt;Nedap&lt;/a&gt;&lt;/strong&gt;&lt;span&gt; is a manufacturer of intelligent technological solutions for relevant themes. Sufficient food for a growing population, clean drinking water throughout the world, smart networks for sustainable energy are just a couple of examples of themes Nedap is working on.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://boxcar.io/"&gt;&lt;img alt="image" src="http://media.tumblr.com/402b6cef3f496dfc379935b2f5aa7a2c/tumblr_inline_mlnq7eFL5C1qz4rgp.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;One of our silver sponsors. &lt;/span&gt;&lt;a href="http://boxcar.io/"&gt;&lt;strong&gt;Boxcar&lt;/strong&gt;&lt;/a&gt;&lt;span&gt; is a push notification service. Boxcar provides real time push notifications for the services you love.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pragmaticstudio.com/"&gt;&lt;img alt="image" src="http://media.tumblr.com/c4ce176d97abdbd7d4c6787e04db48e4/tumblr_inline_mlnqlepcuQ1qz4rgp.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One of our bronze sponsors. At &lt;a href="http://pragmaticstudio.com/"&gt;&lt;strong&gt;The Pragmatic Studio&lt;/strong&gt;&lt;/a&gt;, we help programmers continually improve their skills and their careers through hands-on training courses.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://belighted.com/en"&gt;&lt;img alt="image" src="http://media.tumblr.com/96a17bbc023b66b8f50eff05ca3267ad/tumblr_inline_mlnqfnjuc11qz4rgp.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;One of our bronze sponsors. Founded in 2008, &lt;/span&gt;&lt;a href="http://belighted.com/en"&gt;&lt;strong&gt;Belighted&lt;/strong&gt;&lt;/a&gt;&lt;span&gt; is a leader in the use of Ruby on Rails technologies and agile methodologies.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"&gt;&lt;img alt="the helpers team" src="http://farm9.staticflickr.com/8406/8669091146_708a334c53.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Organizing a conference is hard. But we believe we did a pretty good job on this one! Nothing catastrophic happened, people enjoyed the event, the Wi-Fi didn&amp;#8217;t work, and budget-wise we should break-even.&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;RubyMotion #inspect 2013 would not have been possible without our helpers team: &lt;a href="http://twitter.com/pinuxette"&gt;Stephanie Sansonetti&lt;/a&gt;, &lt;a href="https://twitter.com/matrixise"&gt;Stephane Wirtel&lt;/a&gt;, &lt;a href="https://twitter.com/yann_ck"&gt;Yannick Schutz&lt;/a&gt;, &lt;a href="https://twitter.com/franckverrot"&gt;Franck Verrot&lt;/a&gt; and &lt;a href="https://twitter.com/mlainez"&gt;Marc Lainez&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We published the &lt;a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"&gt;official photos of the conference&lt;/a&gt;, check them out! Also, all presentations have been recorded, we will let you know once they are available.&lt;/p&gt;
&lt;p&gt;Finally, we would like to announce that &lt;em&gt;there will be a RubyMotion #inspect 2014&lt;/em&gt; &lt;em&gt;conference&lt;/em&gt;. We can already tell you it will happen on the other side of the Atlantic ocean and that it will be &lt;em&gt;even more epic&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Stay thirsty, my friends!&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/48547461731</link><guid>http://blog.rubymotion.com/post/48547461731</guid><pubDate>Sun, 21 Apr 2013 15:28:00 -0400</pubDate></item><item><title>Algolia Search Adds RubyMotion Support</title><description>&lt;p&gt;&lt;a href="http://www.algolia.com/"&gt;Algolia Search&lt;/a&gt; is a product that lets you implement real-time instant search in your app, with features like type-ahead search, typo-tolerance, instant visual feedback and geosearch.&lt;/p&gt;
&lt;p&gt;We are glad to report that they just announced that they will &lt;a href="http://blog.algolia.com/algolia-search-is-now-available-for-rubymotion/"&gt;support RubyMotion&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We worked together with the folks at Algolia on a &lt;/span&gt;&lt;span&gt;&lt;a href="https://github.com/algolia/motion-algolia-search"&gt;RubyMotion integration gem&lt;/a&gt;&lt;span&gt; that lets you easily integrate their offline SDK.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;The Algolia folks also graciously agreed to donate 5&amp;#160;&lt;em&gt;White Label&lt;/em&gt; licenses (custom branding) to the firsts to email &lt;a href="mailto:hey@algolia.com"&gt;hey@algolia.com&lt;/a&gt;. Hurry up!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe frameborder="0" height="281" src="http://player.vimeo.com/video/60997827?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="500"&gt;&lt;/iframe&gt;&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/48123282394</link><guid>http://blog.rubymotion.com/post/48123282394</guid><pubDate>Tue, 16 Apr 2013 11:13:00 -0400</pubDate></item><item><title>Announcing MotionMeetup: Monthly Online RubyMotion Meetups!</title><description>&lt;p&gt;&lt;em&gt;(This is a guest post from &lt;a href="https://twitter.com/GantLaborde"&gt;Gant Laborde&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;While RubyMotion continues to build momentum, it’s obvious that not everyone can attend such endeavors as &lt;a href="http://rubymotion.com/conference"&gt;RubyMotion #inspect&lt;/a&gt; or the &lt;a href="http://rubymotion-sfbay-training-2013.eventbrite.com/#"&gt;public RubyMotion training in the San Francisco Bay Area&lt;/a&gt;. Fear not! From the community of RubyMotion developers we’re happy to announce a new monthly online meetup for everyone, worldwide, called &lt;a href="http://meetup.rubymotion.com/"&gt;MotionMeetup&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://meetup.rubymotion.com/"&gt;&lt;img alt="image" src="http://media.tumblr.com/9004d4e3da09ce77e2776547ea949a7a/tumblr_inline_ml5w360d4h1qz4rgp.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This online meetup will spotlight a developer from the &lt;a href="https://github.com/rubymotion"&gt;RubyMotion community&lt;/a&gt; or general RubyMotion ecosystem to interview and interact with the community.&lt;/p&gt;
&lt;p&gt;Meetups will, as of now, occur once a month and consist of at least 30 minutes of live discussion via video conference. The discussions will cover a wide array of topics generally consisting of each spotlighted guest’s projects all the way to their opinions and philosophies.&lt;/p&gt;
&lt;p&gt;You’ll also be able to ask your own questions in the #rubymotion IRC channel on &lt;a href="http://freenode.net/"&gt;freenode&lt;/a&gt; and interact with featured guests and fellow developers while the video conference is going on.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;If you would like to be notified on updates please fill out the sign up form at &lt;a href="http://meetup.rubymotion.com/"&gt;MotionMeetup&lt;/a&gt;. If you’re interested in being a featured guest for a future meetup or would like to see a topic addressed, please contact the coordinators of MotionMeetup, the good people at &lt;a href="http://iconoclastlabs.com/#home_contact"&gt;Iconoclast Labs&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/47799695651</link><guid>http://blog.rubymotion.com/post/47799695651</guid><pubDate>Fri, 12 Apr 2013 15:45:00 -0400</pubDate></item><item><title>RubyMotion Success Story: Basecamp for iPhone</title><description>&lt;p&gt;37signals released last month an &lt;a href="http://37signals.com/svn/posts/3430-launch-the-official-basecamp-iphone-app"&gt;official iPhone app for Basecamp&lt;/a&gt;, their flagship project management software. It is the first iOS app developed completely in-house at 37signals.&lt;/p&gt;
&lt;p&gt;As you may have already heard, the Basecamp app is &lt;a href="http://37signals.com/svn/posts/3432-why-i-loved-building-basecamp-for-iphone-in-rubymotion"&gt;written in RubyMotion&lt;/a&gt;. &lt;span&gt;Since &lt;a href="http://quaran.to/"&gt;Nick Quaranto&lt;/a&gt; was speaking at our conference last week, we decided to take advantage of the opportunity to record a quick interview with him about the experience. Check out the video and the transcript below! &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe frameborder="0" height="381" src="http://player.vimeo.com/video/63651521" width="500"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You just announced the &lt;a href="https://github.com/qrush/motion-layout"&gt;motion-layout&lt;/a&gt; gem tonight, has it been a long time coming?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;(Laughs). Kind of. When we wrote the Basecamp app at 37signals we didn&amp;#8217;t really use Interface Builder at all.&lt;/p&gt;
&lt;p&gt;There is a new API in iOS6+ that provides auto layout for views, and specifically there is an ASCII-art style format string. It&amp;#8217;s really weird that Apple let programmers design ASCII-art languages. So, the gem wraps that kind of verbose API that Apple provides.&lt;/p&gt;
&lt;p&gt;So I guess it&amp;#8217;s kind of been a long time coming, it has been 2-3 months in the making, it&amp;#8217;s really not complicated, it&amp;#8217;s just a little gem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Speaking of the Basecamp app, when did that get started? When did you put that into your bosses&amp;#8217; ears? &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s kind of an evolution. I started using RubyMotion in June, and RubyMotion came out in May. I basically got that month – I was very lucky to get &lt;a href="http://37signals.com/svn/posts/3186-workplace-experiments-a-month-to-yourself"&gt;a whole month&lt;/a&gt; to just work on iOS.&lt;/p&gt;
&lt;p&gt;I hadn&amp;#8217;t done any iOS work before, I had only done Ruby and Rails, and before that, I had a Microsoft background. (Laughs)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You don&amp;#8217;t have to admit that here (Laughs) &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I feel bad now. (Laughs)&lt;/p&gt;
&lt;p&gt;Anyway, the first app we worked on was kind of a prototype. It was to learn how iOS apps worked. That got rejected, we ended up not going forward with that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How was that initial learning experience? &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Good! I feel like I really got a lot from that whole month. I learned how to make an app, how to &lt;a href="https://github.com/HipByte/motion-testflight"&gt;ship it on TestFlight&lt;/a&gt;, I learned gestures and how hard it is to write an app, images and all sorts of other stuff. The different layouts, and how things are supposed to work.&lt;/p&gt;
&lt;p&gt;We didn&amp;#8217;t go forward with that very specific idea, because we were kind of prototyping the idea, but we kind of merged together two ideas that were coming forward. I had an idea: in that little prototype app we used HTML inside a small part of the app, and it felt very native, and at the same time we were working on web views for Basecamp, so that if you were on Safari on iOS, or Android, or any other browser you could see your stuff in Basecamp, so we kind of decided that, wow this is really native, it felt very native on the phone even if it was HTML.&lt;/p&gt;
&lt;p&gt;We had all these views, and we kind of combined these two into an app. It wasn&amp;#8217;t Basecamp at the start, we actually started just by solving specific problems, for example just to get an update on your phone when something was happening on your projects.&lt;/p&gt;
&lt;p&gt;The app was focused on that at first, then we realized it kind of stinks that this is all you have, and we wanted to jump between things in your projects, and see all your TODOs, or all your files, so it kind of evolved from there and eventually it became the Basecamp app. We didn&amp;#8217;t start by saying “we are going to make a Basecamp app”, it was more started like we have these problems when we&amp;#8217;re on the run with Basecamp, and we want to fix those.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://basecamp.com/mobile"&gt;&lt;img alt="image" src="http://media.tumblr.com/a0d0b6c7ea4fcd3d8e8a9dc6e94b8cff/tumblr_inline_ml1714vcil1qz4rgp.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What did your RubyMotion toolbox and workflow look like? &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pretty normal, we do use a mix of &lt;a href="http://cocoapods.org/"&gt;Cocoapods&lt;/a&gt; and gems, we use some URL caching, there is just a few others&amp;#8230; date formatter stuff that we use as well.&lt;/p&gt;
&lt;p&gt;On the Ruby side we use &lt;a href="https://github.com/rubymotion/BubbleWrap"&gt;Bubblewrap&lt;/a&gt; which is a great resource for anyone that&amp;#8217;s starting with RubyMotion, just for iOS development in general, it saves a ton of time.&lt;/p&gt;
&lt;p&gt;There are a few gems that I extracted along the path like &lt;a href="https://github.com/qrush/motion-layout"&gt;motion-layout&lt;/a&gt;, I also have another one to make settings-bundles, called &lt;a href="https://github.com/qrush/motion-settings-bundle"&gt;motion-settings-bundle&lt;/a&gt;. So it&amp;#8217;s kind of a mix of both, and I think that it&amp;#8217;s very healthy that we can get all of these great libraries from the Objective-C world and use new Ruby stuff as well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You are a very seasoned Rails and Ruby developer, what were the challenges working with RubyMotion? And Laurent won&amp;#8217;t hear this. (Laughs) &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;(Laughs). I didn&amp;#8217;t have any big problems with RubyMotion, the challenges were mostly iOS, and I think that&amp;#8217;s&amp;#8230; you can&amp;#8217;t get around it, you have to learn the Apple APIs, you have to deal with that, you have to understand the patterns that are in Objective-C in Ruby, and that was a big source of conflict for me, because there is a conflict between the style we see in Ruby and the style in Objective-C, and they kind of butt heads all the time.&lt;/p&gt;
&lt;p&gt;So I think that that was the hardest part for me, understanding and internalizing the patterns that are in Objective-C and all over Cocoa and libraries, such as delegates, the list goes on an on, like constants and enums, the list doesn&amp;#8217;t end, you have to know all these things, you have to be fluent in both to be useful, but I did it (Laughs).&lt;/p&gt;
&lt;p&gt;So I think it&amp;#8217;s definitely possible to come from basically zero iOS knowledge and do an app with RubyMotion.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Is there anything that you learned along the way – I am sure there are some things! – so when you start you next app, what are the things you learned that will make you start quicker? &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I am going to start testing more (Laughs). &lt;span&gt;I need to admit that I didn&amp;#8217;t do any good job at all and we are definitely going to fix that, because the Basecamp app is something that we care about and we need it to last for years. So that&amp;#8217;s a big thing I wished I looked into sooner.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Another thing&amp;#8230; I always learn this lesson again and again: test on the device sooner! Obviously if you are making a mobile app you should be, but it&amp;#8217;s very easy to be tricked thinking that the simulator is the real thing, when it&amp;#8217;s not. There are performance problems that you see on the device that aren&amp;#8217;t in the simulator, and I feel like I got reminded of this on a weekly basis.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Was there anything from the conference that just finished that you were excited about? You mentioned testing&amp;#8230; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yeah there were lots of great testing talks, a lot of crazy things came out, people really showed stuff I was impressed by.&lt;/p&gt;
&lt;p&gt;One of the later talks was about Cocos2d, which is a game wrapper called &lt;a href="https://github.com/rubymotion/joybox"&gt;Joybox&lt;/a&gt;, and it&amp;#8217;s really neat, the guy basically made an Angry Birds clone in like 10 minutes in front of us, it was kind of crazy!&lt;/p&gt;
&lt;p&gt;There was a testing talk about &lt;a href="https://github.com/calabash/motion-calabash"&gt;Calabash&lt;/a&gt;, which is really neat. Despite using &lt;a href="http://cukes.info/"&gt;Cucumber&lt;/a&gt; (and I have written a lot of Cucumber code), so I understand how difficult it is and how people&amp;#8217;s opinions vary on it, but the coolest thing was that internally you had this nice API to do testing. You could drag things, you could look inside of web views, which is a big deal for us, you can do all sorts of stuff, and it&amp;#8217;s backed by cucumber but beneath it is this cool Ruby thing that I need to look into!&lt;/p&gt;
&lt;p&gt;I was really impressed by the quality level of talks and the stuff people showed off.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If you were starting your next app, how would you convince your boss to use RubyMotion?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well, that&amp;#8217;s really a good question. (Laughs)&lt;/p&gt;
&lt;p&gt;Luckily I didn&amp;#8217;t have to do too much convincing. Showing them how much easier it is is always a good thing, like the before and after, here is how it is in Objective-C, and here is the much-improved-less-verbose version in Ruby.&lt;/p&gt;
&lt;p&gt;Another thing, that I think is the biggest win, especially for people that are coming from Ruby and Rails background, that if you&amp;#8217;ve already got a team of people who know Ruby on Rails, the jump is a lot smaller to this new brave world, right, because you can leverage all of the toolchain that they know, they can use whatever they have been using in Rails, it&amp;#8217;s the same language, there are maybe a very little differences but it&amp;#8217;s still Ruby, you get all of the awesomeness that is Ruby, but you can&amp;#8217;t get around learning the iOS APIs.&lt;/p&gt;
&lt;p&gt;So I guess that if you are coming from a Ruby and Rails side, that&amp;#8217;s it. If you&amp;#8217;re coming from an iOS team I guess it&amp;#8217;s probably a bit of a harder sell. Since personally I don&amp;#8217;t have experience with that it&amp;#8217;s harder to speak on, but I hope that if you are an iOS developer looking at RubyMotion you get a solid look at the code, like the comparison, how much easier it would be, and especially &lt;a href="http://rubymotion-wrappers.com/"&gt;all the new things&lt;/a&gt; that are coming along that help you make a RubyMotion app, and that you can&amp;#8217;t really use in Objective-C. So I hope that you give that a look if you&amp;#8217;re trying to convince your boss.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Are there any tools, any tricks that you would like to see come down the pipeline? &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It would be really nice if every-gem-ever worked, that&amp;#8217;s very unrealistic, but I like Ruby gems a lot, so it would be very cool, it&amp;#8217;s also a hard problem and it&amp;#8217;s definitely been an MVP-style thing for the RubyMotion team. Just the fact that already we can make these really awesome things without having the bulk of Ruby gems available is a really good sign.&lt;/p&gt;
&lt;p&gt;Besides that, Laurent mentioned code reloading in the roadmap, if that worked that would be a huge win. I went through a lot of links with one of the first prototype apps I made, to completely reproduce my web workflow, to the point where I remapped &lt;em&gt;shake device&lt;/em&gt; in the simulator to &lt;em&gt;Command+R&lt;/em&gt;, to get a reload, so if there is a better workflow for that, where you can basically say, here is what you&amp;#8217;re used to, and here is the awesome new way of doing this, that supports the same thing, because I run rake and reload my app countless times, I should&amp;#8217;ve kept a count, that would make a huge difference, that would make me a lot faster. Because you don&amp;#8217;t have to wait! It&amp;#8217;s just there. That would be huge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thank you Nick!&lt;/strong&gt;&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/47542877666</link><guid>http://blog.rubymotion.com/post/47542877666</guid><pubDate>Tue, 09 Apr 2013 11:27:00 -0400</pubDate></item><item><title>RubyMotion Success Story: Inktera</title><description>&lt;p&gt;&lt;a href="http://www.pagefoundry.com/"&gt;Page Foundry&lt;/a&gt; created &lt;a href="https://www.inktera.com/"&gt;Inktera&lt;/a&gt; as a platform for authors, publishers and booksellers to take control of their online presence. More than just an ebook store, Inktera links the website, blogs, Facebook and Twitter profiles, and more - allowing you to build native Apple iOS and Android apps in just a few minutes!&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/faf61764f566152847877b635156f86f/tumblr_inline_mjxe4fbmfx1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;We sat down with &lt;span&gt;Dan McFarland&lt;/span&gt;&lt;span&gt; to talk about Inktera and their experience using RubyMotion. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is Page Foundry&amp;#8217;s goal?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Page Foundry was founded with a very simple vision: Deliver the most robust &lt;span&gt;digital content platform available. Page Foundry has been able to empower global &lt;/span&gt;&lt;span&gt;organizations like &lt;a href="http://www.asus.com"&gt;ASUS&lt;/a&gt;, local businesses (authors, publishers and local &lt;/span&gt;&lt;span&gt;booksellers) and others to connect with their customers in really meaningful &lt;/span&gt;&lt;span&gt;ways.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How does the Inktera platform accomplish this?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The vision for the Inktera platform was very simple: help businesses acquire &lt;span&gt;customers by offering a suite of branded digital content services that extend &lt;/span&gt;&lt;span&gt;our customer&amp;#8217;s brands, services and core values. The platform has evolved into a &lt;/span&gt;&lt;span&gt;very robust offering that includes the ability to quickly and easily launch &lt;/span&gt;&lt;span&gt;ebookstore apps. By quickly and easily we&amp;#8217;re talking days - possibly even hours &lt;/span&gt;&lt;span&gt;in some cases - not weeks or months.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What unique features does Inktera provide?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The app is completely unique in that it offers in-app purchasing for ebooks. No &lt;span&gt;apps, other than Apple&amp;#8217;s own iBooks app, offer this feature. The Inktera iOS app &lt;/span&gt;&lt;span&gt;connects directly to the Inktera cloud which manages the reader&amp;#8217;s library, &lt;/span&gt;&lt;span&gt;stores their bookmarks, notes, and personalization features.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The framework for the Inktera iOS app is completely customizable by Page Foundry &lt;/span&gt;&lt;span&gt;customers via the Inktera platform. They can add social media features, select &lt;/span&gt;&lt;span&gt;which types of books to offer, set featured items, etc.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How do you apply the different interface customizations on the device?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The only real difference we consider is iPad vs iPhone with the use of &lt;code&gt;UISplitViewController&lt;/code&gt; in the former. BubbleWrap&amp;#8217;s &lt;code&gt;Device.ipad?&lt;/code&gt; is the only convenience method we use for the detection. All layouts are done programmatically without NIBs.&lt;/p&gt;
&lt;p&gt;We made use of &lt;a href="https://github.com/RefuX/LayoutManagers-Fork"&gt;LayoutManagers-Fork&lt;/a&gt; to get over an initial learning curve and because we were familiar with Android&amp;#8217;s LinearLayouts. After understanding iOS&amp;#8217;s views more, we used it because it was a similar way to lay interface objects out without trying (or having) to use DSL&amp;#8217;s for them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What RubyMotion tools did you take advantage of? (gems? editors?)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We have been using &lt;a href="http://www.jetbrains.com/ruby/"&gt;RubyMine&lt;/a&gt; since version 4.0. The latest 5.0 version finally added code completion of iOS core methods/selectors/constants which saves us one trip to Xcode&amp;#8217;s Docs. We made a decision to not over do gem usage to avoid using something we couldn&amp;#8217;t understand/appreciate. Our gem list is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gem 'cocoapods'
gem 'motion-cocoapods'
gem 'bubble-wrap'
gem 'motion-testflight'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="https://github.com/rubymotion/sugarcube"&gt;SugarCube&lt;/a&gt; and &lt;a href="https://github.com/rubymotion/teacup"&gt;TeaCup&lt;/a&gt; look very interesting and we&amp;#8217;ll probably incorporate them now that we have our first app under our belts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How did RubyMotion speed up your development?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After checking our SCM, our project went from first RubyMotion check-in to Ready for Sale in 10 man weeks. Considering we had no prior iOS, C, Objective-C experience, we project this would not have been possible without RubyMotion or a significant amount more in human resource / development investment dollars.&lt;/p&gt;
&lt;p&gt;RubyMotion was not easier than Android mainly due to our prior experience with Java. Android ADT makes creating flexible layouts very intuitive and storing the layouts in XML makes understanding structures easier. That said, the RubyMotion and iOS networking libraries with caching blow Android out of the water. RubyMotion also makes doing network on the main thread almost impossible so keeping the application responsive was a non-issue. RubyMotion certainly makes iOS development easier if the developers have Ruby experience. For Java developers Android is hard to beat. $199.99 to avoid writing method calls like arrays is priceless.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How does the iOS app integrate with the rest of the Inktera platform?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The iOS app integrates through a private Restful API. All networking between the two uses &lt;a href="https://github.com/pokeb/asi-http-request/tree"&gt;ASIHTTPRequest&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What was the biggest challenge during development?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s a tie for the biggest challenge. The first challenge was the integration of &lt;a href="http://www.datalogics.com/products/rmsdk/"&gt;Adobe&amp;#8217;s RMSDK&lt;/a&gt;. The RMSDK project is composed of a dozen other projects and has a very specific build process. The first weeks were spent getting RubyMotion to be able to call into all of RMSDK. This is not a trivial task. The second challenge was memory management. The team was constantly stumbling on situations where retain cycles were getting created by trivial and routine code. Saving things in instance vars helped, but then we had to remember to unset them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is it like using RubyMotion on an application so complex?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Overall, we could not have built what we built without RubyMotion given our time constraints and desired investment. We are a Ruby shop so being able to stay in that mind set and leverage existing skills was critical to expediting the process. RubyMotion doesn&amp;#8217;t magically remove crash logs or the need to understand iOS concepts, but having readable code that we could write from REPL console helped the project grow with confidence.&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/45754478849</link><guid>http://blog.rubymotion.com/post/45754478849</guid><pubDate>Tue, 19 Mar 2013 09:56:00 -0400</pubDate></item><item><title>Announcing a RubyMotion Training in San Francisco</title><description>&lt;p&gt;&lt;span&gt;We are excited to announce that we will be giving a public &lt;a href="http://rubymotion-sfbay-training-2013.eventbrite.com/#"&gt;RubyMotion training in the San Francisco Bay Area&lt;/a&gt; the 8-12 July of this year.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This is a &lt;strong&gt;5-day class&lt;/strong&gt; that will teach you everything you need to know about iOS and RubyMotion, from the very basic concepts to advanced topics. Experience with iOS is absolutely not required.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;At the end of the training you should be able to start writing full-fledged apps for iPhone or iPad in Ruby.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This is a &lt;strong&gt;hands-on training&lt;/strong&gt;. You will get to write a few iOS applications during the course. You will also be given printed material and access to a dedicated forum where you can discuss with the instructors and other students.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The full program can be read from our &lt;a href="http://www.rubymotion.com/support/training/"&gt;training page&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;You can &lt;a href="http://rubymotion-sfbay-training-2013.eventbrite.com/#"&gt;purchase a seat&lt;/a&gt; for the training today. If you have any question or need any help don&amp;#8217;t hesitate to &lt;a href="mailto:info@hipbyte.com"&gt;contact us&lt;/a&gt;. See you in San Francisco!&lt;/span&gt;&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/45343006982</link><guid>http://blog.rubymotion.com/post/45343006982</guid><pubDate>Thu, 14 Mar 2013 09:55:00 -0400</pubDate></item><item><title>RubyMotion Success Story: Jukely</title><description>&lt;p&gt;&lt;a href="http://twitter.com/xBora"&gt;Bora Celik&lt;/a&gt; and &lt;a href="http://dribbble.com/amotion"&gt;Andrew Cornett&lt;/a&gt; created &lt;a href="http://www.jukely.com"&gt;Jukely&lt;/a&gt; for music lovers to get hand-picked recommendations for local live music concerts and to discover new music. They used RubyMotion to create a visually stunning app that has already hit &lt;a href="https://itunes.apple.com/us/app/jukely/id590428284?mt=8&amp;amp;ls=1"&gt;5 stars in the app store&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;iframe frameborder="0" height="281" src="http://player.vimeo.com/video/51345163" width="500"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;We sat down with Bora to talk about his experience using RubyMotion.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;First, please tell us a little bit about your app, Jukely&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jukely.com/"&gt;Jukely&lt;/a&gt; is the brainchild of me and Andrew Cornett, my co-founder, who&amp;#8217;s one of the first designers and employees at &lt;a href="http://www.kickstarter.com/"&gt;Kickstarter&lt;/a&gt;. He had a hand in the design and development of the Kickstarter web and iPhone apps since the beginning days. We had hit it off as hacking partners years ago, worked on a bunch of music hack day stuff and other music related projects. We&amp;#8217;re both heavily into live music, especially in the discovery and notification space. We love discovering new bands and making spontaneous decisions about what shows to see. We don&amp;#8217;t like planning for shows months in advance. We feel like there is a beautiful and loved brand missing in the world of live music. We want to be it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What&amp;#8217;s your background in programming?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m an engineer turned architect turned product manager turned back into engineer, all the while a concert organizer as my second persona. I started with VB6 then .NET, J2EE then stopped programming for a long time while I went to the dark side, management. Discovered Ruby in 2007 and fell in love with it. I&amp;#8217;ve been hacking on music related projects ever since.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What convinced you to use RubyMotion?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I took an iOS class last year and got completely intimidated by Objective-C. It felt like I had to write a lot of code to do simple things and in my mind&amp;#8217;s eye any potential app idea I would want to work on was getting crushed before I could even take it seriously. When &lt;a href="http://rubymotion.com"&gt;RubyMotion&lt;/a&gt; came out, I said heck yes! and started developing a sample app on the first day it was released. Given the elegance of Ruby and my enthusiasm for building native iOS apps, it was love at first sight.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What value does the user get out from using Jukely?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Jukely is your personal concierge for live music shows. It is powered by curation and music taste algorithms. We learn what our members like and what their friends like, make recommendations when there is a high match, and have the ability to put them on the guest list if they want to go.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How do you collect and combine the user&amp;#8217;s music preferences?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We currently allow people to connect their Facebook, Spotify, Rdio, Soundcloud, Last.fm and Hype Machine accounts. I spent the summer writing a recommendation algorithm in Ruby. We have tons of workers that run on &lt;a href="http://www.heroku.com/"&gt;Heroku&lt;/a&gt; to sync people&amp;#8217;s and their friends&amp;#8217; music listens across different music services. Then we have our own sauce that decides how shows should be recommended.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How did you integrate the server-side API using RubyMotion?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I used &lt;a href="https://github.com/rubymotion/BubbleWrap"&gt;BubbleWrap&lt;/a&gt; for JSON calls to our Ruby back-end API. Also the &lt;a href="https://www.parse.com/apps/quickstart"&gt;Parse&lt;/a&gt; framework for reading and saving data to Parse.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What does your RubyMotion toolbox look like?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Editor: &lt;a href="http://macromates.com/"&gt;Textmate&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pods: &lt;a href="https://github.com/mixpanel/mixpanel-iphone"&gt;Mixpanel&lt;/a&gt;, &lt;a href="http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html"&gt;Reachability&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Frameworks: &lt;a href="http://www.parse.com"&gt;Parse&lt;/a&gt; for database, &lt;a href="http://hockeyapp.net/"&gt;HockeySDK&lt;/a&gt; for crash management, &lt;a href="https://www.card.io/"&gt;CardIO&lt;/a&gt; + &lt;a href="http://stripe.com/"&gt;Stripe&lt;/a&gt; for scanning credit cards and processing them, &lt;a href="http://www.passslot.com/"&gt;PassSlot&lt;/a&gt; for PassKit integration to create passes for shows.&lt;/p&gt;
&lt;p&gt;My favorite has to be Parse as using it allowed us to skip writing our own code to do things like loading and saving things using background processing, signup, login, Facebook/Twitter integrations, push notifications, file uploads, as well as having image loading in tables working smoothly out of the box.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What feature of RubyMotion was the most helpful?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I would say being able to use Textmate, writing Ruby, Terminal based workflow and automated memory management were really awesome.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What was the biggest hurdle during development?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mysterious crashes are my biggest nightmare. Being still new to iOS development, I still don&amp;#8217;t have a full grasp on how to nail down and fix crashes that don&amp;#8217;t identify themselves easily and only happen occasionally. Getting push notifications working was a major major pain. The steps you have to go through, my dear, and if you make one small mistake the notification is not delivered and you have no clue where you went wrong. I think I shed a few real tears when they finally ended up working.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;When you hit a serious snag, where do you go with support questions?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve definitely used the &lt;a href="http://groups.google.com/group/rubymotion"&gt;RubyMotion Google Group&lt;/a&gt; numerous times as the community there is really great. Also I&amp;#8217;ve found increasingly more answers on &lt;a href="http://stackoverflow.com/questions/tagged/rubymotion"&gt;Stack Overflow&lt;/a&gt;. As a fallback I used the support for RubyMotion and it has been very helpful.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What feature of the app was the most fun to build?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Once I learned how to do animations I introduced them in a few places. Those were really fun. Fade in loading image loading was quite pleasant and I still really like seeing those fade in transition images in the app. Also there was a lot of joy when I got the audio and video playback working using the &lt;a href="http://developer.apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference.html"&gt;MPMoviePlayerController&lt;/a&gt; class.&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/44804097099</link><guid>http://blog.rubymotion.com/post/44804097099</guid><pubDate>Thu, 07 Mar 2013 15:57:00 -0500</pubDate></item><item><title>RubyMotion #inspect 2013: Conference Sold Out, Last Speakers, Schedule</title><description>&lt;p&gt;&lt;span&gt;We are happy to announce that &lt;/span&gt;&lt;a href="http://rubymotion.com/conference"&gt;RubyMotion #inspect 2013&lt;/a&gt;&lt;span&gt; is sold out! We expect a little over 130 folks to join us in Brussels, Belgium in just about 3 weeks!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We may have some tickets left in case of cancelations. &lt;a href="mailto:info@hipbyte.com"&gt;Let us know&lt;/a&gt; if you want us to notify you in this case.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Last Speakers&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We are finally announcing our last speakers:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;em&gt;Rich Kilmer&lt;/em&gt;, which we don&amp;#8217;t have to present, will be talking about his new project that involves RubyMotion and Bluetooth LE sensors, probably &lt;a href="http://isrichkilmerwearingwhitepants.com/"&gt;wearing white pants&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;Akshat Paul&lt;/em&gt; and &lt;em&gt;Abhishek Nalwaya&lt;/em&gt; will be joining us from sunny Gurgaon, India to talk about &lt;a href="http://developer.apple.com/library/ios/#documentation/CoreMotion/Reference/CoreMotion_Reference/_index.html"&gt;CoreMotion&lt;/a&gt; and how you can make intuitive apps with it. They both work for McKinsey &amp;amp; Company and are also working on an upcoming RubyMotion book.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;We are super excited to have a total of 20 great speakers for our first conference.&lt;/p&gt;
&lt;p&gt;If you sent a talk proposal and didn&amp;#8217;t make it we are very sorry. We received 5 times the number of proposals we expected and it was very tough to make the selection!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Schedule&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A tentative version of the schedule is now available online on the &lt;a href="http://www.rubymotion.com/conference/#schedule"&gt;conference website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We are also working with the nice folks at &lt;a href="http://epic.net/"&gt;Epic&lt;/a&gt; on a much better way to present you the schedule during the conference, stay tuned.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New Sponsors&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://heroku.com"&gt;Heroku&lt;/a&gt; agreed to join us as the lead sponsor of the conference!&lt;/p&gt;
&lt;p&gt;Finally, the big party on Friday will be covered by a secret sponsor that we will unveil in the next few days!&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/44786127220</link><guid>http://blog.rubymotion.com/post/44786127220</guid><pubDate>Thu, 07 Mar 2013 10:26:00 -0500</pubDate></item><item><title>Bug Tracker Now Public</title><description>&lt;p&gt;We are pleased to inform that &lt;a href="http://hipbyte.myjetbrains.com/youtrack/issues/RM"&gt;our bug tracker&lt;/a&gt; is now publicly available. Users of RubyMotion will now be able to see all known bugs and, after having created a personal account on the platform, also comment, vote and subscribe to individual bugs.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We started importing bugs to this new platform and while the process isn&amp;#8217;t complete yet, we believe that we have already listed the most important bugs. &lt;/span&gt;&lt;span&gt;At this moment bugs can only be added by team members, so we ask you to still use the &lt;a href="http://www.rubymotion.com/developer-center/guides/getting-started/#_support"&gt;support ticket system&lt;/a&gt; to report bugs.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We are quite excited about this move and we hope it will make the development of the toolchain more transparent to everyone.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The bug tracker is powered by &lt;a href="http://www.jetbrains.com/youtrack/index.jsp"&gt;YouTrack&lt;/a&gt;, yet another awesome product from our friends at &lt;a href="http://www.jetbrains.com/"&gt;JetBrains&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/43640363406</link><guid>http://blog.rubymotion.com/post/43640363406</guid><pubDate>Thu, 21 Feb 2013 07:19:00 -0500</pubDate></item><item><title>Colin T.A. Gray Joins the RubyMotion Team!</title><description>&lt;p&gt;&lt;img alt="Colin is always happy!" src="http://media.tumblr.com/9f7be7f499000967474507ee88da8f9c/tumblr_inline_mij3ajHWQU1qz4rgp.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/colinta"&gt;Colin&lt;/a&gt; is a software developer from Denver, CO and, as the author of both &lt;a href="https://github.com/rubymotion/teacup"&gt;Teacup&lt;/a&gt; and &lt;a href="https://github.com/rubymotion/sugarcube"&gt;SugarCube&lt;/a&gt;, a popular figure in the RubyMotion community. Colin is also very active on the Google group and our #rubymotion IRC channel on the freenode network.&lt;/p&gt;
&lt;p&gt;Colin agreed to help us build an amazing community around RubyMotion. You will read more from him very soon on this blog and other channels!&lt;/p&gt;
&lt;p&gt;Incidentally, if you are coming to our &lt;a href="http://www.rubymotion.com/conference/"&gt;upcoming conference&lt;/a&gt; you will get to see Colin talking about a &lt;a href="http://rubygems.org/gems/kiln"&gt;top-secret project&lt;/a&gt; he has been hacking on!&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/43586258982</link><guid>http://blog.rubymotion.com/post/43586258982</guid><pubDate>Wed, 20 Feb 2013 15:55:00 -0500</pubDate></item><item><title>Joffrey Jaffeux Joins the RubyMotion Team!</title><description>&lt;p&gt;&lt;img alt="What if we tell you there were sharks behind him?" src="http://media.tumblr.com/fcc600790621144204f6556da9f842bd/tumblr_inline_mij3a9iez81qz4rgp.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/joffreyjaffeux"&gt;Joffrey&lt;/a&gt; is a French software developer and the author of one of the most widely used iOS app in France, &lt;a href="https://itunes.apple.com/fr/app/02-minutes-dattente-par-jaime/id578169563?mt=8"&gt;02 Minutes d&amp;#8217;Attente&lt;/a&gt;, which has been sitting in the &lt;em&gt;Top 10 Free Apps&lt;/em&gt; category of the local App Store for a while. &lt;span&gt;Of course, the app is entirely written in RubyMotion.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt; Joffrey masters the toolchain very well and has&lt;/span&gt;&lt;span&gt; agreed to help us by joining our support team on a part-time basis. If you are reporting support tickets you may get to talk to him eventually now!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Before you ask, that&amp;#8217;s the best picture we have of Joffrey. By the way, did you know there were sharks behind him?&lt;/span&gt;&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/43571808193</link><guid>http://blog.rubymotion.com/post/43571808193</guid><pubDate>Wed, 20 Feb 2013 11:49:00 -0500</pubDate></item><item><title>RubyMotion #inspect: New Speakers, Few Tickets Remaining</title><description>&lt;p&gt;In a bit more than a month we will be opening the doors to our &lt;a href="http://www.rubymotion.com/conference/"&gt;first RubyMotion conference&lt;/a&gt;, 28-29th March in Brussels, Belgium.&lt;/p&gt;
&lt;p&gt;We are so excited! Two entire days of 100% RubyMotion talks! &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New Speakers&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We are announcing 4 new speakers!&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;em&gt;Delisa Mason&lt;/em&gt;&lt;span&gt; is a software developer living in Ohio and the creator of the &lt;a href="http://kattrali.github.com/redcar-rubymotion/"&gt;RubyMotion plugin for Redcar&lt;/a&gt;, the ruby editor. She will talk about customizing an iOS development workflow using rubies all the way down.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;em&gt;Austin Seraphin&lt;/em&gt; is a blind programmer. &lt;/span&gt;&lt;span&gt;In his talk, you will discover exactly how a blind person uses an iOS device and how RubyMotion makes &lt;a href="http://behindthecurtain.us/2013/01/10/rubymotion-and-accessibility/"&gt;writing accessible apps&lt;/a&gt; easier.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;em&gt;Michael Erasmus&lt;/em&gt; is a software developer living in South Africa and also one of the guys making the &lt;a href="http://motioncasts.tv"&gt;motioncasts.tv&lt;/a&gt; screencasts. In his talk he will cover mixing RubyMotion with CoffeeScript.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;Juan Karam&lt;/em&gt; is an iOS developer working for &lt;a href="http://raku.mx/"&gt;Raku&lt;/a&gt;, a consultancy agency in Mexico. In his talk he will unveil the mysteries behind Core Animation and &lt;a href="http://www.cocos2d-iphone.org/"&gt;cocos2d&lt;/a&gt; and how you can leverage them in RubyMotion.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;You can refer to the &lt;a href="http://www.rubymotion.com/conference/#speakers"&gt;conference speakers page&lt;/a&gt; for the full list of speakers. We are not accepting new speakers proposals at this point.&lt;/p&gt;
&lt;p&gt;We will be publishing the final schedule soon, stay tuned!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Few Tickets Remaining&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;At the time of this writing there are &lt;em&gt;very few&lt;/em&gt; tickets left, so we highly recommend that you &lt;a href="http://myupcoming.com/en/event/37754/rubymotion-inspect-2013/info"&gt;grab a ticket&lt;/a&gt; as soon as possible if you want to come to the conference. We will likely sold out in the next few days.&lt;/p&gt;
&lt;p&gt;We are also selling one additional ticket to the training as one of the attendees sadly won&amp;#8217;t be able to make it.&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/43154287216</link><guid>http://blog.rubymotion.com/post/43154287216</guid><pubDate>Fri, 15 Feb 2013 11:43:00 -0500</pubDate></item><item><title>Scan Barcodes and Images with Moodstocks and RubyMotion</title><description>&lt;p&gt;&lt;a href="http://www.moodstocks.com"&gt;Moodstocks&lt;/a&gt; is a company that provides an image recognition and barcode decoding API for mobile apps. Their product is really astonishing as you can see from this video.&lt;/p&gt;
&lt;p&gt;&lt;iframe frameborder="0" height="315" src="http://www.youtube.com/embed/4V6Nd2TS5n8" width="420"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;They have been working on integrating their SDK with the RubyMotion toolchain and &lt;a href="http://www.moodstocks.com/2013/01/30/image-recognition-in-rubymotion-with-the-moodstocks-sdk/"&gt;published their results&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;RubyMotion is a revolutionary tool.  It not only offers developers a new way to build iOS applications, but also shows great experimental spirit.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Check out the &lt;a href="https://github.com/Moodstocks/moodstocks-rubymotion-demo-app"&gt;demo app&lt;/a&gt;! Also, if you are looking for a higher-level wrapper, make sure to check &lt;a href="https://github.com/jjaffeux/Motionscan"&gt;Motionscan&lt;/a&gt; (which is a work-in-progress).&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/41861021757</link><guid>http://blog.rubymotion.com/post/41861021757</guid><pubDate>Wed, 30 Jan 2013 07:32:00 -0500</pubDate></item><item><title>Pixate Launches with RubyMotion Support</title><description>&lt;p&gt;&lt;a href="http://www.pixate.com/"&gt;Pixate&lt;/a&gt; is a framework for iOS that lets you easily create and style beautiful user interfaces using CSS. Pixate was in private beta for the last weeks and is now publicly available.&lt;/p&gt;
&lt;p&gt;We were so impressed by the work of the Pixate folks that we worked closely with them to create a &lt;a href="https://github.com/Pixate/RubyMotion-Pixate"&gt;RubyMotion-Pixate&lt;/a&gt; gem which nicely integrates the Pixate framework in RubyMotion projects. &lt;span&gt;Check out how it works by watching this screencast made by Pixate co-Founder Paul Colton.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe frameborder="0" height="315" src="http://www.youtube.com/embed/jlidbp-uhJ0" width="560"&gt;&lt;/iframe&gt;&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/41129670138</link><guid>http://blog.rubymotion.com/post/41129670138</guid><pubDate>Mon, 21 Jan 2013 15:30:00 -0500</pubDate></item><item><title>RubyMotion #inspect: New Speakers, Early-Bird Ending Soon!</title><description>&lt;p&gt;In case you have not heard about it, we are organizing our very first &lt;a href="http://www.rubymotion.com/conference/"&gt;RubyMotion conference&lt;/a&gt;, the 28-29th March in Brussels, Belgium.&lt;/p&gt;
&lt;p&gt;It will be a 2-day, one-track conference full of short, 100% RubyMotion talks. It will undoubtedly be awesome!&lt;/p&gt;
&lt;p&gt;Please see our &lt;a href="http://blog.rubymotion.com/post/37183308463/announcing-inspect-2013-the-rubymotion-conference"&gt;our previous post&lt;/a&gt; for more information about the conference.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Early-Bird Discount&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;The &lt;a href="http://myupcoming.com/en/event/37754/rubymotion-inspect-2013/info"&gt;Early-Bird tickets&lt;/a&gt; have been going fast, so you better hurry if you still want to take advantage of the 20% discount on the ticket price.&lt;/p&gt;
&lt;p class="p1"&gt;We will be running the Early-Bird discount until January 20th.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New Speakers&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We are announcing 4 more awesome speakers!&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;em&gt;Mattt Thompson&lt;/em&gt; is the Mobile Lead at &lt;a href="http://heroku.com"&gt;Heroku&lt;/a&gt;, and the creator &amp;amp; maintainer of &lt;a href="https://github.com/AFNetworking/AFNetworking"&gt;AFNetworking&lt;/a&gt; and other popular open-source projects, including &lt;a href="http://postgresapp.com/"&gt;Postgres.app&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/Induction/Induction"&gt;Induction&lt;/a&gt;. He also writes about obscure &amp;amp; overlooked parts of Cocoa on &lt;a href="http://nshipster.com/"&gt;NSHipster&lt;/a&gt;. He will talk about how Ruby hackers built the new Objective-C Open Source community.&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;Matt Green&lt;/em&gt; is a software developer living in DC and a very early adopter of RubyMotion, as the author of &lt;a href="https://github.com/mattgreen/nitron"&gt;Nitron&lt;/a&gt; and &lt;a href="https://github.com/mattgreen/webstub"&gt;webstub&lt;/a&gt;. He will discuss how layering can simplify your development process, and show off the new RubyMotion gem he has been working on secretly!&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;Marin Usalj&lt;/em&gt; is a freelancer iOS developer living in San Francisco. He is one of the maintainers of &lt;a href="https://github.com/rubymotion/BubbleWrap"&gt;BubbleWrap&lt;/a&gt;, one of the most used RubyMotion library, and he will talk about how using it to quickly building apps with networking, persistence and more.&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;Karl Krukow&lt;/em&gt; is the CTO of &lt;a href="https://www.lesspainful.com/"&gt;LessPainful&lt;/a&gt;, a Danish company that specializes in test automation for mobile. He is one of the core developers of &lt;a href="https://github.com/calabash"&gt;Calabash&lt;/a&gt;, an automated test framework for iOS and Android, and he will talk about how it can be integrated with RubyMotion projects.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;You can refer to the &lt;a href="http://www.rubymotion.com/conference/#speakers"&gt;conference speakers&lt;/a&gt; page for the so far full list of speakers. As you can see, the schedule will be excellent!&lt;/p&gt;
&lt;p&gt;We will be announcing more speakers soon. If you are interested in sending a talk proposal please do so relatively soon as we will be closing the form by January 20th.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New Sponsors&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since our last update, three more awesome companies decided to help us organizing the conference: &lt;a href="http://nedap.com/"&gt;Nedap&lt;/a&gt;, &lt;a href="http://www.process-one.net/en/"&gt;ProcessOne&lt;/a&gt; and &lt;a href="http://belighted.be/"&gt;Belighted&lt;/a&gt;. So exciting!&lt;/p&gt;
&lt;p&gt;If your company wants to help us by sponsoring the conference, &lt;a href="mailto:info@hipbyte.com"&gt;let us know&lt;/a&gt; as soon as possible.&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/40021418746</link><guid>http://blog.rubymotion.com/post/40021418746</guid><pubDate>Tue, 08 Jan 2013 12:37:00 -0500</pubDate></item><item><title>First RubyMotion Training: Mission Accomplished</title><description>&lt;p&gt;Happy new year folks! &lt;/p&gt;
&lt;p&gt;We delivered our very first &lt;a href="http://www.rubymotion.com/support/training/"&gt;RubyMotion training&lt;/a&gt; in late December of last year in spicy Gurgaon (Delhi), India. What a great way to finish an awesome year.&lt;/p&gt;
&lt;p&gt;We trained during 5 days about 15 software engineers from &lt;a href="http://www.mckinsey.com/"&gt;McKinsey &amp;amp; Company IT&lt;/a&gt;, &lt;a href="http://www.thoughtworks.com/"&gt;ThoughtWorks&lt;/a&gt; and &lt;a href="http://www.tcs.com/"&gt;Tata Consultancy Services&lt;/a&gt; to the RubyMotion platform and iOS development APIs.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p class="p1"&gt;Laurent and Norberto are amazing instructors. Their easy manner and depth of knowledge helped them adjust to the specific needs of the people in the room. The exercises were rich and enlightening, and the course was very interesting and informative. Overall, five days of training was definitely a worthwhile investment!&lt;/p&gt;
&lt;p class="p1"&gt;- Abhishek Nalwaya, Tech Lead at McKinsey &amp;amp; Company IT&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p class="p1"&gt;Check out the pictures!&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img alt="image" src="http://media.tumblr.com/315679b2522fe26e3ae40bda0870fc3b/tumblr_inline_mg29tmcimx1roo9mt.png"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img alt="image" src="http://media.tumblr.com/ef31d862237d29550697536db4b1f9ae/tumblr_inline_mg29dwnsrh1roo9mt.png"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img alt="image" src="http://media.tumblr.com/a838f94a0bad27b1d1b538985a62e2a2/tumblr_inline_mg29ecMjBZ1roo9mt.png"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;If you are interested in setting up an in-house &lt;a href="http://www.rubymotion.com/support/training/"&gt;RubyMotion training&lt;/a&gt; in your company offices, &lt;a href="mailto:info@hipbyte.com"&gt;contact us&lt;/a&gt;. If you are a small company or an individual developer, you will be glad to know that we will also announce public trainings in different locations around the globe very soon, stay tuned! &lt;/p&gt;</description><link>http://blog.rubymotion.com/post/39576994490</link><guid>http://blog.rubymotion.com/post/39576994490</guid><pubDate>Thu, 03 Jan 2013 12:53:00 -0500</pubDate></item><item><title>RubyMotion in the Cloud</title><description>&lt;p&gt;The awesome folks at &lt;a href="http://thunderboltlabs.com"&gt;Thunderbolt Labs&lt;/a&gt; have self-published a short book about RubyMotion: &lt;a href="http://thunderboltlabs.com/knowledge/rubymotion_in_the_cloud"&gt;RubyMotion in the Cloud&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://thunderboltlabs.com/knowledge/rubymotion_in_the_cloud"&gt;&lt;img alt="image" src="http://media.tumblr.com/781c827689951560b06f124b4306a62b/tumblr_inline_mfnaa6VV751roo9mt.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a 40-page PDF that teaches you how to integrate both &lt;a href="https://github.com/AFNetworking/AFNetworking"&gt;AFNetworking&lt;/a&gt; and &lt;a href="https://github.com/RestKit/RestKit"&gt;RestKit&lt;/a&gt; with a RubyMotion project and build a client/server REST architecture.&lt;/p&gt;
&lt;p&gt;The book is full of code snippets and we recommend that you &lt;a href="http://thunderboltlabs.com/knowledge/rubymotion_in_the_cloud"&gt;grab a copy&lt;/a&gt; if you need any help connecting a RubyMotion app to a server API.&lt;/p&gt;</description><link>http://blog.rubymotion.com/post/38870538391</link><guid>http://blog.rubymotion.com/post/38870538391</guid><pubDate>Wed, 26 Dec 2012 10:41:00 -0500</pubDate></item></channel></rss>
