Episode Transcript
Available transcripts are automatically generated. Complete accuracy is not guaranteed.
Drew Bragg (00:01):
Hello everyone and
welcome to another episode of
Code and the Code Encoders.
Who Code it?
I'm your host, drew Bragg, andI'm joined today once again by
Mr Chris Oliver.
Chris, if someone somewheresomehow isn't familiar with you,
would you please do a briefintroduction?
Chris Oliver (00:16):
Those people are
probably not listening to your
podcast, I would imagine so, butjust in case.
I'm Chris Oliver.
I run Go Rails Education forRuby on Rails developers,
Jumpstart, SaaS Template forRails developers, Hatchbox,
which is a hosting platform foryou guessed it Rails developers,
(00:37):
and I've been recently workingon the Learn Hotwire course with
William Kennedy, which has beenlots of fun, Probably one of
the biggest things I've ever had.
To put together Hotwire andHotwire Native is quite a large
topic, I will say.
Drew Bragg (00:55):
And then, of course,
co-chair of RailsConf, the very
last ever RailsConf, the verylast RailsConf in my hometown of
Philadelphia.
Yeah, you got your wish.
Chris Oliver (01:04):
Yes, yes, it took
a lot of running around the very
last RailsConf in my hometownof Philadelphia.
Yeah, you got your wish.
Drew Bragg (01:07):
Yes, you got your
wish.
Yes, it took a lot of runningaround and annoying a lot of
people, but I got my wish.
Chris Oliver (01:12):
Yeah, philly's a
good city for it.
Yeah, I'm excited.
Drew Bragg (01:16):
Very walkable city,
but we are going to talk all
about that.
The typical show format foranyone not familiar with my show
is I'm going to ask Chris threequestions.
I'm going to ask him what he'sworking on, what kind of
blockers he has or recentblocker he had and how he found
a solution for it.
And I'm going to ask him aboutsomething cool, new or
interesting that he's recentlylearned, discovered.
It doesn't have to be codingrelated, but it can be so
(01:40):
because we have so much to talkabout, especially around
RailsConf, I want to jump rightinto what are you working on?
But also how's the RailsConfplanning going?
Chris Oliver (01:53):
Well, I have two
secret projects I can't talk
about that I am working on.
But Learn Hotwire course is notsecret.
It's basically done, but I havea few videos I want to finish
up.
And then, of course, as we'rewrapping things up, the new
Hotwire Native 1.2 came out.
So then William was like I canprobably get rid of some videos.
actually, yeah, there you goShorten things and I was like,
(02:14):
well, that sounds like a greatthing, that is rare, so we're
polishing up the course.
But in between that andeverything else that's going on
just regular day-to-dayscreencasts for Go, rails and
all that RailsConf.
That's been fun.
I feel like now that we'vegotten through the big stuff
(02:36):
where we get the submissions in,we go through all those, we get
the schedule together.
So we flew in and all as a teamlooked at the rooms and the
layout and nearby restaurantsand all that stuff and just got
a in-person feel for it, becauseyou can look at a map and
whatever and it's not quite thesame as being there.
Drew Bragg (02:59):
No, especially
Philly has very small city
blocks.
Yeah, I feel like I've gone toother Rails comps and Ruby comps
where it's like, oh, it's onlyfour blocks away, that's nothing
.
And then you walk and you'relike, how are we still walking
four blocks In Philly?
It's like four blocks is fiveminutes, it's super easy.
Chris Oliver (03:15):
That was nice
because on the map it looked
like Reading Terminal Market wasa ways.
It looked like it could be a 30,45 minute walk if it was a
different city, but it was supershort to get there and easy.
And the scale of the maps youcan't quite tell Cause you're
like, well, I see blocks and LAblock is different than New York
(03:37):
and Philly, chicago andwherever, so that was a little
strange.
But what's nice is they're sosmall and so you can get
anywhere really easily, reallyfast and stuff.
So yeah, that's fun.
I feel like a lot of theprocess is already in play.
So me joining as co-chair iskind of last minute, right
(03:59):
before CFP opened and stuff.
So they have a lot alreadyplanned.
Picking the venue and stuff wasalready done.
So I get to help with thepicking you and the rest of the
program committee.
That stuff was important sothat we have a good group.
Drew Bragg (04:20):
I'm pretty sure,
because I picked the city I was
in first.
Chris Oliver (04:24):
Yeah, you were in
first.
Drew Bragg (04:26):
I don't know who
else is involved in this, but I
know I am.
That's all I know.
Chris Oliver (04:31):
It's always a
critical part of the conferences
because that sort of dictatesget all the CFP.
Everybody ranks themanonymously.
But when we have to gofine-tune and finalize
everything, that's where yourpersonal preferences and
expertise and what you want tosee, what you think the
community wants to see, whatgoes over well, because you've
witnessed that at previousconferences and that's what we
(04:54):
picked the people.
Drew Bragg (04:56):
There's what six
people on the program committee
yeah, I guess if you're just onthe programming committee, not
including co-chairs.
Chris Oliver (05:03):
Yeah, I guess if
you're just on the programming
committee, not includingco-chairs there's six of us,
which is great.
That's not too small, not toobig.
If it got to be too small ortoo big, it could be unwieldy
either way.
Too much work for too fewpeople or too many people and
they don't agree could be aproblem too, and so I think it
worked out really well.
Drew Bragg (05:24):
I'm really happy
with the schedule we ended up
coming up with and I'm stilllike damn, there are so many
great talks that didn't make thecut.
It's insane.
When I think about every talkthat we looked at, I was just
like I want to go to this talk,I want to listen to this talk, I
want this talk to happen and wedon't have that many slots.
(05:45):
We only have three days.
Can we make it a whole week,since it's the last one?
Maybe Because there's so manygood talks?
But we have a great schedule, Ithink.
Chris Oliver (05:52):
Yeah, it was so
tough because it was like
basically one in 10 submissionswere all we could pick, so that
meant nine out of every 10 werenot able to be selected, which
was hard to whittle them down tothat.
That was really tough, but I'mlooking forward to it.
It's one of those where youknow that you want to go see one
(06:14):
person talk, but then also, atthe same time, somebody else's
talk you want to go to andyou're like conflicted, which is
a sign we did a good job.
Drew Bragg (06:24):
Yeah, absolutely.
Chris Oliver (06:26):
So that's how it's
always been.
How many tracks do we have?
Drew Bragg (06:29):
We have two or three
, three, three.
I want to say three.
Yeah, I think it's three, whichis better.
I've been to ones where thenumber of talks at the same time
was a little crazy.
Maybe, I guess, for videos, forreleasing videos, it's nice to
have that many more videos, butfor attendees, I can't hallway
track and attend the three talksI want to go to while missing
(06:51):
these other three.
Chris Oliver (06:54):
I think three is
very manageable.
Recording the videos is alwaysvaluable, but also I feel like
it's too easy for them to getlost on YouTube or whatever, and
I will say I wanted to go seethat talk and I'll watch it
afterwards, and then you gethome and life's busy and you
forget about it or whatever.
So that's one of the reasonswhy you have to come out to
(07:18):
Philly with us, so you can bethere in person to talk to
people.
Absolutely, and don't miss it.
Drew Bragg (07:24):
Sincerely, though.
There is definitely somethingspecial about seeing a talk in
person, live, having someone sitnext to you talking to them
about what you guys justwitnessed going afterwards out
to the bar or just hanging outin the hotel lobby or whatever,
and there's a good chancesomeone else saw the same topic
and you can talk about it.
(07:44):
Or someone went to a talk thatyou didn't get to go to and you
can talk about it, and when youdo that with YouTube videos,
it's just not the same.
It's too easy to get distracted.
You hit the pause button, youwalk away, maybe you don't even
start it back.
Seeing it in person there'ssomething about seeing it live.
That's special.
Chris Oliver (08:02):
Totally yeah, I
agree.
And also, the conferenceexperience is better when the
conversation with people is notwhat talk did?
You just go see You're actuallytalking about nuanced whatever,
about the thing you justwatched together, so you end up
with deeper conversations andstuff.
(08:24):
I think because of that too andthat's incredibly useful and
valuable that you just yeah,maybe you do if you two happen
to be working on the sameproject or something not quite
the same yeah, I agreed myterminal here says it just
switched.
I think it says 54 days lefttill rails 54.
Drew Bragg (08:44):
54 days.
It feels so close and yet sofar.
Chris Oliver (08:49):
It does feel a
long ways away, but it's really
not Less than two months.
Drew Bragg (08:53):
I've got Podia
Retreat next week, so that's
slightly more of my focus, andthen when I come back, there's
not much more going on betweennow and then, so that'll become
my real focus.
I still owe a food guide toPhilly.
There's so many good places toeat.
Trying to come up with a listis like I don't know where to
(09:15):
send people.
I can tell you where to avoidpretty easily, but telling you
where to go is a lot tougherbecause there are a lot.
I gave a preview list and itwas already a pretty long list,
but Reading Terminal Market isthe only guaranteed thing that
you have to go eat at least once.
If you go to RailsConf whichyou should you got to check out
(09:38):
Reading Terminal Market.
It is an experience.
Chris Oliver (09:41):
There is so many
things there to eat and the only
thing I ever want is those damncookies and a philly
cheesesteak.
But every time I walk in I'mlike there was that turkey place
and whatever else greek foodgoods are so good too, yeah when
brooke and I were in philly foryour wedding, we went to Amada,
(10:05):
which is Chef Jose Garza'sSpanish tapas restaurant, which
was phenomenal.
So if anybody looks for afancier dinner.
That was fantastic.
That's what I'm trying to dowith the list is.
Drew Bragg (10:21):
break it down to
like this is fancy, this is you
can go in with your backpack.
This is fast.
This is not fast.
Chris Oliver (10:28):
This is you have
to take your hat off here, sir.
Yeah, I didn't even know I waswearing it.
This happened in Sin City, rubyin Vegas For anybody that
wasn't there, because I'm alwayswearing a hat of some kind,
because I never get haircuts atregular intervals.
Drew Bragg (10:46):
And then I go oh, I
can't go out in public like this
.
And we went to a very fancysteakhouse and I was wearing my
hat and the first thing the guysaid to us was you can't wear
your hat in here, sir.
I was like oh, this is going tobe an expensive dinner.
Chris Oliver (10:59):
Yeah, I thought
that was hilarious.
The rest of our clothes waslike t-shirts and shorts or
whatever, but the hat did notimprove the overall vibe of our
group.
Drew Bragg (11:12):
I think Irina was
the only one that looked
presentable out of our group,but she always looks presentable
.
So that was a very funconference and also a last
conference.
Chris Oliver (11:24):
So I'm glad we got
to do that one, although I
heard some rumblings that maybeit just needs to be closer to
home or something.
Drew Bragg (11:30):
To be honest, I
think it would lose a lot of its
magic if it wasn't in Vegas.
I think that is part of thedraw.
Even if you're not a gambler ora big crowds person, vegas has
something.
It's really easy to getoutdoors.
We went to Red Rock Canyon onthe Saturday after we went to a
Knights game and we did somepeople watching and a little bit
(11:54):
of gambling just because whynot?
You're in Vegas but got a tonof good food and stuff.
I don't know.
There's not many places quitelike that that you could have a
conference.
So I think, in order to stillbe Sin City Ruby, we need to
stay in Vegas.
Chris Oliver (12:11):
I just like the
size and the vibe where it was
so casual you could heckle thespeaker if you want that kind of
vibe.
To the conference was reallyspecial, I think, and you could
do that anywhere.
To the conference was reallyspecial, I think, and you could
do that anywhere.
It just reminded me ofSoutheast Ruby and stuff that
Jason put on back when it was100 people and just small and an
(12:33):
intimate group of people.
That was special.
Drew Bragg (12:37):
So, yeah, sad that
Sin City Ruby is over, but
hopefully Jason Sweat keepssomething going, definitely
bring it to Detroit so it'll bea different conference, but he
could still do a small gatheringconference and being outside of
Vegas probably will help withcosts of things, because it's
Vegas A little bit, yeah.
Chris Oliver (12:57):
Yeah, you don't
have the asbestos-ridden casino
to have the low prices at.
Drew Bragg (13:05):
Yeah, we won't
unfortunately have a hockey game
for RailsConf, being that it'sin July, but you can go catch a
Phillies baseball game if you'reinto live sports.
Everything in Philly is veryclose to where we're going to be
.
We're going to be center city,perfectly, and nothing's far
over.
Chris Oliver (13:24):
You can see the
liberty bell and whatnot
independence hall.
Drew Bragg (13:28):
We got the art
museum with the rocky steps and
the rocky statue.
If you've ever seen the movierocky, you know what I'm talking
about.
If you don't figure your lifeout, go check it out yeah,
there's so much real close bygood city for it.
Chris Oliver (13:42):
I'm glad that you
convinced them to do it.
Lots of Philly cheesesteaks arein my future, so people are
going to be cheesesteaked out bythe end of it, but it'll be
well worth it yeah, and that'sone of the things that I think
you were the pioneer of wasconvincing us to get people out
into the city for lunch, which Ithink same thing with Sin City
(14:05):
Ruby, and I think that's how itworked in Tropical on Rails as
well.
We all went out on the town andyou got an hour or two hours,
whatever it was, and go actuallyexperience the city a little
bit.
Usually you're flying instraight to the hotel and then
to the conference venue, whichis also the hotel, and then at
(14:28):
night you might get to see alittle bit, but that's about it.
I think that is a reallyawesome call to make to say
let's go experience this city.
We're not all from Philly, somaybe you've never been there
before, maybe you've only beenthere briefly.
This will still be a brief time.
(14:50):
You won't have tons of time toexplore unless you add a few
extra days, but at least you getto go see Reading Terminal
Market.
And what was that brewery wewalked to.
That was fun.
Drew Bragg (14:57):
Victory Brewing,
there's a few good breweries to
eat at and chill and just greatrestaurants.
And yeah, that was somethingthat we talked a lot about at
Ruby Conf in Chicago was Phillyhas so many good spots for food
and I'm not saying that thehotel food is going to be bad,
but it's not going to berepresentative of Philly.
Let's let people go for lunch,let them go to Reading Terminal,
(15:21):
go get a cheese steak, go hangout Rocky Mountain, ruby, blue
Ridge, ruby, sin City, ruby.
They've all done that and it'sbeen one of my favorite parts
about going to those smallerconferences.
You're in this cool town butyou're stuck in this building
the whole time.
I don't want people to come toPhilly and just be stuck in the
Sheridan the whole time.
(15:42):
Sheridan's fine, the conferenceis going to be awesome.
Come to Philly and just bestuck in the Sheridan the whole
time Sheridan's fine, theconference is going to be
awesome.
But there's so much about Phillyto experience, let's get them
out more.
But yeah, to your point of like, if you add a few days on, I
will say like, if you can swingit, you should definitely come
in the weekend before, becausethe weekend before 4th of July
is a Friday, and holy crap.
(16:02):
Ph July is a Friday, and holycrap.
Philly throws a party for 4thof July.
We have the Liberty Bell, wehave Independence Hall, like so
much stuff happening.
Yeah, you have not experienced4th of July until you've
experienced it in a place likePhiladelphia.
So if you can swing it, comeout the weekend before and get
your city in, then it will bewell worth it, I promise it's a
(16:26):
really good point.
Chris Oliver (16:27):
I assume they do
fireworks on the water there.
Drew Bragg (16:31):
Oh yeah, like they
did fireworks fireworks on
Penn's Landing, which is righton the water.
They do fireworks at the artmuseum.
The art museum just lights up.
It's awesome.
There's tons of cool places onthe parkway to to just chill and
watch.
Yeah, it is a huge party.
The whole city is just on fire.
It's great.
(16:52):
Yeah, super cool.
Chris Oliver (16:54):
Yeah, I'm pretty
sure Penn's Landing was where we
were when we were down for NewYear's after your wedding and
saw the fireworks down there.
It was cool.
Drew Bragg (17:04):
They go a little
harder for 4th of July but yeah,
it's similar vibes.
Yeah, Penn's Landing is supercool.
It's a little bit further awayfrom the Sheraton than like a
lot of the other stuff I'msuggesting, but it is a really
cool place to like walk and hangout and be outside and on the
water and that's a great placeto go and hang, especially
middle of the week.
Chris Oliver (17:26):
Water and that's a
great place to go and hang,
especially middle of the week,won't be super crowded.
Yeah, I'm looking forward to it.
I'm trying to think of, likeother stuff that we did for
organizing.
Ruby central does so much ofthat and as co-chairs we're kind
of more for guiding the generaldirection.
We're not dealing withcontracts with the venue,
(17:46):
luckily right.
Drew Bragg (17:47):
Yeah, I will have a
lot more to do as we get a
little bit closer and once ithappens, you'll be on stage
doing introductions.
I'll be on stage doingintroductions.
Someone will be running aroundlike a headless chicken trying
to fix something there will bewater.
Chris Oliver (18:02):
Don't worry, we'll
have water.
Drew Bragg (18:04):
We know we'll have
water, that will not be a
problem ever again.
But yeah, right now it's gethyped because it's coming and
it's going to be awesome andsuper exciting.
So many people are coming, likeeven people that we haven't
seen in a few years.
Just for whatever reason, theydon't go anymore, or this, that,
the other thing.
Chris Oliver (18:23):
There's a
deliberate effort put into
bringing people who have beenhistorically part of the
community and making sure thatthey are very encouraged to come
back and celebrate as the lastrails conference stuff.
So I'm loving the theme that welanded on of the past, present
(18:44):
and future of Rails, and there'sso much cool stuff to look back
on.
I always forget this.
When was the first year ofRailsConf?
Drew Bragg (18:53):
RubyConf was 2006,.
Right.
Chris Oliver (18:56):
It doesn't look
like there was a 2005.
Drew Bragg (18:58):
Well, that's when I
mean 2005 is basically when
Rails came out, so that'd be alittle crazy to so.
2006 must have been the firstone Almost 20 years.
Chris Oliver (19:11):
That's pretty wild
, you know.
What's fascinating is how muchhas changed in 20 years and all
the people that have come andgone and been a core part of the
community, and then they moveon to something new.
And it's been fascinatingbecause we haven't even
experienced all of that.
We've only been around since westarted and so there's quite a
(19:34):
few years that we missed, andprobably dhh is the only one
who's experienced all of it.
We're really early crew, liketoby, so yeah, I think it'll be
fun, like aj's keynote ofkeynotes that's gonna be great.
Yeah, the keynote of keynotesit's stuff like that, you start
reading the cfp for it andyou're like, oh, this is sweet
(19:56):
can't wait.
Drew Bragg (19:58):
I think we did a
really good job to balancing
those types of talks the pastand maybe a little bit of the
future.
Celebrating rails, maybe notcompletely from a technical.
We have good ones that go intosome of the technical aspects
while still being a past,present, future theme, but then
also just having really goodtechnical talks that people are
(20:20):
going to walk away learningstuff from.
Chris Oliver (20:23):
Yeah, we were all
very deliberate about choosing
technical talks this year.
If you had to choose betweentwo, you'd pick the more
technical one.
In general, I think, as what welanded on which is good,
because that's what I've feltsometimes in the past I wish we
had more technical, deep divesinto internals of something or
(20:43):
other, and that I think welanded on really well but also
those that are looking back onin interesting ways of like
what's the retrospective ofactive resource?
That was a thing, that it gotremoved, why?
And talking about those thingsand all the stuff that the
community as a whole has learnedover the years, that's really
(21:06):
valuable.
Webpacker was a cool idea at atime, but now it's not.
And thinking about where wasthe community at the time, what
was the problems, and that was asolution.
It didn't last, butunderstanding the progression of
things and how it went helpsyou think about how things will
(21:28):
go in the future.
What do we need?
What's next?
Where do I contribute?
Yada, yada.
So I like that stuff a ton andI'm excited for those just as
much as I am for like thetechnical talks on how to do X,
y and Z with, or how theinternals of this feature in
Rails works Always like those itwas very, almost clear once we
(21:53):
started really picking andchoosing the technical talks.
Drew Bragg (21:56):
That's going to be a
great one for a beginner, a
junior, someone maybe newish toRails, to come in and go.
I don't actually know how touse this.
Well, I can go to this talk andget a really good primer on it.
Next step up of a little morecomplex, a little bit more of a
deep dive and then we have thereally hey, what's going on
under the hood?
(22:16):
How does this thing actuallywork in Rails and what are all
the design iterations thathappened to get us here?
What are all the designiterations that happen to get us
here?
So it's like something foreverybody on the technical side.
Really fun talks around thosetechnical bits.
It's such a good schedule.
I don't mean to harp on it somuch, but I'm really excited.
(22:38):
Like I'm a hallway track guy,that's usually what I do at
conference.
I maybe go to one or two talksand otherwise I'm in the hallway
.
This time I'm like I'm gonna goto so many talks.
There's so many good ones.
Chris Oliver (22:51):
Yeah, it's going
to be hard to balance.
I'll probably do my usual oflike I really want to go to this
talk, but I know I can watch itlater.
Drew Bragg (23:01):
Well, your biggest
problem is you are a celebrity,
so you walk down the hallway andpeople go hold on.
I want to talk to you.
I'm slightly less of acelebrity, so I don't have as
much of that.
Chris Oliver (23:11):
It is strange, not
a celebrity anywhere else For
the three days or whatever, I'ma celebrity.
It's kind of weird.
I always get the most out ofthat because that's the
friendships that, like yo, afterthe conference, let's hop on
Zoom and dig deeper into X, y orZ that we were talking about
and just build those longfriendships.
(23:32):
I have to default to doing that, but that's been so much fun
because, yeah, it's made so manygood friendships.
And here I am, went to thisguy's wedding.
Drew Bragg (23:42):
And that's also how,
essentially, how Remote Ruby
was born.
It was just you and Jason inVegas.
Chris Oliver (23:49):
And here we are.
Yeah, but yes, totally.
It was exactly that how we met.
Andrew just hung out at ourtable one year, and then jason
and I just randomly met at railsconf even though I didn't go
and right, yeah, so it's afitting city.
I feel like chicago could havebeen a fitting city for the last
(24:11):
one if it wasn't just yeah, wejust did ruby conf and we've
never had one in Philly.
Drew Bragg (24:18):
None, neither, no
Rails, no RubyConf has ever
happened in Philly, which is acrime.
That was my whole platform whenI was running around, so we're
going to fix it for the last one.
Chris Oliver (24:29):
Yeah, the only
reason Chicago would have been
cool is just to full circle backfrom the very first one, being
in Chicago.
But the actual location doesn'tmatter that much.
Philly is going to bephenomenal.
That's the thing.
Just find a great city to be inwhere people will have fun
(24:49):
together, and that's it.
So yeah, I still think abouthow much fun Ruby comp San Diego
was on the resort, sitting bythe fire pit.
I could have just done thatalone for three days.
Hang out by the fire pit.
You find the spot with theright atmosphere or whatever,
and that's it.
Just get people together,they'll have a good time.
Drew Bragg (25:11):
The people are what
make it great, no matter what
the location is, and there'sgoing to be so many people there
(25:41):
to celebrate.
Chris Oliver (25:41):
We have great
speakers, but the additional
guests coming because it'sRailsConf it's going to be a big
one and it's going to be a bigparty and I am super excited to
have everybody and go through it.
And I think it's probablyhelpful for Ruby Central to just
do RailsConf this year and thenthey're down to one to focus on
.
If you or your employer wantsto sponsor, I think they'll
still happily accept newsponsors.
So reach out to whatever emailaddress is for Ruby Central.
(26:03):
I'm sure it's on therailsconfcom website.
That's been incredibly greattoo, because I think you were
part in saying Power HomeRemodeling is a big company that
uses rails here in Philly.
Drew Bragg (26:20):
Huge company does
rails.
Chris Oliver (26:22):
They were excited
to get involved in everything.
And that's another cool thingis the conference can be in a
city like Philly and then it'slike well, what are the cool
rails shops here that we couldshow off or whatever and support
, and I think that's special.
It's another really cool thingand hopefully, like the
(26:43):
traveling circus, gets to go toevery small fun town.
I'd love people to come to stlouis or kansas city again at
some point.
Drew Bragg (26:52):
So you gotta get on
ruby central and let them know
you want to help make it happen.
That's what I did.
I was just annoying to thepoint where they couldn't ignore
me anymore and then I have aphone call from the director of
Ruby Central.
I'm like there's only onereason why this guy is calling
me right now, and it was to tellme that they were doing it in
Philly and I was jumping on mycouch and freaking out my dog
(27:13):
and it was.
I was pumped.
I'm excited to have one.
I'm a little bummed in a way,because I do really like going
to a new city and traveling, andgetting to go to Denver was
super cool, and every time it'ssomewhere new, I'm like cool, I
get to go experience the city.
I get to go find out this placethat I probably wouldn't have
gone to otherwise or may nothave had the opportunity to.
(27:35):
So this is a little weirdbecause I'm like I'm in Philly
like every other weekend, soit's not really that, but I get
to impart some of my like yeah,I'm in Philly almost every other
weekend.
So here's something cool,here's a great place to go
climbing, here's a great barcadeor whatever it might be.
Chris Oliver (27:53):
You got your
rental tour bus and you can take
us around town and give us thefake history of Philly Sure.
Drew Bragg (28:02):
Yeah, this is a
place where I did that.
This is where my boot camp was.
It's not there anymore, butyeah.
Chris Oliver (28:10):
In general,
organizing the conference as a
co-chair has been very easybecause UFUK and the Ruby
Central team know what they'redoing, so I've been able to
contribute my opinion wheneveruseful and stuff, and yet I
haven't had to get into theweeds of anything.
(28:30):
Really, I feel like they'vegotten so much organized, so
much done.
All of the reaching out topeople and saying here's the
process, you accept your talkand then this happens If you
want mentorship or advice onyour talk, here's how to sign up
for that and whatever.
There's so much stuff donealready, which has been amazing
(28:54):
because it's a lot of work toput on one of these conferences.
There's I don't know how manypeople working on this and I'm
just glad I can help, you know,wherever I can, and we just want
to make this as best of thefinal RailsConf as we can.
But also I'm like geez, thankgoodness you didn't just dump
(29:15):
this all on us, because I don'tknow how we would end up doing
it all.
It's wild.
Drew Bragg (29:19):
Yeah, that's
something I'm really excited for
from Ruby Central is their newinitiative to support regional
conferences, since they won't bedoing two conferences.
They've got the resources tomake conferences happen.
They've got all this experiencemaking conferences happen.
There is a lot more regionalspopping up, but it's hard to put
(29:40):
on these conferences.
It takes a lot of time andeffort and there's a lot of risk
and liability and if you'venever done one before, it can be
daunting.
So to have something like RubyCentral be able to come in and
help you with so much of thelogistics, so much of the here's
what you need, here's yourchecklist.
Here's how we can help.
That's going to be such a greataddition to the community and
(30:03):
help so many more regionals comeup and actually happen and not
just be someone's dream tosomeday host this thing and not
lose a ton of money for theorganizer that too.
Yeah, I won't have to get up andbe an auctioneer.
Chris Oliver (30:15):
That was such a On
the organizer.
Yeah, I won't have to get upand be an auctioneer.
That was such a On the spot.
I am so happy that worked outso well at Sin City Ruby,
because you hear from prettymuch everybody who's tried to
organize their own conference.
They've lost thousands ofdollars every time.
That's not going to get them tocontinue going forever.
It's got to be sustainable andI'm sure they don't care that
(30:39):
much to make a ton of money fromit.
They just want it to besustainable.
They don't want to lose five or10 grand or whatever just a few
days to hang out with friends.
Drew Bragg (30:50):
For sure.
Chris Oliver (30:50):
So that kind of
stuff is really useful, whether
it's advice on how to deal withcontracts or what venues to look
at, or whatever it is.
That stuff alone will save yourbacon.
If you ever think about doingsomething and want to, I'd love
to do something here in St Louisor somewhere around here at
(31:11):
least, and I would definitelylook towards that because, yeah,
here at least.
And I would definitely looktowards that because, yeah, I'm
sure, if I knew somebody who isan event organizer or whatever,
but, like you know how expensivea wedding is and it's like
conferences that, if not more,if not double, good lord, yeah,
it's too much of a gamble andthat's what you're trying to
(31:31):
mitigate.
There is, make it sustainable,make it something you can do
every year, or at least not losea ton of money.
Right, right, yeah.
Drew Bragg (31:41):
Yeah, so I am very
excited for Ruby Central to
start doing that in addition toeverything else they do.
I definitely, early on in mycareer, did not have a great
appreciation for Ruby Centralbecause I didn't quite
understand their role in ourcommunity.
And now that I'm a lot moresenior and I see what they've
done, I've peeked behind thecurtain and I know how much
(32:04):
easier my life is because ofthem.
I'm so grateful for them andeverything they do.
Chris Oliver (32:10):
Same.
Couldn't agree more.
I'd hear the name Ruby Centraland stuff, and then you can go
to a conference or see videosafter RailsConf.
It's not RailsConf by RubyCentral, it's RailsConf.
I didn't even put two and twotogether for the longest time
for that reason too, and I waslike whoa, I'm glad to help
(32:33):
support as much as possible nowbecause I had no idea what they
were doing for us as a communityand stuff.
So agreed wholeheartedly andencourage everybody else to
support, attend the conference,stay at the conference hotel.
Those things were littledetails that we wanted to make
sure we emphasize this year too.
(32:55):
Because I'd go to a conferenceand then it's cheaper to stay
somewhere nearby and whenbudgets were tight I was like,
well, I'm going to have to dothat.
But at a certain point I had noidea that the conference has a
contract with the hotel to sella certain amount of rooms and
food and beverage and stuff likethat.
(33:16):
They are having the conferenceat a hotel because they're
trying to sell hotel rooms.
So you actually help supportthe conference a lot if you stay
at the conference hotel.
I never knew that until somebodymentioned it offhand.
I was like that makes so muchsense, but why did it never
(33:36):
cross my mind until now?
And it's funny how those thingsyou could probably take for
granted easily If you've been onthe team at Ruby Central
organizing conferences yearafter year.
That's just how it works.
As attendees, we have no ideawhat goes into it.
Half the time I had no idea howhard it would be to rank 250
(33:58):
talks against each other.
That was exhausting and sotough.
Drew Bragg (34:03):
And it's so
important for Ruby Central not
to lose money on the conferences, not just because like, oh hey,
we want a good conference andwe want it to happen more, but
when Ruby Central makes moneyoff of a, a conference which,
let's be clear, like theseconferences, are fundraising
efforts.
These are not marketing eventslike maybe rails world is more
(34:23):
of like a hype train, get therails foundation loses money on
this, but that's sort of thepoint.
This is a fundraising effortfor things like ruby gems and
bundler and things we use everyday and the security of those
things and the performance ofthose things.
That's very easy to take forgranted.
We used to use curl requests todownload someone else's Ruby
(34:47):
code onto our system.
That's the pre-RubyGems days.
I don't want those dark agesanymore.
I don't want to have to thinkabout oh, what if one of these
gems that I rely on is hijacked.
Ruby Central takes care of thesecurity.
They make sure Bundler worksand works really well and fast.
But they need to make money onthese fundraisers which are
(35:08):
conferences.
Yeah, so get the hotel room,talk to your boss, get them to
pay for the ticket.
Chris Oliver (35:14):
That's, I think.
Another helpful thing toconvince your employer to send
you to RailsConf or RubyConf isyou are going to get an awesome
experience at the conference,make friends, learn tons of
things, have people that you canreach out to afterwards because
you met me or Drew or anybodythere and we talked about some
(35:37):
interesting issue you have atwork.
We would love to help out.
If there's any advice we couldgive you or whatever after the
conference and stuff.
There's that which is sometimesa little bit hard to convince
your boss that spending money sothat you don't work for three
days or, realistically, morelike five days, because if the
conference is Tuesday throughThursday, then you're traveling
(36:00):
Monday, traveling Friday, youlose a full work week.
So that's kind of tough, Ithink, as a sell sometimes for
employers, but also telling themthat not only are we going to
learn a bunch while we're thereand be more involved in the
community and have more supportfrom the community, but we are
also supporting RubyGems andBundler and the longevity of
(36:24):
that is awesome and, I think, agreat way to think about it too.
Every piece of this.
We are just supporting thefuture of Ruby in general, which
is critical.
We get so much from bigcompanies like shopify and
github and whatever, but likeyou don't want to be dependent
(36:46):
on just one or two largecompanies, from sponsoring and
stuff, like the individuals, thesmall businesses and all of
that are what really keep ussustainable, because if one God
forbid goes out of business orwhatever, there's still plenty
of people there to support andwhatnot.
And then maybe new startupsspin up on Ruby and Rails and
(37:08):
they give back and whatever.
That is what keeps it going andkeeps it from being a rocky
situation where you don't wantthem to be on the brink of Like
during COVID I'm sure it wasimpossibly hard to work through
for the events and that is alsofunding the future of Ruby Gems
and Bundler and all that.
So scary situations like thatcan be mitigated by us all
(37:33):
supporting them.
Drew Bragg (37:35):
You're right, it is
a bit of a tough sell to your
boss.
A good way potentially to frameit is especially early on in my
career.
I got so much benefit fromattending, not just because I
would go to a talk and I'd learnsomething, but it's kind of
like learning a differentlanguage.
The best way to get better atthe language that you're trying
(37:55):
to learn is to go to thatcountry right, be completely
immersed and surrounded by it.
A lot of us are remote workers.
Maybe we don't even have thatlarge of a team, but even if we
do, it's a lot of slackconversations and not in person.
But you get to come to this inperson.
You get to talk to people aboutwork, adjacent things.
(38:15):
I always left Ruby and RailsConfearly in my career like so
excited for my next week of work.
I want to write more Ruby, likeI want to get better at this.
It was such a careeraccelerator for me early on and
now it's just such a great wayof now I know this person.
Now I know that person.
I was introduced to this.
I've texted you or Jason Sweatout of the blue like, hey, I'm
(38:38):
not bothering one of mycoworkers with this.
Have you ever had to do this.
Point me in the right direction.
We don't need to have afull-blown conversation, just
point me in the right direction.
That kind of stuff is sovaluable.
It's not, oh go and you'll geta job because of the networking.
It's like, no, you go andyou'll get resources.
Because of the networking,you'll meet people who have
different experiences in you anddifferent expertises in you,
(39:01):
and that's going to make you abetter developer, which is going
to benefit your company in thelong term.
Chris Oliver (39:07):
Totally.
Every single conference I comeback from I'm fired up.
I always am like I should gobuild that thing that I've been
wanting to for a long time andit always gives me so many good
ideas of like, wow, I could goback and refactor this or that
or have a new approach for thisother thing.
(39:28):
And it's always intangiblethings.
You can't come into RailsConfor RubyConf knowing those things
specifically will happen.
But they will.
They will be randomconversations that you end up
talking about namespaces orwhatever and you're like, oh, I
think that could fix our wholemajor issue of our architecture
(39:51):
at work on this problem.
You never would have known thatthat was going to be what you
walk away with.
But those are the invaluablethings that you can go get all
this knowledge dump fromhundreds and hundreds and
hundreds of other Rubydevelopers and that is all over
three days.
And you come back home andyou're like I need to build a
(40:13):
Ruby gem for this thing and wecan refactor this at work and
yada, yada.
That alone, I think, is worththe price of entry, the
rejuvenation being in personwith people work remotely too
much Just me and the dog for waytoo much of the day, every day,
so I'm excited.
(40:35):
I can't wait.
It's only 54 days away, aswe're recording this, at least
as we're recording this.
Drew Bragg (40:41):
It'll be even closer
once it is released in june, so
yeah, get your tickets.
Get out there, come visit uscome say hi, visit philly, it'll
be great.
Chris Oliver (40:53):
And we will have a
podcast Podcast panel.
Drew Bragg (40:56):
Yeah, so yeah, you
can come see this nonsense
happen live, raw and unedited.
Cause Paul does an amazing jobmaking us sound so much better
at this than we actually are.
Chris Oliver (41:09):
That was fun.
Paul actually came to RailsConfin Atlanta, atlanta, yeah.
Drew Bragg (41:15):
Yeah, that was great
to meet him.
I was still pretty new at this.
He gave me a big hug and I usedhim for like five episodes at
that point, but he was alreadylike his really great friend.
He was just such a cool dude,Always had unsolicited but great
advice, and I'm like I don'tpay you enough for everything
you do for me for this podcast,for this show.
He's so great.
Chris Oliver (41:36):
Yeah, shout out
Paul and his wife the best.
Yeah, we got very lucky withthem.
But yeah, also, that's a goodtime to come out and if you want
to start a podcast, come ask usquestions.
Whatever, the more podcasts thebetter.
Drew Bragg (41:51):
Absolutely.
There's so many people tointerview and so many topics to
cover and this show is so muchdifferent than remote ruby,
which is so much different thanthe ruby on rails podcast, which
is different than the bike shed, and I could just keep naming
podcasts all day, but likethey're all just a little bit
different enough that even ifthe guest is the same, the
(42:12):
content ends up being differentconstantly listening.
Chris Oliver (42:17):
It's like school.
You'll really latch on to acertain teacher at school
because the way they explainthings really fits how your
brain works, or whatever.
Same thing goes with podcasts.
This person I really reallyunderstand and like and whatever
.
So there's always room for more.
I think the more the better,especially in a community like
(42:38):
Ruby that is decently sized butstill tiny compared to
JavaScript and even probablyPython at this point, because
Google and the Python communitythere is pretty massive.
We need to spread the word ofRuby more and so if you want to
do any of that, we'd be happy tochat and help you get launched
(42:59):
or whatever.
Whatever it is.
Drew Bragg (43:02):
Yeah, I sort of know
what I'm doing now.
I've done this a couple oftimes.
Chris Oliver (43:06):
Your 50th episode
came out today 50th episode will
be next week.
Drew Bragg (43:10):
As I'm recording
this, may 20th will be my 50th,
actually closer to my 60thepisode, but like live at rails
world wasn't a full episode liveat rails comp, for you know I
had a few bonus episodes, solike they count.
So I'm technically over that.
But like that's the 50th, thetitle is episode 50, Adam
(43:32):
Fortuna.
So yeah, that is the 50th it's abig milestone, man congrats
yeah it's cool, I never shocked,I hit it what's your release
schedule on those can't?
Remember, I try to do it twicea month, sometimes life gets in
the way like well over a year,then it's longer.
So when I started I was once amonth and then I went to twice a
(43:56):
month and I've missed a monthor a week here and there because
, like remote ruby, especiallywhen it was the three of you
like one of you drops, you'vestill got a show, two of you
drop.
As long as you have a guest,you still have a show.
For my show it's me and whoeverI have coming on, I have to be
available, and then I also haveto have a guest.
(44:18):
So there's been misses here andthere.
It's not as easy without aco-host, but I also am not
organized enough to instill thison anyone else.
Chris Oliver (44:27):
It's so much
harder to coordinate once you
have co-hosts so yeah, butthat's amazing man.
Co hosts so yeah, but that'samazing man.
It's the hamster wheel that'seasy to like.
I don't want to do this thisweek and you don't have anybody
else expecting you to be there,unless it's a guest that you've
scheduled.
So then you're like maybe I doskip this week and it's the
(44:49):
grind.
It's the same grind as you gotto get to the gym or whatever,
and take your medicine, whatever, all those things that you're
like I have to do thisconsistently, and what is most
important is that I do it.
Not how good was this episodecompared to the last one?
Was it better?
That doesn't matter.
You just got to be thereconsistently and then magically,
(45:11):
they end up getting better allthe time.
Drew Bragg (45:13):
I had to listen to
one of my earlier episodes
because I was trying to remembersomething and I was just like,
good Lord, is that what myepisodes used to be like?
What the heck it was terrible.
And it also used to be a veryexpensive hobby because I paid
for this and paid for Paul andall this stuff.
And luckily now Honey Badgerand Judo Scale are amazing
sponsors and sponsor the showand let me do it without my wife
(45:34):
going you're spending how muchon this stupid hobby now.
So, yeah, I thanks, paul thankyou for making this so much
thanks josh and ben and yeah andadam and big time thanks.
well, I also get to thank adamat least once a month when I get
my automated Judo scale emailfor Podia and it's like you
(45:56):
saved this many thousands ofdollars this month and I go
thanks, adam, because that meansPodia has more money to send us
to in retreats or something.
What an awesome product Judoscale is, and Honeybadger too.
It's.
Just Honeybadger is a littlemore less about.
Here's how much you saved andmore of like.
You get to catch this exceptionearlier and fix it and save
(46:18):
yourself money by not havingdowntime, which is great.
Chris Oliver (46:20):
Well, and you guys
, being a platform like that,
something like Judo Scale ispretty much invaluable, because
you don't know when somebody isgoing to launch a major sale or
something.
You do know when Black Fridayis coming up, but you don't know
how big Black Friday will be,so judo scale really saves your
(46:41):
bacon, I'm sure.
Huge Like insane.
Drew Bragg (46:44):
That's great, big
time, big time.
But continuing with the episodeas it should be blockers.
I know you have secret projectsthat we're not talking about.
Is there any blockers that youcurrently have or anything from
like the Hotwire course that youwant to talk about?
Chris Oliver (47:02):
I've got three or
four, maybe five lessons on
testing for the Hotwire coursethat I want to do and those are
tricky because of it'sJavaScript and system tests suck
.
Drew Bragg (47:16):
Yes, they do.
Chris Oliver (47:18):
Recently.
I can't explain this either,but recently the test suite for
Jumpstart Pro failed with onetest, but it just became
consistent all of a sudden, andit was because our fixture used
the password as password,obviously, and that was in some
(47:38):
data breach, of course.
But apparently the data breachincludes that email and password
or whatever combo, which islike tested exampleorg or
something.
And so now the test suite runsheadless Chrome.
It takes a screenshot.
When it fails, it goes andfills out the login, submits the
(48:01):
form, and then it's waiting forthe next page to show the
dashboard or something.
Well, that never gets there andthen it takes a screenshot.
Here you go, this is what wegot stuck on, and it's like the
empty login page and it nevershows, because this is one of
those like browser modals thatshows up when you log in and
it's like, hey, we found yourpassword in a breach recently.
(48:23):
That doesn't actually show upin headless Chrome at all.
There's no way to turn it offeither.
So I've been like, yeah, screwsystem tests, but for something
like the Hotwire course, if youwant to test turbo frames or
something like that, you reallyneed to do that, because if you
don't wire it up right, it'llwork, the request will work, but
(48:46):
it might not grab the framefrom the next page because that
might be missing and you need tothen check for the JavaScript
to insert content missing orwhatever, add an error to the
console or whatever.
So I want to talk about some ofthat stuff, but also there were
some really cool little detailsthat I want to get into in the
(49:06):
weeds a bit, where if you'reusing Hotwire and you're using
things like TurboStream, fromwhich basically on the page load
will then use a web componentto connect to the Action Cable
channel, what's really cool isthere are test helpers for that,
so you can load it in theheadless browser, but you're
(49:27):
doing automated testing, so it'srunning as fast as possible,
which means the page will loadand then you will do stuff
before the WebSocket actuallyconnected.
So the test helper is actuallyreally slick.
It looks for all of those tagsin the HTML and then just waits
until the connected attributeappears on them.
(49:47):
So then that ensures that everysingle one of the TurboStream
source tags is weighted untilit's actually connected on the
back end.
So if you want to test abroadcast, you just add this
little one-liner and it looks alittle bit like magic, but we'll
go into the internals and showyou how that works and it's like
(50:07):
, oh, I could have written thatmyself.
I don't have to thank goodness.
But now that I actually seethat the implementation of this
method is like one line, threelines of code, something tiny
you're like, oh, this is cool.
I can use this now to thinkabout how to write my own tests
for my own stimulus controllersor something that pattern you
(50:30):
learn from that teaches you waysto write your own custom
stimulus controllers or otherweb components or whatever in a
hotwire manner.
I just need to sit down andhave some time to record those,
hopefully next week.
I said that the last two weeksand personal family stuff has
come up and allergies have beenkilling me and other things, and
(50:50):
so I've been a little behind.
But it's awesome.
You look at the source code forsome of the stuff in Rails and
you're like there's no waythat's as simple as that is, and
sometimes that's the case andit's like it's actually quite
complicated what this one littlething does.
But other times you look at thetest helper and you're like,
are you serious?
It just looks for these tagsand waits for the connected
(51:13):
attribute to show up and then itcontinues and that's it.
Oh, that's cool, that's reallycreative.
I don't have to put a stupidsleep five.
We've done that before.
I'm sure all of us have donethat at one point or the other,
and that's okay as a solution.
But if it ever runs faster thanfive seconds, which it always
(51:34):
should generally this way isjust more or less going to pull
until that shows up, and so thenit's still going to be as fast
as possible, which you alwayswant your test suite to be as
fast as possible, especially thedang system tests that are slow
.
So I'm very excited to dig intosome of that stuff.
(51:55):
I just think that half thebattle with Turbo is
understanding the mindset youneed to be in and then
understanding those littlenuances of oh, this is how I
should think about it.
Can take it from being thisframework where you're like I
don't know, I feel like weshould switch to Inertia and use
React and whatever else.
You see that all the time andit usually comes from that where
(52:23):
they don't fully understandHotwire and how it's implemented
and how to work with it, and sothe easier thing is all just to
go throw it away and usesomething else, and that's not
how you should approach it.
If you run into a challenge,this is your opportunity to
understand how it works and whyit works that way.
But that can be tough unlessyou have someone who knows how
to give you that answer, becausesometimes you can look at it
(52:43):
for a month and still be like Istill don't know how the hell
this works.
So yeah, my goal is to do that.
Talk a little bit about thecontroller test too, which have
some.
They have some value too,because you can write those way
faster.
If you were just doingsomething where it's, I submit a
form and then I like replacethis thing on the page, replace
(53:05):
the form with a new, fresh copyof it, for example.
If that's all you're doing,don't write this freaking system
test for it.
Just ask the response.
Did you include a TurboStreamtag for a replace or an update
or even a visit or whatever?
And the thing that's blockingme lately has just been going to
sit down and write those sortof examples to show off and then
(53:29):
record it 15 times until I getit right, and then if you sit
that project down for too longand you try to come back to it.
It's been two or three weeksnow.
It's hard to come back to thatand remember where you were at
and the little details and like,oh, I was going to do this and
(53:51):
that and whatever, and I hadn'twritten it down and it was in my
head in fine grain detail atthe time but I didn't write all
those thoughts down.
Drew Bragg (53:59):
Yeah, it's dangerous
to leave things in your head
without putting them down insome way.
Yeah, done that before.
We're releasing a new soon TMin air quotes, soon releasing a
new checkout flow at podia and awhole bunch of back-end stuff
is changing like really bigarchitecture changes and we want
(54:20):
to make sure like this newcheckout's good.
So I've been tasked with kindof writing an automated test
suite for it and whole man, it'sgot to be system tests.
There's so many differentmoving parts and components and
things have to change.
When you select different plansfor a thing.
What if you already have it?
What if you're a customer fromthe EU?
(54:41):
Are we applying VAT taxcorrectly?
What if you're in Canada andyou've got two different tax
lines and with a discount?
So much stuff.
And then, of course, does itwork with Stripe?
Does it work with PayPal?
Can?
And then, of course, does itwork with Stripe?
Does it work with PayPal?
Like, can you actually purchasethe thing?
It's been a lot.
So when you're like systemtests suck, I was like, yeah,
yeah, I know, trust me, I knowthey're super valuable.
(55:05):
We've caught so many good bugswith it Stuff that just no one
had tried this combination in aminute.
We didn't realize it broke whenwe did X, y or Z.
Now this combination in aminute.
We didn't realize it broke whenwe did X, y or Z.
Now we've got an automated test.
We'll know if we break it again.
We were able to fix it, findother things.
We've caught a lot of edge casesof like hey, actually if the
server takes a while to respondand we do something while this
(55:26):
form is submitting, we don'tactually disable that button.
If we hit it too fast, weirdshit happens.
I wouldn't have found that if Iwas just clicking around.
I wouldn't have clicked thatfast.
But the test runs fast enough.
It's like oh, once thatbutton's able to be pressed,
press it.
But we didn't disable it whilewe were submitting this other
form.
So the tool just tests, justhit the button, whoa, this
(55:47):
coupon wasn't applied or thistotal wasn't correct, and that
kind of stuff has been supervaluable to catch also.
So it's like they're a pain inthe ass, but they are pretty
freaking valuable if it wasn'tso hard to debug them.
Chris Oliver (56:01):
that's still
probably the biggest issue with
them it's doing stuff.
I can't see it because theother half of it is like well, I
can pause it after a requesthappens, but I can only inspect
the HTML in the browser.
I can't see it unless I switchto non headless Chrome, and
that's sometimes just soannoying because you're like I
(56:22):
need to see what the hell ishappening and slow it down, and
then sometimes you'll slow itdown and then it works and
you're like wait, what theflakiness is the worst.
Drew Bragg (56:32):
Yeah, I've been
using playwright because of the
flakiness that we were gettingfrom selenium, and playwright
has video recording built in sowhenever I'm like oh, this isn't
working correctly.
I can just rerun the test withthe record mode turned on.
To be fair, these are notactual tests, because I can't
get stripe to work in our testenvironment so this is actually
my development environment andit's just using Playwright as a
(56:56):
browser automation tool, callingit a test, and my assertions
are just basically my own littleconcoction, but the record mode
is super cool.
Chris Oliver (57:07):
You reminded me
because I was going to say
something when you were talkingabout payments.
I had really nice tests forsystem tests back when Stripe
was like the card element andthat's all there was.
But then I tried to keep thatgoing when we moved to like
Stripe checkout and checkout isembedded but it depends on the
(57:32):
configuration of your Stripeaccount what even shows up.
And then there you change theUI every few months and I was
trying to keep that going.
And then for Jumpstart, we havepeople in the EU and whatever,
and it's defaulting to ideal orsome other payment method or
something that we don't evenhave here.
(57:53):
So I can't even write myfreaking tests to do that.
And I was like, yeah, screw it,this stuff, I will run through
manually and trust that.
And at this point the embeddedStripe checkout is simple enough
.
If I know that we created as aStripe checkout session with the
(58:13):
right arguments.
That's all I need to know,because literally we hand it off
to the JavaScript and theyredirect us when it's done and
that's it.
There's not much for me toactually test anymore.
It would be nice to have a fullend-to-end situation going
there, but now I can more orless just trust that, yes, our
JavaScript is like nothinganymore, and I've manually
(58:37):
tested it.
No, it still works.
And then the system tests canmore or less go away, because
the unit tests or controllertests can just, hey, let's stub
out this request to the Stripecheckout session, and if it
works, it works good.
Drew Bragg (58:52):
We have a lot of
those too, but there's just
something about you really needmore than we do.
There's so many extracomplicated steps of like.
The creator has created thistype of product.
Chris Oliver (59:02):
We want to make
sure that you can click the
button go to this screen.
Drew Bragg (59:07):
They fill out this
information.
So much stuff changes.
You can do PayPal checkout orStripe checkout.
If it was a little simpler surewe could just do a controller
test for it, but you've got alot of complexity because you're
the platform level and one-timepayment plan subscriptions.
Chris Oliver (59:25):
Uh yeah, it's a
lot it's a mess and it's one of
those things that you thinkwould be so much simpler or have
been figured out by now thateverybody needs to accept
payments.
Why isn't this just easy?
It's like well, it turns out,the payments global payments are
an absolute nightmare.
If you only wanted to acceptcredit cards, it's actually not
(59:48):
too bad.
That's pretty much been solvedby Stripe forever.
But now it's.
That's pretty much been solvedby Stripe forever.
But now you got to deal withtax and shipping addresses and
whatever else.
And then, yeah, you want toaccept such and such.
Well, it's like a confirmationthat takes two days for the bank
to approve, or whatever.
And it's like so we just putyou in limbo for two days, I
(01:00:11):
guess, and then provision youraccount later.
Or we do it now and then werevoke it in two days if it
guess, and then provision youraccount later.
Or we do it now and then werevoke it in two days if it
doesn't actually go through.
And then so many of thosethings are like well, either we
have to decide as a platform howthat's going to work, or we let
the customer decide.
And then, if we let thecustomer decide, we have to
support both options and testagainst both options, and then
(01:00:32):
you end up with so muchcomplexity, which that's exactly
what you have to deal with as aplatform like that, because
you're trying to serve everybodyyeah, everybody all over the
globe and so many configurationoptions.
Drew Bragg (01:00:47):
But yeah, it's, it's
nice to have it, it is, it's
been good been fun.
Chris Oliver (01:00:51):
It's good job
security, for sure.
Drew Bragg (01:00:54):
Yeah, I'm uniquely
positioned at Podia now.
I'm the one and only personwith an automated test suite for
our checkout because no oneelse can run it.
I'm working on that, getting itso that everybody can run it,
but right now it kind of isdependent on my developer
environment.
But baby steps, baby steps,fixing all the bugs I've found
thus far.
So those would be cool.
(01:01:16):
Tests and videos will be good.
The wrap-up question, myfavorite.
You've had some good answers tothis in the past.
What is something cool, new orinteresting, other than your
Hotwire course, of course, thatyou've recently learned,
discovered, built, created, readanything?
Chris Oliver (01:01:34):
I've always been a
big admirer of Rails and how
37signals tends to write code.
The Rails authenticationgenerator is always my example
where it's like allowunauthenticated access and these
class methods that get addedresume, session and whatever
(01:01:56):
else just the specificterminology in it, I feel like,
has always been something I'veadmired about rails and I've
always wanted to get much betterabout that, and that's been
something that I feel like asI've written.
More open source code.
You can get by without doing alot of that in your regular
(01:02:17):
application code, I feel like,but when you start building
libraries, that's something thatstarts to be really important
because you're trying tocommunicate the same thing to
people that may or may not evenspeak English as their first
language.
So the terminology does make abig difference and stuff.
So I don't know.
(01:02:37):
That's been something I've beenworking on a lot with the gems
and things lately, trying to Iget my first version of it out
of my brain into a gem and thenI'm like it still feels clunky,
it's not as polished as I want,and so I've been trying to
figure out those things and thebalance of in pay.
(01:03:00):
Lately I rewrote a whole bunchof stuff because their API has
got some breaking changes inlatest versions and stuff.
But even those things are toughto balance.
I want to sync the paymentsthat you've made, the
subscriptions and the customersto your local database with
(01:03:21):
webhooks so that we don't haveto hit the API and our
application can be way faster asmuch as possible.
But syncing that stuff that isgoing to change potentially
every API version, how do youwrite code that's not going to
blow up?
All the time?
Pay has been tough because it'slike well, there's Braintree
(01:03:43):
and Paddle and Lemon Squeezy andPaddle's got two versions and
there's also Stripe and whatever, and I'm trying to take these
concepts that are sort of sharedbetween all these APIs and
abstract them.
And I've gone so many differentdirections over the 10 versions
of pay and the latest one waslike you know what, why don't we
(01:04:06):
just save the whole JSON blobfrom Stripe and we'll go
retrieve the latest copy andexpand as much of it as possible
.
One thing you may have run intois I was building Learn Hotwire
site which we may end up sellingthat source code on Cell Repo.
At some point.
If anybody's interested, let meknow.
(01:04:28):
I've been debating if it'sworth doing or not, but for that
this is my first time usingone-time purchases with Stripe's
adaptive pricing.
So if you're in the Netherlandsyou can pay in your local
currency versus having everybodypay in my currency.
And unfortunately that meansthat Stripe's charge objects
(01:04:53):
give us pesos or euros or poundsor USD, and so when I went to
calculate what's the amount ofsales we've had, it was like way
inflated because it hadAustralian dollars in there and
whatever else, and the exchangerates are hidden in the
secondary object and the fee iscalled a balance transaction.
(01:05:14):
So I actually need to calculatethose.
But then if I just store thosein the JSON blob, I can go and
select from the JSON blob, Iguess, if that thing even exists
in there but it sucks because Idon't have just a column I can
say here's the US dollars andjust sum all of those, like you
(01:05:36):
would expect to be able to do.
But then if you're building alibrary this is a library that
may be used by people whoseactual bank account is in euros
how do you set the defaultcurrency?
And then that's going to all bedata coming from Stripe anyways
.
So as far as I know too I thinkthere is, if I remember right
(01:05:58):
you can connect multiple bankaccounts to your stripe account.
So if you have us and europeansales, it'll use whatever is the
closest.
So it might end up where youhave euros and usd in the
balance transaction.
So you may never actually getwhat's the total sales ever,
(01:06:21):
because it will end up beingsplit up across those.
So that's been one of thosethings where I'm like I don't
even know how to build areliable library for this type
of thing, because I don't knowif there's a good answer for
that.
Stripe has extra magic they cando internally to build their
own dashboards and we can saveas much data as possible.
(01:06:43):
But then building these toolsto give you some easy things to
have just a total sales number,it's like I don't even know if I
can do that in this library.
So I've been struggling a lotwith that and learning.
Maybe we don't try to build our,because what I did previously
(01:07:04):
do is we would have featuresthat were general across all of
them, like this is the amount ofthis charge and this is the
amount refunded and this is thecurrency.
But then there were some otherthings, just like what's the
payment intent id?
That's a stripe only thing.
Paddle has its cancel url and areceipt url and stuff, and so I
(01:07:27):
was building these like one-offthings but trying to make it
also generic.
And so this latest version ofpay.
I realized what if I just don'tmess with the stuff that Stripe
gives us and we just store itand then just allow you to
rehydrate the Stripe chargeobject and do whatever you want
with it?
So if you want to build acallback to save the USD
(01:07:52):
currency, you could extend payand just always have a column in
amount refunded, usd orwhatever.
That would work for me, butsomebody that has their primary
bank account in euros could thenextend it and do the same thing
but for euros or something.
So, yeah, it's been one of thosethings where, like, you're
(01:08:12):
writing code but it's such ameta level when you're doing
libraries that I've always beencurious how do I find a good
balance of that?
I want to do it to solve myproblems, but I also want to
build it generically enough tosolve other people's problems,
not just mine, but I don't havethe same problems they do.
(01:08:33):
And then I run into thingswhere I'm like, oh crap, I
didn't build this open-mindedenough or flexible enough so
they could even do that.
Now I got to undo my stuff andthen whatever, which is why it's
went through like 10 majorversions of the library.
But I feel like I'm finding thebalance more lately, where I'm
like when I integrate with APIs,it seems safest just to say,
(01:08:58):
hey, we will save the wholeresult and then you've got it to
use later if you need it andyou can change your code without
having to like, oh shit, weneed to resync 10,000, 100,000
payments from Stripe because wechanged how our thing worked.
And then you end up in that datamigration situation where the
(01:09:21):
code currently relies on thisdata.
We need to change it to this.
The code can't be deployed todepend on that until we've
synced all this stuff.
So you need to do a multi-stepdeployment process for the
migration, which is also darnnear impossible to explain in a
gem.
You're going to have to do thisin steps.
People.
They just upgrade the gem anddeploy it straight to production
(01:09:43):
.
So that's no bueno.
So yeah, I don't know.
That would probably be the bestanswer.
Lately, of things I've beenlearning, of trying to get
better at building code forthose types of problems, that is
very building code for thosetypes of problems that is very
as future-proof as possible, Iguess, and that's just darn near
(01:10:10):
impossible sometimes.
I'm sure that everybodyimplementing an API wrapper for
Gemini and OpenAI and yada, yada, yada, all of those are going
to end up being sort ofconsistent where they all have
similar like prompt api endpoints, but all of the arguments
are going to be a littledifferent here and there and
then try and abstract those andthen one goes away and then they
got, oh, a new version of thismodel but it takes new
(01:10:31):
parameters and at first you'relike, maybe I'll validate that
you have all these options thatmatch the API docs.
And then at some point you'relike, screw that, let's just do
a splat of args and just forwardthem along to the request,
because I don't want to have togo and update my gem every
single time an argument changesor something.
(01:10:51):
And you learn those types ofthings over time and what works
best for the specific type ofproblem or whatever.
But that's one that's been aforever sort of struggle for me
and I always feel like I'mlearning how to improve that and
do it a little bit better hereand there.
And it's just tough to sort ofmodel that stuff.
(01:11:11):
Anyways, we're different becausewe have a Stripe account that
has multiple products in it.
Sometimes it's in CS.
The web hooks all need to go toall the different apps but,
like, learn hotwire doesn't careabout any of the payments or
(01:11:32):
customers from the go rails appor whatever, and it's like we
should probably just ignorethose and then deduplicating
that sometimes, too, isconfusing, because now we've got
the same person paid for bothproducts, we need another layer
on top to be like here's allthis person's accounts and their
(01:11:54):
total lifetime value and thattype of stuff.
One person now has multipleStripe accounts.
They also have multipleaccounts across our rails
applications and whatnot.
So it's a fun challenge, but,man, it's also very distracting
from doing actual work for sure.
Drew Bragg (01:12:15):
Yeah, I think you
guys actually talked about this
on remote Ruby a few weeks ago,but Andrew ran into the Stripe
web hooks Don't come in in aguaranteed order.
Yeah, I think you guys actuallytalked about this on remote
ruby a few weeks ago, but andrewran into the stripe web hooks
don't come in in a guaranteedorder.
You could get like an updatesubscription before the create
subscription comes in and it'slike hold on, how do I update?
It doesn't exist yet.
What the?
Chris Oliver (01:12:33):
yeah, I just had
that with those balance
transactions I was talking about.
If you purchase something, ittakes a second for them to, so
the charge succeeded event comesacross and the balance
transaction is nil and then thecharge will be updated a
millisecond later or somethingstupid, with the new balance
(01:12:55):
transaction and that will be thething that actually contains
the data.
So I shipped this thing tostart calculating our sales from
the balance transactions, goesto production and then boom,
honey Badger's, like you don'tknow what you're doing, wait a
minute.
This worked just fine indevelopment and sure enough it
(01:13:16):
was like yeah, some of thesedon't have a balanced
transaction for a fraction of asecond, but you rerun that code
after the next webhook comes infrom charge updated and you
refresh the page and it's finenow.
But the first request was notwait a minute.
What is going on here?
And it's like yeah another webhook, updated and added this
(01:13:39):
extra data to it, and now it'sfine.
If you hadn't loaded that pagewithin those couple seconds, you
never would have known this isa bug and I was like, oh great,
this is another one of thosethings I don't want to have to
deal with here, but sure enough.
So I don't know if it's a goodanswer for that, but it's been
(01:13:59):
some learnings and stuff thatI've been doing good learnings.
Drew Bragg (01:14:03):
Yeah, it is one of
those interesting like payments
have been solved but theyhaven't.
It's just endless combinationsof so many different things and
it makes it fairly brittle towrap your head around to to
write a good test for to.
Yeah, there's a lot, and it'sscary too, because it's people's
(01:14:25):
money.
You don't want to get it wrong.
You don't want to end upcharging someone $1,000 when you
meant to charge them $100.
Chris Oliver (01:14:31):
There was an old
app I worked on once and they
were telling me that they hadset up PayPal and PayPal has a
two-step process where you setup the charge and you send them
over to PayPal, they put intheir account details, whatever,
and then it sends you back likean ID and you have to then
(01:14:52):
confirm it to actually do theactual payment and apparently
they weren't doing that secondstep.
So everybody thought they paidfor it and they never collected
a dime and it was like tens ofthousands of dollars that had
just never been collected and Ithink they were able to maybe go
(01:15:12):
back through and collect stuff.
But it was confusing to peoplebecause they were like what do
you mean?
I got charged today, but I paidthree weeks ago.
Well, technically you never didpay three weeks ago, but trying
to explain that to people it'snot easy.
And this is the stuff thatmakes me feel like we're all
(01:15:33):
excited about AI and everything,but like we still can't even
make payments easy For sure.
Ai and everything, but we stillcan't even make payments easy
For sure.
The nuance to all this is stilltoo complicated, too hard to do
a lot of things.
Even building front-end stuffwith Hotwire or React is still
really painful in a lot ofplaces, and back-end stuff is
(01:15:54):
not as simple as it should be inmany cases.
Rails gives us the bestabstraction so far, but even it
can probably abstract a lot ofthings even more.
For us, it still feels likevery early days where, like,
tell me to go build something.
It's like there's still a lotof decisions I'm gonna make
along the way that seem likethey shouldn't really have to be
(01:16:16):
decided or whatever.
But yeah, I think the hypetrain is left, as people are
like oh, we don't need this manydevelopers and we got AI and
whatever.
We're hiring tons of developerswith super high salaries is not
cool anymore, but I feel likewe're still going to be insanely
(01:16:39):
valuable for quite some time.
Drew Bragg (01:16:41):
I think one of the
best.
Oh, job security is a thing.
Here.
The comic I read where it was ajunior developer using AI to
write whatever couldn't figureout this bug.
Ai wasn't being helpful, so hecalled over his senior developer
and the senior developer islike well, let's look at the
code.
And the junior goes you canread code.
It's like yeah, yeah, vibecoders are going to have a hard
(01:17:04):
time debugging their shit in acouple of years when they've
created these monstrosities thatthey can't read or reason about
.
Even like, you got to be ableto read code and it's important.
Chris Oliver (01:17:16):
There's just so
much nuance and details that
matter still that it's going totake a long, long, long time to
just skip past that because allthe vibe code stuff is just
going to make assumptions forthose and that's not something
you can legitimately inproduction just can't do that.
(01:17:37):
So it'll be great for lots andlots of things Helpful for
debugging and thinking throughstuff and whatever else.
But yeah, I'm excited to wrapup a couple things and start
working on these new secretprojects.
I will have to tell you aboutafterwards, but they'll be out
(01:17:57):
soon enough.
Drew Bragg (01:17:59):
Good.
Well, the questions are alwaysthe same what are you working on
, what blockers do you have, andwhat's something cool, new or
interesting?
So the moment you have a newanswer to any of those questions
, you got the link.
You can always schedule sometime to come on and talk about
them.
So which will definitely haveyou on again, since you are a
repeat code encoder.
But in the meantime, meantime,where can people find you and
(01:18:22):
your products and whatnot on theinternet?
Chris Oliver (01:18:25):
you can find me
pretty much anywhere as
excid3.com, on x, on blue sky,on linkedin reddit places yeah,
all the places.
All the places and you can findgorailscom, learnhotwirecom, I
think gorails probably links toeverything else and the
(01:18:46):
navigation if you want to checkout Hatchbox or Jumpstart or
whatever.
Working on way too manyprojects, I think, is what it's
about, and adding two more,you're doing great.
Drew Bragg (01:18:56):
A few more.
Well, yeah, we'll include linksto all that in the show notes
so no one has to remember it.
But appreciate you coming on.
Talking about rails conf, I'mhyped.
I'm so pumped and excited andexcited for the learn hotwire
course because I'm sure I'll beback in hotwire land after.
Well, I'm actually in hotwireland.
Of last two bugs we did somegoofy turbo frame stuff that I
(01:19:18):
had to fix because the testcaught them nice, nice.
Chris Oliver (01:19:21):
But yeah, I'm sure
I'll be back on hot wire land
soon and ready to devour thatcourse there will be probably
new things here in a few monthsat rails world that I'll have to
go add to the course, andalways new stuff, but that'll be
.
The nice thing is, the goal ofthat course was like just make
the most comprehensive thing wecould possibly do and keep it as
(01:19:44):
up-to-date as possible.
So I think it'll be pretty neatto have new releases of hotwire
and like, all right, let's takethe project we built and now
upgrade it to use the newfeatures and stuff.
So that'll be huge.
It'll be a special course, Ithink for that reason, because I
don't feel like most of themhave quite kept up in the long
term like that.
(01:20:04):
So that's our goal with it.
Drew Bragg (01:20:06):
It's a great goal.
Chris Oliver (01:20:08):
Alrighty sir.
Drew Bragg (01:20:10):
Thanks again for
coming on and audience.
We'll see you in the next one.
Chris Oliver (01:20:16):
And at RailsConf
in 54 days.
Drew Bragg (01:20:17):
And at RailsConf in
Philly in however many days it
is.
Math is hard and time isn'treal, as Andrew likes to say.
See y'all in the next one.
Bye.