020 iPhreaks Show – Vim with Jason Felice
Show Notes
Panel
Jason Felice (twitter github blog Maitria) Pete Hodgson (twitter github blog) Charles Max Wood (twitter github Teach Me To Code Rails Ramp Up)
Discussion
01:08 - Jason Felice Introduction
02:03 - “Expressive Code”
04:35 - iOS Programming in Vim
01:08 - Jason Felice Introduction
02:03 - “Expressive Code”
04:35 - iOS Programming in Vim
ibtool Xcode
06:39 - Why Vim?
Muscle Memory The Tool Chain Polar Puzzles
11:30 - Build Process
xctool
12:23 - Testing
Kiwi The Objective Vimmer
16:50 - Vim Tactics
Code Completion clang_complete Omnicomplete
21:06 - Navigation
23:11 - AppCode
25:22 - Toolchain Wishlist
23:11 - AppCode
25:22 - Toolchain Wishlist
Scheme Lisp Clojure RubyMotion
31:51 - Building and Installing Vim
Picks
No Mouse Fridays! (Pete) AppCode (Pete) Practical Vim: Edit Text at the Speed of Thought by Drew Neil (Pete) VimCasts (Pete) vimium (Pete) VimGolf (Chuck) Emacs (Chuck) Jason Felice: Getting Started with iOS Development With Vim (Jason) lambdanative (Jason) Nathan Sorenson: Clojure to Native via Scheme (Jason)
Next Week
Scalable Cloud Apps with Aaron Douglas
Transcript
PETE: My boy is teething at the moment, and we got up today at 5 o’clock in the morning. That’s nice.
Scalable Cloud Apps with Aaron Douglas
Transcript
PETE: My boy is teething at the moment, and we got up today at 5 o’clock in the morning. That’s nice.
CHUCK: [Laughs]
CHUCK: Hey everybody and welcome to Episode 20 of iPhreaks! This week on our panel, we have Pete Hodgson.
PETE: Good morning from San Francisco!
CHUCK: I’m Charles Max Wood from DevChat.tv. We have a special guest, and that’s Jason…is it Felice?
JASON: Yeah, it’s Felice, that’s right. Hello from Detroit this time!
CHUCK: I do that just to make Pete laugh.
PETE: [Laughs] Yeah, it makes me laugh, I freaked out. [Laughs] Oh, I was going to say like you did the episode number, and I was like thinking, “Should I remind him? Because I don’t remind him, I’d keep him say anything.” [Laughs]
CHUCK: No, I was seriously actually thinking, “I should ask Jason just to make sure I know how to say his last name,” and I was like, “Nope! I’m going to do this just for Pete.”
JASON: [Laughs]
PETE: Oh, man. Well, I’m touched. Thank you very much.
CHUCK: So Jason, since you’re new to the show, do you want to introduce yourself really quickly?
JASON: Sure! That’s probably the hardest question. I have been doing mobile development for, I don’t know, it’s like 3 years or something like that, but it really depends on what you count. I’ve done some of embedded development before that, and some dust wholesome stuff back in the day, something like ’90 something. And mostly, I’ve been on the next person, which is why I found first to home with iPhone stuff, and I’ve done some Android.
I think the bigger focus that I have is on creating expressive beautiful code and helping people to do that because I think a lot of people just haven’t been exposed to really expressive code especially when we’re talking mobile environment.
PETE: What do you mean by expressive code? This is a good sidebar conversation we can talk about. I’m interested particularly in expressive code in Objective C [laughs]. It’s an interesting language for that kind of stuff I think.
JASON: It is, yes. And that brings up an interesting question, which is like ‘how much of the language you have to know before code is expressive?’ Because everybody that I have actually worked with are brought into Objective C into them, like for first couple of weeks, group of programmers who weren’t familiar with it. Like my first 2 weeks, they’re just like, “I don’t even see code. It just looks like ASCII. I’m not even sure what’s going on either.”
CHUCK: [Laughs]
JASON: That’s the response that I’ve got. And it’s interesting because after a week or 2, they’re like, “Oh, okay! Got it!” I think it has to do with the [unclear] versus the indentation, the way that it uses it being different from most of the languages.
PETE: Yeah.
JASON: But I’ve seen Kiwi who makes nice expressive tests for the most part that’s sort of the DSL approach.
Transcript
PETE:
My boy is teething at the moment, and we got up today at 5 o’clock in the morning. That’s nice.
CHUCK:
[Laughs]
[Intro Music]
CHUCK:
Hey everybody and welcome to Episode 20 of iPhreaks! This week on our panel, we have Pete Hodgson.
PETE:
Good morning from San Francisco!
CHUCK:
I’m Charles Max Wood from DevChat.tv. We have a special guest, and that’s Jason…is it Felice?
JASON:
Yeah, it’s Felice, that’s right. Hello from Detroit this time!
CHUCK:
I do that just to make Pete laugh.
PETE:
[Laughs] Yeah, it makes me laugh, I freaked out. [Laughs] Oh, I was going to say like you did the episode number, and I was like thinking, “Should I remind him? Because I don’t remind him, I’d keep him say anything.” [Laughs]
CHUCK:
No, I was seriously actually thinking, “I should ask Jason just to make sure I know how to say his last name,” and I was like, “Nope! I’m going to do this just for Pete.”
JASON:
[Laughs]
PETE:
Oh, man. Well, I’m touched. Thank you very much.
CHUCK:
So Jason, since you’re new to the show, do you want to introduce yourself really quickly?
JASON:
Sure! That’s probably the hardest question. I have been doing mobile development for, I don’t know, it’s like 3 years or something like that, but it really depends on what you count. I’ve done some of embedded development before that, and some dust wholesome stuff back in the day, something like ’90 something. And mostly, I’ve been on the next person, which is why I found first to home with iPhone stuff, and I’ve done some Android. I think the bigger focus that I have is on creating expressive beautiful code and helping people to do that because I think a lot of people just haven’t been exposed to really expressive code especially when we’re talking mobile environment.
PETE:
What do you mean by expressive code? This is a good sidebar conversation we can talk about. I’m interested particularly in expressive code in Objective C [laughs]. It’s an interesting language for that kind of stuff I think.
JASON:
It is, yes. And that brings up an interesting question, which is like ‘how much of the language you have to know before code is expressive?’ Because everybody that I have actually worked with are brought into Objective C into them, like for first couple of weeks, group of programmers who weren’t familiar with it. Like my first 2 weeks, they’re just like, “I don’t even see code. It just looks like ASCII. I’m not even sure what’s going on either.”
CHUCK:
[Laughs]
JASON:
That’s the response that I’ve got. And it’s interesting because after a week or 2, they’re like, “Oh, okay! Got it!” I think it has to do with the [unclear] versus the indentation, the way that it uses it being different from most of the languages.
PETE:
Yeah.
JASON:
But I’ve seen Kiwi who makes nice expressive tests for the most part that’s sort of the DSL approach. Just writing stuff that is simple and direct with small methods is another part of it, and isolated links/concerns, being thoughtful about isolated links/concerns is another huge part of it. I don’t think those things really are text of language much.
PETE:
I guess that’s true. A lot of the kind of good software principles kind of transcend, at least transcend the language. I like the fact that Objective C has at least kind of the tradition of expressive – overly verbose sometimes – but expressive method names. It doesn’t have that C background of ‘we only have 4 characters to use for this variable name’ or whatever.
JASON:
Right, yeah.
PETE:
I guess that’s FORTRAN, maybe FORTRAN Heritage, something like that, though.
JASON:
Yeah.
CHUCK:
Yeah.
JASON:
Well, the various C compilers had one that’s the resonate character on it for some C compilers at one point.
PETE:
Oh, yeah! I think I remember hearing someone talking about that recently. Well, I’m glad we don’t live in those days anymore.
JASON:
[Laughs]
CHUCK:
We’ve brought you on the show to talk about “iOS Programming in Vim”.
JASON:
Yes.
CHUCK:
Is such a thing possible? And, is such a thing desired?
JASON:
It’s definitely possible, and I definitely do it. Desired? Well, I think it depends on the person, right? For some people, Vim is like, “Oh, my god. That’s a relief.” Other people, Vim is like, “Why are you putting me through this hell?” So there’s that. That’s the corners to work out with Xcode. Apple gives you this big bundle, “Here’s how you develop software right,” and then there’s ibtool somewhere in the bundle and you have to run it if you want to be able to work from the commandline, and you have to know where it is. There’s no documentation because it’s just so magically works when you’re in Xcode. I found that incredible amount of stuff about that. There’s like stuff that is just sort of documented by world tradition, we’ll say.
CHUCK:
[Laughs]
JASON:
I run in this somebody at the CocoaHeads, and they’re like, “Oh, did you know about this tool that can do this and this and this? And you can do it like this,” and I’d be like, “No, I didn’t know about that.” That falls on one little piece of how I can keep Xcode minimized while I develop. PETE: Interesting. I thought that you are going to be saying that you’ve used some kind of plugin or something with Xcode. But you’re saying you used like straight Vim, like regular Vim, is that right?
JASON:
I do, yes. There is an Xcode plugin, and I actually keep it installed because there’s a time or two, I need to go to Xcode I still can’t add files to a project in Vim. There are some utilities that do that for me, but I haven’t integrated that in the [unclear]
PETE:
And presumably, you have to still fire up Xcode for Interface Builder?
JASON:
Yes! So was an Xcode 4, did they integrated it into not Xcode?
PETE:
I’m not sure.
JASON:
I was using it before that, just before that happened, and I was like I had a nice, comfortable in workflow when they did that, and I was like, “Oh…sad [unclear]”
CHUCK:
[Laughs] So is the primary reason that you try and do things in Vim just that you’ve kind of got the mental or Muscle Memory for Vim and its key bindings? Or, is there more to it than that?
JASON:
There’s 2 big reasons: the Muscle Memory is not [inaudible], so I’ve been using Vim for something like 12 years, and I still learn new stuff about it every time I pair with somebody. But I’ve definitely reached that point where I’m much more effective in manipulating code with Vim than I am with an IDE, where it seems like giving to an IDE that doesn’t have a Vim plugin. It’s like I have to use the arrow keys to move around. I have to go up 25 lines by hitting up arrow 25 times.
CHUCK:
[Laughs]
JASON:
Or, wait! Do I grab that stone on my table to move it? I don’t know! I still find that frustrating.
CHUCK:
So the stone on your table, you mean your mouse?
JASON:
Yes.
CHUCK:
Get a trackpad, it’s easier.
JASON:
[Laughs] I didn’t think about that.
CHUCK:
Just kidding.
JASON:
It is easier.
CHUCK:
It is easier, but yeah…
JASON:
[Laughs] I used to have a mod mouse in the middle of my keyboard backup for a–
PETE:
Oh, I remember those!
JASON:
Yeah! I had somehow got so used to it that I could like do it without moving my hands on the keyboard. I remember, being an armored with it, every time I go back to it, I’m like, “Oh, god! This is awful!”
CHUCK:
[Laughs]
JASON:
It’s so hard! I don’t know what I was thinking. But still, the mass transition is still pretty rough for me. That’s the ½ of the reason. The other half of the reason has to do with the toolchain. I was the CTO of a Linux based company for 7 years, and I want an open toolchain. I want to write and make a file and I want to know the sequence of steps that builds my software, and I want to make that pliable. So I wrote, at a previous employer, I wrote an iPad game (it’s also available on the iPhone) called “Polar Puzzles”. As a game, it has to build spreadsheets; it has to do all sorts of compiled data files as part of its build process. The things that we went through in order to get Xcode to do this were pretty intricate. We had like run scripts in different places, and we ended up basically writing an application in the run script to packing spreads into a spreadsheet. It’s like an NPcomplete problem; it’s not like a computational easy thing. We made sure that it ran on all the course on the system that was running the build and we still had time it builds. We had to do all sorts of things; we had to do our own dependency tracking where we basically we’ve run to say, “We have this input files, they haven’t changed, so the output file is need to be rebuilt.” And then it would be wrong every so often because it’s sort of green spinning for make rate; it’s a bug-ridden half implementation that make in the run script –
PETE:
[Chuckles]
JASON:
I think that’s the kind of experience keep remembering. It’s probably won’t be a mess when action [unclear], but I think, I just want to see the toolchain. And I just want to be there to change it and make sure that it’s doing well when it’s due.
PETE:
When you say you want to see the toolchain, are you still using xcodebuild? Or, are you using like gccgo or LLVM and actually dropping that file down into the gaps of what Xcode does?
JASON:
I will typically start a project using xcodebuild. I have seen different projects and haven’t done one from scratch that gets rid of xcodebuild and uses the tools directly, which is hard because actually, some of the tools, you’ll notice, if you look at the output, some of the tools don’t actually exist in the file system that xcodebuild runs.
CHUCK:
Oh, wow!
JASON:
Yeah.
PETE:
So like mount to develop your image or something?
JASON:
No. It’s not like – I don’t know what it does, but there’s things like, it wasn’t ibtool, but it was something like you’ll see it says ibtool-internal is running on this thing.
PETE:
Oh, wow.
JASON:
Yeah. I don’t know the details of that, but I found the workaround for whatever it was, I don’t remember the detail, but there’s stuff like that.
CHUCK:
So do you, at this point, have a build process that works outside of Xcode? Or, do you still wind up going back to Xcode then?
JASON:
I would say, for some time, I’m using xcodebuild…well, maybe all the time. I don’t know! I’m trying to think of the times that I’ve saw -- I think, it’s other people’s projects where I’ve seen the details about running tools directly from a makefile.
PETE:
Interesting. Have you tried out xctool, the Facebook, like better version of xcodebuild?
JASON:
No, I have not.
PETE:
You should definitely check that out. It’s like xcodebuild, but it doesn’t suck so much.
CHUCK:
Interesting.
PETE:
I think, it’s called xctool; I’ll check and I’ll put a link in the show notes.
JASON:
Okay!
CHUCK:
That sounds interesting. What about things like your tests and stuff like that? Do you run all of that outside of Xcode?
JASON:
Yes, and it also trigger that with xcodebuild to start; that is actually one of the first things that I do in a project. I usually have Kiwi setup, that’s my preferred testing for iOS. But I usually get some Kiwi test setup, and my first things says, I write truth as false or something, and it will fail, and then I’ll make that run. And I setup the script and some vim-config so that, in my case, comma comma is what I map to run the tests. And I have some scripts that will run the test and go to the first build error or test failure, whichever happens first. Or, say ‘okay’ and report to the [unclear], the number of seconds that the one took because – and that’s the big reason that I moved to using Vim for iOS development – because I have a tight inner TDD loop, and Xcode is a little off with that for me. Running the test is often – there’s an easy key start for running a test, and you can tell if it failed or succeeded by tracking down the errors off a little hard. Sometimes, exceptions are caught and reported in a strange way. And then there’s always that sink fault that you get in the test runner when you write a test that access its memory wrong or something. And tracking that down is really hard with Xcode, whereas I have my script can like basically say, “Hey, it says failed” and it can give me more information, although not always the same and not always supposed to be like –
PETE:
Does it for app that kind of like the test results in all the test failures and like the QuickFIX thing and you can just kind of navigate over to the molars a little bit and more kind of less interactive than that?
JASON:
It is the QuickFIX. That is what I use. The script essentially says where is their build errors, or test failure errors. If so, going to QuickFIX mode after setting this really hairy error format that knows about clang errors which are remarkably hard to parse. And also about Kiwi errors, which are sort of non-standard.
PETE:
So you’re parsing clang and Kiwi errors in Vimscript?
JASON:
Yes. There’s a pattern, the error format variable is something that you set with a set of patterns that it uses to match what the errors are in the error file, in C file.
PETE:
Oh, okay.
JASON:
I have that setup with -- the facility to do that is not sophisticated so as a result, it’s like 11 lines long for matching all the different kinds of errors you can find. And it still doesn’t get like linker errors at this moment, but it’s there.
PETE:
Is it up online somewhere that we can all –
JASON:
Yes. I have most of the stuff that I’ve done, and I can send this one with the links. Most of the stuff that I’ve done, I’ve documented on a blog, objvimmer.com, and there’s also snippets of code from Vim, and there’s some old screencasts that are available for free there, the document how to do this.
PETE:
And also styling, so this is a lot of the Vim-style…
JASON:
[Laughs]
PETE:
This is an awesome theme. Did you make the theme for this? Or, did you find it somewhere?
JASON:
Yes, I did, in fact.
PETE:
Also, this is like seriously actuating, you’re like, “I need to tell some people the Objective C again, so therefore I will spend a lot of time writing CSS.” [Laughter]
PETE:
At least it looks great.
JASON:
The CSS wasn’t too hard; the JavaScript for the changing tabs was the hard part.
PETE:
This is awesome.
CHUCK:
I can imagine that people hear this and they wonder what part of your workflow you’ve managed to move over to Vim versus what’s in Xcode. We kind of talked about something with the interface builder…
JASON:
Yes.
CHUCK:
And some of these other things. But what else have you managed to move over that people are kind of surprised that you can do in Vim?
JASON:
That’s a tough question. It feels like I should have an answer for that like I know of things and I just can’t recall them at the moment.
CHUCK:
I can waylay you and to an answer for you.
JASON:
Oh, yes! Absolutely, I do know one. Code completion: the exact same code completion that Xcode uses can be available in Vim after some configuration peg.
PETE:
Oh, wow!
JASON:
I can complete Objective C methods; I can complete any C identifier imports, etcetera. Apart with the imports, it’s kind of hard to keep in sync, but there’s a plugin called clang_complete. There’s also a new one that I have looked at and was going to try for my next project, but I haven’t have a next project yet. I remember the name of that one off the top of my head, but they both use the fact that clang was built as a compiler frontend that was supposed to be integrated with IDEs. So the completion is just a library. You can fire it up if you configure [unclear] and everything correctly; you can get that code completion. Now, that’s actually one of the biggest complaints, which is why I tell people about that like, “Why would you code in Vim? I don’t want to have to type this Objective C method name that’s like 270 characters long.” [Laughter]
CHUCK:
Yeah, I can tell you that that was one of the things that threw me off coming to Objective C; the long method names.
JASON:
Yes.
PETE:
So with this completion thing, does it work the same way as the regular autocomplete where you hit CTRL P or whatever, and it just fills in the blank?
JASON:
You just type CTRL X O, and that’s for omnicomplete; omnicomplete is something in Vim that has a lot of different plugins. One of them, you can set up if you have Python bits in Vim. This clang_complete plugin, you can set it up to actually use the clang compiler to suggest completions.
PETE:
Okay. I guess I re-bounced back to ControlView or something because I think omnicomplete is what I’m thinking of. That’s cool! Does it have enough context to know like, or presumably yeah, just autocomplete stuff that makes sense given the variable that you’re calling your method on?
JASON:
Right.
PETE:
Awesome.
JASON:
So for a project, it’s a little bit hard to set up. The easiest way I found is you want an xcodebuild and script the output for like you find the first compile as a file and it has like 11 diocesan flags, right? [Laughter]
JASON:
You have to put that into a .clang_complete file in the root of the project so that the clang_complete knows all of the configures and it know how to compile the file. But, it works! I use it.
PETE:
Cool!
CHUCK:
Yup.
PETE:
That’s one of the things that I really like about IDEs. I’m definitely a Vim fan, and I use it particularly with dynamic languages like Ruby or JavaScript. But for static languages, the one thing I always get excited about having an IDE for is the code completion so that’s pretty awesome. Can you kind of do code navigation? Can you kind of say, “Take this to the implementation of this method,” and that kind of thing?
JASON:
I don’t know because I don’t use feature like that, I guess. I would guess no. I have my own system of navigation for Objective C projects based on headers being the name the same as the (.m) files, and spec files being the names with the same thing, but we have to spec on them. That made it really easy to make a plugin that has the same kinds of stuff as rails.vim, which you can go to alternate file, go to related file, and it makes it really easy for me to jump around, so I don’t use clang for navigation. The other thing that I do use for navigation occasionally when I get it set up is, if you find the patched version of a super and ctags that has Objective C support and install it in your system, you can build the tags file for your entire project, which allows you to jump to the definition of any identifier by any means.
PETE:
Oh, okay.
JASON:
By using controller or [unclear].
PETE:
I think that would give you almost everything; that would definitely give me everything that I would use in terms of code navigation. It just basically take me to where this thing was defined and then flipping back and forth between headers and (.m) files, and then you get the bonus of being able to kind of jump to the test files, which I don’t think – well, I’m sure you can do with Xcode somehow, but it definitely doesn’t come out with [unclear] of Xcode.
JASON:
Yeah, that’s one of those things that whenever I’m in Xcode, it’s like, “There’s only one counterpart to this file…no, there’s 2 counterparts to this file.”
PETE:
Yeah, that’s really funny! With the new like the assistant editor thing in Xcode, it knows about lots of different things. Does it know about test? Or, did it not occur to anyone that Cupertino is the people who write tests? You should check that. Have you ever seen that?
CHUCK:
I don’t.
PETE:
I guess, Jayson, you wouldn’t because you don’t use Xcode. Hah!
CHUCK:
[Laughter]
PETE:
Have you experimented with using AppCode rather than Xcode?
JASON:
I’ve not, probably, and I already told that app code -- I’ve worked with developers who was really fond of it, and I followed it up and I don’t remember much about what I thought about it. It did have a Vim program, I only knew that much.
PETE:
Yeah.
JASON:
Like CTEs, and they worked! I remember that much.
PETE:
I work with some people at current client who use IntelliJ with Vim key bindings. And also, of totally blank keyboard which is really fun to pair with this guy; he’s like the anti-pairer… [Laughter]
PETE:
The only thing that it would make it better View is like a Dvorak blank keyboard with Vim…
JASON:
Right [laughs].
PETE:
I have a feeling he doesn’t have a mouse as well. [Laughter]
CHUCK:
Nice.
JASON:
Yeah, I’ve worked with carriers like that. I’m using a modified Dvorak… [Laughter]
CHUCK:
There you go. Because if you were lost on Dvorak… [Laughter]
PETE:
Anyway, he uses the Vim plugin for IntelliJ, which would be the same thing for AppCode because that would pretty parse the same IDE under their covers. I installed [unclear] that actually was pretty cool; it felt pretty close to using Vim. I didn’t use it for more than 10 minutes and I didn’t have any keys on the keyboard that I could read, so that made it a bit more challenging to assess the usability of this tool.
CHUCK:
That’s funny. It’s also interesting, I was a Vim user for a long time and then I started using Emacs, and it was actually a pretty easy transition. It seemed like there was always something that I could find to fit my needs a little bit better with Emacs, but I really do like Vim.
PETE:
They don’t really talk about Emacs today, Charles.
CHUCK:
I know.
PETE:
[Laughs] Just kidding.
CHUCK:
I would be curious if anyone out there has done the same kind of thing with Emacs. One question I do have, though, is what kinds of things do you wish your toolchain had? What kinds of things do you wish you could figure out with this setup?
JASON:
That opens actually a whole another sort of part of underway that I am trying to develop. I started using probably a main Scheme a long time ago; probably 2002 or 2003, I don’t know, I’m always guessing because if it wasn’t last week, I don’t remember. I have been learning a bunch of this sync clojure lately, and I’ve been following mobile development with Scheme and the Lisps. The thing that I like about these languages is the code as data and the data as code. The reason why I
like that from mobile development is because the way that we currently do mobile development contains lots of data files. This is like the interface builder stuff that Android manifests, all these fixer things that affect code and have to agree with code, but end up being as data files and are hard to manage. So I would love an environment where I could write in a Schemed wireless clojure and get this stuff declared in my code. I can get you think of an easy Android example right now, which is I’m going to pay this activity and it’s going to map to this and it’s going to have this configures and parameters and here’s the code – all in one file.
PETE:
It sounds like, RubyMotion, that community. I kind of trying to figure this same stuff out I guess because they’re kind of doing a lot of internal DSLs to define interface so they didn’t have to use interface builder. I wonder if there’s stuff that you could kind of combine some of their DSL, or some of their plumbing with a greater script in the JavaScript runtime, and hoped you’re on call.
CHUCK:
The other thing that’s interesting about that is you’re talking about the build process, having –
PETE:
Not necessarily. It could be runtime. It actually is assembled at runtime like those nibs, they shift with, as far as I know, they shift with the application. And then the first time you wanted to view that View hierarchy, it deserialize it from disc and can use up some objects, so essentially doing the same thing but with code, rather than with their own DXML format.
CHUCK:
Yeah, I was just going to point out that JSON, before mention that there was some issues figuring out some of the build stuff, I was just going to say that Ruby in Motion doesn’t use Xcode to build its apps either, so there may be some things you could [unclear] from them.
PETE:
Yeah, that’s true.
CHUCK:
But yeah, that is something that they’ve been trying to do with RubyMotion.
JASON:
That sounds like another thing for me to learn, which is knowledge to – [Laughter]
JASON:
I don’t know. It’s like I feel like the youngest old fart ever in development…
CHUCK:
[Laughs]
JASON:
I remember a time where I knew about all the libraries that existed. It’s like, whenever I go to the Ruby world for a while, I have to find the Ruby expert and go wait. “Who want XML library using this month?” I can’t remember. [Laughter]
JASON:
Is it still not cool [unclear]? I do look like silly if I use it…[chuckles].
PETE:
That’s the good thing about iOS development; you just have to use the Apple tools, and you’re always be using the best tool.
CHUCK:
That’s right.
JASON:
[Laughs] Right.
CHUCK:
[Laughs]
PETE:
It’s easy to keep track of this, just one website; unless, the website goes down for 2 weeks. CHUCK: Yeah, that is one thing, though, that I like about Xcode; you can look at the documentation from the IDE.
JASON:
Yeah. I have to say, since I’ve been talking about not using Xcode, I have to say, as IDEs go -- I’m not an IDE person -- but as IDEs go, Xcode is pretty good! If I didn’t mind hitting up arrow 25 times to go 25 lines for example, I probably would be a pretty happy IDE user in Xcode. I can’t tell for sure, but I have been surprised with both how thin it is in terms of a GUI for development, and for the most part, finding all the tools there on the file system, and how useful it is as a visual interface for programming.
PETE:
I think that’s interesting. I feel like maybe one of the reasons that you can do this kind of alternative development practice of using something like Vim and the command-line tool is because the guys that built Xcode, although the Xcode certainly has a lot of issues, it is pretty nice. The way it’s quite unique-C in it, it’s just kind of a wrapper over a bunch of command-line stuff so you can actually get to the underlying things. If you’re coming in the beat or if you’re in the Microsoft world, I suspect it would be a lot harder. Microsoft wouldn’t expose by default, wouldn’t build visual studio on top of a bunch of command-line stuff; they’d just build one big fat library or one big fat UI.
JASON:
Yeah, that was my experience. All of my experience that’s kind of dated for Microsoft is a visual studio for C++ way back. It was pretty much like that.
PETE:
Yeah. I think Apple really do get unix like all of the C, the whole next step heritage. But it’s nice to see a bunch on Apple a lot, but there’s seriously spot in some ways.
JASON:
Yup, I agree.
CHUCK:
I’m just wondering, are there any other things that you typically have to answer about your setup? Or, things that you want to tell us about that we haven’t asked yet?
JASON:
I think part of the reason that I started my Objective Vimmer blog was because getting Vim setup through this was not as easy as I would have liked. There’s a number of things in the blog including I have my own script for building and installing Vim that you can reach from there that helps with that initial hump.
PETE:
So if you met someone who is a fairly competent Vim user and a fairly competent iOS developer, would you recommend they do this? Or, would you recommend like this is [unclear], this is for everyone? Or, do you think it’s kind of as much “I don’t really like”? It could have elements of being kind of it’s a fun hobby in and of itself. It’s a thing that to do not just a means to an end. Would you say, if the joy developer, they just want to knockout an iOS app, and also has Vim experience, would you recommend this approach? Or, do you think they should kind of stick with Xcode?
JASON:
I think I would need to know even work it, too.
PETE:
Basically the “Did consulting” answer. [Laughter]
JASON:
It’s like, part of the reason why I like the open toolchain is because I’m happy to have people who want to use Emacs use Emacs. The problem with Apple, just saying, “Here’s Xcode, here’s the bundle,” we’re all going to need the document this one true way even though there’s always tools over here that you can use. It’s not worth the effort to make sure those stay the same or for the most part, however that works; we’re not going to tell you. I’m very convinced that the IDE is not generally the best way for every person. I just don’t think that’s true. So is it like a good key binding kind of plugin for Xcode? That might be fine for some people. I’ve seen people write basically pretty thing iOS apps, which is basically spending 50% of your time in interface builder and then wiring up some silly stuff. Is Vim worth it for that? Probably not; it’s kind of depend.
CHUCK:
Yeah, I can see that. I do mostly Rails development; I have been picking up some iOS contracts lately. And like I said, I use Emacs so if it’s something where there’s a lot of backend logic where I’m going to be shoveling a lot of code around and navigating through the files, I’m much more proficient on doing that in Emacs than I am in Xcode.
JASON:
Right.
CHUCK:
So if I’m going to be spending a significant amount of time there, then yeah, it makes sense to make that tradeoff. Otherwise, I totally get it. If I’m just doing mostly boiler plate, wiring up, not a lot of code twiddling and text shoveling, then yeah, maybe it makes sense just to stick with Xcode and just follow the conventions that are there because I’m not going to have to do a whole lot outside of that.
JASON:
Right. Exactly.
CHUCK:
Interesting. Alright, well, I know that Pete has to get off early, off the show early today; I have some other things that I need to get to as well. Thanks for coming on the show. We’re going to get into the picks now. Pete, do you want to start this off?
PETE:
Sure. I’ve got a lot of picks.
CHUCK:
Okay.
PETE:
Every time we talk about Vim, I have a lot of picks.
CHUCK:
[Laughter]
PETE:
Actually, I was kind of writing this down as we were talking, and I had to stop writing down. So maybe I should stop talking and stop picking. Pick number 1 is a concept called “No Mouse Fridays!” This is something that a fellow ThoughtWorker of mine, Chris Martin, started on a current client. The rule is you unplug your mouse on Fridays, and you don’t use your mouse! This is really good for forcing people to learn their keyboard bindings and have to navigate without using the mouse, which is generally, a more productive way of doing things if you can force yourself to do it. I like people try out, maybe try No Mouse Friday mornings, and see how it goes. It’s good fun.
CHUCK:
But can you play Starcraft without the mouse?
PETE:
[Chuckles] I wouldn’t know. You shouldn’t be playing Starcraft on Friday morning; you should be at work. [Laughter]
PETE:
Pick number 2 is “AppCode”. We’ve kind of touched on this briefly that I think people should definitely check it out as an alternative to Xcode. It may be less extreme than kind of going to the old Vim command-line wrap, but definitely along the same lines of using alternative tool and maybe a better tool. So, check out AppCode. And then a few Vim picks. I’m actually about halfway through a book called “Practical Vim” by Neil Drew. It’s really, really good. I had a really hard time finding like good long form documentation on Vim –
CHUCK:
Isn’t that a PragProg title?
PETE:
It is a PragProg title. And it’s really good. It’s a really, really good balance of like teaching you the basics, but working all the way up to pretty advanced stuff. It’s in nice kind of cook book format. It’s awesome. I really like it. And the guy that wrote that, Neil Drew, also has a series of screencasts at vimcasts.org. I think he’s thinking about making this a subscription service, but for time being, it’s free; really, really awesome. And he has the most amazing Scottish accent that you could just listen to forever. Just go to vimcasts.org straight after you finished listening to his podcast and just fire up one of the videos and listen to it, and you will be if enthralled. CHUCK: They’re really good, too?
PETE:
Yeah!
CHUCK:
Not just for the Scottish accent, the contents also?
PETE:
Yeah, contents are good, too [chuckles]. And my last pick is a Chrome plugin called “vimium”. This is a plugin if you want to use Vim keyboard navigation for Chrome. It works really well. The only problem is, after you get used to having it, you start typing random characters into other people’s browsers, and they’d think you’re a weirdo. [Laughter]
PETE:
That’s it!
CHUCK:
Awesome! Alright, I’ve got a couple of picks. My first pick is “VimGolf”, I guess it’s vimgolf.org, I’ll put the link in the show notes to be sure. But that’s an exercise that basically keeps track of the number of keystrokes that you use to get the right content in the file. And when you put in the solution, what it does is it actually keeps track of your solution and then you can see the other solutions within a certain number of places of yours. Let’s say it takes you 25 keystrokes, then it’ll put you in the middle of the 25 keystrokes and then you can see the other solutions above and below yours. Usually, you can see people who did it in 24 or 23 keystrokes and then you can learn some tricks for Vim that way.
JASON:
Yes. I hosted a Vim meet up in Cleveland. The most successful times that we had was only pair up everybody and then went to VimGolf, selected a problem -- 20 minutes working in the problem, 5minute bio-break, 5-minute discuss what happened -- and people loved it. The amount of stuff that they went is pretty amazing.
CHUCK:
Yup. My other pick is kind of a troll, and that’s “Emacs”. [Laughter]
CHUCK:
I’m sorry…I’ve used Vim for years; I was the systems administrator in Vim that’s basically on everything. But I made the switch last year. I was working on a team that we were pair programming, and we chose Emacs as – well, they chose Emacs, and then I joined the team. Anyway, I’ve figured a lot of things out to make it fit well for what I do, and then I use Vim when I need to. So I’m not bashing on Vim at all, I just really like Emacs. Anyway, Jayson, what are your picks?
JASON:
I think for the first one, I think I’m going to be a little self-serving here. I noticed that we were talking about a lot of things where I worry about people going to do them without being able to find my documentations so I have a “link to a blog post of mine” that I have that documents how you get all the stuff installed just because I don’t want to see people banging their heads. After that, I’ve got 2 links with that I like because they’re really make people think about how we’re developing mobile apps. One is a framework that has just been announced called “lambdanative”, lamb-da-native. I can never remember how to say that; it’s probably with learning from the internet.
CHUCK:
Lambda?
JASON:
Yes.
PETE:
I can never remember how to spell that.
JASON:
[Laughs] It is a Scheme framework for cross-platform development that supports Android and iOS, as well as Windows and Linux, etcetera. I have found that really fascinating and I’m working at it. The last pick is the slides from a talk given by Nathan Sorenson. What he has done is used Scheme as an intermediate way to compile clojure to get “apps running on an iPhone”. So, Clojure running on an iPhone by being compiled in the Scheme.
CHUCK:
Wow! That’s all I have to say to that, wow. [Laughter]
PETE:
Yeah, I heard you like Lisp. [Laughter]
JASON:
Yes.
CHUCK:
That’s awesome. Alright, well, let’s go ahead and wrap up the show. Thanks for coming, Jayson. It’s been fun to talk about and it’s definitely one of those mind bends that I might just try out [laughs].
PETE:
Yeah, me too.
JASON:
Cool! It has been a great time with you.
PETE:
Yeah, thanks for coming up!
JASON:
Thank you!
CHUCK:
Yup, we’ll catch you all next week!
020 iPhreaks Show – Vim with Jason Felice
0:00
Playback Speed: