Elixir/Phoenixでウェブサービスを作っている28

Done:

  • サーバ
    • Projectモデルを作成
    • Membershipモデルを作成
    • Statusモデルを作成
    • Project(projects)
      • サインアップ時にproject, membership, goal(root)を作るようにした
    • Goal(goals)
      • project_idを足した
      • owned_byを削った

Todo:

  • ブラウザ
    • GoalController.indexでrootのself_and_descendantsを返す
    • constructorでthis.handle* = this.handle*.bind(this);する?
    • TreeModelを継承したモデルを作ってsiblings関係の関数を生やす
    • 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
    • タブ
      • システムメニュー
        • サインイン/サインアウト
      • ユーザーメニュー
        • アクティビティ
          • ユーザー/グループ...
    • オフライン対応
      • すごく欲しいがやらない
      • 当初想定より簡単にできるかも
  • サーバ
    • Goal(goals)
    • Membership(memberships)
      • status(pending/authorized)
    • Status(statuses)
      • ユーザー定義
        • デフォルト
          • 0: todo
          • 1: doing
          • 2: done
          • -1: close
          • done/closeは特別にしたいな……
        • 面倒くさいなこれ。固定にしよっかな
    • Activity(activities)
      • id
      • goal_id
      • user_id
      • backup(json)
      • diff(json)
    • 操作権限チェックを入れる
    • ルート操作の防止を入れる
  • /goals/:idを/goals/:hash_digestにする
  • User.nickにunique属性つける
  • check_descendants!でArgumentErrorにしてるところを独自例外に変える
  • on_delete: :delete_allと再帰クエリでどっちが速いか調べる
  • TWITTER_REDIRECT_URI必要なさそう

Memo:

Programming Phoenix: Productive; Reliable; Fast

Programming Phoenix: Productive; Reliable; Fast

Clojureを勉強している17

  • Week 2
    • Day 4
      • Symmetric Difference
        • clojure.set/{intersection,difference,union}を使ってクリア。
      • Least Common Multiple -最小公倍数か。効率よいアルゴリズムとか知らんな……。ググる。2つを掛けたものを先日やった最大公約数で割ればいいのか……
        • ゲーッ!分数がある!
        • この前やったgcd関数に分数かけたら動いた
        • ゲーッ!引数が2つじゃない!
        • 可変長引数の最大公約数を求めるのかぁ……
        • ギブアップ。ググったら綺麗なのあった→qiuxiafei/4clojureletfnってあるのか、整理できて良いな。

ワイの書いた可変長引数の最大公約数を求める関数:

(fn [x & xs]
  (reduce
    (fn [a b]
      (if (zero? b)
        a
        (recur b (mod a b))))
    x xs))

だいぶ違うな……ダセェ……

Living Clojure

Living Clojure

  • Chapter 10 Weekly Living Clojure Training Plan
    • How Do I Use This Training Plan?
    • What If I Miss a Day or Two?
    • What If I Don’t Understand the Exercise?
    • Week 1
    • Week 2
    • Week 3
    • Week 4
    • Week 5
    • Week 6
    • Week 7
    • Congratulations

Elixir/Phoenixでウェブサービスを作っている27

Done:

  • ブラウザ
    • onKeyDownイベントハンドラをGoalAppComponentからItemTreeComponentに移した
    • hjklキーを押したときの処理をItemTreeComponentに移動した
    • siblingを求める処理でツリーを探索しないようにした
    • currentを求める処理でツリーを探索しないようにした
    • 移動とフォーカス周りのリファクタリング
    • new/create
      • l押したとき子孫がなければnewフォームを表示するようにした

Todo:

  • ブラウザ
    • TreeModelを継承したモデルを作ってsiblings関係の関数を生やす
    • 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
    • タブ
      • システムメニュー
        • サインイン/サインアウト
      • ユーザーメニュー
        • アクティビティ
          • ユーザー/グループ...
    • オフライン対応
      • すごく欲しいがやらない
      • 当初想定より簡単にできるかも
  • サーバ
    • Activity(activities)
      • id
      • goal_id
      • user_id
      • backup(json)
      • diff(json)
    • 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
    • 操作権限チェックを入れる
    • ルート操作の防止を入れる
  • /goals/:idを/goals/:hash_digestにする
  • User.nickにunique属性つける
  • check_descendants!でArgumentErrorにしてるところを独自例外に変える
  • on_delete: :delete_allと再帰クエリでどっちが速いか調べる
  • TWITTER_REDIRECT_URI必要なさそう

Memo:

Programming Phoenix: Productive; Reliable; Fast

Programming Phoenix: Productive; Reliable; Fast

Clojureを勉強している16

頭使うんで数日分をまとめてできなくなってる。1日分の問題数が少なくなったのでリンクを張ることにした。

  • Week2
    • Day 3
      • Simple Clojures
        • できた。関数を返す関数ですな
      • Cartesian Product
        • 全組み合わせかよ。デカルト積・直積って言うのか。
        • REPLではできてるのにサイトでは通らないということが発生。バージョンが違うのかな……
        • ググったらfor使っためっちゃ簡単なやつ出てきた。for記憶になかったが、Haskellのリスト内包表記欲しいなと思った時点で気づくべきだった。

手元で通るけど、4Clojureではclojure.lang.ArityException: Wrong number of args (1) passed to: core$mapって怒られるやつ、これ:

REPL-y 0.3.7, nREPL 0.2.10
Clojure 1.7.0
Java HotSpot(TM) 64-Bit Server VM 1.8.0_25-b17

user=> ((fn [xs ys] (into #{} (mapcat (fn [x] (map (fn [y] [x y]) ys))) xs)) #{1 2 3} #{4 5})
#{[2 5] [3 4] [1 4] [1 5] [2 4] [3 5]}

Living Clojure

Living Clojure

  • Chapter 10 Weekly Living Clojure Training Plan
    • How Do I Use This Training Plan?
    • What If I Miss a Day or Two?
    • What If I Don’t Understand the Exercise?
    • Week 1
    • Week 2
    • Week 3
    • Week 4
    • Week 5
    • Week 6
    • Week 7
    • Congratulations

Elixir/Phoenixでウェブサービスを作っている26

Done:

  • ブラウザ
    • mocha/power-assertの導入
    • ispartaの導入

Todo:

  • ブラウザ
    • コンポーネント
    • TreeModelを継承したモデルを作ってsiblings関係の関数を生やす
    • 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
    • タブ
      • システムメニュー
        • サインイン/サインアウト
      • ユーザーメニュー
        • アクティビティ
          • ユーザー/グループ...
    • オフライン対応
      • すごく欲しいがやらない
      • 当初想定より簡単にできるかも
  • サーバ
    • Activity(activities)
      • id
      • goal_id
      • user_id
      • backup(json)
      • diff(json)
    • 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
    • 操作権限チェックを入れる
    • ルート操作の防止を入れる
  • /goals/:idを/goals/:hash_digestにする
  • User.nickにunique属性つける
  • check_descendants!でArgumentErrorにしてるところを独自例外に変える
  • on_delete: :delete_allと再帰クエリでどっちが速いか調べる
  • TWITTER_REDIRECT_URI必要なさそう

Memo:

Programming Phoenix: Productive; Reliable; Fast

Programming Phoenix: Productive; Reliable; Fast

Clojureを勉強している15

  • Week 2
    • Day 2
      • (let [[a b & c :as d] __] [a b c d])難しいな。da b & c全体の変名っぽい
      • not=は引数いくらでも取れるんだなぁ
      • gcd書けとな。ユークリッドの互除法かー、名前だけ知ってて覚えていないのでググる。できた。

Living Clojure

Living Clojure

  • Chapter 10 Weekly Living Clojure Training Plan
    • How Do I Use This Training Plan?
    • What If I Miss a Day or Two?
    • What If I Don’t Understand the Exercise?
    • Week 1
    • Week 2
    • Week 3
    • Week 4
    • Week 5
    • Week 6
    • Week 7
    • Congratulations

Elixir/Phoenixでウェブサービスを作っている25

Done:

  • ブラウザ
    • フォーカス移動時、要素が中央にこないのを修正
    • スムーススクロールやめたらガクガクしなくなった

Todo:

  • ブラウザ
    • 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
    • タブ
      • システムメニュー
        • サインイン/サインアウト
      • ユーザーメニュー
        • アクティビティ
          • ユーザー/グループ...
    • オフライン対応
      • すごく欲しいがやらない
      • 当初想定より簡単にできるかも
  • サーバ
    • Activity(activities)
      • id
      • goal_id
      • user_id
      • backup(json)
      • diff(json)
    • 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
    • 操作権限チェックを入れる
    • ルート操作の防止を入れる
  • /goals/:idを/goals/:hash_digestにする
  • User.nickにunique属性つける
  • check_descendants!でArgumentErrorにしてるところを独自例外に変える
  • on_delete: :delete_allと再帰クエリでどっちが速いか調べる

Memo:

Programming Phoenix: Productive; Reliable; Fast

Programming Phoenix: Productive; Reliable; Fast