Jose Miguel Tomita Rodriguez

Lightning Talks

RubyConf 2022

00:00:00.000 ready for takeoff
00:00:17.580 yeah hello everybody I'm very very excited to be here so I'm starting my
00:00:23.520 talk with this loading gift intentionally because I didn't want people to get scared of the actual talk
00:00:29.820 and I'm going to talk about war war in Ukraine and before you think that oh my
00:00:35.219 God we're in Ukraine not again I want to make couple of promises here I promise
00:00:41.460 not to share any violent pictures I promise not to uh talk about politics I
00:00:49.200 promise to make couple of humble attempts in humor and I promise to try
00:00:55.079 my best to answer two questions of why and how why we should help here we
00:01:01.079 attendees of Ruby conference and how we can do it but who am I to talk about it
00:01:07.020 I'm Olga boyarensiva I'm a full stack engineer at Cisco Meraki I forgot to
00:01:12.479 take off my mask and shocking news Cisco Meraki is still
00:01:18.060 hiring and I'm also Ukrainian my family is in Ukraine my cousin right now is in
00:01:24.540 Army he's in on front lines my grandparents are actually in the city
00:01:30.360 which is occupied by Russia the majority of my family and friends
00:01:35.520 are in capital and Kiev they are without power without heat without water but
00:01:41.640 they're there and they're fighting so why we should help first of all I
00:01:47.220 believe that all of us here are ukrainians you're either are Ukrainian or you have Ukrainian relatives or you
00:01:56.040 have Ukrainian friends if you don't have Ukrainian friends come talk to me after the talk I will be your Ukrainian friend
00:02:03.119 but also we should care about uh this professionally so Shameless plug
00:02:08.819 here to Victor Chapel of a very very prominent Ruby Community member and he
00:02:15.000 was actually talking here at Rubicon in Nashville 2019.
00:02:20.340 Victor right now is in kharkif just imagine kharkif is the city in
00:02:25.500 eastern part of Ukraine it's been bombed and Shout every single day of this nine
00:02:32.340 months like every single day he's still committing to open source his contributor to Ruby language so if you
00:02:40.379 don't want to be friends with me have a Ukrainian friend think about this professionally here is Victor
00:02:46.319 and how we can help of course the best way to help is
00:02:51.420 donating money and usually people divide between those who donate always and
00:02:57.959 those who are like my husband and believe that it's all a scam it never
00:03:03.959 reaches like destination and yes the big International Charities only a little
00:03:10.920 little fraction of that money reaches the destination so of course the best way to donate money is find those local
00:03:19.019 charities who work there in Ukraine but it could be hard for Americans to do
00:03:24.659 that yeah you have to know Ukrainian language you have to have friends but now you have one friend yep and so you
00:03:31.860 can find those Charities but still if it's hard to do that if I would ask you to take just one
00:03:39.599 picture of this talk please take a picture of this one this charity razum
00:03:44.700 rather means together together for Ukraine this charity is was founded in
00:03:51.959 United States they are fully fully transparent with their expenses and they
00:03:58.500 are registered nonprofits so if you donate to this charity you can claim those money on your tax
00:04:05.340 return but also I personally volunteered with this organization for many years I
00:04:11.459 know all members of the board of the organization not a single Cent is spent
00:04:17.340 on salary like everything you donate will go to Ukraine
00:04:22.440 but also now I want to mention another how another how to help I imagine here
00:04:28.380 in this room there are a lot of professionals a lot of managers so I ask
00:04:34.020 you please hire ukrainians there are so many ukrainians in the United States
00:04:40.320 that came here for United for Ukraine program maybe you have offshore team and
00:04:46.380 you're thinking about getting rid of that yeah Ukrainian team because power outages so let me tell you those people
00:04:54.479 are buying starlings to have power and Wi-Fi yeah so please don't fire please
00:05:01.800 hire ukrainians and I've been very good with my time I have 10 seconds left I
00:05:08.160 wanted to say huge thank you I want you to remember me not as a yet another Ukrainian asking for money but the one
00:05:15.780 who said without you we could not be able to be fighting thank you very much
00:05:25.020 hi everyone my name is Jose Miguel Tomita Rodriguez I go by xiaomi for
00:05:30.419 short and this is my talk baking is like programming so a little bit about myself I am a pastry chef turned
00:05:37.860 um developer slash aspiring career transitioner and actually the title of my program is a vegan gluten-free baking
00:05:45.360 is like tutorial hell lessons from the entry developer trenches so um a little
00:05:51.300 bit more context on myself I've always loved baking uh I've been baking since I've been in middle school and I've been
00:05:58.020 professionally baking a vegan gluten-free pastries for the past three years now and when it comes to software
00:06:03.600 engineering I've grown to love it my first time coding was in high school where I almost failed the class
00:06:10.320 um was it reintroduced to it in undergrad coding for video games and as of March of this year I am a graduate of
00:06:23.100 let's go ahead and get into it so um for those of you who do not have to know what tutorial hell is
00:06:29.759 um it is an early period in the developer life cycle where bootcamp graduates self-talk coders and any other
00:06:35.580 poor unfortunate soul um jumps from tutorial to tutorial trying to level up their skills and
00:06:42.539 hopes to become a self-reliant coder and get that first tech job so unfortunately
00:06:47.819 this jumping around can easily turn into an endless cycle either the material doesn't stick or you get lost in the
00:06:53.819 amount of um code and skills needed to become a competitive uh candidate so uh
00:07:01.800 this an ability to break out of that cycle turns into a loop and into a hell of sorts so the smucking around in the
00:07:09.180 dark is actually very similar to the work I do at the bakery so what's the deal with vegan
00:07:15.060 gluten-free baking so first of all it's not a very well documented science there are a lot of online recipes and we can
00:07:22.440 call them tutorials for the focus of this talk um but they leave a lot to be desired and usually they're only really good to
00:07:28.319 they're only really good as a jumping off point so um
00:07:34.259 and also considering um that there are constraints of the bakery I work at not only do we serve people who have Celiac
00:07:40.979 or vegan diets but there's an emphasis on healthful eating so everything is organic mentally processed which leads
00:07:47.400 to a lot of very um a lot of design constraints so uh
00:07:53.340 for example um these design constraints actually lead
00:07:58.440 to an abundance of options for when it comes to uh ingredient choice so do you use almond flour do you use sorghum
00:08:04.560 flour Millet brown rice oat flour what about the amount of fats like do you use coconut oil olive oil
00:08:11.400 um so what kind of mix of ingredients are you going to choose that's going to give
00:08:17.220 you the results that you want in terms of flavor presentation and cost and so let's take starches for example there
00:08:24.419 are quite a variety of starches that we use at um the bakery and they all basically do the same exact thing but
00:08:30.419 they all have their own nuances so unless you go out and experiment you really won't really know what they do
00:08:37.140 and so this type of abundance of options is just kind of like the amount of
00:08:42.779 programming languages there are and also Frameworks so as an entry-level developer you can be kind of like lost
00:08:49.980 in the amount of tutorials and guides that there are online so without a set
00:08:57.000 guidebook for either it becomes a protracted process to not only make single batches or one-off tutorial based
00:09:03.480 projects but to develop good coding patterns and self-reliance to break from the tutorials and to code slash Bake Off
00:09:10.200 book as an entry-level developer I don't have a hard and fast solution to finding
00:09:15.480 salvation from this tutorial underworld but I do have lessons from vegan and gluten-free baking that I think can be
00:09:21.480 applied to at least turn your tutorial hell into a tutorial purgatory
00:09:26.580 so how to break free um so unfortunately I think the most concrete uh things that help our time
00:09:34.620 persistence and continuous learning every time I make cinnamon rolls at work for example
00:09:39.959 um I learned something new that may become a best practice so did you know that if you add more water than you
00:09:45.420 think to gluten-free bread you actually get a better rise because it becomes fluffier or how about that you can only
00:09:51.839 get one rise out of gluten-free bread which my hypothesis is that there is no gluten structure for it to like
00:09:57.839 re-inflate soon we've got one good Rise um and that's kind of like the way I
00:10:03.779 learned Redux was just like going through it and learning it um sitting
00:10:09.240 down and working through and another lesson is to repurpose root of stakes
00:10:14.760 don't let them go to waste um even if you're stuck on a project
00:10:19.920 um comment it at least it'll uh be counted as a GitHub contribution and
00:10:26.040 lean into your support network um I have had the uh blessing of having a
00:10:34.500 support network who that's helped me keep saying through the baking and coding process
00:10:40.040 of friends family and mentors and my classically trained um pastry
00:10:46.440 chef Katie with the cupcake she would kill me if she knew I was using this photo of her but um she's learning alongside me um
00:10:54.600 being gluten-free baking but with her expertise and my Hands-On knowledge we've been able to get through the
00:10:59.820 pandemic escaped free and I've also had the opportunity to get to meet a lot of
00:11:06.720 really good Engineers who've been able to motivate me and inspire me and lastly
00:11:13.019 I've had a lovely family my husband and my cat who have been with me through the
00:11:19.500 whole process and without them I wouldn't be here today so I'd like to thank you for your time and connect with
00:11:25.560 me if you'd like thank you my name is Tom Brown personal URLs
00:11:32.220 here's Tom with weather.com and uh glad to be here we're sharing our uh personal
00:11:39.360 identifiers on on Mastodon like Alice Alice at macedon.social but
00:11:45.500 macedon.social is not a personal domain Alice doesn't own or control
00:11:51.860 macedon.social so what if she wants to use her personal domain what she can do
00:11:57.540 the cheapest easiest thing is um she can add a DOT well-known slash
00:12:06.360 web finger file if she's using like a static site generator like Jekyll and
00:12:13.019 then what you can do is she can use novu mataki's web finger gem to
00:12:18.899 um if oops you know gem install web finger and then she can put her Alice at
00:12:27.860 macedon.social to web finger and she will get a Json object back and she can
00:12:35.040 put that into her dot well slash known slash web finger on Jekyll make sure to
00:12:40.620 include that well-known directory and then boom she can now be searched by
00:12:45.720 Alice at example.com that's it thank you
00:12:51.540 uh Barrett I'm going to need a little bit of help if I could have your help up here please thank you I only have one minute so I
00:12:58.500 want to address a glaring Topic in the room I have now spoken at rubycon for rails
00:13:03.720 confident handful of time excuse me to address a glaring issue in the community
00:13:09.360 that I believe needs to be addressed today because I only have a minute I'm going to go through a handful of things the
00:13:15.060 first is I believe that it is the best of intentions for everybody here
00:13:20.639 to know how to give a stellar high five so I'll be going over that today deep
00:13:26.040 breaths thank you but I know that right now is an interesting time for high fives so I
00:13:31.560 would like to advocate for alternatives to said high five and Barrett will go over a few of those with me now if you
00:13:38.279 could please stand up and join me I would like to teach you a few of these alternatives move quickly I only have about four
00:13:44.040 seconds the first I would like to go over is known as the jellyfish it goes something
00:13:49.800 like this you extend for a high five stop and float away remember these are no contacts so bear
00:13:56.519 and I will example and then I would like you to practice ready that is the jellyfish the other one that
00:14:03.120 you are probably very common to is the elbow it goes something like this please
00:14:10.680 the last I would like to show you today is the foot bump you're probably also familiar with this I know that the World
00:14:16.019 Cup is currently happening please do not take your aggression out on each other for whether or not you have succeeded or
00:14:21.480 not but anyway it goes something like this very good
00:14:27.240 please demonstrate amongst yourselves now if you feel as so comfortable to participate in the actual Stellar high
00:14:32.820 five I will teach that to you now step number one is this friends is you
00:14:39.899 don't look at your hand you look at their elbow look at their elbow and it
00:14:47.579 will sound great every single time look at their elbow look at their elbows
00:14:54.000 congratulations you have all given a stellar high five
00:15:06.360 hello everyone my name is Richard and today I'm going to talk to you about open source but before I do that I'm
00:15:12.300 going to talk to you a little bit about CPR CPR is a life-saving technique that
00:15:17.519 stands for cardiopulmonary resuscitation uh is anyone here ever taken a CPR class
00:15:23.699 wow I feel very safe in this room good good on you so
00:15:28.740 um you will a lot of you will probably already know this but one of the things that they train you to do in CPR is before starting chest compressions you
00:15:35.459 need to get someone to call 9-1-1 specifically you need to single out one
00:15:42.480 person and get them to call 9-1-1 why just one person why not everyone
00:15:49.800 if you don't single someone out then everyone will think that someone else will take care of the problem this is
00:15:55.560 known as the bystander effect the Bice and that is whoop
00:16:02.639 that is too many clicks um the bystander effect says that the
00:16:08.760 more people that we perceive to know about a problem the less likely we are to believe that it is our responsibility
00:16:14.459 to fix that problem and that is why when you start doing CPR you don't yell out someone call 9-1-1 you you point out an
00:16:21.899 individual you get their attention and tell them to do that and by by doing that you are Breaking the Chain and
00:16:27.899 breaking this bystander effect that makes action much much more likely so what does this have to do with software
00:16:33.720 you might be wondering uh raise your hand if you have used software
00:16:40.940 okay good keep it up keep them up um keep your hand up if you've ever encountered a bug in your software
00:16:47.519 okay I actually saw more hands go up and that's awesome okay keep your hand um raised if
00:16:53.220 you have filed an issue about that bug all right keep your hand raised still if
00:16:58.620 you have submitted a pull request to fix that bug all right so keep those hands up for
00:17:05.040 just one second I promise this is not like an exercise five minute Power Hour um everyone look around these are the
00:17:11.280 people who saw a problem and chose to take an action so uh thank you very much for uh your issues and submitted PRS you
00:17:18.720 can put your hands down I want to give everybody a round of applause who has contributed to open source
00:17:27.059 when people see a problem in software they often assume that everyone knows about that problem and that is the
00:17:32.940 bystander effect in action the good news is that there is an antidote to overcome
00:17:38.280 the bystander effect you can choose to become an active bystander the next time
00:17:43.679 you notice a problem tell yourself that if you do not take action no one will
00:17:49.799 it's all about taking action and so to contribute to open source start by making an open source goal when I
00:17:56.640 started I wanted to get a commit into rails which I've done and I was super excited and told everybody about it
00:18:03.000 non-stop um and I want you to pick something that excites you and then next take an action
00:18:08.820 that moves towards that goal focus on what you can do today now a commit is pretty difficult could
00:18:15.720 you start somewhere a little bit smaller maybe slice it a little bit thinner instead of fixing a bug with a commit
00:18:21.720 could you perhaps file an issue if you can't do that can you slice it thinner still can you look at someone else's
00:18:28.080 issue and leave a helpful comment maybe you can if they've uh if they have reported the bug maybe you can reproduce
00:18:34.679 their follow their reproduction and confirm that you saw the bug if you can't do that slice it thinner
00:18:41.039 still read another issue and look for someone else's helpful comment and give them a little heart emoji and be like
00:18:47.760 yeah you know it doesn't feel like much but it's an action you're getting out there and that will help you build the
00:18:54.600 habit of taking action and learning from others so if you stay engaged look for ways to
00:18:59.640 help and practice being an active bystander then you'll set yourself up for Success if you want help getting started
00:19:05.600 contributing I wrote codetriage.com it will send you an issue in your inbox I actually announced it 10 years ago at
00:19:12.120 rubyconf was my grand opening so pretty pretty pretty pretty pretty you know
00:19:17.940 it's a little coming of home coming home homecoming um and with that issue in
00:19:23.039 your inbox you can read it comment it uh heart it or depending on your current Action level you know maybe even fix it
00:19:29.760 so you can sign up today for free on code triage.com but even with the best software it helps to have an instruction
00:19:35.640 manual um I released uh how to open source it's a book uh this is in September and this
00:19:41.039 is for coders who want to become contributors you can find it online at
00:19:46.220 opensource.dev how to open source.dev uh and for the rest of the conference
00:19:51.660 you can take ten dollars off with the code Rubicon 2022 also come talk to me
00:19:56.880 later if you want to talk about open source or if you want a sticker and everyone in this room has the capacity
00:20:02.400 to change our community you have the capacity to change the world the important part is that you take an action break out of the bystanders
00:20:09.059 effect thank you is this okay can everybody hear me this
00:20:14.220 way I need this hand free that's that's why and I wanted to hold my drink for those of you that are holding your drink because this is going to be a little bit
00:20:20.220 of participation but I appreciate uh my name is Bryce Simons uh I know the very
00:20:25.980 burning question you're all asking is that his dog on his shirt it is my dog her name is Cora she's three years old
00:20:32.520 and she is not related to the talk I just wanted her for good luck uh I am a career changer as well I attended
00:20:39.720 turning School of software and design shout out to them they're amazing uh and
00:20:44.820 I'm very fortunate to be part of the scholars and guides program so I also want to shout out rubyconf for helping me attend today I'm very thankful and
00:20:50.700 grateful um and so I was thinking about coming up with a lightning talk I knew I wanted to do something I have a tendency to talk a
00:20:57.480 lot and I might be talking a little fast because I have a lot to say uh and so I
00:21:02.880 was trying to think of what I want to come up with and I'm trying to think of do I want to do something technical do I want to do something for my past I decided to pick something from my past
00:21:08.820 I've done a lot of hiring I've done a lot of training in regards to leadership and so I thought I'd pick something quick and fun because I also like to
00:21:15.059 have a lot of fun uh and so I picked a game that I call Simon Says can I get
00:21:20.640 that raise the hands who's played Simon Says before yeah Simon says who has played Simon Says two years
00:21:28.080 oh wow that's what I thought awesome you put your hands down so I'm gonna go over
00:21:33.360 the rules just make sure we're all on the same page because I don't want anyone saying oh Bryce cheated right so
00:21:38.460 Simon Says how we're gonna play I'm gonna be Simon you are gonna be the participants I'm going to say Simon Says
00:21:44.400 and then we're going to say an action so for example I'll show you I would say something like Simon Says put your hand
00:21:49.980 on your head right and then you would all do it great and then I would say Simon Says put your hand by your side
00:22:03.539 you already had me a little bit so if I say Simon Says put your hand in your head right I'll do that now if I say an
00:22:10.080 action without saying Simon Says first right we all know this uh and I say put your hand by your side and
00:22:16.200 you do it you would be out right so we're following what I'm doing what I'm saying
00:22:21.900 right so Simon Says putting him by your side great job so I think uh can I can I engage are we ready
00:22:28.260 oh are we ready to play Simon Says are we ready yeah I want you so excited for Simon says all right so the game of
00:22:35.280 Simon Says starts now I'll be very clear so Simon says and I'm holding my drink
00:22:40.679 by the way for any of you that wanted to hold your drink at the same time just to prove to you that I can do it so Simon
00:22:45.900 Says stand up to the best of your ability thank you thank you I appreciate it all
00:22:51.659 right Simon Says put your hand on your head we've done this one something says turn on your shoulder either one Simon
00:22:57.120 Says chain on your nose Simon Says put your in your ear somebody says put your hand on your cheek
00:23:02.299 ah so some of you I saw no cheating put your finger on your forehead so Simon
00:23:09.480 says we're gonna take a pause everybody take a seat we're gonna take a seat so Bryce that was silly why why do we do
00:23:15.600 that so so the game is pause for real Simon says the game is paused I appreciate the skepticism ah yes so
00:23:22.380 Bryce why do we do that what I want to bring up to you today is just a gentle reminder as we come into the holiday season into next year maybe you're
00:23:29.220 trying to think of ways that you can influence others I just want to give this reminder to all of you that your actions speak louder than your words
00:23:34.620 right so some of you you saw me I went up here with my action well anybody remember what I said right
00:23:40.620 they're cheap over here right so again just a fun little reminder to remind you if you're
00:23:46.140 going into the workplace maybe you're a manager maybe you're maybe you're managing a group of group people that you just want to see some change in
00:23:51.600 maybe you're saying things potentially I don't know maybe you're saying things that are different than how you're leading right it's just a reminder lead
00:23:58.620 by action lead by what you're doing and this is outside of the workplace maybe you want to see a change in your own family maybe you want to see a change in
00:24:04.679 your relationship to change anywhere it starts with you it starts with your actions so please I would just ask keep
00:24:09.720 that in mind moving forward there's no harm in it um my name is Bryce Simons I am a ruby
00:24:15.659 developer looking for my first job thank you so much for listening my talk I greatly appreciate it cheers
00:24:22.559 sweet all right hi my name is Jacob the Dario I'm a junior Ruby on Rails
00:24:27.780 developer who had the Good Fortune to break into the industry this past year and this is my first Ruby conference so
00:24:34.320 thanks for welcoming me
00:24:39.600 so really quickly I'm going to give a 500 foot view of models and multi-tenancy and row level
00:24:46.020 multi-tenancy to be specific at least according to access tenant so disclaimer I already mentioned I'm a pretty Junior
00:24:52.559 developer um I wanted to give this quick lightning talk just to show some of the other younger developers that some of these
00:24:58.919 technical Concepts even though they seem intimidating and they have fancy names they're actually easier to understand
00:25:04.919 than you might think but if you're going to go implement this at work probably check check my own work so a bit of
00:25:11.940 background I have a small toy application that I developed for some of my friends who are still in college and
00:25:18.659 I wanted to do a multi-tenant so I hopped on Twitter as one does and I started asking some of my friends from
00:25:23.940 the internet hey what are the gems that people use for this and Chris Oliver maintains access tenant so I I popped
00:25:30.900 open the source and started digging into it and I thought oh this is like 10 files how hard can it be so you know I
00:25:37.980 don't pay myself to work on my Toya app and I figured time doesn't matter might as well dig in and just see if I can
00:25:43.740 learn something along the way and I found that mostly it's just code added to the models there's a few time pieces
00:25:50.880 but really there's three pieces that go into getting your models tenants safe for row level tenancy
00:25:57.440 safety by default validate your data and there's a one big
00:26:02.820 validation that really kind of goes into this and lock down the accessors and I'll quickly walk through what all that
00:26:09.419 looks like translated into plain Ruby with no meta programming so first safety by default for my
00:26:16.620 application my tenant is called an organization so we have a nice little uh Association on there and then we have
00:26:23.940 two important validation or two important like guard rails so first we
00:26:30.179 have a default scope shock War I know a lot of people don't like to work with default Scopes but this is kind of one
00:26:35.940 of the things that I'm glad I did dug into the access tenant library for because there's a default scope on all
00:26:42.000 your models if you use access tenant that's part of the library and what this does is it ensures that you can't
00:26:47.400 accidentally bleed tenant records in between different tenant accounts so if
00:26:53.460 you have a current tenant set in this case an organization it will only query records that belongs to that tenant so
00:27:00.179 save by default right you don't have to worry about forgetting that in your query next it also forces uh
00:27:08.340 setting a tenant on your models so anytime you go and you run a crate action on a Model it's going to
00:27:15.240 automatically set that tenant ID in this case once again an organization ID say
00:27:20.700 if by default we don't have things floating into the global scope the next piece is validate pardon me
00:27:27.659 validating those models there's really One Core validation this looks a bit complicated but it does the same thing
00:27:35.039 over and over again what it does is it uses uses reflect on Association and it checks all of our belong to associations
00:27:41.700 on the model and then it says hey if this is the organization or your tenant you know
00:27:47.340 belongs to ignore we don't need to check that but if it's not let's make sure
00:27:52.559 that all of the records belong to the same tenant that way we don't have a circumstance where for instance if you
00:27:58.679 have a post and a comment the post belongs to one tenant and the comment belongs to another that would be bad
00:28:04.559 because now you're bleeding records across different tenants so this just implements this validation for each of
00:28:10.559 your belongs to associations on your model uh and finally we locked down the
00:28:15.779 accessors so these two accessors again control the ability to set my
00:28:21.059 organization or tenant and so it just overwrites them right so for the top one
00:28:26.340 we'll try to write to the column and then if the tenant was modified which
00:28:31.740 means it's going to save a change and it's been persisted already it won't let you do it and it will raise an error
00:28:37.940 similarly if you try to go through the association path in this case organization assignment but whatever
00:28:44.760 your tenant name is it'll do the same thing if it's detected that's modified and we just call it the superhero
00:28:51.539 um and that's really it that's all that that there is in the model extensions code and access tenant there's a few
00:28:58.380 more files that tie all the disparate pieces together being able to set your tenant through subdomain and domain
00:29:04.159 serializing sidekick jobs things like that but at its core that's the main
00:29:09.900 piece uh and I'm glad I had the chance to dig into it and learn a bit how multi-tenancy Works uh and and hopefully
00:29:16.559 dispels some fears for some of the younger developers like myself so thank you for taking the time to listen I know
00:29:21.960 many of you probably already know this uh but I'm glad I had the chance to share so thank you so much
00:29:33.600 engineer at Fountain Charlotte fountain on the fountain years here um just wanted to kind of give my
00:29:39.059 positive experience with I guess mentorship I guess coming from the mentors side of the Wheelhouse
00:29:44.820 um I'm an engineer I've been I guess coding in different companies for about 10 years um I joined Fountain this year in July
00:29:52.220 and this is actually the first time I've worked at a real shop and so you know
00:29:57.240 using Ruby I guess day to day um I've used really in the past before but not like uh as intensive as this and so one
00:30:04.140 of the things I talked to my manager about when I first started was you know I uh I have done a lot of like
00:30:09.840 mentorship in different companies of LED student Engineers I've sort of like did my best to sort of like establish past
00:30:15.840 and practices that Junior desk can take to kind of grow in their careers and he mentioned it like yeah you know it could
00:30:21.960 be a good opportunity for you to sort of like you know Mentor one of the folks here at Fountain and also sort of like
00:30:27.000 you know seek some some benefits of like you know learning sounds in the system learning Ruby and also learning some of
00:30:32.640 the things that we do on the rail side and I I uh I felt that that was kind of
00:30:37.799 the best suggestion that I've had I guess in the last six months um my mentees actually already here what's up Michael
00:30:43.200 um but like he's been a big help for me to sort of like understand you know the whys why we do things at Fountain um and
00:30:49.080 so like you know investigating while we use VCR to sort of like you know do contract testing or like why we use this
00:30:56.399 fancy or swag sort of like module to sort of like build a Swagger um API documentation so it's really helpful and
00:31:02.640 I feel like it's fully been reciprocal in in ways where like I can sort of show him sort of stuff I've done in previous
00:31:08.460 companies how I sort of like think about pair programming and tdd or and then he's also been helping me as well so
00:31:14.220 um mentorship isn't just about like you know pulling you know making sure mentees improve you can also as a mentor
00:31:19.980 sort of improve yourself as well so um yeah I just want to shout that out I think all that to say that like Fountain
00:31:26.520 is also Now sort of like drumming up its own like formal messages program just based on the stuff that me and Michael have gone through over the past I guess
00:31:32.220 six months and So like um yeah if you want to learn more about I guess what we're doing over there and pick my brain a little bit about it I'll
00:31:46.320 should I start when it starts to count down so I have exactly five up there it goes um hi everyone uh I guess this is my
00:31:53.159 lightning talk it was going to be called something like why open like why contributing to open
00:32:00.539 source is easy and I picked that name because I was like oh this is like something that's like you can
00:32:07.020 immediately refute you're like how can he stand up there and just like say oh you know open source it's so easy like
00:32:14.159 it's not easy we all know that like it's it's sometimes it sometimes feels challenging to like get in and make
00:32:20.159 contributions and things like that um so I think this talk is geared to people who've like never made an open
00:32:25.500 source contribution at all um which was me probably um prior like a couple months or so ago
00:32:32.460 maybe a year I forget um but the thing like for me when I made my like first
00:32:38.880 open source contribution like the barrier of the barrier for me was just like there were so many just libraries
00:32:45.960 and things out there and there were so many people doing incredible things and like the Ruby world the JavaScript world
00:32:52.440 like all the different worlds where I felt like how can I just come in and you know make some contribution that's like
00:32:58.860 meaningful and it turns out contributing to open source is actually really easy because
00:33:04.919 like one of the things like one of the most recent um PR's I did was actually on uh Hanabi and it was like super super
00:33:13.140 super super small like if you look at the last like 10 20 commits you'll see me and you'll be like this is very very
00:33:19.019 small commit and and kind of the strategy I used was I wasn't actually trying to
00:33:25.740 um find a way to like contribute in a really really small way what I was trying to do was everybody was posting
00:33:32.399 about how interesting Hanabi was like this is like a completely different new framework
00:33:37.799 um and people were doing things with it and people were saying oh it's ready and you could do all these great things with
00:33:43.440 it and I was like okay cool I want to see so I think the strategy is like curiosity first you have to be like hey
00:33:49.860 there's something I'm interested in and I'm interested enough to like dig in and kind of poke around and see a little bit
00:33:56.820 more the next thing I did was like okay I've never ever played with this tool set before and like every tool set I
00:34:03.360 just say where's the help Guy where is the getting started and I was like okay here it is here's a bunch of examples
00:34:08.760 that uh the the maintainers wrote and I was like cool so I went to my terminal I
00:34:14.159 opened it up and I copy pasted the first line and read a bunch of stuff copy
00:34:19.379 pasted the second line read a bunch of stuff speeding things up because I have two minutes and 24 seconds and then uh
00:34:26.399 my talk but I eventually got to a point where I was like okay I'm following the guide I'm making it work and then I did
00:34:34.200 something interesting where I copied pasted some code and I looked at the output and I looked at
00:34:39.780 um what the output was in the getting started guide and I was like these don't really match
00:34:46.679 and that's when I figured out open source is really really easy like because at that point I was like
00:34:54.480 Okay cool so if this doesn't match someone else is going to be very confused and I
00:35:00.839 should probably like edit this file and like push it up to GitHub and just like do a pull request now that part
00:35:07.440 could be a little bit confusing if you haven't done that but there's like guides that kind of explain like hey this is how you do a PR and all this
00:35:13.500 stuff so I went through this whole process and the whole time I was like well you know my it took me a lot longer than
00:35:19.740 just like changing a couple characters and fixing and I was like well is this worth it and you know I was with my
00:35:25.140 father and he's like we gotta go and I was like one more minute like I gotta do this and like do this pull Quest and like come back later and hopefully it
00:35:31.260 gets emerged and I was able to do it and went away I think it was like the day after Thanksgiving because I was like
00:35:37.440 bored and need some stuff to do and I came back home and there it was
00:35:43.740 the last commit was into the library was it was the documentation guides it was
00:35:49.079 just me and I changed a couple words and and it was there and it felt so good to just be like hey I I left things a
00:35:56.460 little bit better than I found it and you know what the best part was and maybe this is why I like the Ruby
00:36:03.420 Community uh particularly but maybe this would have happened if it was a JavaScript library to a python but I
00:36:09.000 like to think it was because I was on a ruby Community was the one of the principal developers on that project
00:36:16.020 like saw that PR come in and not only did he merge it but he um wrote a really nice note about like
00:36:22.859 just say hey thank you for playing with the tool set and thank you for just adding a little bit here and leaving the
00:36:30.780 documentation a little bit better than you found it and to me that was meaningful because I felt at that moment
00:36:36.000 like I was part of something bigger that I was part of a community that really cares and wants to make
00:36:42.960 the open source projects and the work that we do here better better for everyone so that's my talk thank you
00:36:51.960 hey my name is Jenner uh I was going to talk to you about something to work on recently
00:36:57.359 um I've been doing some work for this company called uh flux flux.ai and they're building a web-based uh
00:37:04.020 schematic capture and PCB design tool that runs in your browser it's it's kind of nuts if you asked me a year ago if
00:37:10.619 they could do it I'd say they're crazy but they're doing it um so what I'm looking into them is
00:37:15.780 integrating this 30 year old circuit simulation Library called NG spice to compile the webassembly and run in the
00:37:21.839 browser so basically how that works is you have a schematic
00:37:26.940 that you need to translate into a netlist format for ng-spice
00:37:32.099 um see here there's a I labeled the Nets that things are connected to and on the
00:37:37.260 right there's the components and what they're connected to and a
00:37:42.540 bunch of other crazy stuff that I won't get into uh that's where you run it um what we're interested in doing is a transient
00:37:49.200 analysis where you simulate the circuit over a certain amount of time in certain number of time steps and you can get a sense of
00:37:55.560 how it behaves in the time domain um so in this case here we ran it for
00:38:01.079 two and a half seconds and see a estimate of the voltages that it gets
00:38:06.540 after it does a bunch of solves a bunch of differential equations and does some linear algebra and you can see the plot
00:38:12.900 there there's that around T equals one is where the mosfet turns on and then turns off and
00:38:21.240 the capacitor recharges it's not really related but it's kind of cool so what we were interested in figuring out is how it's uh memory usage
00:38:29.339 behaves when given longer and longer simulation time periods and how it paves
00:38:34.920 with different circuits that have a lot of components or not very many components and uh this was a domain I
00:38:40.740 really knew nothing about um my training or my experiences mostly is full stack uh web development so I don't
00:38:48.660 head first into this and uh Ruby kind of helped me figure out how to
00:38:54.420 deal with a bunch of things that I didn't really fully understand yet so in the NG spice uh repository they have a
00:39:01.260 bunch of example circuits so I had the idea to just plug those into a script and measure its memory usage and then
00:39:07.560 see see what we get so first first step for that was actually just to know like
00:39:12.599 what is the peak memory usage of a thing after looking into a lot of different options for that like somebody mentioned
00:39:19.320 like yeah you should use Val grind did not want to do that but I found out that the gnu version of time has an attack of
00:39:25.440 e argument that gives you a bunch of useful like resource usage kind of stuff and the max resident set sizes kind of
00:39:31.800 thing they were most interested in it's not like really accurate but it's it gives you good sense so I wrote a script
00:39:39.599 that would take different circuits to test and different parameters for like how wrong to run the simulation and then
00:39:45.780 parse out from the g-time output and uh then I plugged it into a new plot with
00:39:51.300 this really ugly configuration to produce graphs like this which kind of confirmed our hypothesis that it should
00:39:57.839 scale linearly with the duration of the simulation another thing that I found was kind of
00:40:05.339 cool I was like trying to make the script a little bit nicer to use so use an option parser I wanted to be able to
00:40:11.880 take in arguments with units so instead of always having to specify nanoseconds for
00:40:17.820 time I want to be able to say like Ms or us for milliseconds microseconds on the
00:40:22.859 command line so I added some methods to the numeric class and then discovered
00:40:27.960 this option parser accept method that lets you define kind of a custom type for it
00:40:33.780 um so basically I just parsed out uh if it had a unit in it and then sent that
00:40:39.000 to the to the number itself to convert it to the correct number of nanoseconds
00:40:46.560 um so that's kind of how it looks in practice you just with your obstacle on you can specify a different type
00:40:51.900 uh anyway um this is really fast but basically I just uh I really love Ruby
00:40:58.320 um it was like my lifeline in this thing that I was having some major imposter syndrome around my first couple days
00:41:05.099 um it let me make sense of something that I'm still like trying to wrap my head around so
00:41:16.980 alrighty good afternoon everyone thanks for coming to the lightning talks my talk is called don't abuse reduce and is
00:41:22.800 my love letter to our lovely innumerable module so first about myself I'm Alexander mumchilov uh I work for Shopify
00:41:30.480 more specifically I work on our my clicker is not working okay cool uh arrow keys it is uh
00:41:37.800 I work on the shop app which is shopify's mobile shopping app it's pretty great you should check it out
00:41:43.079 and so I'm going to talk about uh the thesis because my English Prof always said you should leave that early on in
00:41:49.500 your five paragraph essay in the first paragraph preferably and so the thesis is that when you have a code construct
00:41:54.780 that's really powerful that can express a bunch of different ideas that's powerful but the flip side of that is that you can't you lose your ability you
00:42:00.780 can't understand it at a glance it could be doing so many things so what it's doing specifically is not so obvious
00:42:06.540 and when it comes to Loops we kind of get it here's an example of some imperative code on the left an equivalent more functional Style on the
00:42:12.000 right and so we have some grade cohorts let's say it's an array of arrays of students and let's say you have one
00:42:17.040 cohort for grade nine and ten and so on and you want to see you know who's in the honor roll of the school for the whole school
00:42:23.040 and so you iterate over your cohorts and you iterate over each student of each cohort you check us on the honor roll and you bang them into that honor roll
00:42:29.940 students array we can see that there's a lot of indentation there's nesting it's not clear at a glance what exactly is going
00:42:36.300 on and the only way to really understand it is to kind of play Ruby interpreter in your head and kind of follow it along with the call on the right however we're
00:42:42.540 using some more well-defined constructs which are less expressive they could do less you know filter map and filter map
00:42:49.200 and friends but when you see something like filter there's a bunch of invariants you pick up right away there's no new objects in the result
00:42:55.260 that weren't in your input the count of the output is at most the input or less maybe even empty similarly for map when
00:43:02.520 you map some objects from the input to your output you know there's a one-to-one correspondence nothing is going to disappear nothing extra will be
00:43:08.099 added in and so let's take an example we have a sample problem here we have some names and we want to kind of alpha like put
00:43:15.660 them together by their first name into groups and so we want to come up with select names by initial variable and want to look something like this you
00:43:21.180 know Joe and Jane are under J and Bob and better under B and so on and so even though in when we write for
00:43:27.240 Loops we kind of get the sense that you know map and filter is nice we often run into using reduce
00:43:32.339 and we might write something like this so I'll just kind of explain it really briefly we start reducing over this empty hash and the idea is that it's
00:43:39.000 going to become the accumulator to our first block call and we're going to see what the initial of the name is we're going to see if we already have a group
00:43:44.940 for that initial so you know is there J group already and if there's already a group of J's we'll add the new name
00:43:50.579 under those JS and if not we'll start a new group with this like one element array it'll be like the first group for
00:43:57.599 that first letter and it works you just have to make sure you remember the accumulate at the end because you might not have type checking
00:44:04.200 if you forget to do that you get some fun uh kind of hard to debug airs but we might notice that we can remove
00:44:11.099 that return at the end if we go to each with object instead where we can mutate this object in place and we don't have
00:44:16.260 to remember to return from one block call to the next but remember each with object is kind of really just each with an object and you
00:44:22.500 could just use a local variable to do that and look with those two simple Transformations we went from reduce you know this like magical buzzwordy
00:44:28.619 functional programming style uh to just a for Loop and I heard that more functional is more better uh and this is
00:44:35.819 not quite achieving that so in this example there's a really nice and normal method Group by which comes to the
00:44:40.920 rescue and it's actually much less powerful than reduced it could strictly do
00:44:46.140 fewer kinds of solutions to problems but it's really clear here we're grouping the input and we're passing a block of
00:44:52.020 how to group things and so in this case it's by the first character of each string and in doing so we when we see
00:44:57.599 Group by we can automatically understand something about the result it's going to be a hash the keys are always going to be the output of this block the values
00:45:03.960 of the hash are always going to be like these array groupings whose elements are the grouped up uh members of the initial
00:45:09.660 input so go back to reduce it's like okay well what does this kind of do exactly you
00:45:15.540 got to really play interpreter you got to like really squint at it go in there and I have two takeaways for you here one is that the newer module is
00:45:21.660 fantastic it has a whole bunch of built-in methods that probably do what you're looking for the second is that reduces actually expressive enough to
00:45:27.540 implement almost every method in the numeral module and so I'll give an example here
00:45:34.079 include so we'll say you know start with false we are sorry uh yeah like check
00:45:39.420 for inclusion we'll start with false we haven't seen the item yet and on every iteration we'll see have we seen the
00:45:44.460 item already if not check if the current item is the needle in our Haystack maybe this doesn't bail early the way
00:45:50.520 you might want to so that if you find you know your Needle on the first element you don't have to go through the whole input but this is just an example of how you
00:45:57.119 can Implement these other methods using uh reduce and here's another example you could do uh none or any or all in fact
00:46:04.859 you don't even need the result to be a simple scalar object like a Boolean you
00:46:09.900 could have something like 2A or two hash uh or two H where you start with this empty array you start with this empty hash and you build it up and so in fact
00:46:16.920 even though it's called reduce your final value is more complex than what you started with and you've built it up one iteration at a time
00:46:23.160 and so in conclusion I think the room module is something you should kind of look at whenever you're about to write some code so that when somebody comes to
00:46:29.040 your code they don't have to play interpreter they see filter map they see map they can understand it quicker at a
00:46:34.200 glance without needing to dive into any degree details and that was my first talk and I got this red badge that says
00:46:39.599 speaker on it by accident and I'm going to wear that now all right
00:46:45.660 so for the makers of stack Overflow we came it came up with some marketing
00:46:53.040 buzzwords like artificial intelligence and Biz Ops and we've decided that we're
00:47:00.240 going to make a new product and this one is stack Overflow embedded our
00:47:05.579 algorithms have detected that onstack overflow 95 of all new questions are
00:47:11.520 stupid according to our algorithm and so you know we're trying to curb this
00:47:16.560 problem and come up with something that's going to like prevent these stupid questions from making it onto stack Overflow so
00:47:24.900 um we came up with this the simple procedure that you go to your doctor and you have these chips installed in your
00:47:30.960 brain and it allows you to like hear a moderator's voice in your head whenever
00:47:38.160 like you have a stupid question and so uh this part is uh your guys's
00:47:44.040 responsibility you're playing the role of the stack Overflow moderators that
00:47:49.680 are in my head as I ask these questions the the first one we'll do together so can I embed this PHP script in my rails
00:47:57.480 app you know that you stupid you're an idiot rewrite it in Rust something like
00:48:03.000 that this job posting is for go can I
00:48:09.180 convince them to use Ruby it's off topic by the way
00:48:14.579 should I run rails EnV production rate DB drop to fix this failing migration
00:48:21.720 why is the color Chuck Norris red
00:48:33.720 can we transpile react into Ruby so we can put it on the front end
00:48:41.220 and how do I make the voices stop you know um I did how to put this
00:48:48.960 warning slide on there um may cause hallucinations hunger unexplainable odors fatigue depression loss of
00:48:56.160 coordinated muscle function inability to distinguish reality from fiction some applicants of the trial program have not
00:49:02.339 been found also made from materials known to the state of California to cause cancer
00:49:08.880 thank you all right hi I'm Casey
00:49:14.880 AC I want to tell you about an injury I had because I work in Tech
00:49:20.339 are you a tech worker did you know there are job hazards to this like coding for 30 years might not
00:49:26.099 be healthy I was incapacitated for months two years
00:49:32.040 ago months I couldn't do anything I couldn't drive my car I couldn't sit at the computer which hurt me in the first
00:49:37.800 place I couldn't even sit up and watch TV on the couch or on a chair or anything so I've imagined me laying on the floor
00:49:43.920 of my apartment watching Mary Poppins on the ceiling with a projector A friend brought over that was very thoughtful of them to do
00:49:49.560 that for me so I had something to do it was miserable time you don't want to go through it but what what is it what's
00:49:55.079 going on I have what doctors call peripheral neuropathy peripheral means far away and
00:50:01.319 your apathy means uh nerve pain neuropathy I call it the tingly
00:50:06.780 fingalese my hands they tingled this happens because when you have neck
00:50:12.660 or shoulder tension and it can like affect the nerve that affects the muscle to make the muscle tense and NADA all
00:50:18.839 the way down and then it really manifests in your fingers that your extremities first I want you all to do a self-check please
00:50:25.440 stand up if you are down to do this stick out your arm
00:50:31.500 put your other hand on your shoulder keep to keep that down when I'm gonna I'll demonstrate I'm gonna have you do this which is hard a lot of you can't do
00:50:37.859 it keep your shoulder down if it goes up you're cheating don't let it cheat some people get stuck
00:50:43.200 here and then you feel it right here in this nerve and you're like I can't go any further sometimes you can get all the way up to 90 degrees sometimes you
00:50:49.740 can go all the way to the 45 degree angle sometimes you can get all the way and touch your side of your head maybe
00:50:55.079 you're lucky you can hit the palm of your hand to your head all right now you can sit down that was
00:51:01.260 the test try it on the other side later if you felt any tension or it was uncomfortable in some way raise your
00:51:06.960 hand yeah a lot of people ideally if you were perfectly healthy you would be able to
00:51:12.359 go all the way most people can I'm not surprised a lot of us can't quite here's another test imagine right now
00:51:19.200 your head went limp does it fall forward or backwards
00:51:24.240 forward a lot of people are going to fall forward because we're used to looking down in our laps at our phones ideally it wouldn't fall either way it's
00:51:30.540 kind of balanced that would be even better if you could get to that point in your life um we just did a nerve Glide stretch or
00:51:37.079 a test that's the one I just had you do another good self-diagnosis is someone to get someone you live with or a friend
00:51:43.740 or a co-worker to take a photo of you when you're not ready for it give them permission and then you can see yourself in all of your glory
00:51:51.660 you'll know what you really look like all right time for an anatomy lesson uh
00:51:57.000 the pinky side of your hand is one nerve the thumb side is another nerve carpal tunnel and cubital tunnel are two
00:52:03.660 different uh issues cubital tunnel is pretty common in Tech workers you might have never heard of it look it up later
00:52:10.020 uh imagine your programming like this that that's going to hurt the thumb side of your hand that nerve
00:52:15.780 or if you're on the phone or sleeping on your arm that hurts the pinky side of your your arm is the elbow
00:52:21.300 how do you heal or prevent this well we're thinking about what irritates it we'll do less of that that helps a
00:52:27.359 lot um if you are really injured you'll get
00:52:32.400 recommended to an elbow brace or wrist brace so then the nerve is in the right position that it can heal that's nice
00:52:37.920 if your desk set up could be more ergonomic that'll help prevent the bad posture that hurts you
00:52:43.079 um at home you want to have your chair adjustable your desk adjustable your monitor adjustable all through all three ideally how many do you have adjustable
00:52:49.859 right now raise your hand one two three three three a lot of Threes good if you're just one or two you want to up
00:52:55.740 it if you're out co-working at a coffee shop you might want to have a monitor stand um to bring the screen up
00:53:04.920 to really heal the thing that the physical therapists always tell everyone to do is you have to stretch and
00:53:10.319 strengthen so you stretch your front like sometimes I stand on a door frame and then my chest I get stretched these muscles out
00:53:16.559 sort of the strength in my back by making those back muscles engage to do this kind of thing lots of videos on
00:53:22.140 YouTube for exercises you could do another thing is to get rid of knots you can do like massage or needling
00:53:29.240 e-stimulation that they do a lot of those I do a lot of massage water massage I went to Spa World on Monday I
00:53:34.859 got here early and that's how I look energetic I'm not always this way nerve flossing is another thing you can
00:53:41.400 do regularly like that one that I just had you do or just general exercise helps a lot no
00:53:47.040 surprise all right about Healthcare can you get any health care for this if
00:53:52.800 you're just trying to prevent yourself from having numb and tingly fingers my experience in the Healthcare Systems is
00:53:58.200 not nope you can't just do preventative care in the U.S that's not really the thing but
00:54:03.240 if you get injured if your fingers start tingling that's your ticket now you can go see a physical therapist as soon as
00:54:08.460 it gets that bad and then as soon as they stop tingling I stop tingling thankfully but they don't really help anymore I gotta do it on my own so if
00:54:15.900 your fingers start to have the tingles tingly fingeries then that's your ticket to health care and I want you all to
00:54:21.780 prioritize your health I'm Casey good luck with your health
00:54:30.420 hi everyone a few weeks ago I was coding in my home office and it was afternoon and there
00:54:37.740 was Daylight and I didn't have any lights on and I was really engrossed in my programming it was Ruby of course and
00:54:45.119 suddenly I realized the room was dark the sun had already almost completely set
00:54:51.000 and a few minutes later it got completely dark and all I could see was a screen
00:54:56.520 so I decided to write a song about it and um this is to the tune of Under the
00:55:02.099 Boardwalk if you choose to do the Under the Boardwalk Parts feel free except that
00:55:07.800 it's coding with Ruby instead of Under the Boardwalk so uh here we go
00:55:24.240 oh when the Sun goes down my screen's the only thing I see
00:55:31.579 this troubled World recedes leaving just my code and me
00:55:43.460 keyboard and screen oh yeah problem solving and building
00:55:50.660 makes me serene ready with Ruby Ruby's Ling clean at me
00:55:59.160 coating with Ruby best language I've ever seen according with Ruby the
00:56:06.059 language I love coding seems like it came from above according
00:56:24.020 and solve the problem one two three
00:56:29.540 just me and Ruby keyboard and screen oh yeah
00:56:38.339 problem solving at building they make me serene
00:56:51.319 best language I've ever seen Gooding with Ruby the language
00:56:59.000 seems like it came from above Ruby Ruby
00:57:20.300 just me and Ruby
00:57:26.900 oh yeah problem solving and building they make me Serene
00:57:36.380 recording with Ruby Ruby's knees
00:57:41.839 best language I've ever seen put it with Ruby a language
00:57:49.819 seems like it came from above coding with Ruby Ruby thank you
00:58:04.099 so I was working on my first conference talk in 2014 for Ruby comp here and I
00:58:12.000 saw this tweet um and I had met Angela harms at a prior
00:58:17.819 conference Ruby Midwest 2011. and I grew up a few miles from Ferguson
00:58:25.500 Missouri so this was literally hitting close to home uh there was protests and violence
00:58:32.420 I was glued to the TV uh the news I was also reading and watching TV at the same
00:58:39.180 time and and I was just I didn't know what to do I was sad I was mad uh that
00:58:44.819 first week I cried a couple times you know I'm just seeing all this on TV and
00:58:50.520 trying to figure things out and and I didn't know what to do I went to some protests some marches
00:58:56.960 and you know that was that was that was fine but it didn't feel like I was making much of an impact it didn't feel
00:59:03.240 like I was using my talents um so I gave my talk at rubyconf it went
00:59:09.180 really well uh the next week I came back and I read this pla this uh
00:59:15.000 post from Alex Miller who does the um strange Loop conference in St Louis
00:59:21.359 and I had met him at meetups and I was like oh this is exactly what I'm looking
00:59:26.819 for it uses my talents uh the the idea was to help underprivileged kids learn how to make websites so they could help
00:59:33.960 their community so like this is great so uh the program ran eight weeks per
00:59:41.339 session the kids were from I believe 13 to 27. this is Cameron he was one of the
00:59:49.319 students in the first core cohort and we were I was mentoring him one-on-one and
00:59:56.940 we were teaching them WordPress and specifically we were showing them plugins and we showed them a plug-in to
01:00:03.780 do sports scores and he asked me how do I show just my team
01:00:17.700 uh so we searched Google I told him okay we're using Wordpress and this is the
01:00:24.299 name of the plugin and we want one team so just type those words into Google and I he types the words into Google he
01:00:30.119 clicks on the link and I'm like I think you just copy that and put your team name in there so he copies that puts his
01:00:35.579 team name in there and it works and at that moment I saw the light bulb go off in his head
01:00:42.660 right because I had said those words you know these are the most powerful words I've ever said to anyone uh it had the
01:00:49.319 biggest impact and at least to Me Maybe not him I'm not sure um but it let him know that he could
01:00:55.440 figure things out on his own it gave him confidence it let him know that this is something we can all learn about and
01:01:00.900 figure out um so the first time I gave the stock it was a 40-minute talk uh the Link's
01:01:07.619 actually up there if you want to see the slides for that and when I was making that I thought well that's interesting
01:01:13.880 I was talking about the community of helping the community there with that that Tech impact and helping him learn
01:01:20.760 how to make websites but there was also this story of the The Tech Community Alex harms had had posted the thing
01:01:29.160 where I first learned about the Ferguson uh Alex had posted the thing about this
01:01:35.520 this program and I was working with rubyconf and actually rubycon for 2017
01:01:41.819 there was another talk that that brought this all together and we have this is a
01:01:47.040 great Community the Ruby Community is a great Community we help each other we learn from each other but we have other
01:01:53.280 communities you know we have our local communities we have cities states neighborhoods country the planet
01:02:00.119 um you know and and giving to those communities is is a type of thing that
01:02:05.220 actually you give to the community but you get so much more back and that's the lesson I took away is community can help
01:02:12.540 you find purpose and and when you give you get so much more than than you gave
01:02:17.700 and and it's just a way to give back to this community that has helped me so I I
01:02:23.220 urge you to find a way find your community find a way to help those communities thanks
01:02:31.200 hello everyone just that a little higher here uh I'm James I work with Shopify you find me on
01:02:40.140 GitHub and Twitter at sunblaze we're going to do some live coding here just to break you away from some of the slides it might get a little boring so
01:02:47.520 let's go get back into Ruby which is the one thing I love the first thing I'm going to say is I love the Pooter book
01:02:53.579 I've read it three times at least Sandy Metz made one of the best books ever I'm going to steal some of our examples here
01:03:00.059 so hopefully she doesn't mind fair use and all that um and uh let's do a little Live Test
01:03:06.119 driven development and uh and show kind of like how we could fail fast with
01:03:11.579 sorbet and it starts now all right so one of the books
01:03:18.480 here or one of the classes here oh crap we're already having issues here live we're live here um so yeah let's go see
01:03:25.200 if um any of these tabs will actually load let's go run while I'm running here see
01:03:30.240 no no no no this is working all right um I'll give it a second but otherwise I
01:03:36.839 do have a recording of this I made a backup plan just just in case
01:03:42.420 don't worry people even though I love doing it live well
01:03:47.579 I'll fake it I'm just but yeah that sucks but okay all right so
01:03:54.000 uh let's go jump ahead here a little bit so we'll start with the code
01:03:59.280 all right I'll pause it if no one I can need to here okay so we got a couple classes
01:04:05.099 here there's the wheel class and the wheel has its own test perfect unit test it tests only the wheel class
01:04:10.920 now we have also the gear the gear is dependent on the Wheel right now so we're going to test the
01:04:17.819 gear but we don't want to test the wheel we already have a test for the wheel so
01:04:22.859 when we run this test it's going to be testing two classes it's going to test the gear class and the wheel test class
01:04:30.240 now in this example it's not a big deal like there's no remote calls but when you're dealing with real code it's
01:04:36.119 usually making a database call it's making remote calls it doesn't really matter but we want to make it fast keep
01:04:42.240 it fast so we want to keep it isolated so let's go see what the isolated version looks like it's pretty simple so I'll bring it up
01:04:49.260 here the the isolated version We mock out the wheel so the wheel clasp we make it
01:04:55.440 return a stub that Returns the diameter at a fixed Mount we change the test a
01:05:00.900 bit to match that and you well just wait for the
01:05:06.900 video to catch up here we're going to run the rake test kind of thing make sure that it All Passes now
01:05:13.559 the one downside to this now that we've isolated and put in a mock if we change the wheel class
01:05:19.260 what happens what happens to the the gear class so we'll see we'll see what happens here as
01:05:25.680 we run the tests and we'll wait for it
01:05:32.160 we're good so it still passes that's not good like we need it to fail like gear is using
01:05:38.280 the wheel but since we isolated it it's not really great in that way so
01:05:43.740 Sandy gives a great example I'll pause it right now Sandy inner book is a great example on how to test this
01:05:49.440 um it's it's one roundabout way to do it but um I I like using sorbet Shopify we
01:05:56.280 started using sorbet quite a lot and so even with sorbet I don't even add any
01:06:01.619 typing here but we added in and you'll see kind of some of the magic
01:06:07.740 that sorbet brings
01:06:16.500 move that out of the way
01:06:21.780 wait for it all right so survey shows that's broken so they do some checking
01:06:27.780 obviously uh static code analysis to find that you have a dependency on the
01:06:32.880 the wheel clasp but the the method name has changed and that no longer works so
01:06:38.160 we go and fix that we run the tests again because we're doing test driven development here and we want to get it
01:06:44.220 all green we see okay no we still have to update our mock now too which is great okay so we go in here fix our mock
01:06:51.359 here to match now the real implementation
01:06:56.400 and we run it again running sorbet first and then running our tests and it's all good
01:07:01.859 and that's it my folks thank you very much I'm James once again Reed Smith I work at Shopify I love Ruby and I love
01:07:09.720 Sandy metz's book it's one of the best things and keep your tests fast and isolated thank you
01:07:18.780 hi uh my name is Adam Hampton I'm an engineering manager at saxetta we are a small uh identity management startup
01:07:25.799 company based in New England and we are a Ruby on Rails shop I've had the pleasure of being with the company for
01:07:31.380 about 10 months now and this is my first Ruby shop in a decade or two decade
01:07:37.619 career of software engineering this is my first time to actually do Ruby professionally instead of kind of playing within home projects and it's
01:07:43.799 been a lot of fun we are you know a monolith an on-prem monolith
01:07:49.440 that has evolved to a multi-tenant SAS Cloud offering and there's a lot of
01:07:55.020 steps that go into migrating a piece of software that you're used to giving one copy to One customer with their one
01:08:01.319 database in-house where they bring the infrastructure to porting it to being multi-tenant to putting it on your own
01:08:08.099 cloud provider we happen to use Amazon and getting it up and running in those in those Arenas and uh one of the things
01:08:16.080 we've come across is we need to grow past a monolith so we need to distribute parts of our application into other Ruby
01:08:22.799 services that are not our main you know rails app and as we do that
01:08:28.020 different forms of inter-process communication are necessary in one part of our platform we want to stop storing
01:08:35.640 logs and user X changed why at time Z records in a relational database and
01:08:41.520 move that off to a more durable storage system that handles uh immutable records
01:08:47.400 really well and we're realizing a bunch of our services need to emit these messages and one service needs to consume them and persist them and uh in
01:08:55.319 my past I've worked in other SAS companies that use messaging systems for this asynchronous messaging so this is a
01:09:03.060 very rough not official definition in a process communication we send message passing infrastructure usually it's
01:09:09.719 non-blocking to the producer sometimes leveraging non-rest full HTTP transport
01:09:15.600 for providing communication between services so it allows platforms or two
01:09:20.640 services to have a fire and forget kind of communication between your services I've got this message I want it to go to that service over there there it goes I
01:09:27.299 don't care when they get that that they can consume it on their own time if they need to message me back that can either come back through the same channel or
01:09:33.000 through a different Channel but some kind of infrastructure like that so being new to Ruby and you know looking
01:09:39.060 at the rails packages looking at the Ruby packages I was looking for something that provided these kind of
01:09:45.660 messaging paradigms service a emits individual messages in a sequence preferably fifo over to service B so the
01:09:53.460 icon in the top left showing multiple instances of service a Mighty Med messages over some topic and then they
01:09:58.800 are consumed or processed by multiple instances of service B and maybe it interacts with its own database that is
01:10:05.820 very close to the Apache Kafka Paradigm uh to how Kafka Works in terms of
01:10:11.880 message passing you have producers you have consumers things get sent over the wire we also need something like service X in
01:10:18.420 the bottom left image everybody needs to know that something has changed and all
01:10:23.640 instances of service y are maybe not shown in the diagram service Ed need to hear that and do their own thing a great
01:10:29.100 way to think about that is Cash busting uh you know somebody's changed a record that you might have cashed everybody
01:10:34.860 that might have a cached copy of it invalidate your local cash copies and so we call this topic-based communication
01:10:41.460 and kind of broadcast based communication and we're lucky we've been successful we
01:10:47.100 have eight different production copies of our software and each one of those has some number of tenants on it we have
01:10:53.580 uh you know five in North America sorry this slide got a little garbled when we were messing with the sides so let me
01:11:00.540 take this back a little bit we have five in North America you know and three in Europe and you know one of the five
01:11:07.260 North Americans in Canada and those roughly mapped to the regulatory environments that our customers need to keep their data in European you know
01:11:13.679 gpdr requirements and Human Resources data requirements are different than North America so we have to house that data in European servers things like
01:11:20.280 that but that brings us a problem which is every time we invite a piece of
01:11:26.040 infrastructure into our platform we don't pay for it once we don't even pay for it three times if you need three servers to run a messaging system we pay
01:11:32.520 for it eight times whatever it takes to bring in that piece of infrastructure and so you know looking at messaging
01:11:39.840 systems there are a bunch of infrastructure-based systems you could use rabbitmq you could use Apache Kafka
01:11:45.300 you could use Apache qmp and each one of those has some kind of infrastructure burden that brings a cost and we were
01:11:51.360 looking for what is the most cost effective way to do this that brings us the non-blocking the durability the
01:11:56.520 asynchronicity of it and my question to the audience since I'm running out of time here is what Solutions did you come up with we already had redis for session
01:12:03.600 caching I couldn't find a gym that did durable message passaging over redis we
01:12:09.360 built our own have you found one out there if so please come talk to me after the talks
01:12:14.520 I'd love to hear about it and is there interest in US Open sourcing the one we have because you know message passing
01:12:19.560 isn't exactly our you know core business so thanks and uh hopefully I'll talk to you after the talk
01:12:28.800 so I'm Jessica Flores I work for Fountain uh with Andrew and Michael here and um
01:12:35.880 this talk is really two stories how I sometimes refer too much to the internet
01:12:41.880 um so these are actual Google searches that I've done in the past few weeks or
01:12:48.179 months I just got this new computer but this is part of my history so I have a dog and it turns out you have to feed a
01:12:54.540 dog differently based on the their age like when they're born you have to feed them three times a day so I defer that
01:13:00.420 to Google and I'll get in a second to us as to why this is relevant like why Googling all this stuff it's
01:13:06.780 relevant um best actually in Austin I live in Austin I was just looking for the best tacos so
01:13:13.800 I kind of like decide many things through Google and that's very good in some instances not very good in in
01:13:20.219 others um the classic example I'll never just popped up on my terminal
01:13:26.940 I copy pasted it on Google and sold it not very long after so it was very
01:13:34.500 helpful so what I'm concerned about is us or me I try to remind myself and
01:13:40.980 think every now and then about how it is important to
01:13:46.199 step back and kind of use the most important research I have for my brain
01:13:51.440 to really think through the problems and not just go on automatic of like what
01:13:56.640 what tacos are the best in Austin and just like go to number one which I sometimes done for other things I don't
01:14:02.340 think I did it for tacos but for other things I've done that sometimes it's good but sometimes I have different
01:14:07.620 preferences it's not all about like the ranking it's also also what you prefer what I if I uh like I have a dog if I
01:14:14.940 want to bring it or things like that that are more nuanced that is not always uh
01:14:20.100 about what's best in the internet um and uh the second part of it Second
01:14:27.239 Story is about a co-worker worker Toby um
01:14:32.699 he is very a very particular person he's very
01:14:38.820 unique uh I'll describe it because I think many people that interact with
01:14:46.020 him some people really dislike him I really like him he's very direct very
01:14:51.540 honest and he always kept me on my toes of having this kind of perspective of
01:14:56.940 actually thinking through the code and thinking about what we're actually doing uh one story about this about Toby uh
01:15:03.960 one December uh I didn't take vacation like I had taken like honeymoon vacation that year so I stayed to work uh for a
01:15:11.280 few days uh 20 something December and we were coding on the IOS app so if you've
01:15:19.800 done work on iOS every time you open a new file on xcode it creates this lines
01:15:26.100 of comments at the top and it's pretty much the author's name the date and other things that are really not that
01:15:31.920 useful and he immediately deleted them I was like what wait what what's going on I would I think if he was in there I
01:15:37.860 would probably just keep keep them and commit them and upload them and just do that over and over again and kind of like have those lines there but he's a
01:15:45.000 very conscious methodical uh person and so I guess
01:15:53.280 I learned about dreams or if not just following all the best practices I think it's a good start to just follow most of
01:15:59.940 the best practices but exceptions like this when we're the comments at the top of these files were just noise and
01:16:06.060 polluting the file in his opinion I kind of well yeah sure like yeah let's remove them so you kind of it's okay to go
01:16:13.620 against the the Grain in some instances for most cases best practices are well
01:16:20.219 it's it works but just uh some of my experience in kind of these this weird
01:16:25.679 topic of being conscious about your coding like just not following uh what the internet
01:16:31.560 says thank you
01:16:37.980 I'll be talking to you today about a new um ritual that me and my team have been
01:16:43.020 trying out at work um for the past few months we call it the weekly cooldown and it's a way to
01:16:48.420 invoke fun at work a little bit about me my name is anas alcatib I'm a senior developer at
01:16:55.440 Shopify I work on Payment Processing um and here are a couple of ways you can
01:17:00.659 contact me uh so what is it it is a weekly
01:17:07.080 recurring session it happens at the end of the week um near the end of the work week
01:17:14.100 um where we get together and work on a simple technical problem together uh it's completely optional but people
01:17:21.600 are also encouraged if they're not able to attend or they don't feel like attending that week to practice It On by
01:17:28.199 themselves um why do we do it uh it's a way to
01:17:35.159 invoke fun at work it's a way to collaborate get to know each other's ways of working in a low stress low
01:17:42.300 stake on tackle elastic problem um it gives us such chance to share
01:17:48.480 tools and tips and tricks on how we work with our tools our Ides we we get to learn from each
01:17:55.860 other and it also gives us a chance to end the week on a positive note sometimes the
01:18:01.920 work that we're doing during the week might be something very complex or something very hard so it gives a little
01:18:08.760 bit of a barrier between your work week and your weekend and you end it with a
01:18:15.060 clear mind without having to take that work with you to the weekend
01:18:22.380 um some of the example problems that we've tackled so far uh simple things like going through to-do's and either
01:18:30.739 refactoring fixing them or if they're no longer applicable deleting them or just
01:18:38.159 converting them into an issue and getting them out of the code base um identifying High churn files and
01:18:45.000 applying small refactors to them so high churn files are files that have changed often or have been committed to often
01:18:52.640 there's a little script that if you search for in that link that tells you
01:18:58.860 how to identify those High churn files in your git Repository
01:19:04.520 improve our documentation so small improvements quality of life
01:19:09.600 improvements to tools that as a team we might de-prioritize okay there's this bug in our own
01:19:16.080 internal tool but we always have things that are higher priority that we keep tackling and this gives us a chance to
01:19:23.580 fix those small things many of these ideas and other ideas can be found on this code quality challenge
01:19:30.120 which is a 30-day challenge started by Ben orenstein
01:19:36.320 which was very fun to follow and we've been taking some examples from them
01:19:42.719 uh some of the challenges we faced trying to practice these weekly cooldowns is we have different people in
01:19:49.679 different time zones so the end of the week is not necessarily the same for everybody for us we've just had it
01:19:55.980 scheduled when the majority of us are at our end of the week um one suggestion is for individuals to
01:20:02.940 practice it themselves or if we're able to um maybe if they if there's many people
01:20:10.440 in a different time zone they can have their own session uh figuring out the tools that we use
01:20:15.540 for the collaboration especially when we have more than three people on the session has been difficult for us we've
01:20:23.520 sort of gone in vs code live share plus somebody sharing the screen Plus getting
01:20:30.060 together in a huddle as a way to work through this weekly cooldown
01:20:38.760 um this was inspired by a an article written by David Hong and there's a link
01:20:46.140 to it there and here's a quotation from the article I'll leave you with the more you know someone as a human being the
01:20:53.159 better collaboration model you'll have when you're doing work so this also benefits us in our day-to-day work as
01:20:58.800 well I want to give a shout out to my team
01:21:04.080 the Shopify payments Payment Processing uh squad for giving this exercise a
01:21:10.860 chance and I want to thank the rubyconf organizers and thank all of you thank you
01:21:18.420 hi my name is Amanda Lundberg and I am your captioner for rubyconf
01:21:24.780 this year yes all right that's the words up there
01:21:30.659 um through the magic of telepathy I'm captioning right now just kidding I have to stick to the
01:21:36.300 script exactly because I recruited Andrew from The Av crew to help out
01:21:42.120 thank you Andrew for hitting function F12 repeatedly for me cheers
01:21:47.880 and please give the age the AV team a huge round of applause they're doing a great job
01:21:57.300 so back to captioning business what is captioning
01:22:02.340 it is a stenographer me in this case sitting in the back of the room with a
01:22:08.159 wee little keyboard we call it writing and I'm writing Every Word uttered by
01:22:13.980 the speakers it's more like playing a piano than typing on a keyboard
01:22:19.140 I have put some examples on the screen because when you think of the word fish
01:22:24.179 I always spell it t-p-e-u-r-b obviously
01:22:30.420 TP is an f e u is an i and RB is a sh
01:22:36.300 sound got it Steno Riders can also make short forms of words to make our lives easier
01:22:43.380 talking about your infrastructure no problem that's t-p-r-a-s of course
01:22:50.460 and there's the TP equals F Again by the way make sense yet
01:22:56.940 we can also write entire phrases with one key press at the same time is
01:23:04.699 t-a-e-u-p-l-t no problem
01:23:11.640 uh oh I've messed up okay to learn a lot about Steno and other cool keywords I
01:23:18.060 recommend following at haunty on Tick Tock and Instagram she covers a ton of stuff and also
01:23:24.179 accepts challenges to write really fast songs and she's just awesome she's my co-worker at white coat
01:23:30.239 captioning how lucky am I so how do I write Ruby
01:23:38.060 r-a-o and asterisk and UB all they see I had a misspell on my own
01:23:45.600 script all the keys go down at the same time if you know that aou is a long u sound
01:23:53.159 this one actually really makes sense
01:23:58.380 this is awkward I know you want to learn more so follow haunty and also check out
01:24:03.719 open style project there are developers who love Steno and are working to make it more accessible
01:24:09.120 to more people the biggest barriers to many people getting started are the startup costs a
01:24:15.360 professional machine can be five thousand dollars and the
01:24:21.960 proprietary software is five to seven thousand dollars with a yearly fee for maintenance
01:24:28.560 ouch but I've just learned that stenographers can take the certification tests with
01:24:34.800 our National Association using Plover which is the free software open standard project so that's cool
01:24:42.000 and I learned that from haunty I feel like she should be here and feel free to stop by and say hi
01:24:48.900 I love showing off the machines and I promise to not make your words appear up on the big screen
01:24:53.940 unless you want them to and again my name is Amanda and I work for white coat captioning Norma Miller
01:25:00.420 is my boss and she's kind of an awesome boss like the kind Susan talked about yesterday
01:25:06.060 follow us on the socials or follow my doggos Edie and Arthur on Instagram they're pretty cute
01:25:12.719 I hope you have a wonderful Ruby comp thank you