Jupyter - IRuby Notebook

nacyot

nacyot

148919?v=3&s=460.png

Smartstudy

bLligMG.png

REPL of Ruby

  • 루비 내장 REPL - irb
  • PRY

PRY

qMuvBjd.png

IRuby Notebook(sciruby/iruby)

XdRZBBQ.png

Demo 1

REPL

Read–eval–print loop

Lisp

IRuby Notebook

2012년 3월 25일~

IPython

2001년부터 만들어진 Python REPL의 확장

IPython 0.0.1

https://gist.github.com/fperez/1579699 XDYv7v7.png

Python의 REPL 구현

  • 기본 REPL
    • python
  • 확장 REPL
    • ipython
    • bpython

왜 Python REPL의 확장을 만들었을까?

"I started using Python in 2001 and liked the language, but its interactive prompt felt like a crippled toy compared to the systems mentioned(maple, mathematica, etc) above or to a Unix shell."

루비에서의 pry

fuyEC08.png

IPython 0.12

"The major new feature with this release is the IPython Notebook, an interactive Python interface running in the browser. Download it now, or read more about what’s new."

IPython Notebook(2011~)

notebook_specgram.png

IPython 0.11

IPython 0.11 - qtconsole

Rich GUI IPython client

msxxc1P.png

IPython 0.11 - ZeroMQ

  • ZeroMQ 기반 메시지 시스템 도입
  • 성능 문제 해결 및 qtconsole 백엔드
  • ipython notebook

기존의 REPL

  • 해당하는 실행기 언어로 구현
    • lisp -> lisp
    • irb -> ruby
    • python -> python
  • 클라이언트(셸)와 백엔드(실행기)의 강한 결합
    • 분리하기 어려움
    • REPL이 가지는 근본적인 제약

ZeroMQ가 도입된 이유 - 성능

"ZeroMQ provides us with much tighter control over memory, higher performance, and its communications are impervious to the Python Global Interpreter Lock because they take place in a system-level C++ thread."

ZeroMQ 도입에 주목해야 하는 이유

a23rZms.png

ZeroMQ 이전

단일 프로그램

jaCwVre.png

ZeroMQ 이후

클라이언트와 백엔드의 약한 결합

6HV1Vq4.png

다양한 클라이언트 지원

  • Notebook(client) - IPython Server
    • qtconsole
    • IPython Notebook
    • IPython
    • BIPython

다양한 클라이언트 지원(2)

hOluhlk.png

Message Protocol

  • Messaging in IPython
    • 0.11에서 공개
    • 자체 버전을 가지고 있으며 현재 5.0
  • ZeroMQ 기반

실행기(커널)의 분리

  • Message Protocol에 따르는 Kernel 개념 도입
  • Python 실행기가 Python Kernel로 분리됨

IRuby의 정의

IRuby = Interactive Ruby?

IRuby = IPython Kernel for Ruby

x794HK9.png

IPython은 언어에 비종속적인 REPL

  • 커널이 분리되면서 다양한 커널이 개발됨
  • 기존의 도구/생태계를 그대로 이용 가능

Ipython Kernels

  • IPython kernels for other languages
    • Julia, Haskell, FSharp, Ruby, Go
    • Scala, Mathics, Aldor, Calico, Erlang
    • Lua, R, OCaml, Forth, Perl, Perl6
    • Octave, Scilab, MathLab, Bash, CSahrp
    • Clojure, Hy, Redis, Javascript, Calysto

IPython Kerenl for Elixir

Google Summer Code 2015 link

g7ugo0j.png

IPython 3.0 = Jupyter

  • Project Jupyter
  • IPython이 더 이상 Python만을 위한 도구가 아님을 인정
    • 파이썬에 관련된 프로젝트 -> IPython
    • 다언어 지원을 위한 프로젝트 -> Jupyter
      • Jupyter Protocol
      • Jupyter Notebook(HTML + Javascript 파트 분리)

Jupiter

갈릴레오 갈릴레이 - 오래된 훌륭한 시각화 사례 link

galileo_notebook.gif

Jupyter = Julia + Python + R

Jupyter = Julia + Python + R

omg_wtf_cat.jpg

Jupyter 이전 - 타언어 커널 사용법

  • IPython은 커널에 의존적으로 실행
  • $ ipython notebook --kernel <language>

Jupyter 이후 - Kernelspec

특정 커널에 비의존적으로 실행

설정 디렉터리 구조

$ tree -d -L 1 ~/.ipython
~/.ipython
├── db
├── extensions
├── kernels         # <- 여기
├── log
├── nbextensions
├── pid
├── profile_default
├── security
├── startup
└── static

타언어 커널 사용 -> 다언어 커널 사용

IRuby, IBash 설치 이후

$ tree -d -L 1 ~/.ipython/kernels
~/.ipython/kernels
├── ruby
└── bash

Jupyter Interface

하나의 Jupyter Instance에서 다언어 커널 실행가능

9Av7MxP.png

Demo 2

  • Ruby
  • Haskell
  • Bash

IPython Notebook

  • IPython 0.11~ (2011년~)

What is the big deal about IPython Notebooks?

웹 애플리케이션

  • 범용적인 유저 인터페이스
  • 비선형적 코드 실행
  • CodeMirror 에디터
  • Javascript 환경

범용적인 유저 인터페이스

  • 웹에서 가능한 모든 것
    • HTML, CSS, Image, Canvas, SVG, …
DsFq0kl.png

비선형적 코드 실행 (1)

선형적인 실행 - REPL의 본질적인 한계

7XwpCau.png

비선형적 코드 실행 (2)

코드는 셀 단위로 편집하고, 실행되고, 재실행

wlT9IjM.png

CodeMirror 에디터

웹 코드 에디터의 표준

P4q3j5H.png

Javascript 환경

Demo 3

여기까지는 프로그래밍 이야기

여기부터는 Notebook 이야기

왜 Jupyter에 주목해야 하는가?

REPL

  • 소모성 프로그래밍 환경
  • 보통 짧은 코드 테스트용

REPL의 한계를 넘어서

  • 기록을 위한 프로그래밍 환경
  • 다양한 표현 지원
  • 셀 단위의 코드 편집 지원

연습과 기록

"Examples are reusable ideas in the form of customizable code snippets; examples can serve as an alternative to fixed, monolithic typologies; examples are a shared extension of memory."

Demo 4

코드와 글 - 본질적인 문제

코드

IPython code 중 일부 - BSD License

82CI9An.png

Discourse on Floating Bodies, by Galileo Galilei

l93fvIP.png

코드와 글 ≒ 물과 기름

  • 각자 고유한 맥락을 가짐
  • 전혀 다른 방식으로 쓰여짐
    • 사고 방식
  • 도구로 처리할 수 있는 부분이 다름
    • 문법 분석과 맞춤법/오타
    • Syntax 하이라이팅
  • 80자 제한과 문단 개념

글 안에 포함된 "죽어있는" 코드

책에 실린 코드

SCue2pU.png

코드와 글의 고유한 맥락에 대한 고민들

  • Donal E. Knuth - Literate Programming
  • Alan Kay - Active Essays
  • Fernando Perez - Data-driven Journalism

Literate Programming(문학적 프로그래밍)

"Let us change our traditional attitude to the construction of programs: Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do."

같은 평면 위에 올려진 코드와 문서

CWeb (1)

vBG44d1.png

CWeb (2)

구조적 문서화를 위한 CWEB 시스템

ngMttQq.png

"살아있는" 코드 안에 포함된 글

Sphinx (1)

ansible-modules-core/cloud/docker/docker.py

c4HXJvh.png

Sphinx (2)

Ansible Documentation - docker

9qA4AgH.png

글 안에 포함된 "살아있는" 코드

knitr (1)

from future import dream - knitr를 이용한 워드프래스 포스팅하기

bKtUjkQ.png

knitr (2)

from future import dream - knitr를 이용한 워드프래스 포스팅하기

UQxQvZn.png

d3 도서(o'reilly)

O'Reilly Atlas + jsbin

TaVzgub.png

Active Essays

"An “Active Essay” is a new kind of literacy, combining a written essay, live simulations, and the programs that make them work in order to provide a deep explanation of a dynamic system. The reader works directly with multiple ways of representing the concepts under discussion. By “playing with” the simulations and code, the reader gets some hands-on experience with the topic.

Steven Wittens' Presentation

Setosa blog

Jiongster

Awesome!

  • 표현 도구로서의 자바스크립트
  • 하지만, 하나의 웹사이트라고 봐야…
  • 저작 환경 = 그냥 프로그래밍

Jupyter

"코드"와 "연구"의 만남

현존하는 가장 범용적이고 편리한 Scientific Research 환경.

"글"과 "코드"의 고유한 맥락

현존하는 가장 범용적이고 편리한 Active Essays 저작 환경.

Scientific Research

d0o5qcp.png

Data-driven Journalism

"Our job with IPython is to think deeply about questions regarding the intersection of computing, data and science, but it's clear to me at this point that we can contribute in contexts beyond pure scientific research. I hope we'll be able to provide folks who have a direct intersection with the public, such as journalists, with tools that help a more informed and productive debate."

Reproducible Notebook

  • 코드를 실행해보는 것에 그치지 않음
  • 저장하고, 게시하고, 공유하도록 도와줌
    • ipython 환경이 있다면 실행해보는 것도 가능
  • HTML 등 다른 포맷으로 출력 기능 제공
  • nbviewer
    • ipynb 뷰어 서버

IPython Notebook으로 블로그하기

사례

루비의 꽃, 열거자 Enumerable 모듈 루비(Ruby) 테스트 프레임워크 RSpec 2.14 매쳐

mYNDVjT.png

.ipynb 빌드

blog.nacyot.com-source/helper/markdown_helper.rb

def render_ipynb(filename)
  cmd = "ipython nbconvert --to html --template basic /presentations/source/iruby/#{filename}.ipynb --output /presentations/source/iruby/#{filename}"
  system(cmd)
end

Demo 5

  • 루비의 꽃, 열거자 Enumerable 모듈 실행하기

감사합니다 :)

@nacyo_t