Ruby Conference 2017
Presentation Outline
• About Ruby
* Good Change, Bad Change (Matz)
* Gemification for Ruby 2.5 / 3.0 (Shibata Hiroshi)
• Git Driven Refactoring
• Augmenting Human decision making with data science
• What does GIL(Global Interpreter Lock) really guarantee you?
Good Change, Bad Change (Matz)
Good Change, Bad Change (Matz)
Java 9!
Good Change, Bad Change (Matz)
Good Change, Bad Change (Matz)
Matz의 Ruby 언어에 대한 철학
Enjoyable programming,
computers work more!
Good Change, Bad Change (Matz)
언어를 설계할 때 고려사항
1. Stable
2. Compatibility
* PHP6 released, but was canceled.
3. Migration cost
Good Change, Bad Change (Matz)
Good Change, Bad Change (Matz)
Good changes?
* Performance, Productivity
* Excitement
Good Change, Bad Change (Matz)
Good changes?
* JIT(Just in time) Compiler
Ref: http://aroundck.tistory.com/1949
Good Change, Bad Change (Matz)
Good changes?
* Stack IR -> Register IR
Good Change, Bad Change (Matz)
• Ruby code (a = b+c)
* Stack based IR
b
c
Get local_OP__WC___0 <b index>
Get local_OP__WC___0 <c index>
Set local_OP__WC___0 <a index>
Opt_plus
Ref: https://markfaction.wordpress.com/2012/07/15/stack-based-vs-register-based-virtual-machine-architecture-and-the-dalvik-vm/
* operands are addressed implicitly by the stack pointer
Good Change, Bad Change (Matz)
• Ruby code (a = b+c)
* Register based IR
plus <b index>, <c index>, <a index>
* the operands for the instructions are explicitly addressed in the instruction, unlike the stack based model where we had a stack pointer
to point to the operand
In benchmark mode, 2.8 faster than Ruby 2.0!
Good Change, Bad Change (Matz)
• Ruby code (a = b+c)
* Register based IR
plus <b index>, <c index>, <a index>
* the operands for the instructions are explicitly addressed in the instruction, unlike the stack based model where we had a stack pointer
to point to the operand
In benchmark mode, 2.8 faster than Ruby 2.0!
Good Change, Bad Change (Matz)
Frozen String Literals by default
▪ String이 기본적으로 immutable이 됨
▪ Pros: 당연히 frozen이 되니까 같은 string을 참조. faster, les
▪ Cons: incompatible이 발생할 수 있음, break the code!
ref: https://wyeworks.com/blog/2015/12/1/immutable-strings-in-ruby-2-dot-3
Good Change, Bad Change (Matz)
Tail call optimization
ref: http://homoefficio.github.io/2015/07/27/재귀-반복-Tail-Recursion/
Gemification for Ruby 2.5 / 3.0
Standard libarary?
• FileUtils
• WEBrick
• TempFile
• Openssl
• Etc
Gemification for Ruby 2.5 / 3.0
Standard libarary?
• FileUtils
• WEBrick
• TempFile
• Openssl
• Etc
Gemification for Ruby 2.5 / 3.0
Gemification?
• Standard library -> Gemfile
• Ruby version과 관계없이 라이브러리를 독립적으로 업데이트 할 수 있다는 장
Gemification for Ruby 2.5 / 3.0
Gemification
• Pros
- Bugfix, new features 추가하는데 Ruby core와 별개로 진행이 가능
- Ruby를 업그레이드 안해도 되니까 stable하게 사용할 수 있음
• Cons
- Gem으로 분리되어지기 때문에 Maintainer들은 ruby core repository, github 이중으로 관리해야
한다는 어려움이 있음
- 다양한 라이브러리들이 공통적으로 참조하고 있는 라이브러리가 있고 그런데 그것의 version
conflict가 있으면 gemification 의 어려움이 있음
GIT DRIVEN REFACTORING
Refactoring?

코드의 동작을 변경하지 않고 구조를 변경하는 것
GIT DRIVEN REFACTORING
Git Driven Refactoring

특정 Refactoring technique를 다루는 것이 아니라,
Git이 가지고 있는 context를 통해 코드 구조 디자인을 변경해보자
GIT DRIVEN REFACTORING

SOLID principle
• Single responsibility principle
◦ 클래스는 반드시 하나의 책임만 가져야 한다. 또는 클래스는 반드시 변경해야할 이유가 하나만 있어야 한다.
• Open/Closed Principle
◦ 클래스는 확장에 열려있어야 하고, 수정에 대해서는 닫혀있어야 한다.
• Liskov Substitution Principle
◦ 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
• Interface Segregation Principle
◦ 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
• Dependecy Inversion Principle
◦ 프로그래머는 추상화에 의존해야하고, 구체화에 의존하면 안된다.
참 쉽죠?
GIT DRIVEN REFACTORING
GIT DRIVEN REFACTORING
GIT DRIVEN REFACTORING
GIT DRIVEN REFACTORING

Single responsibility principle
* 클래스는 반드시 변경해야할 이유가 하나만 있어야 한다.
내 클래스가 변경될 이유는 여러가진데…?
GIT DRIVEN REFACTORING

Git log, engine.rb
내 클래스가 변경될 이유는 여러가진데…?
GIT DRIVEN REFACTORING
GIT DRIVEN REFACTORING
GIT DRIVEN REFACTORING
GIT DRIVEN REFACTORING
GIT DRIVEN REFACTORING
GIT DRIVEN REFACTORING
It seems like there have been a lot of reasons this
class changed, mainly adding some new functionality.
GIT DRIVEN REFACTORING
Power output of engine Remote
you can group the commits into two logical groups.
you can see that the class has two reasons for change.
A change in the power output and
a change in the remote start functionality.
GIT DRIVEN REFACTORING
Power output of engine Remote
GIT DRIVEN REFACTORING
GIT DRIVEN REFACTORING
Open/Closed Principle
그런데, 클래스를 수정하지 않고 어떻게 무언가를 확장시키지.
* 클래스는 확장에 열려있어야 하고, 수정에 대해서는 닫혀있어야 한다.
change this
13:17
thing without actually changing it.
GIT DRIVEN REFACTORING
Open/Closed Principle
GIT DRIVEN REFACTORING
Open/Closed Principle
GIT DRIVEN REFACTORING
Open/Closed Principle
* 새로운 기능을 넣기 위해서 기존의 클래스의 코드를 변경해서
는 안된다.
* diffs에서 red 가 있으면 안된다.
GIT DRIVEN REFACTORING
Liskov Substitution Principle
* Subclass/Derived class 는 base/parent class를 대체할 수 있어야 한
다.
GIT DRIVEN REFACTORING
Liskov Substitution Principle
* 사실 꼼꼼하게 체크하지 않는 이상 LSP를 위반하는지 확인하기가 쉽
지 않다.
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
* 사람은 항상 일정한 결정을 하는 것이 아니다
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
* 제한된 정보
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
* Bias
스타일리스트에게도 제한된 정보, biased, inconosistnecy
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
Step 1.
* Predictive Algorithms을 통해 유저가 선호하는 옷들을 스타일리스트 제공
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
Step 2.
* Step 1에서 선택한 옷들의 조합 score를 제공
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
Step 3.
* 스타일리스트에 선택된 옷들이 고객에게 전달되고, 피드백을 받는다.
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
Step 4.
* 피드백을 기반으로 스타일리스트가 train하는 과정을 거친다 (fit, style, price)
* 피드백 정보는 스타일리스트가 언제든지 접근할 수 있음
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
AUGMENTING HUMAN DECISION MAKING WITH DATA SCIENCE
• lower labor cost
• increased keep rate
• fewer mistakes from humans
• greater client satisfaction
* System 3 을 통해서 얻을 수 있는 장점

Ruby Conf2017

  • 1.
  • 2.
    Presentation Outline • AboutRuby * Good Change, Bad Change (Matz) * Gemification for Ruby 2.5 / 3.0 (Shibata Hiroshi) • Git Driven Refactoring • Augmenting Human decision making with data science • What does GIL(Global Interpreter Lock) really guarantee you?
  • 3.
    Good Change, BadChange (Matz)
  • 4.
    Good Change, BadChange (Matz) Java 9!
  • 5.
    Good Change, BadChange (Matz)
  • 6.
    Good Change, BadChange (Matz) Matz의 Ruby 언어에 대한 철학 Enjoyable programming, computers work more!
  • 7.
    Good Change, BadChange (Matz) 언어를 설계할 때 고려사항 1. Stable 2. Compatibility * PHP6 released, but was canceled. 3. Migration cost
  • 8.
    Good Change, BadChange (Matz)
  • 9.
    Good Change, BadChange (Matz) Good changes? * Performance, Productivity * Excitement
  • 10.
    Good Change, BadChange (Matz) Good changes? * JIT(Just in time) Compiler Ref: http://aroundck.tistory.com/1949
  • 11.
    Good Change, BadChange (Matz) Good changes? * Stack IR -> Register IR
  • 12.
    Good Change, BadChange (Matz) • Ruby code (a = b+c) * Stack based IR b c Get local_OP__WC___0 <b index> Get local_OP__WC___0 <c index> Set local_OP__WC___0 <a index> Opt_plus Ref: https://markfaction.wordpress.com/2012/07/15/stack-based-vs-register-based-virtual-machine-architecture-and-the-dalvik-vm/ * operands are addressed implicitly by the stack pointer
  • 13.
    Good Change, BadChange (Matz) • Ruby code (a = b+c) * Register based IR plus <b index>, <c index>, <a index> * the operands for the instructions are explicitly addressed in the instruction, unlike the stack based model where we had a stack pointer to point to the operand In benchmark mode, 2.8 faster than Ruby 2.0!
  • 14.
    Good Change, BadChange (Matz) • Ruby code (a = b+c) * Register based IR plus <b index>, <c index>, <a index> * the operands for the instructions are explicitly addressed in the instruction, unlike the stack based model where we had a stack pointer to point to the operand In benchmark mode, 2.8 faster than Ruby 2.0!
  • 15.
    Good Change, BadChange (Matz) Frozen String Literals by default ▪ String이 기본적으로 immutable이 됨 ▪ Pros: 당연히 frozen이 되니까 같은 string을 참조. faster, les ▪ Cons: incompatible이 발생할 수 있음, break the code! ref: https://wyeworks.com/blog/2015/12/1/immutable-strings-in-ruby-2-dot-3
  • 16.
    Good Change, BadChange (Matz) Tail call optimization ref: http://homoefficio.github.io/2015/07/27/재귀-반복-Tail-Recursion/
  • 17.
    Gemification for Ruby2.5 / 3.0 Standard libarary? • FileUtils • WEBrick • TempFile • Openssl • Etc
  • 18.
    Gemification for Ruby2.5 / 3.0 Standard libarary? • FileUtils • WEBrick • TempFile • Openssl • Etc
  • 19.
    Gemification for Ruby2.5 / 3.0 Gemification? • Standard library -> Gemfile • Ruby version과 관계없이 라이브러리를 독립적으로 업데이트 할 수 있다는 장
  • 20.
    Gemification for Ruby2.5 / 3.0 Gemification • Pros - Bugfix, new features 추가하는데 Ruby core와 별개로 진행이 가능 - Ruby를 업그레이드 안해도 되니까 stable하게 사용할 수 있음 • Cons - Gem으로 분리되어지기 때문에 Maintainer들은 ruby core repository, github 이중으로 관리해야 한다는 어려움이 있음 - 다양한 라이브러리들이 공통적으로 참조하고 있는 라이브러리가 있고 그런데 그것의 version conflict가 있으면 gemification 의 어려움이 있음
  • 21.
    GIT DRIVEN REFACTORING Refactoring? 코드의동작을 변경하지 않고 구조를 변경하는 것
  • 22.
    GIT DRIVEN REFACTORING GitDriven Refactoring 특정 Refactoring technique를 다루는 것이 아니라, Git이 가지고 있는 context를 통해 코드 구조 디자인을 변경해보자
  • 23.
    GIT DRIVEN REFACTORING SOLIDprinciple • Single responsibility principle ◦ 클래스는 반드시 하나의 책임만 가져야 한다. 또는 클래스는 반드시 변경해야할 이유가 하나만 있어야 한다. • Open/Closed Principle ◦ 클래스는 확장에 열려있어야 하고, 수정에 대해서는 닫혀있어야 한다. • Liskov Substitution Principle ◦ 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. • Interface Segregation Principle ◦ 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다. • Dependecy Inversion Principle ◦ 프로그래머는 추상화에 의존해야하고, 구체화에 의존하면 안된다. 참 쉽죠?
  • 24.
  • 25.
  • 26.
  • 27.
    GIT DRIVEN REFACTORING Singleresponsibility principle * 클래스는 반드시 변경해야할 이유가 하나만 있어야 한다. 내 클래스가 변경될 이유는 여러가진데…?
  • 28.
    GIT DRIVEN REFACTORING Gitlog, engine.rb 내 클래스가 변경될 이유는 여러가진데…?
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
    GIT DRIVEN REFACTORING Itseems like there have been a lot of reasons this class changed, mainly adding some new functionality.
  • 35.
    GIT DRIVEN REFACTORING Poweroutput of engine Remote you can group the commits into two logical groups. you can see that the class has two reasons for change. A change in the power output and a change in the remote start functionality.
  • 36.
    GIT DRIVEN REFACTORING Poweroutput of engine Remote
  • 37.
  • 38.
    GIT DRIVEN REFACTORING Open/ClosedPrinciple 그런데, 클래스를 수정하지 않고 어떻게 무언가를 확장시키지. * 클래스는 확장에 열려있어야 하고, 수정에 대해서는 닫혀있어야 한다. change this 13:17 thing without actually changing it.
  • 39.
  • 40.
  • 41.
    GIT DRIVEN REFACTORING Open/ClosedPrinciple * 새로운 기능을 넣기 위해서 기존의 클래스의 코드를 변경해서 는 안된다. * diffs에서 red 가 있으면 안된다.
  • 42.
    GIT DRIVEN REFACTORING LiskovSubstitution Principle * Subclass/Derived class 는 base/parent class를 대체할 수 있어야 한 다.
  • 43.
    GIT DRIVEN REFACTORING LiskovSubstitution Principle * 사실 꼼꼼하게 체크하지 않는 이상 LSP를 위반하는지 확인하기가 쉽 지 않다.
  • 44.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE
  • 45.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE
  • 46.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE
  • 47.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE * 사람은 항상 일정한 결정을 하는 것이 아니다
  • 48.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE * 제한된 정보
  • 49.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE * Bias 스타일리스트에게도 제한된 정보, biased, inconosistnecy
  • 50.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE
  • 51.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE
  • 52.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE
  • 53.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE Step 1. * Predictive Algorithms을 통해 유저가 선호하는 옷들을 스타일리스트 제공
  • 54.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE Step 2. * Step 1에서 선택한 옷들의 조합 score를 제공
  • 55.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE Step 3. * 스타일리스트에 선택된 옷들이 고객에게 전달되고, 피드백을 받는다.
  • 56.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE Step 4. * 피드백을 기반으로 스타일리스트가 train하는 과정을 거친다 (fit, style, price) * 피드백 정보는 스타일리스트가 언제든지 접근할 수 있음
  • 57.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE
  • 58.
    AUGMENTING HUMAN DECISIONMAKING WITH DATA SCIENCE • lower labor cost • increased keep rate • fewer mistakes from humans • greater client satisfaction * System 3 을 통해서 얻을 수 있는 장점