SlideShare a Scribd company logo
1 of 19
SWIG で rubyバインディング
                 Kanazawa.rb #4 LT 資料
                 井澤 ゆきみつ




                 「安心・安全・安定・信頼」できるインターネットサービスを

12年12月2日日曜日
rubyバインディング

   • 特定のライブラリをrubyから使えるよう
     にすること。
   • OpenCVもQtもなんでもかんでもrubyか

     ら使えるよね。
   • 気になるライブラリがあるのに、rubyの

     gemが無いみたい…。



                 「安心・安全・安定・信頼」できるインターネットサービスを   2
12年12月2日日曜日
rubyバインディング

   • 特定のライブラリをrubyから使えるよう
     にすること。
   • OpenCVもQtもなんでもかんでもrubyか

     ら使えるよね。
   • 気になるライブラリがあるのに、rubyの

     gemが無いみたい…。

   そんな時は、SWIG  で作っちゃおう!!

                 「安心・安全・安定・信頼」できるインターネットサービスを   2
12年12月2日日曜日
SWIGってなに?

   •   Simplified  Wrapper  and  Interface  Generator
   • http://www.swig.org/
   • 最新版は、2.0.8

   • 対応⾔言語:

     C#,Java,Perl,PHP,Python,Ruby,Tclなど
   • brew  install  swig  でインスコできます。




                              「安心・安全・安定・信頼」できるインターネットサービスを   3
12年12月2日日曜日
試しに使ってみましょう。

   •   libpuzzleをruby  から使えるようにしてみ
       ます。




                   「安心・安全・安定・信頼」できるインターネットサービスを   4
12年12月2日日曜日
libpuzzleとは?

   • 画像の類似度度を計算するライブラリ
   • http://www.pureftpd.org/project/

     libpuzzle




                    「安心・安全・安定・信頼」できるインターネットサービスを   5
12年12月2日日曜日
libpuzzleとは? (2)

   • ライブラリの最新版は、0.11
   • brew  install  libpuzzleでインスコできま

     す。
   • /usr/local/include/puzzle.h

   • /usr/local/lib/libpuzzle.{a,so,dyld}




                      「安心・安全・安定・信頼」できるインターネットサービスを   6
12年12月2日日曜日
puzzle.i ファイルを作成する

   •   ライブラリの関数をメソッドに変換するた
       めの情報を記述する。

   %module  puzzle
   %{
   #include  "/usr/local/include/puzzle.h"
   %}
   %include  /usr/local/include/puzzle.h

                      「安心・安全・安定・信頼」できるインターネットサービスを   7
12年12月2日日曜日
SWIGを実行する

   •   swigコマンドを実⾏行行して、ライブラリ・
       ラッパー⽤用のソースを⽣生成する。

   %  swig  -‐‑‒ruby  puzzle.i
   →puzzle_̲wrap.c  が⽣生成される。




                   「安心・安全・安定・信頼」できるインターネットサービスを   8
12年12月2日日曜日
extconf.rb ファイルを作成する

   •   そのマシンのruby  ⽤用のMakefileを作るた
       め。

   require  "mkmf"
   $CFLAGS  +=  "  -‐‑‒Wall  "
   $LOCAL_̲LIBS  +=  "  -‐‑‒lpuzzle  "
   create_̲makefile("puzzle")



                         「安心・安全・安定・信頼」できるインターネットサービスを   9
12年12月2日日曜日
Makefileを生成する

   •   ruby  で  extconf.rb  を実⾏行行して  Makefile
       を⽣生成する。

   %  ruby  extconf.rb
   →Makefile  が⽣生成される。




                        「安心・安全・安定・信頼」できるインターネットサービスを   10
12年12月2日日曜日
ラッパー・ライブラリを生成する

   •   make  を実⾏行行してコンパイルする。


   %  make
   →puzzle.bundleが⽣生成される。
   %  make  install
   →puzzle.bundleがruby  のsite_̲rubyの下に
   インスコされる。


                   「安心・安全・安定・信頼」できるインターネットサービスを   11
12年12月2日日曜日
実験:二つの画像の類似度を測ってみる

   •   lena画像を⼆二つ⽤用意する




          lena-256x256.jpg                  lena-inpaint.jpg


                             「安心・安全・安定・信頼」できるインターネットサービスを      12
12年12月2日日曜日
まずはC言語でライブラリを使ってみる
 #include  <puzzle.h>
 int  main(int  argc,  char  *argv[])  {
     PuzzleContext  context;
     PuzzleCvec  cvec1,  cvec2;  
     double  d;


     puzzle_̲init_̲context(&context);
     puzzle_̲init_̲cvec(&context,  &cvec1);
     puzzle_̲init_̲cvec(&context,  &cvec2);


     puzzle_̲fill_̲cvec_̲from_̲file(&context,  &cvec1,  "lena-‐‑‒256x256.jpg");
     puzzle_̲fill_̲cvec_̲from_̲file(&context,  &cvec2,  "lena-‐‑‒inpaint.jpg");


     d  =  puzzle_̲vector_̲normalized_̲distance(&context,  &cvec1,  &cvec2,  1);
     printf("%fn",  d);    
     return  0;
                                          「安心・安全・安定・信頼」できるインターネットサービスを             13
 }
12年12月2日日曜日
まずはC言語でライブラリを使ってみる (2)

   •   コンパイルして実⾏行行する。

   %  gcc  -‐‑‒I/usr/local/include  -‐‑‒L/usr/local/lib  test.c    -‐‑‒o  
   puzzle  -‐‑‒lpuzzle
   %  ./puzzle
   0.379903




                                     「安心・安全・安定・信頼」できるインターネットサービスを            14
12年12月2日日曜日
同じコードをRubyで書いてみる
  require  'puzzle'


  context  =  Puzzle::PuzzleContext.new                                                            
  cvec1  =  Puzzle::PuzzleCvec.new                                                                      
  cvec2  =  Puzzle::PuzzleCvec.new


  Puzzle::puzzle_̲init_̲context(context)                                                
  Puzzle::puzzle_̲init_̲cvec(context,  cvec1)                                                    
  Puzzle::puzzle_̲init_̲cvec(context,  cvec2)                                                    


  Puzzle::puzzle_̲fill_̲cvec_̲from_̲file(context,  cvec1,  "lena-‐‑‒256x256.jpg")        
  Puzzle::puzzle_̲fill_̲cvec_̲from_̲file(context,  cvec2,  "lena-‐‑‒inpaint.jpg")
      
  d  =  Puzzle::puzzle_̲vector_̲normalized_̲distance(context,  cvec1,  cvec2,  1)
  puts  d.to_̲s
                                                              「安心・安全・安定・信頼」できるインターネットサービスを                 15
12年12月2日日曜日
同じコードをRubyで書いてみる (2)

   •   実⾏行行する。
   %  ruby  test.rb
   0.3799032317485305




                        「安心・安全・安定・信頼」できるインターネットサービスを   16
12年12月2日日曜日
同じコードをRubyで書いてみる (2)

   •   実⾏行行する。
   %  ruby  test.rb
   0.3799032317485305



Ruby  から  libpuzzle  を使えるようになった!!




                        「安心・安全・安定・信頼」できるインターネットサービスを   16
12年12月2日日曜日
•   Thank  You!
        •   If  you  have  any  comments,
              •   please  send  to:
                   •   Mail:  izawa@izawa.org  /  izawa@clwit.co.jp
                   •   Twitter:  @Yukimitsu_̲Izawa




                                          「安心・安全・安定・信頼」できるインターネットサービスを   17
12年12月2日日曜日

More Related Content

Viewers also liked

MP Joinを使った類似データ抽出
MP Joinを使った類似データ抽出MP Joinを使った類似データ抽出
MP Joinを使った類似データ抽出JAVA DM
 
DigiPinguïns: van startknop naar desktop - UEFI, GRUB & systemd (Koen Wybo)
DigiPinguïns: van startknop naar desktop - UEFI, GRUB & systemd (Koen Wybo)DigiPinguïns: van startknop naar desktop - UEFI, GRUB & systemd (Koen Wybo)
DigiPinguïns: van startknop naar desktop - UEFI, GRUB & systemd (Koen Wybo)Avansa Mid- en Zuidwest
 
Dr. Douglas Marthaler - Rotavirus Epidemiology
Dr. Douglas Marthaler - Rotavirus EpidemiologyDr. Douglas Marthaler - Rotavirus Epidemiology
Dr. Douglas Marthaler - Rotavirus EpidemiologyJohn Blue
 
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいことiOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいことasakahara
 
Chapter 3 Financial Instruments Financial Markets and Financial Institutions
Chapter 3 Financial Instruments Financial Markets and Financial InstitutionsChapter 3 Financial Instruments Financial Markets and Financial Institutions
Chapter 3 Financial Instruments Financial Markets and Financial InstitutionsDr. John V. Padua
 
Exemplo de Plano Estratégico de TI - MEC
Exemplo de Plano Estratégico de TI - MECExemplo de Plano Estratégico de TI - MEC
Exemplo de Plano Estratégico de TI - MECFernando Palma
 
Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介khisano
 
Impulse and momentum(physics)
Impulse and momentum(physics)Impulse and momentum(physics)
Impulse and momentum(physics)Nikol Cervas
 
mruby を C# に 組み込んでみる
mruby を C# に 組み込んでみるmruby を C# に 組み込んでみる
mruby を C# に 組み込んでみるRyosuke Akiyama
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書くmametter
 

Viewers also liked (10)

MP Joinを使った類似データ抽出
MP Joinを使った類似データ抽出MP Joinを使った類似データ抽出
MP Joinを使った類似データ抽出
 
DigiPinguïns: van startknop naar desktop - UEFI, GRUB & systemd (Koen Wybo)
DigiPinguïns: van startknop naar desktop - UEFI, GRUB & systemd (Koen Wybo)DigiPinguïns: van startknop naar desktop - UEFI, GRUB & systemd (Koen Wybo)
DigiPinguïns: van startknop naar desktop - UEFI, GRUB & systemd (Koen Wybo)
 
Dr. Douglas Marthaler - Rotavirus Epidemiology
Dr. Douglas Marthaler - Rotavirus EpidemiologyDr. Douglas Marthaler - Rotavirus Epidemiology
Dr. Douglas Marthaler - Rotavirus Epidemiology
 
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいことiOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
 
Chapter 3 Financial Instruments Financial Markets and Financial Institutions
Chapter 3 Financial Instruments Financial Markets and Financial InstitutionsChapter 3 Financial Instruments Financial Markets and Financial Institutions
Chapter 3 Financial Instruments Financial Markets and Financial Institutions
 
Exemplo de Plano Estratégico de TI - MEC
Exemplo de Plano Estratégico de TI - MECExemplo de Plano Estratégico de TI - MEC
Exemplo de Plano Estratégico de TI - MEC
 
Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介
 
Impulse and momentum(physics)
Impulse and momentum(physics)Impulse and momentum(physics)
Impulse and momentum(physics)
 
mruby を C# に 組み込んでみる
mruby を C# に 組み込んでみるmruby を C# に 組み込んでみる
mruby を C# に 組み込んでみる
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書く
 

Similar to SWIGでRubyバインディング

rvm でbundlerと仲良くする
rvm でbundlerと仲良くするrvm でbundlerと仲良くする
rvm でbundlerと仲良くするYukimitsu Izawa
 
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOWebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOKohei Noda
 
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会ConoHa, GMO INTERNET
 
次世代エンタープライズの開発環境をライブで読み解く
次世代エンタープライズの開発環境をライブで読み解く次世代エンタープライズの開発環境をライブで読み解く
次世代エンタープライズの開発環境をライブで読み解くShin Takeuchi
 
ioMemoryとAtomic Writeによるデータベース高速化
ioMemoryとAtomic Writeによるデータベース高速化ioMemoryとAtomic Writeによるデータベース高速化
ioMemoryとAtomic Writeによるデータベース高速化IIJ
 
Seminar report (Building a Linux server and AWS SDK for Ruby)
Seminar report (Building a Linux server and AWS SDK for Ruby)Seminar report (Building a Linux server and AWS SDK for Ruby)
Seminar report (Building a Linux server and AWS SDK for Ruby)Tamotsu Furuya
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法Masahito Zembutsu
 
Javascript で暗号化
Javascript で暗号化Javascript で暗号化
Javascript で暗号化suno88
 
ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012Tatsuhiko Kubo
 
Hyper → Highspeed → Development
Hyper → Highspeed → DevelopmentHyper → Highspeed → Development
Hyper → Highspeed → Developmentaktsk
 
Sugarcubeをはじめよう
SugarcubeをはじめようSugarcubeをはじめよう
SugarcubeをはじめようEihiro Saishu
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpMasahito Zembutsu
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む2bo 2bo
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶHiroshi Oyamada
 
Corona Handson #0
Corona Handson #0Corona Handson #0
Corona Handson #0Tetsuo Ono
 
2分でパッケージを作ってインストールする
2分でパッケージを作ってインストールする2分でパッケージを作ってインストールする
2分でパッケージを作ってインストールするTokorosawaYoshio
 

Similar to SWIGでRubyバインディング (20)

rvm でbundlerと仲良くする
rvm でbundlerと仲良くするrvm でbundlerと仲良くする
rvm でbundlerと仲良くする
 
らくちん Go言語
らくちん Go言語らくちん Go言語
らくちん Go言語
 
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOWebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
 
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
 
JUC2012
JUC2012JUC2012
JUC2012
 
次世代エンタープライズの開発環境をライブで読み解く
次世代エンタープライズの開発環境をライブで読み解く次世代エンタープライズの開発環境をライブで読み解く
次世代エンタープライズの開発環境をライブで読み解く
 
Aiming study#6pdf
Aiming study#6pdfAiming study#6pdf
Aiming study#6pdf
 
ioMemoryとAtomic Writeによるデータベース高速化
ioMemoryとAtomic Writeによるデータベース高速化ioMemoryとAtomic Writeによるデータベース高速化
ioMemoryとAtomic Writeによるデータベース高速化
 
Seminar report (Building a Linux server and AWS SDK for Ruby)
Seminar report (Building a Linux server and AWS SDK for Ruby)Seminar report (Building a Linux server and AWS SDK for Ruby)
Seminar report (Building a Linux server and AWS SDK for Ruby)
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
 
Javascript で暗号化
Javascript で暗号化Javascript で暗号化
Javascript で暗号化
 
ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012
 
Hyper → Highspeed → Development
Hyper → Highspeed → DevelopmentHyper → Highspeed → Development
Hyper → Highspeed → Development
 
Sugarcubeをはじめよう
SugarcubeをはじめようSugarcubeをはじめよう
Sugarcubeをはじめよう
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
 
Code Anything
Code AnythingCode Anything
Code Anything
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶ
 
Corona Handson #0
Corona Handson #0Corona Handson #0
Corona Handson #0
 
2分でパッケージを作ってインストールする
2分でパッケージを作ってインストールする2分でパッケージを作ってインストールする
2分でパッケージを作ってインストールする
 

More from Yukimitsu Izawa

IoTタグで遊んでみよう
IoTタグで遊んでみようIoTタグで遊んでみよう
IoTタグで遊んでみようYukimitsu Izawa
 
最新プロトコル HTT/2 とは
最新プロトコル HTT/2 とは最新プロトコル HTT/2 とは
最新プロトコル HTT/2 とはYukimitsu Izawa
 
RubyとEyeTribeで視線追跡をする
RubyとEyeTribeで視線追跡をするRubyとEyeTribeで視線追跡をする
RubyとEyeTribeで視線追跡をするYukimitsu Izawa
 
Rubyでオートマトン
RubyでオートマトンRubyでオートマトン
RubyでオートマトンYukimitsu Izawa
 
Octopress簡単スタートガイド
Octopress簡単スタートガイドOctopress簡単スタートガイド
Octopress簡単スタートガイドYukimitsu Izawa
 
RubyからFFIを使ってみた
RubyからFFIを使ってみたRubyからFFIを使ってみた
RubyからFFIを使ってみたYukimitsu Izawa
 
NTPを使ったDDoSについて
NTPを使ったDDoSについてNTPを使ったDDoSについて
NTPを使ったDDoSについてYukimitsu Izawa
 
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 Bootstrap3Yukimitsu Izawa
 
RVM with Server Environment
RVM with Server EnvironmentRVM with Server Environment
RVM with Server EnvironmentYukimitsu Izawa
 
MacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみたMacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみたYukimitsu Izawa
 

More from Yukimitsu Izawa (17)

IoTタグで遊んでみよう
IoTタグで遊んでみようIoTタグで遊んでみよう
IoTタグで遊んでみよう
 
docxをmdで書こう
docxをmdで書こうdocxをmdで書こう
docxをmdで書こう
 
最新プロトコル HTT/2 とは
最新プロトコル HTT/2 とは最新プロトコル HTT/2 とは
最新プロトコル HTT/2 とは
 
RubyとEyeTribeで視線追跡をする
RubyとEyeTribeで視線追跡をするRubyとEyeTribeで視線追跡をする
RubyとEyeTribeで視線追跡をする
 
Rubyでオートマトン
RubyでオートマトンRubyでオートマトン
Rubyでオートマトン
 
Ghissuesのご紹介
Ghissuesのご紹介Ghissuesのご紹介
Ghissuesのご紹介
 
Log-modeのご紹介
Log-modeのご紹介Log-modeのご紹介
Log-modeのご紹介
 
Octopress簡単スタートガイド
Octopress簡単スタートガイドOctopress簡単スタートガイド
Octopress簡単スタートガイド
 
RubyからFFIを使ってみた
RubyからFFIを使ってみたRubyからFFIを使ってみた
RubyからFFIを使ってみた
 
NTPを使ったDDoSについて
NTPを使ったDDoSについてNTPを使ったDDoSについて
NTPを使ったDDoSについて
 
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
 
テストとは
テストとはテストとは
テストとは
 
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
 
MacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみたMacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみた
 

Recently uploaded

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 

Recently uploaded (7)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 

SWIGでRubyバインディング

  • 1. SWIG で rubyバインディング Kanazawa.rb #4 LT 資料 井澤 ゆきみつ 「安心・安全・安定・信頼」できるインターネットサービスを 12年12月2日日曜日
  • 2. rubyバインディング • 特定のライブラリをrubyから使えるよう にすること。 • OpenCVもQtもなんでもかんでもrubyか ら使えるよね。 • 気になるライブラリがあるのに、rubyの gemが無いみたい…。 「安心・安全・安定・信頼」できるインターネットサービスを 2 12年12月2日日曜日
  • 3. rubyバインディング • 特定のライブラリをrubyから使えるよう にすること。 • OpenCVもQtもなんでもかんでもrubyか ら使えるよね。 • 気になるライブラリがあるのに、rubyの gemが無いみたい…。 そんな時は、SWIG  で作っちゃおう!! 「安心・安全・安定・信頼」できるインターネットサービスを 2 12年12月2日日曜日
  • 4. SWIGってなに? • Simplified  Wrapper  and  Interface  Generator • http://www.swig.org/ • 最新版は、2.0.8 • 対応⾔言語: C#,Java,Perl,PHP,Python,Ruby,Tclなど • brew  install  swig  でインスコできます。 「安心・安全・安定・信頼」できるインターネットサービスを 3 12年12月2日日曜日
  • 5. 試しに使ってみましょう。 • libpuzzleをruby  から使えるようにしてみ ます。 「安心・安全・安定・信頼」できるインターネットサービスを 4 12年12月2日日曜日
  • 6. libpuzzleとは? • 画像の類似度度を計算するライブラリ • http://www.pureftpd.org/project/ libpuzzle 「安心・安全・安定・信頼」できるインターネットサービスを 5 12年12月2日日曜日
  • 7. libpuzzleとは? (2) • ライブラリの最新版は、0.11 • brew  install  libpuzzleでインスコできま す。 • /usr/local/include/puzzle.h • /usr/local/lib/libpuzzle.{a,so,dyld} 「安心・安全・安定・信頼」できるインターネットサービスを 6 12年12月2日日曜日
  • 8. puzzle.i ファイルを作成する • ライブラリの関数をメソッドに変換するた めの情報を記述する。 %module  puzzle %{ #include  "/usr/local/include/puzzle.h" %} %include  /usr/local/include/puzzle.h 「安心・安全・安定・信頼」できるインターネットサービスを 7 12年12月2日日曜日
  • 9. SWIGを実行する • swigコマンドを実⾏行行して、ライブラリ・ ラッパー⽤用のソースを⽣生成する。 %  swig  -‐‑‒ruby  puzzle.i →puzzle_̲wrap.c  が⽣生成される。 「安心・安全・安定・信頼」できるインターネットサービスを 8 12年12月2日日曜日
  • 10. extconf.rb ファイルを作成する • そのマシンのruby  ⽤用のMakefileを作るた め。 require  "mkmf" $CFLAGS  +=  "  -‐‑‒Wall  " $LOCAL_̲LIBS  +=  "  -‐‑‒lpuzzle  " create_̲makefile("puzzle") 「安心・安全・安定・信頼」できるインターネットサービスを 9 12年12月2日日曜日
  • 11. Makefileを生成する • ruby  で  extconf.rb  を実⾏行行して  Makefile を⽣生成する。 %  ruby  extconf.rb →Makefile  が⽣生成される。 「安心・安全・安定・信頼」できるインターネットサービスを 10 12年12月2日日曜日
  • 12. ラッパー・ライブラリを生成する • make  を実⾏行行してコンパイルする。 %  make →puzzle.bundleが⽣生成される。 %  make  install →puzzle.bundleがruby  のsite_̲rubyの下に インスコされる。 「安心・安全・安定・信頼」できるインターネットサービスを 11 12年12月2日日曜日
  • 13. 実験:二つの画像の類似度を測ってみる • lena画像を⼆二つ⽤用意する lena-256x256.jpg lena-inpaint.jpg 「安心・安全・安定・信頼」できるインターネットサービスを 12 12年12月2日日曜日
  • 14. まずはC言語でライブラリを使ってみる #include  <puzzle.h> int  main(int  argc,  char  *argv[])  {    PuzzleContext  context;    PuzzleCvec  cvec1,  cvec2;      double  d;    puzzle_̲init_̲context(&context);    puzzle_̲init_̲cvec(&context,  &cvec1);    puzzle_̲init_̲cvec(&context,  &cvec2);    puzzle_̲fill_̲cvec_̲from_̲file(&context,  &cvec1,  "lena-‐‑‒256x256.jpg");    puzzle_̲fill_̲cvec_̲from_̲file(&context,  &cvec2,  "lena-‐‑‒inpaint.jpg");    d  =  puzzle_̲vector_̲normalized_̲distance(&context,  &cvec1,  &cvec2,  1);    printf("%fn",  d);        return  0; 「安心・安全・安定・信頼」できるインターネットサービスを 13 } 12年12月2日日曜日
  • 15. まずはC言語でライブラリを使ってみる (2) • コンパイルして実⾏行行する。 %  gcc  -‐‑‒I/usr/local/include  -‐‑‒L/usr/local/lib  test.c    -‐‑‒o   puzzle  -‐‑‒lpuzzle %  ./puzzle 0.379903 「安心・安全・安定・信頼」できるインターネットサービスを 14 12年12月2日日曜日
  • 16. 同じコードをRubyで書いてみる require  'puzzle' context  =  Puzzle::PuzzleContext.new                                                             cvec1  =  Puzzle::PuzzleCvec.new                                                                       cvec2  =  Puzzle::PuzzleCvec.new Puzzle::puzzle_̲init_̲context(context)                                                 Puzzle::puzzle_̲init_̲cvec(context,  cvec1)                                                     Puzzle::puzzle_̲init_̲cvec(context,  cvec2)                                                     Puzzle::puzzle_̲fill_̲cvec_̲from_̲file(context,  cvec1,  "lena-‐‑‒256x256.jpg")         Puzzle::puzzle_̲fill_̲cvec_̲from_̲file(context,  cvec2,  "lena-‐‑‒inpaint.jpg")     d  =  Puzzle::puzzle_̲vector_̲normalized_̲distance(context,  cvec1,  cvec2,  1) puts  d.to_̲s 「安心・安全・安定・信頼」できるインターネットサービスを 15 12年12月2日日曜日
  • 17. 同じコードをRubyで書いてみる (2) • 実⾏行行する。 %  ruby  test.rb 0.3799032317485305 「安心・安全・安定・信頼」できるインターネットサービスを 16 12年12月2日日曜日
  • 18. 同じコードをRubyで書いてみる (2) • 実⾏行行する。 %  ruby  test.rb 0.3799032317485305 Ruby  から  libpuzzle  を使えるようになった!! 「安心・安全・安定・信頼」できるインターネットサービスを 16 12年12月2日日曜日
  • 19. Thank  You! • If  you  have  any  comments, • please  send  to: • Mail:  izawa@izawa.org  /  izawa@clwit.co.jp • Twitter:  @Yukimitsu_̲Izawa 「安心・安全・安定・信頼」できるインターネットサービスを 17 12年12月2日日曜日