Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
「安心・安全・安定・信頼」できるインターネットサービスを
株式会社クルウィット
井澤 志充
RubyからFFIを使ってみた
2014/3/15 (Sat)
Kanazawa.rb #19
@Cafe? IKAGAWA DO
「安心・安全・安定・信頼」できるインターネットサービスを
じこしょうかい
• (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長  
• 博⼠士(情報科学)
!2
• ネットワークの委託研究・⾃自社サービス開発など  
• 井澤  志充 ...
「安心・安全・安定・信頼」できるインターネットサービスを
じこしょうかい
• (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長  
• 博⼠士(情報科学)
!2
• ネットワークの委託研究・⾃自社サービス開発など  
• 井澤  志充 ...
「安心・安全・安定・信頼」できるインターネットサービスを
FFIとは
• FFI  (A  Portable  Foreign  Function  Interface  Library)  
!
• libffi  
• https://sour...
「安心・安全・安定・信頼」できるインターネットサービスを
ruby-ffi
• https://github.com/ffi/ffi  
!
• 上記URLより:  
• Intuitive  DSL  
• Support  All  C  native...
「安心・安全・安定・信頼」できるインターネットサービスを
install
!
% gem install ffi
Itʼ’s  very  simple  :)
!5
※SWIGと違って、ライブラリごとにnative  codeを  
comp...
「安心・安全・安定・信頼」できるインターネットサービスを
利用例
• getprotobynumber(3)  をruby  から使ってみる。  
• /etc/protocols  データベースを読む関数
!6
(manより抜粋)  
LIB...
「安心・安全・安定・信頼」できるインターネットサービスを
module Libc
extend FFI::Library
ffi_lib FFI::Library::LIBC
# FFI::Library::LIBC #=> "libc.dyl...
「安心・安全・安定・信頼」できるインターネットサービスを
実行してみる
(前略)
:
protoent = Libc.getprotobynumber(41)
myent = Libc::Protoent.new(protoent)
p mye...
「安心・安全・安定・信頼」できるインターネットサービスを
実行してみる
(前略)
:
protoent = Libc.getprotobynumber(41)
myent = Libc::Protoent.new(protoent)
p mye...
「安心・安全・安定・信頼」できるインターネットサービスを
使える型
• 代表的なもの
!9
:char and :uchar - 8 bit signed and unsigned values
:short and :ushort - 16 ...
「安心・安全・安定・信頼」できるインターネットサービスを
まとめ
• native  libraryを簡単に使うにはFFIがお⼿手軽  
!
• getprotobynumber(3)を使った例例を紹介  
!
• 続きはWebで。(おググりく...
「安心・安全・安定・信頼」できるインターネットサービスを
One more thing
• 最近、USBメモリを買いました。
!11
「安心・安全・安定・信頼」できるインターネットサービスを
なかなか面白いUSBメモリ
!12
• 中⾝身はSSDらしい。  
• 書き込みちょーはやいらしい  
• (公称  R:260MB/s,  W:240MB/s)  ←  ホント?
「安心・安全・安定・信頼」できるインターネットサービスを
なかなか面白いUSBメモリ
% ls -l FreeBSD-10.0-RELEASE-amd64-dvd1.iso
-rw-r—r-- 1 izawa staff 2484742144 ...
「安心・安全・安定・信頼」できるインターネットサービスを
なかなか面白いUSBメモリ
% ls -l FreeBSD-10.0-RELEASE-amd64-dvd1.iso
-rw-r—r-- 1 izawa staff 2484742144 ...
「安心・安全・安定・信頼」できるインターネットサービスを
• VMいれてそこから起動したり出来そう  
!
• Sandisk  USB3.0  超⾼高速  USB  128GB  Extreme  PRO  
Read  260MB/s  S...
「安心・安全・安定・信頼」できるインターネットサービスを
• Thank  You!  
• If  you  have  any  comments,  
• please  send  to:  
• Mail:  izawa@izawa....
Upcoming SlideShare
Loading in …5
×

RubyからFFIを使ってみた

2,820 views

Published on

Using Ruby FFI (A Portable Foreign Function Interface Library)

Published in: Technology
  • Be the first to comment

RubyからFFIを使ってみた

  1. 1. 「安心・安全・安定・信頼」できるインターネットサービスを 株式会社クルウィット 井澤 志充 RubyからFFIを使ってみた 2014/3/15 (Sat) Kanazawa.rb #19 @Cafe? IKAGAWA DO
  2. 2. 「安心・安全・安定・信頼」できるインターネットサービスを じこしょうかい • (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長   • 博⼠士(情報科学) !2 • ネットワークの委託研究・⾃自社サービス開発など   • 井澤  志充  (いざわゆきみつ) @Yukimitsu_Izawa
  3. 3. 「安心・安全・安定・信頼」できるインターネットサービスを じこしょうかい • (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長   • 博⼠士(情報科学) !2 • ネットワークの委託研究・⾃自社サービス開発など   • 井澤  志充  (いざわゆきみつ) • 最近、提督に就任しました   @Yukimitsu_Izawa
  4. 4. 「安心・安全・安定・信頼」できるインターネットサービスを FFIとは • FFI  (A  Portable  Foreign  Function  Interface  Library)   ! • libffi   • https://sourceware.org/libffi/   ! • ffi  をサポートしている⾔言語   • Python,  Java,  javascript,  Common  Lisp,  Scheme,   Ruby !3
  5. 5. 「安心・安全・安定・信頼」できるインターネットサービスを ruby-ffi • https://github.com/ffi/ffi   ! • 上記URLより:   • Intuitive  DSL   • Support  All  C  native  types   • C  structs  (also  nested),  enums  and  global  variables   • Callbacks  from  C  to  ruby   • Automatic  garbage  collection  of  native  memory   ! • FFIを使って、ダイナミックリンクライブラリをruby  から 呼べるってこと !4
  6. 6. 「安心・安全・安定・信頼」できるインターネットサービスを install ! % gem install ffi Itʼ’s  very  simple  :) !5 ※SWIGと違って、ライブラリごとにnative  codeを   compileして*.bundleをインストールする必要がない
  7. 7. 「安心・安全・安定・信頼」できるインターネットサービスを 利用例 • getprotobynumber(3)  をruby  から使ってみる。   • /etc/protocols  データベースを読む関数 !6 (manより抜粋)   LIBRARY            Standard  C  Library  (libc,  -‐‑‒lc)   ! SYNOPSIS            struct protoent * getprotobynumber(int proto); ! struct protoent { char *p_name; /* official name of protocol */ char **p_aliases; /* alias list */ int p_proto; /* protocol number */ };
  8. 8. 「安心・安全・安定・信頼」できるインターネットサービスを module Libc extend FFI::Library ffi_lib FFI::Library::LIBC # FFI::Library::LIBC #=> "libc.dylib" # or ffi_lib 'c' # or ffi_lib "/usr/lib/libc.dylib" ! attach_function :getprotobynumber, [:int], :pointer # or attach_function :my_func_name, :getprotobynumber, [:int], :pointer class Protoent < FFI::Struct layout( :p_name, :string, :p_aliases, :pointer, :p_proto, :int ) end end !7
  9. 9. 「安心・安全・安定・信頼」できるインターネットサービスを 実行してみる (前略) : protoent = Libc.getprotobynumber(41) myent = Libc::Protoent.new(protoent) p myent[:p_name] ! #=> "ipv6" !8
  10. 10. 「安心・安全・安定・信頼」できるインターネットサービスを 実行してみる (前略) : protoent = Libc.getprotobynumber(41) myent = Libc::Protoent.new(protoent) p myent[:p_name] ! #=> "ipv6" !8 簡単じゃね?
  11. 11. 「安心・安全・安定・信頼」できるインターネットサービスを 使える型 • 代表的なもの !9 :char and :uchar - 8 bit signed and unsigned values :short and :ushort - 16 bit signed and unsigned values :int and :uint - 32 bit signed and unsigned values :long_long and :ulong_long - 64 bit signed and unsigned values :string - C string, NULL terminated. :pointer - a C pointer 他にも :bool , :size_t, :in_addr_t とかいろいろ 参照:    https://github.com/ffi/ffi/wiki/Types  
  12. 12. 「安心・安全・安定・信頼」できるインターネットサービスを まとめ • native  libraryを簡単に使うにはFFIがお⼿手軽   ! • getprotobynumber(3)を使った例例を紹介   ! • 続きはWebで。(おググりくださいの意) !10
  13. 13. 「安心・安全・安定・信頼」できるインターネットサービスを One more thing • 最近、USBメモリを買いました。 !11
  14. 14. 「安心・安全・安定・信頼」できるインターネットサービスを なかなか面白いUSBメモリ !12 • 中⾝身はSSDらしい。   • 書き込みちょーはやいらしい   • (公称  R:260MB/s,  W:240MB/s)  ←  ホント?
  15. 15. 「安心・安全・安定・信頼」できるインターネットサービスを なかなか面白いUSBメモリ % ls -l FreeBSD-10.0-RELEASE-amd64-dvd1.iso -rw-r—r-- 1 izawa staff 2484742144 3 14 23:52 ! % time cp FreeBSD-10.0-RELEASE-amd64-dvd1.iso /Volumes/SANDISK ! 0.00s user 1.72s system 16% cpu 10.364 total !12 • 中⾝身はSSDらしい。   • 書き込みちょーはやいらしい   • (公称  R:260MB/s,  W:240MB/s)  ←  ホント?
  16. 16. 「安心・安全・安定・信頼」できるインターネットサービスを なかなか面白いUSBメモリ % ls -l FreeBSD-10.0-RELEASE-amd64-dvd1.iso -rw-r—r-- 1 izawa staff 2484742144 3 14 23:52 ! % time cp FreeBSD-10.0-RELEASE-amd64-dvd1.iso /Volumes/SANDISK ! 0.00s user 1.72s system 16% cpu 10.364 total !12 • 中⾝身はSSDらしい。   • 書き込みちょーはやいらしい   • (公称  R:260MB/s,  W:240MB/s)  ←  ホント? 2484742144 ÷ 10.364 =239747408.72250096487842531840 ≒ 239.7MB/s ←ほぼ公称値出てる!
  17. 17. 「安心・安全・安定・信頼」できるインターネットサービスを • VMいれてそこから起動したり出来そう   ! • Sandisk  USB3.0  超⾼高速  USB  128GB  Extreme  PRO   Read  260MB/s  SDCZ88-‐‑‒128G  サンディスク  海外パッ ケージ品  でおググりください   • 市場価格で20,000円ぐらい !13
  18. 18. 「安心・安全・安定・信頼」できるインターネットサービスを • Thank  You!   • If  you  have  any  comments,   • please  send  to:   • Mail:  izawa@izawa.org  /  izawa@clwit.co.jp   • Twitter:  @Yukimitsu_̲Izawa !14

×