00:00:15.240
all right welcome to lightning Coxs at Ruby conf 2024 this is often the most
00:00:20.439
exciting slash interesting part of the of the show each show is different don't
00:00:27.119
know what we're going to get this time but I'm excited about the lineup We Have Tonight of 14 5 minute talks 5 minutes
00:00:34.000
or less and I do have a Gong and I will be ringing it if you go over your five minutes just setting that out
00:00:40.640
now so let's just get right into it our first two speakers we're going to start with Noah who's going to tell us about
00:00:47.360
intro to Long chain. RB and we have Sanjay who's going to tell us about
00:00:53.520
Advance how to propel the next generation of technologists so I could I have those two please up on the stage
00:01:10.400
wo all right so my name is Noah and I'm gonna
00:01:16.280
be you you may recognize me from who wants to be a ruby engineer um this
00:01:21.720
morning uh and I'm going to give a quick intro to Lang chain RB so I'm new to
00:01:26.920
Ruby and programming I started at Turing school this past March and graduated
00:01:33.799
September um learned backend development Ruby on Rails uh partway through the
00:01:39.680
program I ended up in an internship from meeting some people at a Meetup um
00:01:46.119
working on an AI powered um restaurant recommendation um app and one of the
00:01:54.040
things that we worked with was the open AI API and it was really cool what it
00:01:59.360
could do how it powered the application but one thing that we realized was that it wasn't very flexible the way we had
00:02:04.560
implemented it and it would be fun to be able to experiment with all the other llms out there the space is moving so
00:02:11.560
quick and there's different options so it' be nice to try those out um and so I got the chance to go to
00:02:19.319
Rocky Mountain Ruby and heard a talk um about Lang chain RB and it seems like it
00:02:24.599
solved some of these problems that we are facing um so the most basic level Lang chain RB is a gem that lets you
00:02:31.560
interact with llms you can see here that I create a new instance of the llm
00:02:37.879
and request chat completion at the bottom and this is what that chat completion looks
00:02:44.080
like and what we can do is switch it out for Claud in this example and you just
00:02:50.760
change two lines of code so back here it said open Ai and the API key was open AI
00:02:57.319
API um but over here it's claw it's just two lines and we get a different
00:03:02.720
response so we can experiment really fast and quick with all the different models out there um this was just the
00:03:09.280
open Ai and anthropic models but you can do it with mistal Gemini olama you can
00:03:16.680
run local models it's really cool um so that's the first advant the
00:03:22.080
second thing I wanted to talk about is assistance so assistants are
00:03:28.360
um threads that you can start with not thread as a computer thread but just
00:03:34.239
like a conversation thread with the LM that you give specific instructions to um and with these assistants you can
00:03:40.680
give tools to as well um and tools extend the functionality of the llm um
00:03:46.799
they can get realtime data an example would be using a math tool that uses a
00:03:51.840
calculator instead of just using the LM itself so you get much more accurate
00:03:57.640
data um Show an example of this I went back to a turing project called Sweater
00:04:04.120
Weather where we got where we would use an API for directions giving two cities
00:04:11.799
um calculating the distance and getting the weather upon arrival so you could say do I need a sweater when I arrive in
00:04:19.160
New York or something like that um so to do this I gave the assistant access to
00:04:27.520
two different tools one tool tool to get directions um and so that's here I
00:04:33.840
Define the parameters that go in um the name of the function and in this case
00:04:41.720
the assistant chooses when it gets to use the tool so it's not you the user
00:04:46.759
defining when it uses the tool to get the directions if you it'll just decide I need to find the directions I'm going
00:04:53.080
to use this tool and that tool Works however you you've programmed it um in
00:04:58.720
this case it just makes it all to the map quest API to get those directions
00:05:04.759
um so here's that tool right there um you can see it's just making a simple
00:05:10.080
API call and here's the coordinates same sort of thing getting the
00:05:18.360
location and here's where we actually give access to those tools you can see on the bottom two lines um defining the
00:05:25.240
tools that it has access to and here's an example of that I don't
00:05:30.639
know if it's playing um so I start the app in my
00:05:36.280
terminal give a question for directions and the weather when I arrive based on
00:05:41.400
when I leave it does all the calls that it needs to
00:05:47.680
do this part takes a little while but basically it's it's asking for the directions calculating the time and then
00:05:54.440
asking for the time when you arrive um and here we get the response
00:06:01.639
back um it calculated that all for us and we didn't tell it to use those tools
00:06:07.240
it just decided to um so I think this could be really fun it's an easy way that you can add llms into your
00:06:13.440
applications there's a ton more that I didn't talk about here um but go check it
00:06:26.000
timer starts hi good evening my name is Sanjay I am a
00:06:32.720
software engineer based in uh Central North Carolina and I'm proud to be joining you uh this uh evening as a ruby
00:06:39.880
comp scholar so huge shout out to the Ruby Central team uh the wonderful welcoming Ruby Community here tonight
00:06:47.080
and um as well as my guide Fred thanks Fred um and I also want to say thanks to
00:06:52.440
the many generous sponsors that made my very first uh technical conference possible so tonight I'd like to start
00:06:59.360
with with a very simple question how did you get here so how did you get where
00:07:04.560
you are today in your career so when I reflect on that question I know that I'm
00:07:09.680
here in large part because of the generous people that made it possible for me to be here those who chose to
00:07:16.280
advance my career and uh they were Visionaries like my mentor Amy who can
00:07:21.759
handle the strange and very curious Mind of a designer turned engineer um there were also leaders like Chelsea who uh
00:07:29.639
really showed me the ropes and showed me how to take a positive outlook they were friends like my friend Peter um who's
00:07:37.039
with me tonight um and still answers questions I have about Ruby uh but unfortunately my experience is not
00:07:44.159
shared uh across the board there are still many out there trying their best
00:07:49.840
but only kicking up dirt as my friend Adam cuppy would put it they are stuck in the middle and for those Stuck in the
00:07:56.199
Middle leveling up feels like a corn maze and um you know identifying a mentor is extremely complex finding a
00:08:03.080
job is really discouraging now on the other side of this not only our Junior
00:08:08.440
in midlevel technologist struggling to level up but your company's bottom line is also at stake so without a thriving
00:08:16.639
pool of Junior and mid-level technologists your company will have less diversity of ideas over time and
00:08:22.800
you also solve fewer problems uh for your customers so when I see a decrease
00:08:28.520
in Talent a decrease in Innovation and a decrease in solutions to me the simple math is nothing but trouble so tonight
00:08:36.200
I'd like to invite you to join me and drawing a Line in the Sand so oh
00:08:44.279
sorry hold on there we go yeah sorry about that uh
00:08:49.519
I would like to uh invite you to uh draw a line in the sand with me uh so
00:08:54.760
basically what I'm saying we're enough is enough uh no more flly wondering engineer
00:09:00.000
no more winning bottom lines no more stuck Talent tonight like the wonderful humans that were part of my journey
00:09:06.920
let's choose to advance the next generation of technologists so a few ways that we can do that is we can
00:09:12.880
create opportunities for those ahead of us and behind us so if your company's hiring you can advocate for junior and
00:09:20.040
mid-level talent you can also help review resumés and hold whiteboarding interviews and another thing that you
00:09:26.000
can do if you find yourself as a um a early career technologist you too uh can
00:09:33.680
advance the next generation of technologist by swapping resumés and making introductions to your
00:09:39.720
network another way to do this is you can share your uh domain and Technical knowledge through par programming you
00:09:46.120
can also help demystify those weird words that only people in your industry use uh you can write blogs and also
00:09:52.480
write very helpful PR comments to just say like looks good to me but like actually say what are the next clear
00:09:58.120
steps and uh finally we can invest in mentorship and cultivate relationships
00:10:04.160
so make friends like what we're doing here this week uh be mentored Mentor others make other mentees and mentors in
00:10:11.279
fact um I spoke with Andy at Ruby friend uh first Ruby friend this past week and
00:10:16.480
he said they have a huge need to fill for new mentors on their platform so we have lots of opportunity to act now so I
00:10:24.600
rolled all of these four points into something that I'm calling the advanced Manifesto so please pull out your phones
00:10:30.279
don't be shy uh you can scan the QR code in the screen or go to advanc manifesto.
00:10:35.680
comom and you can sign a pledge and by joining tonight um you can join me and
00:10:41.200
rethreading the Very fabric of our industry uh this a great first step to uh advancing the next generation of
00:10:48.120
technologists so again to to wrap up here so together we can create opportunities for those ahead of us and
00:10:54.839
behind us uh we can share our knowledge both our domain and Technical knowledge we can invest in mentorship and we can
00:11:01.639
cultivate relationships also as an added bonus if you sign while we're here in Chicago and you come see me I'll give
00:11:07.639
you one of these fancy stickers they're holographic so uh definitely come and see me and um I would also love to talk
00:11:15.079
to about this topic um again that uh website is advanc manifesto. comom thank
00:11:20.240
you so much for being the lovely people who made it possible for me to Advance in my career cheers my friends
00:11:31.240
hello I'm Manu I well can come say high to be on
00:11:38.800
or in person and I have been working as a Bean software engineer for almost two
00:11:44.680
years at a nonprofit and before that I worked as a long time for I worked for a
00:11:50.399
long time as a graphic designer and I'm here today to talk about software engineering and graphic design so they
00:11:57.240
are actually very similar how you work what you do is kind of different but the process of how you get
00:12:04.160
to end results is very similar and what is that process it is
00:12:10.399
about figuring out how to best communicate through media so how to get a message across to other people using
00:12:16.399
Media or if you want to think about it from a practical point of view it's thinking about you your client what they
00:12:23.320
want to achieve to communicate their users customers Technical and budget limitations among any other things many
00:12:30.360
other things and this process is design so of course of course they're
00:12:37.160
going to be differences we are dealing with different Medias with paper versus
00:12:42.519
bits and bites but I think the big one is that at some point graphic design projects tend to be done and the way
00:12:49.079
they evolve and die is different than digital projects so what does that
00:12:54.160
process looks like for graphic design I'll show some short examples from an exhibition I worked on it was about
00:13:01.079
telling the story of the museum from its documents there were many decisions that we made based on different needs from
00:13:06.959
the museum and its users from the many documents came the decision to use different typographies it was a way to
00:13:14.160
evoke that sort of messy feeling that documents can have and then there were technical decisions like when deciding
00:13:20.880
what exercise placement we were always thinking if it would be comfortable to read too high too low too small too big
00:13:29.199
and for the catalog we made some cutouts you could mix and match document parts and mix and match the title itself like
00:13:37.079
the same way we did in other pieces and on the technical side one
00:13:44.519
paper might be more comfortable for reading one for photo printing so it shows different papers when you do that
00:13:49.639
you need to think about the quantity of pages because printers usually work with 16 32 48 pages booklets and even taking
00:13:58.480
this and much much more into consideration not everyone's going to like it and some people are going to be
00:14:05.040
very passionate about it so how does this translate to engineering it's the same as before you
00:14:12.160
are still using media to communicate so you are still thinking about your client what they want to achieve and
00:14:17.720
communicate their users Technical and budget limitations and when you think about
00:14:23.120
Ruby when it was first created it had one user and that users's needs wants
00:14:28.320
were to make a scripting scripting language to make it op um to take from a
00:14:33.920
few different languages to bring him joy and those were some of the things that guided him in his choices but more
00:14:40.839
people were interested and here we are now over 30 years later Ruby's needs have changed
00:14:47.800
because now instead of one user we have a whole community so now instead of one user's needs guiding its choices is the
00:14:54.399
community needs guiding its choices so the way it's designed has changed and I I think here the big difference comes
00:15:01.720
back it's alive and I think that's super cool what I like the most about software
00:15:06.920
development is how projects can feel like living things so you can go back and see things that were adopted change
00:15:13.360
dropped and I be all because of the users needs the
00:15:19.199
community so all that said whether it's one person or a community graphic design or software engineering it's all about
00:15:26.320
process interaction communication between people it's all still media and I really like this quote from
00:15:34.759
Matts from an old interview don't underestimate the human factor even though we are in front of
00:15:40.440
the computers they are media we are working for human with human thank
00:15:51.519
you hi everyone I'm Alex and this is how to be a ruby scholar do a project and accidentally break your laptop uh so
00:15:59.240
first off who am I uh I am from Atlanta Georgia born in raised I'm a software engineer at Caril and I'm a ruby scholar
00:16:06.160
and First Time ruby compend okay so we're going to begin at the end um that
00:16:13.519
right there is a broken laptop screen and also a broken heart uh because I was
00:16:21.000
simply just doing normal programming activities um and I might have gone a
00:16:27.240
little too hard this time um just joking uh this was simply like a
00:16:33.160
freak accident um and yeah so yeah so
00:16:39.199
what exactly was I doing and how do we get here so essentially I was building a chat app for rubycon and it is called
00:16:48.120
rails talk it is a chat app for Chatters made by a professional chatter um and my
00:16:54.199
goal with it was essentially to build a platform to facilitate
00:16:59.560
a to facilitate Community basically allow people to create a community and facilitate that
00:17:06.160
Community just being able to chat about stuff so I did some brainstorming on what I needed found a guide and I worked
00:17:11.959
through it and this is what I got um as you can see this is a chat room about
00:17:18.039
recipes and Gordon Ramsey and Marco Pierre White are talking to one another
00:17:23.280
uh I already have celebrity endorsement it's really great um so let's talk about features and
00:17:30.360
takeaways so features um in this app are that you can sign in you can create a
00:17:35.640
room there's group chats and then there's private chats um things that I learned I learned about sessions action
00:17:42.000
cable turbo and authentication uh all really cool things and lastly like what
00:17:47.960
would I like to add because I didn't really get to finish it because my
00:17:53.039
laptop broke and I didn't get it I didn't get my laptop until an hour before my flight um so I would like to
00:17:59.880
AB add the ability to remove users and also clean the app up because uh the app
00:18:05.559
does cool things but it kind of looks not great or doesn't look the way I
00:18:10.600
wanted it to uh so I'm just going to show off some of those features so this is a user sh signing in this user is
00:18:17.799
Gordon Ramsey uh he is a smalltime cook I don't know if you guys know about him
00:18:23.200
uh and this is the other feature this is uh so showing an index of rooms and also showing that you can actually create uh
00:18:31.200
a room and you can add to that um list of rooms and then the next thing is a uh
00:18:37.280
private chat which is between Gordon Ramsey and Marco Pi white and this is Gordon spamming Marco and he's obviously
00:18:43.360
doesn't want to talk to uh to Gordon and that's honestly it uh my laptop works
00:18:48.679
now and thank you all hi everybody I'm Neil um I'm a
00:18:57.360
scholar as part of the scholars and gu program here um I went through the same boot camp that Noah the first Speaker
00:19:03.720
did and um I'm going to talk about a subject that I have a lot of experience with and that is data visualization
00:19:10.600
specifically interactive data visualization and I'm going to do that through the medium of JavaScript in the
00:19:17.440
HTML 5 canvas what is data visualization um you can show how
00:19:24.760
variables are related uh find Trends on the right we've got the S&P 500 100 on the left we have the correlation between
00:19:31.400
temperature and um number of Sals and these are just hypotheticals on the left
00:19:36.799
um you can create visual interpretations of large data sets that might be
00:19:42.240
difficult to interpret otherwise um such as this map of the United States this
00:19:47.400
population density map um or you can take data from for for example a
00:19:53.280
company's sales and um get a visualization of where your re new is
00:19:59.080
coming from uh through something like a bar chart but why would we want JavaScript
00:20:06.360
uh HTML and CSS well HTML and CSS allow for precise placement of elements on a
00:20:13.000
screen using simple syntax so it's really uh just giving you a simple way to put things where you want them and
00:20:20.159
then the JavaScript allows for interactivity interacting with the
00:20:25.440
document object model uh the HTML and this provides the ability for users to
00:20:30.679
change inputs and the final thing before we get into uh our examples here is the HTML 5
00:20:38.880
canvas this is a relatively new technology that uses Primitives to create images um in two Dimensions it
00:20:46.520
uses things like lines ellipses text uh or you could just edit pixels
00:20:52.760
individually uh on top we have the mandle BR set and on bottom we have a 3D
00:20:57.840
rendering of plin noise which you can also do with the HTML 5
00:21:04.039
canvas this is uh a data visualization I made of the spread of disease over time
00:21:11.480
uh and uh the red line here represents the number of people infected uh blue is the
00:21:18.840
number of people susceptible to being infected and the green is number of people recovered I figured this would be
00:21:24.600
relevant coming you know out of covid everybody went through that we all know what it was like uh on the bottom we
00:21:31.279
have time um I forgot to label that sorry the bottom axis is time and the
00:21:36.720
left axis is number of people so the population of the US is about 300 million and this is over the course of
00:21:44.200
about a 100 days uh these are the differential equations used to uh create this graph
00:21:50.840
I'm not going to go into too much detail about these but um we use JavaScript to
00:21:56.840
solve these differential equations and now it's time to make it interactive
00:22:02.760
using JavaScript so you can use sliders to adjust different um parts of these
00:22:10.400
differential equations such as the transmission rate here as transmission rate goes up uh the disease spreads more
00:22:17.720
quickly as recovery rate decreases um people stay sick for longer and the
00:22:24.039
disease spreads to more people as it gets lower it takes takes longer for the
00:22:29.159
disease to spread uh the number of people initially
00:22:34.320
infected essentially just uh determines the incubation time
00:22:41.200
for the disease and the number of people initially immune also just kind of
00:22:48.400
affects everything obviously less people will be infected if there are more that are initially
00:22:54.679
immune and then um one phenomenon that I found when I was
00:23:00.640
like looking through the papers to um learn about this model is that the ratio
00:23:07.200
of transmission rate to recovery rate when it is greater than one so in other words when beta on the left is greater
00:23:14.520
than gamma on the right at the top there um the disease doesn't spread and you
00:23:19.880
end up only infecting here 30 people so this is available online and
00:23:26.960
um I'm going to leave 30 seconds here for anybody to take a picture if they want uh I didn't use a QR code because
00:23:33.679
it is not mobile friendly I spent like four hours on this you know I wasn't about to uh put a ton of effort into
00:23:39.880
making it mobile friendly but um you can play with it if you want and I would
00:23:45.080
encourage many of you to experiment with the canvas element and create graphics
00:23:51.200
on the front end it's really fun and yeah so there you go thank you
00:24:01.919
so this is the air screen that broke me it's okay if you can't read it or can't
00:24:07.480
understand it because neither can I I was making a simple change to our marketing site which was built with
00:24:14.279
nextjs and I had committed the unforgivable sin of putting a div inside
00:24:19.640
of a P tag it's it's embarrassing and shameful I get
00:24:25.600
it and this was really just kind of the straw that made me decide to rebuild our
00:24:31.399
marketing site for the fourth time but this time I decided I was going
00:24:37.720
to use rails now you might think rails for a marketing site is it Overkill is
00:24:43.320
it the wrong tool for the job I hope to convince you that it isn't or at least get you to rethink an assumption that
00:24:50.159
I've had for a long time which is that content sites should be static sites now
00:24:56.120
what do I mean by content sites I mean you know a personal website a marketing website anything with just like some
00:25:02.000
landing pages maybe a Blog maybe some documentation for a long time I assumed
00:25:07.240
this was the way if I didn't use just static HTML files for this kind of site I was somehow a bad person a bad
00:25:14.600
developer and admittedly static sites are great they are simple fast and cheap
00:25:20.320
because there's no moving Parts there's no work to do this just shipping HTML to
00:25:25.600
a browser right but we don't write everything single HTML file by hand and that is where static site generators
00:25:32.360
come in they give us some layouts some templating tools that produce the static HTML that we can then throw on any web
00:25:39.679
server but static site generators do come with a cost because the magic of
00:25:44.919
generating those that HTML needs to happen somewhere and static site generators move that from the runtime to
00:25:51.720
the build time which is totally fine it's just not free like any other tool
00:25:57.559
there's always going to be a learning curve and if you're already fluent in those tools that's fantastic I wasn't I
00:26:04.720
kept trying to pick the right tool for the job but I was moving slow I was
00:26:10.480
frustrated I realize now that instead of the right tool for the job what I really needed was the right tool for the team
00:26:18.120
because the team is who writes and maintains the code right and my team is all rails devs there's just three of us
00:26:25.080
we're a tiny team and we're going to have different needs than some other teams and for us rails makes a lot of
00:26:31.200
sense we're fluent in it we're very fast with it but as the saying goes if all
00:26:37.000
you have is a hammer everything looks like a nail I say so what if it helps us move fast and brings us joy I'm going to
00:26:44.760
be okay with that so we've now migrated from nextjs to rails so let's do a quick
00:26:51.039
comparison between these two sites looking at some basic performance metrics they both performed pretty well
00:26:57.760
um but rails was noticeably faster you know thanks to it being a minimal rails app no database mostly just markdown
00:27:05.039
files and deployment speed similar the rails build was 35 seconds on Heroku the
00:27:12.440
nextjs build was 1 and a half minutes on netlify hosting is where static sites
00:27:18.559
really shine because you can't beat free and there are a lot of free options for static sites I would argue that a $7
00:27:26.679
basic dyo on Heroku or something similar on render or another you know platform
00:27:32.000
is really just a rounding error for any marketing site so I'm going to call it mostly a wash there um let's also look
00:27:38.919
at scaling because if our blog posts go viral we need to make sure that we can scale up to handle it again it's hard to
00:27:45.720
beat static HTML here um but a lightweight rails app can scale really
00:27:51.120
well and as a safety net you can always add in autoscaling we're an autoscaling company so of course we dog food our own
00:27:57.399
product kind of a moot point on our marketing site because we've never needed more than a single dyo but let's
00:28:03.799
go back to what sent us down this path what happens if we put a div inside of a P tag on our new rails app right oh it
00:28:10.919
just renders it's still invalid HTML you still shouldn't do it but it doesn't blow up and that's nice so am I saying
00:28:18.440
all static site generators are bad and you should use rails for everything definitely not static site generators
00:28:24.640
are great tools they might be perfect for your team there is no right tool for the job the
00:28:31.240
question is what tools will help your team move fast and maybe you decide that
00:28:36.679
web sites and web apps are all just nails and grab your favorite
00:28:42.840
Hammer scan this for a video I made all about our new marketing site and my contact info I would love to hear from
00:28:49.200
you thank you very much hi I'm El I'm exploring XI spting
00:28:57.279
sh at IA State University so I'm going to explain what
00:29:02.399
that means okay imagine a world where decisions are profoundly made that
00:29:08.919
affect our lives whether in health care hiring criminal justice are all made by
00:29:15.840
machines and those machines are make decisions that humans can't understand
00:29:21.880
why so as AI becomes more Universal these scenarios are increasingly re and
00:29:28.640
the question becomes how can we trust AI systems when their decisions are opaque
00:29:35.440
that's where explainable AI comes in okay who here knows about the compass
00:29:42.000
data SE if you don't let me explain so in 2016 an AI algorithm was used in the
00:29:48.600
United States criminal justice system to predict the likelihood of defendants reoffending and the system it was called
00:29:56.000
Compass that's an a ration and it was meant to help judges make informed
00:30:01.080
decisions about Bill and sentencing but here's the catch the
00:30:07.600
algorithm the algorithm's decision making process was completely hidden and when journalists investigated they found
00:30:14.399
Compass was disproportionately labeling black defendants as high risk even when
00:30:19.840
they hadn't re re offended meanwhile white of white defendants who had
00:30:25.360
committed future crimes were more often labeled low risk so this opacity in
00:30:30.559
decision making and the impact it had on people's lives exposed the glaring need
00:30:36.440
for explainability and interpretability I'm going to dive into the definitions okay what does
00:30:44.360
interpretability refers to so let's think of a simple linear regression that
00:30:51.000
predicts housing of prices so you can look at the wids of each variable such
00:30:56.200
as a bedroom number or the ZIP code where that house
00:31:01.960
location is in so we would know what's affecting the price directly that's
00:31:08.399
interpretability and when we go to explainability it's more one step further it's about
00:31:15.480
generating explanations and that are meaningful to humans for example imagine a doctor
00:31:21.279
using an AI system to diagnose a Cancer and the doctor doesn't need a prediction
00:31:26.600
they need to know why the AI made the decision it made so if the AI decided to
00:31:33.440
name like one disease the doctor would need to know why so that they can make a
00:31:40.279
well well-informed judgment that's explainability okay explainable AI in
00:31:47.200
action so in 2018 Google developed an AI model to to diagnose diabetic re
00:31:55.720
retinopathy so that was the cause of blindedness but it wasn't enough for
00:32:02.200
opthalmologists to just know if uh that
00:32:08.000
scan of the eye is like suggesting uh this disease or not so
00:32:15.279
Google created a heat map overlay uh a heat map overlay that
00:32:20.559
highlighted the areas in the retinal image so that they made this AI decision
00:32:28.200
more explainable but there's more to this
00:32:34.320
than just making things easier to understand explainable AI uncovers biases helps us make ethical choices and
00:32:41.760
enables AI systems to be audited and improved a compelling example would be
00:32:47.320
if you asked for a like a credit loan or
00:32:53.039
a loan and you'd be denied by just saying you have low credit worth it
00:32:58.360
doesn't explain much so you would need to know if there was a viance against your ZIP code against your age against
00:33:04.720
your gender and explainable a i system can point out specific factors that lad
00:33:10.159
to that decision so what you can do if you're a
00:33:17.440
maral learning developer incorporate explainability from the start if you're designing an AI
00:33:23.519
system you can promote model transparency and you can start from easier models and go to the complex ones
00:33:30.840
by integrating transparency into it if you're working at an org that uses AI
00:33:37.080
you can push for an audit of bias and fairness and if you're attending Ruby
00:33:42.159
com make sure to advocate for interdisciplinary collaborations engage in global discussions and policymaking
00:33:49.519
and educate and share knowledge thank you this is my latest
00:33:58.080
yeah so uh it's really great to be here that was a great talk that was really fantastic that was very very serious and
00:34:04.279
very very good content and high quality slides I really liked it my name is Benjamin fler uh I work for a company
00:34:10.440
called xbe where I uh my title is principled developer it was originally a
00:34:15.800
typo I try not to call myself the principal developer though because that's problematic uh can I get everyone
00:34:21.240
to stand up here very briefly it's good to get like a little stretch out we're going to get our body here now um
00:34:28.480
I think Aaron Patterson did this once and I just thought it was awesome uh so I'm gonna I'm G to take a picture of everyone all my Ruby friends here hey
00:34:35.520
Ruby friends hey everybody hey oh we got some highs back there amazing all right all right slides
00:34:44.560
here we go um so yeah you can stand or say as As You Wish here it's totally
00:34:50.480
great uh so the company again is called XP uh this is a slide my boss made he makes amazing slides I make slides that
00:34:58.079
look like this uh the company uh so we had so we had this idea I read an
00:35:03.240
article in 2011 about Cowboy coating and the pink sombrero and I uh the idea kind
00:35:10.720
of came with me and um well I don't have a pink Sombrero but I have a little
00:35:16.800
bitty Sombrero uh and I started using this idea so the
00:35:22.880
idea with the pink SoMo is that sometimes you do things in production that aren't great but you still need to do it uh so if you're like like logging
00:35:30.200
into the production Council what what should you do well you put on a pink SoMo this is back in when we had offices
00:35:36.960
uh and you're like oh something is happening here and people could go and see what's going on uh at the desk of
00:35:44.000
the person with a pink somero so I always sort of had this idea of like uh a place to to acknowledge that out of
00:35:51.359
process things happen and you can make a process for your out ofprocess things
00:35:58.599
and now at my company we get emails that say things like this I have a mass sombero
00:36:04.960
request uh and at our conference that we had in Kansas City our Horizon Conference is we
00:36:12.040
do horizontal construction which is roads vertical construction we don't do
00:36:17.920
uh people love getting sombreros uh and it's like totally
00:36:23.119
ridiculous uh that this sort of blog post turned into a way to manage our out
00:36:29.079
of uh band changes that also like people are actually they have problems when they ask us for some Burrows uh and yet
00:36:37.160
here here we are handing them out and getting funny pictures my team in India I I went to go visit in Goa I and also a
00:36:45.680
squish mellow uh yeah you know who you
00:36:51.240
are now I I wrote a a few words here about what Saro requests are uh a sber
00:36:56.640
request is basically what I was saying before when you have a request needs special handling and it just it's just a
00:37:03.119
way of saying like something unusual is happening here what it is is not exactly
00:37:09.560
clear anyway uh and we have a value proposition that we're making with that is that um one of
00:37:17.920
them is we're tracking and validating a dangerous change someone says like the invoice is wrong we paid the person the
00:37:25.000
wrong money uh can you you please change it I'm like well yeah but I'm not going to
00:37:30.520
just change it we're going to go through a process here to make sure that yes it's actually the right change and it
00:37:35.760
should happen um a lot of words on the slides again I
00:37:41.160
just I'm not great at making slides um they say it matters to know why
00:37:47.319
things went wrong because then you can help to prevent them you can make the product better and you can make the
00:37:52.839
process better and you acknowledge that it's worth knowing why it happened not just you want to get the fix out and
00:37:59.520
that's how uh we make the world a better place one uh sombero at a time uh here's
00:38:04.880
an example of an incident that we have uh in our in our platform uh Joey Bag of Donuts got paid the wrong amount uh it
00:38:12.079
actually should have been Jamie Baga Donuts uh not no relation uh and we have some uh line
00:38:20.200
items there correct the shift striver revise the invoice and reexport the
00:38:25.480
invoice uh life is funny like that so I say you know wear a funny hat uh embrace
00:38:31.440
the process of having out ofprocess changes uh the company I work for is xbe
00:38:37.960
uh x with dashes in it xb-e and I'm on Mastadon as hula at
00:38:44.200
hacker. and I'm on GitHub as BF4 I'm happy to uh talk to you and thanks
00:38:54.800
everybody hi y'all I'm Ken you can find find me at these links here I'm an intern finishing up at Deep cast where
00:39:02.160
we're making tools for podcasts and I'm a ruby scholar really happy to be
00:39:10.480
here what I wanted to talk about today was uh touch on Ruby for good if you're not familiar with Ruby for good uh we
00:39:18.200
build open- Source web apps to help non-profits you may have heard of Casa
00:39:23.359
and human Essentials we're deploying another app right now called homework Tails where we're supporting uh Pet
00:39:29.960
Rescues and shelters and when I started on this project was in January this is the first
00:39:36.920
PR I worked on it says as staff I can create a pet and draft so it is not
00:39:42.480
visible to Fosters or adopters and this uh line at the bottom kind of highlights
00:39:48.920
one of the things that I really learned working on this PR and PRS that
00:39:55.599
followed so looking at the code that existed already in the app I started to notice a lot of conditionals uh in the
00:40:02.480
controllers and in the views like right here you'll see this
00:40:09.000
conditional over here we have another conditional you might be seeing a pattern if you're reading
00:40:15.280
this all of these conditionals are trying to check the user and basically
00:40:20.520
see can they do this action can they see this
00:40:26.319
information so just a quick highlight authentication authorization are separate things authentication answers
00:40:33.480
the question of who are you authorization is all about can you do this the tools that are common in the
00:40:41.480
Ruby ecosystem for authorization are pundit action policy and can can can uh
00:40:47.599
action policy I really like the defaults it has I feel like they're very rails
00:40:53.079
esque and so I picked that to rework a lot of authorization we had in homework
00:41:00.640
Tales so when you start on a project and you need some authorization you might
00:41:06.240
start with a simple piece of code like this where you just write a conditional and you're checking one thing like is
00:41:12.880
this user the author of this record then render
00:41:18.119
this you might need roles and so you might start adding roles to your users and checking those instead but the
00:41:25.240
problem with uh this approach without a framework is that your code starts to
00:41:31.160
get muddled in your views and controllers where you have all of this business logic living in your views and
00:41:39.240
controllers we can clean this up by implementing an authorization framework
00:41:45.280
uh the again this is a action policy that's one of the evil Martian tools and
00:41:50.359
so this is a policy based authorization we write a class it can look as simple
00:41:55.760
as this the method here is named to match with the action show that's in the
00:42:02.560
secret stuff controller and using very railes magic we can match that and just
00:42:09.480
use helpers like this allowed to Helper and use that to
00:42:14.960
check in this policy given whatever you give in this context in this case we're
00:42:21.400
not giving any context can we render this uh you can also do things like pass
00:42:30.280
um records and it can check the class of those records to also match so there's a
00:42:35.960
lot of magic that really makes this process really easy you can use these in your
00:42:41.079
controllers usually use that with the authorized uh method in this case
00:42:46.480
whenever it returns false from whatever uh method you're calling in
00:42:53.880
your uh policy it'll raise an error which you could uh rescue
00:43:01.680
from in uh homor Tales we've been trying
00:43:06.800
to make these roles that we've created a little bit more clear what the
00:43:15.440
UH responsibilities of each role is so we've implemented this uh pattern
00:43:22.280
breaking it into permissions I'll share a link to the code at at the
00:43:27.960
end and here's an example of some more helpers that action policy includes like
00:43:33.960
pre-checks where you can run the same check on every single rule that you define inside your
00:43:39.920
policy I'd like to thank Vlad who wrote action policy uh his book layer design
00:43:45.960
for Ruby on Rails applications if you're interested in authorization I highly recommend that and thank you Ruby comp
00:43:59.200
anyways my name is Gary to um I work for hack club and today I'll be sharing about my top five favorite ruby gems um
00:44:06.640
honestly this talk is kind of for myself it'll give me a list of gems to install whenever I start a new side project that
00:44:12.160
I'll neverly never finish um but maybe it'll be helpful to you as well um to
00:44:17.440
kick things off well actually first these gems are intended to be slightly less known uh they're really handy but
00:44:24.280
might not be in everyone's gem files so this is why I'm sh in them uh to kick things off I have a little known gem
00:44:30.800
that helps you build websites I don't know if anyone's heard of it okay
00:44:37.640
anyways the actual first gem is awesome print it prints objects and makes them a
00:44:42.960
little bit a little bit easier to read so instead of putting uh doing puts or print uh you could simply just call AP
00:44:49.880
instead and it'll basically do indentation color and everything it'll espe it's really handy
00:44:56.839
for hashes or arrays um the only downside is that the output can get a little bit long since it is doing all
00:45:02.200
that formatting um but other than that it's a gem that I always love to install
00:45:08.000
um you might notice that on the top right of each slide I'll have a QR code so if you want to check out it's GitHub repo feel free to do
00:45:14.520
so the next slide that I have here is uh hash ID so hash ID is a way to obate
00:45:21.079
your auto incrementing IDs uh it kind of helps prevent enumeration attacks because it makes it so your ID are not
00:45:27.319
available to users so as you can see uh in your URLs you'll have a string instead of a numeric ID and those are
00:45:34.720
generated based on the num numeric IDs in your database um it's important to know that these hash IDs actually are
00:45:41.640
not hashes they are reversible U but it is possible to make it harder to reverse by setting a hash or a
00:45:49.400
pepper the next gem I have is discard uh it's a gem that helps you with soft
00:45:54.960
deletion uh this is really handy if you have users uh that may accidentally delete a record and want it undone um so
00:46:01.880
instead of calling destroy you call discard and now set a discarded at column um and that will essentially just
00:46:08.440
Mark your record as discarded uh you can use a scope uh called kep to filter out
00:46:14.640
those discarded records um which that's kind of how soft deltion works and the
00:46:20.760
tricky thing here is that if you're trying to delete associations that can get a little bit difficult um the
00:46:25.920
recommended way is to have a scope inside your record that does a join and
00:46:32.040
then essentially filters out any discarded parents um so that's something to look into um discarded takes a
00:46:40.200
different approach than paranoia or AIS paranoid which is uh I think a lot of people have heard about before um the
00:46:48.520
different approach is that they don't override any active record methods such just destroy um it also doesn't Set uh
00:46:55.520
default scope the second to last gem I have is called
00:47:02.040
ASM this is access State machine and it's my favorite way to handle State and models um there are many different ways
00:47:08.440
out there you can use uh multiple timestamp columns you can use enums um however the benefit that ASM has over
00:47:16.040
those two methods is it'll protect you from indal State transitions so let's say you have uh in this case on the
00:47:23.520
screen we have a a terminated State you also have a approv State uh let's say
00:47:28.800
you can't go from terminated to terminated to approved ASM will help protect you against that when you define
00:47:34.240
your States and your valid transitions um in additionally it'll also help you set timestamp columns so
00:47:39.839
if you love to have an approved at it'll automatically fill that in for you and then the last one I have is
00:47:47.400
paper trail um it keeps a log of who what and when uh did an action uh so
00:47:55.960
it's really handy if you're going through the rails console and you have to kind of debug what happened this gives you a great way to kind of see the
00:48:02.880
timeline of all the events that happened within uh record um the downside is that
00:48:09.160
I found it can be difficult to query uh for specific data since it's all within an association called uh versions and
00:48:16.240
you have to kind of filter for that um and the key thing to know is that if you're using uh encryption gems such as
00:48:22.280
lockbox you may have to uh explicitly omit specifically
00:48:27.680
omit encrypted columns otherwise you might uh track plain text Secrets which
00:48:33.200
would be bad um so yeah those are my top five favorite ruby gems my name is Gary
00:48:38.599
and thanks for having me thank you um yeah so tuning over
00:48:46.280
documentation why that's uh the subject I'm passionate about uh some short stories about mki so um mki is a common
00:48:57.599
line Dev tool suite for Meri programmers it is installed by default on programmer
00:49:03.599
devbox and it is made to simplify my life first and by extension hopefully
00:49:10.400
every Meri programmer's workflows and life um why would you ask right like why
00:49:17.520
creating a CLI for your company well um when I joined miraki I had like a lot of
00:49:24.760
experiences and I wanted to share the good recipes I discovered um traditionally it would be going through
00:49:31.559
like a script folder in our monolith but I found that like having um autonomous
00:49:39.520
CLI would be way more practical um it's also helping uh spe speeding up ramping
00:49:46.319
up um new employees uh it also have this uh beautiful thing of unifying developer
00:49:53.799
experience um something that is like really nice like you want to have kind
00:49:59.599
of like the same elevated experience when you're a developer you like if you have like a lot of scripts that are like
00:50:07.119
made by different people they don't have necessarily the framework behind or the
00:50:12.839
good habits or standard to write these scripts so like if you have like a CLI
00:50:19.040
or particular repo with all these um recipes you can set a standard and
00:50:25.520
create like um a better developer experience uh simplify workflows um this
00:50:32.319
is kind of like self-explain explanatory um when you create uh scripts you might
00:50:41.520
just not create like the best workflows and if it's centralized and better um
00:50:47.760
looked at it can be uh more simple to work with and finally facilitate
00:50:54.480
Discovery um or script for folder is kind of like a mess it has like hundreds
00:51:00.559
of scripts and not always like super welln named naming is hard um but um
00:51:07.599
yeah having like a CLI helps with that uh by default there's the dashh option
00:51:15.040
that makes it like super easy to document and also uh discover all the
00:51:21.799
comments that you have um yeah so I wanted to also like
00:51:27.599
share with you like the some principles I kind of like came up with for uh
00:51:34.559
writing this CLI and so it needs to be easy to contribute to with core methods available to all commments um so like
00:51:42.680
sort of a framework right always list uh what is the next step document in line
00:51:49.119
what commments do um particularly with like Dash V which is verbos and be
00:51:55.960
transparent about it add links to Extended documentation for Curious people but this is not required and then
00:52:02.960
use as much contest as possible if you're like a repo you have a change ID Shan whatever and you want to like do
00:52:10.000
something with that just like pull it from the context don't ask like the user to like do that work and offer optional
00:52:18.240
optionality of course um what can be useful for the user and then use emojis
00:52:24.480
in sper uh sometime like you have have like you know like a script it's it hangs and you don't know if it's like
00:52:31.040
bugged or if it's like doing something uh have a spinner and just show it use emojis because it's fun and direct to
00:52:38.319
the point keep verbosity under like DV or D dbag
00:52:46.079
um all right yeah so next step that's an example to FAA for instance we have a
00:52:52.359
lock system and then MK lock info merge each time I would do that I would forget
00:52:57.559
to look at my phone for like Duo like it's a two two Factor authentication I
00:53:03.319
would always forget and then like 30 seconds later I would be oh yeah I need to see my phone okay so now it's there
00:53:09.319
it tells me like check my phone I also added dogs because it feels like a little boring
00:53:17.160
so uh use Spinners right like we have like mki bundle and St we have like several environment because we are like
00:53:23.200
upgrading and so yeah that's really nice nice to see like it's
00:53:30.680
ongoing in line dock like is it like better to have like the left one or the right one right you are in your terminal
00:53:36.720
you don't want to like go to like conference or like whatever uh Wiki you have in line
00:53:45.119
dog um I will go through that really quick but yeah that was
00:53:58.240
the most efficient lightning talk session I've ever been to so first can we give a shout out to
00:54:07.400
Sarah I uh am always kind of a pain in the ass before Sarah was texting me
00:54:12.599
before like are you coming I was like I'm coming I'm just a little bit late finished a little graduation thing thanks uh for coming around this evening
00:54:18.760
my name is Jeff casmer I'm the executive director of The Turning school you got to hear from some of our great alumni
00:54:25.280
and I also somewhat confused the AV people when I was like I don't have a I don't need a computer and they're like but what about your slides and I was
00:54:31.520
like slides I hate them uh so I want to give a little lightning talk uh to you
00:54:38.520
tonight kind of following on some of the things that Matts was talking about yesterday he said that the Ruby
00:54:44.440
Community is unique in the way that people bring love into this space into
00:54:50.720
the work you know and for those of you who have been in other programming spaces I I I hope that it does feel
00:54:55.799
different to here this week and I I think love is such an interesting word for programmers right where we're
00:55:02.280
supposed to be like doing nerd stuff behind our computers and instead people are talking about
00:55:07.760
feelings and love really the idea of love is like Reckless it's essentially
00:55:13.599
unwise and dangerous like when you put love into things when you allow yourself
00:55:18.760
to love you set yourself up also for hurt right when we mix our work and our
00:55:24.799
identity like when we say I am a ruby developer we're necessarily opening
00:55:30.599
ourselves up to a degree of vulnerability this is a quick Community participation
00:55:36.599
moment if you or someone you care about has gone through a layoff in the last two years give me a quick
00:55:43.000
boo boo sucks and it hurts not just because of
00:55:50.599
the uncertainty not just because the financial impact for people but because
00:55:56.000
there really like violates trust you know it violates the effort the care
00:56:01.599
that we've put into the work that we do to the people that we work with and then
00:56:06.760
they're gone and maybe it was you who had to find a transition you know and if it was I'm glad you're here
00:56:12.240
today the obvious answer is just to care less to say like I'm just here to code
00:56:18.599
it's just programming it's just work it's essentially just exchanging hours for
00:56:24.000
money but really that's no way to live you know it's it's not the way that we here I think choose to do it it's not
00:56:30.720
what brought you to Ruby conf you could be at home right now this is a late session sir okay if
00:56:39.160
today however in joining into this space you had a conversation that brought you
00:56:45.839
a little bit of Joy or helped you think differently about an idea could you give me a quick woo woo okay back here I
00:56:55.119
don't know who youall been talking to to we got to get you some better conversations it was quiet back there but no you're good uh if I ask you to
00:57:01.440
step back for a moment back to when you first entered into these spaces maybe it was a first Meetup a first conference
00:57:07.960
Etc there was probably a friend or teacher who helped you write your first lines of Ruby maybe it was some wild
00:57:16.039
comic book ridiculously called a poignant guide or was some other path
00:57:22.280
where someone put a little bit of their love out there sharing their interest and passion in this space with you you I
00:57:30.319
think about uh this French singer Edith PF said when you reach the top send the
00:57:36.720
elevator back down and I think when Matt is talking to us yesterday trying to set
00:57:43.400
the tone for these conversations and these spaces it's a reminder of like how
00:57:48.480
it came to be this way that it's not by accident it's like through this care and appreciation you know when we talk about
00:57:55.039
like being nice nice isn't really enough nice isn't what love looks like to send
00:58:01.480
the elevator back down really means like proactive taking steps we don't have to do putting ourselves at risk doing
00:58:07.799
things because we want to so here are three quick ways that you can put a
00:58:13.480
little more love into our community number one you already did it show up
00:58:19.440
you're here now good job when you show up to local events to meetups or join
00:58:24.839
Community spaces online you create space and joy for others you make it okay for them to be there and
00:58:30.920
you let them know that like this is a place where we do it we choose to engage
00:58:36.000
together number two a little bit harder one is responding to
00:58:41.920
outreach I know you got to get on LinkedIn sometimes okay people you got to answer some of those emails when you
00:58:47.760
talk with someone new someone you don't know even if it's just for 15 minutes you help them believe that there's a
00:58:53.960
place for them here you help help them find their way into this space just like
00:59:00.200
someone probably did for you you don't even have a microphone okay I'm going to be fast number three remind people of
00:59:06.599
where you come from you weren't hired for the person the developer you are today you were hired in a more Junior
00:59:13.200
less Advanced State and when you try and open the door for someone like that uh you make our community a better place to
00:59:18.920
be this is a special place the way we keep it joyful is not by protecting it
00:59:24.039
it's by growing it to welcome people in just like you and I were welcomed in
00:59:29.160
here even by Sarah and being bold enough to put just a little bit of love into
00:59:35.160
the world thank you so this talk will be a little bit
00:59:41.079
more technical sorry for that um my name is m kirak and I'm going to talk about
00:59:48.079
selfhosted observability stock for Ruby apps let's start with a quick um show of
00:59:55.200
hands the I will I'm going to ask you four questions the first is very easy
01:00:02.480
please raise your hand if you collect logs from your applications yeah almost
01:00:07.599
everyone now please raise your hand if you collect metrics from your applications
01:00:14.119
great um now please raise your hand if you collect traces on the right side so
01:00:19.400
breakdown of okay fewer now please raise your hand if you have it all correlated
01:00:25.200
so you can navigate from metric to logs and to to okay very few but I see some
01:00:32.160
hands great um okay I believe that Telemetry is the best feedback that we
01:00:38.720
can get from production environment um so we developers work in
01:00:44.359
in in a feedback Cycles so for example here here we has here we have a simplified development cycle where we
01:00:51.640
have stages like local environment CI test environment and production environment and for example on local
01:00:58.520
environment our feedback loop is produced by tests so when we make a code change we run tests to see um the to see
01:01:07.880
if the if the change does what what is intended to do the further in this process the more difficult it gets to
01:01:15.039
get uh good quality feedback from from from the next stage so if you pay
01:01:21.200
attention if you care about your tests because that's your productivity Tool uh during the development I think you
01:01:28.160
should also strive to have a high quality Telemetry data from the production environment because that's
01:01:34.640
your productivity tool when you um debug production
01:01:39.760
issues um yeah why to bother why to create your own observability stock
01:01:47.039
because I've noticed that we were trained that observability very often
01:01:52.640
gets reduced to choic a vendor in selling a gem and adding some API key
01:02:00.160
pushing into production and job done um when you do a a small stretch and you
01:02:06.079
work a little bit with some open source projects you can gain a lot of knowledge
01:02:11.440
how it works under the hood um yeah it sounds like a very
01:02:17.119
common buy versus build problem so is it better to buy off the shelf product or
01:02:24.200
is it better to build something think by gluing some open source projects I know
01:02:30.720
it's a very nuanced and you have to um you have to uh evaluate it for
01:02:36.880
yourself however I I highly encourage everyone to give it a try because as
01:02:43.319
soon as you try you will notice that you probably use pretty much the same tools that your vendor
01:02:49.680
does um yeah it's actually good but yeah
01:02:55.559
that's the that's that's a fact um this is a typical observ observability pipeline so it all starts with
01:03:02.480
instrumenting the your application then there's collector which receives the
01:03:08.400
data um here also you can apply some Transformations like sampling or
01:03:14.920
aggregation then all the data gets pushed to um storage service where where
01:03:20.960
it's persisted and it also the data is exposed by by qu API and then this data
01:03:27.960
can be accessed with some dashboards and alert managers I have demo and I have one
01:03:34.760
minute I will give it a try um yeah so here I have very simple
01:03:40.400
race application with some endpoints and I have a k6 script which will um
01:03:47.640
simulate some load so I will run my case6 script and I will go to my
01:03:54.720
local graph instance I will go to some dashboard and we should see some data
01:04:02.279
coming in soon yes um so here we have um
01:04:07.640
latency heat map which is basically uh a histogram of
01:04:13.240
latencies and here I can see that there's one end point that is very slow
01:04:19.279
it takes uh P99 is 2 seconds so from here I can go
01:04:25.400
to logs all related to this endpoint and from those logs I can go to traces to
01:04:33.319
see what was that slow um so this is a breakdown of what
01:04:38.359
is happening um during this endpoint and this is all offline I'm not
01:04:44.559
connected to any Wi-Fi this is just yeah if you are interested um I push this
01:04:52.039
setup to to a GitHub report you can check it out and
01:04:58.200
yeah and and thank
01:05:03.319
you thank you and I'm just realizing that the speaker notes aren't showing
01:05:08.960
but uh hello Ruby friends how's everyone doing you'll need to extend all right
01:05:15.359
hello I'm GNA try to make this short and sweet because we got happy hour after this and the reason I'm here is to hang
01:05:22.319
out with all of you guys and not just St my name is Justin Bowen and I'm tons of
01:05:28.160
fun on the internet I've been doing Ruby for 17 years and the last 10 years I've
01:05:34.359
been doing computer vision uh with python and the last three years I've
01:05:40.400
been doing diligence for Acquisitions and Investments with private equity and
01:05:46.520
Venture Capital firms and last year I spent some time working as a staff AI engineer at a
01:05:53.440
large 8-year-old well-funded did rails Shop with a rails
01:05:58.799
monolith and I worked on nextjs with vel's AIS
01:06:04.799
SDK and that's not really what makes me happy what makes me happy is writing
01:06:10.480
Ruby uh I am located in San Francisco and I live there with my wife and my two
01:06:16.720
cats oh and I am the creator of active agent um so before we get into active
01:06:23.359
agent I wanted to just talk a little bit about the Ruby toolbox you know the Ruby
01:06:29.160
toolbox is something that's been around for a while I'm pretty sure it's something Ruby Central maintains and
01:06:35.400
there's usually always a gem for that whatever you're doing there's a gem for
01:06:40.720
that but with the real-time computer vision I was doing there wasn't a gem for that and until last year when I
01:06:47.520
worked with Andrew Kane to fix the onx runtime Ruby library that he made uh we
01:06:53.760
weren't even able to use gpus to do inference for computer vision in Ruby we can now and it is just as fast as it is
01:07:01.119
in Python so what I want to do is Advance
01:07:06.880
Ruby's AI Dev tooling and I'm working with Ruby Central on forming a working
01:07:12.119
group to do just that so that we can get sponsorships for Grants to write
01:07:17.920
proposals to do open source and get paid to do it so active agent
01:07:26.760
active agent is a comprehensive AI framework for building AI apps in
01:07:33.279
rails active agent is more than just a cool looking ruby
01:07:39.599
gem agents take on the Persona of different uh operators to perform
01:07:46.480
actions and complete their objectives using tools based on the instructions
01:07:51.920
that you give them they can even behave like Cowboy like uh our friend in the back
01:08:00.960
with cowboy hat howdy Ruby friend he will show you how to open
01:08:06.839
source and so active agent is made up of action prompt which allows you to Define
01:08:14.880
action methods just like you do in any other abstract controller like action controller or action mailer your action
01:08:21.080
methods become tools that your agent can call to render information to the user
01:08:27.239
in generative UI something I got from nextjs and also retrieve information and
01:08:35.000
with the generation provider you're able to interface with different generation provider backends like open Ai and
01:08:41.199
thropic all with a single symbol change and a string change for the model with Q
01:08:47.799
generation you can just generate later just like you deliver later with a mailer and with streaming you can stream
01:08:53.799
content back to your agent or or to the user with action promp active that's
01:09:01.400
typo with action prompt uh you get Dynamic prompts and generative
01:09:06.679
UI so the generation provider is that common interface to interact with open
01:09:11.799
Ai and more and streaming with oh last
01:09:17.239
slide's the most important if you want to learn more about the Ruby AI working
01:09:22.520
group or active agent you can sign up for the newsletter and you can find the
01:09:27.920
repo test it out contribute give feedback pull requests are welcome thank
01:09:38.960
you okay I realized that I did that exactly the same as I'm doing that every
01:09:45.759
time so I come with the lighting talk I decided to do it one and a one and a
01:09:52.440
half hour ago and it's the same like my yesterday talk that I was on the speaker
01:09:59.960
agenda not even week ago so I'm again here and yesterday I have a talk about
01:10:06.320
Ruby Europe and why the community is so important and why the locals meetups are that important and there were so many
01:10:13.120
questions so I decided to bring my old presentation to show you why it's important to attend those local meetups
01:10:20.239
to attend to to present on those local meetups and why it's so important to
01:10:25.880
organize them so let's start with the attending so it's worth for attending
01:10:32.239
especially when we all now working remotely it's it's really good to meet each other each other in person you
01:10:39.920
exposure to the new ideas new tools new best practices and these exposures
01:10:45.320
inspires you you can bring your idea for your liking talk your talk or your maybe your open source or even startup and you
01:10:52.880
can find mentors there or support all the in their careers and there is also really
01:11:00.600
important part which is most important for me it's this build relationship with
01:11:06.120
this likeminded professionals you can discover job opportunities and collaboration on those local meetups and
01:11:15.280
uh you can you you can make a lot of friends you meeting with those people every month for two four hours to
01:11:21.480
drinking beer talk to them and you can learn also something in in the meantime and why it's so important to
01:11:30.120
present to present it you basically you contributing back to the community by
01:11:36.120
sharing your expertise you establish yourself as a expert in that topic and I
01:11:43.719
can I can highlight from my expertise how important is when the candidate has
01:11:49.080
proven their in their resume that they have presentation or articles written
01:11:55.040
all already and doing a presentation is also really important to improve your
01:12:01.440
communication skills so you learning how to communicate how to speak to people
01:12:07.920
and it's really difficult to explain something complex to those who are not
01:12:12.960
familiar with the topic and that this skill can be helpful for you when you're
01:12:18.520
talking with your client or not technical client and in your team in general and these skills are really
01:12:24.880
important important especially now in this AI era for all of us for for
01:12:30.639
engineers and teaching is also learning and why it's so important to
01:12:36.120
organize you develop your Le leadership and organization skills You're Building
01:12:42.199
visibility and trust you get new talents don't be afraid of that companies make a
01:12:49.159
big effort in contributing into the community to get back to to get talents
01:12:55.239
to attract potential co-workers and you create a sustain a supporting
01:13:01.639
environment for for other people to grow for to stimulate also your team and your
01:13:08.360
community and remember to don't go alone to find people to find other
01:13:15.280
organizers they can help you co organize sponsor and bring people repost or
01:13:22.040
present something and believe in your effort so whatever you attendee presenter or
01:13:31.080
organizer or any other contribution into the our community I will tell you a
01:13:37.159
short story so former CTO of visuality uh around N9 years ago decided
01:13:43.400
to make a small course on the University he showed up and he was he might be
01:13:51.880
disappointed seeing only six people on the lecture hall all those students uh
01:13:57.840
was on the Technical University and they had classes in but they they had a
01:14:03.639
programming classes but not in Ruby maybe few few of them but all those
01:14:09.040
people was wanted to develop they wanted to explore and willing to improve to
01:14:15.960
grow and you know what at least three of them are still Ruby developers and one
01:14:21.719
of them is Yos the creator of super maybe you know him he's a speaker on the
01:14:28.159
conferences like rails World Euro RB and multiple other conferences what an
01:14:34.520
incredible career and everything thanks thanks to Shakir the the CTO effort to
01:14:40.760
bring Ruby to those several young people and keep going believe that this
01:14:49.960
impact might be not immediately but it will be in a f future and all of us are
01:14:57.600
important and let's go drink something
01:15:05.120
together does anyone have a one minute talk that they would like to do with no
01:15:11.040
slides come up and do it right now hi everybody my name is David Hill I snuck
01:15:16.679
on stage during Drew Bragg's keynote this morning um the the whole theme of the conference
01:15:23.120
for me has been community and that kind of so anyways I have been working on a
01:15:30.400
podcast the last couple of months called OD to rails conon uh it's been kind of growing out of the announcement that
01:15:36.840
rail con is coming to a close next year and the community has been the big through line for me through these
01:15:41.960
various episodes every episode is a new uh person I interview uh about their experiences at rails comp when the
01:15:49.280
announcement came that the that R comp is ending I started to feel very nostalgic and oh remember when and these
01:15:55.600
experiences and encounters that I had with people that I I admired and and wanted to have a chance to to work with
01:16:02.280
and those types of stories that I started to kind of share and talk with other people about and kind of had this
01:16:09.080
Epiphany well maybe maybe other people in the community have those types of stories too and those types of things
01:16:14.159
that they would like to share and be nostalgic about so please come listen to the
01:16:21.679
podcast perfect a perfect talk any other
01:16:26.760
takers uh hello glorious people of uh Ruby comp I'm
01:16:32.719
schnees howdy howdy uh who would like to contribute to
01:16:38.080
open source who would like to contribute more to open source who would like to be the
01:16:43.960
most amazing open source contributor in the history of all open source
01:16:49.639
contributions so uh I have a book that is all about open Source contributions
01:16:56.159
um it is how toop source. deev and I have a discount code here that will make
01:17:01.360
it free to download so you can come up and QR code it I'm going to leave it like right over here so uh it's also I
01:17:07.679
put it in the event hack day slack uh the code is hack day
01:17:13.760
2024 uh and uh the URL is how toop source. also um yep
01:17:29.800
thank you any other takers hi everyone my name is ran and
01:17:37.080
Payne I'm just going to use this as a quick opportunity to introduce myself if you don't already know me um I run a
01:17:43.600
marketing agency called SEO media and recently as of three or four weeks ago I started uh leading marketing for Ruby
01:17:50.760
Central so um I love this community I have been going to Ruby and rails events
01:17:56.480
um for the past two years now two and a half years um and just like the warmth of this community is so incredible and
01:18:02.800
it feels so good now to be part of you know hopefully creating really cool
01:18:08.560
resources and you know marketing and different things that can really benefit uh the community and the ecosystem so if
01:18:15.440
anyone has ideas for like things you would like to see Ruby Central do in the
01:18:20.760
future in terms of marketing or anything else like talk to me or find me on LinkedIn or Twitter um would love to
01:18:27.600
hear from you and yeah I think there's a lot of cool stuff that we as an organization can do to continue to
01:18:33.040
support all of you better so um happy to be a part of this and thank you guys so
01:18:44.920
maybe two more I see one okay my name is Cindy Bachman I'm
01:18:50.840
the current owner of confreaks and confreaks was was started in 2007 by um
01:18:57.600
Kobe ranquist and Charles youngl and it was started because they were at a
01:19:03.040
conference uh one of the first ones that Matt spoke at in the US and afterwards
01:19:09.360
they were like oh my gosh there was so much information he actually had 400 slides at that talk and so they decided
01:19:17.080
they wanted to film Ruby events and started conflicts um my brother is Kobe
01:19:23.040
I bought the company from him in January of 2020 I've worked with con freak since
01:19:29.239
2012 and we've filmed Ruby comp since 2017 reals conference reals comp since
01:19:36.639
2012 if you ever have questions need help I love the Ruby Community I want to help and I'm con
01:19:46.600
freaks all right I'm sorry everybody but we got to wrap it up thanks so much for being here today thanks so much to all
01:19:52.600
of our speakers and have a great time at the happy
01:19:58.360
hour this concludes today session