RubyConf 2022

Ruby Archaeology: Forgotten web frameworks

In the 2000's everyone was writing a Ruby web framework **Today, it seems, we are all too content to focus our energy on a small number of large Ruby web projects**. What happened to our creative spirit? In this talk we focus on Ruby web frameworks that have long gone by the wayside. I won't spoil them here, but I can tell you what we won't be covering:
* Sinatra
* Hanami
* roda
* merb

We will answer questions like:
* Why are fewer people experimenting with their own frameworks today?
* What features, idioms and ideas are worth exploring?
* Are any of these frameworks worth reviving or copying?

RubyConf 2022

00:00:00.000 ready for takeoff
00:00:17.820 all right hello everybody thank you so much for coming to rubyconf thank you for being here to listen to Ruby
00:00:23.100 archeology forgotten web Frameworks I'm your host today uh Nick schwatter and I
00:00:29.400 just thought it was a little warm up you know you might be jet-lagged like me I'm six times away everything's messed up
00:00:35.399 you know sometimes people do stretches or whatever to keep you awake through the morning before lunch so I'm going to do a little thing here I've noticed that
00:00:42.059 the sound leaks a little room to room so if a loud thing happens the other rooms
00:00:47.399 can hear it so it thought maybe we should make all the other speaker speakers feel a little intimidated because of how much fun we're having so
00:00:53.579 I'm going to ask you to laugh as loud as you can I know you have a mask on and all that stuff but you know we'll be safe about it so on the count of three I
00:01:00.000 want you to go like all together if that's all right one two three
00:01:10.979 all right um so um what I'm here to talk about out is a
00:01:16.680 Ruby archeology by specific brand which is about Frameworks they're web Frameworks written in Ruby that I think
00:01:22.860 are genuinely forgotten I do say I'm a production engineer at Shopify on the
00:01:28.259 Ruby and rails infrastructure team and I'm really grateful to be able to do this this isn't like my Shopify work this is like a lot of us are productive
00:01:35.040 chaos time or our passion projects are our Hobbies which a lot of times do feed into our day-to-day work
00:01:41.579 um I have an interest in Ruby history for about four or five years I've been doing the past rubies newsletter at
00:01:47.280 pasturebees.live and it's not a week to week thing it's uh if you're intimidated about content creation and think I can't
00:01:54.659 do something every week do what I do do seasons like a TV show just if you want to do six weeks a year where you make
00:02:00.899 this content you're interested in but then you can live your life or maybe 8 10 12 weeks and it's been a way that I
00:02:06.420 can you know get obsessed with uh what's happening in Ruby this week 15 years ago and then do that for a month and a half
00:02:13.020 and then not feel like it becomes a shackle on my shoulder so I encourage a lot of you all make great content I
00:02:19.080 think that's a wonderful way to just kind of keep it fresh and also my subscribers kind of like that they
00:02:24.420 aren't getting spammed all the time and I'm also interested in Reviving old ruby gems and old Ruby patterns that
00:02:30.599 should still be used today um because we if you've started Ruby in the last few years we have very good
00:02:35.940 linting and things like that and agreed conventions but Ruby is a sharp knife and there's a lot that we can do to it
00:02:43.080 and I'd like to say thank you thank you to Shopify for for sending me here for for you know sponsoring in a way the
00:02:49.920 work that I get to do and the work that is done by the infrastructure team on Ruby
00:02:55.680 um thank you for allowing me to dig through the dusty archives to look at old Ruby code thank you to all of you the community for being amazing what
00:03:02.580 Matt said this morning about Ruby's greatest wealth being the people in the community that resonates with me
00:03:07.620 absolutely 100 um so I have to say it Matt's is nice
00:03:12.659 and so we are nice there's just something that kind of goes through the community throughout time the only other corporate thing I'll say is uh at the
00:03:20.099 Shopify booth there will be a ruby coding challenge every day I may have had a hand in it and there
00:03:25.200 may be a leaderboard involved so if you want to go by and like sit via the QR code and have a look if it's if you hate
00:03:31.800 the challenge it wasn't me and I had nothing to do with it but if you like the challenge and think wow this is kind
00:03:36.840 of fun this is a great way to like compete with different benchmarks every day by the way um then it absolutely was me
00:03:44.459 what am I actually here to talk about though none of this um in the 2000s everyone was writing a ruby
00:03:52.379 web framework so this was picked up I've done a few talks on specific gems from
00:03:57.420 the past I've done newsletters about blogs and talks I've watched a lot of rubycon's 2006 seven eight uh things
00:04:04.920 like that and saw what was going on in the community and this thing that kind of inspired this talk is there's a lot
00:04:10.680 of Ruby web Frameworks and a lot of them that I reckon are forgotten
00:04:15.979 I ran this list by I don't know if I can say his name I don't know if he's in
00:04:21.000 here by Aaron Patterson any remembered one so that was like my uh like metric for is
00:04:26.820 this actually are these actually forgotten um but this is also quite interesting because these were the days really early
00:04:33.300 on where you couldn't necessarily get a paid job writing Ruby but people were really excited about it only a few years
00:04:38.880 or maybe within a year of the pickaxe book first coming out and introducing all this Ruby to us outside of Japan and
00:04:46.259 people would debate these design patterns and configurations modular modularization conventions and what
00:04:53.639 would be the Ruby way to write the web so what I'm looking to achieve today is
00:04:59.340 I want to have a higher level discussion about these Frameworks I want to remind so I'm not actually saying I'm going to
00:05:04.919 get code from 2002 and run it on an M1 which I usually like to do but I'm just going to talk about the Frameworks and
00:05:10.320 what they brought to Ruby I want to remind people that there was a time when everyone was seriously experimenting
00:05:15.960 with these and that we should take that same experimenting Spirit into the future
00:05:21.180 I'll do this by talking you through three Frameworks and one standard Library gem that I think have been
00:05:26.580 forgotten the first one's maybe not forgotten but worth looking at um
00:05:32.100 so let's let's kick this off CGI
00:05:37.199 you might be familiar with CGI or if you're not this is an all-access talk the the common Gateway interface is a
00:05:43.860 set of standards that Define how information is exchanged between a web server and a custom script and is a
00:05:48.900 simple way to think about this if you're not familiar is um you've probably heard of rack writing
00:05:54.840 your own you know Ruby framework sitting on top of rack CGI is a bit lower level alternative that people were using
00:06:00.479 before rails became ubiquitous and it was a standard that you can install on your Unix system and it defines how your
00:06:06.240 scripts can talk to these HTTP requests and because of this uh the in the Ruby standard Library you have the CGI gem
00:06:13.440 which you can use to this day or the tldr is is another rubyism that we got from Pearl magic before that was
00:06:19.740 available there but let's have a raw look at this actually from the documentation so as simple as it gets a
00:06:27.419 couple of puts that's it you've you've now got an actual Ruby based uh website
00:06:34.620 working here but of course there's like with anything there's extra syntactic sugar that you
00:06:40.319 can add you know you can actually go cgi.header you can start writing a bit more interesting HTML and then kind of
00:06:47.759 similar if people remember markabi or even what's being done today with flex where you have the actual like Ruby
00:06:53.580 style methods and then blocks passed to those methods and I also love you know old school uh like multi-line curlies
00:07:01.319 that's a different discussion um this looks this looks quite neat
00:07:06.360 and it was actually used this is a an excerpt from Kirk Haynes I don't know if he's come to Ruby comp I know he spoke
00:07:12.479 at mini we've tweeted each other so if you're in here Kirk okay that'd be my first time meeting him but we talk a lot
00:07:19.319 um but he he was he's an Iowa maintainer which is I'm not covering today but it was a ruby web framework from 2001 and
00:07:27.060 it's still there and when he was talking about coming to Iowa he was he referenced cgi.rb and even though he
00:07:34.500 didn't like it it was thought of as a common way to web with Ruby it was an option it's something that you could put
00:07:40.740 on your server so you can legitimately do this today you just need to configure this along with a server like Apache on a Unix
00:07:47.940 system and from here your only limits are just raw Ruby as with anything else this is bare metal enough you are quite
00:07:54.660 limited to have to roll everything yourself and it it would be fun for a Sandbox project but definitely not
00:07:59.759 something I'd see as a viable solution for me unless I was just trying to sneak some Ruby on a lightweight uh Handler
00:08:06.479 for requests on server so let's go to our first full-fledged framework Nitro put your hand up if you've heard
00:08:13.620 of nitro hey my friends okay thank you so much thank you um I'll tell you what Nitro is not it's
00:08:21.120 not rocket science so here's an image from uh the Nitro days uh from their
00:08:26.400 website and it provides everything you need to create Web 2.0 applications with ease and joy there's some beautiful
00:08:32.219 marketing along with it it inspired a lot of future Frameworks um it was first released in October 2004
00:08:40.219 by George muscovitis and trans uh George
00:08:45.240 is not in this room right because I saw two hands so it might actually this has happened before where I've talked about code and then the maintainer okay
00:08:52.200 in in the other uh maintainer was called trans I don't know who trans is maybe somebody in here does but this was the
00:08:58.440 day when you could have your moniker be who you were why the lucky stiff was why the lucky stiff mental guy was mental
00:09:04.140 guy and I think trans was similarly just trans you know you could go speak at a conference under your moniker and it I
00:09:10.320 don't think you could achieve that anymore but I think that's one of the cool artifacts from this period of History
00:09:15.480 but asking what it is looking at the documentation um it sold itself very high
00:09:21.600 um you know it had a lot of references here to like kind of marketing itself is like a business class top tier framework
00:09:28.980 using terms like rapid application development efficient API uh a layer of
00:09:34.440 dsls implemented on Ruby the most powerful object relational mapping solution in the world you know it's web
00:09:40.140 2 ready Sports Ajax XML you know standards compliant is hitting all the buzzwords for the time
00:09:47.100 um but another way to kind of see how the community was reacting and I believe all ruby talk is on a discourse now this
00:09:54.360 is where I do some of the research and it's such a great way because people really used it to debate particularly then and say what their opinions were so
00:10:01.080 if you're doing archeology definitely type in your buzzwords into the discourse for Ruby talk
00:10:07.800 um but a few Snippets from this that was uh from James Brit in July of 2006 is
00:10:14.700 um it was seen on a similar tier of Israel's so if you're serious about web
00:10:20.100 development and Ruby and this is in 2006 you owe it to yourself to spend time with Nitro Iowa rails and we and
00:10:27.360 somebody tweeted me today saying if I was going to talk about we unfortunately not but we was another one on the list
00:10:33.660 from their formal documentation it consists of four libraries and one dependency so raw which is really the
00:10:40.260 thing they like to break things up but you can kind of think like how nowadays there's our spec core or with merb there
00:10:46.019 was merb Corps well there was raw which was the thinnest amount that you could have to be the full web application
00:10:51.420 there's OG which was the object relational mapping and object lifecycle manager but it also listed facets and
00:10:58.019 jQuery which is quite interesting to me because they're just external dependencies if you haven't heard of
00:11:03.240 facets is a popular gem to add cool things to Ruby maybe like pre-active support days and stuff and in a lot of
00:11:09.839 ways that people want to write Ruby you'd often see requiring facets which was us that set of features and jQuery
00:11:17.519 you know I mean you wouldn't you wouldn't write a web framework it says it comes with jQuery but this was a different time so really what for our
00:11:23.459 purposes we're thinking about raw and OG and one remarkable part of this is it was pre predated rack so it actually
00:11:30.660 does reference things like CGI throughout its code this is the only code base that will not be rack based
00:11:36.899 for the rest of the presentation if you want to look at that look at this code base
00:11:42.240 additional proclaimed features that had as you could write your app as you wanted it said and I can't quite prove this
00:11:49.140 that if you wrote in a PHP style it automatically transform into Ruby code by Nitro or you could choose a
00:11:55.860 traditionally MVC pattern um it it took extreme care to not be
00:12:01.019 opinionated and be very much opinion over convention I don't say configuration over
00:12:06.480 convention because I'm unsure if it had a prohibitive amount of configuration it
00:12:11.579 just was what's your opinion on how you should approach building a web framework
00:12:16.980 it also supported fragmented and action-based templates that would support componentization and
00:12:22.440 additionally supported including those frame fragments at compile time or runtime it also used drb quite a bit to
00:12:29.820 provide distributed sessions when running your application over a server cluster and it also had alleged I'll
00:12:37.019 cover that in a minute scaffolding mechanisms to speed up development I'm going to stop everything here I want
00:12:43.560 to focus on OG though for a minute that was the second bullet point is the most interesting part to me uh OG
00:12:51.420 it's the orm you know it's the way that you're going to deal with your objects that are persisted with um
00:12:57.660 this but really what it tried to achieve in my interpretation is like how bare metal can we be about you just write
00:13:04.139 your Ruby and we'll give you the sequel we'll give you the migrations we'll give you the back end you don't really have
00:13:10.680 to think about this is like um conceptual compression on steroids here this is
00:13:17.100 an object in Nitro at this time one way that you could write it and really the only difference is you're passing a type
00:13:23.399 to body you're saying this will be a string and then you have your 2s here so you want the stringified return to be
00:13:29.220 but it would actually infer everything else for you it would look at your Ruby code go through all your classes and do
00:13:34.980 this and then you could do a bit more so you could do like a has many and point that to a class you could have a
00:13:40.440 uniqueness validation and all the setup required was a simple config hash where you can see very
00:13:45.899 boring basic parameters here and then you just do OG dot setup and pass in the config and a story
00:13:51.899 and it created a schema on OG setup if one existed you know it would connect to it and it would transform it from what
00:13:59.279 it had been to what your new Ruby code is now which is a bit unbelievable like
00:14:04.800 involved like had things like evolving add things like column addition and removal renaming you didn't have to tell
00:14:12.420 it anything you just changed your Ruby objects and it changed your database for
00:14:17.579 you which is wild right we think about oh I don't have to write raw sequel cool well if you didn't have to like do
00:14:23.880 anything um is this feasible scalable or sane
00:14:29.160 I'm not exactly sure on that I think uh but what I can tell you is this compression I love
00:14:36.660 um you know you can write your vanilla Ruby objects with a tiny bit of extra information and typing and boom there it goes I feel like there's so many issues
00:14:43.560 that you'd encounter it's like even with people who use like active record as their orm you re run into limits trying
00:14:49.620 to run a business using that and then you're having to do your own things like your raw SQL at some points or people
00:14:54.839 who reach for a Rel and stuff like that but I think if you were on a very vanilla like crud situation with your
00:15:00.839 application this is an interesting um possibility one of the problems with Nitro in particular is this is like
00:15:08.220 pre-twitter this is all the websites that reference that are down getting good examples for is very difficult a
00:15:14.820 lot of the blogs that talked about it aren't even on archive.org all the old commits for it from back in the day I
00:15:20.940 mean there's four commits left that are on GitHub because again because of how old some of the original code is you can
00:15:27.000 get it now but I wanted to look at some of the original commits it's quite challenging if anyone has info to help
00:15:33.360 me with that please DM me after if I did find a Hello World um document which was uh you know uh
00:15:40.920 pretty pretty small here and we could also find a file structure for a Blog example where we could see a directory
00:15:47.399 structure which doesn't really have anything fascinating so I'm not going to spend a lot of time on it the same with the controllers
00:15:53.279 um it's again not rewriting the world we're going to see that theme through this talk that there are certain areas
00:15:58.680 of Ruby's web Frameworks that aren't vastly different generally and the templating uh some supported uh
00:16:07.079 like you know the partials had its own markup but I started to run into a few things I
00:16:12.899 said about scaffolding and a lot of big promises and couldn't find necessarily all the
00:16:18.240 features that were marketed in the older documentation so it has a lot of powerful Concepts it is you know heavily limited if you want
00:16:25.139 to use it to being tied to Ruby 1.8.2 so you need very specific tooling to be able to use it I've done things like
00:16:31.380 this so I believe it is possible but you know if you're on an M1 as well so you might be spinning up something in the
00:16:37.079 cloud I think OG is worth a second look in 2022. um I haven't been able to get it to
00:16:42.720 persist a whole database yet but I think if I were to work on one thing after
00:16:48.180 this talk it would be OG um all of its promises it was quite hard to surface some of them I talked a lot
00:16:55.079 about uh the different types of history that I wasn't able to find code that
00:17:00.660 would align with what was being said in the documentation which is a shame the mailing list seemed really active for
00:17:06.179 about four years which is a long time in Ruby terms and people were using this framework this was a heavily used and
00:17:12.540 inspirational thing for a lot of what we used today so for the purpose of a future talk if
00:17:18.600 somebody wanted to just spend all their time on this I think that could be a standalone talk but this is all okay because Nitro laid
00:17:25.260 the groundwork and inspiration for our next framework we're going to explore which is very much more documented and preserved in 2022 Ruby waves uh show of
00:17:33.059 hands anybody heard of Ruby waves in here all right okay it's the okay it's the same I will come up here I'll talk
00:17:40.200 to you after um some of the screenshots are going to be from a rubyconf talk so it'll be a little fuzzy whatever right like I'm
00:17:46.799 just pulling it off of 16 or 14 year old video but Dan Yoder at T interactive
00:17:52.620 which like at that time everyone seemed to be at ATT interactive I was talking to Aaron about that earlier
00:17:59.520 um it February 2008 it is unveiled at this
00:18:05.039 conference Dan has a fantastic talk about it about the Ambitions about the future of Ruby waves
00:18:11.880 um by 2009 it was mostly mostly dead but it did it was talked about at three different conferences it was rubyconf
00:18:18.000 L.A rukan and then maybe Gotham Ruby um one of those
00:18:23.880 um but I just I'm gonna take I'm sorry I I whatever about time I'm gonna take a 45
00:18:29.280 second side note here part of the reason I made you laugh was when I was watching Dan's talk
00:18:34.860 um the Next Room kept laughing this is 2008 the Next Room kept laughing and I could
00:18:41.220 hear it on the audio if you watch it you'll see this Dan Yoder 2008 Rubicon and you could tell like you know he's
00:18:47.460 kind of getting a little irritated not irritated but he notices it and then he just stops he's like
00:18:52.620 man I wonder what that guy is talking about like everyone kind of like laughed and stuff and I was really curious like
00:18:58.860 who was that who was that in the next room so I was able to find the old schedule and I found what thought uh Dan
00:19:06.059 was in and I found who else was in the slot and there's like again for other speakers I replayed their talks at the
00:19:11.820 same time stamps and I found the one with all the laughter and clapping going on and it was Jim Wyrick next door
00:19:19.620 so anyway I knew this is the right crowd to tell it to um
00:19:24.840 and that is a great talk by Jim too anyway um so yeah so this is his introduction
00:19:30.840 but I want to jump in kind of like I did on the last one too a dependency I found really interesting which was Funk tour
00:19:37.260 um is a foundational dependency to Ruby waves and very much influenced a critical part of how it came together
00:19:43.860 um it was pattern matching so functor gave you the ability to do
00:19:49.500 pattern matching in a few different ways it used it as a utility in a specific way but you could pass functor into your
00:19:56.160 class and including functor method and it could depending on the type of
00:20:01.260 arguments as you see here do different things right so it matched the pattern in that way
00:20:06.900 you could also pass a block to it and using this given syntax again integer
00:20:12.360 and then zero or one you know you do the Fibonacci with it so again do different things based on a pattern and then here
00:20:20.160 it is you know being called explicitly with lambdas as well but the example that they used here was for routing
00:20:27.179 requests so the shape of your Ops art the shape of your request
00:20:32.940 arguments of your request get post whatever it leveraged functor
00:20:38.700 to be able to handle this and then you would pass it to where it needed to be with these with these matches
00:20:44.940 um so let's go to a hello world example with this application there's a lot of different ways it's it's a bit more of
00:20:50.039 the from this time and I kind of think about merb as well you know there's components that you can put together in
00:20:55.380 layers uh this is a simple one so you do the map class which is handling the mapping of our routes and you put the
00:21:01.740 functor in there on a base get and it would return you know with the query
00:21:06.960 parameter hello query name uh I tried to get the hello world for
00:21:12.720 every one of these to just kind of give that to you from the start um but talked a lot about
00:21:18.900 um you know resource delegation like if you looked at the request to tip you off with what resource you wanted to go to
00:21:24.720 and then do all the other handling for the specifics after that and everything were ordinary classes so
00:21:30.840 you could leverage the full power of Ruby like inheritance mix and modularization encapsulated code design uh with most of what it used it tried to
00:21:38.460 not make its objects too bizarre or weird or like narrow um
00:21:44.400 so this is uh some a few more slides from that talk so so again you talk about the map doing introspection and it
00:21:51.000 can tell okay this needs to go to the article's resource the image resource the blog resource the gallery resource and then it had layers and it had
00:21:57.659 foundations so it would require you know whatever you wanted to include in there and I know with some Frameworks today we
00:22:04.200 probably don't do that as much like in practice I think a lot of us just whatever framework we're using give me everything my computer can handle it you
00:22:11.520 know when I get to like a million requests a day then I can start to think about what I really don't need uh but
00:22:18.360 then I'd like to talk to about a second dependency here which was auto code which was part of this project too which
00:22:23.820 was better auto loading in 2008 you can find it go to waves auto code it's still there fun fact it works on Ruby 3
00:22:31.260 totally fine you can run this like right now even on your laptop um
00:22:36.659 so to kind of show you how this works uh they want a better way to auto code so
00:22:41.880 say I have this uh schwad app and fish class and a flop that just returned slip
00:22:47.100 and I include auto code into it and I require in the dependency include it and
00:22:52.260 use this method to autoload everything in that directory right so models views controllers directories and I want to
00:22:59.159 include auto code and then when I update this so you know when it's loaded
00:23:04.919 right I put the puts outside of the module and we see here that I have that put
00:23:09.960 saying I haven't called the model yet and then when you call the model it then returns that it's been loaded at this
00:23:15.480 point so auto code is used for this auto loading um it gives you a few other additional
00:23:21.120 methods to reopen classes or modules without clobbering on reload we have site work now or side effect now
00:23:29.520 um if you're at that conference where they have the proper pronunciation sites back uh it's and it's massively powerful
00:23:36.120 and it's you know everything that you're going to want to be using nowadays um but I had to try and Benchmark it
00:23:41.340 because it kept talking about how fast auto code was right so I just did this
00:23:46.380 simple thing and obviously cipherick was 3.6 times faster and I'd done that in a
00:23:52.500 ruby 2 version because I was using older Ruby at the time and then on Ruby 3 it's even faster it's over four times faster
00:23:58.500 so uh good work Javier I didn't find a secret gem to like beat Cyborg so sorry
00:24:03.659 about that but why not make make a contrived esoteric framework using all
00:24:09.000 these tools I share with you today or I'll do it for you we'll have OG we'll have auto code we'll have funktor and we'll just kind of smush them together
00:24:14.640 I'll take some things from the next one as well it had a lofty road map um which it never really achieved right
00:24:20.820 this was again a very quick like one year and like in eight months that this
00:24:27.600 existed but similarly at the end of 2009 it um
00:24:33.299 you didn't really see it referenced anymore and I think the reason for that if you look the rails three merger
00:24:40.760 merbridgeer with merb um was about that time I think it was
00:24:45.960 announced the end of 2008 I think it was finished the end of 2009 so you saw these other applications that I was
00:24:52.140 researching and a lot of them kind of fell off in 2009 so I'm wondering if there's community that were very into merb or alternatives to rails at the
00:24:59.100 time and maybe there was the sense well if these are merging this is so clearly like a lot of uh open source work going
00:25:05.760 towards it we'll we'll drift away from these other tools as well and I think that's possibly part of what happened
00:25:12.059 um and so we didn't get to realize the full uh potential of Ruby waves but it's
00:25:18.059 still quite usable today so I'd recommend giving it a look final one is remains anyone heard of her
00:25:24.179 maze this is the most usable of the three is unveiled in November 2006 marketed to be a middle ground between
00:25:30.539 Mervin rails and is modular but still MVC inspired directly by Nitro and it is
00:25:35.880 not rails this is not rails okay so if you use it you could say you're not using rails this is some of their marketing
00:25:43.440 it had a debut on Ruby inside in November of 07 Peter Cooper of Ruby weekly
00:25:49.320 has been doing this forever and he keeps all of this like this is some of the best research you could do Ruby inside
00:25:54.539 pre-ruby weekly has all these articles so this is the one from November 2007 like I said it works if you sit here
00:26:01.080 right now Ruby version 313 gem installer maze remains create blog Java Block it's pretty darn cool
00:26:07.200 uh the remains home page so the docs like actually looking at it it's still up and kicking so this is quite alive
00:26:12.960 it's it barely made the cut for this but I actually haven't heard the word remains but once or twice in my career
00:26:18.679 not doing archeology um and rubytalk in 09 using them as a
00:26:25.020 reference alleged that remains took up where Nitro left off and then kind of the last Ruby talk
00:26:30.900 reference I can Define for it is 2012 so you kind of think with a long tail maybe it had also petered out maybe about 10
00:26:37.080 or 2010 2011. but if you use it yourself and you're here I'm not saying it's Peter down like that's cool but it's
00:26:43.380 just not really talked about and that's okay um I'm going to be conscious of time
00:26:48.539 here so we can talk more about remains later if you like um but I'll try and do this in a couple of minutes
00:26:53.760 so first off I'd really like to point to a lot of the things are the same with
00:26:58.799 controllers and MVC it wanted to be really Bare Bones but I like that it uses the map method in the
00:27:04.919 controller so you're not going to a routes file and back and forth to figure out what is actually going to my controller you start with the map method
00:27:11.820 and you say what what type of request starts so here just be forward slash right is going to go into this
00:27:17.460 controller and be used I think that's an interesting way to reduce that commissions between the files and the
00:27:23.880 structure is a very traditional with any other MVC project and the hello world controllers is is what you expect and
00:27:30.659 this is a bit more discussion about the view mapping it supported a lot of template engines uh but there's one part
00:27:38.760 I want to focus on so like a lot of these other projects it had a core Gem and the core gem was innate so if you
00:27:44.820 want to do an even smaller version of remains which you can use innate just gem install an 8 use that
00:27:50.880 but the cool thing is is it came with its own HTML templator called a Tani
00:27:57.000 which was about in a backwards and it alleged that it was like super fast so
00:28:02.340 you do traditional like Ruby interpolation you know using your hash and stuff in the file for that and then
00:28:08.220 you do the markdown we've seen I'll start with the question mark r or uh to get the
00:28:15.360 um raw Ruby in there as well this is the file this is it this is the Ruby templating engine and I was like
00:28:22.380 dang if you think you're fast let's see if you're really fast here um so I found a honey badger blog from
00:28:27.600 like a year ago or two those Erb versus Hamilton I'm like I will use exactly this Benchmark with a Tanny I think it's
00:28:33.480 fair it's on honey badger this is definitely going to work and uh itani was uh yeah the way faster than
00:28:40.140 everybody else is faster on Erb by about four or five times unfortunately I work at Shopify and kokuban and Noah Gibbs
00:28:46.799 are on a team near me and I just was like hey um I know how you maintain Erv
00:28:52.679 um could you check my Benchmark and unfortunately he checked my Benchmark and it was not faster so I had to do a
00:28:58.440 few things to have Benchmark which I don't have with me today um to make it more fair for ERB however
00:29:04.020 there are changes being pushed to Ruby core today that will that aren't yet released that will make it a bit faster
00:29:10.679 so it's currently a bit slower than ERB but it has high hopes and potential so a
00:29:16.740 tany's really fun to play with um it's not in a gem though I've extracted it and I believe I've
00:29:22.200 published it I believe if you've gone ruby gems now you can use it for me if I haven't I'm sorry it's on a gist at
00:29:28.380 least it's somewhere that's the one thing I didn't really think about for this talk but it's feasibility in 2022 here with
00:29:34.620 my last few seconds this could be the biggest winner uh because you know I can run it on an M1 with Ruby 2 uh with
00:29:42.600 little to no trouble the innate core lets you strip even more out and a Tani is worth pursuing although I'm
00:29:48.299 suspicious in a real world environment it may not be the fastest Ruby templator yes speaker notes I have gemified it so
00:29:55.980 enjoy the gym um so many more uh here's like nine Ruby
00:30:01.320 web Frameworks I didn't cover so there's a lot more for you to check and Wii's not even on the list so there's there's even more so my question for you today
00:30:08.399 is what will you build now that you've seen all of this that was existing in
00:30:13.679 the community you're all creative people there's nothing stopping us from making esoteric web Frameworks having our own
00:30:19.620 opinions pushing these things to the web and I'd really look forward to see what kind of things you could go out and
00:30:25.140 build or even pair with me on if you'd like let's connect uh follow me in what schwad whatever like you'll find me at
00:30:32.039 some point somewhere uh thank you so much for listening to my talk I really appreciate it enjoy rubyconf thank you