Summarized using AI

Rails is a Follower

Makoto Inoue and Masatoshi SEKI • November 01, 2012 • Denver, Colorado • Talk

Summary of 'Rails is a Follower'

The video titled "Rails is a Follower" features Makoto Inoue and Masatoshi Seki discussing the capabilities of dRuby, a distributed object system built on Ruby. The speakers aim to highlight how dRuby precedes Rails in its functionalities and utilizes powerful metaprogramming techniques to enable seamless method invocation across distributed systems.

Key Points Discussed:

- Introduction to dRuby:

- dRuby stands for Distributed Ruby and allows remote method invocation between different processes.

- It requires no C extensions, being entirely written in Ruby, and is part of the Ruby standard library.

  • Overview of the Talk:

    • Inoue introduces the session, thanking event sponsors and setting the stage for exploring dRuby's potential.
    • The speakers plan to delve into the design concepts behind dRuby and showcase examples of its practical applications.
  • dRuby Features:

    • dRuby enables communication between processes using methods like method_missing, which allows dynamic method handling for remote objects.
    • Referencing objects instead of passing them allows dRuby to manage remote calls efficiently without raising errors for non-serializable objects.
  • Practical Examples:

    • An example illustrates two terminal windows communicating through dRuby, where one can invoke methods on objects exposed by the other.
    • Features such as distributed queues are presented, where pushing and popping values across terminals can demonstrate real-time communication.
  • Metaprogramming Techniques:

    • Seki explains various metaprogramming techniques utilized in dRuby to enhance functionality and maintain a Ruby-like object-oriented environment even in distributed settings.
    • Challenges of sharing states across processes and managing unknown object references are discussed.
  • Real-World Applications:

    • The speakers mention that several projects leverage dRuby, including testing frameworks like RSpec and monitoring tools, showcasing the practical relevance of distributed programming in Ruby.
  • Conclusions and Takeaways:

    • The session highlights that understanding dRuby offers developers novel approaches to distributed computing within the Ruby ecosystem.
    • Seki concludes with a call to experiment with metaprogramming techniques, urging attendees to incorporate dRuby into their own projects, while noting its potential for performance optimization in distributed applications.

Main Takeaways:

- dRuby represents a powerful tool in Ruby for enabling distributed computing, built on metaprogramming practices.

- Its design and functionality are suited for developers looking to optimize systems requiring remote method invocation.

By the end of the talk, participants are encouraged to explore the capabilities of dRuby further and apply these lessons in practice to enhance their own Ruby applications.

Rails is a Follower
Makoto Inoue and Masatoshi SEKI • Denver, Colorado • Talk

Date: November 01, 2012
Published: March 19, 2013
Announced: unknown

"dRuby came long before Rails. It uses metaprogramming features for distributed programming. Proxy objects "automagically" delegate method calls to remote objects. ... dRuby is a good example of a very flexible system implemented by Ruby. In this sense, Rails is a follower." - Matz

Masatoshi Seki, the author of ERB and dRuby, and Makoto Inoue, the translator of "The dRuby book" will show how dRuby's metaprogramming magic works, and inspire you to use the full power of ruby.

We will explain the history and design concepts behind dRuby, before diving into the details of the metaprogramming magic that makes it all work. dRuby will show you a side of Ruby you've never seen before. Let's explore together.

RubyConf 2012

00:00:16.240 okay all right how are you good good
00:00:21.400 good how's your brain so far like you know like first day like functional programming like distributed computing
00:00:27.760 concurrency I think I think my brain already exploded like two three times and just preparing for this talk already
00:00:33.520 exploded two three times so but I think it should be okay compared to you know all these like other stuff okay and uh
00:00:42.360 so my name is Makoto uh I'm a web developer a company called new bamboo based in UK uh so I'm I'm like rails
00:00:49.559 developer like probably most of you guys and but at the same time for last uh one year and a half I spent yeah year and a
00:00:58.039 half uh translating bod the D book which original original book is this one and
00:01:04.559 so translated and now from PR pubs and yeah and also yeah some people wrote
00:01:11.640 like a uh a nice book review and actually the title RS uh previous talk
00:01:17.840 uh DAV did like d versus event machine but it was actually rabit mq uh this and
00:01:23.520 she said it's a bit misleading but I was even more misleading because even though we said R is a follower this is the only
00:01:29.720 time time the world rails comes and we didn't even say this one like you know we are kind of shy it's actually all uh
00:01:37.040 you have to blame to mats because in the forward of this book he said like you know R is a follower they just follow D
00:01:43.439 Ruby so uh yeah just BL M
00:01:48.799 okay and so here there's masi I call Se
00:01:54.920 and he's known for Ruby com and also so the also of D Ruby
00:02:00.439 which is a talk main talk talk topic about this talk and also probably less
00:02:05.640 known but there's a one called vinda which is a
00:02:21.160 yes uh so rinda is a a distributed tle space uh which is awesome but we don't
00:02:27.480 go through detail today and also more probably more people knows about
00:02:33.319 actually the Erb and he is actually the also of Erb and also the Le even less
00:02:38.920 known fact is he's a Pokemon master and he had a 2010 uh toi prefecture local champion
00:02:47.840 and he's not even in a Senior League because Senior League in Pokemon is means like 15 to 18 so he's in a master
00:02:54.120 League champion be afraid and so
00:03:02.760 okay so uh during day job he works at a company who makes a medical system and
00:03:09.000 he's actually a ruby developer and this is one of the example of what he his
00:03:14.280 software is and it's like highly embedded and also send like real time uh
00:03:20.480 patient information and it's lots of network programing involved and also
00:03:25.519 lots of the gii programming is involved so uh when I talked to oops Yeah I
00:03:32.560 talked about the kind of latest hotness about like you know no J evented and then when IAL that to Sean he said well
00:03:40.120 I've been doing that for 20 years using C so that's how he's master and also
00:03:45.200 he's kind of big deal in Japan and so that because he's been talking about uh
00:03:52.120 he's a regular uh speaker in the Ruby kagi since 2006 that's like 2006 is when
00:03:57.760 rubby kagi started so he's I think except Matt probably one one of a few people who just keeps talking about D Ru
00:04:04.640 and the Erb for last four or five years and yeah so this is kind of history of
00:04:11.400 sexan and so the blue is kind of I call BD before the rby and orange is kind of
00:04:18.199 after d Ruby so ad and the book was published in 2005 but it took about five
00:04:24.520 six years to get translated because there's no one else to translate until I came in 2010 but
00:04:30.280 because that time like he had a lots of things to talk about so we did a lots of uh brainstorming and how to introduce A
00:04:37.039 New Concept so it's actually very very new book so and actually I think yeah
00:04:43.240 there's a yeah okay and uh so before we start we'd like to thank you to Ruby
00:04:49.840 noai and also new bamboo for both sponsoring our flight and accommodation so thank you to Ru
00:05:01.520 okay so today we're going to talk about three things uh what is D Ruby uh so
00:05:07.400 who's ever used D before okay 30 40% uh who's in the last
00:05:13.360 session of DAV session okay and so who's has used r d Ruby before but switch to
00:05:21.160 event machine or CID okay there's no one oh amazed okay
00:05:27.080 so who has the original D Ruby Japanese book oh wow it's very popular and do you
00:05:34.840 have English book as well good oh yeah you reviewed yeah uh so yeah because there's a lots of content so you know
00:05:41.880 you should buy and oh yeah there's a 40% off coupon is rubby 2012 so you know now
00:05:47.479 it's a chance limited chance to buy the book okay anyway so first of all we're going to even though like some people
00:05:53.000 might already know D Ru I I'll explain what what D Ru is all about and after
00:05:58.600 that uh I'll pass the mic to Sean so like he will talk about kind of background of
00:06:03.960 like the ways to go to start designing about the then he's going to talk about
00:06:10.039 the all the designing concept and this is where he's going to introduce some of the Met programming concept and after if
00:06:16.120 we have a time left we'll do be q& day uh yeah okay so now
00:06:23.160 seon oh no that's me sorry it's still me yeah so why is the Ruby uh this DB
00:06:30.400 stands for U distributed object system and uh so what that means is when there
00:06:36.360 are multiple processes uh one process can invoke method in different processes
00:06:42.080 and it's not only that uh you can actually get the remote object and then you can pass the remote object as a like
00:06:50.039 argument of to send invoke Messa or you can return the remote object as a return
00:06:55.120 value and more importantly it's like 100% written in Ruby
00:07:00.199 so there's no C extension or anything and uh also it's part of the Ruby
00:07:05.919 standard Library so probably like 100% of you if you're a ruby developer and
00:07:11.319 you have Ruby installed you actually do have the Ruby so today we'll talk go through some of the source code and if
00:07:17.919 you you are interested please feel free to open the you know source code and then just examine by yourself and uh
00:07:25.479 this is a demo so there's a two IB sessions I'll call top one as a a
00:07:30.960 terminal one and the bottom one as a terminal two and uh I don't know how to
00:07:37.039 stop this video oh okay I cannot stop this video
00:07:43.240 so it says like uh it passes two argument one is the URI and the second
00:07:48.560 is the object you want to expose to the DB and in this case five DB and you
00:07:53.840 expose hash H if you do drb front you see the hash and if you go to the bottom
00:07:59.560 one it's called Uh Terminal Two you also wrate start as a star service but you don't at this moment you don't put your
00:08:06.240 own URI and when you want to connect to terminal one uh you do a drb object new
00:08:13.240 with URI and you pass the UR of the terminal one and you can see that that KVs variable actually has a hash which
00:08:21.240 is exposed through terminal one and if you put the greeting hello worldall you
00:08:26.639 can actually see from uh you know even though you put in teral two you can put you can see in terminal one so this is a
00:08:32.839 very very basic of D Ruby and demo two so then what happens if from Terminal 2
00:08:40.919 let's send like standard output of the terminal two they it kind of sends IO
00:08:47.440 object huh okay interesting then let's go see terminal
00:08:53.959 one yeah and if you see yeah you can actually oh okay you can send I object
00:08:59.920 but you actually if you see very carefully like if you see DB class meod it's actually replaced by the one called
00:09:06.120 DB object so it's kind of reference object it's not it really didn't pass
00:09:11.800 the IE object of terminal two so when from terminal one if you do puts it's actually referencing back to the
00:09:18.519 terminal two and they're kind of grabbing the stand out out of the terminal two and doing hello again
00:09:27.279 okay so yeah the T away from this one is so I keep saying like you know this is
00:09:32.560 server and client but this example actually shows that both servers at one point one is Ser ter one is Ser but at
00:09:39.360 the same time teral two is server okay that's very
00:09:47.519 important okay and the third one is a distributed Q uh it sounds like you know
00:09:53.880 complex but all you do is like in Ruby there's a a class called Q which is is a bit like AR Ray which has like a push
00:10:00.240 and pop method so if you put the Q object into the the the
00:10:05.920 hash and wait a
00:10:11.480 second yeah still moving and if you take the Q on Terminal
00:10:16.959 Two and and if you try to push the value to
00:10:23.040 the Q uh from terminal two you can you should be able to pop it from terminal
00:10:29.160 one that almost looks like a array but however what happen if you try to pop
00:10:35.320 from terminal one when there's nothing in a CU then it actually Waits until something gets put so let's see at the
00:10:43.839 teral two if you do push 20 Z that's the moment we it kind of releases and it
00:10:48.920 shows the result so let's try it again it it holds it
00:10:57.160 waits then it pushes
00:11:06.440 so one thing important is even the distributive process what you mean like
00:11:11.639 you have multiple processes and they talking to each other as a Ser of each process actually doing the MTI threading
00:11:19.320 and interesting thing is if this is single mono thread if you do the pop in
00:11:25.120 terminal one and the waiting you shouldn't be able to receive the push from time two because there's two two
00:11:32.279 going on but because of multi threading uh e walks is this right explanation
00:11:37.880 good thank you I got approval from another master and uh for the Practical example
00:11:45.959 uh dve already talked in the previous session but also another example is a uh
00:11:52.160 is he there okay yeah he Morin and he works at a company called cooka in Japan
00:11:57.720 it's one of the biggest uh uh res sharan side and they had a huge code base and
00:12:03.920 to run the aspect it takes ages so what they do is like they use uh D Ruby and
00:12:09.440 the rinda which is a distributed tople space to scale deal the
00:12:14.519 aspect is it what you do yeah okay so it's correct so yeah and there's a if
00:12:20.279 you go to slide deck there's a slide of his talk he did a supp ruby KAG but Mak
00:12:25.360 is right there taking photo of us so you can feel cre scheme okay and another
00:12:31.959 example is actually DAV already explained that you know kind of starting point and the prototyping so you start
00:12:37.480 from DB because DB is pretty much everything to expose things so you can
00:12:43.040 put like any day structure you can put like array or Q or uh set or like tree
00:12:50.399 or RB tree or any like you can use as a graph datase or document database or key Value Store pretty much anything and
00:12:56.800 once you figure out this is a exactly the domain problem you want then you can
00:13:01.959 move on to a r solution just like David did for the moving to RQ even though
00:13:07.240 some of the things I could say you can use it with rinda anyway and also this is also he did a blank he's a former C
00:13:15.320 of the Twitter he also went to the same way he eventually released a his own
00:13:20.680 messaging Quee called Stalin but before the he I had that he used a d Ruby so I kind of stoked him and said are you sure
00:13:27.399 you really use D Ruby and this is a response says yeah I actually use it okay so that's what the ru is and now
00:13:35.120 next I'll hand over to master seon and the left is actually me and the right is
00:13:42.000 that's my drawing by the way
00:13:48.240 hi Mar meta program me using this
00:13:55.320 script I read it
00:14:01.720 I've I've been professionally programming for almost 20
00:14:07.199 years at first I was used to all style un
00:14:12.639 programming the examples of IPC sorry it's a style to connect small
00:14:21.000 processes by IPC interpr communication the examples
00:14:27.040 of IPC are Fork and pipe and also a unique system system five had an API for
00:14:35.199 message cues shared memories and
00:14:40.360 semapo then I met the web in the mid90s and Lear CGI
00:14:47.120 programming at that time it was common practice to use CGI for web
00:14:52.959 programming it was found to bring the Simplicity of HTTP into Network
00:14:58.600 programming I reload some of network programming in
00:15:07.399 CGI I was surprised that I was able to use a higher level language like par
00:15:14.320 which is not surprising anymore
00:15:20.199 bd1 then I'm at Ruby that was end of 19s I met Ruby and
00:15:27.120 web server WR in Ruby it's called HTTP server written by Shin
00:15:34.759 Hara har server is a lot older than web
00:15:39.880 it it was a very small server and H2 TW I used to put e server on
00:15:52.480 it I was initially extending features on the web server but that's a eventually
00:16:00.240 changed instead I started embeding in web server into
00:16:07.680 applications this was similar to IPC style programming where each application had
00:16:14.240 an HTTP endpoint there's also another change to
00:16:22.000 my programming style I start writing everything in Ruby with hard server as a
00:16:29.120 than using various language and connecting them bya
00:16:38.319 CGI then I realized that my programming style is not so cool
00:16:46.199 anymore this is because I had to translate rub classes
00:16:51.440 and methods into the web for example htb listic the way you exchange
00:17:00.399 objects the server Cent model restricts you to One Way
00:17:07.640 communication I cannot get remote objects to call each other like with
00:17:13.319 Ruby objects in same process you also spend time trying to
00:17:21.520 come up with the c URS but that's not
00:17:26.919 the core of your application I'm not happy with this
00:17:35.679 approach it's not so reating to communicate by the web even when the
00:17:42.200 same R processes and talking to each
00:17:47.360 other isn't using web to generalize to when processes when to talk to each
00:17:53.520 other
00:18:01.000 this was about that time I was getting used to programming in Ruby so I want to
00:18:07.520 solve that this frustration by myself I want to write a very langage
00:18:14.400 Centric solution I decided to write distribute
00:18:20.840 objects that act like Luby I don't want to declare interfaces
00:18:27.600 no specify cations in arguments nor in
00:18:33.520 values meth method implication in Ruby looks like message passing rather than
00:18:39.640 function calls maybe I can override the message passing mechanis and extend
00:18:46.720 without applications noticing
00:18:54.000 it what we need is a proy object that acts exactly Ruby exact like Ruby and
00:19:00.799 ser that handles the pro she the gft of this system which is deal
00:19:09.159 with is to create fake Ruby
00:19:17.000 objects next I will introduce some of the techniques I use to implement
00:19:26.360 the the first ingredient is Method Mission method mission is invoked if an
00:19:34.400 object receives unknown method calls you can use method missing to hook
00:19:40.799 in when someone calls remote objects bya proxy let's see how it
00:19:51.919 works this is the first Implement implementation of De from back in
00:19:57.640 1999 drb object is a proxy object me Mission catch message and its
00:20:06.400 arguments then transfers them to the remot object to
00:20:14.679 evaluate next is maral m is a liity to cize to
00:20:23.440 objects this example shows that drb protocol object dumps arguments and
00:20:29.480 returns values using dump
00:20:34.960 method however that is a pro there is a problem with this
00:20:40.480 approach R can share F nor St objects so
00:20:46.120 it raises exceptions let me explain how there be
00:20:51.440 solved this problem if R cannot sh the an object it
00:20:59.080 converts the object into a proy object then shiz the proy instead of
00:21:06.919 sending the object itself D send the reference of the
00:21:12.360 object you want to send this is how you implement the
00:21:20.640 logic when Master D first then they call the object with drb
00:21:27.120 object new then dumps it again isn't it
00:21:42.080 send I will talk the server I talk about the Ser
00:21:48.640 implementation a cent process mes the object ID message and its arguments to a
00:21:55.279 server once a server receives this data it has to transfer to appropriate
00:22:01.400 objects to do so you need a way to look up objects and transfer these
00:22:10.880 methods this is this is where I need to left comes in I just left convert differ
00:22:18.440 ID into their Associated
00:22:23.919 objects I guess you really use this method
00:22:29.760 then send method then the send method sends a message to an object once the
00:22:37.200 object is found then the server sends a message requested from a client to the
00:22:46.440 object I also need a few other techniques to make de with behave Ruby I
00:22:53.120 behave like Ruby how do you explain
00:23:07.000 so so far easy right yeah you guys kept up to speed yeah I hope you guys can
00:23:14.600 keep it up for the next one as well because I really struggled last night I this slide we just added last night and
00:23:21.559 then I spent three hour trying to understand what this really means and in the end I was half crying like I don't
00:23:28.159 understand he just kept trying to explain to me so but I'll try my best and if it doesn't
00:23:33.600 make sense there's a Eric or and there's also mats who can help me explaining so
00:23:39.279 uh yeah there's a one called so there's three things uh so how do you recover
00:23:44.799 unknown objects and the second is multi reading a bit more detail and the third
00:23:49.880 thing is hry mes with block so what do you mean by unknown objects uh let me
00:23:55.919 Demo again so the same terminal know top is one bottom is two in bottom two you
00:24:01.400 just define a class called who which has a method called bar so if you do who do bar you just says bar that's easy but so
00:24:08.279 what if you try to send this object to terminal one which doesn't know anything about F class is it even possible so
00:24:15.200 let's see do KBS F and it has F object and in the
00:24:21.200 top it's going to happen and it says now it says it's not called DB unknown
00:24:27.360 object and then if you look at it but it still have the name called who and it has a string in the buffer if you uh
00:24:34.840 excute the method called bar it that it says undefined method because it's like an unknown object which it's not bar
00:24:41.679 okay so what if I redefine can define a food class on terminal one and do it
00:24:47.279 again still it doesn't understand but DB has a method called reload which kind of
00:24:52.919 reload it and regenerate the F object so now if you put that reload one into the
00:24:59.480 object you can see the bar easy right I think so what has just happened so who
00:25:07.120 did replace who is drb unknown okay let me try to explain okay so uh yeah so
00:25:15.559 when in termina 2 try to uh put the object into the hash it the martial dump
00:25:23.679 right you Lear that right then whenever you put it the hash is owned by terminal
00:25:30.039 one so in this situation terminal one is a server so when Terminal 2 dumps it
00:25:35.760 terminal one lows it and because it doesn't the food doesn't exist it raises error called name ER and argument eror
00:25:42.799 that time it's kind of similar to you know the you the reference one when you try to master it it you can't master it
00:25:49.440 so you replace with the reference object kind of similar thing here it does it
00:25:54.679 generates GB unknown object and what this one does is it just checks the uh
00:26:00.120 eror string and it does regular expression because there's no there isn't I think way to actually say what's
00:26:07.279 the name and message so it just passes ER message and they put into the name and they put the same thing in the
00:26:13.840 buffer okay I think this is still okay and but why if so now terminal one
00:26:20.000 Server doesn't have few object but it does have DBL and No Object so if you
00:26:26.200 time two try to call that object again what happens because that object is not in Terminal 2 it's in terminal one is
00:26:33.679 does terminal one returns this unknown object uh the answer is uh it's simple
00:26:39.640 it just returns back the buffer so every time it just returns back the calized
00:26:44.799 object so in Terminal Two when you lose it uh it just generates a free object
00:26:50.480 again okay okay silent yeah can you nose
00:26:56.039 if you understand yeah yeah all right hi yeah okay and uh so then next so when
00:27:02.840 you do the uh yeah Define the uh F object in terminal one I did the Magic
00:27:10.159 Magical methal reload so what's inside uh it's just actually martial load it's
00:27:16.080 the same pattern we we use like you know you try to load if it does it does exist it works if it doesn't rescue it and
00:27:23.720 create the new DB on so if you actually see uh try to see that you know in the
00:27:29.279 terminal one demo example if you try to inspect every time you see the DB unknown object but it actually generates
00:27:35.799 new idea yeah Dem I tried to clarify one thing but he
00:27:41.440 wasn't paying attention Okay uh so second is U MTI reading uh initially so
00:27:48.240 he he B the pattern of the MTI reading in socket programming from the
00:27:54.919 haran what he does is uh so when you D
00:28:00.919 acts as a saber if there's any incoming request uh you hold it one but if you
00:28:08.039 get other requests at the same time uh if it's single threat uh like yeah
00:28:14.480 unless it's like event Loop or anything it kind of holds if you're processing something so it spawns a new yeah it
00:28:20.120 generates a new thread and uh this is very important especially this example
00:28:26.440 so imagine this is in Terminal Two you are in the KBS which is hash and if you do KBS do each and you pass a block what
00:28:35.640 it's actually happening is when you do KBS do each the KBS hash is in terminal
00:28:41.519 one so you actually invoking the method of each in terminal one but as soon as
00:28:46.919 you try to evaluate block that wasn't dumpable so it has a reference so it
00:28:52.080 goes back to Terminal Two and it gets evaluated to the place where you you ask
00:28:58.600 a request so let me explain another example if you. KVs is a like large yeah
00:29:06.159 big hash or something and if you do the each so every time you do the each it it
00:29:11.760 goes to the terminal one then it goes back evaluate then it goes and it goes
00:29:18.519 back and evaluate then if it's again single thread this this communication causes a deadlock but because you're
00:29:25.440 using amount threading that doesn't happen that's how uh DB is utilizing
00:29:30.840 multi spreading okay is it okay Eric okay yeah and so that this is how it
00:29:39.480 actually works I think you already seen the similar uh line of code in the M missing part like it's doing the object
00:29:45.679 do send but in this case you are calling block. code inside block easy right this
00:29:52.720 should work right does this work yeah raise hand yeah it's actually wrong
00:30:00.000 this sorry uh if you do this it actually raise a if it works but if you do the
00:30:06.960 break inside the each block it actually raises local
00:30:12.120 jump do does this make sense yeah
00:30:17.679 because I really struggle to explain this one but let me try my best uh so
00:30:25.000 inside you know the control flow like next or uh break if that is cold it goes
00:30:33.120 outside yeah it breaks from the current block and it's try to go back to the
00:30:39.640 environment you are in that usually works if you just do a mthod invocation
00:30:45.480 was Block in normal thing but what it's happening is you know every time you are in the each and coming back you having
00:30:53.399 in a new thread which is complete new environment so the environment where you did it is lost hence there's nowhere to
00:31:00.240 do the local jump that's why it raises oh you no wow amazing it took
00:31:06.559 three hours for me to understand what you did it in was two minutes impressive
00:31:12.200 yeah actually can I grab hands for him yeah thank you it's very good thank you
00:31:17.799 so the work on is once you understand it's quite easy all you do is that you catches it and then you break by
00:31:23.600 yourself so yeah once you understand I think yeah did you get it you know that's me crying like oh please don't
00:31:32.360 expl me to you know to anymore and he yeah I I find good so I get it I think
00:31:44.440 seon I'm loing M
00:31:50.559 script let me summarize what we have explained so far first I talked about
00:31:57.519 Theory story of my programming patterns and how drb was born then I took you through various
00:32:06.039 meta programming techniques behind the you make you make think programming
00:32:13.200 is cool met meta programming is cool but I feel like some people are using meta
00:32:19.840 programming as an end in itself as to I use met programming for deal out of
00:32:29.120 necessity but righted hard not to reveal it to the end
00:32:34.399 users however if you look carefully metaprogramming is
00:32:41.840 everywhere you may not even notice that there is
00:32:47.000 Magic but that's the most magical thing about
00:32:54.000 it I have explained everything you need to implement
00:33:00.880 theu it's your turn now now you can write your own
00:33:08.399 de a one please thank
00:33:23.200 you uh I forgot to say one thing about why you even need drb undumped do you
00:33:29.559 know why anyone so like something like rer
00:33:35.120 like distributed tle space when you try to do from client one client another
00:33:40.320 trying to exchange object uh if because it D Ruby relies on martial dump and low
00:33:46.080 for everything so if by the time R triy to lose that martial dump it rate raises
00:33:52.840 unless you have every single object client's going to ever pass past in
00:33:58.440 future this is a kind of ways to walk it around us so it walks so distri it's distributed but you can use it as like
00:34:04.720 Central repos to pass object I I think that was very important things I wanted to explain and now
00:34:11.359 questions okay there are some objects that can't be Marshal right like a proc
00:34:17.399 can't be Marshal yeah yes does d Ruby have a way of managing
00:34:24.839 those types of objects that can't be okay uh question was so Ruby cannot D martial
00:34:32.599 dump some the object and know how it works that's a demo two example so like
00:34:38.159 I standard iio you can't dump so what it's doing like it dumps raises
00:34:43.839 exception catches it and it just creates a new object which has a reference information of the iio object passed to
00:34:50.960 the server so when server This Server tried to execute it it doesn't execute
00:34:56.159 in uh but it just goes back to the client the client excuse so one of the fal
00:35:04.079 mistake yeah proxy yeah F of the uh first mistake I did was I thought yeah I
00:35:11.560 can pass proc so I can use distribute the processing to different processes so
00:35:16.800 I created those proc and I send it and uh I the I asked the remote ones to you
00:35:23.839 know evaluate to use the CPU point and it goes back what I was actually doing like proxy back and actually client was
00:35:30.400 processing everything yeah once you understand it's like kind of silly but yeah you can uh
00:35:37.359 test it perfect example if you try to do iio and if you try to the iio read a file read or something then you can see
00:35:44.160 where you ex and you know you have terminal in a different directory then you know exactly where it's executing
00:35:49.480 that's way good easy way to debug how the DBS behavior that and that's kind of
00:35:54.839 way I learned uh that it's called by reference compared to pass by value yeah
00:36:02.119 next question yes um two questions uh first uh does druby support uh multiple
00:36:10.079 topologies as opposed to single point to point or does it do like broadcast topology or maybe ring topology and also
00:36:17.200 uh what kind of security is there in D Ruby so uh first question is what kind
00:36:22.920 of distribution topology DB supports and the second one is what kind of security model
00:36:28.079 it provides
00:36:35.800 uh
00:36:42.960 no okay so fundamental principle is like some of the distributed product try to
00:36:49.000 be to solve the problem of distributed things his his main motivation is he
00:36:54.079 wants it to create the object which just behaves like ruy does Ruby have a
00:37:00.240 broadcasting no so that's why he didn't Implement okay maybe you can Implement
00:37:05.440 on top of it I think yeah ah yeah reinder chapter I think six
00:37:12.160 seven yeah seven of our de book there's a fantastic uh Library called rinda you
00:37:17.800 should definitely have a look 40% off now okay
00:37:24.359 and security model uh
00:37:41.880 so is no because Ruby doesn't has it and but uh I
00:37:48.599 think you can use there's a way to use SS over and that's a Chapter 13 of the
00:37:55.040 the book sorry I'm making up the chapter number
00:38:00.240 because I don't remember but that's in know I think second last chapter there's a one I actually I was translating but I
00:38:06.520 didn't really have understand but so hope I hope you understand my translation yeah and also t t model like
00:38:15.119 yeah you
00:38:21.960 know okay so he uses s so he's going to
00:38:40.800 now English
00:38:50.720 English he just copied exact the same way found in a d Ruby book
00:38:58.000 but there's a way to use as a Gateway using SSH so I think you must buy one
00:39:03.560 the thank you yes are you asking question oh
00:39:10.680 statement yeah there's also over SSL so in built in oh there's
00:39:16.440 if you there's also a uh you can require drb SSL and I'm not sure if there's much documentation on that but uh there are
00:39:25.079 references to it either on Google or on the Ruby talk mailing list archives from
00:39:30.119 several years ago so you should be able to find information about both SSH and SSL both in the book and um old
00:39:39.680 examples thank you Eric any other question yes
00:39:45.839 again um do you know any projects where Dr druby is used U right now I I
00:39:52.480 remember that there was a time where our spec used it I think he still uses it as
00:39:57.599 far as I remember every time I ASP it there's a one small warning says like drv is not enabled but I think if you do
00:40:04.280 you can yeah and the spoke also uses it yeah and I think God you know the
00:40:11.599 monitoring one yeah I think he he uses it I think yeah there's also a pry
00:40:17.720 remote you use pry there's a version of use over the network that
00:40:23.079 uses have a PR consult to a different I use PR and like every time I talk about
00:40:29.200 theu people say so what do you use it for and I just realized I'm using every day so I'm very pleased about
00:40:35.720 it okay uh yes some way to do discovery
00:40:40.960 of other Discovery uh so question was how do you do Discovery service the short
00:40:47.599 answer is uh that if you want to very simple way
00:40:54.440 has is actually Discovery service so one the example is like
00:40:59.800 you name service or you want to find out uh so if you have multiple nodes out
00:41:05.880 there in examples yeah so you're connecting to the URL directly which you already know
00:41:12.599 ahead of time yeah is there a way to discover your
00:41:21.560 other r r finger ring finger and you made one as well wasn't it ring ring
00:41:28.520 yeah you wraps it okay so yeah so yeah uh there's a there's a one called ring
00:41:34.720 finger and also I think Eric had a wrapper because it's harder to use I
00:41:41.160 don't know makes it more convenient to use yeah so that's the one yes any any
00:41:48.599 question yes there's also um spe example of using Bon for discovering
00:41:55.680 Ruby so you can use Bon is it a message am or something Bon is like messaging
00:42:02.440 stuff Bon is like DNS
00:42:08.800 Services okay anything else good okay thank you
Explore all talks recorded at RubyConf 2012
+46