『増補改訂版Java言語で学ぶデザインパターン入門』を読みました

これね

https://www.amazon.co.jp/dp/4797327030/ref=cm_sw_em_r_mt_dp_gfuQFbWENWXX9

 

毎朝、リモート出社前に「朝の読書」という時間を作ることで、ちゃんと読み終えることができた。この時間はもっと継続していきたいな。

自分がコードを書いていた中で、ここにあったようなパターンを知らずに実装していることもあるなと思ったが、つまり先達も同じような状況に出くわしたんだろうと。そして今後も同じような状況というのは来るのだろうなと。

もっと早く読んでも良かったかもしれないし、知らずにやってきた結果の「今」が最適だったのかもしれないし、それは分からん。

今は手を動かしてこれらを自分のものにしたいという気持ちが強いかな。

 

読書メモがあるんだけど、かなり引用している部分も多くて著作権に引っかかりかねないので貼らないです。まぁ貼ったところで穴あきなので、結局本を買ってサンプルプログラムと本文ちゃんと読まないと意味ないとは思うけど、一応ね。

以下、読書メモにある読み終わった直後の感想。

 

  • Enjoy Patterns!

めちゃくちゃ良かった。

基本的には、あることを実現したい時、
プログラムをどういう部品とするか、そしてそれをどうやって活用するか、という話だと思う。

今更デザインパターン勉強するのは遅いのでは? という気もしたが、

逆にある程度経験積んだ今勉強したことでちゃんと理解できただろうという気もする。

今まで見てきたプログラムの形を、あーあれはXXXのパターンだったな、とか

あれはXXXのパターンでやればもっと良いプログラムになったな、みたいな。

実感を持って読めた気がする。

 

本書のサンプルプログラムはかなり平易なサンプルになっていて、

実際そういうプログラムを書くことって無いよねというくらいにはサンプルサンプルしすぎている。

確かにその方が理解しやすいんだが、デザインパターンを当てはめることが出来るような実際的な状況にぶつかった時、

本当に実践できるだろうか? というのは気になる。

 

いまいま、Androidアプリに注力しているので、

kotlin+androidで各デザインパターンを考えるとどうなんだろう? というのはかなり気になっていて。

こういうのは自分で手を動かさないと深いところで理解、もしくは実践が出来ないと思っているので、

androidでこういう状況になったとき、じゃあこのデザインパターンを当てはめられます、とか

そういう実践編があっても良いだろうなという気持ちが今ある。

誰のためのデザイン? を読みきれませんでした

2年くらい前に買って途中まで読んでたんだけど断念してたやつ。
面白かったのでちゃんと最初から読み直す。

以下メモ

  • 最初の友人の例がめちゃくちゃおもしろい
    • 開き戸の蝶番がある方を押してしまい、開かなくて閉じ込められちゃう人の話
  • 人間への理解が足りない
  • hcd
    • 人間中心デザイン
  • 発見可能性
    • どう操作するかわかる
  • アフォーダンス
    • ガラスは透かして見ることをアフォードする
      • でも鳥にとっては?
    • アフォーダンスはその人にとって何が出来るか
  • シグニファイア
  • デザイナーはシグニファイアに注力するべき
  • フィードバック
    • うるさいフィードバックは後部座席ドライバー
  • ハードカバー読みづれえ
  • 過剰学習

70ページくらいまでそこそこ楽しく読めてたんだが、そこから先、心理学の話が中心なってきてうーんという感じで断念してしまった。

辺りが分かってればええやろっていう感じ。

アジャイルサムライを読みました

なんかなんとなくやったことあるから分かってる、ググって断片的には知ってる、 っていう感じで、体系的に学びたかったので読んだ。

めちゃくちゃ学びがあるっていう感じでもない。 っていうのもここに書いてあることのエッセンスのほとんどを前職で体験していた。

そして開発進行にストレスを感じていなかったので、 アジャイル開発としての良い例を体験出来ていたんだなという学び。

反対に現職でストレスを感じていて、 自分があまりアジャイルを勉強していないこともあって、 こういうふうにしたいっていうのをあまり強く押し出せなかったのが、 ここでしっかりと勉強できたことで、ちゃんと持ち込めるなっていう気がした。

以下メモ

  • 書き方ちょっとうざいな
  • 明確な役割分担はしない
  • 誰もがこの働き方を求めているわけではない
  • 4つの質問をチームに投げかける
    • 得意なこと
    • どういうふうに仕事するか
    • 大切に思う価値
    • チームは自分に何を期待しているか
  • エンジニア
  • テスター
    • 専任の人と直接会って喋ったことがないのでこういう人がいるならいいなぁという願望
  • PM
    • 障害を取り除く
    • 優れたPMは1週間いなくてもチームが回っている
  • スクラムマスター
  • 曖昧な状況に抵抗がない人がいい
  • 駄目なプロジェクト
    • 答えるべき問に答えられない
    • 手強い質問をする勇気がない
  • インセプションデッキ
  • 顧客がコミットメント出来ないならそのプロジェクトはやらないほうがいい
  • アーキテクチャはチームメンバーによって決まってしまう
    • なので自分の出来ること得意なことを表明する
  • ニーバーの祈り
  • 四天王
    • 時間
    • 品質
    • 予算
    • スコープ
      • スコープは変えやすい
  • INVEST
  • 必要なときに必要な分だけ
  • イテレーションnで分析イテレーションn+1で実装
  • カンバン
    • WIPに上限
  • ストーリー計画ミーティング
    • 着手する準備は万全であるか確認する
  • おかわり
  • 人を動かす〜
  • デイリースタンドアップ
    • 会議体として正式に開催はしない
    • 毎日自主的に5~10分立ったままやる
    • 共有するのは3点
      • 昨日やったこと
      • 今日やったこと
      • 何か進捗を妨げる問題
    • ちょうど朝会に対する改善案を書いていたけど、いい感じに学べた
  • 成果がなくても披露する
    • 目を背けてはいけない
  • 毎回のイテレーションで10%はバグ潰しや改善に使うと良い
  • ユニットテスト
  • バグを修正する前に失敗するテストを書く
    • もうこれ親の顔より見た
  • 危なっかしいところをテストする
  • テストは自信を持つために書く
  • リファクタリング
    • 変数名・メソッド名から始める

実践JUnit 読んだ

夏季休暇取って連休なので、積本消化します。なぜか4冊追加したけど。

これね https://www.oreilly.co.jp/books/9784873117300/

書いてあること大体は首肯できる内容だった。 JUnit に関する内容だけど、テスト全般に言えることも多いのでjava以外にも応用できるはず。 コード自体はほっとんど読んでなくてザーッと見る程度。

以下メモ。書いてあることだけでなく、読者のお気持ちも含まれる。

  • めちゃくちゃ初心者向けという雰囲気
  • hamcrest は matchers のアナグラム
  • javaのサンプルコードよみたくねー
  • sut
    • system under test
  • クラスの振る舞いをテストする
    • なのでprivateをテストするのは良くない
      • privateも一応実行は出来なくはない
      • けどそれってテストとSUTが密結合になってしまう
      • ちょっと変更するたびにテストが落ちる => テストを修正する => めんどくせーからテスト書くの辞めるわになりがち
    • privateの中に興味深い処理がある
      • 単一責任になってないのでは
    • => クラスを分けるのが適切?
  • given-when-then
  • 全部のテストを実行すべき
    • は言い過ぎでなるべく多くのテストを実行する
    • DB操作など低速なのでパッケージを分けるなり、カテゴリ (@Category) 追加して遅いテストを分離しておく
  • 低速なコンポーネントへの依存を辞める
    • よく分からんやり方で実現してるけど、mock, stubで対処できそう
  • 時間を止めたいときは Clock を使う
  • test infected
  • infinitest?
    • ASだと動かないっぽい?
  • timely
    • 後からテスト追加しようはたいていしない
    • いま書こう
    • 実績がある古いコードはあまりテストを書く意味がない
      • 仕様書という意味でテストを書くのはありだと思ってる
  • 0-1-n
    • 0個か1個かn個かでテストを行えばいいケースがほとんど
  • リファクタリングにもテストは有効
    • リファクタリングしすぎてパフォーマンスが心配?
    • 「それがどうした」
    • まずはコードをクリーンにするのが最優先
    • クリーンならパフォーマンスを向上させるコードにするのも容易
  • ここらへんからかなりリファクタリングの話に寄ってくる
  • visitor パターン
  • モックがホントに使われているか確かめる
    • 実運用のコードをちょっと書き換えてみる
    • ありえない値をstubしてみる
      • 例えば緯度経度を0とかにしてみる
  • nullチェックはやらんでええ
    • javaだからかな
    • kotlinでもnullチェックしないで!!でunwrapするでも良いかも
  • 一つのテストに一つのアサーションが原則
    • 名前もわかりやすくなる
  • 他の関数を探し回らなくても理解できるのが良いテスト
  • ここでもAAAは出てた
    • arrange-act-assert-(after)
    • AAAごとに空行あける
    • Arrangeは@Beforeで分割出来るよね
  • テストのために設計を変えるのは嫌
    • テストで扱いやすい設計は実運用コードでも扱いやすい設計になっているはず
  • テストを書くときはまず失敗させろ
    • TDDでもよく言われているやつ
    • 成功するテストは何書いても成功する
    • 失敗するテストは成功させるために理解して書き直さなければいけない
  • マルチスレッドはテスト大変
    • アプリのロジックとマルチスレッドのロジックを分離する
  • 統合テストは大変
    • 例えばDB周り
    • ユニットテストで検証できるロジックを増やす
    • 統合テストは減らす
  • カバレッジ
    • 70%がライン
    • ただ数字だけを上げたいなら実は楽勝
      • assertしないで実行だけするとか
      • でもそれには意味がない

コンビニを使うのは難しい

自分 品を置く
自分「25番二つ」←あ、をつけないで喋れる数少ないセリフ
店員 振り向いて25番を一つ取り出す
店員「こちらでよろしいですか」
自分「あ、二つね二つ」
店員 バーコード読み取り
自分 年齢確認ボタンを押す (おそらくこの間にもう一個取り出しているはず
店員 他の品をバーコード読み取り
自分「suicaで」←あ、をつけないでry
店員「袋はあsdf」
自分「あ、袋お願いします」
店員 袋代つける
店員「タッチお願いします」
自分 suicaタッチする
自分 袋詰を眺めながらタバコが一つしか無いのに気付き
(そういえば1000円だったから通じてなかったのか...) とか考えるが何も言えない
店員 「アリガトウゴザイマシタ-」

家に帰って冷蔵庫に入れてるときにタバコが二つあることに気付く...。

コンビニ、客にも店員にもオペレーションを要求しすぎていて、
お互いのミスに気付きづらい。
多分店員は初手「袋はあsdf」をかましたかったのを
こっちがタバコで先手を打って、さらに二つ要求したことと、
suicaで」が早すぎたことで潰してしまったんだろうな。

そしてこっちは「袋は」と言われたことで、
(ああそうか言わないといけないんだっけか) とか考えて反省しているので
会計の値段がおかしいことに気づかない。
さらにsuicaタッチしている間に袋詰されているので、
一個目のタバコが先に袋詰されていることにも気づけず...っていう。

同じことが別のコンビニでもあったので、もうコンビニ難しくて行きづらい

花を愛でる心

f:id:iaiabot:20200803204403j:plain

ベンジャミン

 

あったらしい。

ベンジャミンっていうらしいです。
調べるとゴムの木の仲間らしくて、母がゴムの木を育ててたのを思い出す。
確かに葉のツヤ感が似てる。

水やりは、母に言われて水やりをしたこともあったりして、
ホントにたまーにしか水をあげてないので「毎日水あげなくていいの」と質問したことが。

- たまーにでいい
- あげすぎると根腐れするから駄目
- あげるときは鉢から水が溢れてくるくらいあげる

ってのを実践してます。
2ヶ月くらい経ったけど元気そうだし大丈夫そう。

実家に住んでるときは観葉植物に全然意識がいってなかったので、
ここに置いてもあんまり気にせんのじゃないかなと思ってた。

が、自分で買って育ててみると違うもんらしい。
割と毎日鉢ごと持ち上げて、葉っぱの様子を観察しています。
買ったときより葉っぱの数増えてるんじゃないかなぁとか。

これが花を愛でる心ですよ。

パームレスト買った

 

f:id:iaiabot:20200721212435j:plain

パームレスト買った。いや、パームレストという商品名ではないので不適切かも。

PFUで売ってるのはこれなんだけど、 https://www.pfu.fujitsu.com/direct/hhkb/hhkb-option/detail_palmrest_wal-4.html

デカすぎじゃねっていう。 D80mmはでかいなーと思っていて、D60のものを自作したんだよね。

が最近やっぱり分割したいよねって思っていて、 自作したやつを切って分割するのも大変なので、マルトクショップでいくつか作ってもらうことにした。 っていうものが1ヶ月待ちでようやく届いたので書く。

シナ(バスウッド) 無垢板フリーカット   四角形   015*0060*0150mm | ◆面[A]:上R面(5R)+ 下糸面 + 磨き ◆面[B]:上R面(5R)+ 下糸面 + 磨き ◆面[C]:糸面 + 磨き ◆面[D]:上R面(5R)+ 下糸面 + 磨き ◆反り止め:無し  ◆塗装:ウレタンクリアー 裏捨て塗り(ツヤ全消し) | 用途:三方向使用
単価:690 円    数量:1    金額:690 円
マホガニー 無垢板フリーカット   四角形   015*0060*0150mm | ◆面[A]:上R面(5R)+ 下糸面 + 磨き ◆面[B]:上R面(5R)+ 下糸面 + 磨き ◆面[C]:糸面 + 磨き ◆面[D]:上R面(5R)+ 下糸面 + 磨き ◆反り止め:無し  ◆塗装:ウレタンクリアー 裏捨て塗り(ツヤ全消し) | 用途:三方向使用
単価:690 円    数量:1    金額:690 円
ユーカリ 無垢板フリーカット    四角形   015*0060*0300mm | ◆面[A]:上R面(5R)+ 下糸面 + 磨き ◆面[B]:上R面(5R)+ 下糸面 + 磨き ◆面[C]:糸面 + 磨き ◆面[D]:上R面(5R)+ 下糸面 + 磨き ◆反り止め:無し  ◆塗装:ウレタンクリアー 裏捨て塗り(ツヤ全消し) | 用途:三方向使用
単価:1,190 円  数量:1    金額:1,190 円
【国産材】桧(無節) 無垢板フリーカット      四角形   015*0175*0160mm | ◆面[A]:上R面(5R)+ 下糸面 + 磨き ◆面[B]:糸面 + 磨き ◆面[C]:糸面 + 磨き ◆面[D]:糸面 + 磨き ◆反り止め:無し  ◆塗装:ウレタンクリアー 裏捨て塗り(ツヤ全消し) | 用途:三方向使用
単価:1,340 円  数量:1    金額:1,340 円
ウォールナット 無垢板フリーカット     四角形   015*0060*0160mm | ◆面[A]:上R面(5R)+ 下糸面 + 磨き ◆面[B]:上R面(5R)+ 下糸面 + 磨き ◆面[C]:糸面 + 磨き ◆面[D]:上R面(5R)+ 下糸面 + 磨き ◆反り止め:無し  ◆塗装:ウレタンクリアー 裏捨て塗り(ツヤ全消し) | 用途:三方向使用
単価:860 円    数量:1    金額:860 円
【国産材】ナラ(節・白太あり) 無垢板フリーカット     四角形   015*0115*0160mm | ◆面[A]:糸面 + 磨き ◆面[B]:糸面 + 磨き ◆面[C]:糸面 + 磨き ◆面[D]:糸面 + 磨き ◆反り止め:無し  ◆塗装:ウレタンクリアー 裏捨て塗り(ツヤ全消し) | 用途:三方向使用
単価:800 円    数量:1    金額:800 円
【国産材】屋久島地杉 無垢板フリーカット      四角形   018*0060*0150mm | ◆面[A]:上R面(5R)+ 下糸面 + 磨き ◆面[B]:上R面(5R)+ 下糸面 + 磨き ◆面[C]:糸面 + 磨き ◆面[D]:上R面(5R)+ 下糸面 + 磨き ◆反り止め:無し ◆塗装:ウレタンクリアー 裏捨て塗り(ツヤ全消し) | 用途:三方向使用
単価:690 円    数量:1    金額:690 円

謹製のもの4千超えるので、2個だけなら送料いれてもこっちのほうが安いと思う。 素材の違いで使用感違うかなーとか、サイズちょっと高さ上げるとどうだろう、とか 色々試してみたかったのでバリエーション豊かになってしまって最終的にちょっとお高めになってる。

素材の違いは、重量違いで結構違うなーという感想。 一番黒っぽいやつ(多分ウォールナット)が一番重くて、こいつが安定感がとても良い。 W175mmとかの横長のだと気づかないんだけど、W60mmくらいちっこいと手汗なんかでベタついてると軽くて簡単に動いちゃう。それが無いので良い。これでパームレスト注文し直しても良いかも。色の雰囲気は屋久島地杉(右手trackpadのパームレスト)が気に入ってる。

ゴム足は適当にamazonで見かけたものを貼り付けてる。無いと高さが微妙に足りないしススススっと動くの音も含めてストレス。

ついでにmagic trackpadの台も注文した。

 

f:id:iaiabot:20200721215240j:plain



HHKBと同じくらいまでの高さにして小指で操作したいよねっていう願望があって、そうするとある程度の高さのパームレストも欲しいよねというのでついで買い。 台とパームレスト別になってるのが良いのか一体型が良いかも試したかった。

一体型は一体型で良いんだけど、キーボードのパームレストと干渉してしまうのがちょっと微妙。 手首置くところはやっぱりちょっと高さあったほうが良いのでメインじゃない左手側のmagic trackpadに使ってる。
段々になっている一体型も考えたんだけど、CAD作らないと注文できないっぽいので断念。

自作したのは捨てちゃった。まぁ微妙だったし。もう一回チャレンジしたい気持ちはある。