Seeing is believing

いちエンジニアの日々の興味のあるところ、イベント参加記録、学びの共有を取止めなく※このblogは個人の見解であり所属する組織の見解ではありません

JJUG CCC2016Fall(Winter?)に参加してきました。

JJUG CCC2016Fall(Winter?)に参加してきました。ここ最近は参加していますが、刺激的で、考えさせられるセッションが多いです。

1000人ぐらい参加したのではないだろうか、というぐらい人が多かった。。

コミュニティイベントとしては国内最大級かと思われます。

www.java-users.jp

参加したセッションの紹介と参加中に取ったメモを残しておきます。

  • Be a great engneer! フォローするトレンドとスルーするトレンドの見抜き方

speakerdeck.com

Pay it forwardのOSS精神は大切。
JSFXDoclet,Guice,Silverlightなど、、流行らなかった技術、プロダクト、トレンドなどが沢山あったが、どうすれば良かったか、という自己振り返りから作成したセッション。

審美眼を磨くために必要なこと → 自分で考えること
技術を見たときに本質を何か考える→技術をメタで考える
体:操作
物:パターンなど
知:深い知識
心:メンタル
理:本質を理解

本質は自分で動かし、自分の頭で考え、本質を見抜いた物が真理
人から聞いた「理」ばかりを語るのは空虚。
守:師の教えを守る
破:自分で考える段階
離:独自のセオリーを想像する段階
本ぞを忘れるな:教わった基本を忘れるな
〇〇宣言とか、〇〇Manifestには真理が詰まっていることが多い

技術の仕入れ元は?→技術カンファレンス。最近ではSpringOne.
Thoughtworks,Technical Radar:その技術がどの段階にいるのかが分かる
ガートナー社のイベント:トレンドを踏まえて次の1年から先の数年を予見した発表を行う
 →機械学習、IoT,AR,VR,ブロックチェーン、メッシュアプリ
  →それらを支えるのが、マイクロサービスアーキテクチャ、サーバレスアーキテクチャ、分散ストリーミング
マイクロサービスは本質的には、アジリティとスケーラビリティを実現するための技術
 そのニーズはあるか?導入するためのコストは払えるか?組織には導入の土壌があるか?

  • SIerもはじめる、わたしたちのDevOps

www.slideshare.net

お客様がDevOpsしたい?ツール入れたい× リードタイムを短くしたい○
ユーザーの行動を可視化→Kibana。改善提案。
仮説を立てることが重要。仮説に合わせてログの収集の仕組みを変える必要がある。
Dockerが実現する世界。確認済みのインフラ、アプリがそのまま使える。


Dockerを導入するためには、変化に強いシステムに耐える組織が必要。
→適材適所、組織改革が必要。

 

  • Spring Cloud Stream 

www.slideshare.net

クラウドの時代になり、Httpではなく、MQなどイベントドリブンに回帰してきているんだなあと思ったのが印象的でした。リアクティブの流れも当然なのですね。。

Spring Cloud Stream とはイベントドリブンなマイクロサービスフレームワーク
  →Rabit MQとkafkaが現状プロダクトサポート。
 マイクロサービスで連携サービスが増えてくると、大変。フロントサービスが各サービスを呼ぶ。オーケストレーションスタイル。
HTTPだと、呼び出し元にサーキットブレーカですぐにレスポンスを返して伝える。遅い。結局密結合になっている。
 →イベントドリブン。メッセージングを使って連携する。
 元はPublish,先はSubscrivbe → Choreograhy Style
Persistent Pub-Sub > PersistentしてくれるのはMassage Broker
Consymer Group > スケールした場合に、どちらかにメッセージが届くように負荷分散できる>durable:必ずどこかには届く
Conumer Driven Contracts:受け取る側が送付側に仕様を表明する、ということ。
 >Spring Cloud Contract(DSLをGroovyで書く)

  • PDFとJava101 

ITextの開発者の方によるプレゼン。

iText側もApache PDF Boxを意識しているんだなあ、と感心。

Apache PDF Box:使い始めはかんたんだけど、PDFのSpecを知っている必要がある
iText:RowAPI/HighLevelAPIどっちもあり、便利とのこと。

はじめに · WildFly Swarm Tour

この枠は参加したいものがなかったので、ハンズオンに参加してきました。

まずはWildFlySwamのキャッチアップもしたかったので。CRUDアプリ作れるところまでできました。

WildFlyの特徴:高速な起動、高度な管理インターフェース、Module Class Loader
WildFly Swarm はWild Flyを組み込んだuber jar(実行可能jar)を作成可能
各種インテグレーション(例Netflix OSS)
最新版は2016.12.0(月次リリース)

 

  • Selenideを試行錯誤しながら実践するブラウザ自動テスト

Try Selenide

Codebone社(エストニア)製のライブラリ。
Selenideはシステムプロパティでブラウザを設定することができる。windowサイズなども
Jqueryライクにかけるのが特徴的。hamcrestのアサートっぽい。
Ajaxアサーションが楽。表現待ちのwaitを書く必要がない。(selenideないで再起処理されている)
AjaxまわりのAssertionも、Selenideは特に変わりなく実行できる。Seleniumだと非同期処理の場合はwaitを入れないといけない。
スクリーンショットで、selenideではHTMLファイルも保存される。
ラジオボタンのセレクト実装描きやすい
selenideのgithubwikiに比較表あり。
ぺージオブジェクトパターンで大量のlookupを回避
捜査対象のぺージを表すclassを作成し、そのclassを使ってテストを行う。
selenideではぺージオブジェクトの生成機能がある。アノテーションで定義。
headlessでテストしたい場合は、RemoteWebDriverとDockerを使うのが良さそう
SeleniumがDockerイメージを提供している。ただし、IEはない。

  • Payara microの設計と実装(蓮沼さん)

www.slideshare.net

Payara microとはPayaraのEmbeddedリリース
デプロイとアプリ実行を1コマンドで実施できる
Hezekcastでのクラスタリングがサポートされている
PayaraMicroのメインクラスがKernelを起動する。これは一般的なAPサーバと変わりはない
Ctrl+Cでのシャットダウンはshut down hookにて実現。
HazelcastについてはCLOVERというサイトを参照 d.hatena.ne.jp/Kazuhira/
Payaraの自動クラスタリングはHezelcastそのもの。ログがHezelcastそのまま。
Http Auto-binding機能。8080が使われてたら8081を使う、といった機能。デフォルトでは無効。
Maven リポジトリにある war をおとしてきて Payara にデプロイできる
Uber はウーバーと呼ぶ。
META-INF/deployの中のWARファイルを自分自身から取り出して、自分自身にデプロイする
Payaraは実行中にdomain.xmlを書き換えている。
メモリ内のDomainBeanをJAXBでファイルに書き出している。
Payara Micro APIとは?
組み込みサーバとして動くもの(WebProfile+Jbatchなど)

  • 全般

講演資料一式は以下にまとめられています。

GitHub - jjug-ccc/slides-articles-2016fall: JJUG CCC 2016 Fallの発表資料およびブログ記事まとめ

 

疲れてきたら、途中で帰ろうと思っていましたが、結局朝から晩まで参加しました。

(懇親会は不参加)

満足度は相当高いです。未参加の方、半年毎に開催されるので、今後の参加をおすすめします。

 

 

今更ながらGithub

Github良さげ。というか仕事で使わないとそろそろやばい。

  • コードレビューの習慣化
  • 他チームへのPullRequest
  • 他チームへのIssue
  • ソースのOpen化
  • 他ツールとの連携
  • ローカルリポジトリ

(Gitでも、というのばかりだけど気にしない)

新人入って来て、新規でソースコード管理リポジトリってものがあるよ、、と

伝えて、SVN、、、って。。ならないようにしたいですね。

 

ブランチ戦略は、よく考えます。

 

 

JavaOne2016開催直前、今年のJava関連ニュースまとめ

もうすぐJavaOne 2016ですね。

Javaに関するワールドワイドなイベント(お祭り)なので

多くの開発者が集まり、サプライズ発表あり(?)とが期待されます。

そんなJavaOneに参加される人のために、直前情報として残しておきたいと思います。

ただし、私は参加しませんが。。

そこで、JavaOneまでの2016年のJava関連の出来事を簡単にまとめておきたいと思います。

OracleJava9にてアプレット非推奨を発表:1月

blogs.oracle.com

JavaEEユーザーによる、JavaEE Gurdians結成:6月

www.infoq.com

JJUGも支援表明

Java EE Guardiansへの支援表明と活動紹介 | 日本Javaユーザーグループ

 

Java Gurdiansの活動を受け、 Oracleは声明発表。詳細はJavaOneで。

yoshio3.com

・ SpringOneにてTomcatの開発がJavaEE仕様策定が遅れていることにより、影響

www.infoq.com

JavaEEクラウドに向け、軽量化を望まれる

www.infoq.com

OracleJCP EC、 JavaEEの戦略を共有

www.infoq.com

OracleNetbeansApacheへ譲渡

forest.watch.impress.co.jp

JavaEEのリリースと、その参照実装のGlassFishと、その最新Glassfshを取り込んだNetBeansが同時にリリースされることは、今後なくなるんですかね。。。

・2017年3月リリース予定だったJava9、7月リリースに変更か?

Proposed schedule change for JDK 9

 

ネガティブニュースが多いですね。。クラウド対応、Micro化に期待しましょう。

JavaOneでは、Oracleの発表と共に、それを聞く聴講者のリアクション、反応に

注目です。

 

 

JavaDayTokyoの基調講演ネタ

参加はできなかったが、セッション内容をあらためて確認してみると、

損保ジャパンの役員が登壇したとのこと。

なぜ??と思っていたら、

 

ニュース - 損保ジャパン日本興亜がJavaで基幹システムを刷新、日本オラクルがPaaSや教育で支援:ITpro

 

のとおり、最近Oracle社と絡んで、且つJCP参加したから、だったのねー。(完全に推測)

windowsからDockerを触る

Docker技術のキャッチアップのため、

devcenter.magellanic-clouds.com

kitematic.com

を参考にDocker触れる環境を構築。

Jenkinsが入っているイメージを取ってきて、Dockerイメージとしてローカル上で動作させる、、なんてことも簡単!!

 

春のJava IDE祭り 〜激突!? 3大IDE!に参加してきました

溜まりに溜まった仕事を区切り(見切り?)をつけ、JJUGの勉強会に参加してきました。

テーマはIDEです。

 

春のJava IDE祭り 〜激突!? 3大IDE! 2016-04-25(月)19:00 - 21:00

  • inteliJ

 - Debug実行時にタイムリープ可能。ブレイクポイントおいたところから、少しステップ戻して、、とかが可能。
  http://blog.jetbrains.com/jp/2014/03/06/420
 - HTML編集時に、ブラウザで動的反映も可能。(Webサーバをブラウザでみているのと同じ感覚、)
 - JavaScriptサポートも。リファクタリングも可能。(文字列置換ではない)
 - git連携用のクライアントあり。
 - SQL実行も用意。SQL分の補完可能。テーブルリファクタもそこで可能。
 - Kotrinとの親和性も高い(JetBrains社製なので)
 - FWとの親和性も高い。SpringBootでダイアグラムでインジェクション先などの関係を図示化できる。
 - Java8には対応済。Java9についてもすでに対応済み。取り込み速度はメチャはやい。
 ‐ IDEAで後ろに.varとかつける記法:Postfix completion
  IDEA 13.1のPostfixコード補完 | JetBrains ブログ
  http://blog.jetbrains.com/jp/2014/03/19/433

 - EclipseはマーケットシェアNo1.  --2014年時点48%。IntelJ44%、NetBeans10%
 - Eclipseは遅い、重い、プラグイン選定がめんどいなどの課題が。。
 - エンタープライズで利用する理由
  - プラグインの充実、自分でも開発可能
  - 設定をInport/Exportできる → ルールを統一、底上げできる土台がある
 - なぜEclipseが重いのか?
  - プラグインが重い(数や、フックポイントなど)プレアデスも。
  - Incremental build(自動ビルドは狭く。有効にしたまま、ソースコード読み取り範囲を狭めるなど)
  - WTP(For Java EE):XMLの編集、バリデーションなど
  - その他:AntiVirusも大きな要員。Eclipse実行時にJarを読み込むので、Zip解析が走る
 -APサーバを利用するには?→Tomcatプラグイン。SpringBoot。Maven+RemoteDebug
 -JavaScriptEclipseではなく、VisualStudioCodeがおすすめ。
 - おすすめプラグイン:DB Viewer-ER Master、STS(Spring Tool Sxxx):MicroServicesのように複数同時にプロセス起動可能

 - Cloud IDE
   ‐Dockerコンテナイメージ
   -ブラウザで操作する
   ‐自動補完可能だが、まだ、ちょっとしたタイムラグあり(サクサクではない)

 ‐NetBeansチェコプラハ製。
 ‐もともとは学生プロジェクト。その後Sunがオープンソース
 ‐最新Javaテクノロジをいち早くサポートするのが最優先のゴール
 ‐英語版と日本語版を同時リリース
 ‐HTML5JavaScript開発もできる。フレームワークもそれなりに対応されている。
 ‐CSS3も。ブラウザ連携として、Chrome拡張や、Webkit統合も
 ‐ApacheCordova
 ‐Oracle JavaScript Extention Toolkit(Oracle JET)
  ‐Jquery,KnockoutJS,RequireJSベースのオープンソースライブラリ(3月にリリース済み)

  ‐NetBeans上でテンプレート読み込みの上、簡単にSPAアプリが作成可能。UIコンポーネントベース。

 

Selenium WebDriver超入門

試行錯誤して動作&IEでのキャプチャまで実行できたのが、

以下のコード。

たぶん環境差異ありなので、参考にする際は注意されたし。

 

 

 

    
import java.io.File;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.io.FileHandler;
import org.openqa.selenium.remote.DesiredCapabilities;
public class Sample {

	public static void main(String[] args) {
		File file = new File("C:\\oper\\Java\\selenium\\IEDriverServer.exe");
		System.setProperty("webdriver.ie.driver", file.getAbsolutePath());

		//http://stackoverflow.com/questions/12034969/internetexplorerdriver-zoom-level-error
		DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
		caps.setCapability("ignoreZoomSetting", true);
		WebDriver driver = new InternetExplorerDriver(caps);

		driver.get("http://www.google.com");
	    System.out.println("Page title is: " + driver.getTitle());
	    WebElement element = driver.findElement(By.name("q"));
	    element.sendKeys("Cheese!");

	    element.submit();
	    saveScreenshot(driver,new File("C:\\oper\\Java\\selenium\\sample1.png"));
	    driver.quit();
    }

    private static void saveScreenshot(WebDriver driver ,File saveFile){
        try {
            if(driver instanceof TakesScreenshot) {
                File tmpFile =
                    ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
                FileHandler.copy(tmpFile, saveFile);
            }
        } catch(Exception e) {
            throw new RuntimeException(e);
        }
    }

}

IEで操作するところまでできたが、動作がめちゃめちゃ遅い。特に文字入力作業のところ。。これでは、大規模開発テストではかなり心配。。
今後やること
Maven
Junit
・SeleniumIDE→Javaへの動作運用検討
・画面キャプチャ切れてしまうのでは?の確認
・動作早くする余地がないかの確認。