RubyConf 2022

Discover Machine Learning in Ruby

We can use Ruby to do anything we as a community want. Today we’ll explore the work of a hidden gem of a contributor in our community, Andrew Kane, and their Ruby gems for Machine Learning. We will see how contemporary computer vision neural networks can run with Ruby. Ruby is all about developer happiness. Computer Vision is something that brings me great joy as it delivers satisfying visual feedback and connects our code with the real world through images and videos in a way that wasn’t accessible until the last decade or so.

RubyConf 2022

00:00:00.000 ready for takeoff
00:00:17.300 thank you for coming I'm glad everyone's
00:00:20.520 excited to be at Ruby comp uh if you
00:00:24.420 were looking forward to more Star Trek
00:00:25.980 memes like at my rails comp talk
00:00:27.980 unfortunately you will be disappointed
00:00:30.539 though I do really like the theme
00:00:32.460 through become swag this year with the
00:00:36.600 NASA themed space stuff so I guess I was
00:00:39.840 a missed opportunity on my part
00:00:41.879 uh but we will be talking about uh
00:00:44.219 discovering machine learning in Ruby uh
00:00:48.059 so you could say we're exploring where
00:00:50.039 few rubyists have gone before that'll
00:00:52.860 probably be my only Star Trek uh
00:00:55.020 reference Maybe
00:00:56.820 I'm Justin Bowen and I am tons of fun uh
00:01:00.120 you can find me on Twitter and Instagram
00:01:03.059 and some other things as tons of fun one
00:01:05.339 one GitHub I'm just tons of fun and uh
00:01:09.659 I'm currently working as a CTO
00:01:11.520 consultant for Silicon Valley software
00:01:13.860 group I'm also a director of engineering
00:01:17.520 at Insight surgical AI where we're doing
00:01:20.400 computer vision for surgical objects in
00:01:23.700 operating rooms so
00:01:25.619 exciting stuff I've been working with
00:01:28.380 Ruby professionally since like 2008
00:01:31.439 and I've been working with python for
00:01:33.540 computer vision since about 2016.
00:01:37.200 and so for me computer vision is tons of
00:01:40.200 fun and I get a lot of Joy from being
00:01:43.140 able to run code with visual inputs and
00:01:46.140 get visual feedback and outputs that you
00:01:50.460 know you can chart and you can
00:01:53.299 highlight so again I hope you have tons
00:01:57.840 of fun just a bit of a background I've
00:02:01.320 built a number of applications like
00:02:03.780 drone mapping
00:02:05.360 which I did with an Irish AG tech
00:02:09.780 company back in 2016 where we highlight
00:02:12.900 different parts of the field using
00:02:15.000 opencv to help farmers see problem areas
00:02:19.020 or areas of their field that are ready
00:02:21.660 for Harvest
00:02:22.980 uh so I've done stuff from drones to uh
00:02:26.940 dairy cows monitoring cow health is
00:02:30.720 something that I did for a few years at
00:02:32.700 the same company it was quite a big
00:02:34.560 pivot
00:02:36.000 um but real-time computer vision with
00:02:38.099 cameras is something that has actually
00:02:40.620 been super engaging for me and is
00:02:43.319 something that I'm working on right now
00:02:44.940 where in the operating room we have
00:02:47.760 eight cameras uh monitoring
00:02:50.819 at all times at 60 frames per second
00:02:53.580 each camera has its own dedicated GPU
00:02:56.400 that we're running our own uh it's a
00:02:59.400 really small image I hope you can see
00:03:02.040 but it's highlighting the different
00:03:05.300 hemostats scissors needles sponges and
00:03:10.019 this is using a YOLO V7 model that was
00:03:14.239 trained with pytorch and is running
00:03:17.459 through opencv all on python but we're
00:03:22.080 at Ruby comp and why am I talking about
00:03:24.060 python so I did a railsconf talk
00:03:27.300 virtually about using python computer
00:03:30.000 vision with rails applications all of
00:03:32.819 the examples I just showed you had rails
00:03:35.700 back ends for the web and API about all
00:03:39.360 of the computer vision code is done with
00:03:41.819 python and really it's just a matter of
00:03:45.480 you know most machine learning libraries
00:03:48.659 out there are built with C plus plus
00:03:51.420 with python bindings and there are some
00:03:55.379 Ruby machine learning and computer
00:03:57.540 vision gems but they're not as feature
00:04:00.299 complete so at this virtual conference
00:04:04.379 during the Q a I got a question that
00:04:06.720 asked
00:04:07.980 why not use Ruby and uh you know my
00:04:12.299 response was because
00:04:14.580 like uh like I said most Ruby like Ruby
00:04:19.440 opencv for example which is what I used
00:04:21.359 for this demo I did just as a side
00:04:25.020 project for highlighting Leaf area and
00:04:27.840 Counting Bud sites and cannabis plants
00:04:30.360 uh the Ruby opencv didn't have the
00:04:33.120 functions that I needed and python is
00:04:37.380 built alongside of the C plus
00:04:39.360 implementation of opencv so I went with
00:04:42.840 python again but it did get me curious
00:04:46.800 um you know with Ruby opencv like I said
00:04:49.979 it's just a wrapper in Ruby for a C plus
00:04:53.280 plus library and I wanted to know a
00:04:56.160 little bit more about what the options
00:04:57.780 were for ruby gems and
00:05:01.919 it's actually interesting I I definitely
00:05:04.320 discovered some hidden gems this is the
00:05:06.240 hidden gems track I meant to mention
00:05:08.100 that in the first slide
00:05:09.960 um but it's uh it's more than just
00:05:12.840 Ruby packages
00:05:14.759 um what I discovered is there's actually
00:05:16.560 one person doing quite a lot of work
00:05:18.840 with machine learning in Ruby
00:05:21.360 and so bear with me
00:05:24.120 but we will get back to the machine
00:05:25.860 learning and a little bit of computer
00:05:27.419 vision but first I wanted to talk about
00:05:30.060 Andrew Kane I'm not sure some of you
00:05:33.300 might have heard of him uh the man maybe
00:05:36.720 the myth the legend uh I've been using
00:05:40.320 gems made by Andrew Kane for about 10
00:05:43.680 years when I first found search kit
00:05:45.840 which is an elastic search gem
00:05:49.560 um and though all indications point to
00:05:51.600 him being a real person that works at
00:05:53.699 instacart there are rumors that
00:05:56.060 he might not actually exist
00:05:59.460 I mean look at that contribution graph
00:06:01.199 it's it's very impressive don't look at
00:06:03.419 mine I I told you my handle please don't
00:06:06.419 it's been a hard year
00:06:08.460 um
00:06:10.919 you know
00:06:12.600 some people say he might just be in
00:06:14.100 artificial intelligence some people may
00:06:16.020 say he's a group of people working under
00:06:17.940 a pseudonym but at least it looks like
00:06:20.820 he took a two-week vacation so that
00:06:22.680 looks pretty human to me so
00:06:25.500 um I even heard a theory yesterday that
00:06:27.300 maybe he's why
00:06:29.100 maybe whatever the case is Andrew Kane
00:06:32.280 is a Hidden Gem in the community
00:06:35.759 um you know I've yet to meet him or
00:06:38.220 anyone who knows him if you do please
00:06:41.100 introduce me be curious to thank him
00:06:45.419 um but
00:06:46.740 seriously uh you know he's published
00:06:49.860 more than a few gems he has 134 gems
00:06:54.300 and this is something that
00:06:57.840 there are other people in the community
00:06:59.699 like Aaron Patterson has 190 something
00:07:02.940 that he's contributed to
00:07:04.800 uh I know Rafael Franca is right up
00:07:07.319 there with him I think Samuel Williams I
00:07:09.780 Aquatics uh he has something similar to
00:07:13.199 that with millions of downloads but
00:07:16.259 those are a lot of rails core libraries
00:07:18.360 like rack and active support and active
00:07:21.180 record
00:07:22.680 um but to date Andrew Kane has 153
00:07:26.580 million downloads for projects that seem
00:07:30.360 to be mostly his contributions
00:07:33.000 his top downloaded project has 23
00:07:36.720 million downloads I don't have any gems
00:07:39.300 I have a few python packages but you
00:07:41.699 know that's not the important part he
00:07:44.759 often tags the gems that he contributes
00:07:47.819 with battle tested at instacart so again
00:07:51.780 probably just a guy that works at
00:07:54.060 instacart his GitHub profile offices he
00:07:56.099 lives in San Francisco as do I never met
00:07:59.160 him so strong migrations is that most
00:08:02.639 popular gem that has 23 million
00:08:04.740 downloads I've actually not personally
00:08:07.139 used this but it seems to be very
00:08:09.720 popular and has a lot of safety features
00:08:11.460 for running migrations I've heard good
00:08:13.440 things about it definitely worth
00:08:15.240 checking out
00:08:16.380 also battle tested at instacart
00:08:19.919 Search kick I have used
00:08:22.139 um you know you can do full text search
00:08:23.879 in postgres but search kit gives you a
00:08:26.099 lot of other cool features using
00:08:29.580 elasticsearch
00:08:31.379 one of the interesting bits other than
00:08:33.839 the ones you see on the screen are the
00:08:36.180 ability to re-index in the background
00:08:38.099 without any downtime so you can have
00:08:39.899 background jobs that re-index your
00:08:41.520 elasticsearch index without stopping the
00:08:44.279 ability for your users
00:08:46.080 to make searches it has a similar query
00:08:50.660 structure to SQL and you know
00:08:54.540 you can do things like tomato or tomato
00:08:58.620 however you describe that jalapeno with
00:09:01.620 special characters it handles spaces
00:09:04.080 misspellings and uh you know depending
00:09:07.019 on where you come from you might call
00:09:08.940 soda pop and it'll match that as well
00:09:12.240 these are is his examples and again
00:09:15.839 battle tested in instacart so
00:09:19.620 um there's also a search joy for
00:09:21.600 analytics for your elasticsearch
00:09:25.080 mail kick and
00:09:27.839 chart kick lots of the kicks all of the
00:09:30.720 kicks very popular for just Ruby
00:09:33.480 one-liners that will give you nice
00:09:35.220 JavaScript charts that you can have
00:09:36.899 little pop-overs for it also works with
00:09:39.540 blazer which allows you to explore your
00:09:42.720 SQL data write some SQL queries generate
00:09:45.300 reports and charts
00:09:47.880 battle tested in instacart but I also
00:09:49.860 found out that Shopify uses Blazer quite
00:09:52.140 a bit
00:09:52.920 so
00:09:54.240 PG hero is something that I have found
00:09:57.899 recently
00:09:59.120 it's based off of a blog post written by
00:10:02.339 Heroku and PG extras queries but it
00:10:05.820 gives you a nice visualization and a
00:10:07.620 dashboard to see common postgres issues
00:10:11.700 uh there's also Dexter which is
00:10:14.279 automatic indexing for postgres it'll
00:10:16.620 suggest indexes that you don't have by
00:10:18.899 analyzing your slope queries uh group
00:10:21.720 date for grouping temporal data high top
00:10:24.120 for group counts active median for
00:10:27.000 median and percentile queries Ahoy matey
00:10:30.360 is actually the gem name of Ahoy which
00:10:33.000 is a first party analytics for rails gem
00:10:35.899 Ahoy email which is also first party
00:10:39.300 email analytics for rails and field
00:10:41.700 tests for a b testing again this is an
00:10:45.060 incredible breadth of ruby gem
00:10:47.880 contributions lockbox awesome gem
00:10:50.820 predates the active record encryption it
00:10:54.600 does field level encryption integrates
00:10:56.880 with things like AWS
00:10:58.700 KMS which is the Key Management Service
00:11:02.220 and also he has a blind index gem that
00:11:05.399 does encrypted field queries so if you
00:11:07.620 encrypt emails you can still query and
00:11:09.839 look up users by their email address
00:11:12.959 there's also Thunder svm uh
00:11:16.440 I'm going to talk about that much
00:11:18.420 and then there's
00:11:20.339 this
00:11:21.600 what is the Ruby machine learning mole
00:11:25.019 stack if you will
00:11:27.180 uh so Ruby ml is an organization
00:11:31.740 created by Andrew Kane on GitHub with ML
00:11:34.740 stack as a repo that contains these are
00:11:37.440 the things I'm highlighting it contains
00:11:38.940 a bunch of other things too iruby
00:11:41.339 notebooks if you're familiar with
00:11:43.380 IPython IPython is kind of like pry
00:11:46.800 similar to Herb it's an interactive
00:11:49.140 console
00:11:50.700 The Notebook side of things is a
00:11:53.100 web-based application where you can
00:11:54.660 interact with code and have markdown in
00:11:57.779 between and see the returns of the code
00:12:00.860 Vega is a visualization tool
00:12:04.800 that's similar to chart kick but a lot
00:12:06.420 more powerful
00:12:07.640 Rover and profit we'll talk about a
00:12:10.140 little bit Rover is data frames gem
00:12:13.380 similar to pandas in Python profit is
00:12:17.040 for forecasting and prediction modeling
00:12:20.480 pneumo and NRA or naray if you will is
00:12:26.640 uh the Ruby version of numpy again
00:12:30.920 numpy is a fundamental and dimensional
00:12:34.380 array manipulation library that is
00:12:36.839 crucial for a lot of Matrix manipulation
00:12:39.959 procedures
00:12:42.060 this is written in Ruby with C plus plus
00:12:44.639 as it's backing and it is very
00:12:47.760 performant and then there's torch RB
00:12:50.160 which is another gem from Andrew Kane
00:12:53.519 that uh ramps Pi torch or the library
00:12:58.740 that uh is pi torch
00:13:02.100 and that's the end of my talk it's not
00:13:04.620 I just hit a button thank you no no I
00:13:07.139 appreciate the collapse
00:13:09.180 um
00:13:11.399 we got this
00:13:13.560 oh yeah right I don't know I just
00:13:15.839 stopped still on the same slide so Psy
00:13:19.320 Ruby is an organization that put out
00:13:20.940 iruby and like I was saying IPython
00:13:23.459 notebooks are really cool I use Google
00:13:25.920 collab and have since I think it was in
00:13:28.620 beta like 2016 or something but it's uh
00:13:32.760 Google Docs integrated uh posted Jupiter
00:13:36.000 notebooks Jupiter I think was an acronym
00:13:39.180 for Julia Python and R doesn't support
00:13:42.480 Ruby natively but with iruby you can run
00:13:47.300 Ruby inside an IPython notebook so
00:13:52.740 um I think this is something that could
00:13:54.540 be incredible as an accessibility tool
00:13:57.420 for new Rubios I think about being able
00:13:59.820 to share a gist or a link to some code
00:14:03.200 and having it run in some hosted
00:14:06.240 environment like Google code spaces
00:14:08.339 where they don't have to install any
00:14:10.440 dependencies they can just shift enter
00:14:12.600 through the cells see the outputs this
00:14:15.660 is an example from the Cannabis computer
00:14:17.880 vision where it is creating a pretty
00:14:20.519 visualization with the bud sites
00:14:22.680 highlighted
00:14:24.120 um but this is posted on
00:14:30.320 mybinder.org which is like a free
00:14:33.300 hosting of Jupiter notebooks and it is
00:14:36.120 using the docker image that Andrew Kane
00:14:39.600 has in the ml stack repo and this is an
00:14:43.500 example of using Rover and profit to do
00:14:47.160 some forecasting modeling based on some
00:14:50.160 of the data you can see at the top
00:14:51.660 that's the data frame produced by Rover
00:14:54.120 and at the bottom that's the
00:14:55.800 visualization
00:14:57.320 produced by profit
00:15:00.180 uh
00:15:01.800 again Rover is simple powerful data
00:15:05.519 frames for Ruby profit is time series
00:15:08.220 forecasting for Ruby
00:15:10.680 so let's go back to pneumo NRA
00:15:14.160 it's uh similar to numpy but again for
00:15:18.660 Ruby
00:15:20.339 um
00:15:21.360 before we get into torch just going to
00:15:24.060 talk a little about
00:15:25.500 data types
00:15:27.180 what is a scalar
00:15:28.860 one that counts just a single value
00:15:33.600 a vector multiple values like an array a
00:15:37.560 one-dimensional array a matrix is like a
00:15:41.040 table
00:15:41.760 it's a two-dimensional array uh
00:15:45.720 grayscale image is another form of a
00:15:47.639 matrix there are others I can't think of
00:15:51.060 right now an image is a tensor so it's
00:15:55.620 just
00:15:56.579 different
00:15:58.440 arrays or it's an array of different
00:16:01.139 matrixes so you have different color
00:16:03.420 channels each color Channel represents
00:16:05.760 the color values of a given pixel these
00:16:09.540 are what are used for computer vision
00:16:12.199 and there are other
00:16:14.760 types of tensors you can have a tensor
00:16:18.120 for image data text Data uh geojson
00:16:21.899 multi-polygons are an example of a high
00:16:25.199 dimensional array where you have
00:16:27.060 coordinate pairs and lists that outline
00:16:30.360 different polygons on a map these are
00:16:33.120 all things you might come across when
00:16:34.620 you're building applications
00:16:36.380 so Pi torch is a framework that is
00:16:41.820 written in C plus plus and it has become
00:16:45.360 the open source machine learning
00:16:47.100 framework and it accelerates prototyping
00:16:50.160 to deployment of production
00:16:54.259 machine learning models so
00:16:57.540 Pi torch has its own implementation of
00:17:01.079 tensor and torch RB wraps that for us as
00:17:06.120 rubyists
00:17:11.280 so deep learning for Ruby
00:17:14.400 powered by lib torch lib torch is what
00:17:17.459 pi torch is based off of lib torch like
00:17:20.520 opencv is developed alongside of python
00:17:24.660 bindings so we as a community don't have
00:17:27.600 access
00:17:28.679 to all of the latest greatest features
00:17:30.860 unless we Implement that
00:17:33.600 so how can we use torch in Ruby one of
00:17:37.860 the ways would be an IPython notebook
00:17:39.960 like we just described there is an
00:17:42.059 IPython notebook available in that same
00:17:45.120 repository that does use
00:17:48.679 torch RB there's other ways you could do
00:17:52.020 it maybe you want to do background jobs
00:17:54.000 you could use sidekick and torture B to
00:17:56.760 process images videos text do some NLP
00:18:00.660 for natural language processing
00:18:03.120 uh
00:18:04.520 really it's all about what you want to
00:18:07.140 do with it so how can we use torch to
00:18:11.539 leverage an Nvidia GPU with Cuda cores
00:18:15.179 this is something that I mentioned
00:18:16.980 earlier in the talk it's a requirement
00:18:19.200 for the work that I do and torch RB
00:18:22.020 gives us a way of communicating with
00:18:24.419 libtorch to check for and utilize Cuda
00:18:27.900 cores
00:18:28.880 if you're not familiar it is the compute
00:18:31.919 unified device architecture for
00:18:35.720 accessing Nvidia GPU cores it's a great
00:18:39.720 API opencv supports Cuda tensorflow
00:18:43.080 supports Cuda Pi torch supports Cuda and
00:18:47.460 now we can access Cuda cores with Ruby
00:18:51.000 so torch RB has torch text again for
00:18:54.840 text classification natural language
00:18:57.299 processing torch audio for computer
00:19:00.000 audio something that I've been
00:19:01.500 interested in but haven't played around
00:19:02.820 with much torch Vision which is
00:19:05.460 something I really enjoy and torch wreck
00:19:08.820 so you can make recommendation engines
00:19:12.080 and all of these things have models that
00:19:15.299 you can just take off the shelf and use
00:19:17.640 so you can give your users these rich
00:19:21.799 machine learning Ai and quotes
00:19:25.880 features without really having to do
00:19:28.440 anything unless you want to train custom
00:19:30.120 models like you saw before with those
00:19:32.340 surgical objects Yolo's typically
00:19:34.799 trained on
00:19:36.059 the Coco data set but we'll get to that
00:19:38.580 in a second this is an example that is
00:19:42.000 available
00:19:42.919 in the ml stack repo it is the minced
00:19:47.280 data set I call it minced looking at it
00:19:50.220 now it's not actually spelled that way
00:19:52.799 it's probably like mnist or something
00:19:54.660 but it is a handwritten digits data set
00:20:00.299 so zero through nine handwritten and
00:20:03.299 different handwriting and you can train
00:20:06.360 evaluate and predict
00:20:09.179 what digit the computer is looking at
00:20:11.880 using this IPython notebook with Ruby in
00:20:14.760 it
00:20:16.260 so if we
00:20:19.140 wanted to go a little further there is a
00:20:22.740 data set called Coco which is common
00:20:25.020 objects in context and Onyx and again
00:20:30.120 this is just how I say it I've also
00:20:32.640 heard people say o n and X but I like
00:20:34.740 Onyx is the open neural network exchange
00:20:39.059 the Onyx runtime is something that
00:20:41.400 Microsoft put out that is again A
00:20:43.799 cross-platform C plus plus library that
00:20:46.200 gives you an interface for training
00:20:47.880 machine learning
00:20:49.640 accelerated with gpus
00:20:52.140 uh so this is an example
00:20:56.340 of using Ruby you can see there on line
00:21:00.000 four reloading an image with mini magic
00:21:02.419 line seven we're loading the pre-trained
00:21:05.700 model that was trained with the Coco
00:21:07.860 data set again you can just download
00:21:09.660 these models and run them
00:21:11.580 and then line eight there you see we're
00:21:14.160 running predict
00:21:16.080 and lower down you can see some of the
00:21:20.120 founding box drawing the outputs are
00:21:23.640 just another set of arrays and the
00:21:28.320 result would be this so you can see now
00:21:32.100 uh
00:21:34.679 at least for me I can see why it's so
00:21:37.320 interesting it's really cool to be able
00:21:38.940 to take a picture take a video and see
00:21:41.520 what's happening in it we have three
00:21:43.080 bears maybe it's not uh something that's
00:21:45.960 gonna make your next startup super
00:21:48.120 profitable but I think it's cool
00:21:50.760 so again this is Ruby code accessing C
00:21:54.419 plus code to utilize Cuda cores to give
00:21:57.960 you this nice visualization
00:22:02.460 and so I mentioned before that my
00:22:05.520 company uses uh YOLO model and YOLO
00:22:10.760 stands for you obviously love owls
00:22:15.360 um
00:22:16.140 really it's you only look once uh we're
00:22:18.600 using YOLO V7 right now and we have
00:22:22.500 uh taken a pre-trained model and done
00:22:25.559 what's known as transfer learning uh to
00:22:28.080 be able to make our own custom objects
00:22:30.780 that can be detected like hemostats and
00:22:32.880 scissors and needles and sponges
00:22:35.340 uh with the hopes of tracking and
00:22:37.320 Counting objects so that they don't get
00:22:39.000 left in you
00:22:40.799 anyway that does happen apparently
00:22:43.620 um
00:22:44.580 still today there's a lot of work this
00:22:48.059 is my stack that I've been using for a
00:22:50.340 while
00:22:51.600 um I used to use celery now I'm using
00:22:53.820 factory jobs which is from Mike param
00:22:56.179 the creator of sidekick and it's a
00:22:58.980 language agnostic background jobs so I
00:23:01.440 can trigger jobs in Ruby and process
00:23:04.440 jobs in Python
00:23:06.059 I use opencv Pi torch and tensorflow and
00:23:09.780 I'll probably continue using python
00:23:12.059 because
00:23:13.200 I still don't have future parity with
00:23:15.960 what these libraries offer
00:23:18.120 it is something that I'm very interested
00:23:20.159 in and hopefully
00:23:22.740 there's a future where Ruby can do as
00:23:26.400 much as python can
00:23:27.960 so why in Ruby why not and with Ruby
00:23:32.460 anything's possible
00:23:33.960 you can do machine learning in Ruby
00:23:36.780 it's really all about the community
00:23:38.280 interest and this is something that I
00:23:40.200 think could attract a lot of new
00:23:41.580 developers I know there are at least for
00:23:45.539 me people that are very interested in
00:23:47.880 machine learning and quote unquote
00:23:50.159 artificial intelligence
00:23:52.380 I think it's something that could really
00:23:54.240 engage people and you know
00:23:57.960 we learn by reading we codify that
00:24:00.659 knowledge by writing and trying things
00:24:02.640 it's really just about curiosity to grow
00:24:05.820 and teach and share with the community
00:24:08.780 contributing can be as easy as being
00:24:11.580 curious download the ml stack click on
00:24:15.299 the button and the repo to open it in
00:24:17.360 mybinder.org play around with it
00:24:20.340 maybe you'll be inspired to do something
00:24:22.260 ask questions
00:24:24.240 really you don't have to be a master in
00:24:27.419 data science or a PhD in computer
00:24:29.100 science I'm not
00:24:31.740 um
00:24:32.340 I I don't have any degrees but I I do
00:24:35.039 get an opportunity to be the data
00:24:37.380 engineer that puts all this work
00:24:38.880 together you don't have to be an elite
00:24:41.940 contributor pushing dozens of gems I
00:24:45.419 listed a few people before but I mean
00:24:48.179 there are a lot of incredible
00:24:51.140 contributors in our community and I'm
00:24:53.400 really grateful for all of them not just
00:24:56.280 Andrew Kane but
00:24:58.200 I know Justin Searles has dozens Uh
00:25:01.080 Kevin Newton has dozens and it again
00:25:03.659 it's not about how many gems uh you
00:25:06.419 publish because if it were I've
00:25:08.760 published zero so what would that mean
00:25:11.720 uh you don't have to get on stage and
00:25:14.100 give a talk uh
00:25:16.140 that's what I'm doing but you don't have
00:25:18.059 to you don't have to have a big social
00:25:19.440 media presence Andrew Kane has a Twitter
00:25:21.960 but hasn't really engaged with it
00:25:24.059 recently he puts out a lot of work and
00:25:27.000 kind of keeps private and really it's
00:25:29.700 all about what you want to make out of
00:25:31.260 it you don't have to come to conferences
00:25:34.799 this is actually my third conference
00:25:37.500 that I I've attended in like 15 years of
00:25:40.860 programming I'm really enjoying it I've
00:25:43.080 gone to like the last three and done
00:25:44.880 virtual ones but
00:25:47.580 I really think that
00:25:49.919 sometimes even just the smallest
00:25:52.020 gestures of engaging whether you're a
00:25:55.799 new developer or someone with Decades of
00:25:59.340 experience uh sometimes I I gain the
00:26:02.880 most from people asking questions
00:26:05.220 because they're just starting out and it
00:26:07.799 makes me think of things like the
00:26:09.840 question of
00:26:11.039 why not in Ruby uh I never really
00:26:14.520 thought about it I always just thought I
00:26:16.860 have these clients they want these
00:26:18.419 products built I just look for
00:26:20.640 whatever's easiest to pull off the shelf
00:26:22.260 but if we want to
00:26:24.320 we can make it happen in Ruby and
00:26:28.679 that's that's my talk
00:26:31.140 I'm Justin Bowen tons of fun
00:26:42.900 and unfortunately we have three minutes
00:26:45.659 for questions so
00:26:48.720 have I played around with or looked at
00:26:50.940 text image with Ruby no I haven't but
00:26:53.640 that actually brings up an interesting
00:26:57.000 point you may see those text image
00:26:59.700 services on Twitter or those Services
00:27:02.520 where you can upload various photos of
00:27:05.220 yourself and you can get avatars
00:27:06.960 generated
00:27:08.580 the cool thing about those is the people
00:27:11.700 producing those like levels IO the
00:27:14.279 Twitter handle
00:27:15.779 he's put out a bunch of very successful
00:27:18.779 products Based On off-the-shelf Tools so
00:27:22.500 you can make something like that maybe
00:27:25.740 not in Ruby unless you make the Bindings
00:27:27.480 that connect to the C plus libraries
00:27:29.640 that can run those models
00:27:31.980 um if there is an onyx model that could
00:27:33.720 do it you potentially could do it with
00:27:35.340 the Onyx runtime gem
00:27:37.679 um
00:27:38.400 but the cool thing is making a product
00:27:41.340 out of something off the shelf doesn't
00:27:43.020 mean you need to know how it works
00:27:44.460 doesn't mean you read the white paper
00:27:46.500 and understand the math and stuff
00:27:50.039 because I don't I just run the models
00:27:52.860 and make them go fast with Factory so
00:27:55.620 yeah I haven't done it but definitely
00:27:57.720 something that's interesting one thing I
00:27:59.760 thought about would be uh doing the same
00:28:01.679 thing with pets
00:28:03.360 so if you do that just remember who gave
00:28:06.000 you that idea
00:28:08.400 I have really cute pictures of uh my
00:28:11.159 cats in uh medieval Formal Wear so
00:28:15.600 someone someone did that though they
00:28:17.640 spent time doing that just
00:28:19.260 auto-generated charge 20 bucks any other
00:28:21.480 questions I'll just keep talking about
00:28:22.980 cats
00:28:24.720 all right
00:28:25.980 great thank you for the question I
00:28:28.080 appreciate it
00:28:29.279 and that's it you guys can
00:28:31.799 snack time