patorashのブログ

方向性はまだない

Windows PCを買ったので何をやっていってるかメモしておく

LenovoのPCが年末に届いたので、年末年始はPCのセットアップをしていた。因みにまだ終わっていない。

patorash.hatenablog.com

目標

久々のWindowsだけれど、とりあえずWindows Subsystem for LinuxRuby/Railsの開発環境を整えられたらいいなぁというところ。 前提知識なかったのでググりながらやってる。万が一環境が壊れてもいいように、ansible playbookを作って環境構築の自動化をしたい。

やったこと

  • 回復ドライブの作成
  • Windows Update(バージョン1809)
  • Windows Subsystem for Linuxのインストール(ubuntu 18.04)
  • Lenovo Vantageでドライバ関連の更新
  • WSL用のansible playbookの作成(途中)
    • anyenv
      • rbenv
      • ndenv
      • goenv(ghqを入れるため)
    • docker
    • docker-compose(バージョンが古いのでやめた)
    • fishのインストールと設定
    • fishermanのインストールと設定
    • peco
    • keychain(sshの鍵のパスフレーズを起動時に設定するため)
  • WSLにpipでdocker-composeのインストール(手動)
  • chocolateyのインストール
  • VSCodeのインストール
  • wslgitのインストール
  • docker for windowsのインストール
  • kitematicのインストール
  • Affinity Designerの購入・インストール
  • カスペルスキーの購入・インストール
  • MobaXTermのインストール

まだできていないこと

Railsプロジェクトを動かせていない。WSLのみで完結できないか試していたのだが、docker-composeが起動しなかった。docker-composeはdocker for windowsを経由しないと動かなさそう。まだdocker for windowsをインストールしただけで使っていないので、どうしようもなかったらdocker for windowsを使おうかと思う。

ansible playbookでpipを使ったdocker-composeのインストールもまだ。調べておくこと。

WSLのコンソールがタブ表示とかできないので、ターミナルソフトでいいのがないか聞いていたところ、MobaXTermがいいと言われたのでインストールだけしておいた。ただ、WSLを開いたらなぜかbashで起動してしまってエラーになっていたので、fishにしたい。

できたこと

VSCodeバージョン管理システムにWSLのgitを使うことができた。wslgitを使う。これを使えば、Windowsのgitをインストールしなくてもよい。ただし、めっちゃ遅かった…。

WSLでdocker-composeは動かないが、dockerは動いた。Ubuntu18.04だと動かないけれど16.04だと動くという記事がqiitaによくあるが、18.04でもWindows Updateでバージョン1809を当てたら動くようになった(hello worldしか試してないけど)。最初にWindows Updateを全て行ったつもりだったのだが、1809まで適用されていなくて凄くハマった。

久々のWindowsの感想

仮想デスクトップもあるし、WSLのおかげでRubyのインストールとgemのインストールでハマることはなかったので、多分普通に開発環境作れそうだな~という機運を感じた。まぁまだやってないんだけれど。

アプリケーションのインストールもMicrosoft Storeもあるし、Chocolatey GUIがあるので昔に比べたら格段に楽。

また、画面をタッチして色々操作できるのは何気に便利で、トラックパッドを触るのめんどいし目の前のボタン押せばよくて、結構いい。

顔認証でログインできるのも便利で、めっちゃ速い。

あと買ったのがL380 Yogaという、360度開くことができてタブレットモードになる機種なのだけれど(ペンもある)、これが思ったよりも便利。キーボードも自動でオフになるし。13インチなので電子書籍を見開きで見ても読めるくらい。ただし、PCなのでやっぱり重い。1.5kgくらいなので、持つというよりは座って膝の上に置いたりテーブルの上に置いたりして操作するのがいいかなと思う。 まぁ300度くらい開いて机の上に置くと自立するので、それで操作してもいいと思う。

メモリが32GBでCPUもCore i7の4coreなので、操作にストレスは今のところ、ほぼない。半角全角キーを押さないといけないのがストレスかもしれない…。

夢の内容を応用行動分析で考えた

久々に鮮明に夢を見た。

とある仕事を手伝う話になって、手伝おうといろいろしているのだが、何かしらミスする度に相手から口汚く怒られていた。あまりにも腹が立ち、手伝うのをやめようとしたら、また非難されたのだが、そのタイミングで俺は昔のその人がやっていた行動についてキレていた。あなたはこれまで何度キレた姿を晒して周囲を不快にしてきたのか、と。それが自分に向けられたらそんなふうになるんだったら、やるなと。

ただ、夢の中で相手が怒っていたのは自分のせいでもあったのだが、毎度毎度起きていたのは、「なぜ確認していないのか」や「なぜ調査していないのか」という話で、その場になって突然言われるやつだった。つまりは指示の中に「事前に確認すること」が抜けていた。「そんなものは常識。事前に確認するのが当たり前」みたいなことをその人の怒った口調で言われていたのだが、こちらにはその前提がないし、そんな常識は教わってもいないので、できるわけがない。

夢の中では、決裂しそうになったのだが、手伝わないと埒が明かないのは明白だったので、「確認してほしかったんなら最初っから言え!」だの、「そんなふうに言われたらあなたと一緒に働きたくなくなる。多分他の人も同じ気持ちだろう。今回は確認してから続きをやるけれど、次はない。言葉に気を付けてほしい」だのと言って手伝いを継続していたところで目が覚めた。

目覚めは非常にスッキリとしていた。多分、今まで皆が思っていても言えなかったことを全部言えたからなのかなーと思う。

応用行動分析

起きてから夢のことを考えていた。最近、子育ての関係で応用行動分析の本を読んでいる。行動には基本原理があり、行動の後の結果次第で、後の行動が増えたり減ったりするようになる。それが、強化・消去・罰に分類される。

強化

手伝いをして褒められたらまた手伝うようになる。これを分析すると、

行動:手伝いをする 結果:褒められる その後:また手伝いをするようになる

強化は、いいことは強化するべきだけれど、意図せずして悪いことを強化してしまうこともある。例えば、

  • 行動:おやつを買ってと暴れる
  • 結果:おやつを買う
  • その後:また暴れるようになる

また、強化にも積極的強化と消極的強化がある。

積極的強化

行動の後、褒美を与える強化。

消極的強化

行動の後、不快を取り去る強化。例えば、頭痛薬を飲むと、頭痛がなくなるので、また頭痛薬を飲む。

消去

手伝いをしたが褒められなかったのでだんだん手伝わなくなる。これを分析すると、

  • 行動:手伝いをする
  • 結果:何もしない
  • その後:手伝わなくなる

消去は、問題行動をしているときにうまく対応すれば、その問題行動を減らせる。

  • 行動:おやつを買ってと暴れる
  • 結果:どんなに暴れてもおやつを買わない
  • その後:暴れなくなっていく

手伝いをしたが怒られたので二度としたくなくなった。これを分析すると、

  • 行動:手伝いをする
  • 結果:怒られる
  • その後:手伝わなくなる

罰は、この分析だけ見るとよくないように思えるが、抑止力になる。世の中で使われている罰は、交通違反をしたときの罰金などだ。

  • 行動:おやつを買ってと暴れる
  • 結果:一定期間の間、おやつ抜きにする
  • その後:暴れなくなっていく

また、強化にも積極的強化と消極的強化がある。

積極的罰

行動の後、不快を与える罰。体罰、罰金、精神的苦痛。なるべく積極的罰はするべきではない。

消極的罰

行動の後、褒美を取り去る罰。ゲーム機の没収やテレビを消すなど。

自省を促せるように

先の夢に出てきた人は、すぐに罰(精神的苦痛を与える)を使おうとする傾向にあった。これもまた、その人のことを思って怒っているのかもしれないが(もしくは自分の不快を取り除きたいだけかもしれないが)、自省を促すというアクションがあればよかったのかなと思う。今度からどうしたらいいと思う?とか。

こういうとき、大体はミスした本人も「しまった!」と思っている。夢の中の自分もそう思っていた。「言われてみればたしかにそうだ」とは思っているのだが、ミスに対する罵られ方があまりにひどく、「あなたの言っていることは正しいけれど従いたくない」という気持ちになっていた。 人間は感情で動く生き物なので、正しければいいというものではないなと再認識した。その後に手伝いのお礼を言うなり、次にミスしなかったことを褒めたら、積極的強化につながる。

知っていないとできない

とはいえ、時々思うことがある…。考えさせたいのだろうけれど、そもそも知っていないとできないことを、相手に求めていないか、と。AとBとCの道があるけれど、当人はCの道を知らなかったら、Cが選択できない。AとBとCの全ての道を知っている上で考えさせるのはいいと思う。ただ、知らない場合は先に教えてあげたほうがいいと思う。

時々、考えさせた後に、理想の答えじゃないから「いや、Cがあるじゃん…。なんで気づかないの?」みたいなことを言ってしまうことがあるかと思う。これは罰になるだろう。もしくは、延々と「これは理想の回答ではありません」というふうにするパターン。これも、ものすごく精神的苦痛を伴う。昔、OSSにPull Requestを出したときにこういう目にあって本当に嫌になったことがある。

自分がよくやるテクニック

行動にしろ、コードにしろ、それらには当人の感情が宿っている。なので、自分がコードレビューとかでよくやるダメ出しでは、「実は…」とか「なんと、…」を結構使う。

「実はCの道があります!」とか「なんと、Cという道があるらしいよ!ソースはここ!(URLを載せる)」とか。「Cの道があります」だと只の指摘で暗にAとBがダメという感じがあるけれど、「実はCの道があるよ!」だと当人の気付きになるのと、AやBより良いと認識されやすいかと感じている。

まとまらないけれど

起きた時の夢の最初の感想は、相手がだいぶ年配の人だったので「高齢者はせっかく手伝っているのに、伝えるべきことを伝えないという自分のミスを、常識ということに転嫁して怒るし、本当に厄介な存在だ」という感じだった。けれど、いろいろ考えているうちに、その人の親もそうだったんだろうなぁ…とか、もしかしたらその人の姿の影響を受けたりして自分も他人から見たらそう映るかもなぁ…とか、思っていた。

なんにしても高圧的な態度をとったりはいけない。たとえ正しかっとしても、だ。物腰柔らかくいこう。

UMLでドキュメントを残していきたい

ここ最近、設計書を書くためにPlantUMLを使いたいなと思いたち、ちょこちょこ書いていってたんだけれど、ユースケース図の粒度がこれでいいのか?とか、他のダイアグラムの使い方もいまいちわかってないから最近の本で勉強し直すかーと思って、Amazonでこの本を買った。

基礎からはじめる UML2.4

基礎からはじめる UML2.4

まだ読んでいる途中ではあるけれど、現状分析から設計に落とし込むところまで使えるとは知らなかったのですごく勉強になった。

今までなんとなく使っていたのは、ユースケース図とシーケンス図くらいで、アクティビティ図はフローチャートだろ?みたいな感じだった。 オブジェクト図を使って具体的なオブジェクトを登場させて、必要なクラスを考えていく工程や、アクティビティ図で役割を分けた状態でフローチャートを書いていくことで流れが直感的にわかりやすくなるところなど、めちゃくちゃいいじゃんと思う。

雰囲気で設計をやって手を動かしていくのも経験値を積めていいとは思うのだけれど、そういうふうにして出来上がったものは後から見ると、作った人しかわからないようになってしまう。Railsとかフレームワークを使っていれば、コードをある程度は読めるので、小規模であればまぁまぁわかるのだけれど、規模が大きくなってくるとわかりづらくなる。やっぱり設計書が欲しくなる。

というのも、担当外の製品のコードレビューをすることがあるのだけれど、仕様の機微がわからないから、この変更によって他の機能にこういう影響を与えてしまうんじゃないか?みたいな直感が働かなくて、上っ面のコードレビューになってしまっていることがあって、あまりよくないなと感じている。

なんとなく考えている理想的な開発の流れ

コードレビューが上っ面で終わらないためにも、このような流れにしていきたいなーと考えている。

  1. PlantUMLで設計を行う
  2. PlantUMLの設計が終わったらPull Requestする
  3. レビューを行い、仕様が正しいことを確認する
  4. コードを書く
  5. オブジェクト図を元にテストデータを作成する
  6. テストを作成する
  7. Pull Requestする
  8. レビューを行い、問題なければマージする

UML自体は学習コストも高いし一時的に開発スピードは下がると思うけれど、設計能力は上がるだろうし、なにより共通言語としてUMLが使えるようになったらいいチームになるんじゃないだろうか?という考えがある。社内勉強会とかでUMLの有用性を広めていこうかなと思っている。

そのためにも、来年は既存製品の設計書をUMLに起こしていこうかなと考えている。そうすれば、もし新たにメンバーを加えることになったときも、仕様に対する理解のスピードが早いだろうと思うし。

Re:VIEWで長い文字列を折り返すためにやったこと

プロジェクトのドキュメントをRe:VIEWで書いてみようということにしたので、書いている最中なのですが、cmdに長い文字列を書くと改行されずにはみ出たままになってしまいました。 例えば、pg_restoreとか、オプションが多いので長くなりがちです。

//cmd{
$ pg_restore --verbose --clean --no-acl --no-owner --if-exists -h localhost -U postgres -d project_development latest.dump
//}

これが、こう。

f:id:patorash:20181212155837p:plain

どうすればいいのかググってみたところ、seqsplitというスタイルを当てればいいらしいです。

d.hatena.ne.jp

上のサイトの情報の通りにseqsplit.styをwgetでダウンロードしようとしたら、not foundと言われました…。Oh…。

seqsplit.styのサイトにいくとダウンロードできるのですが、styファイルはありません。どうもダウンロードしたファイルを組み合わせてstyファイルを生成しなければならないとか…。

MacTexでどうすればいいのか?

私の環境はMac OSなので、MacTexを入れています。どうしたらいいんや!と思ってアプリケーションフォルダにあるTeXフォルダ内を見ると、Tex Live Utility.appというのがありました。

f:id:patorash:20181212154304p:plain

パッケージ管理ができそうだったので、seqsplitで検索してみたところ、なんと導入済でした。

f:id:patorash:20181212154553p:plain

ということで、seqsplit.styのサイトからダウンロードする必要はありませんでした。 ちなみに初めて起動したものだから、大量のパッケージ更新が出てきました。全部更新しておきました。

seqsplitパッケージをRe:VIEWで使えるようにする

既にあるのであれば、後はreview-ext.rbを作って拡張すればいいっぽいので、そうしてみました。コードはhimajin315さんのgistから直接拝借しています。

review-ext.rb

あとは、Re:VIEWのプロジェクトのstyディレクトリにあるreviewmacro.styを編集してseqsplitパッケージを使えるようにします。

%% 強制的に長い文字列を折り返すために使うパッケージ
\usepackage{seqsplit}

%% from review-pdfmaker
\usepackage{fancyhdr}
%% 残りは省略…

使ってみる

これで準備が整ったので、seqsplitを使ってみます。長い文字列を@<seqsplilt>{}で囲みます。

//cmd{
@<seqsplit>{$ pg_restore --verbose --clean --no-acl --no-owner --if-exists -h localhost -U postgres -d project_development latest.dump}
//}

すると…

f:id:patorash:20181212160215p:plain

改行されました〜!!これで安心して長いコマンドも書ける!

PayPayチャレンジでDyson pure hot + coolを購入してきた

冬のボーナスも出て、何買おうかなーと思っていたところだったのですが、妻がDyson pure hot + coolのHP04WSが欲しいと言ってたので前に現物を見に行ってたのですが、高くて断念してました。

そうこうしているうちに世間がPayPayの100億円あげちゃうキャンペーンの話題で盛り上がってました。

paypay.ne.jp

当初は「自分にはあんまり関係ないなー、iPadがメルカリで売られてるんだなー」くらいで静観していたのですが、TLでも結構使ってる人がいたので多少気になり始めていたところに、エディオンからPayPay対応したぜってメールが届いたので急に閃きました。

お知らせ|PayPayの取り扱いを開始|家電と暮らしのエディオン

あの高いやつが買えるチャンス!普通に待ってても値引きないし!(ブラックフライデーでも新型であるHP04は値引きなしだった)

乗るしかない、このビッグウェーブに!

ということで行ってきました。 お店の玄関にはPayPayのことが書かれた看板が。そして高額商品のところにはPayPayで買うといくらのキャッシュバック!というのが書かれてました。

f:id:patorash:20181208222154j:plain

8万ちょいなので1万6千円分のキャッシュバック。全額キャッシュバックが当たればいいなぁ~と願いながら初のPayPayチャレンジ!

残念ながら外れてしまいました。

f:id:patorash:20181208215918j:plain

それにしても私の前に支払いしてた人はお掃除ロボットのルンバのいいやつを買ってましたし結構やってる人は多そうでした。 高い買い物でしたが、まぁいつかは買う予定ではあったし、お得に買うことができて良かったです。キャッシュバックは1月に貰えるみたいです。

気になるのはPayPayの障害がよく発生していることですが…。これで流行るのかな~?PayPay。あと支払いが自分のスマホのほうに金額を入力して支払いってやるところ。これは不便なような…。バーコードを読むだけのパターンもあるみたいですが。今のところ、クレジットカードでスッとやるほうがUXはいいですね。因みに普段はKyashでQUICPayを使ってます。

LenovoのPCを注文したが第二次審査で止められたが解決した

昨日の日記で書いた続きです。最終的には注文が受理されたので、どういうフローになったかを記しておきます。

まず昨日の日記です。

patorash.hatenablog.com

クレジットカードの第二次審査で止められて、ムキー!😡となっていたのですが、ググると結構そういうことはあるらしい…。

chrome.hatenablog.jp

私のメールにも、

  1. 銀行振込にする
  2. 違うクレジットカードで払う
  3. 同じカードで新たに注文し直して今の注文をキャンセルにする

という三択が書かれていたのですが、注文番号が変わると楽天Rebates経由での注文ということが紐付かなくなってポイントバックがなくなるんじゃないか?という懸念がありました。

今回は2の『違うクレジットカードで払う』で返信して、翌日のLenovoからの電話を待ちました。

Lenovoの担当者からの電話

Lenovoの担当者さんから電話があり、「お客様はLenovo IDを持っておられたので、今の注文はキャンセル扱いにして、新しく見積もりを作っておいたので、それを違うクレジットカードで決済してみてください」と言われました。 この時点で私は、🤔「これは注文番号が変わるのでは?」と思い、「楽天Rebates経由での注文だったのだけれど、その方法だとポイントバックはなくなりますか?」と質問したのですが、担当者の方は楽天Rebatesのことを知らなかったため、事情を説明して、「今の注文番号のまま、なんとかならないか?」と相談しました。

すると、1,2,3の選択肢の全てが新しい注文番号を発行するフローであることが判明!担当者さんが「Rebatesとかの連携を扱っているのは違う部署なので、調整して明日連絡します」と言ってくださいました。いやー、面倒臭い客で本当にすみません…😥

明日まで待つかー…と思っていたら、15分後くらいにまた電話があり、「今のクレジットカードの再審査が通れば、今の注文番号のままいけるので、クレジットカード会社に連絡して停止したのを解除してもらってください。その後、Lenovoのほうでまた再審査します」という話に。それでいいなら、それが一番助かります。

カード会社に連絡

カード会社は楽天カードだったのですが、よくある問い合わせを見ていると、カスタマーセンターに電話するしかなさそう。 混んでいる時間だったので結構待たされましたがなんとか繋がり(電話代は有料…)、確認したところ、セキュリティでブロックしていたことが判明。久々の高額商品の購入だったので、怪しいと思って発動したのかもしれません。でも、たかだか20万円なのに…。 早速解除してもらい、「本日中であれば、セキュリティのブロックは発動しないようにしました。明日からは発動しますのでご利用されるのであれば今日中がオススメです。」と言ってもらいました。準備は整った!

Lenovoに再審査依頼メールを送る

その後、クレジットカードのブロックを解除してもらった旨のメールを送りました。 そして、再審査に入る返信をもらい、最終的に審査に通って注文が受理されたメールが届きました!よかったー!

今回はRebates経由だったので余計に大変でした。最初は「Lenovoめー!😡」と思ったのですが、止めてたのはカード会社なので、Lenovoは悪くありません。 これでおそらくRebatesからのポイントバックも貰えるでしょう。

ちなみに楽天Rebatesで買えるのはLenovoだけじゃなくてAppleDellビックカメラとかも対象です。Appleは2%とポイントバック率は低いですが、商品が高額なので25万のものを買ったら5,000ポイント返ってくるのでMacBookProやMac miniの注文をご検討している人も使ったらお得だと思います! Rebatesお友達紹介キャンペーン

LenovoのPCを注文した

かれこれ8年くらいは公私ともにMacを使ってきているのですが、ここ最近のMacの値段の高騰などによって、WindowsもしくはUbuntuなりを使ってみようかなと思うようになってきていました。

前の会社で支給されていたPCがあまりにも遅くて、iPhoneアプリ開発用に購入されていたMac miniがお試し開発後に放置されていたので、Core2Duoになるし快適になるはず!と思ったのが、Macを使い始めた理由でした。 その後、当時のMacのキーボードの打鍵感が好きで、個人的にもMacBookを買って、それからはずっとMacBook系を使っていました。MacBook、MacBookAir、MacBookProときていましたが、アベノミクスによって円高も終わり、Macの値段は急激に上がっていきました。

欲しい構成のMacの値段は手が出なくなってしまったので、ずっと今のMacBookProを使っていくか、もうちょい貯めて買うか…と悩んでいたのですが、Macは互換性を切り捨ててポートをUSB-Cだけにするし(利点が多いのはわかるが…)、いい加減Appleに対して疲れてきていた感がありました。

そういうこともあって、Lenovoの割引がすごいという話はよく聞いていたため、なんとなくLenovoのノートPCを物色する日々が続いていました。 そうしたら今回、楽天スーパーセールのタイミングで楽天Rebates経由でLenovoのPCを買うと20%ポイントバックというのを見かけてしまい、LenovoのPCを買う決断をしました。

候補は、ここ数日ずっと検討していたThinkPad E480, A485, L380でした。 A485はAMD Ryzen 7 pro 2700uが載っていて一番候補だったのだけれど、購入のタイミングでページを見たら、Windows 10 Proモデルがクーポンの対象になっていなかったので断念。多分、前に見ていたやつが売り切れてしまったのかなと思います。 L380は13インチで重さもまぁまぁよくてメモリが32GB載るので二番目の候補でした。 E480はコスパがめちゃくちゃいい。けれど、付属ポートがちょっと貧弱…。最初に見かけたときはこれだ!と思っていたのですが、色々見ているうちに三番候補に。

最終的に、L380 Yogaに決めました。 Yogaは、ディスプレイは360度開いてタブレットモードになるやつで、タッチペンが付いているモデルです。

www.lenovo.com

開発用途なので、以下の構成に。

これで税込で約20万円くらいでした。

注文はしたのですが、何故かLenovoが行なっているクレジットカードの二次審査に引っかかったみたいなので、まだ注文は成立していません。こんなパターン初めてだったのでググったら、結構あるみたいでした。支払限度額も十分にあるのに、何故…。とりあえず、他のクレカに替えるか、銀行振込になりそうです。 とはいえ、成立すれば20%ポイントバックになる予定なので、4万ポイント貰える!わーい!

ちなみに20%ポイントバックは期間限定だったのでもう終わっていますが、スーパーセールの間は10%ポイントバックをやっているみたいなので、もしLenovoのPCを買われるのであれば、楽天Rebatesを経由するとお得です!普通にLenovoのクーポンも使えますし。

以下のリンクから移動してもらってLenovo以外でも商品を買ってもらえたら私とあなたに500ポイントもらえるらしいのでよかったらよろしくお願いします。

Rebatesお友達紹介キャンペーン

まだ注文が成立していないけれど、届くのが楽しみです。