• Like
Tokyo Sky Tree
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,420
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 東京スカイツリー ~Grailsとボクと、時々、ネイティブ・ライブラリ~ 2010/07/24
  • 2. 余談ですが タイトルは、リリー・フランキーの 小説『東京タワー ~オカンとボク と、時々、オトン~』のパクリで す。
  • 3. 自己紹介
  • 4. 名前: 杉浦孝博 twitter: @touchez_du_bois
  • 5. ここから本題
  • 6. Javaにない機能を使いた い時。
  • 7. レガシーシステムと連携 したい時。
  • 8. ネイティブ・ライブラリ がすでにある時。
  • 9. どうしますか?
  • 10. まず思い付くのは、
  • 11. JNI(Java Native Inteface)
  • 12. だと思います。
  • 13. ですが、JNIを使う場合、
  • 14. ●javahでC/C++のヘッダファイ ルを作成 ●C/C++でネイティブコードを記 述 ●ネイティブコードをコンパイル して共有ライブラリを作成
  • 15. とかする必要がありま す。
  • 16. う~ん・・・ 面倒(´・ω・`)
  • 17. そんなあなたにオススメ なのが、こちら。
  • 18. JNA(Java Native Access)
  • 19. JNAとは、
  • 20. 直接JNIを使用せず に、Javaからネイティ ブ・ライブラリに(割と)楽 にアクセス出来るライブ ラリ
  • 21. と言えます。
  • 22. ネイティブ・ライブラリ にアクセスするのに作成 するのは、基本的に
  • 23. JavaのInterface
  • 24. だけとなります。
  • 25. サポートするプラット フォームも幅広く、
  • 26. ●Windows (x86、x86_64) ●Linux (x86、x86_64) ●FreeBSD / OpenBSD (x86、x86_64) ●Solaris (x86、x86_64、SPARC、 SPARC V9) ●Mac OS X (PPC、x86、x86_64)
  • 27. と、マルチプラット フォーム向けのアプリ ケーション開発にも向い ています。
  • 28. では、例を見てみましょ う。
  • 29. 数時間前に紹介されてし まいましたが、
  • 30. 身近なところでJNAが使わ れていますので、その ソースを参考に。
  • 31. それは、数時間前に上原 さんと中野さんが紹介さ れた、
  • 32. GroovyServ
  • 33. です。
  • 34. 中野さんが少し説明され ましたが、
  • 35. 気にしない、気にしな い。
  • 36. まずは、ネイティブ・ラ イブラリのインタフェー スとなるJavaのInteface です。
  • 37. import com.sun.jna.Library import com.sun.jna.Native import com.sun.jna.Platform interface CLibrary extends Library { String libname = (Platform.isWindows() ? "msvcrt" : "c") CLibrary INSTANCE = Native.loadLibrary(libname, CLibrary.class) int chdir(String dir) int _chdir(String dir) }
  • 38. ネイティブ・ライブラリをロードしま す。プラットフォームに応じてロード するライブラリ名を変えています。 String libname = (Platform.isWindows() ? "msvcrt" : "c") CLibrary INSTANCE = Native.loadLibrary(libname, CLibrary.class)
  • 39. システムコールなどをマッピングしま す。プラットフォームごとに名前が異 なるので、別々に定義します。 int chdir(String dir) // UNIX系 int _chdir(String dir) // Windows
  • 40. マッピングでは、名前と型をJavaにあ わせます。 // UNIX系・システムコール int chdir(const char *path);    ↓ int chdir(String path);
  • 41. 次は、呼び出す側のソー スです。
  • 42. class PlatformMethods { static chdir(String dir) { if (Platform.isWindows()) { CLibrary.INSTANCE._chdir(dir) } else { CLibrary.INSTANCE.chdir(dir) } } }
  • 43. プラットフォームに応じて呼び出すメ ソッドを変えています。 if (Platform.isWindows()) { CLibrary.INSTANCE._chdir(dir) } else { CLibrary.INSTANCE.chdir(dir) }
  • 44. 説明だけではアレですの で、
  • 45. JNAを使ったデモします。
  • 46. このデモでは、以前 Twitter上で
  • 47. と募集したところ、
  • 48. やさぐれ番長さんから
  • 49. ...噛みました...
  • 50. やさぐれ番長@bikisuke さんから
  • 51. と、ムチャぶりが、
  • 52. ...噛みました...
  • 53. と、ムチャぶりリクエス トがありましたが、
  • 54. 少しだけリクエストに答 えたいと思います。
  • 55. (デモ中)
  • 56. 照れるので、代わりに 語ってもらいました。
  • 57. 大事なことなので二回 語ってもらいました。
  • 58. デモの説明をします。
  • 59. Webブラウザからサーバ に、文字列を送信しま す。
  • 60. サーバで次のことをしま す。 ●送られてきた文字列を形態素解析し、 音声記号列を生成 ●音声記号列から音声合成(WAV) ●WAVデータをクライアントに返す
  • 61. WebブラウザでWAVデー タを再生
  • 62. デモの構成
  • 63. Webアプリ Grails 1.3.3(Tomcat)
  • 64. 形態素解析 Sen + IPA辞書
  • 65. 音声合成 AquesTalk2 ●非営利の個人利用は無償 ●複数のプラットフォームに対応(Windows, Linux, Mac, iPhone, Android)
  • 66. WAVデータ再生 Firefox + HTML5のAudioクラス FlashとかAppletとかは使ってませ ん。
  • 67. AquesTalk2(ネイティブ・ラ イブラリ)の呼び出し JNA
  • 68. ちなみに 「形態素解析 + 音声合成」は、 Grailsプラグイン化しています。
  • 69. 今後は、
  • 70. ↓この人にも対応したいです。
  • 71. と、いうわけで、まとめ 的な。
  • 72. Javaからネイティブ・ラ イブラリを使うようなこ とがあれば、
  • 73. ポインタ、ポインタのポ インタ、参照渡し、構造 体、共用体、関数ポイン タ、などなど、いろいろ とありますが、
  • 74. JNAを検討してみてくださ い。
  • 75. 以上、ご清聴ありがとう ございました。