bouzuya.hatenablog.com

ぼうずやのにっき

『いつも「時間がない」あなたに: 欠乏の行動経済学』を読んだ

いつも「時間がない」あなたに: 欠乏の行動経済学』を読んだ。

https://blog.sushi.money/entry/2019/01/15/193117 を読んで読みたくなった。

↑の記事からも分かるのだけど『エンジニアのための時間管理術』 (2018-12-12) のような時間管理の本ではなく時間に限らない「欠乏」を軸に書かれている。

序章から引用する。「欠乏は人の注意を占拠し、それが限定的な強みをもたらす。差し迫ったニーズにはうまく対処できるのだ。しかしもっと広く考えると、それには代償がともなう」

この本では欠乏による様々な影響や例が書かれている。そして最終的に「スラック」つまりはゆとりが重要だというところに落ち着く。↑の記事ではスラックを中心に感想が書かれている。

だからというわけではないのだけど……。ぼくが個人的に面白いと思ったのは欠乏の良い面だ。欠乏によってもたらされる限定的な強みだ。「欠乏」と聞いたときのイメージは悪いものだ。ただこの本では良い面も示されている。これは「集中ボーナス」と表現されている。

たとえば締切が近づくとそれに集中する。……というよりはとらわれる。さきの引用で言えば「注意を占拠」される状態だ。それ以外のことに注意を払えなくなる。これは悪い面での表現だ。逆に言うと締切が近づくと「集中ボーナス」が得られる。通常よりも高いパフォーマンスを得られる。ぼくは経験則的によく知っている。締切が近づかないと人は動かない。

ぼくは締切を細かく切ることが多い。実はそれは擬似的な欠乏を生み出して集中ボーナスを得ていると言えるのではないか。 (ゆとりを十分に確保した) 悲観的な計画を立てそこからの遅延を見ながら進めるというのは集中ボーナスとスラックの両立を狙う良い方法なのかもしれない。

この本の結論では欠乏はその前の豊かなタイミングでの怠慢にあるのではないかという点に触れている。ゆとりは必要だ。それがなければ欠乏が欠乏を生む状態などに陥りかねないし正常な判断ができなくなる。一方で欠乏 (による集中ボーナス) がなければ締切には間に合わないかもしれない。

「欠乏は悪い」・「ゆとりが要る」だけでなく何かが欠乏したときの人の行動・特徴を把握してうまく活かしていきたい。

bouzuya/purescript-react-basic-crud 1.0.0 をつくった

今週はこればかりだけど……。

bouzuya/purescript-react-basic-crud 1.0.0 をつくった。 mockmock.dev #201 における w010 の成果物。これまでのルール・活動は bouzuya/w010 を参照。

crudCRUD 。 CREATE / READ / UPDATE / DELETE 。 7 GUIs からお題をもらった。

0.1.0 から 1.0.0 ではスタイルの微調整くらいしかしていない。

プログラミング言語は PureScript 。パッケージマネージャーに spago と npm 。 npm initializer に bouzuya/create-purescript-react-basic 。 purescript-react-basic 経由で react や react-dom を使っている。前回の bouzuya/purescript-react-basic-timeroreshinya/purescript-pure-style は使っていない。前々回の bouzuya/purescript-react-basic-repository-list と同じ PostCSS (+CSS Modules) を使っている。

慣れるための……という感じ。スタイルはきちんとつくって使い回さないと時間内でうまく扱うのは厳しい。あるいはよそのものを使うか。

前回・前々回も書いたけど今週のどこかで w010 のルールの v3 を考るつもり (覚書) 。 Routing / History API / SSR / CI 設定 / スクリーンショット / まとめページは次回以降。

2019-01 ふりかえり

2019-01 をふりかえる。

2019-01 の目標

  • ものをつくる
    • ☐ 毎日 PureScript で 1 コミット
    • ☑ w010 を続ける (mockmock.dev)
  • 本を読む
    • ☑ 週に 1 冊
  • 何かをつかう (ためす)
  • 時間をつくる
    • ☑ 毎日の計画を立てる
    • ☑ 映画は週に 2 本まで
  • 健康をたもつ
    • ☑ ストレッチをする
    • ☐ 決まった時間に起きる
  • その他
    • ☐ BLUE REVOLVER の HYPER MODE をクリアする

目標は 5/9 達成。ギリギリで半分を超えている。

毎日 PureScript で 1 コミットはできなかった。これは 2019 の Q1 のうちに CoffeeScript & JavaScript リポジトリ廃止 (2019-01-07) を掲げた影響が大きい。 それらの TypeScript 化に時間が割かれている。

マストドンは取り組みたいと思いつつも使ってさえ居ないという状況。 2019 で取り組むことができるだろうか……。目標からは外したほうが良さそうだ。

決まった時間に起きる。これが破綻しているのは本当に良くない。 2019-02 の最重要項目にしたい。

BLUE REVOLVER の HYPER MODE 。これは事情があって買うことになった Nintendo Switch大乱闘スマッシュブラザーズ SPECIAL による影響が大きい。これも目標から外しても良さそうだ。

週別のふりかえり

つくったもの

2019-01-01/2019-01-31

mockmock.dev での w010 (2018-12-22) やそれに関連するリポジトリが増えている。

↑にも書いたように CoffeeScript & JavaScript リポジトリ削減の影響で古いもののいくつかを TypeScript に置き換えている。

未公開のものとして Google Tasks API を呼び出すスクリプトも更新を続けている (2019-01-25) 。

CSS 関連のことをすこし調べている。 CSS Modules については実装もだいたい読んだ。 PureScript と CSS Modules の組み合わせも bouzuya/purescript-react-basic-repository-list で試している。

よんだもの

みたもの

今週のもので書きそびれている 『ショーシャンクの空に』と今日の『不都合な真実』を追加した。

ショーシャンクの空に』はハッピーエンドのようでどこかモヤっとする。何が原因なのだろう。つらいなかでも余裕を持つ感じは良いのだけど。ラストがまずいのかな……。それなりにきれいな終わりな気もするのだけど……。分からないのだけどどこか違和感がある。

不都合な真実』。この映画からずいぶんと経つはずだけど事態はどれくらい悪化しているのだろう。

その他

勉強会はなし。

買い物。 Nintendo Switch (2019-01-03) 。それくらいかな。

おでかけ。なし。強いて言うなら初詣 (2019-01-01) くらいか……。

ゲーム。 BLUE REVOLVER は HYPER MODE のクリアを目指しているものの停滞している。大乱闘スマッシュブラザーズ SPECIAL (2019-01-03) に時間を割いている。

運動。ストレッチを続けられている。風邪 (2019-01-08, 2019-01-10) を引いている。弱い。

育児休業に入って 6 ヶ月が経った。家事・育児は変わらず、ぼくが主にやっている。部屋の片付けは進んでいない。寝返りは見えていないけどうつ伏せから仰向けはできている気がする。手をぱたぱたと動かすのが楽しいらしい。離乳食はあまり食べてくれない。来月には保育所が決まるはずだ……。

習慣が崩れてきている。この区切りで見直したい。毎日の計画は立てているのだけどそのとおりに行かないことが多い。また時間単位での計画に対してのツールサポートが悪くて面倒だ。 Google Tasks APIスクリプトが充実したこともあってループ習慣トラッカーがうまく機能していない。

2019-02 の目標

  • 決まった時間に起きる
  • 毎日の計画を立てる
  • CoffeeScript & JavaScript リポジトリを廃止する
  • w010 を続ける (mockmock.dev)
  • 週に 1 冊は本を読む
  • 週に 3 本は映画を観ない
  • ストレッチをする

bouzuya/purescript-react-basic-timer 1.0.0 をつくった

bouzuya/purescript-react-basic-timer の 1.0.0 をつくった。mockmock.dev #200 における w010 の成果物。

timer はタイマー。 7 GUIs からお題をもらった。

0.1.0 から 1.0.0 ではスタイルの微調整くらいしかしていない。

プログラミング言語は PureScript 。パッケージマネージャーに spago と npm 。 npm initializer に bouzuya/create-purescript-react-basic 。 purescript-react-basic 経由で react や react-dom を使っている。今回は oreshinya/purescript-pure-style を使っている。

前回 (2019-01-29) の CSS Modules と違って今回は oreshinya/purescript-pure-style を使っている。 Twitter でもサポートしてもらった 。参考: purescript-pure-styleをつくりなおした - oreshinyaのブログ

CSS Modules と pure-style では単純な比較はできないのだけどせっかくなので方針の違いを見るためにも軽く比較する。ちなみに CSS Modules は〜と書いている箇所は前回のぼくのプロジェクトの設定に固有のものもある。

  • CSS Modules だと拡張した CSSCSS ファイルに書く。 pure-style だと拡張した CSS を文字列として PureScript ファイルに書く。
  • CSS Modules だと CSS ←→ PureScript の変数の共有が面倒。 pure-style だと容易。
  • CSS Modules だと CSS の文法に composes :global :local が追加される。 pure-style は CSS の文法に & が追加される。
  • CSS Modules だと CSS 関連のツール (PostCSS) が必要。 pure-style だと不要。
  • CSS Modules だと別ファイル (*.css) への事前の書き出しが容易。 style 要素への埋め込みは面倒そう。 pure-style だと別ファイル (*.css) への事前の書き出しはやったことないが難しそう。 style 要素への埋め込みは容易。

pure-style の気になる点。副作用があるのに Effect がついていない点。文字列での指定は開発者ツールからのコピペができるのは良い。裏返しだけど下手すると内部で CSS を parse しないといけなくなりそう……。文字列の埋め込みが (<>) でやや読みづらそう。あとは最終的な JavaScriptCSS が文字列として埋め込まれてしまう。これは別ファイルへ書き出す方針をとるときに厳しそう。

PureScript で完結させたいのはわかる。それは↑にも書いたように変数の共有に便利な点やツールセット的にもなるべく身軽で居たい点などからだ。

CSS Modules と pure-style 共に気になる点。クラス名が汚くなってしまう点。 Vue.js の Scoped CSS のような .class[data-hash] のような形のほうが好み。

↑でも触れた別ファイルへの書き出し。 CSSコンポーネントごとに動的に style を追加するアプローチもあるだろうけど link でサイト全体の *.css を読めば良いんじゃないかと思っている。このあたりは速度面の問題があるはずだけど実はあまり詳しくない。

近いうちに自分の納得のいくようなものをつくると思う。

  • CSS に相当するものを PureScript で書く
  • 事前に CSS および PureScript のモジュール (スコープ名) を生成する

前回も書いたけど今週のどこかで w010 のルールの v3 を考るつもり (覚書) 。 Routing / History API / SSR / CSS / CI 設定 / スクリーンショット / まとめページは次回以降。


育児。子どもが離乳食を自分からぱくぱくと食べてくれた。うれしい。

bouzuya/purescript-react-basic-repository-list 1.0.0 をつくった

bouzuya/purescript-react-basic-repository-list の 1.0.0 をつくった。mockmock.dev #199 における w010 の成果物。これまでのルール・活動は bouzuya/w010 を参照。

repository-list は GitHubリポジトリ一覧を表示するアプリケーション。

プログラミング言語は PureScript 。パッケージマネージャーに spago と npm 。 npm initializer に bouzuya/create-purescript-react-basic 。 purescript-react-basic 経由で react や react-dom を使っている。今回は PostCSS で CSS Modules を使っている。

今回は昨日 (2019-01-28) も書いた CSS Modules の件がひとつ大きい。大して CSS は書いていないのだけど設定の参考としてやそこにたどり着くまでの経験値の意味で。

また今回のものは題材が良かったのかつくっていて面白かった。まだつくりこむ余地があった。もっとまじめにつくって本家 (GitHub) よりも使いやすいものを目指すのも面白そうだ。そういう方向性でも練習としては良さそうだ。踏み込んだ挑戦という意味では弱かったと書いた (2019-01-13) のだけどそこは PostCSS と CSS Modules の件で補えたと思う。後から補う展開もありだと思った。

今週のどこかで w010 のルールの v3 を考えようと思う。そこに↑のアイデアも含められると良さそう。

Routing / History API / SSR / CSS / CI 設定 / スクリーンショット / まとめページは次回以降。

続 PureScript のプロジェクトで PostCSS (で CSS Modules) を使う

PureScript のプロジェクトに PostCSS で CSS Modules を適用してみた話 (2019-01-26) の続き。

前回の流れと問題の解決

前回の流れと残った問題・その解決について書く。

bouzuya/purescript-react-basic-repository-listCSS Modules を適用しようとした。方法としては postcss-cli から postcss (postcss-modules プラグイン) を使っている。 postcss-cli を使う理由は webpack による import / require 依存の方法は PureScript では扱いにくいからだ。

これでうまくいくと思ったのだけど問題が起きた。 parcel が postcss-cli 用の postcss.config.js を解釈して不要な変換をしてしまった。 parcel 側の設定方法は見当たらなかった。

最終的にこの問題の解決策としては postcss.config.js を別ディレクトリに移動し postcss-cli--configディレクトリを指定する方法を選択した。これでファイルの変換は問題がなくなった。

利用時の流れ

ここまででの利用時の流れを整理するとこうだ。

  1. postcss-cli により src/**/*.cssdist/style/**/*.csssrc/**/*Style.purs へ変換される
  2. cat dist/style/**/*.css > index.css により index.css をまとめる
  3. index.htmllink 要素で index.css を参照する
  4. src/**/*.purssrc/**/*Style.purs が export した scopedName を参照する (例: button { className: Style.button })
  5. dist/ src/**/*Style.purs index.css.gitignore により git の対象から外す

だいたい CSS Modules を素朴に使える状態のはず……。

output/ に反映されない問題

ところがまた別の問題が起きた。生成された *Style.purs からの定数値を VS Code で補完できない問題だ。

ここで言う補完とは VS Code の拡張である PureScript IDE の機能のひとつだ。 PureScript IDE は保存した *.purs を自動でビルドし output/ (既定値) に JavaScript を出力する。 output/ にある状態 (PureScript IDE によるコンパイルができている状態だと思う) なら補完が効くのだろう。

調べてみたところ *Style.purs は生成されているもののコンパイルされておらず output/JavaScript には反映されていなかった。 *Style.purs を開いて変更し保存すれば output/ に反映される。しかし自動生成されたファイルをわざわざ開いて保存する手順など許容できない。

補完だけならまだ無視できそうだが、 output/ に反映されないので parcel index.html の結果にも反映されない。つまり編集した CSS がブラウザに反映されない。こうなるとさすがに無視できない。

PureScript IDEソースコードを読むことにした。

PureScript IDE と原因の予想

↑に書いたとおり PureScript IDE (nwolverson/vscode-ide-purescript) は VS Code 拡張のひとつである。

VS Code の言語のための拡張なので LSP: Language Server Protocol に対応した Language Server を利用している。 PureScript の Language Server である npm:purescript-language-server (nwolverson/purescript-language-server) だ。

この拡張が提供するコマンドは拡張自体によるものと Language Server によるものの二種類がある。ただ今回の事象にコマンドは関係ないので掘り下げない。

調査前の予想は↓だった。

  • Language Client がファイルの変更を監視・送信できていない
  • Language Server がファイルの変更を処理できていない

調査

PureScript IDE は Language Server を npm:vscode-languageclient (Microsoft/vscode-languageserver-node) の LanguageClient 経由で使っている。これは VS Code の Language Server Extension Guide からして、おそらく VS Code の拡張 (Node.js 環境) では一般的な方法だと思う。ざっと見た感じおかしな点はなさそうだった。

Language Server (nwolverson/purescript-language-server) 側のログを見てみることにした。デバッグ方法がよく分からないので ~/.vscode/extensions/nwolverson.ide-purescript-0.20.7/node_modules/purescript-language-server/server.js を置き換えて適当にログを入れてみることにした。

git clone https://github.com/nwolverson/purescript-language-server
cd purescript-language-server/
npm install -g purescript pulp
# 編集
npm run build
cp server.js ~/.vscode/extensions/nwolverson.ide-purescript-0.20.7/node_modules/purescript-language-server/server.js

実際には purescript と pulp は devDependencies に入れた。雰囲気は↑のような形で。

調査結果

結果としては予想の後者側。 Language Server がファイルの変更を処理できていなかった。

onDidSaveDocument 。 つまり VS Code での保存時にはビルドされる。

https://github.com/nwolverson/purescript-language-server/blob/ad8315d66f1c7ac5f422d868ed7ea3e776cd62d3/src/LanguageServer/IdePurescript/Main.purs#L210-L227

onDidChangeWatchedFiles 。つまり (VS Code を使用しない) ファイルの作成・削除・変更時にはビルドされない。

https://github.com/nwolverson/purescript-language-server/blob/ad8315d66f1c7ac5f422d868ed7ea3e776cd62d3/src/LanguageServer/IdePurescript/Main.purs#L200-L205

VS Code のコマンド View: Toggle Output から OUTPUT を表示してセレクトボックスから IDE PureScript を表示すると "IDE PureScript" という名前の OutputChannel の内容が表示される。これが PureScript IDE の使用している OutputChannel だ。そこに↑のログも表示される。

↓で試しにファイルの作成・変更時にビルドされるような形にしてみた。

https://github.com/bouzuya/purescript-language-server/tree/build-on-changed https://github.com/bouzuya/purescript-language-server/commit/945b1e0d5b22d980d79d1737c0d41b9628f98d34

良い感じだ。

たぶん一通りの問題が解決した。↑の変更で Pull Request して良いのかはよく分からない。なぜ onDidSaveDocument でしかビルドしないのかが分かるほど詳しくないからだ。また nwolverson/purescript-language-serverAtom の拡張からも使われていそうなのでなおのことだ。

PureScript IDE や PureScript の Language Server についての知識がすこし増えた。

2019-W04 ふりかえり

2019-W04 をふりかえる。

2019-W04 の目標 とその記事

目標。

  • ☑ bouzuya/purescript-react-basic-password-generator の 1.0.0 のことを書く
  • ☐ bouzuya/purescript-react-basic-repository-list の 1.0.0 をつくる
  • ☐ bouzuya/purescript-react-basic-timer の 1.0.0 をつくる
  • ☐ bouzuya/yzrh の 0.1.0 をつくる
  • ☐ w010 v3 およびアプリの方針を考える

記事。

目標。ほとんどダメ。 JavaScript & CoffeeScript 移植が中心。 bouzuya/purescript-react-basic-repository-listCSS Modules を試用中 (2019-01-26) 。

つくったもの

2019-01-21/2019-01-27

JavaScript & CoffeeScriptリポジトリ削減やそれに関連した TypeScript 移植がほとんど。

今日は mockmock.dev #201 w010 で purescript-react-basic-crud 0.1.0 をつくった (Slack のスレッド) 。踏み込んだ挑戦ができていない。 CSS Modules の件 (2019-01-26) が解決していたら適用しようと思っていたのだけど未解決だ。

よんだもの

  • 『ビジョナリー・カンパニー』 (2019-01-24)

次は 2018-12-05 の『みんなのデータ構造』かな……。他の積読に進むかもしれない。

みたもの

週 2 本におさまっている。

その他

ゲーム。 2018-11-24 からの BLUE REVOLVER 。停滞中。 2019-01-03 からの大乱闘スマッシュブラザーズ SPECIAL 。灯火の星をクリア (2019-01-25) 。アドベンチャーのクリアゲッターをコンプリートした。

体調。毎日のストレッチを継続できている。

育児。寝返りをした。……がいつも見ていないタイミングでしている。結果しか見ていない。まだ自由自在というわけではないらしくひっくり返ったあと苦しんでいる。離乳食の種類を増やした。

今日は CSS Modules の件から派生して VSCode の PureScript IDE という拡張のソースコードを読んでいる。 Language Server Protocol などへ脱線しないよう注意したい。

2019-01 が終わる。来月には保育所が決まるはず。

2019-W05 の目標

  • 2019-01 ふりかえりを書く
  • bouzuya/purescript-react-basic-repository-list の 1.0.0 をつくる
  • bouzuya/purescript-react-basic-timer の 1.0.0 をつくる
  • bouzuya/purescript-react-basic-crud の 1.0.0 をつくる
  • bouzuya/yzrh の 0.1.0 をつくる
  • w010 v3 およびアプリの方針を考える