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