2013年9月12日木曜日

Percona Server 5.6.13 で mroonga を使ってみた - CentOS 6 64bit

Percona Serverのインストールは省略。

・Perconaはレポジトリから。mroongaコンパイルのために同一バージョンのソースコードが必要になる。
・groonga、groonga-normalizer-mysql、groonga-normalizer-mysql-devel はレポジトリから。
・mroongaもコンパイルする。


--- Percona Server ソースコードの用意(コンパイルはしない)
# ここで最新版のソースコードを確認する
# http://www.percona.com/downloads/Percona-Server-5.6/LATEST/source/

wget http://www.percona.com/redir/downloads/Percona-Server-5.6/LATEST/source/Percona-Server-5.6.13-rc60.5.tar.gz
gtar xfz Percona-Server-5.6.13-rc60.5.tar.gz


--- mroonga ソースコードの用意(groongaを入れてからコンパイルする)
# ここで最新版のソースコードを確認する
# http://packages.groonga.org/source/mroonga/

wget http://packages.groonga.org/source/mroonga/mroonga-3.07.tar.gz
gtar fxz mroonga-3.07.tar.gz


--- groonga インストール
rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
yum makecache
yum install -y groonga groonga-devel
--- MeCabトークナイザインストール
yum install -y groonga-tokenizer-mecab
--- ipadicインストールはMeCabトークナイザと共に入る
yum install -y mecab-ipadic
--- utf8_general_ciを使う
yum install -n groonga-normalizer-mysql groonga-normalizer-mysql-devel


--- mroonga インストール
yum install gcc
yum install gcc-c++
cd mroonga-3.07

env GROONGA_CFLAGS="-I/usr/include/groonga" GROONGA_LIBS="-L/usr/lib64 -lgroonga" ./configure --with-mysql-source=../Percona-Server-5.6.13-rc60.5

make install
mysql -uroot -p -e "INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so'"
mysql -uroot -p -e "CREATE FUNCTION last_insert_grn_id RETURNS INTEGER SONAME 'ha_mroonga.so'"
mysql -uroot -p -e "CREATE FUNCTION mroonga_snippet RETURNS STRING SONAME 'ha_mroonga.so'"
mysql -uroot -p -e "CREATE FUNCTION mroonga_command RETURNS STRING SONAME 'ha_mroonga.so'"

おしまい。


////////////////////////////////////////
動作確認

--- テーブル作成
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`table1`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`table1` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `table1col` TEXT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT INDEX `index2` (`table1col` ASC))
ENGINE = mroonga;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;


--- INSERT
INSERT INTO `mydb`.`table1` (`table1col`) VALUES ('いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす');
INSERT INTO `mydb`.`table1` (`table1col`) VALUES ('あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやいゆえよらりるれろわゐうゑを');

--- SELECT
SELECT (@HOGE := MATCH(table1col) AGAINST('あいうえお あ' IN BOOLEAN MODE)) AS point, id, table1col FROM table1 WHERE @HOGE ORDER BY point DESC


WHERE @HOGEのところが本来はMATCH(table1col) AGAINST('あいうえお あ' IN BOOLEAN MODE) となるところなんだけど、マッチ度も表示してみたので2度書かなくて済むように@HOGEという別名で扱っている。

エラーもワーニングも無く動作したのでおしまい。

追記 2013/09/30:
初めて使う時にWHERE @HOGE だと検索に引っかからないので、
WHERE MATCH(table1col) AGAINST('あいうえお あ' IN BOOLEAN MODE)
と記述しておいた方がいいようです。


////////////////////////////////////////
省略したPercona Serverのインストール方法。

--- Percona Server 5.6
# MySQLはアンインストールしておく。
rpm --import http://www.percona.com/downloads/RPM-GPG-KEY-percona
rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
# shared-compatは5.5と5.6で同じ。ただ将来的に5.6の名前を用意するかもしれない。
yum install Percona-Server-{client,devel,server,shared}-56
yum install Percona-Server-shared-compat

service mysql start

chkconfig mysql on

--- $HOME/.mysql_secretに初期rootパスワードが書いてある
cat /root/.mysql_secret
mysql -uroot -p

mysql> SET PASSWORD FOR root@localhost=PASSWORD('hoge');
mysql> exit

--- MySQL5.6での my.cnf はこちら
cat /usr/my.cnf

--- 古い /etc/my.cnf は消しておく
mv /etc/my.cnf /etc/my.cnf.old

--- mysql upgrade/update ここはやらなくてもいい。
mysqlcheck -uroot -p --check-upgrade --all-databases --auto-repair
mysql_upgrade -uroot -p


yum list | grep Percona
Percona-Server-client-56.x86_64         5.6.13-rc60.5.417.rhel6         @percona
Percona-Server-devel-56.x86_64          5.6.13-rc60.5.417.rhel6         @percona
Percona-Server-server-56.x86_64         5.6.13-rc60.5.417.rhel6         @percona
Percona-Server-shared-56.x86_64         5.6.13-rc60.5.417.rhel6         @percona
Percona-Server-shared-compat.x86_64     5.5.33-rel31.1.566.rhel6        @percona
...


--- おまけ
groonga-normalizer-mysql-devel が無いとSQL実行時に
Error Code: 138. NormalizerMySQLGeneralCI normalizer isn't found for utf8_general_ci. Install groonga-normalizer-mysql normalizer. NormalizerAuto is used as fallback.
というエラーやワーニングが出ます。
groonga-normalizer-mysql-devel をインストールしてから mroonga をコンパイルすることで解決できます。
pkg-config --list-all | grep groonga-normalizer-mysql
を実行すると、pkg-config で groonga-normalizer-mysql が見つかるか確認できます。
また、 mroonga の configure 実行時に
checking for groonga-normalizer-mysql... yes
を見ることで確認できます。

2013年9月2日月曜日

Blenderで作ったモデルをスマフォブラウザで表示しよう!

みなさん、こんにちは!
GClueの下っ端社員の星です。

今回は、弊社で作成中のライブラリを使ってBlenderで作ったモデル(objファイルを表示してみたいと思います!!

Blenderは、フリーのモデリングツールです。
こちらからダウンロードできますので、興味がある方はダウンロードしてみてください。
http://www.blender.org/download


Blenderで、以下のようなモデルを作成しました。
詳しい操作の仕方は、他のサイト様を探せば出てきますので、そちらで覚えて下さい。
以下の画像で、上の図がモデルにマッピングされたテクスチャで、下が作成したモデルになります。
 汚らしい出来で申し訳ないです^^;

テクスチャを出力する場合は、Blenderの標準のやり方でいいのですが、objファイルを出力する場合は、こつがいります。
 以下のように項目を設定します。
左の赤枠のチェック項目で、以下にあげる項目を設定します。

  • Apply Modifiers
  • Include Edges
  • Include Normals
  • Include UVs
  • Triangulate Faces
  • Object as OBJ Object
その状態でExport Objをクリックしてobjファイルを生成します。
そして、テクスチャファイルとobjファイルを以下のようにCloud9にアップします。 
そして、index.htmlをPreviewし、そのアドレスをスマートフォンのブラウザ(Chrome)で実行した結果が以下のようになりました。ちなみに、Nexus7を使用しました。


まとめ

  • 簡単なモデルを弊社ライブラリを使ってスマフォブラウザ上で表示できた。
  • テクスチャが1枚だけ、objファイルの出力に制限があるが、スマートフォンのブラウザのスペックにも制限があるであろうし、別に気にならないほどのものではないだろうか?