00:00:23.199
good afternoon uh i'd like to get started if i think everybody's ready
00:00:28.840
cool cool thank uh thank you for joining me this afternoon uh i'm excited to be
00:00:34.160
here and thanks for uh thanks for choosing this talk so it's been 10 years since the first
00:00:40.640
public release of rails so i think that's a good time to think back and reflect on
00:00:47.280
where rails has come from where it might be going and what the future has in
00:00:52.559
store so i've been thinking a lot about the early
00:00:58.480
days of rails lately because the company i work for swift type makes site search software
00:01:04.239
so i use my own website for testing so i index my site and then have to do
00:01:10.400
searches on it and i'll search for rails uh just because i'm not super creative and i need to search for something right
00:01:16.159
and in doing so i found some old blog posts that i wrote in early 2005 when i first discovered rails and it was really
00:01:23.280
interesting for me to read because back then i was i was working as a java developer
00:01:29.680
and i was uh really interested in python and rails was neither of those things so
00:01:35.759
i was pretty skeptical of rails like i was impressed with it but i wasn't sure it was worth learning ruby over
00:01:42.880
so i thought i'll just sit back and let the python people catch up and
00:01:48.399
i waited and i waited and i waited and that never really seemed to happen and so after a few months
00:01:55.439
i jumped into rails and started learning it and i started learning ruby so that i could use rails
00:02:01.600
and then that fall i got wind of a new group starting in my hometown the ruby users of minnesota and
00:02:08.239
so i was i was there at the first meeting when there was 12 people talk who were just really excited about ruby
00:02:13.680
and really excited about rails and at that point i joined the the ruby community and became a part of
00:02:21.040
that and really have not uh have not looked back since then and i've been working with rails professionally now
00:02:26.640
for about eight years so this made me think about a book i read
00:02:31.680
once called looking backward by edward bellamy so in this book which was written in the
00:02:36.959
late 1800s and takes place at that time uh a rich upper class man uh is
00:02:42.959
hypnotized and he falls asleep for over a hundred years and when he wakes up uh
00:02:48.319
everything has changed uh america is now a socialist utopia and so you know he had it pretty good
00:02:54.879
before right uh he he was wealthy he had servants and now everyone is
00:03:01.040
equal and so he's pretty skeptical of this new order so
00:03:06.879
it takes him a while but as he's shown the new way of doing things he becomes convinced that this is actually
00:03:12.560
a better way and that made me think of uh
00:03:19.280
think of my situation where i was i was skeptical of rails and uh but eventually
00:03:24.560
won over um so today
00:03:30.400
what i'd like to talk about is the idea of what would a programmer from 2004
00:03:36.159
think if they could time travel forward to today and experience our web development utopia what would that be
00:03:42.799
like for them to see how we work today so what i'd like to do today is first
00:03:49.680
talk about what web development was like in 2004 then i'd like to jump forward to the
00:03:55.439
present and think about what a programmer from 2004 would think about our web development utopia of today
00:04:02.400
and finally i'd like to take a look at what the future might have in store for rails and what the
00:04:08.959
uh what the legacy of rails might be so first let's talk a little bit about
00:04:15.760
what development was like in 2004 so if i can set the stage for a minute um i
00:04:22.880
see a lot of macbooks here today uh there were no macbooks in 2004. the
00:04:28.560
top of the line apple laptop was a power mac g4 and
00:04:33.840
you know apple had not completely penetrated the web development community like it has now uh there were only
00:04:40.960
i use linux at work myself and uh windows at home actually
00:04:47.120
and the most popular phone number not the most popular but the hottest phone in 2004 was a motorola
00:04:54.560
razer so right so things were pretty different there
00:05:01.199
things were pretty different then and i was working as a java developer at the time and i was pretty excited about
00:05:07.360
that because i graduated in 2001 right after the dot-com bust and
00:05:13.120
things were pretty sketchy there for a while it was hard for me to find a job and so i was excited that i was able to
00:05:19.680
work as a java developer in the hot language of the time and i was i was glad that i was able to work at a software development company where i
00:05:26.960
could work on software for sale instead of uh working in the cost center at a
00:05:33.120
big bank or something like that right so i was working as a java developer and
00:05:40.080
if you've ever done any java web development you know that it can be pretty painful right um
00:05:46.400
at the time the the best way to do java web development was struts and uh
00:05:51.680
hibernate but we didn't use either of those we used raw java servlets and
00:05:57.759
hand coded jdbc queries to our database so
00:06:04.720
the the real problem with java as a as a web development platform at least in those days was it it has a really long
00:06:11.759
edit compile debug loop or in the case of of java web
00:06:16.880
development it's the edit compile deploy debug lube
00:06:22.240
because you have to restart your app server and we used websphere so that took a long time so if i needed to write a new page for
00:06:30.240
for our app it was a pretty involved process so we used raw servlets so that's sort of like
00:06:36.240
using a raw cgi library where it's very low level um and if when you work in java it's
00:06:42.080
very verbose and you have to read from input streams and write to output streams and it just doesn't have the
00:06:47.840
conveniences of ruby or scripting language so i'd have to write my servlet then i'd have to write a bunch of xml file or xml
00:06:54.880
code in the web.xml file to map it up and then you'd compile everything and
00:07:00.319
get it working and then restart your app server which would take several minutes and then
00:07:06.160
browse to the new page to to see what it what's going on there and that's where the fun would start
00:07:12.240
because that's when the jsps came into play so jsp is just like erb right you
00:07:18.880
instead of ruby it's java but java is a much more heavyweight language and it doesn't
00:07:24.720
have you know friendly looping constructs or mapping constructs like ruby does so writing view code in ruby
00:07:31.039
or in java is not very much fun but worst of all the way that jsps work is that it takes the java or the jsp code
00:07:38.000
that you write and it compiles it into a java class file and then that java class file gets compiled into code
00:07:44.639
so when you get an error when you're debugging you'd get us this stack trace
00:07:50.639
and it would be like null pointer exception online 12075 of line 20 082
00:07:59.360
and you'd sit there and you'd think
00:08:04.720
what was i doing in my jsp that could cause a null pointer exception and you'd
00:08:09.919
look at the jsp and you look at the stack trace and they had no correspondence whatsoever right
00:08:16.879
so it's really painful and if you were smart you would there's a setting like a secret setting you
00:08:22.479
could use for websphere to keep around the compiled java files so then you
00:08:27.599
could open that up in your web browser and look at line 12075 and be like
00:08:32.800
oh that's what i was doing in the jsp so
00:08:38.080
web development in java especially in 2004 not very much fun but there was there was also at that
00:08:45.120
time a glimmer that something better was on the way that
00:08:50.240
the web could do more um there was a new sense that the web was a
00:08:56.000
powerful platform for delivering software and i think that the earliest uh glimmerings of this come from
00:09:02.800
microsoft's outlook web app this was the first application to use what we would today
00:09:09.600
call ajax without requiring any kind of browser plugins so
00:09:14.800
that that came out in 2001 and people people didn't pay much attention to it
00:09:20.480
because it was i.e only and it wasn't clear how it was working right
00:09:25.920
and then google launched google suggest and people dissected that and they saw how it was working and
00:09:33.120
they also launched gmail which gave people a new sense of what was possible in a web app that that web apps
00:09:39.600
could automatically refresh as uh things were changing on the server so there was
00:09:44.959
a new sense of what was possible that maybe there was a better way of writing web apps
00:09:51.040
and in 2004 i was also looking for something better because and i attribute that to a book i read
00:09:57.680
early in my career the pragmatic programmer by dave thomas and andy hunt and in that book which is a terrific
00:10:04.480
book about becoming a better software developer a better software software craftsman in that book they talk about the
00:10:11.040
importance of learning a scripting language and that's because if you're working in a language like
00:10:16.640
java there's often things that are too uh too small of a task to make it worth writing a java program to do and but a
00:10:23.680
scripting language you can you know knock that off really easily so things that you might do manually you
00:10:28.720
can instead write you know a script to do for you and so i took that to heart
00:10:34.480
and i went to the bookstore remember this was the early 2000s there were still bookstores
00:10:40.640
and i looked at all the books that they had about scripting languages so there was a bunch of books about pearl
00:10:46.800
there was a bunch of books about python and there was one book about ruby by
00:10:52.000
those same guys dave thomas and andy hunt so i immediately discarded the books
00:10:57.120
about pearl because i'd worked with pearl before and i thought it was terrible
00:11:04.480
and i looked at the books about python and i'm like this looks okay i can see myself using this and then i looked at
00:11:09.680
the book about ruby and unfortunately what i saw in the book about ruby was a lot of dollar signs and
00:11:15.920
dollar sign underscores and at signs and at signs
00:11:21.360
and i thought this looks just like pearl i don't i don't want to learn this this
00:11:27.519
this is this is this is crappy so i decided then to become a python
00:11:32.560
programmer and i was actually able to use python for a number of things in my job in my
00:11:37.760
personal uh programming i wrote a script to migrate from one bug database to the other
00:11:43.600
i wrote a script that tied our subversion check-ins to our bug database so you could reference bug numbers and
00:11:48.640
link up the commits and stuff and i i wrote some personal scripts
00:11:54.880
but what i really wanted to do was write web apps because that's throughout my career that's always what i've been most
00:12:01.040
excited about because i've always loved the potential of the web as a platform for enabling communication
00:12:08.480
it's the most powerful and widely distributed way that you can connect people
00:12:14.320
and so every time i would have an idea for a web app in python i would
00:12:19.440
start thinking about how or i would start thinking about how it should work and what it should do and i'd get excited about it and want to
00:12:25.680
build it and then i'd start reading about how to build web apps in python and get really frustrated because then there was no
00:12:32.959
clear way there was no django there was cgi in the core library but
00:12:38.639
you know who wants to write at that low level there was then a myriad of templating options and
00:12:47.440
uh different object relational mappers and different ways of publishing your objects to the web and different
00:12:52.639
database drivers and there was no clear way of deploying the software either so
00:13:00.399
i would have this idea for what i thought would be the next great app and then i would start reading about python
00:13:07.519
how to implement it in python and get frustrated and give up but i didn't know it at the time but
00:13:13.760
there was something better on the way so let's turn now to
00:13:19.880
2014 and think about what would a programmer from 2004
00:13:26.320
think about how we work today and i think if you could take someone from then and bring them forward to now
00:13:32.800
i think they would be amazed because it's truly a great time to be a programmer
00:13:38.480
uh we are all walking around with a computer in our pockets that's more powerful than the desktop i had in 2004
00:13:46.720
and it has a a better web browser too so think about what's different between now and then in
00:13:53.760
2004 ajax was in its infancy the the term hadn't even been coined yet
00:14:00.880
uh today a rich ajax framework come with every web
00:14:06.639
uh application framework so you can you can build rich interactive applications much easier
00:14:12.959
and you can even write your entire front end in javascript if you want to web browsers are immeasurably more
00:14:20.079
powerful now than they than they were then deployment is much easier too
00:14:27.199
in 2004 it was really hard to figure out how you should get your app up on the web uh you could colo but that was
00:14:34.079
expensive uh you could use shared hosting like dreamhost or something like that but
00:14:40.480
those servers were underpowered and kind of weak today you can spin up a server with the
00:14:46.880
click of a button you can manage everything yourself if you want to use ec2
00:14:52.399
or you can rely on platforms services like heroku or google app engine
00:14:57.519
and this is really great for programmers because you don't have to be a great programmer
00:15:03.120
and a great system assisted men now to launch a web application you can let other people handle that
00:15:09.760
part and that's terrific another thing that i think is really powerful about
00:15:14.880
how we work today is that in
00:15:20.399
today we have access to all of these uh web service apis with a simple http request uh you can extend the
00:15:27.360
functionality of your app really easily by leveraging these services there's everything from search like myself my
00:15:33.120
company provides to payments from companies like stripe and even telephony from companies like twilio
00:15:39.360
so with just an http request you can add that kind of functionality into your application super easily
00:15:46.240
and best of all you're using they use json instead of xml so there's no xml sit-ups like there was back in the early
00:15:52.880
2000s but what about rails like what would a programmer from 2004 think about ruby on
00:16:00.240
rails well i think if you could bring someone or talk to somebody in 2004 and say in
00:16:06.639
10 years the best way to make a web app is going to be this thing called ruby on rails i think what they would say is
00:16:13.120
what on rails it's difficult to overstate how marginal the ruby community was in
00:16:20.320
2004. when david publicly demoed
00:16:26.320
uh rails at rubyconf 2004 there were probably less people in the
00:16:31.839
room than there are right now then there were about 60 people at that
00:16:37.759
conference today there's dozens of conferences around the world and thousands of people
00:16:44.079
make their livings using ruby and rails the community has grown tremendously since those days
00:16:55.680
but what about the features the features were really what made rails succeed
00:17:01.839
and if i think back on what i first thought about rails when i saw it like what impressed me
00:17:07.839
things that that really stand out in my mind are things like live reloading
00:17:14.480
compared to how i was working in java where it was a really long cycle to get anything up on the screen in rails you
00:17:20.559
could edit any file you could edit your model your your views even your database
00:17:25.839
schema and reload your browser and it was right there and that was tremendously exciting and
00:17:31.679
if you had an exception in your in your view you would see exactly which line of code caused it and not have to wade through
00:17:39.120
uh these huge stack traces that had nothing to do with what you were working on
00:17:44.480
and that was tremendous for developer productivity another thing that was a real big win
00:17:50.080
for developer productivity for me anyway was the development console rails let you just type a single command
00:17:57.280
and get full access to all the code that you've been writing so for me i keep that open all the time and
00:18:02.640
i'm always constantly trying out things and experimenting and trying to figure out how different apis work by using the
00:18:09.120
developer console this is something that i'd been able to get working in the java world using a
00:18:15.200
tool called bean shell which is like a javascripting framework but it was nowhere near as good as the rails
00:18:20.480
console and uh you know it just was a lot harder to to get working
00:18:27.280
related to that is just the idea of having separate development environments rails came right out of the box with
00:18:33.840
development production and test and has separate databases for all of those things so you didn't have to worry about
00:18:39.280
mixing your code together you could have separate configurations for testing and production and development and that
00:18:45.440
really helped with the software engineering side of rails
00:18:50.480
finally the the the last big feature that i think uh really stood out to me was active record and migrations active
00:18:57.280
record was super exciting because here this this this code is sort of magically intuiting the
00:19:03.120
fields from the structure of your database you didn't have to write any code at all and for someone who is writing sql statements by hand that was
00:19:10.640
really exciting and migrations were awesome too because you always need to transition the state
00:19:16.160
of your database in your in your application and again this is something that we had built at my job
00:19:23.280
but ours was not as good it it used raw sql so you would write sql
00:19:29.039
statements to to transition the database and it was tied directly to the app version that that we had so when you
00:19:36.000
would release a new version of the app you would have to sync that with the database the database version would have
00:19:41.600
to be synced with that so there was there was no way to independently migrate the database and there was no way to go down so you
00:19:48.000
had to get it right rails was better than that but why did rails win why
00:19:55.200
why was rails exciting to people because all these features were available elsewhere
00:20:00.799
i think there's three reasons first of all while each of these features was something that you could get in other web programming frameworks
00:20:08.720
rails brought them all together rails was the whole package
00:20:13.840
so rails took things that were possible and made them easy it even that
00:20:20.880
it made them the default so rails took a lot of best practices and put them together in one thing that you could use
00:20:28.000
super simply and that was really exciting to people even even for me because i was able to to do
00:20:35.120
some of the things that rails had having it together in one package was super exciting
00:20:41.120
the second reason i think rail succeeded is the triumph of hype if you go back and read the early blog
00:20:47.200
posts about rails it's really interesting because it really caused a furor in the java and
00:20:53.360
the python worlds because people were like well why can't we do this and in the middle of all that you saw
00:20:59.600
dhh he was constantly promoting rails and getting into discussions and
00:21:05.360
arguments with other people and blogging about it and he he was relentless in promoting
00:21:12.159
rails and the early rails community was relentless in sharing their enthusiasm for this new thing
00:21:18.159
and i think that that matters a lot because it's not enough to have great code and just put it up on the internet
00:21:25.200
that that never works you need to tell people about what you're doing in order
00:21:30.400
for them to know about it and you need to explain clearly and concisely why
00:21:36.400
it's better than what they're doing now and rails david and the rails community really
00:21:41.840
succeeded at that third another reason that rails succeeded is
00:21:48.400
the triumph of community from really early days rails had the ability to be extended with plugins and
00:21:55.520
so people wrote plugins that would take care of default areas or not default areas but but common areas of your
00:22:02.320
application like logging in or uploading files these are things that you needed in your app but they weren't core to
00:22:09.919
your app and so knowing that you could take advantage of these these plugins and later gyms really made
00:22:16.640
picking rails an easier choice
00:22:24.640
so ultimately rails was successful but what about the future what does the future have in store for
00:22:30.720
rails i think that rails does face challenges in the future
00:22:36.480
because because the web is changing what people want to do on the web
00:22:42.559
is becoming different and indeed the the future of the web i think is even in question
00:22:48.640
so let's look at two challenges to rails first of all
00:22:53.679
now that browsers are more powerful people are able to write more of their app on the front end and so when you do
00:23:00.480
this you don't need the uh kind of classic web app that rails is rails is really
00:23:06.720
good at generating a lot of html and shipping it down to the client
00:23:12.320
kind of a classic web app like like basecamp but when you're writing your entire app in
00:23:18.480
javascript in the client what you need is the ability to talk to the server with an api
00:23:24.080
and when that's all you're doing people can question why do i need rails why do i need all of
00:23:29.919
this extra stuff that rails does i'm maybe i should just use node.js and then i can write
00:23:36.480
you know the same language on the client and the server similarly
00:23:42.400
mobile apps are becoming increasingly popular because you can do so much more with the mobile app than you can with a
00:23:48.240
web app you the the user interaction is much richer and uh and faster and and
00:23:54.080
just cleaner and again these kind of apps talk to the server with an api and so
00:24:01.840
people think well i don't need rails then and i think that this this is a threat
00:24:07.279
to rails but there's two key things to remember about this one
00:24:12.960
rails is great at this kind of thing in our application we serve hundreds of
00:24:18.400
millions of api requests a month using rails and the way that we do that
00:24:25.440
is uh not using action controller but rails makes it easy to pick out only the parts of rails that you need to use and
00:24:33.760
so you can you can take rails much further than many people think i i believe
00:24:39.840
second even if you are building an api heavy app not all of your app is going
00:24:45.279
to be api based you are going to need a management console to handle the back
00:24:51.679
end of your application pretty much every app has this you need a way to look up your users and
00:24:58.799
you know change their account status and things like that and are you going to build an ipad app
00:25:04.159
for that i don't think so because it would be too expensive and slow the web is still the
00:25:09.600
best way and the easiest way to distribute an application
00:25:14.880
so rails has a real i think has a place for that or there's a place for rails even in an api
00:25:21.760
driven application but even if the web as a platform and
00:25:27.039
rails as a framework can't adapt and fall by the wayside i think the legacy
00:25:32.400
of rails will really live on for a long time because this idea of taking
00:25:39.120
things that were possible and making them simple making them easy to do
00:25:44.559
was really powerful and it inspired programmers in many different programming languages to to copy rails
00:25:50.960
and to uh to try to get those benefits for themselves
00:25:57.840
so i think no matter what the next platform is people will be inspired by that aspect
00:26:03.200
of rails and they will want to write the rails of whatever
00:26:08.720
i'd also like to look at the reaction against rails because that's part of rails legacy too
00:26:14.000
uh there's two examples that i'd like to talk about here first of all there's django so django can't be
00:26:21.120
considered to be uh inspired by rails because it was developed at the same time or even
00:26:27.440
earlier than rails but sin the the two frameworks have been uh
00:26:33.760
really similar and have have learned a lot from each other i think but the way that django works it is
00:26:40.559
really driven by the python philosophy of explicit is better than implicit so
00:26:46.400
in in django when you uh when you like want to map up a url on your server you think really
00:26:53.440
hard about what that url is going to be it doesn't happen automatically
00:26:58.480
and your database models tell the database what its fields should be instead of the
00:27:04.720
other way around in rails of course we follow convention over configuration right
00:27:10.880
but if you've ever tried to teach someone rails you know that this can be a double-edged sword
00:27:17.360
convention over configuration lets you write less code but it also makes it less clear what's happening
00:27:23.200
when you're teaching somebody rails it can be really confusing that you edit a route in this file over here
00:27:30.080
and therefore your controller over here needs to be named this and it has these methods available to it that respond to
00:27:37.360
these http requests or http methods that is not at all obvious and so it
00:27:43.840
takes time to learn all those conventions um and
00:27:49.520
i mean i don't think one is better than the other they're just uh you know different different sides of the same coin different ways of looking at how
00:27:56.320
programming should work kind of related to that is the second example which is micro frameworks
00:28:03.679
like sinatra these have been incredibly influential and i love using sinatra it's just it's
00:28:09.360
like such a thing of beauty when you can have your whole web app in one file and the the urls that are that are in your
00:28:16.480
web app are just tightly connected to the code that's going to run when someone goes to that url uh
00:28:23.600
that is like a really wonderful feeling i think and sinatra has been probably even more
00:28:30.159
influential than rails there are copies of sinatra or sinatra inspired
00:28:35.679
micro frameworks anyway in just about every programming language you can think of anything from java to php
00:28:42.799
to closure go javascript even haskell
00:28:48.080
all of these have a version of sinatra and
00:28:53.600
in some languages these micro framework the micro framework inspired by sinatra is the
00:28:59.440
default way people write web apps it's the best way that they have
00:29:04.960
and i think that that is kind of a problem because while i love using sinatra
00:29:11.120
when an app gets above a certain size i find myself pulling in more and more of rails and
00:29:16.960
at some point i feel well i might as well just switch to rails and so in the i feel bad for these
00:29:22.960
programmers in these other languages because they don't have the choice to switch necessarily to something as good
00:29:28.159
as rails so i think i think rails actually has a bright future ahead of it because it's
00:29:33.440
shown the ability to adapt and respond to change think about
00:29:39.360
rails 1.2 and the addition of rest and making that the default way that we think about
00:29:45.200
controllers and resources on the web so i think that if people want to use
00:29:51.760
rails to back javascript based applications rails will get better at that and if people want to use it to
00:29:57.679
back mobile applications it will get better than at that but you'll still have the ability to use rails for what
00:30:03.520
it's good at when you need to all right
00:30:08.720
so we've talked about what programming was like in 2004
00:30:14.080
we've talked a little bit about the features of rails that made people want to use it and made it win
00:30:22.559
and we've talked about what could happen in the future what is the what's the legacy of rails and will it
00:30:29.120
be able to adapt so a hundred years ago or actually more
00:30:35.679
than 100 years ago when edward bellamy was frustrated with the way things were going with how
00:30:41.440
society was working he took up his pin and he used his imagination to create a
00:30:47.360
new world this this utopian novel where he could explain how he thought things
00:30:52.399
ought to work now that may seem kind of pointless because it's the 21st century
00:30:58.399
america is not a socialist utopia but that book was incredibly influential
00:31:04.960
in the years after its publication hundreds of bellamy clubs were started across the country and millions of
00:31:11.200
people were inspired by the ideas written in the book and
00:31:17.200
those people and those clubs formed the nucleus of the progressive movement in the early 20th century that broke the
00:31:24.240
trusts and monopolies and ultimately paved the way for social security and
00:31:29.440
the american welfare state so the book did have a huge influence on on the world
00:31:35.919
programming on the other hand is a little more concrete so when dhh was frustrated by
00:31:42.399
how programming web programming worked in 2003 or whatever he
00:31:48.240
was able to do something about it he cracked open his text editor and got to
00:31:53.600
work and built something that people found inspiring and when they saw it they wanted to meet other people who are
00:32:00.159
interested in that and that was the genesis of the rails community and so today
00:32:05.840
uh you know we're all here today because of the rails community and because of what uh
00:32:12.320
what developed over those those last 10 years so i'm really uh really pleased to
00:32:18.000
be a part of that community and really honored to be speaking to you today about that
00:32:24.559
and it's made a huge impact in the direction of my career
00:32:29.760
and i just find it inspiring i find it inspiring that as programmers we can see something that's broken
00:32:35.519
and we can fix it we can create a new reality for ourselves with
00:32:40.640
code and i think that that's a really powerful really powerful notion and we
00:32:45.679
also shouldn't forget the lessons of rails as we do that because rails didn't just win because it was
00:32:51.279
because it was better though i i do think it was it won because of the community around it and because of the
00:32:58.000
the their passion for for telling people about what was so good about rails so
00:33:04.399
most of us probably are not going to write the next great framework um i i i
00:33:10.480
don't imagine that i will but i think that we can take to heart the lessons of rails in our in our own work
00:33:17.200
and in the the libraries that we're writing don't forget to to
00:33:22.240
to try to make things easy to try to make it easy for your fellow programmers and don't forget to tell people about it
00:33:28.880
and and explain why they should use what you've written and i think if you do that you can help make
00:33:35.200
the world a better place thanks
00:34:03.360
you