Web Development

Ruby Archaeology: Forgotten web frameworks

Ruby Archaeology: Forgotten web frameworks

by Nick Schwaderer

Ruby Archaeology: Forgotten Web Frameworks is a talk presented by Nick Schwaderer at RubyConf 2022, focusing on the exploration of lesser-known Ruby web frameworks that have largely faded from use. Schwaderer reflects on the vibrant experimentation within the Ruby community during the 2000s, contrasting it with the current trend of concentrating efforts on a limited number of major Ruby projects, such as Sinatra, Hanami, and Roda.

Key Points Discussed:
- Historical Context and the Creative Spirit: Schwaderer emphasizes how the Ruby community was once filled with creativity and experimentation in developing web frameworks. He acknowledges that many frameworks created during this period have been forgotten.
- Frameworks Discussed:

- CGI (Common Gateway Interface): An early standard that defined how information is exchanged between a web server and a script, serving as a lower-level alternative to more contemporary solutions.

- Nitro: Created in 2004, Nitro was marketed as a framework for rapid application development, featuring object-relational mapping (ORM) capabilities and support for Ajax. Though innovative, it was tied to older Ruby versions, limiting its adoption over time.
- Ruby Waves: Announced in 2008, it aimed to provide a modern framework during Ruby's peak but lost traction as top frameworks consolidated, primarily due to Rails merging with Merb.

- Remains: Introduced in 2006, this framework sought to bridge Merb and Rails but remains less notable today despite its potential for modular development.

- Encouragement for Exploration: Schwaderer invites the community to engage with the history of Ruby frameworks and highlights that there could be valuable elements worth reviving or drawing inspiration from in contemporary development.

In concluding, Schwaderer urges the attendees to rekindle their creative spirit and consider the potential of forgotten frameworks in inspiring new innovations within the Ruby community. He emphasizes collaboration to explore these interesting projects further, fostering a fresh and inventive environment.

Overall, the talk emphasizes remembering the rich past of Ruby web frameworks while encouraging innovation and experimentation in future development.

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!