Summarized using AI

Starting & Contributing to Open Source Projects for Beginners

Guo Xiang Tan • June 05, 2015 • Singapore • Talk

In the presentation "Starting & Contributing to Open Source Projects for Beginners" by Guo Xiang Tan, the speaker shares insights aimed at encouraging beginners to engage with open source projects, particularly those new to programming and the Ruby on Rails framework. Tan shares his personal journey of transitioning from mechanical engineering to programming, highlighting how he began contributing to open source projects after developing an interest in programming a year prior. He emphasizes the challenges beginners face, such as feeling overwhelmed by complex codebases and apprehension about making contributions.

Key points discussed include:

  • Overcoming Misconceptions: Tan addresses common fears, emphasizing that even small contributions, like updating documentation or fixing minor bugs, are valuable to the open source community.
  • Starting with Simple Contributions: He advises beginners to start their contributions with minor fixes or documentation improvements to build confidence in their skills.
  • Utilizing Resources: Tan discusses resources like codetriage.com to find open issues in repositories to contribute to and how newcomers can navigate the Rails issues tracker to find tasks suitable for their skills.
  • Tools for Engagement: He mentions tools like Ruby Prof, a performance profiling tool, and Byebug, a debugging tool that can help new contributors better understand code and improve the quality of their contributions.
  • Building Projects: Tan shares his experience in developing RubyBench.org, a project aimed at benchmarking Ruby code for performance testing. He notes its importance in preventing performance regressions in Rails and shares how community collaboration and seeking assistance were key to launching and maintaining the project.
  • The Importance of Patience and Community Support: The speaker reminds newcomers that the contributing process can take time and emphasizes that it's okay to make mistakes, as the community is generally supportive and willing to help refine contributions.

Overall, the takeaways from Tan's talk highlight that the path to contributing to open source is not only accessible but can also be immensely rewarding for those willing to take the first steps, seek help, and stay persistent in their efforts. He encourages every newcomer to just start contributing and keep learning.

Starting & Contributing to Open Source Projects for Beginners
Guo Xiang Tan • June 05, 2015 • Singapore • Talk

Starting & Contributing to Open Source Projects for Beginners by Guo Xiang Tan

Contributing to Open Source projects can be daunting for beginners but at the same time extremely rewarding. Before I started contributing, I was asking myself these questions:

* Rails is such a huge and complex code base, how can I contribute anything?

* I might be wrong, so I better not raise the issue or apply a "lousy" patch.

Having gone through the process, I hope to help answer those questions and give confidence to new developers that have yet to contribute to open source projects because of such fears. There are tools and techniques which I have learnt and picked up that can help new developers understand a foreign code base better which I would like to demonstrate as well.

In addition, I will like to talk about RubyBench.org, a long running Ruby benchmark that I helped to revitalized and launched. I will talk about why RubyBench.org matters to the community and how it is being structured. Following which, I will talk about my experience starting RubyBench.org and how rewarding it can be.

Red Dot Ruby Conference 2015

00:00:19.039 so today i'm actually going to be
00:00:20.480 talking about um starting and
00:00:21.680 contributing to open source projects for
00:00:23.519 beginners um i'm targeting it at people
00:00:26.800 who haven't contributed to open source
00:00:28.480 or you are thinking about contributing
00:00:29.679 to open source so i consider myself a
00:00:31.599 beginner i learned programming maybe one
00:00:33.440 and a half years ago and then i started
00:00:35.360 contributing a year in so the
00:00:37.040 experiences are still fresh in my head
00:00:38.879 so i'd like to share them with you
00:00:41.040 so before that so yeah of course young
00:00:43.120 um i go by the pseudo name of ellen
00:00:45.440 because sometimes when you introduce
00:00:46.800 yourself to people like when i was
00:00:48.320 spending a year in the states i go i'm
00:00:50.320 course young i get that awkward silence
00:00:52.800 because they can't pronounce your name
00:00:54.399 so yeah that's my pseudo name
00:00:56.800 on the internet i'm known as tjxwell uh
00:00:59.680 twitter is tjx underscore world
00:01:02.559 so i'm actually a student at the
00:01:03.920 national university of singapore so my
00:01:06.000 background is actually in mechanical
00:01:07.600 engineering um but then two years in i
00:01:10.320 lost interest because everything was
00:01:11.680 just too theoretical i wasn't building a
00:01:14.080 new tesla
00:01:16.720 yeah
00:01:17.600 so so i i actually got into programming
00:01:20.159 um
00:01:21.040 a year ago
00:01:22.560 yeah earlier two years ago in fact
00:01:25.439 so i actually did a one-year internship
00:01:26.880 under this thing called the national
00:01:28.960 um nus overseas college program where
00:01:31.040 they actually send students into
00:01:32.320 startups um in california and then you
00:01:34.799 worked in startups where they have less
00:01:36.000 than 10 employees
00:01:37.600 so that was my my first encounter with
00:01:39.840 programming ruby and ruby on rails
00:01:43.520 so um at rails conference this year um
00:01:45.600 tenderlove talked about how he got a
00:01:47.040 degree in uh taught leadering from an
00:01:49.040 online university so so even though
00:01:51.439 after he found out that his degree
00:01:52.960 wasn't accredited um i'm still a big
00:01:55.360 follower
00:01:56.640 so so as a follower i tried to do some
00:01:59.280 of the things that he do so he likes to
00:02:01.280 do friday hubs with his uh with his cat
00:02:03.759 gobbie puff so i tried that but i didn't
00:02:06.159 have a cat so so i i had to find a
00:02:09.039 exotic short haircut in singapore so
00:02:11.120 there was one in the cat museum and his
00:02:12.879 name was brad pitt
00:02:15.360 no i'm serious his name was brad pitt
00:02:16.800 but the problem was the whole time i was
00:02:18.400 there he just stayed in that cardboard
00:02:20.720 box and just refused to come out
00:02:22.959 so after an hour i got impatient i tried
00:02:25.200 to take him out and then when i when my
00:02:26.879 hand went in i got scratched
00:02:29.840 yeah i'm sorry i'm playing neko atsume
00:02:31.599 too so if if you're not playing it you
00:02:33.040 should be playing it if you like cats so
00:02:34.800 basically it's a game where you pull out
00:02:36.080 toys in your garden cats come and play
00:02:38.080 with your toys they give you fish and
00:02:40.000 then you use the fish to buy more toys
00:02:41.760 so you get rare rare cats to come
00:02:45.840 so i prefer mini test so
00:02:49.360 if you like nyan cat when running a test
00:02:52.080 jam install mini test dash nyan cat
00:02:54.879 it's pretty cool
00:02:57.120 so recently i accumulated a lot of
00:02:58.640 internet points
00:02:59.840 i became the number one contributor to
00:03:02.000 ruby on rails in singapore i just
00:03:03.760 thought like if i said i'm the 69
00:03:06.239 contributor to ruby on rails that
00:03:07.920 wouldn't be like as impressive
00:03:10.159 but then the problem was
00:03:12.080 i i realized that it's the internet uh
00:03:14.080 everything is made up and the points
00:03:15.360 don't matter so i was like oh my all my
00:03:18.239 internet points are pretty useless
00:03:21.360 okay so to the actual uh to actually
00:03:23.360 some actual content
00:03:24.959 um so i okay my talk was like open
00:03:27.680 source projects but most of my
00:03:29.040 contributions were actually to ruby on
00:03:30.879 rails so most of my examples would be to
00:03:33.440 rails
00:03:35.120 so the motivation i had when i first i
00:03:37.440 wanted to contribute to open source was
00:03:38.959 because i was new i was new to
00:03:40.159 programming
00:03:41.200 and then i really wanted to learn more
00:03:44.000 basically like you do things that work
00:03:46.239 but then there were a lot of things i
00:03:47.360 still didn't know so i wanted to expose
00:03:49.280 myself more to other different libraries
00:03:52.799 and i wanted to give back so when i got
00:03:55.519 into programming i was amazed by the
00:03:57.120 open source community so people like
00:03:58.879 just put up projects where you can
00:04:00.400 actually use their code and then it
00:04:02.239 makes you productive it gives you a job
00:04:05.680 so what i did was actually about eight
00:04:07.519 months into programming i actually
00:04:08.720 applied for google summer of code and
00:04:10.400 then um i was lucky to get in and then i
00:04:13.360 actually worked on this project um
00:04:14.799 deprecating controller and integration
00:04:17.120 tests um but during the whole time i was
00:04:19.919 actually i was learning more rather than
00:04:21.919 actually completing the project so
00:04:23.680 actually at the end of the summer
00:04:26.400 the pull request is up but it's not no
00:04:28.479 one looks at it
00:04:31.040 so um when i first started contributing
00:04:33.520 to rails or when i first started
00:04:34.960 programming everyone was i read a lot of
00:04:37.600 articles like rails is magic
00:04:40.240 it's this black box which you don't
00:04:41.840 understand
00:04:43.759 so i was faced with a situation where i
00:04:45.840 was like oh no i have to become a
00:04:47.680 magician just to be able to contribute
00:04:49.680 to rails
00:04:51.280 but then as i worked on rails during
00:04:53.919 google sum of code i started to realize
00:04:55.680 that that is not the case um
00:04:57.759 reading rails actually forces you to
00:04:59.360 learn about things that you don't know
00:05:01.360 or rather i mean if you read any good
00:05:03.360 open source libraries in general it will
00:05:04.560 force you to learn
00:05:06.639 so as a beginner like you don't know
00:05:08.639 what you don't know so um i was exposed
00:05:11.680 to things like meta programming so
00:05:13.919 like this is just a snippet like defined
00:05:15.520 method in ruby it's pretty clear like
00:05:17.360 it's just defining a method but then i
00:05:19.280 realized there was this whole part of
00:05:20.800 ruby's meta programming i didn't know so
00:05:23.039 you should buy this book
00:05:31.600 yeah but but so basically um if you
00:05:33.840 actually spend time looking to rails
00:05:35.520 you'll realize that rails actually has
00:05:37.280 no magic it's ultimately still ruby
00:05:39.520 under the hood if you're if you're a
00:05:41.120 ruby programmer you'll understand what
00:05:43.280 is going on in rails you just need to
00:05:44.720 take spend some time and try to
00:05:46.000 understand what is going on
00:05:48.479 um so one of the misconception i had was
00:05:50.720 like
00:05:51.520 rails is such a big code base like how
00:05:53.199 can i possibly contribute anything like
00:05:55.919 as a beginner
00:05:57.840 so the simplest thing can do is actually
00:05:59.440 dog fix um
00:06:01.199 so when i first started i was just
00:06:02.400 reading like the contributing to rails
00:06:04.160 guides and then i realized oh it could
00:06:05.759 be phrased better in a certain way so
00:06:08.080 just submit a pull request so this is
00:06:09.919 very simple but then
00:06:11.919 fixing documents actually has impact
00:06:14.080 down the line like when you develop new
00:06:16.080 developer
00:06:17.120 developers read the documentation
00:06:19.680 it makes their life easier
00:06:22.319 so the next one is remove all the code
00:06:24.080 so so that's the simplest thing you can
00:06:25.280 do in for reals
00:06:26.880 um so this is just an example like we
00:06:28.639 were calling routes.select.map
00:06:31.440 but then in the map we're just creating
00:06:33.440 a new instance of a route object and
00:06:35.759 then what we're calling flatten like
00:06:37.600 that flattened was just unnecessary so
00:06:39.680 you just remove it and then you get one
00:06:41.360 comment into rails so one internet point
00:06:45.199 so a bit of like you could actually
00:06:47.680 improve performance even as a beginner
00:06:49.840 so so i was reading through this code
00:06:51.600 like how a request goes through the
00:06:53.520 whole um
00:06:54.880 rails library so there was this method
00:06:56.720 like we were calling get routes as hate
00:06:58.800 so what it was actually doing was
00:06:59.919 basically what you see
00:07:01.199 what you saw earlier
00:07:02.639 for all your get routes it was actually
00:07:04.319 creating a new route object and just
00:07:06.000 setting the verb to hate so every
00:07:07.440 request it was doing that so but then it
00:07:09.680 was it was only useful for hit requests
00:07:11.520 so i just all i did was submit a patch
00:07:13.599 check that the request method was hit
00:07:15.199 and then you call the method if not you
00:07:16.720 don't
00:07:17.919 so i did some simple like integration um
00:07:20.560 benchmark integration test then you get
00:07:22.319 like
00:07:23.280 three percent but actually in in the
00:07:25.120 whole context of a real application you
00:07:27.280 don't really get much but then you have
00:07:29.120 to convince someone in the rails call to
00:07:30.479 merge it so so that was a trick i used
00:07:34.400 yeah so so anyway um that fix wasn't
00:07:37.680 still enough it wasn't enough because um
00:07:40.160 on every hit request now you're
00:07:41.680 generating a new route objects every
00:07:44.160 time you call hate requests so what we
00:07:46.160 did was actually all you all we did was
00:07:48.560 we set the request method to get
00:07:51.599 match it against all the routes and then
00:07:53.360 we set it back to hate and then you just
00:07:55.440 and and that's how you get all your
00:07:56.639 routes for hate requests
00:07:59.440 so one other thing is when i first
00:08:01.120 started i was really afraid of showing
00:08:02.639 my code to the world i was afraid of
00:08:04.639 submitting a bad patch so my first
00:08:07.039 commit was actually i've opened a pull
00:08:09.520 request on the fork of my rails
00:08:11.120 repository and then i take a rails
00:08:12.960 computer inside so that that was really
00:08:14.560 unnecessary like in a way i was afraid
00:08:16.960 to show my code to the whole world i was
00:08:18.879 afraid of being wrong
00:08:20.319 so actually if you just submit the rails
00:08:22.319 uh just submit the pull request to the
00:08:23.680 official like real rails repository even
00:08:26.400 if you get it wrong they'll help you um
00:08:28.319 they'll help you with it
00:08:30.240 and finally it's really um it's okay to
00:08:31.759 make mistakes i make a whole bunch of
00:08:33.519 them
00:08:34.640 um so one thing i did was i was reading
00:08:36.240 through all the
00:08:37.760 test libraries because i was working on
00:08:39.200 tests then like require mini tests was
00:08:41.599 all over the place i was like um we were
00:08:43.279 doing it we
00:08:44.640 are already requiring mini tests
00:08:46.240 somewhere else so when i just remove
00:08:48.000 them
00:08:48.880 then for some reason it got merged then
00:08:50.320 a few days later someone just submitted
00:08:51.839 a pull request saying oh if i do rails
00:08:54.800 console and then i type f mini test is
00:08:57.360 missing
00:08:58.800 and then i have to get like uh the guy
00:09:00.720 who merged the pull request to like
00:09:02.080 revert the commit for me
00:09:04.880 yeah and finally i also so i got i got
00:09:07.279 it this morning i just woke up and i was
00:09:08.959 reading through my emails and i got it
00:09:10.800 so basically i recently deprecated um
00:09:13.600 a signs and exit template and i
00:09:15.120 extracted them into a gem so then this
00:09:17.519 guy just submitted like if you actually
00:09:19.040 do it right now you add the gem to your
00:09:20.959 jam file it doesn't work so i was pretty
00:09:23.200 sad so i said i'll have to fix this but
00:09:25.920 then i learned from juanito as they just
00:09:27.839 add emoji
00:09:38.080 yeah i'm so so that that the guy hasn't
00:09:39.920 replied but i i hope he doesn't get the
00:09:41.839 wrong idea
00:09:44.399 and and finally sometimes you really
00:09:45.839 have to be patient um many times like
00:09:48.480 once you submit the pull requests you're
00:09:49.600 eager for it to get merged
00:09:51.600 uh so i had this incident uh so it was
00:09:53.760 just a pull request on some partitioning
00:09:55.680 of routes i realized we could do it in
00:09:57.279 setup time and then i take tenderlove on
00:10:00.560 june 20th 2014
00:10:02.800 and then um
00:10:04.880 so on march
00:10:06.320 3rd of march this year 2015 finally got
00:10:08.320 much i was like yay aaron
00:10:10.320 then i was like
00:10:11.440 yay thought later merging my pull
00:10:12.880 requests so i was pretty happy about
00:10:14.640 that but but but the point i'm trying to
00:10:16.720 make is really um there's only 13 people
00:10:18.640 in the rails core team right now that
00:10:20.480 some sometimes they don't really have
00:10:22.560 the time to look at all pull requests so
00:10:24.079 it's it's okay that it takes a while
00:10:26.959 so if you if you're interested to find
00:10:28.399 things to work on like to contribute to
00:10:30.240 open source projects codetrite.com is
00:10:33.120 pretty good you just subscribe your
00:10:34.560 email and then you look uh you subscribe
00:10:36.720 to the repository that you are
00:10:38.000 interested in commenting then every day
00:10:39.279 it just sends you an email of different
00:10:41.680 issues that you can work on
00:10:43.839 and then uh the iss the rails issues
00:10:46.160 tracker is pretty good um so this was a
00:10:48.480 simple thing i fixed it was just like
00:10:50.320 there was this behavior change and then
00:10:52.399 all i did was just a one uh like okay
00:10:54.560 three lines change you would just you
00:10:56.640 just have to check what the anchor is
00:10:58.240 there so this commit might be very
00:11:00.399 trivial but then i realized that you
00:11:02.480 need people with the time to look into
00:11:04.000 it like um you need to get uh read the
00:11:06.480 code base find out what change you need
00:11:08.399 at the test so it all takes time and you
00:11:10.079 can't expect the rails core team to be
00:11:11.920 working on this kind of issues all the
00:11:13.920 time so this is where the community
00:11:15.519 comes in
00:11:16.720 uh so dhh um nearing to every release
00:11:19.680 he'll have a list of things that he
00:11:21.279 wants people to do so if you look at his
00:11:24.079 issues though um there's actually a lot
00:11:25.920 of things to work on so recently like i
00:11:27.760 said i deprecated a science and exit
00:11:29.920 template from controller test that was
00:11:31.519 actually one of the issues um it was
00:11:33.760 actually pretty simple like you just
00:11:35.040 have to go and fix the rails internal
00:11:36.480 test case but then it took me about say
00:11:38.640 a week of spare time just to do
00:11:40.839 it yup so so this was uh much recently
00:11:45.040 and then if you're good with
00:11:46.000 documentation um the ruby documentation
00:11:48.240 project is really
00:11:49.600 good like um 75 of ruby is still like
00:11:51.920 undocumented or not documented well so
00:11:54.079 these are areas where you can actually
00:11:55.680 help
00:11:56.640 ruby or the rails community
00:11:59.279 in
00:12:00.160 um so there are a few tools that i think
00:12:02.000 can help you to understand a new code
00:12:03.519 base better so the first one is actually
00:12:05.839 ruby prof so so i was actually using
00:12:08.320 ruby prof for profiling because i was
00:12:10.320 looking at the performance of controller
00:12:11.680 test versus integration tests
00:12:15.440 yeah but then i realized that ruby prop
00:12:17.519 provides you with a pretty nice graph
00:12:19.680 html printer okay that
00:12:23.200 i should have checked my slides
00:12:25.200 okay
00:12:26.320 we'll skip that okay so the next one is
00:12:28.480 a debugger
00:12:29.760 by bug i think it comes default with
00:12:32.720 rails right now so if you guys aren't
00:12:35.120 still getting the gif it's a bug's life
00:12:37.680 and waving so it's bibunk
00:12:42.720 okay
00:12:43.920 yeah anyway so buy bug is basically um
00:12:45.920 if you don't understand what the method
00:12:47.200 is doing just raise the debugger look at
00:12:48.880 the variables look at what methods are
00:12:50.639 being called so that's useful
00:12:52.720 rails is pretty well documented just
00:12:55.120 read all the tests you
00:12:56.560 usually get a good idea of what is going
00:12:58.480 on
00:13:00.480 so the next part is actually starting
00:13:02.240 open source projects so
00:13:05.360 i think the the most important lesson i
00:13:06.880 learned is really find a simple but yet
00:13:08.800 important project to work on there are
00:13:10.800 plenty of it out there so the one i
00:13:12.560 found was actually um
00:13:14.480 a year ago like sam made a call for a
00:13:16.240 long-running ruby benchmark it was
00:13:18.240 pretty straightforward we just needed a
00:13:20.800 we need to benchmark ruby on a
00:13:22.240 consistent basis to to identify um
00:13:24.800 performance regression
00:13:26.560 and so i actually started um so there
00:13:28.560 were prior work being done on it but
00:13:30.079 then it was still in pieces so what i
00:13:31.920 did was actually i put it all together
00:13:33.680 and then we launched ruby bench
00:13:35.920 so the reason why ruby bench matters
00:13:38.399 is actually um
00:13:39.760 so in rails 4.1 to 4.2 if you read this
00:13:42.000 blog post um rails actually suffered
00:13:43.680 like there were some performance
00:13:45.120 regressions in there and then sam went
00:13:46.720 in to fix it so but this could all have
00:13:49.040 been avoided if we were just
00:13:50.480 benchmarking rails on a consistent basis
00:13:52.240 like every time before we we release a
00:13:54.480 new version of rails we just have to
00:13:56.160 benchmark it
00:13:58.560 so um sam made this quote i took this
00:14:01.120 quote from sam like basically if you fix
00:14:03.199 a performance regression like months
00:14:04.800 into the development cycle it's going to
00:14:06.240 cost more whereas if you can identify
00:14:08.639 the regression early and you fix it
00:14:10.480 early it's actually pretty easy or cheap
00:14:12.639 to fix
00:14:14.480 so in order to identify performance
00:14:16.480 regression we actually need a lot of
00:14:18.079 data and to do that we always have to be
00:14:20.480 measuring that's that's the only way we
00:14:21.839 can get the data
00:14:23.839 so there are actually uh really
00:14:25.600 benchmarks out there so all our
00:14:26.880 benchmark right now is actually from the
00:14:28.399 ruby trunk rugby trunk has a folder
00:14:30.320 benchmark and we just took everything
00:14:31.600 from there so discuss
00:14:33.519 has a benchmark as well like we just
00:14:34.959 wanted to see how does a rails app
00:14:38.000 change when
00:14:39.199 when ruby changes as well
00:14:41.839 so what we have is releases benchmarks
00:14:43.920 um so this is like a simple
00:14:46.399 it's benchmarking the uri library over
00:14:48.320 the different releases of ruby
00:14:50.800 so
00:14:52.560 and this is the discord benchmark so
00:14:54.480 like in 2.2 you can see that then 75 90
00:14:57.519 and 99 percentiles went down because of
00:14:59.760 the new gc
00:15:01.839 and then we have per benchmark so this
00:15:03.440 is the one that i'm really actually more
00:15:05.040 excited about so this was the app uri
00:15:08.079 library so it's just doing a bunch of ui
00:15:10.639 stuff but you can actually see like
00:15:12.160 there was a regression and then when we
00:15:13.920 actually ran backfill all the benchmark
00:15:15.839 we were able to like easily identify
00:15:18.480 like what commit actually caused the
00:15:20.399 problem
00:15:24.320 yep so the community is actually a
00:15:25.920 support for a new like a feature so it
00:15:27.839 actually causes a regression so the
00:15:29.519 thing is that even though i don't
00:15:30.800 understand ruby as a beginner i'm not a
00:15:32.639 c programmer
00:15:33.920 as long as i can help the ruby core team
00:15:36.720 to narrow down the scope to the exact
00:15:38.320 commit it's it's tremendously useful for
00:15:40.800 them rather than telling them oh this is
00:15:42.639 slow and they don't know why it's low
00:15:47.120 yep so that's this course on the on for
00:15:49.279 every comment of ruby
00:15:51.600 and then recently we actually added um
00:15:53.600 rails releases uh
00:15:55.279 rails benchmarks so we are actually
00:15:57.040 doing micro benchmarks mainly on active
00:15:58.880 record right now so if you see like 4.2
00:16:01.199 we your find buy methods are faster and
00:16:04.079 then
00:16:04.959 you can also see that there's a
00:16:05.920 correlation between like why did why are
00:16:08.000 they faster like the total objects
00:16:09.920 allocated is slower
00:16:13.120 so um ruby bench has different
00:16:14.880 components the first one is actually
00:16:16.720 ruby bench web so that's the whole front
00:16:18.720 end that you see
00:16:20.160 so the main lesson i learned from that
00:16:21.680 when building
00:16:23.120 the front end was to ask for help
00:16:26.160 so this was actually a first version of
00:16:28.000 ruby bench or rails bench back then
00:16:30.000 because i i just completed the google
00:16:31.839 sum of code i was i was in contact with
00:16:33.759 some of the rails core team members so i
00:16:35.600 wanted to build something for rails i
00:16:36.800 wanted to benchmark rails for every
00:16:38.160 commit just to avoid all those
00:16:39.680 performance regression
00:16:41.600 and then we decided to move move um into
00:16:43.680 ruby benchmarks because it was actually
00:16:45.440 a lot easier like it was the lower
00:16:47.279 hanging fruits
00:16:49.519 and then we uh when i showed that
00:16:51.120 railsconf 2015 it was exactly showed as
00:16:53.920 like this screenshot so like my lousy
00:16:56.399 design skill and finally
00:16:58.320 so i i decided okay that that is not
00:17:00.639 nice so i asked my friend for help so
00:17:02.079 young actually uh my friend yangchun
00:17:04.079 actually helped me with it so we finally
00:17:06.079 have it look at it at least it looks
00:17:08.400 better now
00:17:10.559 yep so so the other part is the ruby
00:17:12.400 bench server um so basically we run all
00:17:15.199 benchmarks on a dedicated server we
00:17:17.120 can't run it on virtual host because you
00:17:19.199 can't really guarantee the cpu allocated
00:17:21.199 to it so we had to buy a dedicated
00:17:23.600 server when i first started i was i was
00:17:25.360 being cheap like i'm a student so i can
00:17:27.039 be cheap so all i did was i used the
00:17:29.120 soft layer credits like they gave you
00:17:30.640 500 for your first server
00:17:32.400 in maybe australia then the next month
00:17:34.000 i'll switch to a perry server and i get
00:17:35.520 500
00:17:36.799 so i was using that but then it wasn't
00:17:38.720 sustainable so eventually um when we
00:17:40.559 launched it we actually um
00:17:43.200 asked for help yep so we got a lot of um
00:17:46.160 sponsors um
00:17:47.679 or people who wanted to sponsor us and
00:17:49.200 then the first the guys that were happy
00:17:51.440 to sponsor us were rubytune and finally
00:17:53.520 we moved it to ruby together we just got
00:17:55.520 the guys from rubytune to contribute to
00:17:57.280 ruby together and then now ruby together
00:17:59.120 is actually sponsoring the dedicated
00:18:00.720 server every month
00:18:03.679 so there's also the ruby bench docker
00:18:05.440 part so how we run our benchmarks is we
00:18:07.679 run them in docker containers because
00:18:10.080 we need we need to get the benchmarks
00:18:12.320 being run on a consistent environment
00:18:13.840 and docker is a great great tool for it
00:18:16.400 so the best part of it is i didn't know
00:18:18.080 docker when i first started the project
00:18:19.360 or i didn't even know about docker but
00:18:21.280 then um sam like gave me some directions
00:18:23.200 like oh docker is pretty good for this
00:18:24.720 and then i looked into it so building
00:18:26.160 your open source project actually makes
00:18:27.919 you learn as well like you find out
00:18:29.600 things that are useful for certain areas
00:18:31.760 and then you learn more about them
00:18:34.400 and finally we have the ruby bench suite
00:18:36.640 so it's basically all the benchmark we
00:18:38.000 actually store them in a repository so
00:18:39.760 if any one of you wants to contribute a
00:18:41.280 new benchmark you can just push to it
00:18:42.799 and then it will automatically be run
00:18:45.200 and then uploaded i mean the results
00:18:46.880 will be on ruby bench i mean the site
00:18:50.080 so the lesson learned was also to ask
00:18:51.600 for help so actually now you're starting
00:18:53.679 to get a picture that i actually didn't
00:18:54.880 do much i just keep asking people for
00:18:56.480 help
00:18:58.320 so actually uh so i actually asked chris
00:19:00.320 um chris is a rails committer so he was
00:19:02.559 actually working on rails perf
00:19:04.320 um it was sort of like ruby bench but
00:19:06.960 for rails but then so i felt like there
00:19:09.520 was a bit of like duplicated effort
00:19:11.520 involved so i thought so i reached out
00:19:13.360 to him and asked him like would you be
00:19:15.120 interested in like just plotting your
00:19:16.720 benchmarks over and then we can use it
00:19:18.080 for ruby bench so that that's what he
00:19:19.760 did
00:19:21.360 and then finally i think um the most
00:19:23.919 important lesson that i really learned
00:19:25.840 throughout the whole project was to just
00:19:27.280 keep building like at the start when i
00:19:28.880 did rails bench and
00:19:31.120 stuff like that like no one really cared
00:19:32.720 but then you just keep building and just
00:19:34.480 keep seeking for feedback so
00:19:36.880 when you say sick for feedback you get
00:19:39.280 mentors that are willing to help you so
00:19:40.960 they'll give you directions and and you
00:19:42.480 get to learn new stuff
00:19:45.280 so that's actually
00:19:46.799 the end
00:19:48.559 all right thank you
00:20:02.480 hi
00:20:03.360 um is there anything you would like to
00:20:05.039 do next for revenge yeah there's there's
00:20:07.679 actually a lot of things that's on like
00:20:09.919 the pipeline that we want to do so right
00:20:11.679 now when we run all our benchmarks the
00:20:14.400 locks are not being sent back to us so i
00:20:16.240 actually manu i have to manually go into
00:20:18.000 the server
00:20:19.039 look at the logs see like when a
00:20:20.799 benchmark goes wrong i have to see why
00:20:22.400 so ideally we want them to like be
00:20:24.320 posted back somehow to the server and so
00:20:26.640 that we can look at the logs
00:20:28.400 um
00:20:29.919 yeah there's i mean there's a lot of
00:20:31.360 other things you can go over to like
00:20:33.039 communitycommunity.rubybench.com
00:20:36.159 it's a discourse forum where we are
00:20:37.760 discussing about the new features that
00:20:39.039 we want so any any help is welcome
00:20:41.200 actually like i always ask for help so i
00:20:44.240 don't have to do much after
00:21:00.159 you
Explore all talks recorded at Red Dot Ruby Conference 2015
+18