狠狠撸
Submit Search
狈驳颈苍虫で日本语入力を游んでみよう!
?
0 likes
?
1,853 views
Masahiko Hashimoto
Follow
node.js で Cannaライブラリのラッパーを作成しました
Read less
Read more
1 of 28
Download now
Download to read offline
More Related Content
狈驳颈苍虫で日本语入力を游んでみよう!
1.
1 Nginx で日本語入力を遊んでみよう! はしもとまさひこ オープンソースカンファレンス 2015
Hamanako 2015/2/11
2.
2 自己紹介 ● 東海道らぐ(Tokaido Linux
Usergroup)とかやってる人。 ● 某大学文学部日本文学文化学科卒 – ケータイメールの日本語研究もしてました ● 去年(?)から、おーぷん万葉を始めてます。 – 少しでも大学時代に学んだことを生かせればね!
3.
3 おーぷん万葉プロジェクトとは? ● 目的「自由な日本語入力環境を手に入れよう!」 ● 現状の問題点: – ビックデータと叫ばれる時代に、開発がアクティブで 自由にコミットメントできる日本語入力システムがない? ● 例:
mozc, Anthy... (但し、SKKを除く!) → そんな現状を打破したい!てのが目的です。
4.
4 直近の活動 ● Cannaをフォークして、Izumoを開発中! – Github:
https://github.com/hashimom/Izumo ● 変換システムに依存しない辞書を作成したい! – 昔は「Pubdic」ってありましたよね? – オープンデータを活用した辞書を作りたい! (例: Wikipediaとか)
5.
5 本日のトピック ● Cannaは新しい時代のかな漢字変換システム? – サーバークライアント型のシステム ●
Node.jsと連携させてみよう! – Cannaライブラリ呼び出し部分をC++で実装 – JavaScriptからライブラリを呼んでみよう ● さらにNginxと連携させてみよう! – 設定方法と実演
6.
6 ここでお詫び: (既に気づいたかもですが)本日のタイトルは、、、 「Nginxで日本語入力を遊んでみよう」 ではなく 「Node.jsで日本語入力を遊んでみよう」 みたいな感じになってしまいましたm(_ _)m
7.
7 Cannaとは? ● 1989年にNECが開発したかな漢字変換システム ● 現在はオープンソースとなっている – MITライセンス →
Izumoのフォーク元 ● が、残念ながら開発停止状態orz – 最後のリリースは2004年。 (MLで呼びかけても返事がない???)
8.
8 外部のPC CannaがインストールされたPC クライアントアプリ (ユーザーが入力) Cannalib Cannaはサーバークライアント型! Cannaserver (サーバー) UNIXドメイン ソケット クライアントアプリ (ユーザーが入力)Cannalib TCPで接続 ですが、デフォルトでは無効になっています ※恐らくセキュリティ的な理由
9.
9 Cannaがサーバーってことは… ● 常にどこでも同じ環境の日本語入力ができる! – これって今時の「クラウド」だ!!!(ぇ? ● がしかし、そもそも「通信暗号化」が考慮されてない – 通信が丸見え。→誰が何を入力したかバレバレ –
結局使えるのはUNIXドメインソケットのみ – ローカルPCでのみとか、サーバーの意味なくね? ● ようは、通信を暗号化すればいいんでしょ?
10.
10 外部のPC CannaがインストールされたPC クライアントアプリ (ユーザーが入力) Cannalib そしたらこんなのはどうだ! Cannaserver改? (サーバー) UNIXドメイン ソケット クライアントアプリ (ユーザーが入力) Cannalib 改 Nginx リバースプロキシ HTTPS
11.
11 さてどうだろう? ● おそらく、「可能」だろう。 – 試してないです。。。 却下した理由: – 環境構築がちょっと複雑 –
クライアント?サーバー側にもSSL対応が必要 ● 実装も大変ですね…
12.
12 外部のPC CannaがインストールされたPC クライアントアプリ (ユーザーが入力) Cannalib そして、(今回は)こうなった! Cannaserver (サーバー) UNIXドメイン ソケット クライアントアプリ (ユーザーが入力) NginxNode.js リバースプロキシ HTTP(S)Cannalib
13.
13 利点 ● 実装する箇所はNode.jsの箇所のみ! – 既存のクライアントライブラリもそのまま使える! –
コード行数も少ない! ● SSL通信に関してはNode.jsに任せられる – cannaサーバーには手を入れずに済む ※今回の実験はHTTP(暗号化前)までですが。。。
14.
14 んじゃNode.jsのとこを実装してみよう ● Node.jsのC++アドオン作成して、そこから Cannaのクライアントライブラリを呼んでみます。 ● サンプルコードも本家日本語サイトにあるので、 まずはそこからえいっと持ってこよう! ● あっさり書けた! 動かしてみよう!!! …あれれ~、動かないぞ~!?? (それ以前にビルドが通らん!!!(^^;
15.
15 ビルドが通らない…ってことは ● 理由は単純 「本家日本語サイトは全然翻訳されてません」orz URL: http://nodejs.jp/ ←ここのこと。 – Ver.
0.10とか書いてながら、そのバージョンでは ビルドも通らないものが載ってたりします。 – 今翻訳に関わってる暇ないのだorz (申し訳ね~×2) ● てわけで、githubにあるサンプルを利用しましょう! – URL: https://github.com/rvagg/node-addon-examples
16.
16 今回実装した範囲 (Node.js) 今回はこんなサンプルを作ります app.js Index.html 自作 C++アドオン (既存) Cannalib ブラウザが ダウンロード ファイル 読み込み オブジェクト生成 (require) 関数コール (動的リンク) 入力:ローマ字 watasinonamaehanakanodesu 出力:JSON {“kana”:”わたしのなまえはなかのです”, “Kanj”:”私の名前は中野です”}
17.
17 どんな実装? ソースを読んでね!(ぇ? https://github.com/hashimom/node-canna ※気になる点がございましたら ブースに来ていただけたら返答致しますm(_ _)m
18.
18 C++の実装 ● JavaScriptについては、私よりもぐーぐるたんに 聞いていただけたらよろしいかと思います^^; ● C++の肝となるのは「binding.gyp」というファイル {
"targets": [ { "target_name": "node_canna", "sources": [ "src/mod_node_canna.cc", "src/nodecanna.cc", "src/cannasession.cc" ], "link_settings": { "libraries" : [ "-lcanna"] } } ] } JSONで書かれたMakefileみたいですね 下記のコマンドでビルドします。 node-gyp configure node-gyp build こんな感じで 共有ライブラリ(libcanna)をリンクします
19.
19 実はちょっとした仕掛けが組まれてます ● 単純に、Requestが来たらResponseを返す という実装だと、どこか面白みないかな~と。 – 通信速度的にもボトルネックになるかも??? ● というわけで、少し仕掛けを作ってみました –
正确には今回狈辞诲别.箩蝉にした理由はこれだったりします
20.
20 新しい日本語入力として提案 WebSocketを使ってみよう!
21.
21 WebSocketとは? ● RFC 6455で定義されている新しい通信規格 ● 一度コネクションをはってしまえば つなぎっぱなしという双方向通信の規格です。 クライアント
サーバー リクエスト レスポンス (Upgrade) 通信確立 どちらから送信してもOK
22.
22 これを使えば日本語変換が速くなる? ● もともとCannaには「逐次変換機能」というものが 実装されています。 ● 逐次変換機能と、WebSocketを使えば、 入力と非同期で変換結果が返ってくるはず。 …が、今回はそこまで辿り着けませんでしたorz Cannaライブラリについて少し研究が必要です。 →近いことはできたかも?
23.
23 Nginxについて ● Nginxをリバースプロキシとして利用します。 – 「http://(IPアドレス):(Node.jsのポート番号)」ではなく 「http://(IPアドレス)」のみでアクセスできるようにします –
Nginx 1.3からWebsocketに対応してます server { listen 80; server_name localhost; location / { proxy_pass http://localhost:3000/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } こんな感じの設定が必要です。
24.
24 実演…の前に ● 今回の実演には、BeagleBoneBlackを使います。 – クライアント側ではなく、サーバー側ですw ●
microSDにはDebianがインストールされています その場合の注意点は以下のとおり。 – Nginxはセルフビルド(バージョンが古かったため) – Node.jsもセルフビルド(パッケージがない) Node.jsのビルド前のconfigureは 「./configure –without-snapshot」で実行する! (ARMの場合は必須なの???) うまくいけば
25.
25 それではお待ちかね! 実演です。
26.
26 今後の課題(Izumoの取り組み) ● WebSocketと逐次変換はぜひやってみたい! – ただし、Node.jsを使う必要は???(ちょっとね) –
WebSocket使いたい場合は、Javaの方がいいかも? – WebSocketだとサーバー側はマルチスレッド必須? ● JSONもいいが、速度を出すならバイナリ転送? – 元々Cannaプロトコルはバイナリプロトコル – 但し、アプリ連携を考えたらJSONか?
27.
27 おーぷん万葉からお願い 日頃、日本語入力を利用していて 普段思っていることを是非ご連絡ください – フォーラム: https://groups.google.com/d/forum/openmanyo どんな話題でもOKです! コミュニティの力で新しい形の 日本語変換システムが作れたらと考えています。 よろしくお願いいたします!!!
28.
28 ご清聴、ありがとうございました! 次回予告: 2015/2/28 OSC東京
LT大会 「アヒルヤキを変換してみよう」 (通ればね…)
Download