goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

JavaFX Nightをきいてきた

2014-11-25 21:15:33 | JavaとWeb
11月25日のJavaFX Nightをきいてきた!内容メモメモ



■JavaFXにダイアログがやってくる 蓮沼さん
JavaFX 8 update 40
・これまでダイアログがなかった
入ってくるダイアログ
  Alert
  TextInputDialog
  ChoiceDialog
  スーパークラス:Dialog→拡張で、独自ダイアログも
・Alert Information:ヘッダーテキスト、コンテキストテキスト
・Alert Warning
・Alert Error
・Alert Confirmation:ボタン2とOKと取消
・Alert None:アイコン、ボタンを追加
・TextInputDialog:
・ChoiceDialog:

使い方
・Stageの代わり
・コントローラークラスの中で、イベント処理をやっているとき
 ユーザーに応答を求めるとき
・showAndWait();戻り値オプショナル
・show();戻り値void
・DialogPane野中に、HeaderText,ContentText,Graphic,ButtonTypes
コード
 Alert alert = new Alert(INFORMATION);
 プロパティ設定

 値
 Optional<ButtonType> result = alert.showAndWait();

戻り値
 Alert ButtonType→9種類
 TextInputDialog String
 ChoiceBox 選んだアイテムの型

Tips
(1)alert.setHeaderText(null);

(2)サイズを変えたい
 alert.getDialogPane().setPrefSize(400,0,300,0);

(3)ウィンドウが要らないとき
Stageを開かないでDialog

まとめ
・Dialogとサブクラス
・Stageと同じようだけど、違う
・まずダイアログを作ってshowAndWait
・アドベンとカレンダー8日目
・スライドシェア、21:00にアップ
 www.slideshare.net/btnrouge/javafx-dialogs




JavaFX アドベントカレンダー

■Heapstats loves JavaFX
・HeapStats
 Javaの生涯解析支援&監視ツール
 エージェントの性能
 →置き去りにされたアナライザ
・HeapStatsFXAnalyzer
  Java8(Lambda,StreamAPI)
  プラガブル
  コミニティドリブン
・なぜJavaFX8
 Swingnodeが使いたい
・主な機能
  FXML
  Chart
  Task
  国際化
・構成
 Heapstats1.0相当のアナライザ
 プラグインで機能拡張
・Heapstatsのプラグイン
  FXMLを含むJar形式
 プラグインにはタブが与えられる
 FXMLの含まれるパッケージ名を設定してlibにいれておく
・プラグインがよばれるまで
  クラスローダーの設定
  リソースバンドル指定
  staticでないロード
・プラグインコントローラー
  プラグインは継承する必要アリ
  最小限の機能、インターフェース
・データの受け渡し
  各プラグインのコントローラーに直接アクセス
  →親ウィンドウのコントローラから取得できる

・RefTreePlugin
  Swingnodeで実装、要JGraphX

・JVMLive
  JDPを使って、ネットワーク上のJVMを自動ルックアップ
  JVMのクラッシュ検知機能

・JavaFXで困ったこと
  ダイアログがない 8u40までの命
  複数Chartの合成に対応していない
  Chartのツールチップが重い
  animated=trueなAreaChart→アニメーションやめた
・JavaFXで困っていること
  JavaFXコントロールがブラックアウトする
  FXMLOがSceneBuilderでロードできない
  windowsとLinuxでウィンドウサイズ関連のプロパティの動きが違う
  SwingNodeのDrag and Dropの動きがおかしい

・お願い
 まずはFork
 次にPull Request
 できればプラグイン作成
 いいね!

・あったらいいなプラグイン
 vmstatなど・・




■Bind Me Softly
Property
Bind
UseCase

自己紹介
 Java in the box
 ITPro:JavaFX2で始めるGUI開発

Property
・ぜひ使ってください
・PropertyはJavaBeansのextends
  Base of Bind
 →JavaFX Script
  2からはいってきた
・Property Classes
  BooleanProperty
  IntegerProperty
  LongProperty
  FloatProperty
  DoubleProperty
  ObjectProperty
  StringProperty
  ListProperty
  SetProperty
 実装クラスには、Simpleがつく

IntegerProperty prop
 = new SImpleIntegerProperty(20);

Updateしたときにイベントが挙がる
Immediate
 prob.addListner

Lazy(遅延処理)
 GUIの場合は、遅延のほうがいい
 両方使うと・・・

Code Convention
 クラスのフィールドに使う
 class Foo {
  IntegerProperty bar = new SimpleIntegerProperty();
  GetterとSetterのほかに

  IntegerProperty barProperty(){ return bar; }

  を入れることを忘れない。

Bind
・プロパティ間の自動同期
  y.bind(x) xをかえると、yが変わる:一方通行

・双方向Bind
 .bindBidirectional(s1.valueProperty());
 ネストすると、追えなくなってくる

・ユーティリティクラス
  Bindings
    add,subtract,multiply,divide
    論理演算
・Low Level Bind API
  スライダーから色を作るような場合

UseCase
1.知らないうちに使っている
   ~View

2.Node-Node,Node-Model:ブリッジになるところにbind

3.ルール、バリデーションに使う
  レイアウト(ステージの大きさに部品を合わせる)
   アンカーペイン

4.アニメーション

・Bind楽しいよ!




■LT1:サーバーサイド JavaFX
・JavaFX:デスクトップ→サーバーサイドで使ったら?
・S-tune問題:1セットしかないスピーカー
・サーバーで音楽を流す
・Media Viewでながす
・Https問題
・Jettyをプロキシに
・Sound Cloud
 Sound CloudのJava APIクライアントやんない
 APIかわる、認証

■LT2:いまさら始めるJavaFX
・なんでJavaFX
  らずべりーぱい、検証用アプリ
  案件:JavaFX知らないと提案もできない

・環境構築
  NetBeans IDE かんらん
  Seane Builder2.0 著間的に分かる

・おもっちゃったこと
  レイアウト自由
  ドラッグ&ドロップ簡単
  勝手に伸びちじみ
  なんかちらつく
  もっと3D,SE
  Java8のデータ加工が半端ない


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

IoT,ビッグデータ,CEP,機械学習,SDN等の全体像をまとめてみた(2)-具体的な製品(IoT編)

2014-11-25 14:14:34 | AI・BigData
前にIoT,ビッグデータ,CEP,機械学習,SDN等の全体像をまとめてみた-概要を書いたけど、あれだけでは、抽象的なので、具体的に、どのような製品があって、どう動くのかのイメージがつかめないと思うので、そこを書いてみた。

まず、全体図。


以下、製品を交えた説明。上記「概要」の説明と比較できるように書いてある。
ただ、順番をかえて、まずは、IoTから。




■IoT

○デバイス

センサーは、例えば温度センサーは、温度が上がると抵抗値があがる。ということは、電圧が一定なら電流が変わる。
このように、計測したいもの(温度)の変化によって、抵抗などがかわり、電流、電圧が変わるというしくみでセンサーは動いている(ものが、たぶん多いと思う)。

このセンサーをデバイスのポートに線でつなぐことにより、この電気変化が、電気信号に変えられ、メモリ上のどこかに展開される(どこに展開されるかは、データシートに書いてある)

「デバイスドライバ」
このメモリ上(のどこかのアドレス)に電気信号がOn,Offの形で表現されるので、
それを、Cのポインタ((volatile unsigned short *)でキャストして、データシートに書かれたアドレスを書けば、ON Offをリード/ライトできる)で入出力する。

あ~LinuxでGPIOの場合、/sys/kernel/debug/gpioの下のファイルを見れば分かるだろう・・・
って言われれば、そのとおりだが、今回は、それは反則とする。

OSから(あるイベント発生により)呼ばれたら、上記方法でデバイスの入出力を行う部分のプログラムを記述したプログラムが、デバイスドライバ。
Linuxの場合は、*.koとかの拡張子で決められたように作る。
Windowsの場合は、WindowsPKとか言われるものが、ここにあたる。

「通信部分」
Linuxの場合、上記デバイスドライバはmknodとかすることによりにより、
「/dev/どこかのデバイス」に結び付けられ、Open/Closeして、Read/Writeできるようになる。
そこで、このデータを取得し、データを・・・データウェアハウスに送ると、更新に時間がかかるので、一時的な「データ収集」先に送る。送るプロトコルはいろいろあるが、RESTなら、みんな書けるよね!

つまり、
・一定時間ごとに、
  (crontabに書くか、sleepさせて一定時間ごとに起こして)
・センサーデータを取得し、
・その内容を通信でデータ収集のところに送る
という処理をするプログラムを自分で作成する。このとき、「センサーデータの取得」は、
Linuxだと上記のように/dev/どこかのデバイスをファイルのように扱えるし、Windowsだと、
SDKで扱えるようになる。
 通信部分は、RESTなら、どこかにいろいろ書いてあると思うので省略する。





○データ収集
 センサーデータをいきなりデータウェアハウスに送ろうとしても、
データウェアハウスは更新処理が苦手なので、処理しきれない。
そこで、いったん、センサーデータを保存しておき、
 データウェアハウスには、ある程度たまったところで
(夜間)バッチなどで、ゆっくりと更新するという手をとる。

 そのために、センサーデータをためておくところが必要になる。

Amazonに送る場合、kinesisにデータを一時的に蓄えておく(24時間)ことが
出来るので、kinesisで受けて、バッチでまわす方法がある。

クラウドにすぐに送るのでなく、いったんローカルで処理したい場合は
(後述するCEP処理までをローカルで行いたい場合など)
NoSQLの例えば、DataStaxEnterprise(Cassandraのインメモリ)等に
送ることが考えらる。

 RDBの場合、ジャーナルに書き込む分、遅くなるようであれば、
それは無駄なので、NoSQLのほうがよさそうだが、例えば、MySQL(cluster)の
場合、インメモリを選択し、memcachedと同じアクセス方法を選べば、
それはNoSQLと実質同じことになる。


○CEP

収集されたデータは2種類の利用方法が考えられる。

一つは、異常検知など、即座に送られてきたデータ(数個を利用)して、
 対処したい場合のCEP処理

もう一つは、データをいっぱいためて、過去データと見比べて、いろいろな
 知見を得たい場合、データウェアハウスを使った分析処理

後者は別エントリ(データ解析)として、今回は前者。

このCEP処理としては、StormとSparkが人気なんでしょうか?
くわしくは、ここ

Twitter Storm でビッグ・データをリアルタイムに処理する
http://www.ibm.com/developerworks/jp/opensource/library/os-twitterstorm/

にいろいろ説明がありますね。

StormとSparkの違いについては、

■[Spark]Apache Spark Streaming=大規模準リアルタイムストリーム処理?
http://d.hatena.ne.jp/kimutansk/20130902/1378142510

あ~、似たようなもん?

用は、いくつかのデータ(ウィンドウと呼ばれる)をもとに、
異常かどうか、何かしたほうがいいかどうかを判断して処理する
という感じでしょうか・・・
(このウィンドウを
   全く重ならないようにする・・・ジャンピングウィンドウ
   一部重なるようにする・・オーバーラップウィンドウ
   一つ一つずらす・・・スライディングウィンドウ
 というように、CSPのウィンドウ処理には、いろいろ種類があるようですが)


○機械学習

CEP処理で、異常かどうか「判別する」のように、判別とか
予測をする場合は、あらかじめ過去のデータを使って学習し、
それに基づいて予測・判別します。

これが機械学習なのですが、機械学習には

・過去のデータをもとに学習し、予測モデル(数式みたいなもん)を
 組み立てる

・予測モデルをもとに、センサーデータをあてはめ、判別する

という2つの部分があります。
前者は、Hadoop+Mahoutとか、Rでぐりぐりまわすとか、
いろいろありますが、それは、今回の範囲ではありません
(データ解析)

後者の予測モデルが出来た場合ですが、
CEP処理のひとつとして、予測モデル式にセンサーのデータ
を入れるプログラムを作って、ストリーム処理します。
異常値が出たら、後述の「出力等」への処理を行います。

なお、

Microsoft Azure Machine Learning

のようなものがあるらしいのですが、
使ったことないので、よくわかりません。





○出力等

CEP処理、機械学習の結果、
・異常等があるために、なにかに表示等する
  →スマホに電話がかかってくるなど

・アクチュエーターを操作する
  →モーターを回すなど

のような処理を行います。

これには、
(1)CEP、機械学習側から、アクチュエーターや表示側に通信する
  →これが、上述「出力等」への処理

(2)その通信を受けて、表示、アクチュエーター処理をする
 ということになります。

たとえば、Twilloを使って、異常があったら、
電話をかけてもらうなどというのも、1つの方法です。

ただ、一般的には、出力側に

  ・サーバーをたてて、そこで通信する
  ・Push型通信を行う
  ・双方向通信を行う

が考えられることとなります。
 サーバーを立てる場合、RESTでやるのなら、センサーと逆方向のことを
すればいいだけで簡単なので省略。node.jsなんかでサーバーを書くのでしょうか?

 Push型通信は、エンタープライズでは話し違うけど、
 個人レベルでは、milkcocoaが話題なんですかね・・・
 双方向通信は、WebScoketですね!

今後はWeb Socketが来るんでしょうか・・・?
もっとも、簡単な操作であれば、メールを送ったり、SSHで入ったり、RPC起動したりでも、
すんでしまうのですが・・・




IoT編は、ここまで。
長くなったので、今回はIoT編でおわり。つまり、ここまで。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ミクをWebGLエディター内で3Dで動かすことは簡単だけど、外部に持っていけない・・・

2014-11-25 11:35:39 | Weblog
昨日の

WebGLより簡単に3Dできそうな、jThreeを聞いて来た!
http://blog.goo.ne.jp/xmldtp/e/434161e6e666d371682964e1fb36463e

について、ちょっとくわしく、書いてみたいと思う。

結論から言うと、ミクについては
・http://seesaawiki.jp/j3wiki/の「初音チュートリアル」に
 書いてあることは、簡単に出来る
・しかし、自分のサイトにそれを持ってくることが、相当むずかしい

以下、まず、http://seesaawiki.jp/j3wiki/の「初音チュートリアル」に
書いてあることを説明する。




■初音チュートリアルに書いてあること

1.WebGL Editorを開きます

http://editor.jthree.jp/?id=UdbmUw

に行くと、以下のようになります。


2.ミクを挿入
(1)左下「GOMLタグ」をクリック
(2)スクロールすると「MMDモデル」があるのでクリック
(3)その中の「初音ミク」をクリック
(4)sceneタグ内のどこかをクリック
(5)「挿入」をクリック
そうすると、下の図のように、

最終的に(4)で置いたカーソルのあとにmmdタグが入る


3.プラグイン「MMD」を入れる

(1)左下「プラグイン」タグをクリック
(2)「モデルローダー」があるのでクリック
(3)その中の「MMD」をクリック
(4)エディタ(左上のウィンドウ)HTMLタブにして
(5)「プラグインはここから」~「ここまでの間」のどこかをクリック
(6)「挿入」をクリック
そうすると、下の図のように、

最終的に(5)で置いたカーソルの後に、scriptタグでjthree.MMD.jsが入る

4.ミクを動かす
(1)エディタ(左上)で「Javascript」タブにして
(2)ローディング終わったあと($( "#loading" ).remove();のあと)
  のどこかに「jThree.MMD.play();」と記述する(自動で挿入しない)
(3)「保存」をクリック

そうすると、

というダイアログがでる。
ダイアログをOKして、右側の>をクリックするとはじまる
(ないしは、もう一度保存する)

<<トラブルシューティング>>

1.まだ、まっしろ。ないしは、なにか線がうごいてる
 XPで行っている場合、メモリが足りない場合に起こるらしい。

 解決方法はマシンを変えるしかない

2.真っ黒。こんなかんじ

(1)エディタ「GOML」にして
(2)light のlightColorの値を変えると

すこしはよくなるかな

3.おおきい

マウスの真ん中のぐりぐりするところを動かすと、拡大縮小する

4.で「ぱんちら」させるには
マウスを右ボタンクリック、ぐるぐる回転する。
角度によっては

となる




■それを自分のサイトに持ってくる

で、ここから先、自分のサイトで利用するために、以下のことを行ったが・・・


(1)DLボタンをクリック、ダウンロードして解凍
(2)http://jthree.jpにいき、jthreeのダウンロード
(3)ダウンロードしたものを解凍し、
   scriptとpluginの中のものを全部、見えるところにおく
   →libsとかフォルダつくり、そこにコピー
(4)dataの下、model,motion,imgを見えるところにコピー
(5)index.html,index.gomlで参照しているjs等を、
   (3)、(4)で置いたところに変更する
(6)PMXは入っていないので
   https://bowlroll.net/file/3162
   とかにいって、PMXをとってきて、それを
   model/miku/index.pmxにダウンロード。
   また、すべてのspa,bmpファイルをmikuの下にコピー
(7)読み込み中がないので、たとえば、
   http://www.pixelimage.jp/blog/2012/04/loading_icon.html
   から、適当なgifファイルをコピーし、それをloading.gifという
   名前に変える。
(8)vmdも入っていないので
   https://bowlroll.net/file/23499
   からダウンロードし、解凍。カゲロウデイズ.vmdを、motion/kagerou.vmdに
   ファイル名変更していれる

そうすると、こんなエラー

cameraでエラーになる・・・道は遠い・・・

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする