SlideShare une entreprise Scribd logo
1  sur  63
Télécharger pour lire hors ligne
RubyistのためのFFI入門
   @nanki / 関西闇Ruby会議
自己紹介
@nanki ■


Ruby, JavaScript, Objective-[CJ]...


http://blog.netswitch.jp/ - 出町ミスド戦記


http://github.com/nanki


misdo.rb
misdo.rb
misdo.rb

全国のミスタードーナツで毎日開催
misdo.rb

全国のミスタードーナツで毎日開催

参加費 ドーナツ/コーヒー代(実費)
misdo.rb

全国のミスタードーナツで毎日開催

参加費 ドーナツ/コーヒー代(実費)

Rubyなどを使って自分のことをする
misdo.rb

全国のミスタードーナツで毎日開催

参加費 ドーナツ/コーヒー代(実費)

Rubyなどを使って自分のことをする

Ruby以外でもOK
misdo.rb

全国のミスタードーナツで毎日開催

参加費 ドーナツ/コーヒー代(実費)

Rubyなどを使って自分のことをする

Ruby以外でもOK

ミスドじゃなくてもOK
本題
RubyがCと向き合う方法
RubyがCと向き合う方法


 拡張ライブラリを書く
RubyがCと向き合う方法


 拡張ライブラリを書く

 SWIGを使う
RubyがCと向き合う方法


 拡張ライブラリを書く

 SWIGを使う

 FFI ☜ NEW!
FFIとは?
libffi


Foreign Function Interfaceの略

呼出規約(Calling Convention)に則って

無理矢理呼び出す
func(x1, x2, x3)
func(x1, x2, x3)




       x3
func(x1, x2, x3)




       x2

       x3
func(x1, x2, x3)



       x1

       x2

       x3
func(x1, x2, x3)


      戻り先

       x1

       x2

       x3
func(x1, x2, x3)
            ☞call!

      戻り先

       x1

       x2

       x3
func(x1, x2, x3)



       ♨

       x2

       x3
func(x1, x2, x3)




       ♨

       x3
func(x1, x2, x3)




       ♨
func(x1, x2, x3)




               おわり
ffi(ruby-ffi)
ffi
ffi

libffiをRubyから使うためのライブラリ
ffi

libffiをRubyから使うためのライブラリ

http://github.com/ffi/ffi
ffi

libffiをRubyから使うためのライブラリ

http://github.com/ffi/ffi

githubはRubyistだけのものではないのに…
ffi

libffiをRubyから使うためのライブラリ

http://github.com/ffi/ffi

githubはRubyistだけのものではないのに…

我が物顔でffi/ffi
フィッフィ?
フィッフィ入門
@nanki / 闇西関Ruby会議
使い方(1)
module LibC
  extend FFI::Library

  ffi_lib 'c' # FFI::Library::LIBC

  # int puts(char*)
  attach_function :puts, [:string], :int
end

LibC.puts "Hello!"
使い方(2) 型
:short       #   16bit int
:int         #   32bit int
:long_long   #   64bit int
:long        #   long

:float       #   float
:double      #   double
:string      #   NULL-terminated
:pointer     #   pointer

:void, :float, :double, :varargs, ...
使い方(3) 型
            列挙型/構造体/関数ポインタ

enum :Status, [:Success, 0, :Failure, 1]

class Pointer < FFI::Struct
  layout(
    :x, :float,
    :y, :float
  )
end

callback :PaStreamFinishedCallback,
    [:pointer], :void
使い方(4) 例
              ffi-portaudioより抜粋

module PA
  ffi_lib 'portaudio'

  enum :PaStreamCallbackResult,
    [:paContinue, :paComplete, :paAbort]

  class PaStreamCBTimeInfo < FFI::Struct
    layout(...)
  end
使い方(5) 例
              ffi-portaudioより抜粋

  callback :PaStreamCallback,
    [..., PaStreamCBTimeInfo.in, ...],
    :PaStreamCallbackResult

  attach_function :Pa_OpenStream,
    [..., :PaStreamCallback, ...], ...
end

PA.Pa_OpenStream(...,
  c = lambda{|...| :paContinue},
  ...)
使い方(5) 例
              ffi-portaudioより抜粋

  callback :PaStreamCallback,
    [..., PaStreamCBTimeInfo.in, ...],
    :PaStreamCallbackResult

  attach_function :Pa_OpenStream,
    [..., :PaStreamCallback, ...], ...
end

PA.Pa_OpenStream(...,
  c = lambda{|...| :paContinue},
     ☜
  ...)
使い方(5) 例
              ffi-portaudioより抜粋

  callback :PaStreamCallback,
    [..., PaStreamCBTimeInfo.in, ...],
    :PaStreamCallbackResult

  attach_function :Pa_OpenStream,
    [..., :PaStreamCallback, ...], ...
end

PA.Pa_OpenStream(...,
  c = lambda{|...| :paContinue},
     ☜
  ...)
        GC対策
なぜフィッフィか
なぜフィッフィか
なぜフィッフィか

ブリッジコード書きたい?
なぜフィッフィか

ブリッジコード書きたい?

SWIGで生成されたコードで…
なぜフィッフィか

ブリッジコード書きたい?

SWIGで生成されたコードで…

レポジトリが汚れない
なぜフィッフィか

ブリッジコード書きたい?

SWIGで生成されたコードで…

レポジトリが汚れない

Cのコードをメンテナンスしなくてよい
なぜフィッフィか

ブリッジコード書きたい?

SWIGで生成されたコードで…

レポジトリが汚れない

Cのコードをメンテナンスしなくてよい

(JRuby/Rubiniusなどでも使える)
なぜフィッフィか
         portaudioの場合


拡張ライブラリ                  N/A


  SWIG                  5350行


 フィッフィ                  206行
200行はフィッフィも
 結構面倒なのでは?
そこで…
ffi-swig-generator
♘ swig
   -module portaudio
   -o portaudio.xml
   -xml
   portaudio/include/portaudio.h

♘ ffi-gen portaudio.xml portaudio.rb
ffi-swig-generator
♘ swig
   -module portaudio
   -o portaudio.xml
   -xml
   portaudio/include/portaudio.h

♘ ffi-gen portaudio.xml portaudio.rb


              SWIG便利
まとめ
まとめ
               きれなかったもの




FFI::AutoPointer.new(pointer,
self.class.method(:destuctor))

ffi-ruby(https://gist.github.com/1336545)

Unicodeにはffi(U+FB03)という文字がある
ffi-ruby
include FFI::Ruby

p FFI::Ruby::rb_ary_includes [1, 2], 2
# => true

ary = rb_ary_new
argv = FFI::MemoryPointer.new :pointer, 1
argv.write_pointer rb_ary_to_s(ary)
rb_io_puts 1, argv, FFI::Ruby.rb_stdout

# []
ffi-ruby

def from_native(value, ctx=nil)
  id =
    if value.address & 0x0f == 0xe
       value.address >> 8
    else
       rb_num2long rb_obj_id value
    end
  ObjectSpace._id2ref id
end
ffi-ruby
def to_native(obj, ctx=nil)
  id = obj.__id__
  case obj
  when Symbol
    FFI::Pointer.new id << 8 | 0xe
  when Fixnum, FalseClass,
       TrueClass, NilClass
    FFI::Pointer.new id
  else
    FFI::Pointer.new id << 1
  end
end
フィッフィと仲間たち
♘ gem dependent ffi | wc -l
192




                192!
フィッフィと仲間たち
     ffi-ffi a'i Ffrindiau




                                         ⓒS4/C



 http://cyw.s4c.co.uk/en/rhaglenni/ffi-ffi
RubyがC++と
向き合う方法
闇

Contenu connexe

Tendances

Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftSwift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftTomohiro Kumagai
 
スクリプトで文字コード変換
スクリプトで文字コード変換スクリプトで文字コード変換
スクリプトで文字コード変換1000 VICKY
 
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行についてRuby での外部コマンドの実行について
Ruby での外部コマンドの実行についてTomoya Kawanishi
 
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」Hiro H.
 
Ruby の文字列について
Ruby の文字列についてRuby の文字列について
Ruby の文字列についてTomoya Kawanishi
 
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__Tomohiro Kumagai
 
Ruby の正規表現について
Ruby の正規表現についてRuby の正規表現について
Ruby の正規表現についてTomoya Kawanishi
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたいt-sin
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJavableis tift
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Yuto Takei
 
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosTomohiro Kumagai
 
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-t-sin
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発emasaka
 
capistrano-colorized-stream
capistrano-colorized-streamcapistrano-colorized-stream
capistrano-colorized-streamNaotoshi Seo
 
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiTomohiro Kumagai
 
Swift ドキュメントコメント
Swift ドキュメントコメントSwift ドキュメントコメント
Swift ドキュメントコメントTomohiro Kumagai
 

Tendances (18)

Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftSwift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswift
 
スクリプトで文字コード変換
スクリプトで文字コード変換スクリプトで文字コード変換
スクリプトで文字コード変換
 
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行についてRuby での外部コマンドの実行について
Ruby での外部コマンドの実行について
 
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」
 
Ruby の文字列について
Ruby の文字列についてRuby の文字列について
Ruby の文字列について
 
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__
 
Ruby の正規表現について
Ruby の正規表現についてRuby の正規表現について
Ruby の正規表現について
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
 
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
 
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-
 
Move semantics
Move semanticsMove semantics
Move semantics
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
 
capistrano-colorized-stream
capistrano-colorized-streamcapistrano-colorized-stream
capistrano-colorized-stream
 
Hachioji.pm15
Hachioji.pm15Hachioji.pm15
Hachioji.pm15
 
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansai
 
Swift ドキュメントコメント
Swift ドキュメントコメントSwift ドキュメントコメント
Swift ドキュメントコメント
 

En vedette

RubyからFFIを使ってみた
RubyからFFIを使ってみたRubyからFFIを使ってみた
RubyからFFIを使ってみたYukimitsu Izawa
 
Разработка кросс-платформенных мобильных приложений с использованием Appceler...
Разработка кросс-платформенных мобильных приложений с использованием Appceler...Разработка кросс-платформенных мобильных приложений с использованием Appceler...
Разработка кросс-платформенных мобильных приложений с использованием Appceler...Gennadiy Potapov
 
Mastering the eligible content
Mastering the eligible contentMastering the eligible content
Mastering the eligible contentLeah Vestal
 
Recent Developments in Aviation Law
Recent Developments in Aviation LawRecent Developments in Aviation Law
Recent Developments in Aviation LawStites & Harbison
 
森下・アジャイル研究所LIVE 森下 真衣
森下・アジャイル研究所LIVE  森下 真衣森下・アジャイル研究所LIVE  森下 真衣
森下・アジャイル研究所LIVE 森下 真衣pgcafe
 
The ancient middle east mesopotamian literature2
The ancient middle east  mesopotamian literature2The ancient middle east  mesopotamian literature2
The ancient middle east mesopotamian literature2sparky31522
 
Real Estate / Special Assets Seminar
Real Estate / Special Assets SeminarReal Estate / Special Assets Seminar
Real Estate / Special Assets SeminarStites & Harbison
 
Earth Science Chapter 1
Earth Science Chapter 1Earth Science Chapter 1
Earth Science Chapter 1mshenry
 
RESTful Web Services @AnkaraPHP meetup
RESTful Web Services @AnkaraPHP meetupRESTful Web Services @AnkaraPHP meetup
RESTful Web Services @AnkaraPHP meetupFatih Karatana
 
The Happenings Gay Magazine (2007) Mayonn, Inc.
The Happenings Gay Magazine (2007) Mayonn, Inc.The Happenings Gay Magazine (2007) Mayonn, Inc.
The Happenings Gay Magazine (2007) Mayonn, Inc.mayonn
 
Corporate wellbeing
Corporate wellbeingCorporate wellbeing
Corporate wellbeingRavi Samuel
 
Accelerated reader in_grades_3-5 mod 8.11
Accelerated reader in_grades_3-5 mod 8.11Accelerated reader in_grades_3-5 mod 8.11
Accelerated reader in_grades_3-5 mod 8.11Leah Vestal
 
Harry potter and the deathly hallows review.
Harry potter and the deathly hallows review.Harry potter and the deathly hallows review.
Harry potter and the deathly hallows review.Becca McPartland
 

En vedette (20)

RubyからFFIを使ってみた
RubyからFFIを使ってみたRubyからFFIを使ってみた
RubyからFFIを使ってみた
 
Разработка кросс-платформенных мобильных приложений с использованием Appceler...
Разработка кросс-платформенных мобильных приложений с использованием Appceler...Разработка кросс-платформенных мобильных приложений с использованием Appceler...
Разработка кросс-платформенных мобильных приложений с использованием Appceler...
 
Mastering the eligible content
Mastering the eligible contentMastering the eligible content
Mastering the eligible content
 
Non small cell
Non  small  cellNon  small  cell
Non small cell
 
Recent Developments in Aviation Law
Recent Developments in Aviation LawRecent Developments in Aviation Law
Recent Developments in Aviation Law
 
森下・アジャイル研究所LIVE 森下 真衣
森下・アジャイル研究所LIVE  森下 真衣森下・アジャイル研究所LIVE  森下 真衣
森下・アジャイル研究所LIVE 森下 真衣
 
The ancient middle east mesopotamian literature2
The ancient middle east  mesopotamian literature2The ancient middle east  mesopotamian literature2
The ancient middle east mesopotamian literature2
 
Real Estate / Special Assets Seminar
Real Estate / Special Assets SeminarReal Estate / Special Assets Seminar
Real Estate / Special Assets Seminar
 
Rrp 2
Rrp 2Rrp 2
Rrp 2
 
Earth Science Chapter 1
Earth Science Chapter 1Earth Science Chapter 1
Earth Science Chapter 1
 
RESTful Web Services @AnkaraPHP meetup
RESTful Web Services @AnkaraPHP meetupRESTful Web Services @AnkaraPHP meetup
RESTful Web Services @AnkaraPHP meetup
 
The Happenings Gay Magazine (2007) Mayonn, Inc.
The Happenings Gay Magazine (2007) Mayonn, Inc.The Happenings Gay Magazine (2007) Mayonn, Inc.
The Happenings Gay Magazine (2007) Mayonn, Inc.
 
Gic2011 aula6-ingles
Gic2011 aula6-inglesGic2011 aula6-ingles
Gic2011 aula6-ingles
 
Around the garden
Around the gardenAround the garden
Around the garden
 
Corporate wellbeing
Corporate wellbeingCorporate wellbeing
Corporate wellbeing
 
Accelerated reader in_grades_3-5 mod 8.11
Accelerated reader in_grades_3-5 mod 8.11Accelerated reader in_grades_3-5 mod 8.11
Accelerated reader in_grades_3-5 mod 8.11
 
Harry potter and the deathly hallows review.
Harry potter and the deathly hallows review.Harry potter and the deathly hallows review.
Harry potter and the deathly hallows review.
 
Gic2011 aula05-ingles
Gic2011 aula05-inglesGic2011 aula05-ingles
Gic2011 aula05-ingles
 
SD92 Nisga'a Language & Culture Presentation
SD92 Nisga'a Language & Culture PresentationSD92 Nisga'a Language & Culture Presentation
SD92 Nisga'a Language & Culture Presentation
 
Gic2011 aula5-ingles
Gic2011 aula5-inglesGic2011 aula5-ingles
Gic2011 aula5-ingles
 

Similaire à ffi for rubyists

PHPの関数実行とその計測
PHPの関数実行とその計測PHPの関数実行とその計測
PHPの関数実行とその計測shinjiigarashi
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようKoichi Sasada
 
Php in ruby
Php in rubyPhp in ruby
Php in rubydo_aki
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
about Thrift
about Thriftabout Thrift
about ThriftNaoya Ito
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいdigitalghost
 
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説ota42y
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12Takanori Suzuki
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライドkoturn 0;
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementationsmasahitojp
 
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由Ransui Iso
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia鉄次 尾形
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回Tomoya Kawanishi
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputingNoboru Irieda
 
Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話Masaya Konishi
 

Similaire à ffi for rubyists (20)

PHPの関数実行とその計測
PHPの関数実行とその計測PHPの関数実行とその計測
PHPの関数実行とその計測
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
about Thrift
about Thriftabout Thrift
about Thrift
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
 
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライド
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
 
Ruby 2.5
Ruby 2.5Ruby 2.5
Ruby 2.5
 
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
Puppet on AWS
Puppet on AWSPuppet on AWS
Puppet on AWS
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話
 

ffi for rubyists