エンターテイメント!!

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

2021/06/28週 気づきと振り返り

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

git

ブランチをマージしたら削除

ブランチ対応が終わり、マージが終わったのにブランチを残したままにするのは、良くない。
なんでこのブランチ残ってるんだっけ?って調査するのが辛い。。。

運用次第ではあるが、不要になったブランチをいつまでも残しておくのは、デメリットが大きくなるから辞めたほうがいい。

レビュアー

レビュー以外のタスクを任せてはダメ。
レビューで、地震のことは手が回らない。
特に開発者の数が多くなると、絶対に無理。
レビュー依頼がいつくるか分からないので、自分のタスクをやり始めると、いいところでだいたい来る。。。
特に、期限が短いときに限って、緊急のものが来る。

進め方や運用方法にもよるだろうが、計画通りに行くようにするには、バッファが多めにないと無理。
スケジュール調整しやすい環境がいる。

その他

typescript 移行

個人で開発してるelectronをjsからtypescriptに移行しようと思ったのだが、諦めた。。。

単純移行では動かないと思っていたが、案の定、ビルドエラーが出まくっていた。
一個づつしらみつぶしに解消していったけど、最終的に潰せないビルドエラー出て、一日悩んで諦めた。。。

静的型付けは、便利ではあるが、静的型付けが逆に導入障壁になってしまった。

今は、どうしようか悩み中。

型付によるプログラミングは、得意なんだが、それにするまでの障壁が高すぎる。
ルーズな方が実装は楽なんだけど、一人プロジェクトだと、型のメリットが小さい気がするんだよな。。。

2021/06/21週 気づきと振り返り ライブラリ管理は、どの言語でも面倒くさい

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

リモートワーク

便意を我慢してはならない

便意って、頭脳労働の天敵だと感じた。
通話しているときに便意が来ると、ほとんど話している内容が頭に入ってこない。
便意を我慢して通話を遮らないようにするより、ちゃんとトイレ行く旨を伝えて、便意を解消したほうがいい。

.NETのライブラリ

後方互換がないせいか、結構、ライブラリ問題が頻発する印象。。。
ライブラリのバージョン合わせで四苦八苦する。

その他雑記

windows11

windows10が最後のバージョンって話だったと思うのだが、なんでwindows11が出てくるんですかね。。。

プレビュー画面みたが、macに近づいているような気がするのは、気のせいだろうか?

新しい Windows 11 OS へのアップグレード | Microsoft

www.youtube.com

吉田製作所見てると、まだ手軽にアップデートってわけには行かなそう。。。

OSアップデートを強いられる状況がいつか来そうですね。。。

Javascriptの構文に出てくる「??」って何?

背景

Javascriptでコードを読んでいる際に、var a = test ?? "empty"みたいなコードに出会った。
三項演算子でもないし、一体何なんだ?ってのが疑問になったので調べた。

調査結果

Null合体演算子 というものらしい。
左辺が null または undefined の場合、右辺が変えるとのこと。

実験

nullの場合

const foo = null ?? 'default string';
console.log(foo);
// expected output: "default string"

問題なし

undefinedの場合

const foo = undefined ?? 'default string';
console.log(foo);
// expected output: "default string"

問題なし

0の場合

javascriptだと、0を判定するとfalseになるので、挙動がおかしくならないか試す

const foo = 0 ?? 'default string';
console.log(foo);
// expected output: "0"

どうやら、厳密に null または undefined か判定しているようだ。

空文字の場合

ならば、今度は空文字で、意図しない挙動をしないか試す。

const foo = '' ?? 'default string';
console.log(foo);
// expected output: ""

ちぃっ、問題なし。

空配列の場合

ここで挙動がおかしくならないか、最後の確認で空配列で確認

const foo = [] ?? 'default string';
console.log(foo);
// expected output: Array []

挙動は、おかしくなりませんでした。チクショー!!
そう言えば、小梅太夫って、まだ芸人続けてるのかな?

参考サイト

JavaScriptのクエスチョンを2つ連続で各ショートハンドの正体(??) - at backyard

Null 合体 (??) - JavaScript | MDN

感想

いきなり知らない構文が出てくると焦る。。。
特に、特殊文字系は、検索で引っかからないことがあるからな。。。

とりあえず、また一つ賢くなったということで。

Bootstrap4でModalが表示されなくなった

現象

modalを用途によって表示するために、複数定義をしたあと、動作確認のためにmodalの表示を行ったら、既存のmodalが動かなくなった。。。

環境

jQuery v3.3.1 bootstrap v4.3.1

原因

おそらく、下記の箇所の記述で、画面上で1度に1個までが引っかかっている。

モーダルは画面上で1度に1個までしかサポートされません。ネスとされたモーダルはユーザー体験を低下させるためサポートしていません。

最初、読んだとき、ネストが1回までしかできないという解釈でいたが、modalの定義が1つしかできないという意味だった。。。
ドキュメントの読み違いって、しないように気をつけていても、してしまうものなんだなぁ~と思った。。。
だから、動作確認とセットでドキュメント読まないとダメだと思った。
ドキュメント書く際は、動作確認用のコードを埋め込むのは、とても重要。

ちなみに、今回自分が最初に定義していたmodalの定義は、以下の感じだった

  <!-- Modal -->
  <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
   ・・・
  </div>

  <!-- <div class="modal fade" id="progressModal" tabindex="-1" role="dialog" aria-labelledby="progressModalLabel" aria-hidden="true">
   ・・・
  </div>

exampleModalとprogressModalを定義していたのが問題だった。。。

対策

modalの定義を1つにして、可変部分をjsのDOM操作で操作するように対応した。
modal表示用のメソッドをモーダルの種類ごとに用意して、モーダル表示したいときは、表示したいモーダルのメソッドを叩くようにしたら、うまく行った。
その際、モーダルの初期化(追加したDOM要素の初期化)処理をするようにしておく。

参考サイト

Modal - Bootstrap 4.2 - 日本語リファレンス

感想

また、くだらないことで1日ちかく悩んでしまった。。。

もうちょい、スマートにやれるような気がするが、個人のプロダクトで起きたので、泥臭くてもいいから対応した。

GitHub - suzaku-tec/rsship

2021/06/14週 気づきと振り返り

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

C

HttpResponseMessageのReasonPhrase

APIを作った際に、exceptionのMessageをreasonPhraseに入れてレスポンスを返していたのだが、応答が予期したものにならない。
応答が帰ってきてはいるのだが、思った通りのレスポンス表示にならなくて、かなり焦った。。
問題だったのは、以下のコード(※抜粋かつイメージ)

}
catch (Exception e)
var respose = new HttpResponseMessage()
response.ReasonPhrase = e.Message
・・・
}

原因はよく分からなかったが、ReasonPhraseに設定できる文字数を超過したor改行文字でレスポンスが不正な状態になった とかだと思ってる。

メッセージは、ReasonPhrase に設定する必要がなかったので、コンテンツ部分に設定したら動いた。
HTTPの仕様をきちんと理解していればハマらなかったと思う。。。

レビュー

命名

なんか、変数名に XXXSub って付けたり、XXX_1みたいな命名してくるやつが居るのだが、自分の子どもに「太郎1号」、「太郎予備」みたいな命名するか?って思うんだよね。

すぐにインスタンスが開放されるようなやつならまだしも、比較的長く生き残るやつに対しての命名は、少し慎重になって欲しいとは思う。

SendGrid

AzureFunctionのリソース追加で連携できるらしいのだが、無料プランがない。

Azure Marketplace 経由での契約と、構造計画研究所経由との契約で違いがあるのが、プランがない理由らしい。
構造計画研究所経由だと、ちゃんと無料プランが選べるが、Azure Marketplace 経由だと選べない。

なぜ無料プランがないのか調べてたが、理由は分からんかった。。。
もし、Azure Marketplace が金稼ぎのために無料プランを廃止したのだとしたら、狡いなって感じました。
昔はあったらしいから、金稼ぎに走ったんだろうと邪推してしまう。

Git

ファイルを残してgitから削除

$ git rm --cached {削除したいファイル}

↑ができたら、コミット&プッシュすれば大丈夫。

その他雑記

料理

ゼリーを作ったのだが、若干失敗してしまった。。。
少し、液体状になっているところが発生してしまった。。。
寒天を溶かしきれなかったのが問題っぽい気がする。
果汁飲料でやっていたが、それがダメだったのだろうか?
試行錯誤が必要そう。

夏に向けて、アイスの製造方法を身につけたい。

`TypeError: Converting circular structure to JSON`の意味と対処

背景

JSでデバックのためにJSON.stringify()を使ったら発生した。

printデバックの是非は置いておいて、この事象の意味と、なぜ発症したのか、対象方法についてメモする。

意味

「循環参照しているJSONを変換しようとしている」って意味らしい。
Google翻訳より。。。

意味は分かった。
循環参照しているオブジェクトを渡したつもりはないのだが、循環参照構造になっているらしい。。。

対処方法

回避方法はあるみたいだが、面倒くさいから、npmモジュールのjson-cyclic入れて対応する。
下記の記述で対応可能。

JSON.stringify(decycle(XXXX))

対応した結果

たしかに、表示できた。
よくよく見たら、自分が想定してないデータを見ようとしていただけで、ちゃんと表示したデータを指定したらdecycleは必要なかった。。。
知識が溜まったから、良しとする?
不要だと知ったあとのやるせなさがなんとも言えない。。。

参考サイト

JSON.stringifyで`TypeError: Converting circular structure to JSON`というエラーが出た時の対処法 - Qiita

TypeError: cyclic object value - JavaScript | MDN

javascript - Chrome sendrequest error: TypeError: Converting circular structure to JSON - Stack Overflow

HDD→SSD換装の記録

環境

Windows10

事前準備

  • SSDの購入
  • マウント用のベイ(あってもなくてもいい)
  • SATAケーブル(今回は空きのSATAケーブルがあったので購入なし)
  • シリアルATA電源分岐ケーブル(今回は空きのSATAケーブルがあったので購入なし)

実質、買ったのは、SSDとマウント用のベイのみ。
ベイは買ったのだが、いざ取り付けたら、SATAケーブルが短くて届かず、素置き状態になってる。
問題ないみたいだが、何だが釈然としない。。。

買ったSSDは、ウエスタンデジタル Western Digital WDS100T2B0A [WD BLUE 2.5inc 1TB SSD]

使ったソフトウェア

Acronis True Image for Western Digital

Acronis | Western Digital ストア

HDDの内容をSSDにクローンするのに利用

やった手順

  1. SSDを接続する
  2. SSDをフォーマット
  3. HDDの内容をSSDにクローン
  4. シャットダウン
  5. HDDを取り外す
  6. PC起動

実施

SSDを接続する

SATAケーブル、シリアルATA電源ケーブルに接続して、PCを起動する。 この時点では、SSDはまだ空なはずなので、BIOSとかはイジらない。
つないだだけで起動ができないのは、つなぐときに何かのケーブルを引っこ抜いている可能性が高い。

SSDをフォーマット

認識できているはずなので、"ディスクの管理"からSSDをフォーマットする。
その際、初期化前にHDDのディスクのパーティションスタイルを確認する。
おそらく、MBRかGPTになっているはず。
確認できたら、SSDを同じ形式で初期化する。

HDDの内容をSSDにクローン

初期化が終わったら、Acronis True Image for Western Digitalを利用して、SSDにHDDの内容をクローンする。
ハードディスクサイズが同じかSSDの方が多い状態じゃないと、たぶん失敗するので、注意。

自分が調べた限り、EaseUS Todo Backup/AOMEI Backupper Standardは、システムクローン作る機能が有料化となっていた。。。
昔は、無料だったらしいが、有料化されている。
収益化が難しかったのだろうなと思う。

昔の情報が散乱しているため、無料で使えないという事実に直面して、かなり焦った。
あやうく課金するところだったが、「SSD販売元がソフトウェア用意してないのはあり得ないだろ」と感じて、購入したメーカーのサイトを見たら、きちんとソフトウェアが用意されていたのでそれを使った。

ソフトウェアの利用方法は割愛。
分かりやすいUIなので、説明は不要だと思ってる。

シャットダウン

クローンが終わったら、PCをシャットダウン

HDDを取り外す

HDDからSATAケーブル、シリアルATA電源ケーブルを外す

そうすれば、起動できるのがSSDしかないので、SSD起動できるはず。
できない場合は、クローンで失敗している可能性が高い。

PC起動

SSD起動できたら、OK。
起動が早くなるはず。
少なくとも、windowsのログイン画面は、pin入力画面の表示が早くなった。
QuiteRSS使ってるんだが、それの起動がものすごく早くなった。
大量にRSS購読しているから、HDDのころはものすごく遅かったが、マジでビビるくらいに早くなった。
QuiteRSS使ってる人で、起動時間の遅さに悩んでいるのなら、SSDに交換したほうがいい。

SSDの起動が確認できたら、HDDは、初期化してしまうのも良し、思い出として取っておくのも良し、好きにすればいいと思う。
自分は初期化して、データ置き場にしてる。

感想

いろいろ調べたりして、かなり疲れた。。。
簡単に記事に書いてるけど、紆余曲折あったんだぜ。。。
SATAケーブルとか、シリアルATA電源ケーブル知らなかった俺でも交換はできた。

こういうのを繰り返して、人はハードウェアに詳しくなっていくんだろうなぁって、達観した気持ちになった。

参考サイト

SanDisk,WD SSDのOSクローンに無料配布の「Acronis True Image」を試してみた。簡単ステップでクローン完了 | Win And I net

【最新】HDDからSSDに交換・換装!コピー・クローン方法解説!