エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

2018/11/05週 気づきと振り返り

業務こなして思ったこと

順次実行はPromise

JavaScriptやるようになって半年。Typescript含めれば、1年。
順次実行したいものを実装したい場合は、自前でキューみたいなものを用意するより、Promiseで処理を積んだ方が、簡単に実装できる。

git log --decorate

ログ内容にHEAD、ブランチ名、タグ情報が付与される。

タグ付けしたさいの確認は、これを使ったほうがいい。

gitで未プッシュの差分を見る

git log origin/{ブランチ名}..{ブランチ名}

プッシュしたか分からないときに使う。 sourcetree使えばいいと、最初のときは思っていたが、細かいことをしたいってなると、コマンド打つしかなくなる。

だから、CLIには、なれたほうがいい。

今は、どっちも使っている。
ステージに上げるのは、差分見ながらやれるsourcetreeの方が良い。
CLIだと、何がなんだか分かりにくいんだよね。。。
差分をもっと簡単に表示させる方法はないのだろうか?
上下に出てると分からないから、左右で見比べられるようにできないだろうか?

個人的に思いついた名言

責任は果たすものじゃない。なすりつけるものだ。

汚い大人の社会は、だいたいこうです。
大手のSIerは、この考えで動く人が多い。

人の名前よりポケモンの名前を覚えるほうが楽。

現場の人間の名前は、ほとんど覚えてない。
仕事上、関係なければ覚える必要ないと思うんだよね。

2018/10/29週 気づきと振り返り

Chromeのコンソールログ

Devtoolの設定で、Presrvelogにチェックを入れると、画面遷移が起こってもコンソールログの内容がクリアされない。

複数画面をまたぐ場合のデバックに有効

Windowsのスクリーンセイバーのバブル

現場のPCは、windows8.1で、スクリーンセイバーにバブルを設定している。

極稀に、バブルがものすごい勢いで動くことがある。
これは、ラッキーな現象なのだろうか?
それとも、バグ??

キーボード

C, N, M, > がすり減って文字が見えなくなってる。

特に > が見えないのは辛い。
文字は、普段ブラインドタッチしているから問題ないんだけど、記号は、場所を覚えてないのよ。。。
毎回 < か ? と打ち間違える。

たぶん、これらのキーが減ったのは、JavaScriptやってるせい。
Cは、コピーだろうな。
M/Nは、なんでだろう?

は、アロー関数使うからだと思う。

GerritのUI

現場のGerritのバージョンがあがった。
UIが、大幅に変わってる。
慣れるまで時間がかかったが、前よりは使いやすくなった。

Gerrit使ってて思うんだけど、 +1/+2の概念の違いが分からない。
+1を複数押せば、+2になるんじゃねぇーのかよ!って毎回ツッコみたくなる。

2018/10/22週 気づきと振り返り

OAuth2.0

認証機能を作っているのだが、全く動きが覚えられない。
毎回言われるがままにやってきたことのツケが来た感。
動きが全く覚えられないのだが、どうやって覚えればいいのか?
しかも、リクエスト/レスポンスで使っている値が、それぞれどういう意味を持つのかもサッパリ。
分かりやすく説明しているサイトないかな?

体臭

会社で別の案件に参加している人の話を聞いたのだが、体臭がキツイやつがいたそうな。
臭いが原因で、切られる直前までいったらしい。

臭いがキツイのなら、電車はどうやって使ってるんだろうって感じた。
周囲は誰もよってこないのかな?

俺も、臭いには気をつけよう。。。

ネットワークスペシャリストの試験

やっと試験が終わった。
取り敢えず、午前Ⅱまで突破していることを確認できた。
午前問題は、たまに新規の問題が入ってくるからビビる。

問題は午後問題だな。。。
最初のフォワード/リダイレクトプロキシを順番逆にしたような気がする。。。
そろそろネットワークスペシャリストには合格して、次のステップに進みたい。

直近の目標は、簿記3級の合格。

睡眠

だいぶ寒くなって来たので、暖かくして寝るようにしたら、物凄い寝付きが良くなった。
体温を上げるのは、睡眠に有効なのかも知れない。

最近寝るときは、水中に浮かぶことをイメージして寝ると寝やすいということに気づいた。
他の人は、眠る際には何を考えているんだろうか?

その他

無双OROCHI3にハマってたけど、もうやり尽くした感がある。
というか、オーディン強すぎだろう。
時を止めるのは、アクション系だとチートだと思う。
逆に、呂布は使いづらい。
技の出が遅いし、通常神術が当てづらい。

JJUGナイトセミナー「JDK 11リリース記念:今知っておくべきJDK 11の重要ポイント 参加報告

公式サイト

【東京】JJUGナイトセミナー「JDK 11リリース記念:今知っておくべきJDK 11の重要ポイント」 - 日本Javaユーザーグループ/Japan Java User Group | Doorkeeper

まとめ・メモ

OracleJDK

  • ソース&バイナリをオラクルが提供
  • 用途によって有償

OpenJDK

- 無償

参考サイト

JDK 11リリース記念:今知っておくべきJDK 11の重要ポイントの個人メモ

JavaFX

同梱されなくなっただけ。
開発はされている。

JEP 330

JEP 330: Launch Single-File Source-Code Programs

javaコマンドだけでJavaファイルを実行可能。

制約

  • 1ファイルで完結している必要がある。
  • トップレベルクラスがmainを持っている必要がある。

仕組み

SourceLancherが起動してコンパイル実行している。

JEP 328

JEP 328: Flight Recorder

プロファイラ。情報収集を行うだけで、可視化は別途用意する必要がある。

JEP 181

JEP 181: Nest-Based Access Control

コンパイルされたときに、余計なクラスがなくなる。

JEP 320

JEP 320: Remove the Java EE and CORBA Modules

JavaEE/CORBAが削除された。

JEP 321

JEP 321: HTTP Client (Standard)

HTTPクライアントの実装。
HTTP2, Reactiveに対応。

sendAsync→非同期
send→同期

API追加

Null I/O

linux/dev/null と同じような動きをする。
何もしないクラス。

Rredicate.not

今までのラムダで書けなかった、条件の反転ができる。

感想

JEP 330のやつは、てっきりコンパイル&実行を勝手にしてくれているのだと思ったら、1個間に挟んでいるのか。。。
意外と制約が多かった。
普通に使うには気にならないと思うが。

Null I/Oは、テストで使うのかな?
それ以外の用途が全然分からない。

2018/10/01に覚えたこと Object.assign/責務分担/npm install

Object.assign

Object.assign() - JavaScript | MDN

他の人が書いたソースを見てて、何をやっているのか分からなかったから調べた。

やってくれることは、オブジェクトのマージ。

とりあえずサンプル

const object1 = {
  a: 1,
  b: 2,
  c: 3
};

const object2 = Object.assign({c: 4, d: 5}, object1);
console.log(object2);

実行結果
> Object { c: 3, d: 5, a: 1, b: 2 }

一番最初の引数に、上書きしていってくれるところ。
いいと思ったことは、Object1がnullだった場合でも、エラーになることなく処理を実行してくれること

const object2 = Object.assign({c: 4, d: 5}, null);

console.log(object2);
// > Object { c: 4, d: 5 }

一番最初の引数がnullだったらダメだけど、2番目以降は、null許容してくれる。
面倒くさいif文のnullチェックが不要になるのは、可読性も上がるし、いいと感じました。

他人のソース見てると、たまに発見があるから、なるべく見たほうが良い。
特に、自分より上位と思われるエンジニアが書いたソースは、要チェック。

責務分担

mainクラスは、ライブラリを使うだけにする。
機能の実装は、別クラスに追いやり、機能をつなぐだけにしておくと、全体像が見通せて、理解がしやすいはず。

気づかぬうちに、mainクラスになんでも突っ込んでしまうのが、いつものことなので、もうちょっと注意したい。

責務分担の定石って、どこかにまとまっていないものなのだろうか?

npm install

問題になったのは、linux環境でnpm installしたものをwindowsで動作させようとして動かなかったこと。

原因は、もちろん、npm installを別環境でしたから。
node_modules\.bin 配下にwindows用にコマンドを叩くためのcmdファイルがなかったため、npm startで使っていたがnpmモジュールが見つからなかったのが原因。
cmdファイルの中身を見たら、node.exe使って何かしようとしていたので、そうなんだろうなと推測。
公式ドキュメント見てないから、本当かどうかは、若干怪しいが。。。

何かの開発環境のときに、同じことしていたのを覚えていたので、気づくのが早かった。

結局、実行する環境でnpm install するに落ち着いた。

たぶん、別環境でnpm installしたものを持ってくるって人は、そうそう居ないので、ためになるかは微妙かも知れない。

Java11の新機能まとめと試し実行

公式サイト

JDK 11

JDK 11 GA Release

新機能まとめ

試してみる

環境は、win10、Javaは、もちろん、09/25リリースのJava11

手頃そうなものを、とりあえず試す。

ファイルからの即時Java実行

テスト用のJavaファイルの用意

まずは、実行するファイルの用意から。
恒例にしたがって、hello world の出力だけする簡単なもの

public class SampleJava11 {
    public static void main(String args[]) throws Exception{
        System.out.println("hello world");
    }
}

ファイル名は、SampleJava11.java で保存。

実行

コンパイルしたふぁいるを実行するときと同じように実行。

$ java SampleJava11.java
hello world

難なく実行できる。
学生時代は、コンパイルして実行を習ったが、今は手軽にできる。
たぶん、コンパイルは習うと思うけど、覚えたらただの手間だから、学習速度は向上しそう。
なんというか、スクリプト言語に近い感じで、即座に確認できるのがいいと思いました。

ラムダ式でも利用できるようになったvarによる型推論

テスト用ファイルの用意

import java.util.List;
public class SampleJava11 {
  public static void main(String args[]) throws Exception{
    List.of("はな", "さあや", "ほまれ", "エミル", "ルールー").stream().forEach((var s) -> {
        System.out.println(s);
    });
  }
}

趣味全開でサンプルを書いてみた。

実行

コンパイルが面倒くさいので、さっき覚えた即時Javaファイル実行で実行

$ java LambdaVar.java
はな
さあや
ほまれ
エミル
ルールー

動く。
Javaを最近使ってないからなんとも言えないが、型情報を書くのが面倒なときに使う感じだろうか?
特に、クラス名が長いのは、見てて苦痛だからね。

クラス名を書かなくて済むのなら、書かないほうが無難そう。
var自体は、Java10で入ったので、特に、大きな違和感なく受け入れられたし、事前学習はできている。
LTSだけ学習していればいいかとも思ったけど、最新バージョンを追っていたほうが、学習範囲が狭くて覚えやすい気がした。

HTTP Client API

今、node使った開発をしている。
提供されたAPIは、nodeで提供されているものがJavaっぽくなった感じの印象を受けた。

JSR & HTTP Client API doc

JEP 321: HTTP Client (Standard)

HttpClient (Java SE 11 & JDK 11 )

テストファイル

import java.net.http.*;
import java.net.URI;
public class SampleHttpClient {
  public static void main(String args[]) throws Exception{
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest getRequest = HttpRequest.newBuilder()
      .uri(URI.create("https://www.google.co.jp/"))
      .build();
    HttpResponse<String> response = client.send(getRequest, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.statusCode());
    System.out.println(response.body());
  }
}

もっとも有名な、Googleさんにアクセスしてみる。

実行

もちろん、即時Javaファイル実行

$ java SampleHttpClient.java
200
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja"><head><meta content="世界中のあらゆる情報を検索するためのツールを提供しています。さまざまな検索機能を活用して、お探しの情報を見つけてください。" name="description">
・・・
;google.jsc && google.jsc.m(m);})();</script></div></body></html>

難なく取れる。

最初、URLをhttps://google.co.jp/ って書いてしまい、ステータスが301で帰ってきて、マジで焦った。。。
ブラウザでgoogle.co.jp って打ってもアクセスできる弊害がここに出てくるとは思わなかった。

手軽にWebAPI試したりできたりするのが、便利かな?
curlで済ましてしまいそうな気がしないでもないけど。
Apatch のHttp Clientからの移行が増えそうな気がする。

雑記

Typescript & Javascript + node で開発しているが、なんなく理解できた。

スクリプト言語の特徴が取り込まれつつある気がする。
今後、nodeで使われているようなAPIが増えていくのだろうか?
Promiseとかは、面白いと思う。
今だと、async-awaitかな?
Javaは、マルチスレッドだから必要ないかも知れないけどね。。。

参考サイト

Java 11の変更点を押さえよう! 標準機能になったHTTP Client API (1/3):CodeZine(コードジン)

Java 11正式版がリリース、本バージョンからOracle JDKのサポートは有償に。OpenJDKで無償の長期サポート提供は現時点で期待薄 - Publickey

Java 11正式版がリリース、本バージョンから「Oracle JDK」のサポートは有償に (1/4) - ITmedia エンタープライズ

Java 11正式版リリース、3年の長期サポート対応のLTSバージョンが4年半ぶりに更新 - GIGAZINE

2018/09/10週 気づきと振り返り

やったこと

  • サーバーとの疎通確認

気づき

superagent

withCreadentials() → Cookie送ってくれるやつ。
Access-Controll-Allow-Originが * のときは機能しない。

tsconfig

es5 → es2018
targetだけじゃなく、libも変える必要がある。

chromeのSet-Cookie

アクセスしているサーバーと別ドメインのサーバーからSet-Cookieが来た場合、ChromeのDevToolのNetworkタブでは見えない。

ただ、実際には設定されている。

見る方法はない。

振り返り

ChromeのSet-Cookie

疎通確認でマジ困った。
あるはずのSet-Cookieがなんでないの?って2日くらい悩んだ。
結局、Cookieは正しく設定されていて、その他がおかしかっただけだった。

Chromeで開発する場合は、Set-Cookieは最後に疑う。
そうじゃないと無駄な時間を過ごす。

もしくは、他ブラウザで試してみる。

その他雑記

ChromeのSet-Cookieで悩んだ1週間だった。。。

年を1つ取ったが、このままでいいのかにも悩んでる。

メンタルが殺られそう。
今は、購買欲で誤魔化した。
あそびあそばせ」って漫画の電子書籍買ったけど、無茶苦茶面白い。
久々に笑った気がする。
俺が最後に笑ったの、いつだっただろうか?

今は、27日の無双OROCHI3が楽しみ。
もう、それくらいしか楽しみがない。