bouzuya.hatenablog.com

ぼうずやのにっき

bouzuya/tamaru 起動時の読み込み

bouzuya/tamaru 。起動時にデータを読み込むようにした。昨日 (2018-05-16) の予定を完了した。 avar でサーバー全体の状態をつっこんだけど、これで良いのかよく分からない。

だいたい DB は外部にあって何かしらの通信でデータを引っ張ってくるように思うので、内部に状態を持つのってあまりない気がする。

fgb (private) 。やってない。暑いからか、だらっとしている。

Sinon.js でハマる / 『ロスト・ワールド / ジュラシックパーク』を観た

Sinon.JS の stub の挙動でちょっとハマった。

"test should stub method differently based on arguments": function () {
    var callback = sinon.stub();
    callback.withArgs(42).returns(1);
    callback.withArgs(1).throws("name");

    callback(); // No return value, no exception
    callback(42); // Returns 1
    callback(1); // Throws Error("name")
}

これ callback.withArgs(42).returns(1).withArgs(1).throws("name") のようにひとつづきにすると期待通りに動かない。呼び出し回数などはきちんとカウントできるが、引数別の挙動がおかしくなる。↑の例を見ると区切るのが当たり前みたいに思えるけど、 returns もそれっぽいオブジェクトを返しているので、あまり加減が分からない。


bouzuya/tamaruGoogle Sheets API からの応答の解釈が雑だけど、とりあえず読み込めるようにした。毎回取るには時間がかかる処理なので、起動時にすべて読みこんで、それを返すつもり。あとは更新時に部分更新できれば十分なはず。今日は起動時の読み込みまでやるつもりだったのだけど、 serial number (Excel の Date を表す数値) の変換に気を取られたり、残業したせいで間に合わなかった。

明日は fgb (private) をやろうかな。


『ロスト・ワールド / ジュラシックパーク』を観た。途中まで。過去に観たことがあるはず。映画の中のケンカは観ていてイライラする。

Google Sheets API v4 をすこし試す

bouzuya/tamaru 。今日は EncodeJson View を実装して、 Google Sheets API の呼び出しの調査。

NPM には googleapis があり、これを使うと簡単にできる。↓のような形。

const { google } = require('googleapis');
const sheets = google.sheets({ version: 'v4', auth: '__KEY__' });
sheets.spreadsheets.values.get({
  range: 'A:B',
  spreadsheetId: '__SPREADSHEET_ID'
}, (err, response) => {
  // do something
});

ただ PureScript で NPM パッケージに依存すると、パッケージ化したときに npm i をしてもらわないといけなくなるので、できれば避けたい。

googleapis を使わずに呼び出す方法を調べてみたところ、Google Sheets API のドキュメント がいつのまにかきれいになっていた。そも以前は公式の API がなかったような気も……。

というわけで、呼び出しはできそうだけど、 PureScript で型をつけていくと骨が折れそう。そういうことがしたいわけでもないので、ひとまず googleapis 依存を許容して進めることに。↑のような JavaScript のコードを PureScript から呼んでいく。 PureScript を書いていると、わりと JavaScript を書くことになりがちだ。

ぼちぼちといった進捗。明日は初期の読み込みを終わらせよう。


通院。また逆子。うーん。

bouzuya/tamaru を MVC2 っぽくした

bouzuya/tamaruServer.* をつくっている。

ごちゃごちゃとしていた Server.Node.ServerBouzuya.HTTP.Server.Node に移動した。 Bouzuya.* はこのプロジェクトに固有ではない処理を抜き出しておいて、あとでパッケージ化しようという算段だ。 bouzuya/purescript-bouzuya-http-methodbouzuya/purescript-bouzuya-http-status-code のようなイメージだ。

雰囲気で Action / Model / View のように切り分けて、いわゆる MVC2 っぽい感じにした。参照系の大枠はできた。 DB アクセスに相当する部分はつくっていないのでダミーだ。

明日はひとまず EncodeJson View を実装する。それから Google Sheets API の呼び出しを進める。


月曜日。朝はそうでもなかったのだけど、夜になってなんだか風邪っぽい調子だ。体がだるく、のどが痛い。明日は通院のため午前休。……とは言え、ぼくのための通院じゃない。寝れば治りそうだけど、うつさないように注意しないと。

fgb (private) に小さな機能追加。表示する情報を増やしたくらい。

2018-W19 ふりかえり

2018-W19 をふりかえる。

2018-W19 の目標 とその記事

目標。

  • ☑ bouzuya/tamaru を進める

記事。

目標は達成。 bouzuya/tamaru は想定ほどではないものの進んでいる。 HTTP request を受けて response を送るという基本的なところの整備をした。遅い代わりに↓の PureScript パッケージを作成・公開を試せた。

つくったもの

2018-05-07/2018-05-13

tamaru を進めている。まだ何をつくるのかも書いていなかったかも来週には書こう。 HTTP サーバーの基礎的な部分をつくっている。

その過程で PureScript のパッケージのつくりかたを調べ、試しにふたつをつくってみた。 bouzuya-http-method と bouzuya-http-status-code がそれ。 scoped package のようなものはないので、 bouzuya をつけてみた。あまりこんなことをしている人を見ないので、ひょっとするとまずいのかもしれない。

よんだもの

純粋関数型データ構造は途中から全然わからない。難しい。

みたもの

2018-05 からの週 2 本の制限を守れている。

その他

ゴールデンウィーク明けの初週。思ったほどはバタバタしていない。していないからこそあとで帳尻合わせがありそうだ。

妻の仕事が終わった。いよいよ近づいてきた。ほとんど準備はできていないけど、名前はぼんやりと決まっている。

ひさしぶりの映画館での映画。内容はちょっとアレだったけど。

bouzuya/tamaru などを通じて、 PureScript を毎日書いている。2018-04 からの『 Haskell / PureScript / Rust を毎日使おう』の取り組みを続けられている。良い。

腕立て伏せをしている。気休め程度に。

2018-W20 の目標

  • bouzuya/purescript-bouzuya-http-method & status-code のことを書く
  • bouzuya/tamaru v1.0.0 をつくる

『アベンジャーズ / インフィニティ・ウォー』を観た

アベンジャーズ / インフィニティ・ウォー』を観た。ネタバレをなるべく避けつつ、感想を書く。

まず『ブラックパンサー』以外を観ているぼくの感覚だけど、冗談抜きにここまでの作品を観ていないと観られないように思う。ほとんど冗談かと思うような形で「最低限これだけは観ておけ」で映画を 4 本挙げていたり、例のすごい量の芋づる式の画像とかあるけど、わりと冗談じゃないと思う。たとえば冒頭。ある程度は観ている人でも『マイティ・ソー バトルロイヤル』のラスト (だっけ) を観ていないと分からないと思う。こういうのがクソほどある。

スケールが確実に大きくなっている。ニューヨークから世界へ、世界から宇宙へ。で、その大きな舞台にふさわしい敵としてガーディアンズ・オブ・ギャラクシーから「サノス」が出てくる、と。インフィニティ・ストーンという、せいぜい 1 個ずつしか出てこない超絶強力な石 (まず過去の MCU 作品を観てないとここさえ伝わらないと思う) を 6 個すべて集めようとする。つまりとんでもない奴ってこと。

サノスはもう冒頭からすごい勢いで観客の心を殴りつける。物語が進むごとに、敵の正義 (?) が描かれてしまい、主人公化していくというか……。

公式サイトには「サノスの野望」が書いてある。

この宇宙を自身の信じる姿に変えること。そのため、“パチン”と指を鳴らすだけで全宇宙の生命の半分を滅亡させられるほどの無限大のパワーを秘めたインフィニティ・ストーンを6つ全て手に入れようと狙っている。

「信じる姿」があって、そのために「全宇宙の生命の半分を滅亡」させる力を欲しがっている、と。そういうこと。

うまく書けない。ネタバレ感が出て来るのでやめる。

最後に冗談ではあるが真理っぽく見える、ぼくの感想。

たぶん、過去作品をすべて観るまで観なくていいと思う。観終わるころにはきっと次のアベンジャーズが出てくれるはずだから。


bouzuya/purescript-bouzuya-http-method をつくったのだけど、時間がないので、書くのは明日にする。

HTTP の Method や Status をあと何回つくるのか

bouzuya/tamaru は進んでいない。 Status を切り出してみたものの迷っている。この StatusMethod などは外部のパッケージが既にある。

たとえば Status

たとえば Method

迷う。 purescript-http-typespurescript-httppurescript-http-methods などをもとにしたものみたい。どうせならバラしたパッケージとまとめたパッケージを分けて欲しい……。ベースにしていると言いながら自前で定義している……。もやもや。

動かす上ではどうでもいいことなので、細かいことを気にせずやっていきたいところ。


bouzuya/fwt でそれぞれの画像の大きさを最適化しようと思ったのだけど、途中で投げている。明日は続きをする。