00:00:00
Ready for takeoff.
00:00:17
All right, hello everybody. Thank you so much for coming to RubyConf. Thank you for being here to listen to Ruby Archaeology: Forgotten Web Frameworks.
00:00:23
I'm your host today, Nick Schwaderer. I just thought I would warm you up a bit because you might be jet-lagged like me.
00:00:29
I traveled six time zones away, and everything's a bit messed up.
00:00:35
Sometimes, people stretch or do exercises to keep awake through the morning before lunch. So, I have a little activity for you.
00:00:42
I've noticed that sounds leak from room to room, so if something loud happens in the other rooms, they can hear it.
00:00:47
I thought it might be fun to make all the other speakers feel a little intimidated because of how much fun we're having.
00:00:53
So, I'm going to ask you to laugh as loudly as you can. I know you have your masks on, but we'll be safe about it.
00:01:00
On the count of three, I want you to laugh all together, okay? One, two, three!
00:01:16
So, what I want to talk about today is Ruby Archaeology, with a specific focus on web frameworks.
00:01:22
These are web frameworks written in Ruby that have been genuinely forgotten.
00:01:28
I work as a production engineer at Shopify on the Ruby and Rails infrastructure team, and I'm really grateful to be able to do this.
00:01:35
This isn't part of my Shopify work; it’s more about our productive chaos time, or our passion projects.
00:01:41
I have been interested in Ruby history for about four or five years, and I've been running the Past Rubies newsletter at PastRubies.live.
00:01:47
It's not a weekly thing; rather, I recommend doing seasons like a TV show.
00:01:54
If you want to produce content, maybe do six weeks a year, and then you can live your life.
00:02:00
I became obsessed with what happened in Ruby 15 years ago and worked on that for a period of time.
00:02:06
I encourage all of you to create great content, as it helps keep the community fresh.
00:02:13
I'm also interested in reviving old Ruby gems and patterns that should still be in use today.
00:02:19
If you've started Ruby in recent years, we have excellent tools for linting and established conventions.
00:02:24
Ruby is a sharp knife, and there's a lot we can do with it.
00:02:30
Thank you to Shopify for sponsoring my attendance here and allowing me to dive into the Ruby archives.
00:02:36
Thank you to the community for being amazing.
00:02:42
What Matt said this morning about Ruby's greatest wealth being its community resonates with me completely.
00:02:47
The only other corporate thing I will mention is that at the Shopify booth, there will be a Ruby coding challenge every day.
00:02:55
I may have had a hand in it and there may be a leaderboard involved.
00:03:02
So, if you want to stop by, you can use the QR code and check it out.
00:03:07
If you hate the challenge, just know that I had nothing to do with it.
00:03:12
But if you like the challenge and think it's fun, then it absolutely was me.
00:03:20
What am I actually here to talk about, though? None of this!
00:03:26
In the 2000s, everyone was creating Ruby web frameworks.
00:03:33
I have given a few talks on specific gems from the past, and I've written newsletters about them.
00:03:39
I've watched many RubyConf talks from 2006, 2007, and 2008, observing the community.
00:03:46
The inspiration for this talk comes from the fact that there are many Ruby web frameworks that I believe are forgotten.
00:03:52
I ran this list by Aaron Patterson, who remembered some of them.
00:03:57
This is quite interesting because back then, you couldn't easily get paid jobs writing Ruby.
00:04:04
However, people were really excited about it, especially shortly after the Pickaxe book was published.
00:04:11
People debated design patterns and configurations, modularization conventions, and what the Ruby way of building the web was.
00:04:19
Today, I aim to have a higher-level discussion about these frameworks.
00:04:26
I want to remind you that there was a time everyone experimented seriously with these frameworks.
00:04:32
We should carry that spirit of experimentation into the future.
00:04:42
I'll discuss three frameworks and one standard library gem that I think have been forgotten.
00:04:48
The first one is CGI. You might be familiar with CGI, or if you're not, this is an all-access talk.
00:04:54
The Common Gateway Interface is a set of standards that define how information is exchanged between a web server and a custom script.
00:05:01
If you're unfamiliar with it, a simple way to think about it is in relation to Rack.
00:05:07
CGI is a lower-level alternative that people were using before Rails became ubiquitous.
00:05:13
It was a standard you could install on your Unix system that defined how your scripts could talk to HTTP requests.
00:05:20
In the Ruby standard library, you have the CGI gem that you can use even today.
00:05:27
The TL;DR is that a lot of Ruby idioms we know come from Perl magic.
00:05:34
Let’s have a raw look at this from the documentation.
00:05:40
As simple as it gets, a couple of puts commands can create a Ruby-based website.
00:05:46
Of course, like with anything, there's extra syntactic sugar you can add.
00:05:53
For example, you can use cgi.header to start writing more interesting HTML.
00:05:59
People may remember Markaby, which is similar to today's Flex, where you write Ruby-style methods with blocks passed to them.
00:06:06
This method looks quite neat, and it's interesting to know that CGI was widely referenced.
00:06:12
This is an excerpt from Kirk Haynes, an Iowa maintainer.
00:06:19
When he mentioned CGI.rb, it highlighted that it was considered a common way to use Ruby on the web.
00:06:26
You could legitimately implement this today, just need to configure it along with a server like Apache.
00:06:33
Your only limits are the raw Ruby you write because this approach is quite bare-bones.
00:06:40
It would be fun for a sandbox project but likely not a viable solution unless for quick lightweight requests.
00:06:46
Let’s move on to our first full-fledged framework: Nitro. Raise your hand if you've heard of Nitro.
00:06:52
Great! Let me tell you what Nitro is not—it's not rocket science.
00:07:01
Here's an image from the Nitro days, showcasing its marketing. It aimed to provide everything you need to create Web 2.0 applications easily and joyfully.
00:07:07
Nitro was first released in October 2004 by George Moscovitis and Trans.
00:07:14
It was a time when you could attend conferences using your moniker, which I think is a cool artifact from this period of history.
00:07:20
The documentation boasted that it was a top-tier framework for rapid application development and offered an efficient API.
00:07:27
It touted DSLs implemented in Ruby, presenting the most powerful object-relational mapping solution in the world.
00:07:32
Nitro was web 2.0 ready, supporting Ajax and XML standards.
00:07:39
One unique aspect for researchers is looking at the discussions on Ruby Talk discourse, particularly from 2006.
00:07:47
James Britt noted that Nitro was on par with Rails, indicating its significance in Ruby web development.
00:07:54
While I won't be discussing We, unfortunately, Nitro was mentioned alongside it.
00:08:01
Its formal documentation outlines four libraries and one dependency.
00:08:09
For example, Raw was a minimal version of a full web application.
00:08:16
Then there was OG, the object-relational mapping and lifecycle manager.
00:08:22
Interestingly, one notable aspect of Nitro is that it predated Rack and referenced CGI throughout its code.
00:08:29
This framework also supports fragmented and action-based templates for componentization.
00:08:35
I want to focus on OG for a minute, as it’s the most intriguing part of Nitro.
00:08:42
OG aimed to allow you to write Ruby code while managing SQL and migrations.
00:08:48
It attempted to provide a seamless experience in Ruby while managing database interactions.
00:08:55
It would infer connections based on your Ruby classes, making development quick and efficient.
00:09:02
OG reduced the overhead usually faced when working with object-relational mapping in Ruby.
00:09:08
Despite its interesting features, it remained tied to older Ruby versions.
00:09:15
While I haven't been able to get it to persist a whole database yet, I still see OG as worth a second look in 2022.
00:09:21
I think if I were to pursue anything after this talk, it would be OG.
00:09:28
The promises it offered were not entirely easy to uncover, which is a shame.
00:09:34
The mailing list was active for a time, indicating interest in the framework.
00:09:40
Let's now look at Ruby Waves, another framework for discussion.
00:09:47
This was unveiled at a RubyConf in February 2008 by Dan Yoder from T Interactive.
00:09:53
Ruby Waves aimed to be a cutting-edge framework amidst the excitement surrounding Ruby at the time.
00:10:00
Dan's talk on it inspired many due to its ambitious plans.
00:10:06
By 2009, however, it was mostly forgotten, even though it was discussed at various conferences.
00:10:12
The excitement waned, especially as Rails began merging with Merb.
00:10:18
The merger likely contributed to Ruby Waves losing momentum.
00:10:24
Lastly, let's touch on Remains, which was unveiled in November 2006.
00:10:30
This framework aimed to bridge the gap between Merb and Rails, marketed as modular and MVC-inspired.
00:10:36
Despite some continued use, it too fell into relative obscurity.
00:10:43
I haven’t heard much about Remains in recent years, yet it has some interesting features.
00:10:49
One notable aspect was the use of a 'map' method in the controller for routing.
00:10:55
In conclusion, many Ruby web frameworks have gone by the wayside.
00:11:02
Still, I encourage you all to explore the rich history of Ruby and consider what innovative frameworks could emerge today.
00:11:08
Let's reconnect the creative spirit that once fueled experimentation in the Ruby community.
00:11:15
I invite you to reach out and collaborate on any projects you find interesting.
00:11:22
Thank you so much for listening to my talk today. Enjoy RubyConf!