南東京i phone勉強会(stidev) 20101030

36
iPhoneで全文検索してみた OSSライブラリを活用しよう わたなべかずひろ@kaz_29 2010118日月曜日

Upload: kazuhiro-watanabe

Post on 28-May-2015

766 views

Category:

Technology


4 download

DESCRIPTION

iPhoneで全文検索

TRANSCRIPT

Page 1: 南東京I phone勉強会(stidev) 20101030

iPhoneで全文検索してみたOSSライブラリを活用しよう

わたなべかずひろ@kaz_29

2010年11月8日月曜日

Page 2: 南東京I phone勉強会(stidev) 20101030

もくじ

自己紹介

OSSライブラリをiPhone用にコンパイルする方法

実際に使ってみる

おまけ

2010年11月8日月曜日

Page 3: 南東京I phone勉強会(stidev) 20101030

もくじ

自己紹介

OSSライブラリをiPhone用にコンパイルする方法

実際に使ってみる

おまけ

2010年11月8日月曜日

Page 4: 南東京I phone勉強会(stidev) 20101030

自己紹介わたなべかずひろ株式会社イーツー(E2)主にWeb系の受託開発会社公式サイトとか携帯CMSとか作ってます

id:kaz_29(kaz29)#iphonedev #cakephp #lithium #php #golf #cat #beer

2010年11月8日月曜日

Page 5: 南東京I phone勉強会(stidev) 20101030

宣伝です!

2010年11月8日月曜日

Page 6: 南東京I phone勉強会(stidev) 20101030

NIFTY Cloud Manager

http://iphone.e-2.co.jp/

2010年11月8日月曜日

Page 7: 南東京I phone勉強会(stidev) 20101030

C/C++のライブラリをiPhoneに組み込んで使っている人?

2010年11月8日月曜日

Page 8: 南東京I phone勉強会(stidev) 20101030

ライブラリ?ライブラリは、汎用性の高い複数のプログラムを、再利用可能な形でひとまとまりにしたものである。一般にライブラリは、それ単体ではプログラムとして動作させることはできないので実行ファイルではない。ライブラリは他のプログラムに何らかの機能を提供するコードの集まりと言うことができる。ソースコードの場合と、オブジェクトコード、あるいは専用の形式を用いる場合とがある。たとえば、UNIXのライブラリはオブジェクトコードをarと呼ばれるアーカイバでひとまとめにして利用する。

http://jp.wikipedia.org/wiki/ライブラリ

2010年11月8日月曜日

Page 9: 南東京I phone勉強会(stidev) 20101030

SDKにも入ってますlibiconv.dylib ~ 文字コード変換

libmecab_em.dylib ~ 形態素解析エンジン(em=サブセット?)

libncurses.dylib ~ TextUI用ライブラリ

libresolv.dylib ~ DNSリゾルバ

libsqlite3.dylib ~ SQLiteライブラリ

libxml2.dylib ~ XMLパーサー

2010年11月8日月曜日

Page 10: 南東京I phone勉強会(stidev) 20101030

先達の英知を使わない手は無い!

2010年11月8日月曜日

Page 11: 南東京I phone勉強会(stidev) 20101030

もくじ

自己紹介

OSSライブラリをiPhone用にコンパイルする方法

実際に使ってみる

おまけ

2010年11月8日月曜日

Page 12: 南東京I phone勉強会(stidev) 20101030

gccを使います

2010年11月8日月曜日

Page 13: 南東京I phone勉強会(stidev) 20101030

OSSプロダクトのコンパイル

tar xvfz hoge-x.y.z.tar.gz

cd hoge-x.y.z

./configure

make

make install

2010年11月8日月曜日

Page 14: 南東京I phone勉強会(stidev) 20101030

iPhone用にコンパイルする場合

tar xvfz hoge-x.y.z.tar.gz

cd hoge-x.y.z

./configure いろいろオプションをつける

# Makefileを編集する

make

make install

# 出来上がったライブラリとヘッダーをプロジェクトに追加

2010年11月8日月曜日

Page 15: 南東京I phone勉強会(stidev) 20101030

全文検索エンジンHyper Estraierの例

http://fallabs.com/hyperestraier/

2010年11月8日月曜日

Page 16: 南東京I phone勉強会(stidev) 20101030

configureの指定$ ./configure --prefix=/usr/local/iphone \

CC=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 \

CFLAGS=-arch i386

-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk

-I/usr/local/iphone/include -L/usr/local/iphone/lib

CPP=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 \

AR=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/ar

2010年11月8日月曜日

Page 17: 南東京I phone勉強会(stidev) 20101030

configureの指定$ ./configure --prefix=/usr/local/iphone \

CC=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 \

CFLAGS=-arch i386

-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk

-I/usr/local/iphone/include -L/usr/local/iphone/lib

CPP=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 \

AR=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/ar

インストール先を指定2010年11月8日月曜日

Page 18: 南東京I phone勉強会(stidev) 20101030

configureの指定$ ./configure --prefix=/usr/local/iphone \

CC=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 \

CFLAGS=-arch i386

-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk

-I/usr/local/iphone/include -L/usr/local/iphone/lib

CPP=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 \

AR=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/ar

Cコンパイラを指定2010年11月8日月曜日

Page 19: 南東京I phone勉強会(stidev) 20101030

configureの指定$ ./configure --prefix=/usr/local/iphone \

CC=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 \

CFLAGS=-arch i386

-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk

-I/usr/local/iphone/include -L/usr/local/iphone/lib

CPP=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 \

AR=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/ar

Cコンパイル設定を指定2010年11月8日月曜日

Page 20: 南東京I phone勉強会(stidev) 20101030

configureの指定$ ./configure --prefix=/usr/local/iphone \

CC=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 \

CFLAGS=-arch i386

-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk

-I/usr/local/iphone/include -L/usr/local/iphone/lib

CPP=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 \

AR=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/ar

C++コンパイラを指定2010年11月8日月曜日

Page 21: 南東京I phone勉強会(stidev) 20101030

configureの指定$ ./configure --prefix=/usr/local/iphone \

CC=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 \

CFLAGS=-arch i386

-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk

-I/usr/local/iphone/include -L/usr/local/iphone/lib

CPP=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 \

AR=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/ar

アーカイブツールを指定2010年11月8日月曜日

Page 22: 南東京I phone勉強会(stidev) 20101030

Makefileの編集# Simurator用

CC = /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2

AR = /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/ar

CFLAGS = -arch i386 -Wall -fPIC -fsigned-char -O3 -fomit-frame-pointer \

 -fforce-addr

# Device用

CC = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2

AR = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar

CFLAGS = -isysroot /Developer-SDK402/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk \

-arch armv6 -Wall -fPIC -fsigned-char -O3 -fomit-frame-pointer -fforce-addr

2010年11月8日月曜日

Page 23: 南東京I phone勉強会(stidev) 20101030

include,libsをコピー

2010年11月8日月曜日

Page 24: 南東京I phone勉強会(stidev) 20101030

ライブラリをプロジェクトに追加

device用

simulator用

2010年11月8日月曜日

Page 25: 南東京I phone勉強会(stidev) 20101030

コンパイルについてのまとめ

CC,CPP,ARなどの使用するツールをSDKの物に変更

CFLAGS

-arch i386(or armv6)でターゲットを指定

-isysroot で使用する rootディレクトリを指定

-I,-Lでインクルードパス、ライブラリパスを追加

2010年11月8日月曜日

Page 26: 南東京I phone勉強会(stidev) 20101030

物によってはもっと細かく調整しないといけない物も...

2010年11月8日月曜日

Page 27: 南東京I phone勉強会(stidev) 20101030

もくじ

自己紹介

OSSライブラリをiPhone用にコンパイルする方法

実際に使ってみる

おまけ

2010年11月8日月曜日

Page 28: 南東京I phone勉強会(stidev) 20101030

インデックスの作成

estcmd gather -il ja -sd /hoge/index /hoge/source

2010年11月8日月曜日

Page 29: 南東京I phone勉強会(stidev) 20101030

検索の準備

/* dbをオープン */

if (!(db = est_db_open((const char*)cdataPath, ESTDBREADER, &ecode))){ return ;

}/* 検索条件オブジェクトを生成する */

cond = est_cond_new();

NSInteger length = sizeof(searchkey);/* 検索条件オブジェクトに検索式を設定する */

[searchBar.text getCString:(char*)searchkey maxLength:length encoding:NSUTF8StringEncoding];est_cond_set_phrase(cond, searchkey);

CBMAP *hints;hints = cbmapopenex(MINIBNUM);/* 実際に取得する数を設定 */

est_cond_set_max(cond, 30) ;

2010年11月8日月曜日

Page 30: 南東京I phone勉強会(stidev) 20101030

検索/結果取得/* データベースから検索結果を得る */

result = est_db_search(db, cond, &resnum, hints);/* ヒット数を取得 */

numHits = (rp = cbmapget(hints, "", 0, NULL)) ? atoi(rp) : resnum;

/* 各該当文書を取得して表示する */

for(i = 0; i < resnum; i++){/* 文書オブジェクトを取得する */

if(!(doc = est_db_get_doc(db, result[i], 0))) continue;if((tmptitle = est_doc_attr(doc, "@title")) != NULL) {

NSLog(@"Title: %s\n", tmptitle);}

}

2010年11月8日月曜日

Page 31: 南東京I phone勉強会(stidev) 20101030

Demo

2010年11月8日月曜日

Page 32: 南東京I phone勉強会(stidev) 20101030

Demo Data

10,796 html filestotal size 75Mindex size 27M(include compressed text)

PHP Manual

2010年11月8日月曜日

Page 33: 南東京I phone勉強会(stidev) 20101030

もくじ

自己紹介

OSSライブラリをiPhone用にコンパイルする方法

実際に使ってみる

おまけ

2010年11月8日月曜日

Page 34: 南東京I phone勉強会(stidev) 20101030

NIFTY Cloud Managerの例

SOAP認証用にOpenSSLを使用

秘密鍵、クライアント証明を使ってxmlに署名

ライブラリごとに使用手順がある

メモリーリークの試験は念入りに

2010年11月8日月曜日

Page 35: 南東京I phone勉強会(stidev) 20101030

ライセンスには注意して!

2010年11月8日月曜日

Page 36: 南東京I phone勉強会(stidev) 20101030

ご清聴ありがとうございました(><)

2010年11月8日月曜日