Elixir/Phoenixでウェブサービスを作っている20
Done:
- ブラウザ
- ゴールツリー全体をセンタリング
- 現在のゴールが中心になるようにスクロール
- スクロールのイージング
- power_assert_exのバグが直ったので再び採用
Todo:
- ブラウザ
- 現在あるべき位置をsubscribe()に飛ばしてそこでスクロールする
- ツリー全体を展開する
- 上下移動
- 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)
- 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:
- CSS3 flex
- JSONPath
- JavaScript用: s3u/JSONPath
- こっちは多分要る
- Erlang用: GeneStevens/jsonpath
- こっちはいらないと思うが、1つのゴールを返すとき先祖も付けて返す必要ありそう
- JavaScript用: s3u/JSONPath
- jsでスムーススクロールする方法
- jsでマウスホイールイベントを取得する方法
Programming Phoenix: Productive; Reliable; Fast
- 作者: Chris Mccord,Bruce Tate,Jose Valim
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2016/04/11
- メディア: ペーパーバック
- この商品を含むブログを見る
Clojureを勉強している9
7章の続き。
- Using Clojure in Your Browser with ClojureScript
- ClojureScriptだっ!
- project.cljのdependenciesに
org.clojure/clojurescript
を加え、pluginsにlein-cljsbuild
を加え、cljsbuildの設定を書く、と。 lein trampoline cljsbuild repl-rhino
でclojurescriptをREPLで試すことができる。- clojurescriptライブラリはGoogleなのに、JSエンジンはv8じゃなくてrhinoなんや……
js/
を頭につけてJSの関数を実行できる。- clojure.coreは動く感じだな。classとかはアカン
- atomはあるけど、agentやrefがない
- 数値はintegerとfloatだけサポート
- 充分やな。本の中のものよりバージョン上がってるからいくらかサポートされてたりして。
^:export
がexport default function
みたいなもんかなと思ったけど違うっぽい。Google Clojure compilerがminifyで関数名を短縮しないようにだって。lein cljsbuild auto
で監視コンパイル。:optimizations :whitespace
を:optimazations :whitespace
とtypoしてたせいで動かなくて「アレッ?アレッ?」って言ってた。
Browser-Connected REPL
- なんだこの節タイトルは。ブラウザで動いているClojureScript(JS)を動かせるというのか。やべぇな。
- cljsファイルで
clojure.browser.repl
をrequireして、(repl/connect "http://localhost:9000/repl)"
しておく。 lein trampoline cljsbuild repl-listen
するとつなげる。js/alert
したらダイアログが出るなぁ。すごい。
Chapter 7 Creating Web Applications with Clojure
- Using Clojure in Your Browser with ClojureScript
- Browser-Connected REPL
- 作者: Carin Meier
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2015/04/30
- メディア: ペーパーバック
- この商品を含むブログを見る
Elixir/Phoenixでウェブサービスを作っている19
寝てて更新が遅れた。今日は深夜大寒波で足が寒くてプログラミングやってらんなかったのと、Clojureの勉強の方でVimの設定にハマったので、些少な進捗しか出せなかった。明日は頑張る。
Done:
- ブラウザ
- 開いてないゴールを
display: none
するようにした
- 開いてないゴールを
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)
- 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:
- CSS3 flex
- JSONPath
- JavaScript用: s3u/JSONPath
- こっちは多分要る
- Erlang用: GeneStevens/jsonpath
- こっちはいらないと思うが、1つのゴールを返すとき先祖も付けて返す必要ありそう
- JavaScript用: s3u/JSONPath
- jsでスムーススクロールする方法
- jsでマウスホイールイベントを取得する方法
Programming Phoenix: Productive; Reliable; Fast
- 作者: Chris Mccord,Bruce Tate,Jose Valim
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2016/04/11
- メディア: ペーパーバック
- この商品を含むブログを見る
Clojureを勉強している8
- Creating a Web Server with Compojure
- 第7章はウェブアプリを作るということなので楽しみでござる
- おっ、ClojureScriptも書くらしい。
- Compojureというライブラリを使うらしい。
- CompojureはRingというローレベル・ウェブアプリケーション・ライブラリにシンプルなルーティングを提供するものらしい。RingがRubyのSinatra相当なのかな?
- サンプル・アプリケーション名はcheshire-cat。いちいち書かなかったけどこの本のサンプルは全て不思議の国のアリスの筋書きに則っている。
- Clojure+ClojureScriptって綺麗な組み合わせだよなぁ。JavaScriptで全部書ける次に良い。あとこんなに統一できるのはScala+Scala.jsぐらいか?
- プロジェクトのスケルトン作るのに、
lein new compojure cheshire-cat
しろって書かれてるんだけど、compojureいつダウンロードしたの?leiningenに組み込みなの???どゆこと? - Clojure、謎が多くて、前の章ではcore.asyncってライブラリ使ったんだけど、ダウンロードするコマンドなどは一切打った覚えがなく動いていて、便利と同時になんか表示して欲しい感じがする(自動でCLASSPATHを設定するVimプラグインのせいか?)
- 実行したら、Retrieving compojure/lein-template/0.4.3/lein-template-0.4.3.{pom|jar} from clojars、みたいなメッセージ出た。
- 自分で生成したプロジェクトのREADME.mdを読む。ほうほう、lein ring server でサーバが起動するのか。
- lein ring server したらすごい勢いでダウンロードしだしたw apacheとかjettyとか言う文字列が見えてビビる。マジで?
- そしてブラウザが自動で開いた。Omakaseだ。
- Clojure/Ring/Compojureの使うポートは3000で、今Railsプロジェクトやってなくて良かったという思い。いやポート番号ぐらい指定できるだろうけど。(ちなみにPhoenixは4000)
- まぁ例えだから正確じゃないのでどうでもいいんだが、RingがRack、CompojureがSinatra相当っぽい。
- 自動生成されるRing middlewareのsite-defaultsのオプションが見たければ、https://github.com/ring-clojure/ring-defaults を見よとのこと。はい。
- Compojure、ルート追加してもサーバ再起動しなくていいのスゴイな。楽。
- Using JSON with the Cheshire Library and Ring
- サンプルプロジェクト名がcheshire-catなんだけど、この中でCheshireというJSONを扱うライブラリを使うのでややこしい
- lein ring server-headlessするとnot open a new windowだよって書いてあったので実行してみたら、ブラウザのウィンドウが開かないということだった。てっきりターミナルのウィンドウの1つを専有しないって意味かと思ってた。
- leinと打つたびにleiningenさんのゴーストがささやいてツラい
- Cheshireは
generate-string
がClojureデータ構造からJSONにエンコード、parse-string
がデコード。ふむ。 - ただし、
parse-string
の第2引数にtrue
を与えると、キーがキーワードになる、と。 app-routes
ではレスポンスに:status, :headers, :bodyを含んだマップを返すことができると。- Cheshire使ってJSONエンコードしてたのにRing-JSON入れれば自動的にbodyのClojureデータ構造をJSONに変換してくれるから要らない取り換えと言い出したぞ
- Cheshireからring-json&ring.util.responseに替えたらoctet-streamを返すようになって、
(ring.util.response/response res "application/json; charset=utf-8")
する必要があった
この辺で時間切れでギブアップ。というか、tpope/vim-fireplaceがクソ重かったので消したり、kien/rainbow_parentheses.vimがうまく動かなくてluochen1990/rainbowに入れ替えたりしてて時間かかった。
つづく
- Chapter 7 Creating Web Applications with Clojure
- Creating a Web Server with Compojure
- Using JSON with the Cheshire Library and Ring
- 作者: Carin Meier
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2015/04/30
- メディア: ペーパーバック
- この商品を含むブログを見る
Elixir/Phoenixでウェブサービスを作っている18
Done:
- ブラウザ
- jsでスムーススクロールする方法の調査
- jsでマウスホイールイベントを取得する方法の調査
- HTMLの構造をカラムからツリーに変更
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)
- 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:
- CSS3 flex
- JSONPath
- JavaScript用: s3u/JSONPath
- こっちは多分要る
- Erlang用: GeneStevens/jsonpath
- こっちはいらないと思うが、1つのゴールを返すとき先祖も付けて返す必要ありそう
- JavaScript用: s3u/JSONPath
Programming Phoenix: Productive; Reliable; Fast
- 作者: Chris Mccord,Bruce Tate,Jose Valim
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2016/04/11
- メディア: ペーパーバック
- この商品を含むブログを見る
Clojureを勉強している7
ns
関数の引数に(gen-class)
を入れないとREPLが立ち上がったときに環境を読んでくれないのでハマった。
- Basics of core.async Channels
- Serving Tea at a core.async Tea Party
Creating a Tea Party to Be Run from the Command Line
- おお、jar作るのか。起動が速くなるのかな?
project.clj
に(:aot project-name.core)
オプションを足すだけ。lein uberjar
で作成!target
ディレクトリにjarが出来上がっている-standalone.jar
はClojureクラスも全部入り。もう一個の方は自分と(この例では)core.async
のみ入っているjar。java -jar project-name-0.1.0-SNAPSHOT-standalone.jar
で実行!- やっぱり立ち上がりが遅かった。
Chapter 6 Communication with core.async
- Basics of core.async Channels
- Serving Tea at a core.async Tea Party
- Creating a Tea Party to Be Run from the Command Line
- 作者: Carin Meier
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2015/04/30
- メディア: ペーパーバック
- この商品を含むブログを見る
Elixir/Phoenixでウェブサービスを作っている17
今日は出だしが遅かったので進捗が少ない(しかし、コミット数は多め)。
Done:
- ブラウザ
- Component分割
- CSS3でリストのツリーをカラム表示に変換できるか調査
- 実験中……
- 先祖を詰めるのが難しい
- 実験中……
- JSONPathが必要?
- JavaScript用: s3u/JSONPath
- こっちは多分要る
- Erlang用: GeneStevens/jsonpath
- こっちはいらないと思うが、1つのゴールを返すとき先祖も付けて返す必要ありそう
- JavaScript用: s3u/JSONPath
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)
- 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と再帰クエリでどっちが速いか調べる
Programming Phoenix: Productive; Reliable; Fast
- 作者: Chris Mccord,Bruce Tate,Jose Valim
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2016/04/11
- メディア: ペーパーバック
- この商品を含むブログを見る