Tokyo Sky Tree

1,870 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,870
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Tokyo Sky Tree

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

×