エンターテイメント!!

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

Advent Calendar 2018 Gitまとめ

感想・まとめ・メモ

Git Advent Calendar 2018 - Qiita

12月1日

Gitのマージ概要および、共通の分岐元を持たないブランチ同士のマージ(割としょうもない話) - clock-up-blog

俺、「よくあるマージの誤解イメージ」の内容で理解してたわ。。。

よくあるマージの誤解イメージ

Gitのマージ概要および、共通の分岐元を持たないブランチ同士のマージ(割としょうもない話) - clock-up-blog

マージしたものを新規のコミットとして登録しているわけね。
既存のものがくっつくわけではない。
SVNとかのイメージを持ってると、この辺は間違いやすいのかもな。

12月2日

Gitでよく使う「origin」って何?わかりやすく説明します - Reasonable Code

originがデフォルトってのは、なんとなく分かっていた。
オリジンって言われると、なんか中二病っぽい感じがするのは、気のせいですかね?

12月3日

MacでMercurialリポジトリをGitリポジトリに変換する - Qiita

Mercurialって、たしか、Javaのソース管理に使ってなかったか?
ちょっと記憶が曖昧。

時代は、git一強なのかな?
gitを使って結構立つが、もうgitじゃないとダメな体になってしもうた。
久々にSVN使うと、一時的に試しでストックしておきたい実装が留められなくてイライラする。

12月4日

Git のタグやコミットを (PGP ではなく) S/MIME で署名する - Qiita

gitでS/MIMEがサポートされてたのか。。。
公開鍵をアップロードするみたいな手間をかける必要がないわけね。
公開鍵って、手順が面倒だからな。

S/MIMEは、証明証が有効なものってのがネックな気がする。

12月6日

git repositoryの初期化ルーチン

自分は、毎回 git init して終わってた。
実は、もっと必須なのがあるのかも知れない。

ライセンス回りも、特に気にしたことなかったな。

12月7日

Git で今いるブランチを簡単に探す - Qiita

Git Bash使ってると、コマンドライン上にブランチ表示されるから、あんまり気にしたことなかったな。

知りたくなったら、たぶん、僕は git branch すると思うね。
何が表示されるのかは全然覚えてないのだが、なんとなく分かりそうな気がするレベルで叩くと思う。

12月9日

pre-commit時にformatterを実行する - Qiita

hookか。。。
Gerritのcommitidだったかを挿入するためにイジったくらい。
有効活用策は、あんまり思いつかないな。

12月11日

[https://qiita.com/lemon2003/items/c6f4a6332afd806974df:title]

githubって、バージョン管理以外にも静的サイトのホスティングもできるのか。。
亜種っぽい気もする。

12月12日

git logで特定ディレクトリのコミット履歴を閲覧する - Qiita

git log は、オプション前提のコマンド感がハンパない。
素直にgit log を使わず、オプションとセットで使うことが多いのは、俺も感じてる。

12月14日

GitHub などへ git push して Web サイトを公開する他サービス。

githubのurlって、そんなに気にしたことなかった。
だいたいコピペ。
CLIが好きな人は、必要なのかもね。

12月19日

PythonでGitのサーバーを作った話 - Qiita

ngixは、そろそろ覚えないとまずいのでは?って意識が出始めてきた。

12月20日

Markdown対応GitバックエンドのWikiシステム - Qiita

reveal.jsっぽいのを作ったって理解でいいのかな?

12月21日

12月22日

Gitを学んできた方法 - Qiita

gitは、使って覚えるのが早い。
頭で理解しても、実際に使うのとは別。
まずは、コマンド打ったほうがいい。
コマンド量が膨大にあるけど、全部覚える必要はない。
必要になったら覚えればいい。
だいたいは、clone, add, checkout, commit, push を覚えればなんとかなる。

俺は、今、submoduleでかなり苦戦している。

12月23日

git フックを使ってみた - IT分からんわ~_~;

git の hook は、 gerritの設定でちょっとイジったくらい。 もう、俺の中では黒魔術。

12月24日

Subversionしか使っていないSIerおじさんがgitに挑戦する - Qiita

gitにチュートリアルなんてあったのか。。。
git使うようになって2年くらい経つが、submodule関連がまったく分からん。

Advent Calendar 2018 Javaまとめ

感想・まとめ・メモ

12月1日

JEP 320の悪夢 – JDK 11は史上最悪のJDKかもしれない – My Note

後方互換が崩れたって意味で言っているのかな?
だとしたら、問題は、声を挙げなかった方な気がするのだが。。。

12月2日

ゼロから始めるJava生活 - Qiita

最近は、intellij起動することが多い。
JS使うことのほうが多いので、intellijよりもvscodeが更に多いかな。

Javaのプログラミングは、まずテキストエディタからってのは、どこも一緒か。。。
俺も、Javaを最初に習っていた頃は、tera pad 使ってプログラミングしてた記憶がある。

Effective Java とかは、書いて、いろんな問題にぶち当たるようになってから読むこと推奨。
いきなり読むと、変な勘違いが起きるか、本来、問題にぶち当たっていろいろ考えて知恵をだす機会をなくしてしまう気がするな。
きちんと問題にぶつかることの方が大事だと思う。

12月3日

Arrays.asList(T... a) は、なぜ add や remove ができないのか? - Qiita

そうだったのか。。。
Arrays.asList って、てっきり配列をリストのオブジェクトに変換してくれているとばかり思っていたが、ただラップしているだけか。。
それ聞いただけで、タイトルの意味が全部分かりましたわ。

12月4日

Doma2 でログ出力を制御する - Qiita

Domaって、結構柔軟にログの設定ができるのね。
ログ周りって、煩雑で覚えにくい印象が、どうしても拭えない。

12月5日

Retrofitの仕組みを知ろう - 絵描きエンジニアの日常

アノテーションの裏側って、やっぱり、黒魔術感が抜けないな。。。
もっと泥臭くやっている現場もある気がする。

一度、Proxy使ったサンプルを作って、アノテーションを提供できる能力を身につけないといけないかも。

12月6日

Asakusa Frameworkと次世代データ処理基盤技術 - ひしだまの変更履歴

バッチは、FWに頼るほどのことをしないから、FW不要ってところが多いのではなかろうか?
実際にやるのは、メール配信とかDB更新とかぐらいしかしたことがない気がする。
だから、行き着く先は、高速化・並列化ってのは、なんとなく予想ができる。

12月7日

AWS Lambda のカスタムランタイムにて Java のカスタムランタイムで関数を動かす - mike-neckのブログ

独自のランタイム作って、AWSで動かす話か。。。
そういえば、Javaのカスタムランタイムは、作ろうと思っていて間延びしていたな。。
話の内容自体は理解できる。
問題は、それが個人の力でできるかどうかだな。
冬休みに、Javaのカスタムランタイムを作るくらいのことはしたいな。

12月8日

クラウド関連の話か。。。
クラウド系の知識がまったくないから、ライブラリ関連の知識くらいしか追いつけなかったな。。。

Micronaut が気になった。
Springbootと似たようなもんで、現代技術でフルスクラッチで作ったから、起動が速いってのがいいなと思った。
冬休みに試してみようと思う。
Micronaut 調べるついでにSDKMANを知ったのもデカかったかな?
試すのは楽そう。

12月9日

いまふたたびのJDBC - Qiita

ずいぶんと懐かしいコード。
そういえば、うちの会社のJavaコードが、似たような感じだったな。

ただ、この原理原則を知っているのは重要。
ORマッパーの動きを理解するが早くなるから。
ベースの知識として、学び直してもいいかも知れない。

12月10日

絵で理解するリスト処理 - java8 stream / javaslang - - Qiita

javaのstreamは、完璧に覚えたので大丈夫。
reduceが怪しいくらい。
reduceって、なんでこんなに複雑になったんだろうか?
JavaScriptのreduceみたいなので良かった気がする。

12月11日

JavaでわかるJavaScript入門 - Qiita

JavaJavaScriptは、全然違う。
型の扱いもそうだが、個人的には、環境面が大きい気がする。
Node.jsとか、ある程度分かってないとダメだと思う。
JavaでNode.jsみたいなものはないから、Node.jsの概念や動きを掴むのに苦労した。

12月12日

肥満な物語でJavaのDIを解説する - Qiita

DIの最大のメリットは、テストの促進。
どこいってもこの結論を述べている人が多いので、この結論は正しいのだろう。

12月13日

概説 pom.xml – My Note

最近は、gradle使うことが多いかな?
Androidやるときにgradleだから、なるべくgradle使って、動きを覚えようとしているのが、現在。

maven使い始めた当初は、環境構築に利便性を感じていた。

12月14日

3分で分かった気になれるJDK12 - Qiita

Switch文は、もう使わないから、あんまり興味はなかった。
気になたのは、もう一方。
JEP326は、いいね。
Javaエスケープしたりするのは、かなり苦痛。
ちょっとしたプログラミングして、使いたいときに、固定でパスを埋め込もうとすると、かなりしんどくなる。
煩わしさが減るのは、welcomである。

そういえば、Java12は、3月だな。
そろそろ予習をしておこうかな?
ealy buildが提供されているのだろうか?
されているのなら、冬休み中に試す。

12月16日

「JJUG CCC 2018 Fall」に参加してきた。 - 怒Mは思いつきでモノを言う

俺は、声出すのが嫌だから、声出すような役割は回避行動してしまう。
盛り上げ役とか、死んでも嫌。
ボランティアは、あんまりやりたいとは感じないんだよね、悲しいことに。
声を出さなくていい仕事だったら、率先してやるのだが。

12月17日

JJUG CCC 2018 Fall で発表しました - Taste of Tech Topics

自動テストの基本的な内容をまとめた感じ。

12月18日

ツール比較しながら語るO/RマッパーとDBマイグレーション(JJUG-CCC 2018 Fall 登壇記)

テストデータ投入だったら、O/Rマッパーは、手軽なほうがいいと思う。

動的にSQL生成するORマッパーって、本番運用に向くものなのだろうか?
チューニングができないんじゃないか?って不安が払拭できない。

12月19日

Java 9で作成したJavaFXアプリケーションをOpenJDK 11+OpenJFX 11用にアップデートする - ひらおかゆみのなげやりブログ

そういえば、JavaFXは、Java8出た頃以降、触ってないな。

やっぱり、ネックはJava9のモジュール化か。
それ以降は、問題になることが少ないみたいだね。

12月20日

Jibを使用したCircleCI上でのテストフロー構築 - Qiita

とうとうdockerイメージを操作するまで来たか。
環境設定の簡略化が加速しそう。

早いうちにキャッチアップしときたい。

12月21日

段階的に理解する Java 例外処理 - Qiita

やっちゃいけないことの1つに、あと、例外情報を入れ忘れるってのがある。
補足した例外を、別の例外クラスでラップする際に、よく忘れがち。
例外情報が積まれてないと、どこで何が起こったのか、ログみる側は途方に暮れるんだよね。。。
ログ見る側をやってきたから、俺はもう忘れないと思うが、初めの頃は、結構忘れていたかも知れない。

12月22日

JFR APIを使ってメソッドの実行時間をタイムラインレポートにしてみる - Qiita

JFRって何だ?って思ったら、Java Flight Recorderの略か。
レポート機能は、一から作って出力したときの現物をみたら、やる気出るだろうな。

12月23日

Javaの新しいデプロイツールを作ってみた - Qiita

今どきは、dockerで作ったりもするのか。。。

12月24日

Java Advent Calendar 2018, Day 24 – My Note

Maven Centralへ登録したことはなかったが、やっぱり、署名が必要になるのか。。。
署名と聞くと、アレルギー反応が出るものです。
認証とかプロキシを作ったりしていると、アレルギー反対が加速する。

12月25日

【Java11】javacでコンパイルせずにJavaを実行してみた - Qiita

コンパイルせずに実行できるのは、すでに知ってた。
やっぱり、学生時代/新人研修のときのつらい経験を思い出す人が多いのね。

タスク

  • Micronaut 試す
  • Javaのカスタムランタイムを作る
  • Proxy つかったアノテーションサンプルを作る
  • Java12試す
  • JDBCドライバを復習(12/09)
  • jibを使ってみる

JJUG CCC 2018 Fall 参加報告

公式サイト

JJUG CCC 2018 Fall

参加セッション

  • JJUG基調講演】Javaの未来を考えよう
  • 【ランチセッション】俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜(株式会社虎の穴)
  • Project Helidon: Java Libraries for Microservices(David Delabassee)
  • 複雑なドメインに泥臭く立ち向かう
  • (株式会社エスエムエス)
  • もう参照渡しとは言わせない - 2018 冬(武田豊史)
  • 普通のJavaエンジニアが、なぜ技術書を出版するに至ったか?(渡邉 一夫)
  • アンカンファレンス(16:45~17:30)
  • GCを発生させないJVMとコーディングスタイル(数村憲治)

感想・まとメモ

JJUG基調講演】Javaの未来を考えよう

コミュニティの活発さが、javaの生命線だな。
人がいなくなれば、自然と衰退するだろう。

無償は、AdoptOpenJDK AmazonCorretto。
Amazon公開しているんだ。。。
Amazonは、情報分野でも存在感が増している。

Javaチャンピオン増えたな。
いつの間に増えたんだ?

動的型付け言語もJVMで動くような方向になっているらしい。
プロジェクトメトロポリスってのが、気になった。
JVMJavaで実装するらしい。
実装するに至ったのは、C++で書かれているJVMがメンテしづらいから。

micronautが、結構話題にあがってた。
SpringBootをフルスクラッチで開発したようなものだから、実行が速いらしい。
試したが、IntelliJで謎のエラーが出るから、断念した。。。
viでいろいろいじればいいんだけど、僕はvimerじゃないんですよ。。。
サンプルは動かしたけど、違いはよく分からんな。
そういえば、ネイティブコンパイルで動かしたなかったが、それが原因かな?

デプロイ単位が短くなって、ウォームアップ時間を短縮しようという流れになっている。
それは、クラウド上で動かす際に、ウォームアップが長いと、パフォーマンスが出せないから。

【ランチセッション】俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜(株式会社虎の穴)

内製化の動きが多いな。。。
思うんだけど、内製化が主流になってくると、IT業界の問題だった下請け構造は、減ると思うんだよね。
いい傾向ではあると同時に、それを見越して、経営方針を変えていかないとダメなんじゃないかなって思った。※下請け側の方が
大手のSIerは、どうするんだろうな?
たぶん、政府システムに従事するくらいしか仕事がなくなるんじゃなかろうか?

Javaを選んだ理由は、安定性・JVM・エンジニア数。
新規でやるなら、やっぱり安定性とエンジニア数は、省けないだろうな。

全員にmac支給か。。。
windowsは、使い慣れているけど、ちょっとしたバッチを書くのには向かないからな。。。
batファイルの実装とか、かなり面倒くさい。
VBAにしても、どうしても違和感がある。

Kotlinで連想するものは、のんのんびよりの宮内れんげだな。
どっちかと言うと、中の人つながりで思い出してしまう。
Kotlin → ことり → 小岩井ことり → 宮内れんげ

別なことりを思い出す人は、たぶん、ほどんどがラブライバーじゃなかろうか?

Project Helidon: Java Libraries for Microservices(David Delabassee)

nodeのexpressみたいなやつかな?
今expressを弄ってるから、記述がよく似てる。

すいません。。。
英語でも大丈夫だろうと思ってイキって出たのだが、ほとんど聞き取れませんでした。。。

複雑なドメインに泥臭く立ち向かう

保険制度、かなり複雑だな。。。

  • 複雑さは排除して、シンプルを目指す。
  • 複雑なものを複雑なまま受け取ると、考えを広められない。

どちらかというと、リスクヘッジ的な考えでシステム開発をしているらしい。
変化することを当たり前化して開発に取り組んでいるそうな。

  • カスタマーの人は、ゼロから覚えていっているので、仲良くしておいて損はない。

  • 課題管理は、思いついたらすくに登録

  • 考えるのを中断したことがわかるようにしておく
  • いいプログラマー→人間がわかるように書く
  • 実行するプログラムを作るのは、誰でもできる。 たまに、いるんだよな、書いて満足するやつが。
    あと、コメント全く書かないのが至高みたいな人も。
    リーダブルコードを読めと言いたくなる。

  • 人間が理解しやすい→間違いを見つけやすい

  • 付箋とホワイトボードの使い方

    • 書いて話す

ギャグ、ちょっと寒かったね。。。

情報のカテゴライズの問題なんだろうか?
企業文化によって変わりそうだな。
一貫性は、チームでの合意が重要なのだろうな。

  • モブプロをすることで、ソロプロするよりベストを尽くせる。
  • モブ史上主義は、相手を無意識に信頼してしまい、質・効率を落とすこともある。

  • ドキュメントの図=旅行の写真

  • 議論内容を思い出せることが大事

  • 判断がしにくかったり、やってみないとわからなかったいするので、やるなら短いサイクルでやる。

    • リスクが発覚しても、挽回しやすい
  • モデルを最初から完璧にしない。

  • 育てて完成させる

もう参照渡しとは言わせない - 2018 冬(武田豊史)

Javaは参照渡しもあるじゃないかな?
printf書くあたり、元々Cのプログラマーっぽいな。
Javaプログラマーで、printf利用している人は、ほぼいないと思う。

あぁ、俺は参照渡しの定義が違っていたのかな?
引数で渡されているのは、オブジェクトのポインタってことね。
だから、オブジェクトの参照渡しではない。
参照渡しと参照の値渡しがごっちゃになっているわけか。
学生時代にCやっていたが、ポインタのポインタ渡しとかでかなり悩んだ記憶。

他の言語もやってるから、ごっちゃになっているひとがいるのではなかろうか?
俺は、たぶん、Cやったときにごっちゃになった気がする。
他の大多数の人もそうなんじゃないかな?
一つの言語に習熟する前に、他の言語の考えが入ってきて、ごっちゃになったまま成長してしまうという感じだと思う。

普通のJavaエンジニアが、なぜ技術書を出版するに至ったか?(渡邉 一夫)

依頼が来て、いきなりかけるものではないのだな。

本を書く場合、ツテがないと、かなり厳しいんだな。。。
イベントで登壇して編集者に見つけてもらうのが重要そう。

補償金額率は、初めて聞いた。
部数が上がらないと、儲けるには厳しい業界だな。。。
アルバイト代金くらいが限度な気がする。
本を出すことで、お金が入ってくるようになるってことか。
ただ、多忙になってしまうと。

電子書籍だとどうなんだろう?

アンカンファレンス(16:45~17:30)

内容は、以下

  • 勉強方法
  • 会社の人をコミュニティに参加させる
  • 英語の習得
  • Javaチャンピオンになるには?

英語の習得

  • 環境に浸かるしかない。
  • 翻訳アプリは、会話のキャッチボールができない
  • 文法は気にしない。それでも意味は通じる。会話は、投げることが重要。だから、ボキャブラリーの量が大切

こりゃ、海外語訳されたアニメを見るしかないな。

思うんだけど、日本にいるのなら、英語話さなくてもよくない?
日本にいて、英語で喋りかけられたら、日本語しゃべれや!って言い返すけど。
だいたい、おかしいだろう。なぜ日本に来たのに、英語で話すのか?
少なくとも日本語でしゃべる努力をするべきだろう。
習得するのなら、目的がないと無理かもな。。。

会社の人をコミュニティに参加させる

別に来なくていいんじゃないかな?
差別化ができなくなるから、俺は行けとは死んでも言わない。 なぜなら、俺が他と差別化できなくなるから。

現状は、慢性的に継続してくる人がいないのね。
新しい人が毎回いる割に、参加者数が伸び悩んでいるのが、その証拠というわけか。

あれれ?
おっかしいな~。
一人で来ている人には優しくみたいな雰囲気だったけど、僕は毎回一人で来ているが、誰ともしゃべらないね。

たぶん、来ても何かするってのがないんじゃないかな?
俺は、ブログのネタをくれたり、知らないことを見つけるきっかけとして来るけど、継続しない人は、来ただけで終わってる気がする。
だから、行けというより、ブログ書けとか、アウトプットさせる習慣を作ればいいんじゃないかな?
そうすると、ネタを求めてイベントに来るようになるんじゃないかな?ってのが、個人的な考え。

Javaチャンピオンになるには?

政治力

GCを発生させないJVMとコーディングスタイル(数村憲治)

実はたいしたことない?
健康診断シンドローム

頑張って話についていこうと思ったが、途中で萎えてしまいました。。。

2018/12/03週 気づきと振り返り

業務こなして思ったこと

Androidのパフォーマンス計測はどうすればいいのか?

Androidアプリをいじることになったのだが、パフォーマンス計測ってどうすればいいのか?

サーバサイドJavaなら分るんだけど、Androidは情報が全然無い。。。
Androidは、ウォームアップとか関係ないのかな?
Javaで動く以上、JVMの最適化からは抜けられない気がするのだが、どうなのだろう?

調べても分らなかったので、30回くらい動かして、それの中央値と散布図作って終えた。

MacSafariでAudioタグのcrossoriginが効かない

chromeは動いていたのに、なぜsafariはだめなのか?

動かしたときにCORSでエラー吐かれると、絶望感を覚える。
windowschromeでいじってたときも別の箇所でそれが出てきて、proxy用意したりするので、かなり四苦八苦した。。。

今回のやつは、どうやって回避したらいいんだ。。。
proxy作ったら、SSLの証明書が信頼できないって怒られて、絶望感しか沸かない。

safariでのWebAudioAPI

webkitAudioContextを使う。

雑記

佐賀行きてぇ。。。
老後は佐賀で過ごすかな?
来年の早いうちに佐賀に行きたい。

もうMac/Safariの対応で、ハゲそう。。。
手詰まり感がハンパない。。。

会社の飲み会って参加する意味あるんですかね?
つまんなすぎて、もう出ようとは思わない。
2時間壁と喋ってなきゃいけないんだぜ。。。
一人は苦ではないが、何もしないで時間だけ過ごすのは、苦痛。

来年は、Android-Javaの取得が目標かな?
今年の振り返りは、どっかでしたいが、JavaScriptが思うように使えるようになったのは、かなり大きい気がする。

思いついた名言

  • 子どもの夢を壊すのが大人の優しさ。

SDKMAN調査・まとめ

きっかけ

Java Advent Calendar で知らないFWを調べてるうちに、SDKMANにたどり着いた。

SDKMANとは

開発環境の管理ツール。
KotlinやGradleなどのFWなどのバージョン管理・切り替えができる。

環境

ProductName: Mac OS X
ProductVersion: 10.13.6
BuildVersion:   17G3025
java version "10-ea" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10-ea+37)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10-ea+37, mixed mode)

SDKMAN

インストール

$ curl -s "https://get.sdkman.io" | bash
$ source "~/.sdkman/bin/sdkman-init.sh"

SDK!っていうワードアートが出るのが印象的。
意外と早くインストールできる。

試しにGradleインストール

バージョン確認

$ sdk list gradle

上記でバージョン一覧が表示できる。 下記の内容で表示がされるはず。

==== BROADCAST =================================================================
* 06/12/18: Kotlin 1.3.11 released on SDKMAN! #kotlin
* 05/12/18: Gradle 4.10.3 released on SDKMAN! #gradle
* 04/12/18: Grails 3.3.9 released on SDKMAN! #grailsfw
================================================================================
================================================================================
Available Gradle Versions
================================================================================
     5.0                 4.4                 2.14.1              1.11           
     5.0-rc-5            4.3.1               2.14                1.10           
     5.0-rc-4            4.3                 2.13                1.9            
     5.0-rc-3            4.2.1               2.12                1.8            
     5.0-rc-2            4.2                 2.11                1.7            
     5.0-rc-1            4.1                 2.10                1.6            
     4.10.3              4.0.2               2.9                 1.5            
     4.10.2              4.0.1               2.8                 1.4            
     4.10.1              4.0                 2.7                 1.3            
     4.10                3.5.1               2.6                 1.2            
     4.9                 3.5                 2.5                 1.1            
     4.8.1               3.4.1               2.4                 1.0            
     4.8                 3.4                 2.3                 0.9.2          
     4.7                 3.3                 2.2.1               0.9.1          
     4.6                 3.2.1               2.2                 0.9            
     4.5.1               3.2                 2.1                 0.8            
     4.5                 3.1                 2.0                 0.7            
     4.4.1               3.0                 1.12                               

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

バージョン一覧出したけど、指定するの面倒くさくなったので、デフォルトバージョンをインストールする。
きっと最新バージョンがインストールされるはず。

$ sdk install gradle

インストールされたか試す。

$ gradle -v

あっさりインストールできた。。。
本当にインストールされてるのか???
画面表示だけされて、「実はしてませんでした!(ノω・)テヘ」みたいなことがあるかもしれんので、とりあえずバージョン確認。

$ gradle -v

Welcome to Gradle 5.0!

Here are the highlights of this release:
 - Kotlin DSL 1.0
 - Task timeouts
 - Dependency alignment aka BOM support
 - Interactive `gradle init`

For more details see https://docs.gradle.org/5.0/release-notes.html


------------------------------------------------------------
Gradle 5.0
------------------------------------------------------------

Build time:   2018-11-26 11:48:43 UTC
Revision:     7fc6e5abf2fc5fe0824aec8a0f5462664dbcd987

Kotlin DSL:   1.0.4
Kotlin:       1.3.10
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          10-ea (Oracle Corporation 10-ea+37)
OS:           Mac OS X 10.13.6 x86_64

本当にインストールされてる。。。

Gradleが本当に動作するか試してみる

簡単すぎるので、本当に本当に動くのか、試してみる。

まずは、サンプルを作る。

適当にディレクトリ掘って、下記のbuild.gradleを作る。

task hello {
  println 'hello SAGA!'
}

佐賀、俺の中では東京クラスの県だと思ってる。
日本の中心は東京ではなく、佐賀だと思うわ。
いや、むしろ世界の中心は佐賀であると思う。
近い内に佐賀に行きたい。

脱線した。
とりあえず、タスクを実行してみる。

$ gradle hello

> Configure project :
hello SAGA!

BUILD SUCCESSFUL in 0s

マジで動く。。。
インストールはちゃんとされているな。

考察・まとめ

Javaさえインストールしてしまえば、開発環境は簡単に用意できる。
macでやってしまったから、homebrewでよくね?って思ってしまったが、windowsでも同じことができると思うと、かなりいい感じだと思う。
windowsにも homebrew と似た chocolatyがあるけど、ぶっちゃけ使いづらいんだよね。。。

Javaの問題は環境準備の面倒くささ。
今後、こういった環境準備のツールは、戦国時代になるんじゃなかろうか?
いまのところ、知っているツールでは、シンプルで使いやすい。
設定ファイルも不要だから、知識をつけないと使えないってのもなさそう。

参考サイト

SDKMANでGradleとKotlinをインストールする方法(Mac) - Qiita

Graal VM の native image を使って Java で爆速 Lamdba の夢を見る - Qiita

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

業務こなして思ったこと

Object.assignの副作用

const a = { a: 1, b: 2, c: 3, f: 5 }

const b = { c: 4, e: 6 }

const assign = Object.assign(a, b);

console.log(assign);
console.log(a);
console.log(b);

例えば、上記を実行する。
俺としては、aの値は変わりなく { a: 1, b: 2, c: 3, f: 5 } なんだけど、実際には下記の通り。

{ a: 1, b: 2, c: 4, f: 5, e: 6 } // assign
{ a: 1, b: 2, c: 4, f: 5, e: 6 } // a
{ c: 4, e: 6 }  // b

第一引数の値が変わってしまっている。。。
だったら戻り値返すなやって思いました。
なので、やるとしたら、第一引数は空のオブジェクトか、副作用が起きても問題ないオブジェクトだけを入れるべきだと思う。

これを知らずに使ってしまったので、バグを生んでしまった。。。
不変性は大事。意図しないバグを生む。

ハンドリング複数は辞めるべき

EventEmitter使ってイベントハンドリングしている人は多いと思う。

ただ、同じイベントを別々にハンドリングするのは辞めるべき。

emitter.on("response", (value) => {
  if(XXXX) {
    // 処理A
  }
});

emitter.on("response", (value) => {
  if(XXXX) {
  // 処理B
  }
});

上記みたいに複数のイベントハンドリングしていると、どっちでバグが出たのか追いづらい。
やるなら、下記。

emitter.on("response", (value) => {
  if(XXXX) {
    // 処理A
  }

  if(XXXX) {
  // 処理B
  }
});

windowsIntelliJの参照先から戻るショートカット

ctrl + alt + ←

windowsは、画面が回転してしまうので、OS側のショートカットキーを無効にしてあげる必要がある。
windows8.1の話。ほかは知らない

やり方

  1. デスクトップで右クリック
  2. グラフィックオプション
  3. ホットキーを無効にする

Advent Calendar 2018 Node.jsまとめ

Node.js Advent Calendar 2018 - Qiita

感想・まとめ・メモ

12月1日

Node.js で Promise の直列実行と並列実行、同時実行数の制御 - Qiita

直列実行は、reduceつかってやる派です。 並列は、記載があるようにPromise.allでやる。
逆に、他の方法が思いつかない。

async/awaitも、デメリットあるな。。。
使いどきを間違えなければ、遭遇しないと思うが、知らないと使っちゃいそう。

12月2日

Node.jsで高速にファイル一覧を取得するfs.readdirのwithFileTypesオプション - Qiita

fs.readdirのwithFileTypesを使うのが最速ってことね。
fsって、あんまり使ったことないからよく分からん。
electron使えば、可能性あるかも知れない。

12月3日

Node.jsでコマンドライン引数処理を行うならcommand-line-argsがよさげ - 動かざることバグの如し

いままで引数系の説明は、みんなゴリゴリ書いているものだとばかり思ってた。。。
ちゃんとライブラリがあるのね。

12月4日

[https://qiita.com/lemon2003/items/4bb4492ac80a94cc7bcb:title]

電卓のCLI見てると、高校時代にやってた高機能電卓みたいなのを思い出すな。。。
ポケコンだったかな?
それつかって三角関係の計算を繰り返しやってた記憶がある。

12月5日

Node.js で Log に userId を自動で出力する方法 - Qiita

結局、どっかで作り込まないといけないのよね。。。
通化されてるライブラリがないってのが、実状な気がする。

12月6日

Electron BrowserViewについてサンプルを読みつつ紹介 - Qiita

clientアプリを簡単に作れるってことでいいのかな?
electronは、たしか、読み込むhtmlファイルを指定して表示していた気がする。

ブラウザで開いた方がいいんじゃってのは野暮かな?
今後の使われ方次第では、clientアプリ開発が高速化しそう。
モバイルもwebも、境目が無くなりそうな気がする。

12月7日

ライブ配信レイアウトを作るNode.jsのフレームワーク - Qiita

動画配信ページにアクションを埋め込むって感じでいいのかな?
あんまり使われ方がイメージできなかった。
試しに使ってみないと分からんのかもしれんな。

12月8日

Node.jsでBLE Pheripheralを実装するblenoのインストールで結構ハマった - Qiita

BLEってなんぞ?って思ったら、bluetoothの規格か。。。
デスクトップPCでも使えるんだな。
ハードウェア関連の知識がないと、この手の問題は、解決が難しそう。。。

12月9日

Node.jsの入力パラメーター処理方法・決定版 - Qiita

パラメータのチェックが簡単にできるってわけか。。。
定義以外は、ロジックに集中して実装ができると。

良さそうだが、チェック内容が複雑化したときに問題が起こりそうな気もする。
使ってみないと分からないな。
冬休みに試してみよう。

12月10日

さよならStream - Qiita

Streamって見たことない。
処理のつなぎ合わせは、だいたいPromiseでやってしまう。

12月11日

Node.jsでraspberry piのハードウェアを叩く7つの方法 - Qiita

ハードウェアの話になると、チンプンカンプン。。。

12月12日

puppeteerを使った開発の勘所 - Qiita

puppeteerは、どこかで聞いた気がするが、すっかり忘れていた。
ブラウザの自動テストに使えそう。

12月13日

Node.jsでウェブアプリケーションフレームワークを自作する話 - Qiita

WAFの自作か。。。
モジュールが充実しているから必要なのか?って疑問もある。
ただ、たまに不足しているんじゃなか?ってのも感じる。
特に、プロキシ回り。
httpリクエストでrange指定されていたときに、いろいろ苦労している。※現在進行系!

12月14日

worker_threadsを使ったNode.js マルチスレッドプログラミング - kakts-log

jsにもスレッドの波が来そう。。。
早めに覚えておかないと、取り残される予感がする。
あとで試し実装してみる。

12月15日

ついにNode.jsでサクッとハードウェアをやれる時代が来た!「obniz」でJavaScript Robotics - Qiita

Arduino系のものが増えてきたな。
ワークショップでやってたラジコンカーは面白そう。

12月16日

N-APIはホントにV8以外のJavaScriptエンジンでもリビルドなしでネイティブモジュールが動くのか - non vorrei lavorare

ちょっと話についていけなかった。 このレベルは、まだ無理

12月17日

PM2でNode.jsアプリケーションをCapistranoライクにデプロイ管理 - matsukaz's blog

PM2は、JP1みたいなものだろうか?
知っておいて損はなさそう。
一度使ってみる。

12月18日

webpackの仕組みを簡潔に説明する - 技術探し

Hot Module Replacement の図解が分かりやすかった。
今まで、ホットデプロイがファイル監視して変わったら置き換えて終わりだと思っていたが、hashIDで次に使うモジュールを管理しているのね。

ファイルのコンパクト化は、これから重要な要素になる気がする。
動きのあるページを作ろうとすれば、かならずファイル群の問題に当たるから。
ファイル圧縮の技術や仕組みは、早めにキャッチアップしておいたほうがいいかも知れない。

12月19日

Distributed Remote Processing - Qiita

英語はやっぱり、苦手です。。。

12月20日

様々なテストツールをいじってみた。 - Qiita

最近は、Jest使うことが多いかな?
レポート機能が充実しているから、お客さん向けの資料が楽に手に入るのが、使ってる理由。

12月21日

ディレクトリごとにBabelの設定を変える - Qiita

エグいことしますな。。。
node.jsの開発環境では、webpackを使いこなせるかが重要なんだと感じる。

12月22日

シェルスクリプトもJavaScriptで+Angularのコンテナで環境変数で設定の切り替え - Qiita

Nginxの知識量が足りてないせいか、あんまりよく分からんかった。
そろそろNginxを本格的に覚えなければいけない時代に来ているのかも知れない。

12月23日

native module の code cache の worker thread 対応について - need something more...

worker thread?
聞いたことないな。
Node.js=JavaScriptみたいな感覚で使っているからかも知れない。

12月24日

gRPC × Typescript を始めるための一歩 - Qiita

gRPCの知識量が少なすぎて、理解まではできなかった。
gRPCを調べるところから始める。

タスク

  • NodeCGを使ってみる
  • adjusterを使ってみる
  • worker thread
  • Nginxを使ってみる
  • worker_threads を試す
  • PM2を使ってみる
  • gRPCを調べる