SlideShare une entreprise Scribd logo
1  sur  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日日曜日

Contenu connexe

En vedette

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
 

En vedette (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 で高速なプログラムを書く
 

Similaire à 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
 

Similaire à 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分でパッケージを作ってインストールする
 

Plus de 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
 

Plus de 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のアプリを作ってみた
 

Dernier

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 

Dernier (9)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 

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