00:00:10.250
Hello everyone, this is David Heinemeier Hansson. I'm sorry I can't be with you all at RailsConf.
00:00:15.299
Kansas, this is a fantastic year to be at RailsConf, and I'm really sad to miss it.
00:00:21.000
We have Rails 5 almost ready to roll. In fact, maybe the release candidate will even drop during one of these days.
00:00:26.550
But in my stead, you have something perhaps even better: Jeremy Daer.
00:00:32.130
I've worked with Jeremy since 2004 on Ruby on Rails, the framework itself.
00:00:41.160
He is one of the few, actually I think perhaps the only person who's still around from the inaugural core team.
00:00:47.129
He has commits to the framework going back all the way to 2004.
00:00:53.520
So when people ask if you need 10 years or more of Ruby on Rails experience, Jeremy is one of the very few people who can say, "Oh yep, got it."
00:00:59.760
In addition to that, of course, I’ve worked with him at Basecamp for many, many years now.
00:01:06.030
It's been an absolute pleasure.
00:01:11.159
Jeremy is one of the very best programmers I know. Whenever there's anything I can't figure out, Jeremy is usually the person I tap and ask.
00:01:17.700
So, you're in for a real treat, and I hope you all have a fantastic RailsConf in Kansas.
00:01:23.820
I will see you all next year. Enjoy! Jeers, David.
00:01:41.270
Thanks! No pressure, right? Well, thank you, David.
00:01:50.659
He stole a bunch of the stuff I need to explain about why David's not here.
00:01:56.179
I’m not David, I’m Jeremy.
00:02:02.000
It has been ten years, and it's really kind of boggling to look back at that.
00:02:08.450
It was a city here in the conference room full of anticipation.
00:02:14.480
We had a company meetup last week with Basecamp, and we were also looking back at where we've come from and where we want Basecamp to go.
00:02:21.470
I think Rails has a lot of parallels with that.
00:02:27.079
I was feeling it was kind of interesting: what can you say about something like Rails?
00:02:35.150
My impulse—I mean, I work on Rails, I helped build Rails, I helped other people build Rails, and that's what I really love about it.
00:02:41.360
So my impulse is to talk about what's going into Rails, what's next for Rails.
00:02:46.700
I can give a litany of all the sweet things and features that we want for Basecamp.
00:02:53.660
But really, I love Rails itself, the community that's formed around it, the kind of business we've been able to build around it.
00:03:04.160
The kind of team that we run because we assume that software like this is normal.
00:03:09.829
Looking back, David in 2008 talked about the great surplus, and I'm going to talk about that some more.
00:03:15.709
We’re here for Rails 5, of course, and to me, it feels like Rails 5 already happened.
00:03:21.019
Basecamp 3 is running it.
00:03:23.470
We’ve been really pushing to make Rails 5 the best it can be for Basecamp, and I think it's also going to be the best for all of your apps.
00:03:31.790
David kind of tripped me up thinking about time with Basecamp.
00:03:39.319
I know a lot of you have also had similar tenure and experience with people you’re close to—coding partners, business partners, people you’ve seen come and go.
00:03:46.310
You may have been rejoined later. I remember back in the dot-com era, before Rails, depending on where you lived, you could recycle.
00:03:53.599
You’d see somebody that you had left and missed; you’d see them again six months or a year later.
00:04:02.270
There’s a kind of camaraderie in that, especially in the face of difficulties.
00:04:10.610
After Rail's emergence, it was the first time I really participated in an open-source way.
00:04:17.750
It’s something I wouldn’t have even known to look for, but it blossomed around me.
00:04:25.070
I learned to help others, which is what I came to enjoy about it.
00:04:33.169
But first, we've got to get back to a couple of misconceptions that David's already cleared up.
00:04:39.279
I'm not DHH, and you know the saying goes.
00:04:44.649
There are a few hard things in computer science: naming, caching, and concurrency.
00:04:51.849
So we can say that we hit a race condition.
00:04:57.999
David is racing in the six-hours of spa.
00:05:03.009
I don’t actually know how to say this because it seems like saying 'spa' would not be a thing.
00:05:09.749
Like, 'spa' is a place and 'spot' is a thing you get in this league.
00:05:16.789
But it’s a place he does these long endurance races.
00:05:23.660
If you're interested in cheering him along, you can find him on Twitter at DHH Racing.
00:05:30.660
He has a separate Twitter account because there's so much racing.
00:05:36.250
I'm sorry, Aaron, I warned you before, but this was the primo pun! And no more puns, I swear.
00:05:41.260
So, I'm here to dispense with this GitHub Twitter, and you may also notice.
00:05:47.150
You might have known me as Jeremy Kemper. I'm not Kemper anymore.
00:05:55.250
I got married to Renee Davis last year and we combined our surnames.
00:06:01.970
So now we're Renee Daer and Jeremy Daer. I give a shout out to the state of California and the Name Equality Act.
00:06:07.270
Reflecting again on Basecamp, I've been at Basecamp for nine years now.
00:06:14.230
You know, it seems like an eternity to me, and it really isn't.
00:06:21.570
You hear all the time about people retiring after a 35-year career doing something, and here my tenure is just a blip.
00:06:27.920
I don't even know how to think about that yet.
00:06:34.050
My first day still feels like yesterday, even though I can also start thinking about the details of what I did.
00:06:40.240
Those chunks of my career, the things I've forgotten, snowballed into what has become a career.
00:06:46.820
My first project was a search engine, using e-commerce software at the time.
00:06:52.910
And reflecting, I think it was something like five years later I was working on a search engine again.
00:06:59.080
What's happening here?
00:07:02.000
Ten years later, I’m going to avoid the search engines and focus on Ruby on Rails.
00:07:09.690
Something I don't really know how to synthesize or make sense of yet.
00:07:16.920
Because Ruby on Rails has been around now for going on half of my career as a programmer.
00:07:23.570
But okay, we're here to talk about Rails 5.
00:07:30.680
So here I am. You're all building Rails.
00:07:38.220
Most of you are on Rails 2.
00:07:44.980
Yes, there’s a big pain—a great discontinuity—the meteor strike was Rails 3.
00:07:50.100
And I will say that we still run Rails 2 apps at Basecamp.
00:07:57.520
That's part of our legacy, something we've chosen to fully embrace.
00:08:04.120
Even knowing the hue and cry about the real problems with running Rails 2 apps.
00:08:10.900
We run some apps on Ruby 1.8 and 1.8.7 REE.
00:08:17.600
So we take on a greater kind of responsibility for our legacy and their past.
00:08:24.410
But at the same time, we make our greatest efforts to stay current, especially with new development.
00:08:32.600
I'm not going to talk too much about Rails 5 right now.
00:08:38.930
This was my impulse; I made a talk that focused mostly on new features.
00:08:46.450
Let's get that out of the way: Action Cable is pretty cool.
00:08:53.810
I was initially a real Action Cable doubter because I thought, like WebSockets?
00:09:00.190
You know WebSockets, they were kind of cool, but I hadn't used them much.
00:09:06.420
But, HTTP 2—is this the leap forward? But the fact is WebSockets work great today.
00:09:12.950
They are at their sweet spot—the prime of their life—on their tech curve.
00:09:19.480
Trying to use them even two years ago was a total hassle.
00:09:27.140
Everybody was implementing it differently under various versions.
00:09:34.250
There were complex libraries to handle all kinds of fallback mechanisms.
00:09:42.240
You had a big split on whether to start with a simple technique and upgrade to more sophisticated ones.
00:09:49.520
But these days, in most browsers, most of the time, WebSockets totally work and do so for the things we need.
00:09:56.230
We designed mainly around being able to push and publish updates to people.
00:10:03.080
We’ve done it in past apps; it’s not a new idea.
00:10:09.470
The new thing is that this is part of the framework.
00:10:14.190
Working with these tools is like working with any other part of Rails.
00:10:20.370
You build a controller—it's what I know.
00:10:26.639
I think about my interaction with resources and how Action Cable integrates in the same way.
00:10:32.930
Rather than building one-off features, I now see opportunities to rely on it.
00:10:39.920
There are two other important features of Rails 5 that are selling points.
00:10:46.570
First is the Rails Code of Conduct.
00:10:53.720
We chose to adopt a code of conduct.
00:10:59.710
Reflecting on this, we see why it exists and the perspective of asking—why do this?
00:11:07.150
This should be a norm for the community.
00:11:14.130
As we made that decision, we took a step back to consider what it's like to work with Rails.
00:11:20.099
We should know what to expect as new contributors, especially when they submit their first pull request.
00:11:28.090
We’d really like to see this reflected throughout the Rails community.
00:11:34.500
It's huge—not just the Rails committers—but it’s the broader community.
00:11:41.490
Historically, the Rails IRC room has bucked the trend, creating a welcoming environment.
00:11:48.219
We’ve somehow set a tone to keep it a good place to learn.
00:11:55.029
You can read about the code of conduct online at ruby on rails.org/doctrine.
00:12:00.560
This is a first draft of the things that we value in working on Rails together.
00:12:09.130
We hope you do too.
00:12:16.200
The third feature is a new start page.
00:12:23.100
When you create a new Rails app, there's a redesigned start page.
00:12:29.220
I really should have put a photo here.
00:12:36.170
One of our designers at Basecamp, Jamie DeHenson, redesigned the Ruby on Rails website in time for Rails 5.
00:12:44.470
Timely for Rails Doctrine and for the code of conduct.
00:12:49.810
Thank you to him for redoing all of that for us.
00:12:57.230
If you start a new Rails 5 app, just wait for it.
00:13:04.830
I said I wasn’t going to get too deep into Rails 5 features.
00:13:10.740
I wanted to talk about the how land of Rails—how we got here.
00:13:20.070
This is the questioning I went there: 'How I Rails 5 my Rails?'
00:13:28.290
Last week, meeting up with everybody from Basecamp, we were remote, getting together every six months.
00:13:36.780
Also, had the opportunity to discuss why Basecamp, why Basecamp 3?
00:13:43.100
Now, okay, I've got this little splinter in my mind, so indulge me for a second.
00:13:50.200
Seriously, what's up with this? This is literally a problem I was pondering a couple of nights ago.
00:13:57.570
I thought about this before; it’s kind of a knowledge that stuck in my head.
00:14:05.370
What does Kansas City, Missouri, what did they move? Did the river like shift around and the border changed?
00:14:12.320
There’s gotta be a reason, right? Some kind of engineering solution.
00:14:19.800
So I looked it up—in case any of you have had the same splinter pitch here.
00:14:27.330
In the 1830s, Kansas was founded as a Missouri River port town.
00:14:34.310
The Missouri River blocked all of Kansas.
00:14:40.979
Kansas River comes in from the west, so let's call it Kansas after the river.
00:14:48.740
Cool story: Kansas didn't exist at that time; Missouri did.
00:14:54.730
The river was named after the native Kanza tribe, also known as the Kansas.
00:15:00.740
In 1854, Kansas Territory was established.
00:15:06.600
Okay, now we’ve got a town called Kansas and a territory called Kansas.
00:15:12.150
This got confusing for people in the town of Kansas.
00:15:18.600
So they renamed Kansas the City of Kansas to clarify that it’s different from Kansas.
00:15:24.499
When Kansas became a state in 1861, there was no problem and no confusion.
00:15:32.740
Kansas City of Kansas—Kansas Territory.
00:15:39.470
Okay, 28 years later, for some reason in 1889, we have Kansas City.
00:15:45.210
Who knows? Where's Kansas City now? So we have Kansas City on the Kansas River next to Kansas.
00:15:51.810
By the way, there’s a Kansas City in Kansas right across the river.
00:15:58.940
So now that we've cleared that up.
00:16:06.750
Okay, back to Rails 5.
00:16:12.090
This is a huge release. This is the release that launches Basecamp 3. It also launches Action Cable, Turbolinks 5, and brings Active Job.
00:16:28.600
Active Job has been around since Rails 4.2, but now it really comes into full bloom.
00:16:36.240
It changes the way you build apps, and you will probably reach for Active Job a lot more frequently.
00:16:45.080
Action Cable, in particular, is accepting a ton of connections.
00:16:53.440
What happens when you’ve got 10,000 connections in one process and you start trying to do stuff?
00:17:01.790
You’ll block everything that’s happening on that server.
00:17:08.680
The typical response is you want to offload any kind of processing as soon as possible.
00:17:14.820
The interaction you’re going to see with Action Cable channels is to give me a job instantly.
00:17:22.030
Otherwise, you’re going to be blocking everything that’s happening on your server.
00:17:28.480
This is also the Rails that introduces a full API mode.
00:17:37.170
This means the locus of chief of your control in your app.
00:17:46.540
If you want to move it to another service, if you want Rails to be a collaborator to another place.
00:17:54.130
If you want to implement something other than Rails, it works in the browser.
00:18:02.920
The way Rails works remains fundamentally the same; you're thinking in terms of resources.
00:18:11.400
You think restfully, and none of that changes.
00:18:18.370
This is particularly something true for some of our larger Rails businesses.
00:18:26.190
As they've grown, they’ve embraced other platforms, especially if they’re multi-team.
00:18:35.040
If you’re a medium-sized company that can accommodate iOS, Android, and decide to round the browser.
00:18:42.110
It’s almost isomorphic to having a client on other platforms.
00:18:50.200
Treating the browser as a platform in itself is probably the biggest change I feel in Basecamp 3.
00:18:57.430
It's a transition to Turbolinks 5, which is very personal to Basecamp and the way we work.
00:19:06.070
We couldn’t contemplate creating an Android app on top of what we're already building.
00:19:13.780
Or creating an iOS app on top of what we've built.
00:19:20.640
A team can only do so much and must make choices about what you do.
00:19:27.340
Especially a small team that feels the pressure to grow can face a lot of challenges.
00:19:35.080
So, after the pressure of maybe needing an app, how do you handle it?
00:19:41.790
Well, you grow into being a larger company or team to tackle those challenges.
00:19:47.540
We took a different path, and I think it’s something a younger Basecamp may not have done.
00:19:55.170
We second-guessed ourselves and doubted several times along the way.
00:20:02.540
Hitting some gnarly roadblocks while building partnerships.
00:20:09.050
Turbolinks team and our iOS and Android developers made it through.
00:20:15.110
Part of Basecamp 3 and Rails 5 is the paired release of Turbolinks 5.
00:20:22.270
Turbolinks 5 comes with iOS and Android bridges.
00:20:29.050
This allows you to build your Android and iOS hybrid apps on top of your mobile apps.
00:20:34.930
Think of your Rails app as a resource; you don’t need to build a complete separate experience.
00:20:40.980
If your team already has mobile development, this is a plus.
00:20:47.920
So enough about Turbolinks 5, how do we get here?
00:20:56.070
I’m thinking back on my rails.
00:21:02.690
Why Rails 5? Here’s my first thought: David's Circuit 2003.
00:21:08.920
Seems legit, right? David isn’t here to vet this.
00:21:21.720
So it’s not wrong, is it? But we can take a closer look.
00:21:30.240
There is an element of truth, but really, the story of Rails 5 is also the story of Rails 1.
00:21:37.070
The early days show us where we’ve been and the opportunities we have.
00:21:44.070
Take a look: David in 2003—it’s not just that we need to build Basecamp.
00:21:55.030
There’s a sense of opportunity, something that can be done.
00:22:03.440
A single person could create something incredible with ten hours of time a week.
00:22:11.250
Even thinking back, how does Basecamp form in XML?
00:22:18.640
Now we have Rails formed.
00:22:26.920
There's truth to this, and it's kind of glib.
00:22:33.270
Working with David over the years; it's not too far off interdisciplinary.
00:22:43.350
There’s a higher expectation—wanting to maximize tools.
00:22:50.760
Being impatient with roadblocks.
00:22:57.130
It’s recognizing that taking the longer-term view can lead to habitual problems.
00:23:04.640
It’s about more than happiness; it’s about fluency.
00:23:11.420
It’s love for the language and the community that has grown around it.
00:23:19.520
Ruby is my native tongue.
00:23:28.040
In a tech world where you’re supposed to be a polyglot, the specialness of Ruby feels like home.
00:23:37.030
I really feel it’s like developing another layer of personal relationship with our tools.
00:23:44.460
I like other languages; I love Ruby.
00:23:51.700
It's wonderful to write and read.
00:23:59.040
But it’s a different story than coming home and opening an editor.
00:24:06.940
What about the first step? Why Rails? It’s simple: Basecamp needed to be built.
00:24:13.250
But Basecamp started as a PHP prototype. David wanted a quick solution.
00:24:22.630
He got frustrated along the way and decided this wasn’t feasible.
00:24:31.400
So, he built Rails.
00:24:37.670
This is where my story with Basecamp and Rails joins.
00:24:44.370
I had my own story with Rails before Basecamp.
00:24:52.690
I was doing freelance work, dabbling with PHP and Java.
00:25:00.000
I liked Ruby, but I found it to be something special.
00:25:06.190
For fun, I would explore how I could implement projects in Ruby.
00:25:12.520
Often, the Ruby libraries felt like pale copies of other languages.
00:25:20.290
It felt like building in Java servlets but writing Ruby instead.
00:25:26.540
Then Rails came along.
00:25:32.560
It was an eye-opener, bringing together productive web development end to end.
00:25:40.510
It wasn’t just a vision; it was a way to create and use Ruby.
00:25:48.200
It's hard to deny that I could see myself in this vision.
00:25:55.720
I worked at CD Baby and had my own Rails moment.
00:26:03.370
I was looking for like-minded individuals who shared this passion for Rails.
00:26:10.160
Derek Sivers, the founder of CD Baby, reached out to me.
00:26:18.620
It was like manna from heaven