Clojureを勉強している4
状態とコンカレンシーの話。
- atom出てきた。
reset!
で再セットかswap!
- 別のスレッドで使ってる場合はリトライされるのか。
- 例では
future
で別スレッドを用意 - printlnみたいな副作用を含む関数などを差し挟むと当然同じ出力が発生する
- しかし、atomは想定通りに更新される。かくして
swap!
は副作用がないってわけか。
- 次はrefs。
- ClojureはSTM付いてるのか。えらい
alter
もリトライするatom
/swap!
とref
/alter
がそれぞれ対応してるのかcommute
はリトライしないとな。DBとか扱うときはこれになるんかなref-set
便利だな。
次はagents。非同期。
agent
/send
がまた対応してると。send-off
はI/O-blockingの可能性があるときに使用するのか- 失敗した時
restart-agent
でリセットすることもできる set-error-mode!
とset-error-handler!
であらかじめ失敗した時の処理を定めておいても良いと。
Atom は 同期 で Uncoordinated
- Ref は 同期 で Coordinated
Agent は 非同期 で Uncoordinated
Chapter 3 State and Concurrency
- Handling Real-World State and Concurrency
Elixir/Phoenixでウェブサービスを作っている15
今日は軽微なコミットしただけで、画面の方考えてた。そろそろサーバの方終わるので、と思ったんだけどサーバ側も増えた。先に画面やるけど。
Done:
- Phoenix 1.1.1から1.1.3へアップグレード
- 参考:1.1.1 -> 1.1.2
- package.jsonを書き換えた後、npm installを実行すること!
- 参考:1.1.1 -> 1.1.2
Todo:
- サーバ
- POST /goals/:target_id/copy?dest_parent_id=:dest_parent_id&dest_position=:dest_position
- copy
- Goal
- child_ids
- sibling_ids
- ancestor_ids
- descendant_ids
- Activity(activities)
- Status(statuses)
- id
- name
- position
- enable
- ユーザー定義
- デフォルト
- 0: todo
- 1: doing
- 2: done
- -1: close
- done/closeは特別にしたいな……
- 面倒くさいなこれ。固定にしよっかな
- デフォルト
- Group(groups)
- 1ユーザー1グループ作る?
- id
- name
- Membership(memberships)
- user_id
- group_id
- pending
- 操作権限チェックを入れる
- ルート操作の防止を入れる
- POST /goals/:target_id/copy?dest_parent_id=:dest_parent_id&dest_position=:dest_position
- ブラウザ
- 兄弟を展開する
- 子を展開する
- 先祖を展開する
- 上下移動
- jk
- 右移動
- h
- 左移動
- l
- new/create
- n: 新規、enterで作成
- edit/update
- e: 編集、enterで更新
- delete
- X: 削除
- copy/cut/paste
- c: 単体コピー
- C: サブツリー全体をコピー
- x: カット
- v: 下にペースト
- V: 上にペースト
- status切り替え
- f: forward
- b: back
- q: close
- タブ
- システムメニュー
- サインイン/サインアウト
- ユーザーメニュー
- アクティビティ
- ユーザー/グループ...
- アクティビティ
- システムメニュー
- オフライン対応
- すごく欲しいがやらない
- /goals/:idを/goals/:hash_digestにする
- User.nickにunique属性つける
- check_descendants!でArgumentErrorにしてるところを独自例外に変える
- on_delete: :delete_allと再帰クエリでどっちが速いか調べる
- 作者: Bill Karwin,和田卓人,和田省二,児島修
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/01/26
- メディア: 大型本
- 購入: 9人 クリック: 698回
- この商品を含むブログ (41件) を見る
Programming Phoenix: Productive; Reliable; Fast
- 作者: Chris Mccord,Bruce Tate,Jose Valim
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2016/01/25
- メディア: ペーパーバック
- この商品を含むブログを見る
Elixir/Phoenixでウェブサービスを作っている14
Done:
- サーバ
- PUT /goals/:id
- check_descendants!
- 自分の子孫に移動しないように確認
- descendants
- self_and_descendants
- check_descendants!
- DELETE /goals/:id
- cascadeに任せてる……
- PUT /goals/:id
Todo:
- サーバ
- Goal
- child_ids
- sibling_ids
- ancestor_ids
- descendant_ids
- POST /goals/:id/copy?to_id=:to_id&to_position=:to_position
- copy
- ユーザー権限チェックを入れる
- ルートガードを入れる
- Goal
- ブラウザ
- 兄弟を展開する
- 子を展開する
- 先祖を展開する
- 上下移動
- 右移動
- 左移動
- new/create
- edit/update
- delete
- copy/cut/paste
- キャッシュ
- /goals/:idを/goals/:hash_digestにする
- User.nickにunique属性つける
- check_descendants!でArgumentErrorにしてるところを独自例外に変える
- 作者: Bill Karwin,和田卓人,和田省二,児島修
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/01/26
- メディア: 大型本
- 購入: 9人 クリック: 698回
- この商品を含むブログ (41件) を見る
Programming Phoenix: Productive; Reliable; Fast
- 作者: Chris Mccord,Bruce Tate,Jose Valim
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2016/01/25
- メディア: ペーパーバック
- この商品を含むブログを見る
Clojureを勉強している3
今日は第2章第2節から第2章の最後までやりました。いや〜面白かった。綺麗だね。
- Functions Creating Functions and Other Neat Expressions
partial
がカリー化か。comp
すごい。
- Destructuring
- 最近の言語は付けるようになってるね。良い
- mapのdestructuringのキーとバリューの位置がちょっと混乱した。
let
関数への引数だから妥当か。 :as
いるよね。- destructuringでデフォルト値(
:or
)書けるのは珍しくない? すごい :keys
は頻出すると。- 関数定義の引数でも使えると。無名関数もかな?
- The Power of Laziness
range
は引数付けないだけで自然数の無限リスト得られるのか!へぇ〜(class (range 5))
と(class (range))
で見ると型が違うのな。前者がclojure.lang.LongRange
、後者がclojure.lang.Iterate
。repeat
ももちろんlazyだとさ。rand-int
便利。(repeat 5 (rand-int 10))
したら妥当だけどちょっと笑った。- 正解は
(repeatedly 5 #(rand-int 10))
。(take 5 (repeatedly #(rand-int 10)))
でも良し。 - repeatedlyさんのrepeatedlyはこれかな?
- 正解は
rest
は無限リストに使えるとのこと。そうだね
- Recursion
The Functional Shape of Data Transformations
map
の解説。doall
で即時実行できるのかreduce
、初期値accなくても実行できるんか。doc見たら最初の2つで実行した結果から始めるみたい。すげえfilter
/remove
か。reject
とかではないんだな。for
出た。let
とか:in
とか:of
とかいらんのね。- コレクション複数取ると全組み合わせ出すのか。やべえな
- おっと
:let
出てきた。面白いな。
flatten
。Rubyと同じ。vec
とかsorted-map
とか型を変える関数あるけどinto
が何でも対応できて便利だな。partition
は余りは捨てて、拾いたいときはpartition-all
か。引数じゃなくて名前が違うんだなpartition-by
も出てきた。こっちは分ける関数を第1引数に取るのか。
Chapter 2 Flow and Functional Transformations
- Functions Creating Functions and Other Neat Expressions
- Destructuring
- The Power of Laziness
- Recursion
- The Functional Shape of Data Transformations
- 作者: Carin Meier
- 出版社/メーカー: O'Reilly Media
- 発売日: 2015/04/14
- メディア: Kindle版
- この商品を含むブログを見る
Elixir/Phoenixでウェブサービスを作っている13
読書の方は1冊読み終わったので1日休憩ズラ。
Done:
- サーバ
- PUT /goals/:id
- update
- move
- inc positions
- dec positions
- ややこしいしめっちゃ汚い
- PUT /goals/:id
Todo:
- サーバ
- PUT /goals/:id
- 自分の子孫に移動しないように確認
- DELETE /goals/:id
- POST? /goals?:from_id&to_id
- copy
- API要検討
- ユーザー権限チェックを入れる
- PUT /goals/:id
- ブラウザ
- 兄弟を展開する
- 子を展開する
- 先祖を展開する
- 上下移動
- 右移動
- 左移動
- new/create
- edit/update
- delete
- copy/cut/paste
- キャッシュ
- /goals/:idを/goals/:hash_digestにする
- User.nickにunique属性つける
- 作者: Bill Karwin,和田卓人,和田省二,児島修
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/01/26
- メディア: 大型本
- 購入: 9人 クリック: 698回
- この商品を含むブログ (41件) を見る
Programming Phoenix: Productive; Reliable; Fast
- 作者: Chris Mccord,Bruce Tate,Jose Valim
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2016/01/25
- メディア: ペーパーバック
- この商品を含むブログを見る
Elixir/Phoenixでウェブサービスを作っている12
起きるのが遅かったのでここまで。久しぶりにめっちゃ熟睡できたのでヨシ。
Done:
- サーバ
- 閉包テーブルやめて隣接リストwith再帰クエリにする
- DBをPostgresにする
- 一応テスト書いてたので割りと簡単にできた
- insert
- children
- parent
- siblings
- DBをPostgresにする
- 閉包テーブルやめて隣接リストwith再帰クエリにする
Todo:
- サーバ
- PUT /goals/:id
- update
- move
- DELETE /goals/:id
- POST? /goals?:from_id&to_id
- API要検討
- copy
- ユーザー権限チェックを入れる
- PUT /goals/:id
- ブラウザ
- 兄弟を展開する
- 子を展開する
- 先祖を展開する
- 上下移動
- 右移動
- 左移動
- new/create
- edit/update
- delete
- insert
- move
- copy/paste
- キャッシュ
- /goals/:idを/goals/:hash_digestにする
- User.nickにunique属性つける
- 作者: Bill Karwin,和田卓人,和田省二,児島修
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/01/26
- メディア: 大型本
- 購入: 9人 クリック: 698回
- この商品を含むブログ (41件) を見る
Programming Phoenix: Productive; Reliable; Fast
- 作者: Chris Mccord,Bruce Tate,Jose Valim
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2016/01/25
- メディア: ペーパーバック
- この商品を含むブログを見る
DDDを読んでる15
全部読み終わった。感想は特にない。スマン。
「それは違うだろ」とか「もっと上手いやり方がある」とかは一切出てこなかったな。元々の自分の読書の仕方が「鵜呑み」であるということもあるのだが、至極真っ当なソフトウェアの作り方だと思う。
う〜ん、全て頭に入ってるとは言えないので、もう1周したいが時間がない。経験を積みながら時折参照していくのが一番いいんだろう。6月に読みなおしの予定をいれとこうかな。と思ったら、実践ドメイン駆動設計がその後の10年で積み重ねられた知見が載ってるということなので、これも読まねばならないだろう。3冊ぐらい積んでるのでちょい後回しになるが読もうと思う。
第17章 戦略をまとめ上げる
結論
- エピローグ
- 展望
エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)
- 作者: エリック・エヴァンス,今関剛,和智右桂,牧野祐子
- 出版社/メーカー: 翔泳社
- 発売日: 2011/04/09
- メディア: 大型本
- 購入: 19人 クリック: 1,360回
- この商品を含むブログ (130件) を見る