SlideShare a Scribd company logo
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 Epidemiology
John 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 Institutions
Dr. 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 - MEC
Fernando 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
 
Aiming study#6pdf
Aiming study#6pdfAiming study#6pdf
Aiming study#6pdf
Koutaro Chikuba
 
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 → Development
aktsk
 
Sugarcubeをはじめよう
SugarcubeをはじめようSugarcubeをはじめよう
SugarcubeをはじめようEihiro Saishu
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
Masahito Zembutsu
 
Code Anything
Code AnythingCode Anything
Code Anything
Yoshitaka Kawashima
 
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 #0
Tetsuo 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
 
docxをmdで書こう
docxをmdで書こうdocxをmdで書こう
docxをmdで書こう
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
 
Ghissuesのご紹介
Ghissuesのご紹介Ghissuesのご紹介
Ghissuesのご紹介
Yukimitsu Izawa
 
Log-modeのご紹介
Log-modeのご紹介Log-modeのご紹介
Log-modeのご紹介
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
 
テストとは
テストとはテストとは
テストとは
Yukimitsu Izawa
 
RubyでDSL
RubyでDSLRubyでDSL
RubyでDSL
Yukimitsu Izawa
 
RVM with Server Environment
RVM with Server EnvironmentRVM with Server Environment
RVM with Server Environment
Yukimitsu 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

LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 

Recently uploaded (14)

LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 

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日日曜日