 So my name is Dennis. I'm working at JetBrains on RubyMine and WebStorm and I'm the man behind the RubyMotion integration in the RubyMine. I'm from St. Petersburg and some of you may know that you don't need a color printer to print a photo from St. Petersburg. So I'm going to tell you about the RubyMine. RubyMine used to be Ruby and Rails IDE, but since version 5, it's also a RubyMotion IDE. So let me show you some nice features that we have. So I'm going to write a small application that's going to spell check your text and I'm going to cheat a lot during that. So let's start from the very beginning. RubyMine covers the whole application, RubyMotion application development cycle, so you can easily create the application from the RubyMine. You can just select the Ruby SDK and the template. So I'm not going to generate a new one, let's just use the one that I have. So we have seen lots of promotion, awesomeness, and I'm actually not going to use it. So I'll do this old-fashioned way with the new window. As you may see here, we've got the auto-completion automatically popping up, so I'm creating a new window and I'm going to set up a new controller. As you may see here, the auto-completion list is automatically adjusted based on how often you use the method. So you may see that rootViewController goes up before other stuff here, and you may see also in the project tree that I don't have any spelling controller yet, and that's the feature I like a lot about the IDE. It's based on IDE and in our IDE, you can just create a new class from usage. So let's come back to our Dart delegate. So to make this a controller, we need to extend the UIViewController. You may see that auto-completion works here too, and I'm going to create a new WebView. Also, there is a really nice way to override the existing methods. It's called overrideAction, and I'm going to override the viewDidBlood method. As you may see, RubyMind automatically inserts the supercode, and it's very useful for viewDidLoad, because if you don't insert it, you'll have lots of troubles. As I've said before, I'm going to cheat, so because I already rolled all the code, I will simply revert this stuff using the built-in VCS integration. So here it goes, and here are our methods. One of the other nice features that I wanted to show you is the quick documentation pop-up. You can invoke it on the Ruby method or on Objective-C method, and it shows you the documentation for methods, and it can be just... So it shows you the parameters, the return value, and stuff like that. So we are mostly done with the application, and I'm going to show you the webview that I'm going to use. So here are our web page here, and even if you descend to the dark side of the webview, you still have all the code inside and all the navigation stuff, so I can easily go to the declaration of the text-changed method from here up to the declaration, and also I can use the Ameth here with something like... So if you want to create a web page, for example, for your application, you can just keep stuff inside the RubyMind. So we've done with the writing application, let's run it. RubyMind integrates with the rake, so everything you can do with the command line, you can do with the RubyMind. Let's start our application on the simulator first, and of course, RubyMind integrates with the RubyMotion grapple, and we can do anything we want here, and as you may see, the auto-completion works here too. So the simulator is fine, but what if we want to run the application on the device? It's absolutely possible, and we can not only run the application, but also debug it. So I think the first line should be able to see it. I have the application running, and I can type something, and you see the application stops on the breakpoint, and we are able to see the local variables of the methods, and we are also able to drill into the objects and see the erase content here, and we can also try to look at some different stack frames or even at the RubyMotion boilerplate code here. So we can run on this emulator and on the device, and as all of you may know, the TDD is dead, but we still have the support, I think we probably need to remove it, and you can run and debug the tests both on the simulator and on the device. So I'm going to run it here. So it stops on the breakpoint, and also you can see the test tree. You can see that we have one test passing, one test is currently at the breakpoint. So that's about running the application. So we have created application, and we want to refactor it because we want to do some improvements. RubyMine offers a lot of refactoring, and all of them work with the RubyMotion too. So let's, for example, take this line. I think it's quite long, and let's extract variable here. We can select what we want to extract, and it suggests us a pretty good name here, and also it can look for, for example, if we have two different lines, it will replace both of them. But sometimes we don't need a new variable, and we think that's a little bit verbose, and we can inline the variable, and replace the usage with the actual declaration. Also, when I started writing this application, I was looking on some demo app that was written by the app code guys, and they used some web service to do actual spell checking, and that's why we have the class here, web service, which actually doesn't go to the any web service. So let's make it more correct and rename it to the just spelling service. As you may see here, we have all the usages inside the controller, and also inside the test files, and if we press do refactor, it updates the references automatically, so you don't need to do any graphing or searching by path, stuff like that. So that's, I think, almost everything I wanted to show you in the demo. I have a couple of useful links. So first one is the demo project. You can try it. The second one is the special web page for our RubyMotion integration, which shows you the most important highlights, and I know lots of people, I think lots of people here doing some startups, and we have created a big discount for the startups, and you can go to the third link and see the details. And also I wanted to thank Loran for not breaking the things very often, at least from our integration point of view, because lots of people in RubyWorld tend to break everything with every minor release, and Loran is keeping it cool. And also I wanted to thank the app code team because the whole debugging integration is based on the debugging integration written by app code team, and for those of you who still need to write some Objective-C code, and for those who feel the pain of launching Xcode, you can try the app code, and that may be the solution for you. That's it.