Jupyter와 Ruby 커널의 통신을 들여다 보았습니다.
소개
안녕하세요.
Jupyter와 IRuby 커널이 어떤 통신을하고 있는지 관찰하고 싶다고 생각한 적이 없습니까?
여기에서는 Ruby 커널과 Jupyter가 어떤 통신을 하고 있는지 간단한 방법으로 관찰하고 싶습니다.
정책은 다음과 같습니다.
방법
Flammarion 의 윈도우를 시작한다.
터미널의 표준 출력에서도 괜찮습니다만, 나중에 응용이 있을 것 같기 때문에 Flammarion를 사용합니다.
Flammarion 소개
Flammarion을 아는 사람은 거의 없다고 생각하므로 설명이 필요합니다. Flammarion은 electron과 Chrome을 사용하여 간편하게 GUI를 만들 수 있는 뛰어난 도구입니다. Ruby의 부담 GUI 툴이라고 하면 Shoes를 떠올리는 사람이 있을지도 모릅니다만, Flammarion는 정보를 자꾸자꾸 표시해 가는 패널과 같은 사용 방법이 향하고 있습니다.
사용법은 이런 느낌입니다.
require 'flammarion'
# Flammarionを立ち上げる
f = Flammarion::Engraving.new
f.puts "hello world!"
위를 pry나 irb로 실행하면 아래와 같은 창이 표시된다고 생각합니다.
그리고는,
f.puts "hoge"
계속하면, 정보를 순차적으로 표시할 수 있는 간이 표시판으로서 사용할 수 있습니다.물론, Flammarion에는 여러가지 기능이 붙어 있어, 보통의 GUI 툴 킷과 같이, 버튼을 표시하거나,
f.button("Click Here!!!") {f.puts "You clicked the button!"}
쉽게 본격적인 그래프를 표시하거나
f.plot(5.times.map{|t| {y:100.times.map{rand * t}}})
순식간에 마쓰에의 지도를 표시하거나와 마법 같은 기능이 준비되어 있습니다.
f.map("松江")
Flammarion에 탑재되어 있는 메소드를 표 형식으로 표시해 봅니다.
f.table (f.methods - Object.methods).each_slice(4).to_a
이것은 좋은 의미에서 상당히 미친 도구가 아닐까요?
dRuby 서버 시작
dRuby 역시 옛날부터 마술감이 넘치는 툴입니다만, 나는 그렇게 스킬이 높지 않기 때문에 이번 사용하는 것은 그 기능의 표면뿐입니다. 여기에서는 Flammarion 창을 시작하고 dRuby의 프론트 객체로 설정합니다. 이제 IRuby 커널에서 Flammarion에 쓸 수 있습니다.
require 'drb/drb'
require 'flammarion'
# Flammarionを立ち上げる
f = Flammarion::Engraving.new
# サーバを起動する
DRb.start_service("druby://localhost:8787", f, :safe_level => 1)
# DRb のスレッドが終了するのを待つ
DRb.thread.join
IRuby에 세공하기
여기에서는 Ruby의 오픈 클래스를 사용하여 Jupyter 위에서 IRuby에 세공을 합니다.
ai
는 awesome_print의 inspect
입니다.require 'drb/drb'
require 'colorize'
require 'awesome_print'
module Monkey
@@f = DRbObject.new_with_uri("druby://localhost:8787")
def send(sock, data)
@@f.puts sock.ai.colorize(:blue)
@@f.puts data.ai.colorize(:green)
super(sock, data)
end
def recv(sock)
msg = super
@@f.puts msg.ai.colorize(:yellow)
msg
end
end
IRuby::SessionAdapter::FfirzmqAdapter.prepend Monkey
prepend를 사용하여 FfirzmqAdapter 클래스 앞에 원숭이 모듈을 배치했습니다. 이렇게하면 ffi-rzmq 어댑터를 통한 통신이 원숭이 메서드를 통해 Flammarion에 표시됩니다. 다른 어댑터를 사용하는 경우도 대체로 같은 느낌으로 할 수 있다고 생각합니다.
이런 식으로 Jupyter에서 행해지고 있는 통신이 Flammarion의 윈도우에 표시되면 성공입니다.
덧붙여 여기에서는 IRuby와 Jupyter의 통신에 직접 변경을 가하고 있으므로, typ 하거나 하면 Ruby 커널이 행방불명이 되어, 2번과 통신을 할 수 없게 됩니다. 그 경우는 어쩔 수 없기 때문에 커널을 재기동합니다.
여러가지 개선 여지는 있습니다만, 첫회이므로, 이런 느낌이라고 생각합니다.
이 기사는 이상입니다.
Reference
이 문제에 관하여(Jupyter와 Ruby 커널의 통신을 들여다 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kojix2/items/e31286fe508f7daacb8e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)