PhoenixのテンプレートではMap |> Enum.eachでイテレートを回した中身が表示されない
ERBと同じように書こうとしたら詰まったのでメモ。
簡単な例で書いてみる。
Ruby
@grouped_users = User.all.group_by(&:group)
とcontrollerで定義しておくと、erbだと以下のようにループを回せる。
<% @grouped_users.each do |group, users| %> <!-- 何か処理 --> <% users.each do |user| %> <!-- 何か処理 --> <% end %> <% end %>
Elixir
NG
@grouped_users = User |> Repo.all |> Enum.group_by(&(&1.group))
<%= @grouped_users |> Enum.each(fn(group, users) -> %> <!-- 何か処理 --> <%= for user <- users do %> <!-- 何か処理 --> <% end %> <%= end) %>
こう書いても、テンプレート上では ok
としか出ない。 Enum.each
の返り値を表示しようとしているのでこうなっているのだと思われる。
OK
@grouped_users = User |> Repo.all |> Enum.group_by(&(&1.group)) |> Enum.map(fn {key, value} -> {key, value} end)
<%= for {group, users} <- @grouped_users do %> <!-- 何か処理 --> <%= for user <- users do %> <!-- 何か処理 --> <% end %> <% end %>
一度keyword listに変換してあげて、for文で回せば問題なく表示される。
Mac OSXで立ち上げたVagrant内で、dockerのcontainerを立ち上げる時の小技
課題
$ docker run -p 8080:80 --name some_container -it some_env:latest /bin/bash
このように記述すると、containerを立ち上げた後に、開発用のユーザアカウントを用意してSSH接続する想定の場合は、sshdの起動の設定をする必要がある。
2回目以降の起動時に、このcontainerを docker start
しようとすると、特定のユーザのアカウントでMac -> vagrant -> dockerとSSH接続するときに不便。
解決策
monit
というツールを利用すると、docker start時にsshdを自動で立ち上がるようにすることができる。
Dockerでは、内部で動かせるサービスは1つだけなので、 docker run [options] /bin/bash
と指定すると起動時にbashしか立ち上げることが出来ない。
monit
は、本来様々なサービスやプロセスの死活監視に利用されているが、 docker
から動かすサービスに指定すると各サービスを動かすためのコンテナとして利用することが出来る。
なお、今回使うconatinerは ubuntu/trusty64
を前提として話を進める。
事前準備
monitのインストール
/bin/bashを起動プロセスに指定したsome_container内で、以下を実行してmonitをインストールする。
[docker] $ sudo apt-get install monit
confの設定
monitインストール後のデフォルトの状態では、監視したいサービスの設定は /etc/monit/conf.d/
配下を読み込むようになっている。
このため、以下の内容でconfファイルを追加する。
[docker] $ sudo emacs /etc/monit/conf.d/sshd.conf --- check process sshd with pidfile /var/run/sshd.pid start program = "/etc/init.d/ssh start" stop program = "/etc/init.d/ssh stop"
ここまでの内容をsome_envにcommit
一旦dockerから抜けて、以下をVagrant内で実行する。
[vagrant] $ docker stop some_container $ docker commit some_container some_env
containerの立ち上げ
ここまで事前準備が終わったら、一度some_containerを捨てて、起動プロセスにmonit
を指定して docker run
でcontainerを立ち上げ直す。
-I
オプションを付けておかないとバックグラウンドで monit
が立ち上がり、docker上でフォアグラウンドで起動しているタスクがなくなってしまうため起動後即終了してしまう点に注意。
[vagrant] $ docker rm some_container $ docker run -p 8081:80 --name some_container -it some_env:latest /usr/bin/monit -I -c /etc/monit/monitrc
containerの終了
Mac OSXの電源を落とすときに、このcontainerを落としておかないと、次回以降同じcontainerを立ち上げ直すことができなくなる。
これはvagrant上で docker stop some_container
を行わずに電源が落ちると、monitのPIDが残るらしく、以下の様なエラーが出ることがあることが原因の模様。
monit daemon with PID 1 awakened
これを避けるには、Mac OSXの電源を落とすときに必ず docker stop some_container
を行うようにすると良い。
ただ毎度手動でやるのは手間であるのと忘れることもあるため、以下で自動化すると楽なのでお勧め。
/Library/StartupItems/配下に自動起動するデーモンを追加する
必要なのは以下の2つのファイル。
- /Library/StartupItems/SomeDaemon/SomeDaemon : スクリプト本体
- /Library/StartupItems/SomeDaemon/StartupParameters.plist : スクリプトに関する説明を記述するためのplistファイル
追加方法は以下を参考にすると良さそう。
決算書を読む上で役に立つ13のポイント
最近、会社の先輩から決算書を読む上で役に立つ本を貸していただいた。
ビジネススクールで身につける会計力と戦略思考力―ポケットMBA〈4〉 (日経ビジネス人文庫)
- 作者: 大津広一
- 出版社/メーカー: 日本経済新聞出版社
- 発売日: 2007/08
- メディア: 文庫
- 購入: 8人 クリック: 53回
- この商品を含むブログ (8件) を見る
この中で、決算書を読む上で役に立つ13のポイントがとても良くまとまってよかったので自分の整理用にまとめておく。
損益計算書
賃借対照表
(5) 現金は多いか?
- 資産の部 - 実質的な現金として扱うのは、現金及び預金・有価証券・短期貸付金・投資有価証券の合計額
(6) 売掛の回収は早いか?
(7) 在庫の量は多いか?
- 資産の部 - 流動資産のうち、商品・製品・原材料・仕掛品・貯蔵品の売上に占める割合
- 2.5%であれば、1年で比較すると9日分の売上相当の在庫
(8) 設備の規模は膨大か?
- 資産の部 - 有形固定資産の売上に対する割合
(9) 株式や債券の保有は多いか?
- 資産の部 - 固定資産のうち、投資有価証券の資産合計に対する割合
(10) 買掛の支払いは早いか?
- 買掛 : 物は買ったけどお金を払ってない
- 負債の部 - 内償還の社債の、売上に対する割合
- 10%であれば、1年で比較すると36.5日分の売上相当の買掛金
(11) 借金は多いか?
(12) 資本金は多いか?
- 純資産の部 - 資本金の、利益剰余金に対する割合
(13) 利益剰余金は多いか?
- 純資産の部 - 利益剰余金の、負債・純資産合計に対する割合
最近のジムトレーニングメニュー(2016年1月版)
最近はもっぱらランニングと筋トレ。だいたい以下の順番にこなす。
ランニング
◯立ち漕ぎのエアロバイク
全力で漕ぐ。大体ケイデンス(1分間あたりの回転数)90から100前後、負荷かけるときは110まで上げる。時間はだいたい25~30分くらい、マシンのデフォルト時間制限ギリギリいっぱいまで。普通にロードバイク乗るときは80くらいで回すのが基本だからそれよりはやや激し目。 しばらく前まではトレッドミル(普通のランニングマシン)を30分位ゆっくり走ってたけどそれよりマシンで表示される消費カロリーが高いから最近はエアロバイク中心でやっている。
音楽聴きながらだと大体一瞬で終わる。
筋トレ
以下を、マシンが開いている順番に順不同。
◯腹筋
20回1セット、垂直に上下するセットと斜め方向にひねりを入れるセットを交互にこなして5セットやる。捻りを入れるのは腹回りを絞るため。
◯ダンベル上げ
10kgのダンベルを持って体の横方向に腕を上げるのを10回1セット 10kgのダンベルを持って体の垂直方向に腕を上げるのを10回1セット 8kgのダンベルを持って腕をL字に曲げた状態からまっすぐ上に上げるのを10回1セット
これを左右両方で30回ずつ行う。
◯レッグプレス片足
これを一番時間かけてやっている。ロードバイクで坂耐性を上げるため。最近だと片足50kgくらい。15回1セットで3~4セット。 片足60kgも一度試したけど膝壊しそうだったから今はやってない。
◯上半身捻り
名前良くわからないけど座った状態で上半身を捻るマシンで時計回りと反時計回り合わせて150回くらい。
◯ロウアーバック?(背筋)
正面方向で15回1セットとして2~3セット 体を横に傾けた状態で10回1セットとして2~3セット
そんな感じ。これでだいたい順調に回せるとランニングと筋トレ合わせて1時間ちょっと。 そこからシャワー浴びて着替えて帰ってくると、家を出発してから大体1時間40分位で戻ってこれる。