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

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

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

JavaEEはリアクティブ、マイクロサービスに行くみたいよ(MVCはぶっち)

2016-10-16 13:08:13 | JavaとWeb
きのう(10月15日)JavaOne2016報告会に行ってきた!
その内容をメモメモ
(表題の件は、中ごろの寺田さんの発表の印象)




■ごあいさつとOverview
JavaOne サンフランシスコ 2016年9月18日~22日
・セッションのほうが中心:テクニカルカンファレンスとして成熟
・土曜日:JavaOneForKids 金曜日:Javaチャンピオン サミット
・Java Your Next(Cloud)
 クラウドに向かうぞというのは、だれでもわかっていること
 キーノート
  1時間丸まるゲストスピーカー:火星に行く話
 ジョージサーブから
  JavaSE9は4ヶ月遅れる
  Dockerコンテナベース:現在のインストーラーベースに加え
   →詳細はわからない
 アニールガー:JavaEE系
   →詳細は寺田さんへ
   EE8リバイス、
   EE9の提案
     来年末までにEE9の骨組み
     18年末までには、マイクロサービス化されたもの提供
 そのために2016年
   コミュニティに提案
 日本からの登壇者 5名
   松田、損保ジャパン、富士通、日立、NEC
   木曜日、コミュニティーキーノート、
    スターウォーズの学芸会のり(JUGのリーダーとか
     ゴスリンさんは台本よみまくり!
 JavaOne4Kids
 サーベイ:glassfish.org (英語で)
 来年は10月1日~5日

■JavaSE Feedback
・スライドは公開予定です
・自己紹介
 HeapStatsの開発 JavaのHeapのプロファイリング
  →賞をいただいた、セッションで発表

・JavaSEの未来
 スケジュール
  JDK9:延長かかった(まえに)
     全然機能完了してない
     また延長きまった 2017年7月23日
  JDK10:スケジュールあがっていない

 JDK9セッション:いっぱいあった、よかったけど・・・

・主な機能
 JDK9
  Project Gigsaw
  Project Kulla(JShell)
  Reactive Stream
 JDK10以降
・Project Valhalla
・Project Panama

・ジグソーに関して
 jarの依存性が複雑→かけたとき・同じ名前の競合
 →新しいコンテナ
 JDK内部のモジュール化;これがジグソー
  Jlink:必要最低限のJRE
 結構更新された
  英語表示でヘルプを出す(日本語だと古い)

・Project Kulla(JShell)
  REPL for Java→CLI上で実行できる
   :教育

・Reactive Stream(The Flow API)
 Reactive programming:依存j関係と関数の国あわせ
 Reactive Streams

・Project Valhalla
 バリューらいぷのシンプル化
 (今回はキャンセル)

・Project Panama
 ネイティブコードを操作しやすく

・9の変更点
 ジグソーの変更によるもの
  大半の内部APIがカプセル化
   jdepsを使って影響あるか、確認を推奨
  →ライブラリが影響受けていないか
 Critical APIはpublic

 クラスローダーメカニズム
  クラスの継承
  モジュール化してクラスパスで配置しろ
  削除済み、非推奨オプションをVMで使うと、起動できない
  3世代前まではコンパイルできるけど、それ以前は指定できない
  バージョンを確認して起動する
    バージョンの表記方法かわる
    JDKのディレクトリ構造が変わる
  Webに関して
    AppletAPI非推奨
    セキュリティ
  暗号化の変更 
   JKSからPKCS12
   証明書が変わる
  ロギング方法
   パーサーはだいたい全滅
   でこレーター
   出力方法は変わる

・範囲が狭いがささったらいたい
  非推奨APIを削除
  グラフィック関係
  Thread.stop
  toArrays()はくローンを返していたのに、
  1文字のめいめい禁止
  String 内部データがcharからbyte[]へ
   →ライブラリで
  GCの組み合わせ
   →G1GC
  jcmdの機能強化
  JavaDBの廃止など

■JavaEEの今後について 寺田さん
・マイクロソフトの社員です(^^;)
・この資料、110か20か。。。
 なぜこんなに?
  Java Oneの内容
   3つのセッションをまとめた
     知っている前提でしゃべっている
      マイクロサービス:しらないと全員置いてきぼり→つくりかえた
 エンタープライズJava→従来セッション減らされた
 マイクロサービス(300セッション中、50~60セッション)とReactiveが採用

・あジャンだ
  よかったこと
  やばいぞ
  これからどうなる

・よかったこと
 日本企業がJavaOne基調講演で数多く登壇

・JavaEE
  いい印象を持ってる人:シーン
   →オラクルさんがんばんないと・・・
 JavaEE GUARDIANS
  去年の秋ぐらいからストップした
  JavaEEの将来が危ないという情報が流れた https://javaee-guardians.io
 →オラクルさんに届いた
  アニールガー:ことしのJavaOneで語ります
   JavaEE8 MVC採用をドロップ
  クラウド、マイクロサービスは詳しく出ていない
   →やばいんじゃない?
 火星の話をするよりも、不安を払拭するためにJavaEEの話をすべき

 ブレークアウトセッションの参加で不安は払拭・戦略的にはよい方向へ
 (詳細はのちほど)

 でも、べつの不安が!!
 9月22日 ヒルトン サンフランシスコ フィナンシャル ディスとリクと
 MicroProfile https://microprofile.io/
 ベンダー・コミュニティーが集結
  ぱやら
  レッドハット
  TOM EE tomcat+webプロファイル
 →いままでJavaEEを推進してきたベンダーが入ってる

 背景
  各ベンダーの個別会話から始まった
  JavaEE技術におけるマイクロサービス対応
  マイクロサービス重要だよね!
  将来のJava大丈夫という思い
  JavaEEをよりよく、より早く
 MicroProfile1.0
  アジャイル的な方法で
 →いままでのJavaEEの仕様から出るのが長い
   →実装依存はある
  JSRに登録
  やりたいことを取り上げて、一個づつつぶしていくという考え方
 標準化には時間を要す!!
   Spring,Netflix 標準化はイノベーションではない(両方必要)
 開発の進め方・戦略はMicroProfileの方が時代に適応!!(個人的に支援)
  オープンでやっている

 MicroProfile.io or/and JavaEE 8/9

・JavaEE 戦略的にはよい!!
 個々に記載する内容は、あくまでも提案内容(未決定)!!

 Cloud対応(Microservice対応)

・2年前と世界が変わった
  クラウド化・マイクロサービス化
   マイグレーション・パスを用意
   JavaEEの後方互換性を維持
   REST(JAX-RS)は、今後重要→いままで以上
    いままでは、サーバー:待ち受け口を作るのが多かった
    今後、クライアント側:呼び出しでもRESTが重要
     非同期ノンブロッキングでつなぐ

・JavaEE9がメイン
  JavaEE8はつなぎ
  JavaEE9はクラウド

 JavaEE8の提案内容
  マネジメントAPIとJMS,MVCはドロップアウト
   JMS2.0のまま
  コンフィグレーションとヘルスチェック

 今後はリアクティブプログラミング
 リアクティブ宣言
  即応性
  耐障害性
  弾力性
  メッセージ駆動

 EE8では非同期、ノンブロッキング
 http2.0→複数のレスポンス

・JAX-RS 2.1 クライアント側の大幅な更新
 リアクティブ・プログラミング
  非同期処理の改善:実装方法の改善
  ノンブロッキング対応:リソース消費を防ぐ

  RESTでよんでいく

・JAX-RS 2.0の非同期処理(コールバック地獄)
 EE8
 JAX-RS 2.1 Completable-Future<T>を利用
  非同期処理をより簡単に、RxJavaも利用可
  Jersey(じゃーじー)では

 JAX-RS 2.1:ノンブロッキング対応

 ヘルスチェック
  サービスが生きているかどうかを監視できる

 コンフィグレーション:外部設定
  設定情報を分けて管理する
  Apache Tamayaなどを参考

 マルチ手ナンシー対応
  テナントごとにカスタマイズ
  マルチテナンシー対応:データ・アクセス
   データソースの実装も変えないと・・

 セキュリティ JSR375
  EE8とEE9(メインは9)

  OpenID コネクト

・JavaEE9 マイクロ・サービス
  ラジブさん
 マイクロサービス開発の標準にしたい
 MicroService

 今まで:モノリシック(一枚岩)
   小さなプロジェクトなら楽
   一回作ったら、変えられない
   プロジェクトの全体はあくが大変になる

 マイクロサービス
  それぞれの機能を分けて作る:疎結合
  個々のサービスで個々のプログラミング
  どっちを適用すべきか→必要なところで

 標準的な実装がない
  開発者が選択→標準化

 マイクロサービス・デザイン・パターン
  APIゲートウェイ:標準化するものではない
  サービスレジストリ・ディスカバリ
     →サービスを登録する→ロードバランサが問い合わせ
  サーキットブレーカー
     →負荷が高い・障害発生:リクエストをきる
   JAX-RSクライアントAPI拡張、アノテーション
   バルクヘッド
 ポリグロット・パーシステンス
  JPA:RDBの永続化
   →NoSQL:カテゴリーわけをしたAPI
    カテゴリ指定(Key/Valueの例)
  JPAと似たような感じ

 CQRS:データの参照と更新を分離
  分散アプリではリードはリード、ライトはライトでわける

  Tolerant Reader(寛容な読み込み)→実装者が考慮(EE9未対応)

 チェインド・サービス

 非同期メッセージング
  kafka,RabbitMQ
  pub,sub用意

 サービスインスタンス
  JavaEE9 JavaSE9のあと
       1つのJarファイル(Jigsawを使って
   A,Bが繋がっている場合、分けるとパフォーマンス悪くなる
     →プロビジョン方法の提供
   グルーピング

 コンシューマードリブン: EE9未対応
  Spring Cloud Contract、Pact

 ドメインイベント
  マイクロサービス:分散ネットワーク
  分散環境でのトランザクション

・その他
 クラウドプロバイダが提供するサービスを呼び出せる
 Auto Scale
 JavaEE9のリアクティブ対応:包括的なAPIを提供
   JDK9のFlowAPI

・動画もある(英語)

・MicrosoftがJavaOneに出展
・IBMさんがJavaをもう一度すばらしいものにしましょうよ
・コグニティブサービス

 マイクロソフトのビデオもみられる

 アイデアひとつでできる

 もうつぶやいている
 JJUG CCCで紹介したい。足を運んでくれれば・・

■JavaOne2016総括
・自己紹介
・標準Java:特に進展なし
 JavaME,JavaFXはキーノート発表なし
 JavaME:SE Embeded
・今後への懸念
 JavaEE Guardians
 ロードマップは出たけど、リリースできるの?
 問題はEEだけではない
・Make Java Great Again IBM
 IBM SDK For Javaをオープンソースへ
 OpenJ9→OpenJ9ベースのOpenJDKがでてくる
 OMRの上にかぶせてOpenJ9
 Eclipse OMR
  JITコンパイラ、GC,スレッドライブラリなど、言語に非依存な形で提供
  CRubyで提供。CPythonは公開予定有り
 →COBOLもマイクロソフトCMRと同じアイデア
 Apache Harmony論争再び?
 JavaVMがIBMを主導したい?→戦いの場でないものはオープンソースにしたい
 だれがJavaを偉大にするのか

 標準Javaが遅い:誰かが追い越していく
 OSSとコミュニティが進化を加速していく
 標準が前に進まないなら、別の標準
 コミュニティーキーノート
  エピソード21:コーダーの覚醒
  相変わらずの学芸会のり
  ベンダー主導の情報発信の場→コミュニティ交流する場
 JavaOne
  エンタープライズ職が強い

・トレンド
 DevOps,クラウド、マイクロサービス、リアクティブ
 アジャイルは常識:リリースサイクルの話
 DevOps:Jenkinsが一般的 一週回って次の課題
 コンテナ前提:Docker
  パイプライン設計、テスト時間を短くするには、メトリクスが重要
  テスト時間をどれだけ短く。メトリクス
 クラウド:使って当たり前。サーバーレス
 マイクロサービス:分けたサービスをどう管理するか
 イベントソーシング
 疎結合を優先し、非同期処理での不整合を許容する
  Amazonは処理に失敗したらクーポン出してるよ
 Reactive
  用語定義やメリットの議論が継続的
  通信するという概念がボトルネックに

・未来予測
 数千数万のサービスで構成されたシステム
  境界線があいまい
  サーバーレスの延長
 サービスの制御は、全てプラットフォームに任せる

・まとめ
 誰がJavaを偉大にするのか
  コミュニティやOSSと協業できる企業
 JavaOneはコミュニティの交流の場として機能している
  もちろん、行く価値はあります

・おしらせ
 12月3日 JJUG CCC Fall

■Road to Duke's Choice Award
・自己紹介
・Heap Stats
・おことわり:思いで話メイン。主観が入ってるかも。技術的な話しない
・Duke's Choice Award
  4つもらえる:参加チケット、Duke像、バッジ、Oracleプレスリリース登場権?
・HeapStatsって何?
  JDP:マルチキャストで飛ばす
・挑戦の歴史
 2014年のJavaOne
   申請;落選
 2016年
   再挑戦
 意識したこと
  バズワード入れてみた(IoT,ARM)
  審査員がぐっときそうな技術 JavaFX
  Javaへの暑い思い
 受賞
・連絡
  英語でメールがきます
  副賞は来年に繰り越し可能
  住所と電話番号
  授賞式まで内緒にしててね
・授賞式
  JavaOne期間中
  関係者全員で行ってよい
  事前打ち合わせなし
・トリビア
  Duke像はさわれない
  2回ステージ
  英語しゃべらなくてOK
・変わったこと
  GitHubのStar数増えた
  HeapStatsが記事にでた
・つづき
 Java Community Keynote
  HeapStatsが登場
・コミュニティの中でのHeapStats
  コミュニティ、メディア
・HeapStatsを作ったきっかけ
 Javaのメモリーリークディテクター作って
・ポリシー
 軽く・速く

■(LT)SideStory
・学芸会に参加して・・・
・ばんゆう:むこうみずのゆうき

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

Javaのラムダ式とStream APIを聞いてきた!

2016-10-12 22:36:39 | JavaとWeb
10月12日、Java SE 8:ラムダ式 & Stream API 入門セミナーにいってきた!
その内容をメモメモ・・・




年内に資格とると、Tシャツがもらえる

●関数型インターフェースとラムダ式
・なぜラムダ式がはいったのか
JavaSE8:関数型スタイルの処理への対応
 背景:CPUアーキテクチャの変化
 マルチコア化→並列処理
 並列処理を効率化するには、関数スタイルの処理のほうが便利
  関数=入力した値に対して必ず同じ結果を返すもの
 JavaSE8:関数型インターフェースの導入
  オブジェクト指向にはなじみにくい
  でも、関数型いいよ
  関数をオブジェクトで扱う→関数型インターフェース
  →単純化できる
  パターンはjava.util.functionパッケージを使う

・関数型インターフェース
 単一のabstructメソッドを持つインターフェース(SAMインターフェース)
  staticメソッドとデフォルトメソッドはOK
   staticメソッド
   デフォルトメソッド:デフォルト実装を与える
  java.lang.ObjectのpublicメソッドもOK
 Java8の新機能
  SAM;しんぐるあぶすとらくとめそっど
   @functionalInterface をつけると、関数型と思っていることを示す
   →そうでなかったら、エラーになる

・ラムダ式の前に
 無名クラス:見通し悪い
  →ラムダ式導入

 ラムダ式
  関数型インターフェースを実装するクラスのインスタンスかを簡略化する
  ための構文
   関数型インターフェースのメソッドにフォーカスして実装を記述できる
    メソッド名は書かなくても推論できる
    変数Xはどこで宣言している 引数名

 ラムダ式は何を簡略化している?
  引数リストとメソッドを書けばOK

 →バイトコードレベルでは無名クラスとラムダ式は違う

・省略記法
  がた省略OK
  引数がない場合()
  引数1個は括弧省略可能
  1行なら中括弧も省略OK
  returnも省略OK
  ラムダ式のメソッド呼び出しは
   System.out::println
  でOK

→書き方を決めないと安定しない
 コード読みにくくなる

・汎用的な関数スタイルの操作
  基本形は5つ
  Function
  Consumer:void
  Supplier:値を返す
  Unary(ゆーなりー)Operator:演算
  pridicate:ぶーりあんで返す
 ひきすう2つの関数型bifunction

●StreamAPI
 StreamAPI
  データをパイプラインで処理するAPI
   Streamの生成
   中間操作:遅延評価
   終端操作

 Streamの作り方
  コレクションから
  配列から
  数値範囲から
  任意の要素 Stream.of

 IntStreamを使った繰り返し処理
  for文を使った繰り返し
  IntStreamを使った繰り返し
 →for文は並列処理が難しい
  並列処理は
  .parallel().forEach()とすればいい
 →100件とかならfor文のほうが早い

 中間操作のためのメソッド
  filter
  map
  flatMap
  distinct
  peek:なにもしないけど
  limit
  skipというメソッドもあるので、先頭から何個~何個というのができる

 終端操作
  forEach
  reduce 2つパターン
  collect
  min/max
  count
  以下は、ショートサーキット操作(全要素処理しないかも?)
  findFirst
  findAny
  anyMatch
  allMatch
  noneMatch

※Optionalクラス:JavaSE8から
 値がNULLかもしれないコンテナオブジェクト

・StreamAPIの例
 Personクラス:年齢50より小さい
 カンマ区切で出だす→collectでリダクション処理
 101以上200未満の要素の合計を求める:リダクション処理

 リダクション処理の考え方
 (じつは、IntStreamのmapToInt().sum()でおわる)
  IDEは型が違うことしか教えてくれない:何を変えればいいのかは教えない

・コレクションAPIのデフォルトメソッド
  removeif predicateの結果をみて、のぞく

●JavaSE8の資格のお話
 ゴールドがラムダ式つかえますか?みたいなはなし
 今35%オフで受けられる
  クレジット決済
  オラクルからチケットを買う

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

「Springをなんとなく使っている人が抑えるべきポイント」などを聞いてきた!

2016-10-06 15:57:58 | JavaとWeb
10月5日、JSUG勉強会 2016年その8~今から始めるSpringに言ってきたので、その内容をメモメモ・・・するんだけど、

もう、ちゃんとしたメモがネットにでていた

「JSUG勉強会 2016年その8 ~ 今から始めるSpring」に行った
http://qiita.com/y_q1m/items/d8e12d5ad1b7b71aeef5

ので、ちゃんとしたいのが見たい人はそちら!
(ここのメモは、ろりぽじさんんIT用語説明レベルのアバウトさ=雰囲気レベルです)・・・
なので、ここでは、最後に「所感」を書いておこう!




■DI/AOPについて学んでみた
・自己紹介
・会社紹介(TIO)
・Springと私
 基礎知識なしでなんとなく使っていたレベル
 インターフェース、applicationContext.xml
 右に倣え
・なぜ
 DI/AOPを調べれば分かるよ
・DIについて調べてみました
 概要
  依存性の注入:外部の設定ファイルなど※
  ※ApplicationContext.xml アノテーションで設定
 メリット
  結合性低下によるコンポーネント化の促進
  単体テストの効率化
 手法
  インターフェース注入
  Setter注入など
・DIとは(イメージ)
 class Service 利用:Dao  class DaoImple
    注入       で異性
      DIコンテナ
       参照
      ApplicationContext.xml→依存関係を定義
 →newすることがなくなる

・これっておいしいの
  脳内アプリ;会員サイトの検索機能
  イメージ:ブラウザ→アプリケーション→DB
  登場クラス
   Action
   サービス
   DAO
   user:値格納・情報返却

・DIを使わない構成
  利用する側のクラスが必ずnewする→密結合
  利用する側・される側が密結合している

・DIを使った構成
  DIコンテナで生成して利用する側に注入する
  利用する側、される側が疎結合になっている
   DIコンテナ→ApplicationContext.xml

・で、メリットは
 クラスの関係が疎結合
  変更に対応しやすい
  試験を実施しやすい
    固定された値でテスト

・AOPについてしらべてみた
 本来すべき処理とすべきでない処理
 本来すべきではない処理をあとから呼びだす

・AOPを使った場合と使わない場合の確認
 AOPを使う→トランザクション管理クラスを作る
  本来すべきではない処理の実装ミスを防げる
  一元管理できる
  処理を変更せずに後から追加できる

・まとめ
 SpringにはDI/AOPを利用する機能が備えられている
 疎結合ナシステムを構築できる

■Springをなんとなく使っている人が抑えるべきポイント
・自己紹介
・概要
 Springw9おなんとなく使っていませんか
  上手く動かないときの対応ができない
  応用が利かない
  面白くない
 主要なポイントを抑えて、開発を面白くしましょう
・主要なポイント
  Beanのコンフィギュレーション:3通りある
  DI/AOPの使いどころ
  データアクセス

・コンフィグレーションの方法
 3種類選べる:結果は同じ
  XML
  アノテーション @Compornemt
  JavaConfig @Bean
 →DIコンテナが管理するオブジェクトをBeanと呼ぶ

XML
  メリット:分離できる。一元的に管理、再ビルド不要
  デメリット:メンテが大変
アノテーション
  メリット;記述が楽
  デメリット:プログラムとBeanの定義が混在
JavaConfig
  メリット:分離できる、タイプセーフ
  デメリット:メンテが大変

 一般的と思われる使い分け
  業務個別のBean(コントローラー、サービス、Dao)はアノテーション
  裏方のBeanはXMLまたはJavaConfig
    →そもそも、アノテーションが付けられない

・DI/AOPの使いどころ
 DI:すべてをBeanで管理するわけでない
  ステートレスなオブジェクト(コントローラー、サービス、Dao) 
   →BeanにしてDIで紐付け、ASOP
  処理のたびにオブジェクトが生成され、個別のフィールド値を設定する
   Entity,DTOはBeanにしない

 AOP:
  レイヤー間にAOPで共通処理(BeanにしかAOPできないという事情も)
  業務的な処理は基本的にAOPは使わない
   →わかりにくくなる(例:税率かける)

・同じオブジェクトが使われている
  リクエストのたびに、コントローラー、サービス、Daoのオブジェクトが
   作成されるわけではない
  リクエスト間でデータ共有(キャッシュ)
  スレッドセーフにする必要

・インターフェースは必須じゃない
  インターフェースを介さなくてもDIは可能
  用途の例:各レイヤーの補助的なBean

・コネクション・トランザクション周りの仕組み
  トランザクションの開始・終了はSpringが行う
   ソースは書かなくていい

 画面周りの処理の流れ
  Dispatcher Servlet
   HandlerMapping:コントローラー特定
   HandlerAdapter:引数の値を用意
   ViewResolver:Viewの形式ファイルを特定

 コントローラー
 モデル
 View

・認証・認可の仕組み
 認証とURLの認可はServletFilterで行われている
 DispacherServletに依存していない(SpringMVCに依存しない)
 認可の主な対象はURL、メソッド、画面描画の3種類

 認証のサーブレットフィルターなど
  セキュリティコンテキスト:HTTPSession.ThreadLocalなど
  SpringMVCを使わなくても使える

・サーバーを起動しなくてもBeanをテストできる
@before
public void setup()
 {
   ApplicationContext ctx = new AnnotationConfigApplicationContext(TestConfig.class);
fooserve = ctx.getBean(Fooservice.class);

・Spring Bootが行っていること
   必要なJarファイルのダウンロード、
   Beanのコンフィグレーション、
   サーバーの実行
 業務固有のBeanのプログラムつくりは変わらない
 組み込みじゃないTomcatにデプロイ可能

・最後に
  おすすめ
   改訂新版Spring入門
   Spring徹底入門

■悩めるJava初心者のためのSpringをどーんとやってみよう
 「よい子・悪い子・普通の子」

・自己紹介
 よい子のやまざきさん
 普通の子 ときさん
 わるいこ てらひでさん

・どうやってSpringを勉強したか
 よい子
  仕事で使うのが一番!SpringOne
  苦労:良くも悪くもドキュメントが豊富
 普通の子
  本を読んで独学。Springを使う開発現場がなかった
 わるいこ
  勉強などしていない。
    勉強しなくても使えるフレームワークがよいフレームワーク
  苦労したこと:仕事にならない

・事前に勉強することはあるか
 JSP-Servlet、DDDとか
 よい子
  Reactive!
 普通の子
  Java文法(例外などのややマイナー部分)
  DBまわり、Webまわり、JSP-Servlet、JUnit
  →ローカル変数の生成と消滅
 わるいこ
  男気のある優しい先輩の見分け方
   たばこをすうか、おさけをのむか
   姉御みたいなひと
  →会社にいますか?
バージョンは6の人は
  よいこ
   8にする
  普通の子
  わるいこ
   いいんだよ、すごくいいんだよ
 →8にあげられない場合は
  わるいこ:8に使える現場にうつる

Spring初級者になるための勉強範囲は
 よいこ
  ・だめだ、全部だ、ドキュメント全部読め
 ふつうのこ
  ・データアクセス、トランザクション、SPりんgMVC
 わるいこ
  ・難しいことは全部Springがやってくれる

初心者にぜひ理解してほしいこと、1つ上げるとしたら何
 よい子
  理解して使うこと!なんとなくでは、正しく動いてないぞ
 普通の子
  newが1つもなくなるわけではない
 だめなこ
  Springは開発者が仕事をサボる生産性をあげるための
  便利な道具

SpringBootから勉強するのはあり
 よいこ
   いいんじゃないか。興味を持つため
 ふつうのこ
   おすすめはしない。何が起こっているかわからない
 わるいこ
   超おすすめ。Gradle最高!

初級者・中級者になったことは、どう確認すればよいか
 よいこ
  システム作って、誰かに売る
 普通の子
  すう画面のWebアプリを自分で設計・実装して、上級者に見てもらう
 悪い子
  GitHubにソースコードを公開してTwitterで自慢する

発表するのはどのレベル
 よいこ
  いつでも
 普通の子
  いつでも
 悪い子
  難しいことをする前に、ビアハッシュでLTだ

最後の一言
 よいこ
  JSUGに参加しましょう
 普通の子
  本を買って・・・
 悪い子
  こまったら、つぶやく

SpringDay2016
 11月18日
 すごいセッション
 全て無料、懇親会、LT




■所感
 DIの「依存性」や「AOP」などはソフトウェア工学から来ている用語だと思う。
 なので、そこから入らないと、???になってしまう。

 たとえば、AOPのとことで、「本来すべきでない処理」のところで、
 ログ処理が入っているのはいいとして、
 「トランザクション処理」は、どうなのどうなの?
 いや、それは、しなきゃだめな子な処理でしょ!

 これは、「横断的関心事」というソフトウェア工学の概念を
 テキトーに言い換えてしまったから起こることで、
 ソフトウェア工学的に言うと、

 処理は

   その機能内で閉じて考えてすべき処理(局所化すべき処理)
   その機能内で閉じて考えず、(横断的に考えて)すべき処理(横断的関心事)

 にわけられる。

 前者は、機能要件で記載されるもので、受注なら受注、発注なら発注のオブジェクトが
担当するというように、担当するオブジェクトが決められ、そのオブジェクトが、他オブジェクト
を監視・制御することで、処理が決定できる。

 後者は、主に非機能要件で議論されるもので、受注・発注のみならず、横断的に
調停するオブジェクトが必要となるものである。これが横断的関心事
 たとえば、トランザクションは、受注・発注・取引先など、いくつもの機能に
同時にかかわり、矛盾ないように調停しないといけない。これが横断的関心事
 ログも、受注と発注が別々だと、わかりにくい(時間がずれてたりすると、
前後関係不明になる)
 このほかには、セキュリティなどがある(受注はセキュリティばっちりだけど、
発注はザルとかだと、意味ない)

 Diについても、ソフトウェア工学的に、背景がある(文脈=コンテキスト)
そのへんについては・・・いつか、かく



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

位置をGoogleMapに表示するためのAPI利用法

2016-09-13 18:18:58 | JavaとWeb

場所とタグを含んでTweetし、みんなの位置をGoogleMapに表示するために必要なAPI
http://blog.goo.ne.jp/xmldtp/e/a741445a4bfde8e7ce03dca78db360f7

の後半、「位置をGoogleMapに表示する」を行います。

■お題
前の

Yelp APIを使って、東京のマクドナルドを検索する方法
http://blog.goo.ne.jp/xmldtp/e/f307a7f1a7d24b4c8983da873411d17f

で出てきた、

某マックの緯度経度
 latitude": 35.6977588049412, "longitude": 139.707627867968

にマーカーをつけ、その周辺の地図を表示する。
(地図は、lat: 35.6977, lng: 139.70762 を中心に出す)




■手順

Google Mapsの表示にはAPI登録が必須になりました
http://design-plus1.com/tcd-w/2016/06/google-maps.html

にある

・「APIキーの取得」
 をします
 (googleアカウントは持っているという前提を置きます。
 もっていない場合は、googleアカウントの取得が必要です)

次に
・「プログラムを作成」

して、
・ブラウザで表示

します。以下詳細に説明します。




■APIキーの取得

まず、Googleアカウントでログインします。

https://accounts.google.com/servicelogin?hl=ja


その後、そのブラウザで

Google Maps APIs for Web
https://developers.google.com/maps/web/


キーを取得をクリック

続けるをクリック

適切に選択して「同意して続行」

キーの制限「なし」でよければそのまま、いやなら適当に設定して「作成」。次にAPIキーが出てくる。

閉じる前に、キーの値をコピーして、どこかに保存する。




■プログラムを作成
まず、

https://developers.google.com/maps/documentation/javascript/

にある「デモとサンプルコード」のソースをコピー

そして、

https://developers.google.com/maps/documentation/javascript/markers

マーカーを参考に
(サンプルコード中、上の var markerは、引数内に
map: map,
 がある。これは初期表示などに使う。一方下のvar markerは、
 引数内にそれがない。その場合は、
  marker.setMap(map);
 と、動的にマーカーをつける)

お題である

某マックの緯度経度にマーカー
 latitude": 35.6977588049412, "longitude": 139.707627867968
地図
 lat: 35.6977, lng: 139.70762を中心
にしてみる。

以下のようなソースになる。

<!DOCTYPE html>
<html>
<head>
<!-- This stylesheet contains specific styles for displaying the map
on this page. Replace it with your own styles as described in the
documentation:
https://developers.google.com/maps/documentation/javascript/tutorial -->
<link rel="stylesheet"

href="https://developers.google.com/maps/documentation/javascript/demos/demos.css">
</head>
<body>
<div id="map"></div>
<script>
function initMap() {

// Create a map object and specify the DOM element for display.
var map =" new google.maps.Map(document.getElementById('map'), {
center: {lat: 35.6977, lng: 139.70762},
scrollwheel: false,
zoom: 18
});

var myLatLng = new google.maps.LatLng(35.6977588049412,139.707627867968);
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
title: 'Mac'
});

}

</script>
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script>
</body>
</html>

YOUR_API_KEYに、コピーしたAPIのキーを入れて、保存



■ブラウザで表示

保存したものをIE等で表示させる。こんなかんじになる

・・・って、このMac知ってる!いったことある!!
多分、よく要求開発アライアンスの会場になる、日本総合システム株式会社の近くにある、東新宿駅前のマック・・・

って、なぜここのマックなんだろう?そんなに有名なのか?

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

Yelp APIを使って、東京のマクドナルドを検索する方法

2016-09-13 15:59:26 | JavaとWeb

げ、食べログAPI使えないんだ。ってことで、Yelp API
http://blog.goo.ne.jp/xmldtp/e/9e5d2883cd932f501296c27b423a40f3

のつづき(実践編)。
yelpAPIを使って、東京のマクドナルドを検索する。
PHPで作ってみる。




■システム構成

ロリポップ上にホストがあり、そこにPHP(sample.php)を置いている。
そのPHP(sample.php)が、yelp APIにアクセスしている。
ブラウザで、そのPHPファイル(sample.php)を表示している。

手順は、以下の通り。
・まず、yelpにサインアップ
・APIキー等を取得
・サンプルプログラムをダウンロード
・サンプルプログラム修正
・sample.phpをアップロード、表示
以下、詳細に




■まず、yelpにサインアップ

Yelp for Developers
http://www.yelp.com/developers

に行く。

「GetStart」をクリック。
ログインしていなければ(できっこない。まだ登録してないんだから)
以下の画面がでるはず

Sign Upをクリック

名前とかをいれて、Sign UPなんだけど、ここで、ZIP Codeとあるんで、
素直に郵便番号を入れると・・・
エラーになって、郵便番号の下に、国名が入れられるようになる。Japanを選択

なんか、登録できた旨が表示される。
ここで、メールアドレスを入れていると思うんだけど、
そのメールアドレスにメールが来ているかチェック(着ているはず)

メールの「Confirm Email」をクリック。




■APIキーを取得
サインアップが成功しているブラウザで(つまり、ログイン後?)

Yelp for Developers
http://www.yelp.com/developers

に行って「GetStart」をクリックしたら、以下の画面になったんだけど、

それでいいのかな?とにかく、この画面から・・・

Your Website URLには、PHPを置くサイト(ロリポのabc.main.jp上に置くのなら、abc.main.jp)
How you will use the APIは、Searchとした。いいのかな?
Industryは、otherで、そうすると、下に空欄が出たから、softwareと入力した。もう適当。
その下のチェックボックスに(同意するか)チェックして、submit

っていう画面が出てきて、キーが入力できる。(実際には、この右側にキーが出る)

コピーをとって控える。後で使う。




■サンプルプログラムをダウンロード
 サンプルが以下のサイトにある。

https://github.com/Yelp/yelp-api/blob/master/v2/php/sample.php


Rawをクリックすると、テキストがでてくるので、それをファイル保存して、sample.phpとして
保存する。

 このソースを見ると分かるけど、OAuthのライブラリを使っている。それは

https://github.com/Yelp/yelp-api/blob/master/v2/php/lib/OAuth.php

にある。おなじく

Rawをクリックすると、テキストがでてくるので、それをファイル保存して、OAuth.phpとして
保存する。このOAuth.phpは修正しなくていい。そのまま使う(libフォルダは作成するけど)




■サンプルプログラム修正
 ダウンロードしてきたサンプルプログラムsample.phpのほうは、修正する。
 まず、開いて、

はじめのほうにある、$CONSUMER_KEY以下4つは、「APIキーを取得」で取得した、キーとか、トークンとかそのたもろもろ(4つあるはず)をいれる(順番に)。

 その下の、$DEFAULT_TERMを修正すると、本来その言葉、場所を検索するんだけど、このままだと
分かりにくいので、今回は、ここを「直さないで」以下のところを直す。

 まず、110行目あたり、

  $url_params['term']=$term;
  $url_params['location']=$location;

と、引数をそのまま入れるようにする。

 そして、最後のあたり

$optionに入れているところからコメントアウトして、
$termに、検索したいマクドナルド(英語で"mcdonalds")、$locationに"tokyo"といれて、
query_apiを呼ぶと加工してしまうので
search($term,$location);を呼んで、プリントアウトする。
こうすれば、JSONがそのまま見える。




■sample.phpをアップロード、表示
 今回は、ロリポップを使うという話なので
 sample.phpを直下におき、
 libというフォルダをつくり、その下にOAuth.phpをおく
ことになるけど、他のプロバイダでも、同じように、sample.phpは直接見えるところ、
OAuth.phpはlibの下になるように置く。

 そして、sample.phpをアクセスすると

みたいなかんじで、JSON形式で、検索結果が見れる。

緯度経度指定などは、

https://www.yelp.com/developers/documentation/v2/search_api

を参照。cllだと思うけど、今やっている時間が無いので、また今度。

【参考サイト】

http://imagination-i.net/2014/04/15/javayelp-api%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B/

https://www.imamura.biz/blog/20635

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

3D用のJS、jThree.jsが、いつのまにか、Grimoire.jsになった件

2016-09-04 23:12:06 | JavaとWeb
未踏に受かって、名前がかわったらしい。詳しくは↓

Grimoire.js Community announcement June 20 2016
http://www.slideshare.net/LimeStreem/grimoirejs-community-announcement-june-20-2016

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

Spring BootのSTSではまったところメモ

2016-08-22 22:50:42 | JavaとWeb
ネットでしらべてもよくわからなかったところを、
忘れないうちにメモ(現状、自分へのメモ・あとで、充実させるかも)




■とにかく立ち上がらない
・STSを立ち上げようとすると、Javaが古い、1.8を使えといわれる

・Java was started but returned exit code=13

 とかかれたダイアログ(OKしか押せない)が出て、立ち上がらない
  →64ビット版と32ビット版の違いらしい?

【理由】
 Javaがあってない

【対策】
 最新版の”JDK”を入れなおす
  →ふつうにJavaのダウンロードをするとJRE
   JREは、違うエラーになる




■maven installで、JDKを入れているのに、エラーメッセージで
 JREが入っているみたいなエラー(下の赤い四角形)が出る。


【理由】
 JDKは入っているし、JAVA_HOMEもパスもJDKになっている・・・けど、
 なぜか、STSのinstall Javaが、JREを指している

【対策】
 JDKのパスに変える
 ※8月24日追加
stsのメニュー Window→preferencesを選択すると、以下のダイアログが出る。

そのダイアログでJava→Installed JREsを選択したとき、右側に、赤い四角形で囲んだように、
javaのあとに(JDKとこないですぐに)JREときたら、JDK”ではない”JREを指定している。
この場合、これを選択して、Editボタンをクリック。出てきたダイアログで、JDKの下にある
JREを選択する。




■m2のリポジトリのtomcat-embeded-coreにアクセスできない(しっかり、そのjarはあるのに)といわれる

【理由】
 よくわからないけど、なにかおかしくなったみたい

【対策】
以下のことを順に行う
・stsを終了する
・ユーザーの自分のアカウントの下の.m2など、.ではじまるものを削除・・・すると怖いので、一時的にどこかにおく
・STSを立ち上げ、workspaceをいままでと違うところにする
そしたら、なぜか、うまくいった




■(8月24日追加)以下のダイアログが出て、急に立ち上がらなくなった。

そのログをみると
!SESSION 2016-08-24 11:17:49.203 -----------------------------------------------
eclipse.buildId=3.8.1.201607290850-RELEASE-e46
java.version=1.8.0_101
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=ja_JP
Framework arguments:  -product org.springsource.sts.ide
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -product org.springsource.sts.ide

!ENTRY org.eclipse.osgi 4 0 2016-08-24 11:17:55.625
!MESSAGE Application error
!STACK 1
java.lang.ArrayIndexOutOfBoundsException
	at java.lang.System.arraycopy(Native Method)
	at java.util.Arrays.copyOfRange(Unknown Source)
	at java.util.Arrays.copyOfRange(Unknown Source)
	at org.eclipse.ui.internal.ide.ChooseWorkspaceDialog.lambda(ChooseWorkspaceDialog.java:380)
	at java.util.stream.ReferencePipeline.accept(Unknown Source)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source)
	at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
	at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.util.stream.ReferencePipeline.collect(Unknown Source)
	at org.eclipse.ui.internal.ide.ChooseWorkspaceDialog.createUniqueWorkspaceNameMap(ChooseWorkspaceDialog.java:382)
	at org.eclipse.ui.internal.ide.ChooseWorkspaceDialog.createRecentWorkspacesComposite(ChooseWorkspaceDialog.java:325)
	at org.eclipse.ui.internal.ide.ChooseWorkspaceDialog.createDialogArea(ChooseWorkspaceDialog.java:176)
	at org.eclipse.jface.dialogs.TitleAreaDialog.createContents(TitleAreaDialog.java:158)
	at org.eclipse.jface.window.Window.create(Window.java:426)
	at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1095)
	at org.eclipse.jface.window.Window.open(Window.java:783)
	at org.eclipse.ui.internal.ide.ChooseWorkspaceDialog.prompt(ChooseWorkspaceDialog.java:114)
	at org.eclipse.ui.internal.ide.application.IDEApplication.promptForWorkspace(IDEApplication.java:342)
	at org.eclipse.ui.internal.ide.application.IDEApplication.checkInstanceLocation(IDEApplication.java:261)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:128)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1519)



まったく、意味不明・・・

【理由】
 よくわからない(ファイルパスがながすぎる?)

【対策】
 以下のようにしたら立ち上がった。理由不明
・Cドライブ直下にstsというフォルダをつくり、その中に解凍し魔物を入れる
・そこのstsを立ち上げる
・workspaceは、実行ファイルsts.exeと同じフォルダ内につくる。

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

Java EE の戦略アップデート

2016-08-18 09:26:00 | JavaとWeb
あとでよむ

Java EE の戦略アップデート(2016/08/09 : JCP Executive Committee)
https://yoshio3.com/2016/08/17/java-ee-8-strategy/

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

Javaで画面を作らなければいけないとき-「SwingDesigner」

2016-08-03 14:10:22 | JavaとWeb
って、ありませんか?
え、ない??Webだけで十分?
あると思ってください。そういうときって、Swing使いますよね。
で、そのSwingの画面を早く作れるSwingDesignerについて書いてある
サイトをみつけたので、メモメモ


javaで超簡単にGUIを作成するためのEclipseプラグイン「SwingDesigner」 インストール
http://konbu13.hatenablog.com/entry/2013/12/25/230637

「SwingDesigner」でSwingアプリケーションをつくろう! その2~アプリケーション新規作成とコンポーネント配置
http://konbu13.hatenablog.com/entry/2013/12/27/163202

「SwingDesigner」でSwingアプリケーションをつくろう! その3~アクションとファイルの読み込み
http://konbu13.hatenablog.com/entry/2013/12/27/164627

「SwingDesigner」でSwingアプリケーションをつくろう! その4~ファイルの中身を表示
http://konbu13.hatenablog.com/entry/2013/12/27/183527


「SwingDesigner」でSwingアプリケーションをつくろう! その5~ファイルを保存する
http://konbu13.hatenablog.com/entry/2013/12/28/173959

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

Java Day Tokyo 2016に行ってきた!その6 Javascript(JET)

2016-05-26 12:12:23 | JavaとWeb
5月24日、Java Day Tokyo 2016に行ってきた内容をメモメモのつづき

今回は

Introduction to Oracle JET

をメモメモ




JET=Javascript エクステンション ツールキット
社内で使っていたが、オープンソースになっている

・OracleはJava→なぜJavascript:クラウドがあるから
  クラウド:アプリを作りたい
   グラフ、チャート、データ可視化→Jetコンポーネント
   JQuery上で作っている
   置き換えるのではない。
   使いたければ使ってもいいという考え方
   ベースラインのスタートポイント
  Cordova,phonegap
   →同じソースでアプリ→Jetをつかえば

・社内のJetカスタマー
  ブラウザで
  Oracle JET 社内でのインパクト、
  オープンソース
 世の中にライブラリはいっぱいある
  JETはライブラリではない
  アプリケーションフレームワークでもない
  Oracle:フルスタック
  JETはちがう:うすいJET

・様々なライブラリと用途
  アプリケーションフレームワーク・ライブラリ
  コンポーネントライブラリ
  ビルドシステム Grunt,Gulp,Brunch
  テストフレームワーク
  その他
 →まるで、ジャングル

・必要な機能
 レスポンシブルデザイン
 モジュラりティ
 シングルページアプリケーション
 アクセシビリティ
 国際化
 セキュリティ
 パフォーマンスの最適化
 標準化への準拠
 ドキュメントとサポート

デモ
 RequireJS
  状況に応じて、依存性の順番→スクリプトローダー
 knockoutJS
  データバインディング。変化したら通知する
 JET
 Hammer
  タッチモバイル用
 Yeoman NetBeansからJET使える
 JET ハイブリッド・・Cordovaベースで作れる
 ライブでアップデートできるスクラッチパッド

まとめ:JETは
 中上級者を対象
 オープンソースライブラリを使用
 データビジュアライゼーションにフォーカス
 エンタープライズ仕様
 アクセシビリティ
 モジュラりティなど
 oracle cloud カスタマーから→Githubでオープンソース
 JETコンポーネントの標準
 ライブラリの集合体
 アプリケーションビルダー ブラウザでアプリ作れる




Java Day Tokyo 2016のこのシリーズ、おしまい

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

Java Day Tokyo 2016に行ってきた!その3 JavaEEセキュリティ

2016-05-25 12:12:08 | JavaとWeb
5月24日、Java Day Tokyo 2016に行ってきた内容をメモメモ。





JaveEE7アプリケーションとセキュリティ
・自己紹介
・若手のころ:社内システム
  XSS程度
・とある案件:セキュリティ診断 NG判定
・セキュリティ要件に合わせたコード
 システムによって異なるセキュリティ要件
 イントラのシステム:致命傷になりにくい
 →公開します:致命傷
・最初からセキュアなコード
 コーディングのノイズ
・実装コストを抑える方法
  フレームワークが対応
  ビュー、コントローラーでの対応
  その他
・対策の基準
 IPA:安全なWebサイトの作り方
 掲載されている脆弱性と対策
・クロスサイトスクりぷティング
  動的ページでJSコードを注入する攻撃
  動的に出力する値をエスケープする
 反射型、蓄積型、Dom型がある
・HTMLテンプレート
  EL式による値書き出しはデフォルトではエスケープしない
  関数を自作する→カスタム関数はXMLで書かれた設定ファイルを作成する必要有
  もっとシンプルにメソッド呼出し
  Faceletsのエスケープ対策:デフォルトで用意
 →対策漏れの検出容易性を考えるとFacelets
・クロスサイトリクエストフォージェリー
 攻撃者:外部ドメインから、非攻撃者の意図しないリクエストを送る
  対策:そもそも、Getリクエストで状態変更してはいけない
     トークンを送信、一致するか確認
   ログインした時ではだめ?セッション生成時に行う
   セッションID以外を使う
 JSPのCSRF:対応していない
 Facelets;Hiddenパラメータが埋め込まれている
  ただし、ステートレスの場合は機能しない
  faces-config.xmlはページを開くときにも要求されてしまう
・SQLインジェクション
 動的SQLで悪意のあるパラメータ
 パラメータにはプレースホルダーを使う
 JPAのプレースホルダー
  JPQL:アノテーション@namedQuery
 別のSQLインジェクション
  CriteriaAPIを使用する
・セッション管理の不備
 セッションIDの推測、固定化
 ログインしたタイミングでセッションをリフレッシュ
 ServletAPIのForm認証
   GlassFishではリフレッシュする→使いやすくない
 changeSessionIDを呼び出す
 Cookieにsecure属性をつける
・パス名
 パラメータをそのままファイルパスに
 →意図しないパス
 パスチェック:自前のAPIでチェック
 自前ラッパー:テストコードが書きやすい
 根本的:ファイル名を直接指定する実装を避ける
・クリックジャッキング
 iframeで透明ページを重ねてボタンを押させる
 X-Frame-Optionsをつける
 →他のiframeも影響
 SAMEORIGINにする
・HTTPヘッダインジェクション
 自力でヘッダーを書きださない
・メールヘッダーインジェクション
 パラメータをヘッダーにセットしない
・OSコマンドインジェクション
・バッファオーバーフロー
 →省略
  外部プロセスを起動しないから
・アクセス制御、認可制度
 →省略k、アプリケーションによるから

その他の話題
・X-content-type-options:nosniff
 sniffきのうを無効化:サーブレットフィルタ
・Content-Security-Policy
 dom型でも防げる

まとめ

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

Java Day Tokyo 2016に行ってきた!その2 Java SE 9

2016-05-25 08:46:41 | JavaとWeb
5月24日、Java Day Tokyo 2016に行ってきた内容をメモメモ。

プログラムでは「Java SE 9 Overview」となっていたもの




■Java Roadmap

アジェンダ
・Java Adaption
・JavaSE9
・Beyond 9

みなさんのおかげでNo1
・採用率
 スピード上がっている
・クラウド展開プラットフォームとしてもNo1
 Amazonのワークロードの4分の1はJava
 Googleはもっと大きく
 Javaのエコシステム;ベストのクラウド環境提供

今やっていること
・セキュリティ:重要視
  後方互換性
  コスト低減:メモリ、
・密度の最適化
  並列のスケールアップ、レプリケーション
  ランタイムをシェアドライブラリ
・スタートアップの時間
  過剰なプロビジョニング
  マイクロサービス
  プリコンパイル JVM
・予測性
  ガベージコレクション
  数ギガ~数テラ、予測可能

ルック&ふいーる、堅牢性、読みやすさ、使いやすさ
1回書く クラウド スケールアップ

Java9
・クラウドのためのモジュール型プラットフォーム
・アプリケーションが必要なものだけランタイムが入っている
  コンパクト1,2,3プロファイル
・モジュールシステム:明示的仕様
  モジュールinfo
 ジグソー:どのAPIが使えるか指定できる→依存関係
 なぜ
  1)マイクロサービス
  2)セキュリティ:アクセス保護
・あたらしいツールチェーン

・どのモジュールが必要か?選択
 りんキング(JLink)ユニークなランタイムイメージ

ジグソーセキュリティ

・マルチリリースJarファイル

・G1をガベージコレクションとして採用
 ヒープ分割
 テラバイトのヒープ→インメモリ G1ではできる
  →ビッグデータ
  リードオンリーリージョン

・JShell:REPL (インタラクティブなツール)
 Javaに慣れていない人に良い
 例

・バージョニング
 新しいフォーマット

・インターなるAPI削除
 sun.misc,sun.reflectを削除
 →意見ほしい

・Javaミッションコントロール
 いろんなプロファイル

・アドバンスド マネージメント コンソール
 止められないときのアップデートなど

9以降
・オブジェクト データ レイアウト
 データの最適化
・クラウド:効率大事
・2つのタイプ:プリミティブタイプ、オブジェクトタイプ
 →オブジェクトは柔軟性は高いが、コスト高い
・オブジェクト:ヘッダーにかなりのコスト
 ガベージコレクションでヒープに
 コストかかる
 →新しい構造 クラスからバリューへ
  Arrayの最適化:GPUへ同じパフォーマンス
・いくつかのサービス
  ネイティブ
  プロジェクト パナマ
  セーフポイントのコスト削減

キーメッセージ
・8は大きな成功
・9モジュールランタイム
・10、11 よりセキュア、クラウドの中で効率的、予測性
 モダナイズ

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

Java Day Tokyo 2016に行ってきた!その1 ドローンとPepperとJava

2016-05-24 21:19:10 | JavaとWeb
5月24日、Java Day Tokyo 2016に行ってきたので
その内容をメモメモ。まずは、基調講演ですが、はじめ、少し遅れていったので、メモできていない




■(始め少し遅れたので、この前、メモできていない)

デジタルエイド、クラウドエイド
Java 若い人もシニアも
Java 愛してますか:好きか嫌いか
Javaと生活
・NetFlix,UberもJava:生活に密着
この先

I love java

■Java overall
Java
・使われている
・スマートシティ、生活
・哲学がある
  8 ラムダ式 今後 モジュラりティ
・投資、技術、教育、ローカライズリソース
 Javaマガジン読んでね
・Open JDK
・皆さんも家族の一員
・エコシステム:
 ファブリック
 Java コミュニティ プロセス JCP

■JCP
・成功のカギ:コミュニティ
 17年間
 お互いから学び合う
 成功続ける:皆さんからも反応
 Javaコミュニティメンバー JCP.NEXT
  企業の参加、NPO、ユーザーグループ、個人
  5年の計画
 日本:重要な市場
・どうして参加
 知識
 スキル
 楽しむ
・会社としてのメリット
  要件
  将来
  新しい市場
・皆さんも参加してね!

■技術的な話
 No1になった
 Java8
  新しい機能もでる
  言語、ライブらし
 StreamAPI
  シンプルな形
  MapReduceのかたち
  エンジン
 Java8クラウドでデプロイ
   Javaミッションコントロールとフライトレコーダー
   アドバンスド マネージメントコンソール
 複数のJavaバージョン
・向こう20年、ますます発展
 セキュリティ:1番のプライオリティ
 密度:ユーティリティコンピューティング
  メモリのフットプリント削減
 起動時間:速く起動したい 9で改善
 ガベージコレクション:パフォーマンスに影響 予測性、低遅延性
 プロファイリング
 言語のモダナイズ
・Java9
 モジュール化
 Javaプラットフォームの解体
 セキュリティ
   (バウンダリ)
 パフォーマンス
→ジグソーの中身
 OpenJDKで開発
 REPL提供:インタラクション
・9以降
 Project Valhalia
  メモリフットプリント少なく
  Value Type
 Project Panama
  ネイティブとの境界線
  あたらしいツールセット
  最適なスピード、性能向上
・OpenJDK

■ツールの話
・デモを交えて
・その前にNetBeansIDE
  Javascriptでも使われている
  Oracle JETでも
  JDK 9
  ジグゾー
・デモ

■サービス
・様々なトレンド
  マイクロサービス
    その前はモノグリッド
  →アジャイルになる
  分散化コンピューティング
  polyglot様々な言語
  新しい技術:コンテナ DevOps
   どこで取り込む?
・JavaEE 7
  HTML5、JSON-P
  RESTFul
  オンプレで広くつかわれているが
  クラウドに移行している
  オンプレからクラウドへ
  Dropウィザード はービット
  コミュニティから
   JSON-B,CDI2
  でも、マイクロサービスも
・将来
  マイクロサービス:ステートレス→スケーラビリティ
  モノリス:
 ポリグロっと:RDBとNoSQLも
  モノリス:開発チーム、縦割り
  マイクロサービス:1つのチームにいろいろ
 明らかにクラウド化
  コンテナに変化
  IPがダイナミックに付与、
  イミュータビリティ
  サービスとして消費、インフラ違うだけ
 主要な要件
  お互いから隔離されている:マルチテナンシー、ドメインパーティション
 もっと、モジュラー
 使いやすい
 起動早く:コンテナ起動
 JAX-RS,ノンブロッキングIO、サーキットブレーカー

■損保ジャパン日本興亜のJAVA戦略
・会社案内
・IBM 基幹→COBOLをJAVAへ

3つのデシジョン
1.実現方式の決定
  現行ソースの洗練か?Re-Writeか?
2.言語の決定
  COBOL継続か?他言語への転換か?
3.フレームワークの決定
  OSS-FW?ベンダー提供FW? Java EE?
→JavaEE7ベース

・JavaEE7利用方針案
 プレゼン
  HTML5
  MVCは8
  Faceletのよしあし → JSF

 ビジネスロジック
  CDI:しっかりインジェクション
  コーディングも・・アノテーション定まってないが、

 パーシスタンス
  SQL?O/Rマッピング?
  デジタルディストラクション
  BigQuery,Hadoop→どこまでSQLにこだわるんだ!
  JPA

→動くのか、模索
  JAX-RS、JBatchも試してる
 アノテーション
 JCP

・保険の先へ挑む
 ・安心安全健康支援
 ・デジタル戦略の推進
 ・Java環境全面採用による業務革新


・オートバイで回った。インタビュー
 特別な発表
・セバスチャンがJavaチャンピオン さけ
・鈴木さん

■日本Javaユーザーグループ
・ぜひ参加してね(今4920人)
・カンファレンス、地方のJUG、JSP
・ないとセミナー
・JJUG CCC 2016 Spring
 JavaDayより大きい
 次は11月
 1380名申込、810人参加43%がはじめて
・なぜコミュニティに参加するの?
 現場のノウハウを知ろう
 すごいエンジニアに会おう
 自分が発信して勉強しよう
・参加方法
 MLに登録する
 機になる勉強会に行ってみる

■Oracle IoT Cloud Serviceお活用
ドローン

Oracle Internet Of Things Cloud Service
・Connect,デバイス通信
・リアルタイム処理、判定
・外部連携

IoTシステムとしてのドローン
・様々な分野
・安全に運用管理

ドローンの活用が期待されている様々な分野
・農業
・はし
・災害

ドローンデモ
・センサー:太陽光発電
。クラウドへ
・CPU ARM こーてっくす7
 Java SE8
 とれぶる バッテリー

・ゲートウェイ:Linux JavaSE8
 ビーコンデータ、デバイスIO ストリームエクスプローラー
 ゲートウェイ
   DNPにSAM:鍵
   →重要データの管理機能、データの暗号化、認証
 操縦者、SAM(機器認証)、運用面、盗難、解析できない(ICカード)
 OSGIでアップデート

・ドローンを安全に運用管理するための市区にを実現
 IoTシステムを安全に運用する技術

■Pepper+Oracle Cloud Platform
・PSソリューションと協働
・Pepper写真撮る
・タブレットでJSF(JET,Node.js)で写真撮って、Pepperへ
  なぜ4本指、Duke君は4本・・・(日本人の人、違う話する・・)
  Pepper君はでてこない。認識はして、伝えてくれたけど・・
・Pepper+Enterprise System / Java



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

JJUG CCCに行ってきた! その5 Spring

2016-05-23 12:20:15 | JavaとWeb
5月21日 JJUG CCCに行ってきた!のつづき

What's new in Spring Framework 4.3 / Boot 1.4
 +
Pivotal Colud Native Approach

をメモメモ




自己紹介

Spring Boot
・フレームワークのためのフレームワーク
・組み合わされた状態で、すぐにアプリケーション開発できる
・Spring Boot ; Springチームが作ったケーキ

Spring Initializr
・Spring Bootアプリケーションを作る

Roadmap
・Spring5

・Spring Boot 1.4
 今回はちょっとした改善ばかり
 バナーのアップデート
  IntelliJ IDEA:サポート Myan Cat、画像もサポート
  Tweet your banner

 テストの改善機能
  テスト向け機能の改善
    test restテンプレート
    モック(そこだけモック化されたテスト)とスパイ
  組み込みサーバーを使わない便利クラス
    JPA,SpringMVC(HTML,Web),JSONスライス向け

 Spring4.3が使えるようになった
  2020年までサポートされる
  コンストラクタインジェクション
   →Lonbokと組み合わせた時

 CDIのインジェクションポイント

 複合アノテーション@RequestMapping,@Scopes
 @SessionAttribute

Spring5
 2017年以降の次世代
 依存ライブラリのメジャーアップデート
 リアクティブサポート
   ノンブロッキング
 →Reactor
   fluxとMono
 Spring Reactive
  fluxをやり取り

Spring Cloud
 分散システムのデザインパターンを提供
  →NetFlixが提供してくれている
 マイクロサービス
 サーキットブレーカー

クラウドネイティブとは(話半分に聞いてね)
・マイクロサービスは一部(DevOpsとかいろいろ・・・)
 コンテナ
 マイクロサービス→1つ1つの機能をデプロイ
    →CD→パイプライン

・なぜ必要?
 スピード&セイフティ ビジネスの加速(イノベーションの加速)
 Monolith
 SOA:データベースの依存関係
 マイクロサービス:自分たちの変更は自分たちの中で

・まずは12factorAppからはじめる
 コンフィグレーションは外出し
 ローカルファイルX

クラウドネイティブプラットフォーム
 Pivotal cloud foundry
  ・Spring Cloud Services
  ・Microservice with SCS

ConcourseCI
・すべてパイプライン(yamlで書く)
・タスクはステートレス(Dockerイメージを使う)

デモ

PCF Dev
・チュートリアル

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

JJUG CCCに行ってきた! その4 JavaEE MVC

2016-05-23 02:22:42 | JavaとWeb
5月21日 JJUG CCCに行ってきた!のつづき

CD-4 ネクストStruts/Seasar2としてのJava EEアクションベースMVC入門 – MVC 1.0、Jersey MVC、RESTEasy HTML –

をメモメモ




#ccc_cd4で資料のありかはつぶやいている

■ネクストStruts/Seasar2としてのJavaEEアクションベースMVC入門
・今回の話
 Thymeleafを使っている
 ソースはGithubにある

・自己紹介

1.アクションベースMVCとは
 HTTPのリクエストに注目したフレームワーク
  Struts/Seaser2
 コンポーネントベースMVC 画面とJavaクラスが1対1
JavaEEのWebフレームワーク
 JSF:コンポーネントベース
 JAX-RS:アクションベースだがJSONを返す

アクションベースMVC
 MVC
 JAX-RSベース

JavaEEは仕様(実装はない)
 MVC1.0の参照実装はおざーく

Struts/Seaser2のアノ機能
 コントローラー
 バリデーション
 例外

ない
 画面構築がない理由
  新たなビュー言語は定義しない
  使いたいのを使え
 公式
  JSP Facelets
 Ozark独自
  Thymeleaf
 ViewEngineを使えば他も

JSP・Faceletの問題点
・JSP
  ビューとロジック交る
  XSS脆弱性
・Facelets
  全機能使えない(AJAX)
  Javascriptの相性悪い

Thymleafを使ってみよう
・ピュアなHTMLで賭ける
・デフォルトでエスケープしてくれる

MVC1.0でThymeleafを使う方法
pom.xmlにozark-thymeleafを依存性に加えるだけ

二重サブミット防止がない理由
・クライアントサイドで行うべき
  →自前で

準備
・Jax-RSの有効化
@ApplicationPath("/api")

基本的なコントローラーの作り方
 斜体 MVC1.0
 それ以外は、JAVAEEなどの
 戻り値 ビューのパス、拡張子必須

入力値を受け取るフォームクラス
  @inject Map+Iterator

渡された値の表示

バリデーション
 BindingResult

エラーメッセージの表示
エラーメッセージの記述

注意
 フォームバインディング機能はない
 @BeanParamは複数パラメータを1個のクラスにまとめただけ

フォームバインディングの実装

例外処理
 ExceptionMapperインターフェース実装クラスを作成
 @Providerを忘れずに
MVC Context
@controllerをつけるかつけないかで実装切り分けられる

・デモ

EE7におけるJerseyMVC
・Jax-RSの参照実装Jerseyの独自機能
・RestEasyJax-RSの独自実装

JerseyMVCの基本的な使いかた
・コントローラー戻り値Viewable
・コンストラクタの第二引数でビューに値を渡す

JearseyMVCでバリデーション
・コントローラーメソッドの中でバリデーションする

この方法の
・メリット
 ピュアなJAX-RS
 オレオレフレームワークを防げる
 リダイレクト

・RestEasyHTML
 RenderableをコントローラーメソッドがView
 WriterInterceptor
 コントローラーにもThymeleaf
 バリデーションはJarseyと同じ


4.その他の知っておくべき
・Jax-RSの知識が不可欠
・うらがみさんの資料 「処理パイプライン」
 JavaEE7徹底入門

まとめ

注意点
・JerseyMVC,RestEasyは標準ではない

デモ:おれおれMVC
ぷろばいだーくらすは、しんぐるとんなので、スレッドセーフではない点に注意

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