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

Done:

  • ブラウザ
    • smoothScroll()を修正
    • #wrapの高さ変更(windowの高さに応じて固定)
    • 上下左右移動で行き先の要素の有無を確認するようにした
    • 上下左右移動でカレントゴールを変更するようにした

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

Clojureを勉強している13

  • How Do I Use This Training Plan?
    • 1週5日、7週間、即ち35エクササイズで終わるトレーニングプランとのこと
    • 最初の3週間は4Clojureというウェブサイトの課題を解く
      • 穴埋め形式っぽい
    • 次の3週間はルイス・キャロル不思議の国のアリスにインスパイアされたプロジェクトベースの課題を解く
    • 最後の1週間は自分自身のアプリを作ってHerokuにデプロイするとこまで
      • う〜ん、1日3エクササイズを目標にやってみようかな。12〜13日で終える予定で。
  • What If I Miss a Day or Two?
    • 1日2日休んでも構わないとのこと
  • What If I Don’t Understand the Exercise?
    • 9章に書いたサイトを参考にしたり質問したりしろとのこと
  • Week 1
    • Day 1
      • conjは要素をコレクションにくっつけるとだけ覚えていたんだけど、(conj '(1 2 3) 4)'(4 1 2 3)が返るようにリストの場合は頭につくのがびっくりした
      • (:b {:a 10 :b 20 :c 30})20が取れるのギョッとした。正直find使って欲しい
    • Day 2
      • ウェブサイトの誘導に従って問いてたら、やり過ぎた。本の方は飛び飛びだった。
    • Day 3
      • 正規表現出てきた。#"[A-Z]+"みたいに文字列のブレースの前に#を付けたら正規表現とのこと
      • F#やElixirの|>みたいな->出てきた
      • ->>も出てきた。こっちは最後の引数に当てはめる
    • Day 4
      • mapcat...
    • Day 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

Clojureを勉強している12

第9章をやったというか調べた。頑張っていっぱい書いたのだが、はてなブログが"The body contains NG words"のエラーを出し死亡。リンク集的になったのがダメだったのかもしれない。本を読んでくれ。良いリンク集だった。

gist37e41fa3e42572b34538

Living Clojure

Living Clojure

  • Chapter 9 Joining the Clojure Community
    • Clojure Documentation
    • Which Libraries to Use
    • Clojure News
    • Finding Other Clojurists
    • Getting Help with Problems and Questions
    • Building Things with Other Clojure Enthusiasts
    • Summary

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

Done:

  • ブラウザ
    • this.props.childrenを上書きしてるので修正
      • children -> descendants
    • ItemTreeComponentに与えるprops見直し
      • goal_tree全体は含まない
      • ツリー全体に関わる処理はsubscribe()でやる
    • JsonPath入れる
      • やめ。insertなどできるモデルを導入。
    • 木構造を扱うライブラリの調査
    • joaonuno/tree-model-jsパッケージの導入。
      • できた
    • r7kamura/key-stringパッケージの導入。
      • できた
    • keydown event処理をItemTreeComponentからdispatchするようにした
      • ItemTreeComponentに持ってる方がおかしいので、どっかもっと上の方のコンポーネントで処理した方が良いかも
    • handleEvent()をItemTreeComponentからGoalAppComponentに移した

Todo:

  • ブラウザ
    • #wrapの高さがセクションの倍数になるように動的に変更
    • ツリー全体を展開する
    • 上下移動(要素の有無を見る)
      • 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
    • タブ
      • システムメニュー
        • サインイン/サインアウト
      • ユーザーメニュー
        • アクティビティ
          • ユーザー/グループ...
    • オフライン対応
      • すごく欲しいがやらない
      • 当初想定より簡単にできるかも
  • サーバ
    • 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

Clojureを勉強している11

  • Chapter 8 The Power of Macros
    • Exploring Macros
      • マクロだ!
      • マクロで何ができるかというと……
        • 自分自身で言語機能を作成し埋め込むことができる
        • プログラムに必要なコードの行数を減らし、より簡明に読みやすくできる
        • パターンや繰り返しのコードを包んで、簡単なマクロの呼び出しに置き換えることができる
      • ふむ
      • ほうwhenはマクロなんか
      • defmacroでマクロ作成
      • macroexpandでマクロを展開
      • macroexpand-1が1回展開でmacroexpandがマクロである限り展開なのかな?(英語を気持ちで読んでるので)
    • Creating Our Own Macros
      • defmacroでパターンを省略できた
    • Using Templating to Create Macros
      • `がquote、~がunquote。Elixirよりも短いな。
      • Don't use a macro unless you have to. との戒めが

Living Clojure

Living Clojure

  • Chapter 8 The Power of Macros
    • Exploring Macros
    • Creating Our Own Macros
    • Using Templating to Create Macros

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

昨日は風邪ひいて寝まくった。今日はやるぞ。やった。

Done:

  • ブラウザ
    • Material Design Lite導入失敗。
      • スクロールが効かなくなる
    • 現在あるべき位置をsubscribe()に飛ばしてそこでスクロールする
    • 初期表示&スクロールのときだけ遅延させる
    • react-keydown導入失敗。
    • スムーススクロール関数の修正
    • hjklで移動(要素の有無を見てない)
    • 現在位置取得関数のクロスブラウザ互換性のための修正
    • power_assert_exを0.0.8にアップデート

Todo:

  • ブラウザ
    • ツリー全体を展開する
    • 上下移動(要素の有無を見る)
      • 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
    • タブ
      • システムメニュー
        • サインイン/サインアウト
      • ユーザーメニュー
        • アクティビティ
          • ユーザー/グループ...
    • オフライン対応
      • すごく欲しいがやらない
      • 当初想定より簡単にできるかも
  • サーバ
    • 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

Clojureを勉強している10

  • Making HTTP Calls with ClojureScript and cljs-http
    • cljs-httpライブラリはclojurescriptでHTTPを扱うライブラリと。
    • core.asyncと組み合わせて使うととってもいい感じ?(英語を雰囲気で読んでいるのでご勘弁)
    • :require-macrosとかいう新しいのが出てきた。なになに、マクロはClojureScriptじゃなくClojureで書かれているのでこの特別なキーワードを使って参照する、と。
    • ブラウザ側から非同期でjsonをgetして表示するというのをやった。
  • DOM Control with ClojureScript and Enfocus
    • 次はEnfocusってライブラリを使う。DOMを扱うらしい。jQueryみたいなもんだろうか。
    • at関数で指定した要素の中の書き換えができるっぽい
    • 無事に書き換えられた。パチパチパチパチ👏
    • do->`で複数の変更を同時にできる。よい。
  • Event Handling with Enfocus
    • enfocusはlistenでイベントに関数を登録できる
    • enfocus.eventsをrequireしてatlisten関数を渡す。ふむ。できた。
    • ほう!enfocusはアニメーションまで付いてるのか
    • アニメーションを使うにはenfocus.effectsネームスペースをrequireする
    • fade-outで無事にフェードアウトできた
  • Summary of Our Clojure and ClojureScript Web Application
    • 今までやったことのまとめ。
    • まず、Compojureを使って作ったウェブサーバーを起動させた。
    • んで、シンプルなhtml textを返すルートを追加した。
    • CheshireというJSONライブラリの使い方を学び、JSONレスポンスを返すエンドポイントを作った。
    • 次に、RingミドルウェアJSONライブラリであるring-jsonを使って、自動的にJSONが返るようにした
    • ClojureScriptフロントエンドを追加し、cljsbuildを使って設定する方法を学んだ
    • んで、cljs-httpを使ってClojureScriptでデータを取得した
    • 最後に、Enfocusライブラリを使って、DOMを更新し、ボタンにイベントを登録し、フェードアウトするアニメーションを加えた
  • Other Useful Web Development Libraries
    • Hiccupというテンプレートライブラリがあると。コード見た感じHamlとかSlim相当だな。
    • Enliveってのもあると。こっちは静的なファイルにEnfocusみたいに変更を加えるのか。う〜ん、自分の好みはHiccup、デザイナーと協業ならEnliveみたいな感じかな?
    • Liberatorっていうコンテンツ・ネゴシエーション・ライブラリ。クライアントの要求するメディアタイプ毎の場合分けに。
    • Liberatorはlast modified timeやetagsも扱うのか。このまま扱うのは細か過ぎるが、フレームワークには同様の機能が載っていて欲しいかんじだな。
    • TransitってJSONを扱うライブラリは小さくて速いのか。う〜ん、JavaのByteArrayInputStream/ByteArrayOutputStreamなんかが露出しているなぁ。必要があれば。
    • Om。あ、これReactのインターフェースライブラリだったのか。vdomを再発明したものかと思ってた。
    • Hoplonってのがどうもフルスタックなウェブ・アプリケーション・フレームワークっぽい。ホビロンっぽい。
    • Luminusってのもある。こっちはマイクロ・フレームワークって書いてあるな。
    • データベース関連は、java.jdbcがローレベル、KormaSQL抽象化、YesqlSQLライブラリ。
    • あと、Datomicってイミュータブル・データベースがあるらしい。イミュータブル・データベースってよくわからんな。初めて聞く。
    • 第7章おわり。明日は第8章、マクロの話。

Living Clojure

Living Clojure

  • Chapter 7 Creating Web Applications with Clojure
    • Making HTTP Calls with ClojureScript and cljs-http
    • DOM Control with ClojureScript and Enfocus
    • Event Handling with Enfocus
    • Summary of Our Clojure and ClojureScript Web Application
    • Other Useful Web Development Libraries