ТРАНСКРИПЦИЯ 🔗
WEBVTT
00:00:42.759 --> 00:00:48.013
Welcome to the Ruby Gems podcast brought to you by Ruby Central, where we uncover the stories behind the code.
00:00:48.013 --> 00:00:48.915
We're your hosts.
00:00:48.915 --> 00:00:49.936
I'm David Hill.
00:00:50.499 --> 00:00:51.341
And I'm Marty Haught.
00:00:51.341 --> 00:00:55.819
Today, we're joined by a prominent figure in the Ruby community, Evan Phoenix.
00:00:55.819 --> 00:01:08.503
You might know Evan as a creator of Rubinius, a pure Ruby implementation with a focus on performance and concurrency, or the architect behind Puma, a high-performance web server that powers countless Ruby applications.
00:01:08.503 --> 00:01:13.462
Evan has solved critical scalability challenges that Rails developers face every day.
00:01:13.462 --> 00:01:23.121
Evan joined the Ruby Central board back in 2011, where he helped organize RubyConf and RailsConf, as well as played an important role with the operations of RubyGems.
00:01:24.230 --> 00:01:25.114
Thanks for having me guys.
00:01:25.114 --> 00:01:33.037
Great to be here, great seeing you all recently as well, that is true RailsConf concluding just last week.
00:01:33.350 --> 00:01:39.777
It was a lot of fun to see a lot of old, familiar faces for not the last time but the last time at that particular gathering I guess.
00:01:39.777 --> 00:01:41.447
Hopefully at the last time it didn last time at that particular gathering, I guess.
00:01:41.467 --> 00:01:43.717
Hopefully at the last time it didn't feel that much like a funeral.
00:01:43.777 --> 00:01:56.960
Thankfully, I admit part of my feelings about it were probably biased, since I was more involved in this one than I have been in any previous RailsConf, but I felt like this was a right shunning moment for it.
00:01:57.530 --> 00:02:01.137
My feelings were also biased, but that's because I wasn't worried about what was going on.
00:02:01.137 --> 00:02:05.645
I wasn't like, oh my gosh, like did we have enough coffee at the conferences?
00:02:05.645 --> 00:02:17.781
One thing that I always enjoyed about conferences is that the majority of the stress is beforehand, even like two weeks before the conference it's happening.
00:02:17.781 --> 00:02:19.495
There's kind of nothing you can do.
00:02:19.495 --> 00:02:32.353
At that point the train has left the station, and so when I would help run conferences when I was there, I would always just be like let me find something to do.
00:02:32.353 --> 00:02:32.795
Like did the AV work?
00:02:32.795 --> 00:02:33.419
How are people liking the Wi-Fi?
00:02:33.419 --> 00:02:33.981
What's the coffee situation?
00:02:33.981 --> 00:02:36.991
Do I need to go complain to the catering staff to be like come on, guys, you got to put more grounds in the coffee.
00:02:36.991 --> 00:02:40.854
I didn't figure that this time, which is great, so that kind I didn't have to do any of that this time, which is great.
00:02:40.873 --> 00:02:44.717
That kind of dovetails nicely to the initial question I wanted to ask to kind of get you started, Evan.
00:02:44.717 --> 00:02:50.742
I believe this is your first RailsConf kind of back on the stage since leaving the board.
00:02:50.742 --> 00:02:55.485
What was that like coming back and being on that stage again with that group of people?
00:02:56.306 --> 00:02:56.806
It was great.
00:02:56.806 --> 00:02:57.847
Honestly, I've missed them.
00:02:57.847 --> 00:03:08.876
It was great seeing them and getting to kind of work with them a little bit to see them see how things were going again, because while we all work remote, we've all worked from home for a long time.
00:03:08.876 --> 00:03:14.340
The conferences was always a time where I would like actually get to see these people and spend lots of more concentrated time with them.
00:03:14.439 --> 00:03:17.332
So so I want to talk about Rabinius.
00:03:17.332 --> 00:03:28.275
So I remember, back in 2006 in Denver, I was sitting in the audience next to Aaron Patterson by the way, my hair was much browner at the time.
00:03:28.395 --> 00:03:30.219
Yep, right yeah.
00:03:31.061 --> 00:03:36.276
I wondered at the time what motivated you to do, Robinus.
00:03:37.197 --> 00:03:42.906
So I'm always fascinated with tools, small tools.
00:03:42.906 --> 00:03:45.618
It's an inherited trait from my grandfather.
00:03:45.618 --> 00:03:53.862
We have this great story about my grandfather that when he was a little boy, he was just so interested in how this alarm clock worked that he stole it off his parents' bedside table.
00:03:53.862 --> 00:04:09.819
He took the alarm clock apart, figured out how it worked, couldn't get it back together, buried it in the backyard, right, like and I've heard that story many times, partly because of the adults in my life would tell it to me because they're like, yeah, we kind of see a similar thing going on here.
00:04:09.819 --> 00:04:15.421
Honestly, it's true, right, I am a connoisseur in how things work.
00:04:15.421 --> 00:04:18.480
I love the idea of, like, what is this thing doing?
00:04:18.480 --> 00:04:19.836
How does the refrigerator work?
00:04:19.836 --> 00:04:21.156
How does our airplane work?
00:04:21.156 --> 00:04:21.776
How does the refrigerator work?
00:04:21.776 --> 00:04:22.416
How does the airplane work?
00:04:22.416 --> 00:04:22.918
How does my arm work?
00:04:22.918 --> 00:04:25.920
Just a constant fascinating thing that runs in my head.
00:04:25.920 --> 00:04:33.858
I'll see things, and so when I got into programming that's a great discipline for someone who wants to know how stuff works, because you're making stuff work for the most part.
00:04:33.858 --> 00:04:51.423
But I started working on doing Ruby stuff in really 2002, I would probably say, and so I had worked a little bit on programming languages prior to that, and when I was in college I worked with a friend on a programming language and then I got into Ruby and I kind of he went off and did his own thing.
00:04:51.423 --> 00:05:03.283
And
Load full transcript
so there's a hazard, though, in wanting to know how things work when you're a programmer, because eventually you're like this tool is so much fun, I can do these things and I can make these programs work, but how does it work work?
00:05:03.283 --> 00:05:13.685
I would eventually find myself looking at, like, the source code of the Ruby interpreter and trying to figure out like OK, well, how did it implement threads and how did it do this and how does this work?
00:05:13.685 --> 00:05:17.413
And, partially, it'd be to help me know how to write better programs.
00:05:17.413 --> 00:05:25.180
Once you know like, oh, these things are fast, these things are slower, this is powerful and this is not powerful, whatever, you get a better sense of how to hold the tool, as it were.
00:05:25.180 --> 00:05:31.006
And then, as time went on, I was like is there better ways to do this?
00:05:31.006 --> 00:05:31.787
Is there different ways?
00:05:31.787 --> 00:05:35.271
And I would just talk with people.
00:05:35.271 --> 00:05:47.078
And then I got introduced to Smalltalk not actually writing any Smalltalk, just Ruby took a lot of things from Smalltalk, and Smalltalk had a whole like code VM and it was in a book and the book is right over here.
00:05:47.078 --> 00:05:51.699
It's called the Smalltalk Bluebook and it has a little how to implement a Smalltalk VM in the back.
00:05:51.699 --> 00:06:00.091
And so I was like, well, this is so interesting because you can see like all the machinery Now the guts are exposed, and so that's really where I started Rub and so that's really where I started.
00:06:00.110 --> 00:06:04.593
Rubinius is sort of like phase three of this sort of like interest.
00:06:04.593 --> 00:06:08.555
The beginning was this sort of like oh, how would this work?
00:06:08.555 --> 00:06:13.297
The middle part of that stage two was I wrote a bunch of patches.
00:06:13.297 --> 00:06:26.242
I started writing patches for MRI not necessarily for bytecodes, but like there's a patch it's sort of lost to the winds of history, I think it's on Shugo's server somewhere still for adding like native threads to Ruby 1.8.
00:06:26.242 --> 00:06:28.502
And I got it working well enough.
00:06:28.502 --> 00:06:33.305
It wasn't good enough that you'd want to use it for anything, but it was very instructive for me.
00:06:33.805 --> 00:06:36.586
And then I started sort of like phase two and a half.
00:06:36.586 --> 00:06:40.829
There was like what if we just started a new sort of second system syndrome kicked in?
00:06:40.829 --> 00:06:42.972
And I was like what if we just started a new sort of second system syndrome kicked in?
00:06:42.972 --> 00:06:43.994
And I was like what if we started over?
00:06:43.994 --> 00:06:44.473
How hard would that be?
00:06:44.473 --> 00:06:47.478
And so the sins of that question are all still.
00:06:47.718 --> 00:07:08.586
I would invite listeners to go look at the Rubinius repository on GitHub, because you can go back to the very, very, very beginning of the Git history of that thing and you can see the very first experiments, which were basically a bytecode interpreter in Ruby that ran on MRI and used FFI to access raw memory so that it could write its own garbage collector.
00:07:08.586 --> 00:07:10.812
And there's a whole journey in there, right?
00:07:10.812 --> 00:07:13.800
And so it was so much fun to be honest with you.
00:07:13.800 --> 00:07:16.975
It was so much fun to just make a thing and make it work.
00:07:16.975 --> 00:07:23.240
That's the normal programmer thing, and when you're working at this really low level, the thing that you're making work is like a thing that makes more programming.
00:07:23.240 --> 00:07:28.750
For every little construct that you make work, you make an infinite number of new programs work, right, right.
00:07:28.750 --> 00:07:34.055
So that's almost intoxicating idea to me and so kind of just spiraled from there.
00:07:34.396 --> 00:07:35.360
I just kept working on it.
00:07:35.360 --> 00:07:36.182
It just kept going.
00:07:36.889 --> 00:07:39.093
You were at Engine Yard at the time or was that before?
00:07:39.093 --> 00:07:40.216
That was before Engine Yard, right.
00:07:40.817 --> 00:07:41.819
Yeah, it was before Engine Yard.
00:07:41.819 --> 00:07:54.064
I was working at some startups in Seattle at the time and when I gave that talk the talk you're thinking of in Denver at the hotel by the airport, I had this cool thing and I didn't know why people would use it.
00:07:54.064 --> 00:07:56.494
I was like, how do I evangelize it?
00:07:56.494 --> 00:07:58.139
Is it important, is it not important?
00:07:58.139 --> 00:08:03.674
I didn't really know and so I just submitted a talk about it.
00:08:03.674 --> 00:08:07.328
That talk sort of famously for people who remember it is the dune buggy talk.
00:08:07.328 --> 00:08:09.013
Basically, I gave this whole talk there.
00:08:09.054 --> 00:08:11.920
Ruby 1.9 was sort of starting to take legs at the time.
00:08:11.920 --> 00:08:18.997
There was a bytecode VM that was being worked on and I gave this whole thing about how Rubinius was going to be the dune buggy to MRI's dump truck and it was something that you put together.
00:08:18.997 --> 00:08:21.968
It's going to be the dune buggy to MRIs dump truck and it was something that you put together.
00:08:21.968 --> 00:08:24.115
It's going to be faster, it's going to be more agile.
00:08:24.115 --> 00:08:30.662
It might crash, you might get thrown off of it occasionally, but it's going to be a little bit maybe more fun than driving a dump truck around.
00:08:30.662 --> 00:08:32.952
There's a strange analogy, but it worked.
00:08:33.433 --> 00:08:33.674
Yeah.
00:08:34.355 --> 00:08:49.180
The culmination of it was that I talked at RailsConf in 2006, which was in Portland, about Robinus, in like a tiny side room for some reason, and then Tom Roney, the CTO of Engine Yard, said we love what you're doing.
00:08:49.180 --> 00:08:50.331
Are you looking
for a job?
00:08:50.331 --> 00:08:52.817
Like obviously you're super smart, you've done a lot of Ruby stuff.
00:08:52.817 --> 00:08:55.832
Engine Yard would love for you to, like you couples, work on this.
00:08:55.832 --> 00:09:00.220
You can work on Rubinius at the same time, and so then that's how that sort of just came about.
00:09:00.600 --> 00:09:04.836
So you did get to spend some of your time at Engine Yard on Rubinius.
00:09:05.136 --> 00:09:15.798
Most of it, the way that it started was they were like we'd love somebody who just knows Ruby around, knows Ruby really well, and then we want you to also work on this thing because we could maybe benefit from it eventually.
00:09:16.210 --> 00:09:23.097
And so that was the first time really getting paid to work at open source, and that was the first time really getting paid to work on open source, and so I didn't necessarily manage it all that well.
00:09:23.097 --> 00:09:28.364
What I would do is I would like work on the open source for a week or two weeks, and then I would switch back over and be like hey, what do you guys need help with?
00:09:28.364 --> 00:09:40.317
So I would like disappear for two weeks at a time, and every time I would come back the team would be like take us too long to tell you what has happened in the last two weeks.
00:09:40.317 --> 00:09:41.661
And so this cycle only happened like two or three times before.
00:09:41.661 --> 00:09:43.225
Tom was like you know, I don't worry about it, just work on rubinius full-time.
00:09:43.225 --> 00:09:51.914
And so that was three or four months in, and then I just worked on rubinius full-time for the next five years we're maybe doing these questions a little not in the most ideal order.
00:09:52.475 --> 00:10:05.235
that's fine, but for those of us like me who came to ruby in the ruby community a little late and didn't really have much exposure to Rubinius other than occasionally hearing the name, could you tell us what Rubinius was?
00:10:05.235 --> 00:10:10.941
For people who may not know, so Rubinius was a Ruby implementation.
00:10:11.269 --> 00:10:13.499
So you would download it, you would run it, you would compile it.
00:10:13.499 --> 00:10:14.654
It would run your Ruby programs.
00:10:14.654 --> 00:10:16.274
That was what it was designed to do.
00:10:16.274 --> 00:10:17.895
Why would you want to do that?
00:10:17.895 --> 00:10:34.520
Well, there's a bunch of limitations, there's a bunch of architectural decisions that the main Ruby interpreter, which is sometimes called CRuby, is sometimes called MRI for a massive Ruby interpreter CRuby now, because math doesn't work on nearly as much as other people.
00:10:34.520 --> 00:10:37.269
But so why work on it differently?
00:10:37.269 --> 00:10:45.003
Well, at the time there wasn't Ruby, the was not even a bytecode interpreter, so it was pretty slow.
00:10:45.509 --> 00:10:49.721
And so the idea was like hey, how can we bring techniques from the 70s into here?
00:10:49.721 -->
00:10:53.480
How can we basically just bring to bear all the different techniques?
00:10:53.480 --> 00:10:55.478
So it's like a bytecode VM.
00:10:55.478 --> 00:10:57.758
Let's look at what cool garbage collector papers there are.
00:10:57.758 --> 00:10:59.336
How can we make the garbage collector faster?
00:10:59.336 --> 00:11:04.796
Oh, we can do just-in-time compiling of the code into machine code.
00:11:04.796 --> 00:11:10.624
Oh, we can also say like oh well, you want real concurrency, we can add real concurrency so we can have real threads.
00:11:10.624 --> 00:11:14.033
You can have two threads and they can both take up CPU cores.
00:11:14.033 --> 00:11:16.659
This was like 2006, 2007, right?
00:11:16.659 --> 00:11:27.257
So we were at the sort of beginning of the multi-core revolution for computers, and so the idea like, hey, we've got multiple cores, multiple threads, you should be able to eat them both up if you really need to.
00:11:27.257 --> 00:11:36.856
And so that was the reason to download and use Rubinius Critically for a number of different reasons, both good and bad I guess I would say both in the definition of critical here.
00:11:37.671 --> 00:11:41.157
I had decided to write as much of Rubinius in the Ruby language itself.
00:11:41.157 --> 00:11:49.599
So one of the other things that people took slight umbrage with and it's not that big a deal was that CRuby was written in C.
00:11:49.599 --> 00:11:50.741
It wasn't written in Ruby.
00:11:50.741 --> 00:11:53.840
There's almost no Ruby code in Ruby itself at the time.
00:11:53.840 --> 00:11:59.029
And so if you wanted to go add a new method to string, you're going to write a bunch of C code.
00:11:59.029 --> 00:12:02.320
If you're going to add a new built-in class, you're going to write a bunch of C code.
00:12:02.320 --> 00:12:04.101
If you're going to add a new built-in class, you're going to add a bunch of C code.
00:12:04.101 --> 00:12:04.782
You're going to do all that stuff.
00:12:04.802 --> 00:12:08.525
You don't know how the interior worked entirely, and in Robinus we were like you know what.
00:12:08.525 --> 00:12:21.841
Let's try to have a clean separation between what is the engine and what is the standard library or what we end up calling the kernel because the standard library was already taken as a term and so you wanted to implement string.
00:12:21.841 --> 00:12:23.663
Let's go implement string.
00:12:23.663 --> 00:12:29.816
So there's a file you can go look at in the kernel directory called stringrb, and you would implement string.
00:12:29.816 --> 00:12:34.297
Now we'd eventually sort of cheese our way out of a few things, right.
00:12:34.297 --> 00:12:36.118
So some things would be just way too slow.
00:12:36.118 --> 00:12:50.318
So we basically had the ability to glue in a primitive operation which is a term from small talk into a Ruby function so you can say like oh well, when someone calls this, I actually want you to go call this little chunk of code that
is written inside the VM.
00:12:50.318 --> 00:12:55.238
But by and large, you should eventually reach the end of that pretty quickly.
00:12:55.238 --> 00:12:57.413
And then you'd be like okay, great, I want to go in from that.
00:12:57.413 --> 00:13:00.966
Each iterators and stuff like that are great examples, right.
00:13:00.966 --> 00:13:09.253
They're actually much easier to deal with in Ruby code itself than in C code, where you have to do a bunch of weird callback structures and all that kind of stuff.
00:13:09.332 --> 00:13:14.454
And so that decision to write it all in Ruby meant that I had a lot more people contributing to it.
00:13:14.794 --> 00:13:17.020
Mri didn't have a lot of contributors at the time.
00:13:17.020 --> 00:13:23.802
It had probably a core group of about, say, five to nine, and I could get five to nine contributors in a day.
00:13:23.802 --> 00:13:28.135
Right, I could just say like hey, like go out a new method that you haven't added, where do you add it In Ruby?
00:13:28.135 --> 00:13:31.656
And then so it was easy to get contributors, it was easy to move up from there.
00:13:31.656 --> 00:13:33.234
We don't have to end here.
00:13:33.234 --> 00:13:45.178
But I would say, like one of the interesting legacy parts about Rubinius, in my opinion, is that the idea of like hey, let's write more of this stuff in Ruby is now in CRuby as well.
00:13:45.178 --> 00:13:47.388
So they have basically started to convert more of their code into Ruby.
00:13:47.388 --> 00:13:54.273
Now, I'm not going to say I'm the genesis of that idea, but I'm glad that the idea that I had has sort of seen its way through to the conclusion.
00:13:54.273 --> 00:14:00.042
It is now it's easier to contribute to CRuby, now it's easier to write new code for it and all those sorts of things.
00:14:00.042 --> 00:14:01.364
That's been great.
00:14:06.172 --> 00:14:17.085
So after Rubinius, I only learned about this wrinkle in preparing for this episode that you were kind of originated Puma, which kind of is the de facto web server that powers a lot of, if not most, ruby applications these days.
00:14:17.085 --> 00:14:19.094
Can you tell us about that and how that came about?
00:14:19.696 --> 00:14:20.538
Absolutely so.
00:14:20.538 --> 00:14:24.039
It was, I want to say, 2011, 2012, something like that.
00:14:24.039 --> 00:14:31.822
We were hard at work, working in Rubinius, and I wanted websites to be like oh, I run Rails on this, what does that look like?
00:14:31.822 --> 00:14:33.677
Or I run Siddhartha or whatever at the time.
00:14:33.677 --> 00:14:35.576
And so what does that look like?
00:14:35.576 --> 00:14:42.360
And I wanted to have Rubinius be able to put its best foot forward in terms of like, hey, it's got concurrency, it maps.
00:14:42.360 --> 00:14:45.562
Well, it's got threads, it's got all the things that make sense.
00:14:46.283 --> 00:14:55.079
There were other web servers out there at the time, but none had sort of been optimized with the
eye of like okay, well, you've got threads that you can just use for various things.
00:14:55.079 --> 00:15:01.379
You know famously, webbrick, the web server that's built into Ruby itself.
00:15:01.379 --> 00:15:03.853
I don't know if it still does this, but it did this at a time.
00:15:03.853 --> 00:15:20.198
It spun up a new thread for every single request, which was actually super great on Ruby 1.8, because threads were super cheap, they were green threads, they were not native threads, and then it became pretty bad as time went on, and so I wanted to say like okay, great, like, what does it look like to have an architecture that looked like this?
00:15:20.198 --> 00:15:23.769
Say like okay, great, like, what does it look like to have an architecture that looked like this.
00:15:27.049 --> 00:15:39.243
Simultaneously, zed Shaw, the original author of Mongrel, had sort of grown tired of those petty squabbles and had sort of moved on, and so Mongrel was not really being worked on anymore, and everybody was like, oh, do I move to Unicorn, do I move to this, do I move to that?
00:15:39.243 --> 00:15:49.716
And so it felt like there was a good place to say, like, okay, I want it to work.
00:15:49.716 --> 00:15:57.058
Well, for my thing, there's sort of a hole in what people are looking for in terms of like, what's maintained, and so I was like, let's just take, one of the best parts of mongrel is the parser, the actual http parser, which we still use today.
00:15:57.058 --> 00:15:59.490
That's the http parser that puma uses.
00:15:59.490 --> 00:16:10.481
Let's take that, and let's basically like recraft the outer shell, entire outer shell of like what does it look like to work, to be a web server on top of that existing HTTP parser?
00:16:10.481 --> 00:16:11.895
So that's how it started.
00:16:11.895 --> 00:16:28.645
I also was careful to not have it be Robinus specific, though, so I wanted it to be optimized for the patterns that rabidius was good at, but not like laced with things that say if not a rabidius throw, get a life.
00:16:28.645 --> 00:16:39.762
None of that, not expecting that, oh, rabidius has this one super cool quirk that'll make hgp super fast, like none of that stuff, right, just center of the road sort of behavior.
00:16:39.762 --> 00:16:43.639
On the actual implementation, and so what that meant was that you could use it anywhere.
00:16:43.639 --> 00:17:00.918
You could use it on anything that supported all the normal things, and we were careful to also, therefore, not get too esoteric with the implementation, and what that meant was that it was easy to use, it was easy to download, it worked mostly the same as people were accustomed to, and we were maintaining it.
00:17:01.700 --> 00:17:05.634
The story of Puma is one of maintainership more than anything else.
00:17:05.634 --> 00:17:10.639
Right, we wanted to build a thing and we figured out how to continue to build a thing.
00:17:10.639 --> 00:17:21.338
There's a whole long tale conversation here about open source maintainership, energies, and so I can't even remember what year this was.
00:17:21.338 --> 00:17:27.061
It was 2017, maybe, maybe 2018.
00:17:27.061 --> 00:17:31.397
I approached Richard Schneeman and Nate Berkopecht.
00:17:31.979 --> 00:17:33.702
Richard was working at Heroku at the time.
00:17:33.702 --> 00:17:40.355
He might still be there and he had written a whole thing about hey, if you want to run your Ruby apps on Heroku, puma is the best way to do it.
00:17:40.355 --> 00:17:44.221
So there's a whole article that they had written, and I was like, oh man, we've reached it, we've reached.
00:17:44.221 --> 00:17:46.051
I've reached the mountaintop here.
00:17:46.051 --> 00:18:07.192
But I also was like Richard should just be a maintainer, like if he's like, hey, this will work better on Heroku, then I want that stuff in Puma right At the same time, nate Broker Peck was working on performance stuff, which he still is working on, and so I went to them and said would you help me maintain this thing?
00:18:07.192 --> 00:18:14.346
Because I knew that maintainership was the most important aspect that Puma had at the time was that people were like bugs still get fixed and things get implemented and security fixes get fixed and all those sorts of things, and so that was the other really important part of it.
00:18:15.329 --> 00:18:19.596
I'm glad you went down that trail of the maintainership because I actually kind of wanted to ask about that.
00:18:19.596 --> 00:18:34.757
That's kind of been an ongoing conversation in Ruby and Rails for a while now open source maintainers and contributing back and kind of helping maintainers not get burnt out on doing this thing that they're not getting paid for, compensated for in unusual ways.
00:18:34.757 --> 00:18:39.276
Do you have any thoughts on what we as a community can do better in that area?
00:18:40.250 --> 00:18:52.000
Something the community can do is don't look at the like Git history or the release history of a gem or a piece of software as an indication of its usefulness.
00:18:52.000 --> 00:18:57.753
There is a thing out there that's like oh, this thing hasn't been updated in two years, it probably doesn't work.
00:18:57.753 --> 00:18:59.895
Move on, this is not that new hotness.
00:18:59.895 --> 00:19:05.439
I actually want to normalize people writing finished software.
00:19:05.439 --> 00:19:10.697
I want everyone to have a piece of software that they're like it's done, I'm not doing it anymore.
00:19:10.697 --> 00:19:16.099
I have a piece of software like that for myself, where it's like it does exactly what it says in the tin, nothing more.
00:19:16.099 --> 00:19:19.335
If you want other stuff, feel free to put stuff somewhere else.
00:19:19.335 --> 00:19:22.823
Like, I'm not going to just keep glomming on features and glomming on features, right.
00:19:22.823 --> 00:19:31.518
So in that same way that, like, frequency of release is not an indication
of usefulness, don't also think like oh, I've got this great idea, you should implement it.
00:19:31.518 --> 00:19:34.640
Or here's some half-assed PR of a feature that only I need.
00:19:34.640 --> 00:19:40.759
Can you just merge it and live with it, because the maintainer now has to figure out what do I do with this long term, right?
00:19:40.759 --> 00:19:48.916
It's not a one-time burden, it's an infinite burden, and so maybe that's the flip side of things is like maintainers should be careful in what they accept.
00:19:48.916 --> 00:19:50.601
That's not to say they shouldn't accept things.
00:19:50.601 --> 00:19:56.025
I'm a big fan of open source, but you should think you know what this is a domain.
00:19:56.767 --> 00:20:05.713
The better conversation is to say okay, person who's suggesting this, pr, how can I do the minimum so that you can do most of this work?
00:20:05.713 --> 00:20:07.338
In other words, do you need a hook point?
00:20:07.338 --> 00:20:12.221
What do you need in order to basically release this code on your own that you can go off and work with?
00:20:12.221 --> 00:20:13.852
Right, it's hard.
00:20:13.852 --> 00:20:16.819
A lot of software out there is.
00:20:16.819 --> 00:20:20.750
It does the thing I haven't looked in a while.
00:20:20.750 --> 00:20:23.582
I would be surprised if not something I work on in a while.
00:20:23.582 --> 00:20:25.450
I would be surprised if not something I work on, but something else.
00:20:25.450 --> 00:20:38.481
I would be surprised if Nokogiri has gotten significant API changes over the course of the last five years Because it does the thing I needed it to parse and manage XML and HTML and all that stuff it does.
00:20:38.481 --> 00:20:38.682
That.
00:20:38.682 --> 00:20:40.134
Can we just call it done?
00:20:40.134 --> 00:20:49.544
Yeah, you still take bug fixes here and there, but like it's done, I think that that is a much more interesting and healthy place for people to arrive at.
00:20:49.544 --> 00:20:52.099
We don't need to be innovating on everything all the time.
00:20:53.185 --> 00:20:55.010
So with RubyGems.
00:20:55.010 --> 00:20:57.636
I know you did some work with RubyGems.
00:20:57.636 --> 00:21:01.134
How early did that interaction start?
00:21:01.134 --> 00:21:04.655
Was that once you were at Ruby Central or was that while you're at Engine Yard?
00:21:05.384 --> 00:21:08.736
Yeah, I mean RubyGems, the client software was before that.
00:21:08.736 --> 00:21:10.652
That was 2009.
00:21:10.652 --> 00:21:21.111
So there was a time when RubyGems, the client software, was and this is a great counterpoint to what I have just said kind of seen as a piece of done software.
00:21:21.111 --> 00:21:22.493
It did the thing.
00:21:22.493 --> 00:21:29.498
It did gem install and that was what was needed, right and lo and behold, that wasn't necessarily the best workflow.
00:21:29.498 --> 00:21:38.113
This is right before Bundler and people were inventing things like the old config gems file that would just have a list of gems to go install.
00:21:38.113 --> 00:21:39.550
This is sort of in Rails two days.
00:21:40.404 --> 00:21:48.313
And then with Rails 3, Carl and Yehuda had worked on Bundler and that had come out and that had been like, hey, this is a much better way of managing things.
00:21:48.313 --> 00:21:49.256
So they were innovating.
00:21:49.256 --> 00:21:51.765
The Ruby gems was doing almost nothing.
00:21:51.765 --> 00:21:57.374
Bundler was basically like building on top of Ruby gems and none of that stuff was actually in Ruby gems.
00:21:57.374 --> 00:21:59.745
Like building on top of RubyGems and none of that stuff was actually in RubyGems.
00:21:59.745 --> 00:22:03.432
And so there's some work, both on the Rubidio side as well as other places, to say like, hey, how can we just make RubyGems better?
00:22:03.432 --> 00:22:04.930
Bundler is going off on this.
00:22:04.930 --> 00:22:06.310
It's found all these deficiencies.
00:22:06.310 --> 00:22:09.832
How can we basically fix those deficiencies and put those into RubyGems.
00:22:10.184 --> 00:22:12.710
And so there was a little bit of competition at the time.
00:22:12.710 --> 00:22:15.954
Like I said, this is like 2009, 10, maybe.
00:22:15.954 --> 00:22:21.521
And so a little competition about hey, could RubyGems just take all the functionality that Bundler has?
00:22:21.521 --> 00:22:23.951
And you can go back and look at the RubyGems releases.
00:22:23.951 --> 00:22:24.835
We started to do that.
00:22:24.835 --> 00:22:35.953
I wrote a dependency analyzer that was similar to Bundler's superior, in my opinion, to Bundler's at the time, mostly because it didn't run out of stack space.
00:22:35.953 --> 00:22:41.155
There's a whole long technical conversation here about the original algorithm that Bunder used.
00:22:41.155 --> 00:22:49.109
But we were like, okay, great, we're inside RubyGems, we've got more access, we can basically wire stuff in a little bit more to have it just work more naturally.
00:22:49.109 --> 00:22:51.459
And so that was kind of how it started.
00:22:51.459 --> 00:22:59.969
I was obviously inside RubyGems anyway, because I was putting RubyGems inside Rubidius as well, and so there was sort of this natural place.
00:22:59.969 --> 00:23:07.566
And so there's a few of us who were just like kind of tinkering, like let's work on RubyGems and add the client software, because it wasn't getting much work at that time.
00:23:08.347 --> 00:23:11.815
Well, that kind of brings our set of questions up to Ruby Central itself.
00:23:11.815 --> 00:23:14.709
You were so tightly involved with it for so long.
00:23:14.709 --> 00:23:16.272
How did that begin for you?
00:23:16.815 --> 00:23:17.938
RubyGems actually.
00:23:17.938 --> 00:23:21.755
So what happened was it was specifically with RubyGemsorg.
00:23:21.755 --> 00:23:28.816
So I'd been working on the client software on and off, and just me and a few other people had been doing that.
00:23:28.816 -->
00:23:44.138
So Nick Caranto had written GemCutter and then Chad had come or whomever had come to Nick and said, hey, we just want to make this official RubyGemsorg, because the way that we're running RubyGemsorg is insane.
00:23:44.138 --> 00:23:51.618
Which was this whole thing where you uploaded a gem file to RubyForge and it would scan them and they would add them to the index, and it was weird.
00:23:51.618 --> 00:24:01.355
And so Nick's was far superior and so it was like, OK, they had already taken that on and they were running RubyGems, GemCutter, as RubyGemsorg at the time.
00:24:01.355 --> 00:24:05.400
And there was still RubyForge up.
00:24:05.400 --> 00:24:06.425
It still existed.
00:24:06.425 --> 00:24:15.449
It was in a Rackspace Colo machine that was maybe one machine, I want to say and it was running RubyForge.
00:24:15.449 --> 00:24:23.551
It was running RubyGemsorg, the GemCutter software, and it was running rubyforge, it was running rubygenorg, the gem cutter software, and it was effectively a one-man band being run operationally.
00:24:24.753 --> 00:24:28.984
And so I offered to say like, hey, like do you need help with this?
00:24:28.984 --> 00:24:34.068
I'm worried that this is just a one-person thing, like we'd love some help.
00:24:34.068 --> 00:24:36.891
And so I started helping out with that.
00:24:36.891 --> 00:24:44.455
And then I ended up going to RubyConf, New Orleans 2011.
00:24:44.455 --> 00:24:51.980
And I was not yet really on the board or anything like that, but effectively I think I'm going to start helping out.
00:24:51.980 --> 00:24:55.043
And then I just saw a zillion places they need help.
00:24:55.043 --> 00:25:00.550
I just saw a zillion places they need help and so I started just oh, I'm doing this, I'm checking people in and just like kind of just doing that thing.
00:25:01.105 --> 00:25:06.054
And then Chad asked me a little while after that, like why don't you just be a Ruby Central Director?
00:25:06.054 --> 00:25:07.971
You're well known, you've got all these things.
00:25:07.971 --> 00:25:12.327
You come on, you can help out with rubygemsorg, and then we can figure out what that means from there.
00:25:12.327 --> 00:25:23.790
And I was like sure They'd been doing it for like 10 plus years at the time, and so I think they were naturally looking for how do we evolve this situation so that it's not just dependent upon them to spend their spare time on?
00:25:23.790 --> 00:25:26.794
And so I was like, yeah, sure, yeah, that's how I started.
00:25:26.794 --> 00:25:29.852
Those early trails are rubyjumpsorg as well.
00:25:29.852 --> 00:25:30.535
We're crazy.
00:25:30.535 --> 00:25:37.536
I got triggered at RailsConf people bringing up debugging inside IRC sessions and stuff like that.
00:25:37.536 --> 00:25:38.377
But we can get into that.
00:25:38.377 --> 00:25:41.054
But yeah, that was sort of the beginning of me at Ruby Central.
00:25:41.884 --> 00:25:47.057
The responsibilities that Ruby Central has
now versus then have changed quite a bit over the years.
00:25:47.057 --> 00:25:50.976
What's your take on how the organization's kind of evolved over time?
00:25:51.905 --> 00:25:53.291
It's what it needs to be.
00:25:53.291 --> 00:26:10.155
By that I mean that the organization existed originally to run conferences, but the charter for the organization which doesn't really matter, but I think it's just interesting is actually just the betterment of the ruby language community.
00:26:10.155 --> 00:26:12.848
That's effectively the charter for the non-profit.
00:26:12.848 --> 00:26:18.055
It's nothing to do with running conferences or anything like that, and so the conferences were just an obvious vehicle for that.
00:26:18.055 --> 00:26:29.353
Rubygems became another obvious vehicle for that, and I think that we have the benefit of hindsight to look at how that's been managed versus how other communities have ended up managing.
00:26:29.353 --> 00:26:45.034
It is that the organization taking on more, taking on RubyGems, taking on scholar programs, taking on all the stuff that has taken on has proved to be wildly successful and also what the Ruby community needed at the time.
00:26:45.034 --> 00:26:56.530
I am so glad that RubyGemsorg is actually run and paid for and administered in terms of policy by a nonprofit that is not looking to like oh, we need to make money off this thing.
00:26:56.530 --> 00:26:57.007
That's just like.
00:26:57.007 --> 00:26:59.732
No, it's just here because we want the Ruby community to have it.
00:26:59.732 --> 00:27:03.785
We want it to be the plumbing, the scaffolding that the Ruby community exists upon.
00:27:03.785 --> 00:27:08.653
There's a zillion reasons why that's better than a commercial entity working on it.
00:27:08.653 --> 00:27:10.791
So I think that's one aspect to it right.
00:27:10.791 --> 00:27:20.625
I think a lot of the other things were grown not out of strategic consultant mindset, but instead of just what do we need to do this next time?
00:27:20.787 --> 00:27:34.913
I think that when Marty and I were running it in those early days with Sarah and Abby and Heather, I think that one of the things that we would always look at is we can change two to three things each conference.
00:27:34.913 --> 00:27:43.487
That was about it because Marty and I were doing it part-time, sarah was doing it part-time, abby was a full-time employee, heather was a full-time employee, so we didn't have a lot.
00:27:43.487 --> 00:27:49.348
We can't just completely overhaul it, but we were also willing to change two or three things each time.
00:27:49.348 --> 00:27:51.635
That was how the Scholar Guide Program came out.
00:27:51.635 --> 00:27:53.407
So we're like hey look, let's offer some free tickets.
00:27:53.407 --> 00:27:56.275
What does it look like to be a person who's never been at this conference before?
00:27:56.275 --> 00:27:59.303
We should probably have people show them around, great, what does that look like?
00:27:59.303 --> 00:27:59.583
Right.
00:27:59.583 --> 00:28:04.355
So we were interested and willing to sort of like tack the ship, as it were.
00:28:04.355 --> 00:28:07.692
Right, we weren't like this is the conference, this is how it works.
00:28:07.692 --> 00:28:10.122
It was that every conference we'd have a debrief.
00:28:10.122 --> 00:28:11.866
We're like oh, let's go in this direction a little bit.
00:28:11.866 --> 00:28:12.848
Oh, let's go in this direction like.
00:28:12.888 --> 00:28:22.352
A great example here is like for a long we'd make jokes about oh man, there's another testing talk, this conference, yet another person has another.
00:28:22.352 --> 00:28:26.107
Five people have submitted talks about how to do testing and what we learned.
00:28:26.107 --> 00:28:29.008
There was one conference where we didn't have as many and then what we learned.
00:28:29.008 --> 00:28:35.567
People were like there's nothing for new people in the community here and we're like oh, that's why we've got to accept those testing talks.
00:28:35.567 --> 00:28:41.170
Right, we need to tap more in that direction to say like okay, great, it's not just a talk for the people who have come back every single time.
00:28:41.690 --> 00:28:45.231
Another great example here is this is small little things that build up right.
00:28:45.231 --> 00:28:52.276
We started asking in the opening plenary session raise your hand if this is your first Rialto Conf.
00:28:52.276 --> 00:28:53.457
People don't know this at the time.
00:28:53.457 --> 00:28:55.038
They probably don't know this at the time.
00:28:55.038 --> 00:29:10.176
They probably don't know this writ large, but I would say that now on the podcast, we used that information so much, right, so we would basically be like hey, look, remember when we were there last year and half the room raised their hand that they were brand new.
00:29:10.176 --> 00:29:13.131
That goes into the thinking about what the program should look like.
00:29:13.131 --> 00:29:17.111
That goes into thinking about what facilities should we have, how should we be managing it?
00:29:17.111 --> 00:29:22.531
As time look like, that goes into thinking about what facility should we have, how should we be managing it.
00:29:22.531 --> 00:29:24.114
As time went on, we're like you know what, like we've got a lot of people who are new parents.
00:29:24.114 --> 00:29:24.979
Let's talk about having a lactation room.
00:29:24.953 --> 00:29:33.509
All of those things are built off of reflection about what the community needed, which is actually a great thing about doing the conferences with a regular cadence and with mostly the same team.
00:29:33.509 --> 00:29:44.213
We could really forge it carefully over time with what the community needed, and I think that, to get back to your question, it's reflecting what the community needs right now.
00:29:44.213 --> 00:29:45.630
Right, the community doesn't need another.
00:29:45.630 --> 00:29:49.871
The sunsetting of
RailsConf is sad, but the community doesn't need a second Rails conference.
00:29:49.871 --> 00:29:53.050
Right, rails world is going to go off and do their thing, and they're happy to do that.
00:29:53.050 --> 00:29:56.509
I think that Ruby Central is like, okay, great, we don't need to do that anymore.
00:29:56.509 --> 00:29:58.492
What does the Ruby community need from us?
00:29:58.492 --> 00:30:00.356
Great, let's just do that thing.
00:30:00.356 --> 00:30:06.906
In many ways, continuing to do the same thing, despite the community not necessarily needing it, is the problem.
00:30:06.906 --> 00:30:09.535
The shifting is what we should be doing anyway.
00:30:10.705 --> 00:30:18.453
Are there any kind of common misconceptions about how Ruby Central operates that you've ever run into, that you feel like, oh, how do I clarify this?
00:30:18.453 --> 00:30:19.415
Over and over and over again?
00:30:20.365 --> 00:30:22.795
I said it at RailsCon, I'll say it again for the podcast.
00:30:22.795 --> 00:30:26.688
There was a time where we had a really well-oiled machine.
00:30:26.688 --> 00:30:32.808
People would show up and like the t-shirts would work, the badges work, the sessions are on time, the food is there, like every.
00:30:32.808 --> 00:30:38.019
It's running like a well-oiled machine and people will be like, oh, you've got like a multimillion dollar company running this, right.
00:30:38.019 --> 00:30:41.615
No, we have like two full-time employees, period, right.
00:30:41.704 --> 00:30:51.172
So it was difficult for people for us to explain that when we would be like, ah well, we're running low on money, they'd be like well, why Aren't you a huge company managing this?
00:30:51.172 --> 00:30:55.894
Or Abby would get these people coming and saying like, well, can't you provide X, y and Z?
00:30:55.894 --> 00:30:57.977
It's like we literally have two full-time employees.
00:30:57.977 --> 00:30:59.698
I don't know what you want me to tell you.
00:30:59.698 --> 00:31:02.240
Our success in doing those things.
00:31:02.240 --> 00:31:09.897
We appeared to be punching above our weight, but in fact we were just really good at what we were doing Really scrappy, really scrappy.
00:31:09.897 --> 00:31:18.178
And so it was difficult to actually explain to people oh yeah, we're doing this because people would ask for something and we'd be like we can't do that.
00:31:18.178 --> 00:31:21.952
It was difficult for us to get that point across.
00:31:21.952 --> 00:31:27.111
We would say it all the time once we realized that it was happening, but it was really difficult to get across.
00:31:27.151 --> 00:31:53.109
That's easily the biggest one, so wow, okay, I don't think I ever thought about that before yeah, it's interesting because, sarah, you and me were very busy I mean, it was part-time job even though we had full-time jobs, right, and had active families and I certainly recall many times where, like, this is all I can do and it was just so much that we had
to do and like we couldn't take on any more.
00:31:53.109 --> 00:31:54.434
It was just too much.
00:31:55.365 --> 00:31:57.034
I think that the other one that was interesting.
00:31:57.034 --> 00:31:58.865
You learn a lot about running conferences.
00:31:58.865 --> 00:32:00.932
Running a conference, no surprise, right?
00:32:00.932 --> 00:32:14.171
One of the ones I was explaining to Ali, who works at Ruby Central now at RailsConf recently, was that there was a time where we were getting a new designer for every single conference.
00:32:14.171 --> 00:32:16.269
Let's mix it up, let's be interesting.
00:32:16.269 --> 00:32:17.652
Let's go get a new designer every single time.
00:32:17.652 --> 00:32:19.856
Let's mix it up, let's be interesting.
00:32:19.856 --> 00:32:22.663
Let's go get a new designer every single.
00:32:22.683 --> 00:32:25.585
And it sucked, like it was so hard to get good results because, again, we're not on top.
00:32:25.585 --> 00:32:26.829
We can't stay on top of this.
00:32:26.829 --> 00:32:35.386
We're like trying to solicit from people and we get people who are good, and then we'd be like we'd get a bunch of people who were just no, none of this is good Now, who are just no, none of this is good.
00:32:35.386 --> 00:32:38.750
Now we have to go off and do the process again, but now, way at the end.
00:32:38.750 --> 00:32:41.453
So, like what we started doing I don't know when was this Mark?
00:32:41.453 --> 00:32:42.596
Like maybe 2014?
00:32:42.596 --> 00:32:45.298
We started standardizing on vendors.
00:32:45.298 --> 00:32:54.916
So we had Fred Yates, who was our long-term designer, who was like we're going to pay you for a year and we're going to come back to you twice and we're going to need the same assets every single time.
00:32:54.916 --> 00:33:05.537
I can't tell you the amount of time that it reduces when you don't have to explain the assets that you need to a designer, because it is a massive undertaking to explain to somebody.
00:33:05.537 --> 00:33:11.325
Okay, I need a schedule page, I need badges, I need t-shirts, I need even different orders and at different times.
00:33:11.325 --> 00:33:13.553
You don't need to do them all up front Like it was a lot.
00:33:18.865 --> 00:33:22.325
I think that was one thing that again made it seem like we were this well-oiled machine because we'd been through the fire and we knew what worked and didn't work.
00:33:22.325 --> 00:33:30.675
Another one is like it was slightly more expensive but we ended up with the same AV vendor that would follow us around because we would get consistent AV.
00:33:30.675 --> 00:33:39.782
Then We'd always have the right projectors, we'd always have the right audio equipment, because we went through a few years where we were using different ones and be like, oh, this is terrible, they didn't have this and they have.
00:33:39.782 --> 00:33:45.907
That turns out if you pay an extra five percent to have this company follow you around, you get quality
results every single time.
00:33:45.907 --> 00:33:46.790
Stuff like that.
00:33:46.790 --> 00:33:48.397
Nobody sees those things.
00:33:48.397 --> 00:33:49.984
That's all back of house activities.
00:33:50.707 --> 00:33:54.233
Again, as a person who loves to call back to the beginning of this episode.
00:33:54.233 --> 00:34:05.528
As a person who loves to know how do things work, before this I would go at a conference and I'd look around and I'd be like I don't think anyone knows that the AV isn't very good here, like they're just not on top of it.
00:34:05.528 --> 00:34:11.114
And I don't mean at our conferences, I mean conferences that I would go to, right, I always am looking for those like how is this running?
00:34:11.114 --> 00:34:12.389
Is that person in charge?
00:34:19.844 --> 00:34:21.311
what's going on and so I feel like that's maybe an unknown here.
00:34:21.311 --> 00:34:22.076
Yeah, that actually kind of helps.
00:34:22.076 --> 00:34:22.818
A couple of things click in my head.
00:34:22.818 --> 00:34:29.615
At RailsConf this year I was like, oh, they're using flagrant again to do all of the web page and the design stuff because that's been working.
00:34:29.615 --> 00:34:34.914
Why reset the relationship with somebody new when they already know what needs to be done?
00:34:34.914 --> 00:34:36.668
You're just like new design go.
00:34:36.668 --> 00:34:38.255
Yeah, absolutely right.
00:34:38.865 --> 00:34:40.933
You don't have to innovate every single time.
00:34:40.933 --> 00:34:42.990
What is this community needed?
00:34:42.990 --> 00:34:51.790
They needed a nice t-shirt that was a decent weight, with a logo that they wouldn't be ashamed of wearing to the gym in two years Great let's do that.
00:34:54.067 --> 00:34:56.864
So I think this is the last kind of Ruby Central focused question.
00:34:56.864 --> 00:35:01.695
But the big kind of tide change for Ruby Central was the pandemic.
00:35:01.695 --> 00:35:08.778
Yeah, Can you talk a little bit about the changes that came from that, what that necessitated for Ruby Central to keep going?
00:35:09.666 --> 00:35:10.891
We were real lean there.
00:35:10.891 --> 00:35:17.013
So the pandemic starts before RailsConf that year, and so it was obvious that RailsConf's not happening.
00:35:17.013 --> 00:35:18.029
It's going to be in May.
00:35:18.029 --> 00:35:22.188
Pandemic starts in the US in full in March, april.
00:35:22.188 --> 00:35:25.626
We made a call pretty early that the conference was off.
00:35:25.626 --> 00:35:43.544
I'd have to go back and look at my email, marty, you'd know better than I would, but it was probably like the end of March, beginning of April maybe, and so okay, well, we already had sponsorship dollars locked in because we were well into the conference cycle and so we kind of just scrambled to sort of pivot the program online.
00:35:43.544 --> 00:35:52.291
So then we're like okay, great, no one knows how long this is going to last, what it's going to look like, and
the world is still upside down.
00:35:52.291 --> 00:36:00.291
And so we begin planning for a remote ruby conf pretty soon after rails conf, which is our normal cadence anyway, and we made the decision OK, it's going to be remote.
00:36:00.291 --> 00:36:03.875
So Abby went out and found, like what's the best way to run a remote conference?
00:36:03.875 --> 00:36:05.912
How do we do the audio, the video, what does it look like?
00:36:05.912 --> 00:36:12.750
And we ran training sessions with everybody and we ran RubyConf 2020 remote as well, and it went great.
00:36:12.750 --> 00:36:19.854
Weirdly, we decided to renovate our house late in 2020 as well, because contractors are actually really easy to find in late 2020.
00:36:19.854 --> 00:36:24.837
Abby and I were helping to run the conference actually from a rental house at the time.
00:36:24.837 --> 00:36:31.622
It's a funny time in my mind and so I think the big difference for me is RailsConf 2021.
00:36:31.622 --> 00:36:37.746
So you know, we were basically a year plus change into the pandemic.
00:36:37.766 --> 00:36:43.596
By the time it was hitting like, let's say, november 2020, maybe December.
00:36:43.596 --> 00:36:49.934
We were like this is not going to happen, we're not going to be able to get back in person for a number of different reasons.
00:36:49.934 --> 00:36:54.336
But the big reason was the community was like we are not going back to conferences.
00:36:54.336 --> 00:37:01.193
The Ruby community was telling us loud and clear we're not interested in that, we're not interested in subjecting ourselves to getting COVID.
00:37:01.193 --> 00:37:03.111
We're still pre-vaccine at this point.
00:37:03.111 --> 00:37:06.554
Right, and so I've sort of blocked out.
00:37:07.164 --> 00:37:14.074
Marty, you could fill us in here in details about the negotiations we started to do with the hotels for RailsConf and for RubyConf.
00:37:14.074 --> 00:37:22.863
It was a long, protracted situation because we were going to be in Texas that year and they were not necessarily all that interested in us not being there.
00:37:22.863 --> 00:37:24.411
Because we're like, oh, there's people who are back.
00:37:24.411 --> 00:37:29.832
We're like, yeah, I get that maybe there are people who are back, but we are not back and so we had to deal with that.
00:37:29.832 --> 00:37:31.336
That was sort of thing number one.
00:37:31.744 --> 00:37:34.929
Thing number two was once we decided that we were going to have it online.
00:37:34.929 --> 00:37:36.692
What was it going to look like?
00:37:36.692 --> 00:37:49.528
And so I ended up taking on the bulk of the role in basically figuring out like, hey, we're going to have an online RailsConf, what does that look like?
00:37:49.528 --> 00:37:58.572
So we start the program work and I end up not really managing my time very well on this and then building out a RailsConf special site to run the whole thing on.
00:37:58.572 --> 00:38:00.296
That had all these interesting cool
features.
00:38:00.296 --> 00:38:08.659
Again, kind of burned myself out on it, if I'm honest, trying to work on all these cool things because I really wanted to have something that people were like oh, this was worth my time.
00:38:08.659 --> 00:38:10.330
So we go through that.
00:38:10.330 --> 00:38:12.752
I get all the cool features working.
00:38:12.752 --> 00:38:15.071
Shout out to the watch party feature.
00:38:15.071 --> 00:38:16.229
Still love it to this day.
00:38:16.229 --> 00:38:18.812
A lot of cool stuff that was going on there.
00:38:19.564 --> 00:38:23.535
It was really stressful because, again, it was sort of like our first time running a conference.
00:38:23.535 --> 00:38:27.535
For instance, the logins didn't work the first day because we had messed up.
00:38:27.535 --> 00:38:31.414
The emails weren't getting sent out for people to log in and it was tough.
00:38:31.414 --> 00:38:37.446
It was tough, but we'd also made the decision also to have it be online time shifted.
00:38:37.446 --> 00:38:41.616
By that, I mean like we weren't really doing much in terms of live sessions.
00:38:41.656 --> 00:38:45.694
I think maybe we had one live session or a couple, but it was mostly recorded talks.
00:38:45.694 --> 00:38:46.705
So it wasn't the end of the world.
00:38:46.705 --> 00:38:50.174
People just didn't have access to the recorded talks when they thought they were.
00:38:50.174 --> 00:38:56.154
So after that me personally I was like look, I've been doing this for 10 years.
00:38:56.154 --> 00:39:08.676
At that point I don't know how much more of this I have mostly because it felt like we were at the place and time where I don't know what the conferences are going to look like going forward.
00:39:08.676 --> 00:39:12.039
I don't know where we're going to end up, how it's going to feel, all those sorts of things.
00:39:12.039 --> 00:39:16.834
So I started being like maybe my time not coincidentally, again, I've been 10 years.
00:39:16.834 --> 00:39:18.668
I've been 10 years with the previous people when I came in.
00:39:18.668 --> 00:39:21.175
You know, maybe this is a good time to transition out.
00:39:26.204 --> 00:39:31.036
So years it's been 10 years with the previous people when I came in and you know, maybe this is a good time to transition out, so I can't remember what we did for ruby conf 2021.
00:39:31.036 --> 00:39:31.757
Do you remember that was denver.
00:39:31.757 --> 00:39:32.459
That was our first in person.
00:39:32.459 --> 00:39:33.421
Was denver 2021?
00:39:33.421 --> 00:39:34.364
Okay, 22 would have been portland again.
00:39:34.384 --> 00:39:53.752
Yeah, yeah, in 22 in portland is when I stepped down and I think that like the big thing for me coming back to that event and seeing it and being in the Portland Convention Center all over again, which is sort of hey, it started for me right Back in 2006 is really when I had gotten the robinious job and all that kind of stuff it felt very full circle for me.
00:39:53.752
--> 00:40:01.695
But it was also good to see that there was enough people there that there was starting to be the appetite for in-person conferences again.
00:40:01.695 --> 00:40:08.384
In my opinion, it would still be a number of years before we really knew where was the appetite for things right.
00:40:08.384 --> 00:40:18.268
2022, in my mind, is still really early as to where people were with their abilities and desire to go to conferences.
00:40:18.268 --> 00:40:20.793
And so it was tough.
00:40:21.074 --> 00:40:22.116
It was tough on the pocketbook.
00:40:22.116 --> 00:40:41.703
We had some extremely, extremely hard lean conversations around that time about if the hotel doesn't take this deal to push us down the road, then we will just be bankrupt, we will just be out, we will be donezo, because they were asking for like, oh well, you owe us $250,000.
00:40:41.703 --> 00:40:45.475
And we're like we've brought in $50,000 over the course of the last year.
00:40:45.475 --> 00:40:47.943
It was pretty scary.
00:40:47.943 --> 00:41:03.547
It's pretty slim pickings time, but we made it, and I think that the current construction of Ruby Central is both a reflection of the time coming through COVID about what the organization needs to survive A, but also B.
00:41:03.547 --> 00:41:04.411
What does the community need?
00:41:04.411 --> 00:41:17.670
Shout out to you, marty, for your work on all the grants that you've been working on, because if we'd had those grants while we were doing all that stuff during 2021, 2022, man, we had a completely different conversation about what we're doing right.
00:41:17.670 --> 00:41:18.907
It would have been vastly different, right.
00:41:18.907 --> 00:41:23.077
So diversifying the revenue streams is also good.
00:41:23.744 --> 00:41:34.991
Yeah, there's a funny point there in that back in 2019, before the pandemic, when we expanded the board, we had actually talked about that let's launch a membership program and when can we execute?
00:41:34.991 --> 00:41:36.509
And we didn't have the staff.
00:41:36.509 --> 00:41:46.452
And I will say, if I could go back in time and change some things, wouldn't it have been amazing if we had thought about some of that stuff, 2015, 2016, when things were rolling?
00:41:46.452 --> 00:41:52.721
It would have been like, oh, but we didn't have the need, we didn't need to do that and you know we were so volunteer at that point.
00:41:58.744 --> 00:42:00.971
I'm sort of a meta point here about nonprofits and volunteer versus professional boards.
00:42:00.971 --> 00:42:09.274
So the difference there is that, like a nonprofit with a volunteer board, is people like Marty, like yourself, like the other people, the directors at Ruby Central, who are not paid.
00:42:09.274 --> 00:42:12.153
They are occasionally if we happen to make enough money.
00:42:12.153 --> 00:42:18.306
There was times during the good times where we'd have money left over and so we'd be like, okay, great, we're going to pay
the directors a stipend this year and then the next year.
00:42:18.306 --> 00:42:20.148
Well, we're going to pay the directors a stipend this year and then the next year.
00:42:20.148 --> 00:42:21.349
Oh, we don't have any money left over.
00:42:21.349 --> 00:42:22.591
No stipend this year, we didn't know.
00:42:22.591 --> 00:42:24.994
Some years it worked out, some days it wouldn't right.
00:42:24.994 --> 00:42:26.355
That's a volunteer board, right?
00:42:26.355 --> 00:42:28.378
Professional board is that it's your job.
00:42:28.378 --> 00:42:30.520
It's your job to basically be on this board.
00:42:30.520 --> 00:42:41.134
When you have more professional organization, you have.
00:42:41.134 --> 00:42:45.960
We had staff, but not staff in terms of like product staff.
00:42:45.960 --> 00:42:48.709
We had ops staff, right, that would be the way to think of it.
00:42:49.846 --> 00:42:54.010
I'm going to call myself a liar here, because I have one more question Very along these lines.
00:42:54.010 --> 00:43:08.689
Because Ruby Central as an organization is so limited on bandwidth in terms of what it can do, for all these types of reasons that you just talked about, how would you advise someone who wants to get involved and participate and help in any kind of way?
00:43:09.551 --> 00:43:16.199
If you look at the Ruby Central board members today, all of them were a volunteer in some capacity in the past.
00:43:16.199 --> 00:43:20.911
Either they were a scholar, they were a guide, they volunteered at a conference.
00:43:20.911 --> 00:43:23.737
It's a community-driven organization, right?
00:43:23.737 --> 00:43:26.993
So if you're interested in how can I help out, just help out.
00:43:26.993 --> 00:43:28.196
Don't overthink it.
00:43:28.196 --> 00:43:30.672
Don't be like, oh, I got to find the best way forward.
00:43:30.672 --> 00:43:31.334
Don't do that.
00:43:31.334 --> 00:43:34.734
Just say like, hey, you need help running rubygemsorg, do that.
00:43:34.734 --> 00:43:38.090
You need help just volunteering at the conference, just do that.
00:43:38.090 --> 00:43:40.173
Oh, I'd love to help you make some stickers.
00:43:40.193 --> 00:43:43.098
This year I made a sticker design Great, do that, right.
00:43:43.098 --> 00:43:49.930
Don't overthink it, because your involvement is more important than what you do with that involvement, right?
00:43:49.930 --> 00:43:53.890
So being around being present, it's going to change, right?
00:43:53.890 --> 00:43:56.172
Like you don't know what you'll do once you get in the door.
00:43:56.172 --> 00:43:58.748
But what I can say is that Ruby Central leaves a million doors open.
00:43:58.748 --> 00:44:01.353
Walk through one of them, find out what's inside.
00:44:01.353 --> 00:44:04.419
Maybe you'll get in there and you'll be like I came in to design stickers.
00:44:04.419 --> 00:44:09.917
But oh my gosh, you guys have AV vendor negotiation that you would love to help with.
00:44:09.917 --> 00:44:11.488
That's my hobby.
00:44:11.488 --> 00:44:12.331
Let's do that.
00:44:12.331 --> 00:44:18.329
You don't know, when I started with Ruby Central, it was just because Redis wouldn't restart properly.
00:44:18.329 --> 00:44:19.051
That was it.
00:44:19.051 --> 00:44:20.353
That was where we were.
00:44:20.353 --> 00:44:24.069
I had no intention of being like oh, I'm going to help run these conferences.
00:44:24.069 --> 00:44:25.855
That was just an accident.
00:44:26.804 --> 00:44:33.673
I have one question, evan, I want to ask you before we get to our Ruby Roundup, and that is what are you up to?
00:44:33.833 --> 00:44:34.074
now.
00:44:34.074 --> 00:44:40.769
Right now I'm a CEO because somebody has to have that title of a company my own company, mirin.
00:44:40.769 --> 00:44:43.116
We're making dev tools right now.
00:44:43.116 --> 00:44:48.790
So right now we're working on deployment tools for you to use to deploy your software wherever you want to deploy it.
00:44:48.790 --> 00:44:50.270
So that's what we're working on now.
00:44:50.270 --> 00:44:53.093
It's a very small outfit, there's just four of us.
00:44:53.093 --> 00:44:55.850
It's a lot of getting over imposter syndrome.
00:44:55.850 --> 00:44:57.295
Oh, can I do this?
00:44:57.295 --> 00:44:59.011
Am I actually cut out for it?
00:44:59.011 --> 00:45:04.519
And people might remember I had my own startup about 10 years or so ago and I was not cut out for it then.
00:45:04.519 --> 00:45:08.269
So I'm hoping my second time around I have a better idea of what I'm doing.
00:45:08.269 --> 00:45:09.914
Nice good luck, yeah.
00:45:11.465 --> 00:45:12.269
All right, here we go.
00:45:12.269 --> 00:45:14.752
What's your go-to comfort food?
00:45:15.784 --> 00:45:16.869
Frozen fish sticks.
00:45:16.869 --> 00:45:21.716
I put them in the air fryer and I eat them with olive oil based mayonnaise.
00:45:21.716 --> 00:45:27.114
So we have this special diamond kosher flaky sea salt.
00:45:27.114 --> 00:45:37.820
It's the only salt that I keep around the house now and we keep it in salt pigs, which are basically like a thing that you reach into and you grab salt with your fingers and you sprinkle it on things.
00:45:37.820 --> 00:45:41.490
Basically, you don't have a salt shaker or anything like that, because the salt is like really big.
00:45:41.490 --> 00:45:44.577
So fish sticks honestly, I eat that probably once a week.
00:45:46.745 --> 00:45:48.067
Wow, that actually sounds really good.
00:45:48.067 --> 00:45:49.049
Are you reading anything?
00:45:49.089 --> 00:45:49.449
for fun.
00:45:49.449 --> 00:45:52.976
Right now I am an audiobook reader.
00:45:52.976 --> 00:45:54.338
Audiobooks count.
00:45:54.338 --> 00:45:58.938
That's good, because otherwise I can't answer this question.
00:45:58.938 --> 00:46:02.271
I'm an extraordinarily slow reader, I don't know why, just is the case.
00:46:02.271 --> 00:46:10.849
And so about five years ago, abby got me a subscription to Audible and so I always have an infinite number of Audible credits because I never use them all.
00:46:10.849 --> 00:46:14.209
So that book I'm reading right now is called Meditation for Mortals.
00:46:14.209 --> 00:46:15.752
It's great, I just started it.
00:46:15.752 --> 00:46:18.789
It's by the same guy who wrote 4,000 Weeks.
00:46:18.789 --> 00:46:21.180
4,000 Weeks is the average human lifespan.
00:46:21.180 --> 00:46:24.069
In case you're curious about why it's called that, it's great.
00:46:24.069 --> 00:46:26.655
He used to be a GTD guy.
00:46:26.655 --> 00:46:36.293
He's like I got to have the systems for how I'm going to organize my life and he completely flipped it upside down and he's like don't know how to organize your life, man, you're not getting anything out of it, just go live your life.
00:46:36.293 --> 00:46:38.878
And so Meditation for Immortals is sort of that.
00:46:39.640 --> 00:46:42.809
Are there any recent movies or TV shows that have really hit home for you?
00:46:43.504 --> 00:46:45.973
By the way, just so listeners know I'm totally fine.
00:46:45.973 --> 00:46:47.370
Everything is great in my life.
00:46:47.370 --> 00:46:49.011
I don't want you to take this the wrong way.
00:46:49.165 --> 00:46:50.204
I'm like reading a meditation book.
00:46:50.224 --> 00:46:51.504
This is going in an interesting direction now.
00:46:51.504 --> 00:47:05.669
Yeah, because I started watching the Pit, which is a show on HBO about like one day in an emergency room, and as I was watching it recently and I realized why I like those sorts of shows.
00:47:05.669 --> 00:47:14.513
I always loved House back in the day and this specifically is because you get to see like a level of base human interaction.
00:47:14.513 --> 00:47:19.471
It's like you watch these people who are like this person is dying of a thing and we're going to fix them.
00:47:19.471 --> 00:47:23.298
It really does not matter whether or not they filed their taxes yesterday.
00:47:23.298 --> 00:47:25.570
The real world could not matter less.
00:47:25.570 --> 00:47:29.472
In the emergency room, you really have one job and one job alone.
00:47:29.472 --> 00:47:30.435
Everybody is the same.
00:47:30.435 --> 00:47:32.091
Everyone has a human body.
00:47:32.091 --> 00:47:36.372
Other than that, nothing else matters, so it's their ultimate escape.
00:47:37.284 --> 00:47:38.971
What's got you excited in tech right now?
00:47:40.044 --> 00:47:47.155
I have been doing a lot of AI coding with Claude and we're at such an interesting time right now with these tools.
00:47:47.155 --> 00:47:59.071
I don't think that the craft of computer programming is going away, but I think the velocity and the size of a sprint iteration is going to change a lot.
00:47:59.071 --> 00:48:13.045
I've been doing a couple of experiments for the last six weeks now of basically just having it code a thing entirely on its own and trying to see like how did it go wrong and what does it look like and how could I guide it better, and all those sorts of things.
00:48:13.045 --> 00:48:15.130
And the tools are good.
00:48:15.130 --> 00:48:16.875
Will the tools get better?
00:48:16.875 --> 00:48:17.837
I actually don't know.
00:48:17.837 --> 00:48:24.453
Maybe, but the tools right now are good enough to be really compelling for a large class of things.
00:48:24.453 --> 00:48:30.211
This next 12 months I think it's gonna be really interesting to see sort of where stuff starts to shake itself out.
00:48:30.251 --> 00:48:32.877
So All right, I think this is the last one.
00:48:32.877 --> 00:48:35.632
What's a favorite gem of yours?
00:48:35.632 --> 00:48:37.640
Preferably one that isn't super well known.
00:48:38.202 --> 00:48:39.428
I'm gonna ignore the second part of this prompt.
00:48:39.428 --> 00:48:39.770
How dare you, sir?
00:48:39.770 --> 00:48:40.495
And what I'm going to do instead?
00:48:40.495 --> 00:48:42.004
I'm going to ignore the second part of this prompt how dare you, sir?
00:48:42.004 --> 00:48:52.892
And what I'm going to do instead is I'm going to just parrot back something that a very nice person said to me at RailsConf, which was hey, thanks for making Benchmark IPS.
00:48:52.892 --> 00:48:56.211
I use it all the time and I was like, oh, you're very welcome.
00:48:56.744 --> 00:49:10.915
Benchmark IPS for those out there is one of my sort of more obscure gems, but it is a gem that, for whatever reason, is the only gem in this domain, and the domain is reasonable benchmarking.
00:49:10.915 --> 00:49:25.151
So I wrote it way back in the day, because the benchmark stuff that's built into Standard Library requires you to do one thing that is awful you have to make a total guess about how many iterations you should do your code for.
00:49:25.151 --> 00:49:29.794
So if you're trying to benchmark a versus b, you have to like is it 10 000 to 5 000, 1 000, whatever?
00:49:29.794 --> 00:49:32.926
So I wrote a thing called ips stands for iterations for second.
00:49:32.926 --> 00:49:42.964
You put some code in there and what it tells you is a number where the bigger number is the better number, which is also easier for our human brains to understand.
00:49:43.084 --> 00:49:45.293
So you go and you're like, oh, this is 5,000.
00:49:45.293 --> 00:49:46.409
That is 3,000.
00:49:46.409 --> 00:49:48.872
The 5,000, obviously better, great.
00:49:48.872 --> 00:49:52.655
And what that means is I could go through and run this thing 5,000 times per second.
00:49:52.655 --> 00:50:02.705
So I actually see it pop up kind of once a conference conference.
00:50:02.705 --> 00:50:07.465
If I happen to see conference slides, I will largely see someone who's talking about performance work have a little snippet of a benchmark APS slide and honestly, it warms my heart.
00:50:07.465 --> 00:50:12.857
I could not be happier that it's had this enduring performance pun intended.
00:50:14.205 --> 00:50:17.355
Nice, where can people find you on the internet?
00:50:17.924 --> 00:50:19.426
Where can people not find me on the internet?
00:50:19.426 --> 00:50:20.368
Is usually the question.
00:50:20.368 --> 00:50:24.093
You on the internet, where can people not find me on the internet?
00:50:24.093 --> 00:50:24.614
Is usually the question.
00:50:24.614 --> 00:50:25.775
I am on bluesky at mphxdev.
00:50:25.775 --> 00:50:35.886
I still have an X account but if you message me on there I may or may not see it.
00:50:35.886 --> 00:50:37.412
Email on GitHub I wish GitHub had better status posting.
00:50:37.412 --> 00:50:40.724
I would definitely treat GitHub like a social network more if it had more social networking features.
00:50:40.964 --> 00:50:43.267
If I'm honest, I'm not sure I want that.
00:50:43.287 --> 00:50:44.748
No, I'm not sure.
00:50:44.748 --> 00:50:46.290
Just to be clear here.
00:50:46.290 --> 00:50:47.891
I'm not sure I want it either.
00:50:47.891 --> 00:50:51.415
I'm just saying that if it was there I would probably be using it.
00:50:51.415 --> 00:50:53.738
I don't know that I want it to be there.
00:50:53.738 --> 00:50:56.460
You don't have to have both for that to be true, right?
00:50:58.244 --> 00:51:00.248
Okay, that's fair, evan.
00:51:00.248 --> 00:51:02.673
Thank you so much for joining us today.
00:51:02.673 --> 00:51:04.377
This is a ton of fun, my pleasure.
00:51:04.397 --> 00:51:08.895
I'm glad to be here, Thank you so much for tuning into the Ruby Gems podcast.
00:51:08.895 --> 00:51:10.731
We hope you enjoyed this episode.
00:51:10.731 --> 00:51:16.797
You can find show notes and links to everything we discussed at rubygemspodcastcom.
00:51:17.565 --> 00:51:22.236
If you have a topic you'd like us to cover or have feedback, we'd love to hear from you.
00:51:22.236 --> 00:51:26.315
Please email podcast at rubycentralorg.
00:51:26.315 --> 00:51:31.777
If you enjoyed this episode, please subscribe and consider leaving a five-star review.
00:51:31.777 --> 00:51:34.332
It really helps others find the podcast.
00:51:34.332 --> 00:51:37.994
Until next time, thanks for being such a gem.