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