エンターテイメント!!

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

闇の魔術に対する防衛術 Advent Calendar 2020 まとメモ

Advent Calendar 2020

闇の魔術に対する防衛術 Advent Calendar 2020 - Qiita

書くきっかけ

僕は光の戦士だが、闇を知ることで戦いに勝利できると思い、各戦士たちの戦いの記録を読んで自分の力にしようと思ったから。(厨二文章です。要約すると、"みんなの苦労を自分の力にしたいから"です)

記録

DEAD CODE COOKBOOK ~デッドコードの作り方と復活の呪文~ の紹介

DEAD CODE COOKBOOK ~デッドコードの作り方と復活の呪文~ の紹介 - Qiita

dead coadよりunreachable codeの方が心が踊る。
大半は、returnで引き起こされることが多いなって印象。

ありえない分岐に入るときは、なるべく例外投げるようにしているが、他の人はどうやって付き合っているのだろうかという疑問はある。

存在しない正規表現 ~正規表現と秘密の部屋~

存在しない正規表現 ~正規表現と秘密の部屋~ - Qiita

rubyは疎いのでJSで試したが、たしかに同じ結果になる。

正規表現が難解なのは、矛盾を作りやすいところにあるのではないかと思った。
デバックが難しいのも、拍車をかけている気がする。

可視化や統計でデータに『恣意的なストーリーを語らせる』16の闇の魔術【bad charts】

可視化や統計でデータに『恣意的なストーリーを語らせる』16の闇の魔術【bad charts】 - Qiita

見てて思うところがある。
これって、テレビとかがよく使う図の詐欺グラフと一緒だ。。。
俺がメディア嫌いになった理由の一つとして、自分たちの主張のために、わざと錯覚させるようなグラフを作ってくることにある。

無知でそうなることもあれば、恣意的にやることもありそうだ。
だから、表現方法として適切化どうか、グラフ作るときは慎重に考えなければいけない気がする。
むしろ、1つのグラフで情報をすべて理解したような気になるのは、かなり怪しいのかもな。。。
グラフを見たら、いろんな疑問を持つようにしたほうが良いのかもしれない。

642日前に日本中を震撼させた闇の魔術に対する防衛術 の授業

642日前に日本中を震撼させた闇の魔術に対する防衛術 の授業 - Qiita

これって、ウイルスどうこう言ってたやつだっけ?
これはウイルスじゃなくてバグだったというオチだった気がするが、記憶にない。。。

GitHub Hacking ~GitHubを容量無制限のクラウドストレージとして使用する試み~

GitHub Hacking ~GitHubを容量無制限のクラウドストレージとして使用する試み~ - Qiita

容量制限の問題は、前に引っかかったことがある。
その時は、git管理を諦めたんだったかな?
ストレージ逼迫させる攻撃とかのリスクはありそうだな。。。

よく知らないアプリケーションの性能と戦わないといけないときの防衛術(前編)

よく知らないアプリケーションの性能と戦わないといけないときの防衛術(前編) - Qiita

こういうの、場数を踏まないと得られなさそう。。。

netstatは、たまに使う。
開発で、サーバー起動しっぱなしだったけど、プロセスが分からなくなったとかに使う。

話を聞けば分かるんだけど、いざ、実際の問題を目の前にしたら、何もできなくなりそう。。。

こういうのを訓練できる教材って、どこかにあるものなのだろうか?
こういうのを解決できる力って、重要だと思うのだが、いかんせん、どうやって身につけられるのかが分からない。。。

【闇の魔術】【2020年】Qiitaの2020年に読んでおくべき闇の魔術に関する記事100選【手動集計】

【闇の魔術】【2020年】Qiitaの2020年に読んでおくべき闇の魔術に関する記事100選【手動集計】 - Qiita

理解されやすいコードの書き方

理解されやすいコードの書き方 - Qiita

コードの整理方法って感じだった。
rubyは詳しくないので、サラ見だったが、なんとなく意味は伝わるものもあった。

Excel VBA に対する防衛術

Excel VBA に対する防衛術 - Qiita

VBAでプログラムは組むもんじゃないなと思いました(小並感)

一般的なプログラミングのパラダイムが通用しないので、普通の感覚で実装するとハマることが多そう。
なるべく使わないor使うとしてもサポート程度に留めるのが良さそう。
システムに組み込むと、いろいろ問題を引き起こしそうな気がする。

作用を「計算」できる Java で純粋関数プログラミングしよう

作用を「計算」できる Java で純粋関数プログラミングしよう - Qiita

逆に闇を見ている気がする。。。
Javaだと、関数型プログラミングは、整理がちゃんとできてないと、逆に可読性を落としそうな気がしないでもない。

echo "hello, darkness" ~Webサービスにおけるダークモードという闇~

echo "hello, darkness" ~Webサービスにおけるダークモードという闇~ - Qiita

ダークモード対応は、異なる領域で別個に対応があるのが、闇を読んでるんだろうなって気がする。

// なぜかこの行がないと動かない

// なぜかこの行がないと動かない - Qiita

読み物的な感じだったので、既読終了

FileMaker】リレーションシップグラフの闇に勝つために

【FileMaker】リレーションシップグラフの闇に勝つために - Qiita

FileMakerを詳しくしらんので、なんとも言えないな。。。

素性がよくわからない闇システムの解析方法

素性がよくわからない闇システムの解析方法 - Qiita

読み物的な感じだったので、既読終了

不死鳥のOffice仕事

不死鳥のOffice仕事 - 青ポスの部屋

読み物的な感じだったので、既読終了

チェックリストの牢獄から抜け出すために

チェックリストの牢獄から抜け出すために - Qiita

チェックリストは、どっちかと言うと、なくして欲しい。
正直、仕様覚えたり、ロジック考えたりしてると時間的余裕がなくなり、チェックリストの実施は大雑把になる。

また、日本語の問題になることもあるのが、やっかいなところだと思うんだよね。。。

アプリからのクソクエリを変更できない闇の魔術、に対する防衛術[MySQL]

アプリからのクソクエリを変更できない闇の魔術、に対する防衛術[MySQL] | キムラデービーブログ

mysqlは詳しくないのだが、インデックス張ってなんとか高速化しましたって認識でいいのかな?

「レガシーのメンテばかりは嫌だ」と言う学生さんへのマジレス

「レガシーのメンテばかりは嫌だ」と言う学生さんへのマジレス - Qiita

学生の言う「レガシーのメンテばかりは嫌だ」は、たぶん、スキルのつかない場所で働くのは嫌だって意味な気がする。
アレじゃない?漫画の予告犯みたいな現場を予想している学生が多いんじゃないかな?って気がする。
さすがに、俺もあんな現場は嫌だよ。。。

リディクラス(馬鹿馬鹿しいコード)

リディクラス(馬鹿馬鹿しいコード) - ばぁど・うぉっちんぐ

見て分かることをコメントに残すのは、意味がない。変数名も同じ。

よく知らないアプリケーションの性能と戦わないといけないときの防衛術(中編)

よく知らないアプリケーションの性能と戦わないといけないときの防衛術(中編) - Qiita

防衛術って、実態調査がメインな気がしてきた。。。
実態を明らかにするのが難しいんだよね。。。

検証無視は蜜の味?多くのプログラマーが1度は手を染めたことがあるかもしれない(?)闇魔術

検証無視は蜜の味?多くのプログラマーが1度は手を染めたことがあるかもしれない(?)闇魔術 - Qiita

認証の話か。。。
こういう場合は、オレオレ証明書を作って乗り切れって、誰かが言ってた気がする。

いつかTomcat10を使用する……気になれないパッケージ名変更の闇

いつかTomcat10を使用する……気になれないパッケージ名変更の闇 - Qiita

どこかのJavaのバージョンで、JavaEEが切り離された余波が、Java10で顕在化するわけか。。。

関数電卓プログラミングの世界:闇の魔術編

関数電卓プログラミングの世界:闇の魔術編 - Project Fx 2.0

話が濃すぎて追いつけそうにないので、スルーします。。。

Ruby】🏡THE HOUSE OF THE DEAD CODE

よく知らないアプリケーションの性能と戦わないといけないときの防衛術(後編)

よく知らないアプリケーションの性能と戦わないといけないときの防衛術(後編) - Qiita

もう、追いつけないところまで行ってしまったのね。。。

全体感想

話の内容が濃すぎて、追いつけないのがチラホラ。。。

さすがに、専門外は、追いつけないな。。。
やれることを増やしていかないといけないとは思いました。

JavaScript Advent Calendar 2020 まとメモ

Advent Calendar

JavaScript Advent Calendar 2020 - Qiita

きっかけ

エンジニアとして、周囲に置いていかれないように、多くの人が情報を乗せる場所で自分の知識レベルを合わせるためにまとめてみようと思ったから。

感想

【超初心者向け】javascriptjQueryの違いは何?5分で解説。

【超初心者向け】javascriptとjQueryの違いは何?5分で解説。 - Qiita

最近は、あんまりjQueryは使わないかな。
jsで楽して書くようにすることが多い。
未だに、$とかが意味分からなくて、結構固まる。

jsの開発は、nodeってイメージが強い。
というか、これって、jsとnodeの違いも、同じことが言えるよね。。。
jsは、ライブラリが大量に出回っているから、素のJavaScriptの実装と、ライブラリを利用している実装の見分けが、初学者にはキツイ印象がある。
実際、自分も初めてJavaScriptやったときは、ライブラリを使った記述なのか、JavaScript標準の記述なのか迷ったことが多かった気がする。

JavaScript における配列コピー

JavaScript における配列コピー - Qiita

個人的には、concat使っちゃう。
スプレッド構文は、パット見で固まりそう。。。
慣れればスプレッドが良いんだろうけど、配列コピーしたいシーンが、まだそんなに多くない。

JS直書きでGoogle DoodleのCanvasを録画してGifに

JS直書きでGoogle DoodleのCanvasを録画してGifに - Qiita

canvasとかのダウンロードの実装って、そうやってできるんだってのが、参考になった。
jsのダウンロードの実装って、どうやってるんだろうって毎回疑問に思ってたが、aタグを使うやり方があるのね。

JavaScriptの非同期処理を制御する方法

JavaScriptの非同期処理を制御する方法 - Qiita

JavaScriptやるなら、必ず通る非同期処理だね。
Promiseは、知らないうちにコールバック地獄になるから、今はawaitをなるべく使うようにしている。

プログラミング初学者の現役医師が、firebase使って診断名を管理できるLINEBOTを実装してみた。

プログラミング初学者の現役医師が、firebase使って診断名を管理できるLINEBOTを実装してみた。 - Qiita

初学者でも、サービス連携すれば、ある程度形になるんだって感じた。
最初は、まずサービスを作ることが重要なのかもしれない。
何か作るにしても、いろんなことが気になりすぎて、重要なことの優先順位が落ちるってことは、ありえそう。。。

Canvas2Dについてさっくり復習してみた

Canvas2Dについてさっくり復習してみた - Qiita

素のCanvas2Dは、俺も触ったことはない。
何かしらのフレームワークで隠蔽されているものを使うことが多い。

API見たけど、素で使うのは、俺にとってはレベルが高そう。。。

JavaScript】プリミティブ型とオブジェクト型を理解したい

【JavaScript】プリミティブ型とオブジェクト型を理解したい - Qiita

JavaScriptに型がないと感じるのは、型の宣言を書くことが極端に少ないからではないかと思う。
めったに書かないから、ないと思ってしまっても仕方ないのかもしれない。

JavaScript】Function.prototype.bind() とthis束縛の歴史

【JavaScript】Function.prototype.bind() とthis束縛の歴史 - estie inside blog

javascriptのthisは、未だによくわからないのが実情。。。
とりあえず、アロー関数使っておけば、違和感なく使えるって理解くらいしかない。

selfで回避は、昔、よくやったなぁと懐かしむばかりである。
もう、ここらへんの理詰めは、思い出せない。

JavaScript】非同期処理 まとめ

【JavaScript】非同期処理 まとめ

やっぱり、promise, async/awaitで躓く人は多いんだ。。。
自分も、理解するのに結構時間がかかった。

Promise.allSettledは、使ったことないな。
どれかがコケたら例外処理ってのが普通だから、出会ったことがなかった。
ES2020から導入されたから知らんかったのだろうな。。。

あとで試す。

楽天 ラッキーくじ」を自動化して、運試しをしてみる Tampermonkey篇

「楽天 ラッキーくじ」を自動化して、運試しをしてみる Tampermonkey篇 - Qiita

こういうのは、作ったほうが便利なんだとは思うが、なかなか腰が上がらない。。。

[JavaScript (クラスの作り方)] JSやURLのアレコレについて触れながら、URLを操作するクラスを作ってみよう!

[JavaScript (クラスの作り方)] JSやURLのアレコレについて触れながら、URLを操作するクラスを作ってみよう! - Qiita

typescriptから入ったせいか、javascriptでも普通にclass書いちゃう。
むしろ、序盤の方が違和感が強かった。
古くからjavascriptやってる人は、classの記載に違和感を覚えたりするのだろうか?

[JavaScript]作業効率を上げるためにデバックを身に付けよう

[JavaScript]作業効率を上げるためにデバックを身に付けよう - Qiita

javascriptのデバックは、だいたいブラウザで完結できるからな。。。
ただ、サーバーサイドのjavascriptは、そうはいかない。
consoleログを大量に使った記憶がある。
console.dir()は、実用性ありそう。

console系のメソッドは、試す。

急に難しくなったJavascript

急に難しくなったJavascript - Qiita

昔が分からんから、なんとも言えないな。。。

JavaScriptの口寄せ的な存在? call()メソッド

JavaScriptの口寄せ的な存在? call()メソッド - Qiita

callは、あんまり使ったことないな。
ただでさえややこしいthisの参照先を覚えるのが嫌だから、アロー関数とかselfでなんとかすることが多かった。

callやapplyからは、かなり嫌な臭いを感じる。
深みにハマりそうだから、ふ~ん程度で辞めときます。。。

JavaScriptで特定のキー入力をトリガーにしたい

JavaScriptで特定のキー入力をトリガーにしたい - Qiita

特に目新しいものはなかったので、既読

JavaScriptはthisで挫折して初めて成長する

JavaScriptはthisで挫折して初めて成長する - Qiita

やっぱり、thisで挫折するのは全員共通なんだ。。。

【JS入門】 JS 初めの一歩に必要な知識を解説

【JS入門】 JS 初めの一歩に必要な知識を解説 - Qiita

特に目新しいものはなかったので、既読

外部サイトへの「埋め込みjsタグ」を作る際に気をつけていること

外部サイトへの「埋め込みjsタグ」を作る際に気をつけていること - Qiita

scriptタグにasyncを付けられるのを初めて知った。
dom操作系ならdeferがまるそう。
いっつも、onloadで完了後にdom操作してたが、そんなことしなくても良かったんだな。。。

忙しいプログラマーのための関数型プログラミング

忙しいプログラマーのための関数型プログラミング Functional Programming for the Working Programmer

UNIT1に該当する箇所を読んで、挫折しました。。。
なんとかUNIT1相当の箇所は読み込めたけど、それ以降はキツイ。。。

動的にCSSを生成してテーブルをフィルター

動的にCSSを生成してテーブルをフィルター

どっちかと言うと、正規表現がメインな気がしないでもない。

Web制作で使えるJavaScript

Web制作で使えるJavaScript集 - Qiita

List.jsは、気になった。最近、個人で開発しているのやつで、データの表記をどうするか考えているのがあったのだが、使えそうな気がしないでもない。

<input type="file">JavaScriptで扱うときに気をつけること

<input type="file">をJavaScriptで扱うときに気をつけること - 青色の紙切れ

<input type="file">で、最近悩まされていろいろ調べたから、既知だった。

TODO

  • Promise.allSettledを試す
  • console系のメソッドを試す

Java Advent Calendar 2020 まとメモ

Advent Calendar

Java Advent Calendar 2020 - Qiita

きっかけ

周囲のエンジニアに置いていかれないよう、投稿されてる内容を把握できれば、ある程度やっていけるはず。
だから、書いてある内容には一通り目を通して、知らないことを知るようにしていこうと思い、書くに至った。

感想

Jakarta EEをはじめよう!

Jakarta EEをはじめよう! - Qiita

パット見た感じ、Springに近い印象を受けた。
web系の開発が、Spring系から入ったから、そう見えるのかもしれない。

JSFは、業務で使ったことが1度ある。
使用感的には、JSPと似ていた印象。
HTMLではないので、webデザイナーと共同開発しにくい印象がある。
使ってたときは、デザインの取り込みが苦しかった。

Java8の日時APIにおける期間の重複判定

Java8の日時APIにおける期間の重複判定 - Qiita

コメントにあった、ThreeTen Extraのほうが気になってしまった。。。
ちょっと後で見てみる。

Javaラムダ式やStream APIの可読性を向上させるテクニック

Javaのラムダ式やStream APIの可読性を向上させるテクニック - Qiita

ロジックを入れないのは、同意。
ロジック入れると、それってfor文で書くのと変わらなくなるからな。
streamを使うのなら、きちんとメソッド使って処理を意味あるまとまりでまとめる必要がある。

static import は、なるほどと思った。
streamを使うと、終端処理でCollectors をよく使うから、static import使うのはありかもしれない。
怖いのは名前衝突くらいかな?設計で回避できそうな気もする。

関数型インタフェースを作るってのは、少し敷居が高いような気がする。
JavaScriptだと違和感なく作れるのだが、Javaだと、まだ戸惑うことが多い。
言語的な特性から来ている可能性もありそう。

StringUtils#containsAnyメソッドの注意

StringUtils#containsAnyメソッドの注意 - Qiita

apacheのStringUtilsは、ごくたまに使う。
プライベートで使ったことはないが、業務で利用するくらい。

だいたい、足りないと思ったら、Util落とすより自作しちゃうんだよね。。。

Proxy環境下のSpring Securityを攻略する

Proxy環境下のSpring Securityを攻略する - Qiita

認証系とかやってると、プロキシ周りで詰まることってあるよね。。。
Javaではないが、XSS回避のためにプロキシ自作するってなったことがあった。
あそこらへんは、また作れる気がしない。。。

通信の、特にセキュリティ絡みは、非常に知識を要するのが辛いんだ。。。

ImageIOでJpegの品質を上げる

coneta.jp

デフォルトの品質レベルが低いのだろうか?
指定してあげないと、低レベルで出力しているような気がする。。。

念のためもう一度トルコ語(等)で起こる問題について整理する

念のためもう一度トルコ語(等)で起こる問題について整理する - Qiita

かなりややこしい問題だな。。。
文字コードの問題は、表面化することはほとんどないけど、表面化するとハマりそう。。。

教訓としては、文字コードUTF-8安定って理解でOK?

カウント処理をしたい時

Coneta

文字の出現数カウントの実装ね。
Javaは、こういうのがやりにくい印象がある。
pythonは、それが楽にできるから、分析系で多用されているような気がする。
データ操作の問題かもしれない。

InputStreamからStringへの変換

Coneta

この実装、たまに使う。
読み込んだやつをどこかに入れてとか実装してると、長くなるし、バグ混入も増えるから、なるべくこういう実装をするようにはしてる。

Bukkitプラグイン開発 - コマンド処理、最適化編

Bukkitプラグイン開発 - コマンド処理、最適化編 - Qiita

コマンドパターンの説明ぽかったかな?
Bukkitって何?って思って調べたら、マイクラのサーバーみたいだね。
javaでコマンドパターンはあんまり見ないけど、実装したら、そうなるよね。

クラス図があると、理解はしやすかったかなと思う。

SpringBootとQuickFIX/Jで爆速でFIXサーバを実装する話 - 今日からあなたもオンラインブローカー?

SpringBootとQuickFIX/Jで爆速でFIXサーバを実装する話 - 今日からあなたもオンラインブローカー? - Qiita

reactiveプログラミングみたいなものだろうか?
使われてる技術は理解したが、FXは怖くて手が出せんな。。。

Javaの例外処理入門

Javaの例外処理入門 - Qiita

内容自体は、それほど目新しいものではなかったので、サラッと読んで終わり。

例外の話になると、毎回どっちだったか分からなくなるのが、RuntimeExceptionが検査例外か非検査例外かという個人的な悩みがある。
いい覚え方ないだろうか?
Java以外は、JSをよく触るのだが、JSは、非検査例外ばかりだから、あんまり意識しないけど、Javaだとどっちだったか、たまに分からなくなる。

Javaのオートボクシングでの注意

Coneta

キャッシュされない値同士の比較になるから、"=="での結果が変わるって認識であってるかな?
言語仕様や、他サイトの説明見てると、そのように受け取った。

そもそも、オブジェクト同士を比較するときに"=="を使うのは、危険だね。
アンボクシングされるってのがあっても、同じということだな。

Javaのプロが避ける「波かっこ」の駄目な使い方は規約によるので規約を読んでみよう

Javaのプロが避ける「波かっこ」の駄目な使い方は規約によるので規約を読んでみよう - Qiita

その人が育ってきた環境によるかな?ってのが個人的な感想。
プロジェクトに依存するのではなかろうかと思う。
個人的には、波括弧始まりの行ができないようにするのが無難だとは思うが。。。

コーディング規約次第ですってのが、正直なところ。
下っ端エンジニアなんで、規約には逆らえないのです。
規約には従うが、自分が作る立場なら、なるべく一般的な規約になるようにする。

あと、脱線するけど、規約を守れって散々言われたのだが、規約が守られるような土壌を作れよって思う。
レビューで散々指摘されたけど、記憶を頼りに規約を守るのは、無理がある。
覚えたって、その現場でしか使えないじゃんって思っているので、覚える気はサラサラない。
lintなりcodestyleなりで警告出してくれないと、個人の記憶力ベースの実装になり、絶対にむらが出ると思うんだよね。
それで生産性が~とか言い出したら、マジでキレるかもしれない。

SPA(Vue.js) + REST API構成でSpring Secirityで認証まで作った時に気を付けることや大事なこと

SPA(Vue.js) + REST API構成でSpring Secirityで認証まで作った時に気を付けることや大事なこと - Qiita

認証って聞くと、発狂しそうになる病なので、読むのが辛かった。。。
CORS対策が必須になるのは、どこも同じだね。
自分は、JSで作ってたので、JSでCORS対策していたが、初めてやったときはプロキシ用の実装組んだりしたりして、かなり辛かった。
SPAが難しいのは、そういった対策をせねばならないところにあるのではなかろうかと思う。

【業務系】世の中に逆行するJavaのWebアプリでの画面フレームワーク選定

【業務系】世の中に逆行するJavaのWebアプリでの画面フレームワーク選定 - Qiita

JSFは使ったことがあるが、JSPと対して変わらない。
画面作るときに、かなり苦労するイメージしかない。
デザイナーの仕事を殺す可能性が高いので、個人的にはあまり使いたくはない。

Vaadin/CUBA Platformも見たが、やはり、フロントサイドはHTML/CSS+JSが最適だとは思う。

Javaコレクション操作の基礎

Javaコレクション操作の基礎

データ構造を理解すれば、操作はある程度直感的に分かるんじゃないのかなってのが、自分の持論。
基本的に、map/set/listの構造を抑えておけば、だいたいの業務で通用する実装はかけると思う。
やり方は、書類整理とかと一緒だから、構造さえ理解できれば、できる操作は直感的に分かるものだと信じたい。

pythonとかは、データ構造の種類が多い印象がある。
JavaScriptは、ゆるいデータ構造を使っている印象。

Java の + 演算子による文字列結合は、どのように処理されているのか

Java の + 演算子による文字列結合は、どのように処理されているのか - Qiita

裏でそんなことしてるのかぁってのが正直な感想。
今まで、あまり深くは考えなかったが、読んでいて、学生の頃にCの勉強したときに文字列を文字の配列としているってのを思い出した。
その感覚で、最終的なデータとしての保持はバイトってのは、なんとなく腑には落ちる。

裏で結構な量の処理をしているんだなって思った。 今度から、Javaで文字操作するときは、「Javaさん、ありがとう」ってお礼言うようにしようと思います。

null「俺が俺で無くなってゆく」

null「俺が俺で無くなってゆく」 - Qiita

何か厨二臭いタイトルだな。。。

ちなみに、自分は緑茶派です。
コーヒーは、カフェイン量が多すぎて、下痢になったり頭痛がすることが多いので、あんまり飲まない。

nullの解釈仕方って感じの記事だった。
nullで揉めるのは、どっちかと言うとJavaScriptで起きやすい印象。
undefindeとnullで論争が起きた現場を、何回か見たからね。。。

Java8 Optionalの逆引きレシピ

Java8 Optionalの逆引きレシピ - Qiita

Optionalは、便利だとは思うけど、なかなか手が出せてない。
Optional#getは、俺も使わない。
なぜなら、Optionalを使ってるメリットが無くなってしまうから。
廃止にしてもいいのではないかとすら思ってる。

ほとんどの場合は、ifPresentを使うような気がする。

Optionalは使わない方がいいケースが参考になった。
値がないことが他の表現で可能な場合は、そちらに寄せたほうが結果的に都合がいいことが多いのだろう。

JFRとモニタリングの融合? JEP 349: JFR Event Streamingを触ってみる

JFRとモニタリングの融合? JEP 349: JFR Event Streamingを触ってみる

監視の作業をあまりしてきたことがないので、何がメリットなのか、あまり理解できていない。

段階的に理解する Dependency Injection

段階的に理解する Dependency Injection - Qiita

ServiceLocaterは、初めて効いた気がする。コンポーネントスキャンに使われているのだろうか?
DIに至るまでの依存との戦いを見ているような感じだった。。。
DIと簡単に言うには、こういった経緯を知らないといけないのかもしれない。
個人でDIと合う前に開発していたときは、こういう問題をレベル4程度のことまでは考えていた気がする。

VSCodeで作るJava開発環境&Spring Bootアプリケーション入門

VSCodeで作るJava開発環境&Spring Bootアプリケーション入門 - Qiita

自分も、inteliJかeclipseを使っていたが、最近は、ちょっとしたコードを書く場合、vscodeで書くことが多い。
mavenやgradleを利用する場合は、inteliJとか使うんだろうけど、簡単なプログラムであれば、vscodeでやる。
IDEは、たしかに便利だが、早期ビルドに対応しきれていない場合、テキストエディタでやるほうが便利な場合もある。
大規模開発するならIDE使うけど、ちょっとしたことをやるのなら、案外vscodeでも十分なのは、Javaの早期ビルドを試すときに使ってて思う。

RESTfulなメール送信サービス+クライアントを作ってみよう

RESTfulなメール送信サービス+クライアントを作ってみよう - Qiita

J-Mailは、使ったことないな。
個人の開発だと、メールを利用する機会がめったに無い。
存在自体は知っているんだが、利用するタイミングがない。
メール送る相手が居ないのが、最大のネックだとは思ってる。

TODO

  • ThreeTen Extraを調べる

全体感想

Coneta.jpを使う人が多いな。
流行っているのだろうか?
ブログより短い内容を投稿するサービスっぽい。

Javaでコンパイル時に「エンコーディングwindows-31jにマップできません」が発生

きっかけ

Java Advent Calendarのサンプルコードを実行しようと思ったら、当該事象が発生したので、調べたことメモとして、記録を残す。

環境

バージョン: 1.52.0 (system setup)
コミット: 940b5f4bb5fa47866a54529ed759d95d09ee80be
日付: 2020-12-10T22:45:11.850Z
Electron: 9.3.5
Chrome: 83.0.4103.122
Node.js: 12.14.1
V8: 8.3.110.13-electron.0
OS: Windows_NT x64 10.0.18363
$ java -version
openjdk version "15.0.1" 2020-10-20
OpenJDK Runtime Environment (build 15.0.1+9-18)
OpenJDK 64-Bit Server VM (build 15.0.1+9-18, mixed mode, sharing)

ソース

import jdk.jfr.consumer.*;
import java.time.*;

public class Test {
  public static void main(String[] args) throws InterruptedException {
    try (var rs = new RecordingStream()) {
        // イベントの購読を登録
        rs.enable("jdk.CPULoad").withPeriod(Duration.ofSeconds(1));
        rs.onEvent("jdk.CPULoad", event -> {
            System.out.println("jdk.CPULoad: " + event.getFloat("machineTotal"));
        });
        rs.startAsync();

        // サーバ的な処理
        long cnt = 0;
        while (true) {
            Thread.sleep(1000);
            System.out.println("本来はここでなんかサーバの処理: " + (cnt++));
        }
    }
  }
}

事象

$ javac Test.java 
Test.java:7: エラー: この文字(0x81)は、エンコーディングwindows-31jにマップできません
        // 繧、繝吶Φ繝医?ョ雉シ隱ュ繧堤匳骭イ
                  ^
Test.java:14: エラー: この文字(0x86)は、エンコーディングwindows-31jにマップできません
        // 繧オ繝シ繝千噪縺ェ蜃ヲ逅?
                       ^
Test.java:18: エラー: この文字(0x81)は、エンコーディングwindows-31jにマップできません
            System.out.println("譛ャ譚・縺ッ縺薙%縺ァ縺ェ繧薙°繧オ繝シ繝舌?ョ蜃ヲ逅?: " + (cnt++));
                                                      ^
Test.java:18: エラー: この文字(0x86)は、エンコーディングwindows-31jにマップできません
            System.out.println("譛ャ譚・縺ッ縺薙%縺ァ縺ェ繧薙°繧オ繝シ繝舌?ョ蜃ヲ逅?: " + (cnt++));
                                                           ^
エラー4個

エンコードの問題ってのはすぐに分かったけど、対応方法がぱっと思いつかなかった。

解決方法

コンパイル時にエンコードを指定する。

javac -encoding UTF-8 Scores.java

勝手にエンコード判定してコンパイルしてくれないものだろうか。。。

所感

こういうの、かなり手間だなとは思った。

参考サイト

Java コンパイルエラー エンコーディングwindows-31jにマップできません - Qiita

2020/12/07週 気づきと振り返り 40分500円の価値

業務こなしての問題・気づき

設計書にどこまで書くのか?

既存の設計書にない箇所が修正対象になっているのだが、どうすればよいのだろうか?
書こうとすると、いろんなロジックが入ってるから、芋づる式に設計書にない箇所をどんどん書かないといけない気がして、ものすごく億劫なのだが。。。

フル仮想環境がいいわけではない

PC全部仮想化してあって、現場のPCはリモートアクセス用だけなのだが、いかんせん、開発しようとすると重すぎて辛い。。。
何が遅くなってるのかよくわからんのが辛いな。
少なくとも、メモリ6GBは、アカンと思うんだよね。。。
家のPCでも16GBあるというのに、開発PCがそれ以下ってのは、辞めてほしいわ。。。

アクセスルート画面の実装は辛い

いろんな画面への遷移がある画面の開発、マジで辛い。。。
IF周りでいろんな実装者と調整したりするのが面倒くさくてしょうがない。
遷移先の実装まで俺が考えさせられるようになったのも、辛い。。。

こういう画面は、マジで余裕が欲しい。
余裕がないと、いろんなことが積み重なって、焦りと辛みが蓄積するんだよね。。。

その他

茶店での勉強

バカにしていた口だが、いざやってみると、たしかに、集中してできた気がする。
暇つぶし道具が手元にない環境になれば、自然と勉強に専念できるとは思った。
ただ、集中力が1時間も持たないんだよね。。。
40分位で、疲れる。
40分のために500円払えますか?が判断基準だと思う。
どうしても集中したいときは、ものすごい安い買い物だとは思う。

学校の授業も、1時間ちかい時間を椅子に座ったままって、無理があると思うんだよね。。。
1コマ40分くらいにするべきだと思う。

electron実行時に`'attachShadow' on 'Element': This element does not support attachShadow`

発生に至った経緯

electronで、canvas-datagridを使おうとしていたら発生した。

発生時の環境

$ electron -v
v1.4.13

発生の原因

electronのベースであるchromiumeがshadow domをサポートしているバージョンではなかったので、発生していた。

canvas-datagridがshadow domを利用しているらしい。

対応

electronのバージョンを上げた。

electron -v
v11.0.2

そうとう古いバージョンのやつを使ってたんだな。。。

雑記

ちゃんとバージョンアップに追随してないと、余計な調査コストがかかるな~って思った。

2020/11/16週 気づきと振り返り 普通に実装してたら出会わないエラーばかりに合う1週間だった

業務こなしての問題・気づき

Java

streamを使えない現場

使いたくても使えない現場ってのがあるんだなって、思いました。 配列でデータが独立して保持してたりすると、使うのが難しい。

データ構造の重要性

今の現場が、画面の項目1つ1つが独立しており、グルーピングができていない。。。
例を上げると、以下みたいな感じ

private String[] name = null;
private String[] birthDay = null;

本来は、nameとbirthDay はセットで設定してくるので、入れ物オブジェクト作りたいのだが、配列ってのが、また厄介さを増してる。
そのため、for文回すにしても、いろいろと面倒。
どの項目とどの項目がセットなんだっけ?って毎回考える。
配列の入れ方を間違っていると、かなり追いづらい。

compareToの覚え方

以下のサイトが参考になった。

compareTo の戻り値仕様はリファレンスを見に行かなくても余裕 - Qiita

毎回、どっちがマイナスだっけ?って思ってたけど、一覧化してあると分かりやすい。
右側にゼロを置けば、等符号の向きが同じになるってのが、とても分かりやすかった。

デバックしていて、たまに混乱するから、こういう簡単な覚え方は、知っておいて損はないと思った。
コード規約に入れたいレベルで納得した。

メソッドサイズの制限

自動生成したコードのメソッドのラインが、65535バイトを超えてエラーになった。
初めてこんなエラーを見た気がする。。。

普通に実装してたら、そんなエラーに鉢合わせしないよね。。。

java — 「メソッドのコードが65535バイトの制限を超えています」の修正方法

不要な自動生成を削除するようにもっていくしかないか。。。

環境

リモートワーク

リモートワークやってるけど、若干不便なことがあった。

実装詰まったときに、軽いレビューをしてもらいたいことがあるのだが、わざわざ画面共有したり、通話環境つなげたりするのが面倒くさい。。。
簡単に相手と通話できる環境ができると楽なのだが、相手と通信確立させたりするのが面倒だと感じた。

あと、スケジュールが遅れると、かなり焦る。
サビ残するしかの思考に陥りそうになるんだよね。。。

愚痴

普段であれば、絶対にかかないようなコードを書くことを強いられている。
もっと良くなる方法を考えてると、スケジュールが間に合わないし、やることが多くありすぎて、頭のリソースが枯渇する。
結局、悪い習慣をそのまま書かざるを得ない状況にあるのは、良くないと思いつつも、やらねばならないプレッシャーが、結構キツイ。。。

自分の能力に疑問を持つようになり、悩むことが多いような気がする。
悩んでいる時間は無駄だとは思っているが、そう簡単に割り切れないんだよね。。。
悲観主義的な考えが、強くなった気がする。
スケジュール遅れや、何やっても上手くいかないのが、よりいっそう、そう思わせちゃうんだよね。。。
とりあえず、オンスケに戻せれば、少しは緩和できそうだが、そこまで持つかな。。。

あと、仕事で発破をかけるってことをやるやつが居ると思うが、やり方間違えると、人を追い詰めるだけだからね?
責任感が強ければ、下手したら自分を追い込んでダメになるケースもある気がする。
リーダー的立ち位置の人は、発破をかければいいと思ってるやつがいるけど、かけ方もよく考えるべきだと思う。

プログラミングの基本は、グルーピングだなって思いました。
データを扱いやすい単位にまとめられない場合、繰り返しや入出力でものすごい苦労する。