備忘録。
以前、Eclipse + Maven を使ってたときは Eclipse の Dependency Hirarchy とかで見てたっけ。
Viewing and debugging dependencies - Gradle User Manual
$ ./gradlew -q dependencies --configuration default
備忘録。
以前、Eclipse + Maven を使ってたときは Eclipse の Dependency Hirarchy とかで見てたっけ。
Viewing and debugging dependencies - Gradle User Manual
$ ./gradlew -q dependencies --configuration default
Future Tech Night #10 に参加しました。オンライン開催。簡単に所感をまとめます。
前半は Java 8 から Java 16 で追加された API のおさらいみたいな感じでした。Record の機能は Lombok でまかなえるっていう意見が TL で流れてたけど、標準機能として提供されるところに価値があると思う。
後半は Tomcat の話。Tomcat のコミッターで 詳解 Tomcat の著者。マニアックというだけあって、知らない内容もあってとても参考になりました。
今週末は JJUG CCC かー。
以下、メモから抜粋。
Future では 14 を使っているところが多い。16 へのバージョンアップもあるかも。バージョンの追随はコストとの兼ね合い。deprecated な API の調査が大変。
${KEY}
ちょっとハマったので備忘録。brew install
でパッケージをインストールしようとしたらこんなエラーが出力された。
Error: The following formula cannot be installed from bottle and must be built from source. Install the Command Line Tools: xcode-select --install
先日、macOS をアップデートした影響で Command Line Tools がなくなったっぽい。言われた通り、xcode-select --install
を実行。
$ xcode-select --install
インストーラーが起動してそこそこ時間がかかった挙げ句、「ソフトウェアをインストールできません」と表示される。代わりに Apple Developers から dmg をダウンロードして実行してみたが同様。(こっちもそこそこ時間がかかる...)
OS アップデート前の Command Line Tools の旧ディレクトリが残っているとインストールが失敗するっぽい。(/Library/Developer/CommandLineTools
)
$ sudo rm -rf /Library/Developer/CommandLineTools # 消すのが心配ならリネームでもOK $ sudo xcode-select --install
現場からは以上です。
先日、『ユニコーン企業のひみつ』を購入して読んでみました。
"ユニコーン企業のひみつ Spotifyで学んだソフトウェアづくりと働き方 - Jonathan Rasmusson" https://t.co/rDWjKW3Edo
— kntmr (@knt_mr) 2021年4月26日
「チームに権限を与える」「チームを信頼する」ことで 自律性のあるチームにする というのが全体を通して書かれており、そのために Spotify が取り組んできたことが紹介されています。
このあたりはなかなか興味深い。
トライブの再編成でどのスクワッドに所属するかをメンバーに選んでもらうの、自己組織化がここまで進むとおもしろそう
— kntmr (@knt_mr) 2021年5月3日
この本の中で「エンタープライズ企業」とか「従来型企業」というのが頻繁に登場してユニコーン企業と比較されてるのですが、これらの前提が極端であまり納得感がない感じがします。
「計画や予算がゴールになりがちでプロダクトにフォーカスできていない」というのは確かにありそうだけど、いわゆる「従来型企業」でも準委任契約のプロジェクトでアジャイルやスクラムのような形を取ることは今となっては特に珍しい話ではないと思われます。
ただ、これに関して個人的に悩ましいのは、こういうプロジェクトだとなかなか規模 (売上) がスケールできないところが課題として捉えられてしまうところ。「うまみのないプロジェクト」みたいに言われてしまうと、そのプロジェクトのメンバーは仕事に対する意義を見出しにくくなるような気がします。その点で、リソースに投資して自律性のある小さいチームにするというのは、わりと合理的なのかなって思う今日この頃です。
読みやすくてなかなかおもしろい内容だったし、こういう本を通して自分たちのチームの課題に向き合うきっかけになったらいいのかなって。
以前から名前は知ってたけど、パフォーマンステストをするのに Vegeta が手軽に使えて便利そう。README にだいたい書いてあるけど取り急ぎ使いそうなところだけ備忘録。
$ brew update && brew install vegeta
$ echo "GET http://localhost:8080/" | \ vegeta attack -rate=10 -duration=60s | \ tee results.bin | \ vegeta report
-rate
は単位時間あたりのリクエスト数。デフォルトは秒間。分間で指定する場合は -rate=10/m
のように書けばよさそう。-duration
はテストの実行期間。
リクエストヘッダは -header
で指定する。例えば、Authorization
ヘッダを付ける場合はこんな感じ。
$ echo "GET http://localhost:8080/" | \ vegeta attack -header "authorization: Basic $(echo -n '{username}:{password}' | base64)" -rate=10 -duration=60s | \ ...
実行結果を vegeta report
で出力するとこんな感じ。
Requests [total, rate, throughput] 600, 10.02, 10.01 Duration [total, attack, wait] 59.956s, 59.902s, 54.164ms Latencies [min, mean, 50, 90, 95, 99, max] 38.694ms, 56.504ms, 49.225ms, 70.715ms, 85.368ms, 175.937ms, 576.39ms Bytes In [total, mean] 1059600, 1766.00 Bytes Out [total, mean] 0, 0.00 Success [ratio] 100.00% Status Codes [code:count] 200:600 Error Set:
Requests
Duration
total
: テスト実行時間の合計 (attack
+ wait
)attack
: すべてのリクエスト送信にかかった時間 (total
- wait
)wait
: レスポンスが返るまでの時間 (total
- attack
)Latencies
min
, mean
, max
: レイテンシの最小値, 平均値, 最大値50
, 90
, 95
, 99
: パーセンタイルBytes In
, Bytes Out
total
, mean
: リクエストボディ, レスポンスボディのバイト数の合計, 平均値Success
Status Codes
code:count
: ステータスコードの分布Error Set
: エラーレスポンスのステータスコードが列挙されるvegeta plot
で実行結果をグラフ表示できる。
$ cat results.bin | vegeta plot > plot.html
現場からは以上です。
以前、あるラジオで紹介されていた HIGH OUTPUT MANAGEMENT を購入して読んでみました。とは言っても購入したのは年初で、途中ちょっと積読しつつようやく読み終えた...。著者の Andrew Grove 氏はインテル社の CEO を務めていた方らしい。
「自身が率いる組織のアウトプットを最大化」をテーマにマネージャーがやるべきことが細かく書かれています。書かれてることをざっくり分類するとこんな感じ?
もともとこの本が書かれたのは30年以上前らしい。もちろん加筆や修正はあると思うけど、今では当たり前のように使われている 1on1 やスクラムなんかも、この本の内容がもとになっていたりするんだろうか。いわゆるバイブル的な本なのかもしれないです。
読書メモをこのツイートのリプライにまとめてみました。内容をふりかえりたいときに読み返そう。スレッド全部を貼り付けたかったけどやり方がわからない...。
"HIGH OUTPUT MANAGEMENT (ハイアウトプットマネジメント) 人を育て成果を最大にするマネジメント - アンドリュー・S・グローブ" https://t.co/3NIpvzaCkr
— kntmr (@knt_mr) 2021年1月19日
更新系のボタンクリックでローディングを表示して二重クリックを防止する実装をよく見かけるが、次のような操作をするとリクエストが二重送信できることがある。
ボタンクリックでボタンにフォーカスが当たるが、ローディングを表示してもボタンのフォーカスは外れない。なので、キーボードの Enter や Space 押下でボタンの click イベントが走ってリクエストが二重送信される。
たぶん、ボタンを disabled にするのが簡単かもしれないが、以降は UIEvent.detail
プロパティを使って回避する方法。
サンプルコードでは、ボタンクリックで overlay が表示されてボタンが二重クリックできなくなるが、キーボードの Enter や Space を押下するとコンソールに submit!
が何度も表示される。
これに対して、ボタンの click イベントでキャンセルイベントを呼び出すようにすると事象が発生しなくなる。(L49 のコメントアウトを外す)
window.addEventListener('click', cancelKeyEvent, true)
event.detail
プロパティには現在のクリック数 (> 0) が設定される。一方、キーボードの Enter や Space 押下のときは値は常に 0 になる。あとは、stopPropagation()
でイベントをキャンセルする。
ちなみに event.pointerType === 'mouse'
は IE 用の判定。
現場からは以上です。