SlideShare a Scribd company logo
1 of 18
Download to read offline
「安心・安全・安定・信頼」できるインターネットサービスを
株式会社クルウィット
井澤 志充
RubyからFFIを使ってみた
2014/3/15 (Sat)
Kanazawa.rb #19
@Cafe? IKAGAWA DO
「安心・安全・安定・信頼」できるインターネットサービスを
じこしょうかい
• (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長  
• 博⼠士(情報科学)
!2
• ネットワークの委託研究・⾃自社サービス開発など  
• 井澤  志充  (いざわゆきみつ)
@Yukimitsu_Izawa
「安心・安全・安定・信頼」できるインターネットサービスを
じこしょうかい
• (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長  
• 博⼠士(情報科学)
!2
• ネットワークの委託研究・⾃自社サービス開発など  
• 井澤  志充  (いざわゆきみつ)
• 最近、提督に就任しました  
@Yukimitsu_Izawa
「安心・安全・安定・信頼」できるインターネットサービスを
FFIとは
• FFI  (A  Portable  Foreign  Function  Interface  Library)  
!
• libffi  
• https://sourceware.org/libffi/  
!
• ffi  をサポートしている⾔言語  
• Python,  Java,  javascript,  Common  Lisp,  Scheme,  
Ruby
!3
「安心・安全・安定・信頼」できるインターネットサービスを
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
「安心・安全・安定・信頼」できるインターネットサービスを
install
!
% gem install ffi
Itʼ’s  very  simple  :)
!5
※SWIGと違って、ライブラリごとにnative  codeを  
compileして*.bundleをインストールする必要がない
「安心・安全・安定・信頼」できるインターネットサービスを
利用例
• 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 */
};
「安心・安全・安定・信頼」できるインターネットサービスを
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
「安心・安全・安定・信頼」できるインターネットサービスを
実行してみる
(前略)
:
protoent = Libc.getprotobynumber(41)
myent = Libc::Protoent.new(protoent)
p myent[:p_name]
!
#=> "ipv6"
!8
「安心・安全・安定・信頼」できるインターネットサービスを
実行してみる
(前略)
:
protoent = Libc.getprotobynumber(41)
myent = Libc::Protoent.new(protoent)
p myent[:p_name]
!
#=> "ipv6"
!8
簡単じゃね?
「安心・安全・安定・信頼」できるインターネットサービスを
使える型
• 代表的なもの
!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  
「安心・安全・安定・信頼」できるインターネットサービスを
まとめ
• native  libraryを簡単に使うにはFFIがお⼿手軽  
!
• getprotobynumber(3)を使った例例を紹介  
!
• 続きはWebで。(おググりくださいの意)
!10
「安心・安全・安定・信頼」できるインターネットサービスを
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 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)  ←  ホント?
「安心・安全・安定・信頼」できるインターネットサービスを
なかなか面白い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 ←ほぼ公称値出てる!
「安心・安全・安定・信頼」できるインターネットサービスを
• VMいれてそこから起動したり出来そう  
!
• Sandisk  USB3.0  超⾼高速  USB  128GB  Extreme  PRO  
Read  260MB/s  SDCZ88-‐‑‒128G  サンディスク  海外パッ
ケージ品  でおググりください  
• 市場価格で20,000円ぐらい
!13
「安心・安全・安定・信頼」できるインターネットサービスを
• Thank  You!  
• If  you  have  any  comments,  
• please  send  to:  
• Mail:  izawa@izawa.org  /  izawa@clwit.co.jp  
• Twitter:  @Yukimitsu_̲Izawa
!14

More Related Content

Similar to RubyからFFIを使ってみた

Getting Started with Ruby on Rails4 + Twitter Bootstrap3
Getting Started with Ruby on Rails4 + Twitter Bootstrap3Getting Started with Ruby on Rails4 + Twitter Bootstrap3
Getting Started with Ruby on Rails4 + Twitter Bootstrap3
Yukimitsu Izawa
 
NTPを使ったDDoSについて
NTPを使ったDDoSについてNTPを使ったDDoSについて
NTPを使ったDDoSについて
Yukimitsu Izawa
 
オープンソースで作る動画配信サイト OSC2013名古屋
オープンソースで作る動画配信サイト OSC2013名古屋オープンソースで作る動画配信サイト OSC2013名古屋
オープンソースで作る動画配信サイト OSC2013名古屋
Masaki Goto
 

Similar to RubyからFFIを使ってみた (20)

IoTタグで遊んでみよう
IoTタグで遊んでみようIoTタグで遊んでみよう
IoTタグで遊んでみよう
 
Getting Started with Ruby on Rails4 + Twitter Bootstrap3
Getting Started with Ruby on Rails4 + Twitter Bootstrap3Getting Started with Ruby on Rails4 + Twitter Bootstrap3
Getting Started with Ruby on Rails4 + Twitter Bootstrap3
 
経営者・マネージャーが知るべき情報セキュリティ
経営者・マネージャーが知るべき情報セキュリティ経営者・マネージャーが知るべき情報セキュリティ
経営者・マネージャーが知るべき情報セキュリティ
 
IoT時代のセキュアなクラウドインフラ構築術 #seccamp
IoT時代のセキュアなクラウドインフラ構築術 #seccampIoT時代のセキュアなクラウドインフラ構築術 #seccamp
IoT時代のセキュアなクラウドインフラ構築術 #seccamp
 
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccampクラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
 
NTPを使ったDDoSについて
NTPを使ったDDoSについてNTPを使ったDDoSについて
NTPを使ったDDoSについて
 
Sakura infini band-20180424
Sakura infini band-20180424Sakura infini band-20180424
Sakura infini band-20180424
 
どこでも安全に使えるIoTを目指して ~さくらインターネットのIoTへの取り組み~
どこでも安全に使えるIoTを目指して ~さくらインターネットのIoTへの取り組み~どこでも安全に使えるIoTを目指して ~さくらインターネットのIoTへの取り組み~
どこでも安全に使えるIoTを目指して ~さくらインターネットのIoTへの取り組み~
 
最新プロトコル HTT/2 とは
最新プロトコル HTT/2 とは最新プロトコル HTT/2 とは
最新プロトコル HTT/2 とは
 
Career - design, adaption and diversity - for EMC I&D event
Career - design, adaption and diversity - for EMC I&D eventCareer - design, adaption and diversity - for EMC I&D event
Career - design, adaption and diversity - for EMC I&D event
 
クラウドセキュリティ基礎
クラウドセキュリティ基礎クラウドセキュリティ基礎
クラウドセキュリティ基礎
 
[Dots.]taiga
[Dots.]taiga[Dots.]taiga
[Dots.]taiga
 
IoTとビッグデータについて学ぼう
IoTとビッグデータについて学ぼうIoTとビッグデータについて学ぼう
IoTとビッグデータについて学ぼう
 
About AI(Machine Learning)
About AI(Machine Learning)About AI(Machine Learning)
About AI(Machine Learning)
 
docxをmdで書こう
docxをmdで書こうdocxをmdで書こう
docxをmdで書こう
 
作って(壊して?)学ぶインターネットのしくみ サイバーエージェントの実験用ASの紹介 / Introduce experimental AS in ...
作って(壊して?)学ぶインターネットのしくみ サイバーエージェントの実験用ASの紹介 / Introduce experimental AS in ...作って(壊して?)学ぶインターネットのしくみ サイバーエージェントの実験用ASの紹介 / Introduce experimental AS in ...
作って(壊して?)学ぶインターネットのしくみ サイバーエージェントの実験用ASの紹介 / Introduce experimental AS in ...
 
簡便な大型幅広デジタルサイネージシステムとその自動運用システム
簡便な大型幅広デジタルサイネージシステムとその自動運用システム簡便な大型幅広デジタルサイネージシステムとその自動運用システム
簡便な大型幅広デジタルサイネージシステムとその自動運用システム
 
サーバーレス時代の システム設計ワークショップ
サーバーレス時代の システム設計ワークショップサーバーレス時代の システム設計ワークショップ
サーバーレス時代の システム設計ワークショップ
 
オープンソースで作る動画配信サイト OSC2013名古屋
オープンソースで作る動画配信サイト OSC2013名古屋オープンソースで作る動画配信サイト OSC2013名古屋
オープンソースで作る動画配信サイト OSC2013名古屋
 
クラウドセキュリティ基礎 #seccamp
クラウドセキュリティ基礎 #seccampクラウドセキュリティ基礎 #seccamp
クラウドセキュリティ基礎 #seccamp
 

More from Yukimitsu Izawa (9)

Rubyでオートマトン
RubyでオートマトンRubyでオートマトン
Rubyでオートマトン
 
テストとは
テストとはテストとは
テストとは
 
RubyでDSL
RubyでDSLRubyでDSL
RubyでDSL
 
Pow
PowPow
Pow
 
RVM with Server Environment
RVM with Server EnvironmentRVM with Server Environment
RVM with Server Environment
 
Try
TryTry
Try
 
rvm でbundlerと仲良くする
rvm でbundlerと仲良くするrvm でbundlerと仲良くする
rvm でbundlerと仲良くする
 
SWIGでRubyバインディング
SWIGでRubyバインディングSWIGでRubyバインディング
SWIGでRubyバインディング
 
MacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみたMacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみた
 

Recently uploaded

研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
atsushi061452
 

Recently uploaded (16)

20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
 
Keywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltdKeywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltd
 
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
 
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
 
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdfネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
 
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
 
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
 
情報を表現するときのポイント
情報を表現するときのポイント情報を表現するときのポイント
情報を表現するときのポイント
 
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
 
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイルLoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
 
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
 
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
 

RubyからFFIを使ってみた