書評『いつも「時間がない」あなたに 欠乏の行動経済学』
いつも「時間がない」あなたに: 欠乏の行動経済学 (ハヤカワ・ノンフィクション文庫)
- 作者: センディルムッライナタン,エルダーシャフィール,Sendhil Mullainathan,Eldar Shafir,大田直子
- 出版社/メーカー: 早川書房
- 発売日: 2017/01/07
- メディア: 単行本
- この商品を含むブログ (6件) を見る
タイトルをひと目見たあなたは、おそらくこう思うだろう。
「あぁ、これは忙しいビジネスマン向けに、行動経済学を応用した時間管理手法を解説する本なのだな」と。
しかし、一読すれば印象は一変する。
もちろんこれは邦訳するにあたって早川書房が改変したタイトルで、原著タイトルは Scarcity つまり、「希少性」となる。
はじめに断っておくと、本書は経済学が扱う希少性という概念を軸に、様々な欠乏――金銭的であれ、時間的であれ――に共通する特徴を暴き出し、貧困への理解を促すものである。
忙しい人にとっては時間が希少で、経済的に貧しい人にとってはお金が希少なのだ。
続きを読むVue.jsのv-modelとIMEの小話
tl;dr
v-model
だと入力途中のものが反映されないので面倒だけどキーイベントに応じて document.getElementById("some").value
しよう
補足
主にオートコンプリートでの話だが、オートコンプリート機能自体をAPI化している場合など、キーイベントで何かしらのメソッドを発火させたい場合がある。
しかし、Vue.jsで便利な v-model
はIME起動時にデータを変更しないようになっている。(入力が確定された時にデータが入る)
試してみてほしい。
<!DOCTYPE html> <html lang="ja"> <head> <title>Sample</title> </head> <body> <h1>IME Sample</h1> <div id="vue-sample"> <input type="text" v-model="message"> <p>{{ message }}</p> <hr> <input type="text" v-on:keyPress="withIme" id="with-ime"> <p>{{ with_ime }}</p> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var vm = new Vue({ el: "#vue-sample", data: { message: "", with_ime: "" }, methods: { withIme() { message = document.getElementById("with-ime").value this.with_ime = message } } }) </script> </body> </html>
雑魚サーバサイドエンジニアがSPAに入門してみた
TL;DR
とりあえず作れ。実装は github にある。
モチベーション
最後にやったのがいつ なのかを記録するWebアプリが欲しかった。iOSを持っていないのと、ここ最近ようやくJS界隈が落ち着いてきた感があったので入門として規模が良さそうに感じたため、練習がてら作ってみた。
どう取り組んだか
雑魚なので今までアプリ作りを挫折していたが、この記事を読んで とりあえず超MVPで 作ることを重視することにした。
仕事は常に超短納期で正直アホみたいなコードばかり量産しているので、機能追加を自分で制御できるぶん「捨てるもの」は判断しやすい。今回は以下のような順序で実施することにした。
- JSのツールチェインに慣れるため、まずはexpressをSinatraライクにして、単純なAPIとして振る舞うように作った
- この実装も一応リポジトリにしている -> https://github.com/t-chov/telos
- gihyoのVue.js入門 をやる
- ここではNuxt.jsに触れられていないが、一旦仕組みを理解するべく
vue-cli init webpack
して始めることに
- ここではNuxt.jsに触れられていないが、一旦仕組みを理解するべく
- 1で書いたものをSPAっぽく書き直していく
Vue.jsに関して言えば、この順番でやっていけばとりあえずSPAっぽいものは書けるんじゃないだろうか。
逆に、学習に時間がかかりそうなので今回は以下の要素を捨てた
- 単体テスト
- E2Eテスト
- TypeScript化
その代わりESLintはAirbnbスタイルでほとんどきっちり通している。
成果物
Firebase + Vue.jsでSPAっぽく作った。CSSは bulma を使った。「SPAっぽく」というのはそうでほとんど遷移がない。今後機能が欲しくなったらいろいろ追加したい。
加えて、Vuexを使っていないのであんまりVue.jsのスキームに乗り切れていない。これは今後改善していく。単にVuexに慣れていなくてvuexfireの使い方がすぐわからなさそうだったので、今は大急ぎで https://vuex.vuejs.org/ja/ をやっている。
得られた成果
作りながら覚えることで学習が進む
今までチュートリアルをやってはデプロイまでいかず挫折する雑魚だったが、デプロイを最優先にすることで「これは後回し」という割り切りをできるようになり、結果として挫折するより数百倍学習が進んだ。今までは「趣味なんだからこだわろう」と考えていたがそんな考えは捨てたほうがいい。この精神はたぶん同人活動で獲得した気がする。
アウトプットできることによる自信
「何か作れる」というのはやっぱり達成感がある。筋トレもすれば倍ドンだ。既存のアプリを変にカスタマイズするより、欲しいものを自分で生産できると精神衛生にも良い。
技術的に困ったところ
以下、JS初心者ならではの困ったポイントを列挙していく。
bulma(というか外のCSS)をインポートするには?
main.jsで以下のようにする。
require('bulma/css/bulma.css');
日付の取扱が面倒
moment.js を使うのだ。こんな感じで使うと「期限まであと何日」が簡単に出てくる。
getDue(interval, latest) { const latestMoment = moment(latest); const due = latestMoment.add(interval, 'days'); const now = moment(); return due.diff(now, 'days'); },