ぽかぽかウンティの自由帳

ぽかぽか動物園から投稿します。

How we can join multiple tables, aggregate multiple columns, and sort by its aggregated columns on the Rails ActiveRecord?

RailsActiveRecord で複数テーブルを結合して複数カラムで集計して、その集計結果でソートしたい場合のレールの乗り方がわからなかったので色々と試した結果、疲れた。

例えば以下みたいな普通の SQLActiveRecord::Relation で組み立てて、かつ ActiveRecord::Base を継承したモデルや便利な Gem のインターフェースを使う場合の話。

/* student has many scores */
SELECT
  students.*,
  AVG(scores.math) AS avg_math_score,
  AVG(scores.english) AS avg_english_score
FROM
  students
    INNER JOIN scores
      ON students.id = scores.student_id
WHERE
  students.id IN (1, 2, 3)
GROUP BY
  students.id
ORDER BY
  avg_math_score DESC

github.com
github.com

結論から言うと eager_load や preload や includes などの Association cache 機構には頼れなかった。そして Association での Draper gem の利用を諦めた。

Students
  .select(students.*)
  .select('AVG(scores.math) AS avg_math_score')
  .select('AVG(scores.english) AS avg_english_score')
  .joins('LEFT OUTER JOIN scores ON students.id = scores.student_id')
  .group('students.id')
  .order('avg_math_score DESC')

で Student モデルに avg_math_score や avg_english_score のメソッドが生えた形で結果配列を取得できるようになる。Kaminari Gem のページネーションはそのまま使える。しかし N+1 クエリを防ぐためには Association での Draper Gem は諦めざるを得なかった。

Rails5 だと left_joins というクエリインターフェースが追加されているみたいなので、バージョン上げたら試してみようと思う。

qiita.com

includes は内部で条件に応じて eager_load や preload の挙動となる。

qiita.com

preload は絞り込み条件が付くとエラーになるので今回の要件ではそもそも使えない。

eager_load だと内部で t0_r0 みたいに列名を管理してモデルオブジェクトをキャッシュしているみたいで、その過程で独自に select で追加した集計結果列が捨てられてしまっていた。さらに内部で意図しない壊れたカウントクエリが発行されてしまいエラーになった。

前提として arel とかは個人的には手を出したくない。もっといい方法がないか引き続き探ってみたい。

紅蓮の弓矢号(笑)の値上げ

無理して毎日ネオサイタマからトーキョに通勤して働く人たちに追い打ちをかけるかのごとく、西武線の特急料金が値上げする。

f:id:proxy0721:20160616194809j:plain

しばらくこのタリフの見方がわからなかったのはここだけの話。

それはそうと2018年にレッドアロー号の新型が出るらしいが、社畜を守る甲鉄城のごとく今後も走り続けて欲しいと思う。

tetsudo-shimbun.com

しかし池袋までなので、そこから先は山手線で結局カバネになってしまう。

進撃の巨人とのコラボはCAが絡んでいたのか。知らなかった。

www.cyberagent.co.jp

会社とのリモートワークの交渉が難航している

どうオブラートに包んでもネガティブな理由しかない。

  • 満員電車が嫌、満員でなくても日々往復3時間が通勤に取られるのが嫌
  • オフィス環境の劣化、集中できない、暑い、うるさい、狭い、椅子格差など

だから「いやチームとしてのパフォーマンスを先に考えて欲しい」って言われると何も言い返せない。

そして引き続き自分の 3h/1d が通勤で消費されることがほぼ確定している。

正直転職も視野に入れてはいるが、果たしてどうなることやら。

労務担当者や上長、他チームのエンジニアに聞いて思ったことは、職種によってリモートワークに対する温度感が違い過ぎるという点。

エンジニアは皆「あーできたらいいね。別にネットが繋がればどこでもできるし。必要なときだけ会社来ればいいし。」

非エンジニアは "Hmm..."

何のために Atlassian 製品使ってるんだろうね。

やっぱ非エンジニアにはエンジニアが何をやってるのか見えてないんかな。

というか信用されていない感がハンパなくて泣けてくる。

もう6年近く勤めているのにな。

転職かなー。

I've got Aeron and Embody chairs.

These are here! Herman Miller is coolest company!

f:id:proxy0721:20160522092950j:plain
f:id:proxy0721:20160602231514j:plain

有給で連休を繋げたけど相変わらず有意義に過ごさなかった

普通の人なら実家に帰ったり旅行に行ったり修行したりするんだろうけど、今回もそんなイベントは発生せずに終わりそうだ。創造はせずに消費して終わる。あんなにあった休日があと2日なんて信じられない。毎回こんな不毛な精神の波を経験したくはないから早く会社でリモートワークができるようになってほしい。プログラマこそリモートワークで生産性を上げるべき職種だと思う。DHH 氏の本に触発されただけだけど。

ペット(犬)の肛門嚢炎の経過観察で通院

犬には(少なくとも犬には)肛門の近くに肛門嚢という器官があり、匂い腺とも呼ばれるそれに菌が入って破裂した。

www.iris-pet.com

発症は連休前。最初元気がないしウンコも調子悪そうで様子見てたけど尻から血が出てきてヤバ気になって午前休取って動物病院へ。尻毛をカットして患部を見せてもらったら肛門が2つになったみたいに穴ができていた。

ものすごく痛いとのことで初日に鎮痛剤と抗生物質の注射を打ち、翌日洗浄してその後は粉の飲み薬で2週間ほど治療し続け、今ではかさぶた化して良好。ただし再発リスクがあるから尻は清潔に。

しかしなんでこんな位置に匂い腺があるのか。設計ミスな気もする。そして犬が他の犬の尻の匂いを嗅ぐときはこいつを嗅いでいたのか。

医者が肛門の両サイド下側を摘んで絞ると、歯磨き粉チューブみたいににゅーってペースト状のものが出てきた。1,2ヶ月に1度はこうやって匂い腺を絞ってあげると良いとのこと。面白そうだが自分でできる自信がない。

たまっていた録画の消化および視聴番組の選定

最近開始3分で取捨選択判断ができないアニメが増えた。手に汗握るガチ攻め系作品だけだと脳が疲れるから、適度にまんがきららタイムを混ぜるようにしている。そのまんがきららタイム枠も増えてきている気がする。

anne-happy.com

sansyasanyou.com

まんがきららタイム以外の作品も脱力具合が良さ気。

kmmk.tv

www.flyingwitch.jp

ベロシティは30分番組で 30本/week なので最近はトリアージが大変だ。

Aniwatch

穴の空いた服とファスナーが壊れたバッグを捨てて私服通勤用装備の調達

ズボンはかなり前から股下に穴が空いていた。当時は体脂肪30%で太っていたからだ。脂肪で擦れるからだ。

私服通勤で毎日服選びにCPU使いたくない(オバマ大統領みたいなこと言うけど)からズボン固定でポロシャツローテーションが基本。

ユニクロのポロシャツバリエーションは素晴らしい。平日ローテーション用に紺系のを5着買った。

www.uniqlo.com

バッグも毎回すぐ壊れて嫌気がさしてきたから​「森​野​帆​布」とかいう海軍御用達?の頑丈そうな2万円のリュックタイプを購入。ショルダーストラップがまんまシートベルトだ。

item.rakuten.co.jp

大塚家具新宿ショールームの B1F の SOHO museum でエンボディチェアを購入

f:id:proxy0721:20160507012159j:plain

自室が広くなって机も2つになって、片方はテレビやゲーム用、もう片方は自宅作業用にした。椅子はアーロンチェアと安い事務椅子があり、アーロンチェアをテレビとゲーム用にした。しかしやはり安い事務椅子で自宅作業すると尻が痛いので、もう一台ハーマンミラー椅子が欲しくなった。

同じのだとつまんないけどやっぱアーロンチェアが最強だしどうしようかなと悩んでいたところ、大塚家具の新宿ショールームにはすべてが展示してあるとのことで、面倒だったが遠出して座り比べしてきた。

ryutsuu.biz

結果、エンボディチェアに即決した。Amazon で買うと20万円超えるけど、大塚家具だとポイント2倍期間もあって16万円で買えた。素晴らしい。エンボディチェアをテレビゲーム用にしてアーロンチェアを自宅作業用にすると決めた。

www.hermanmiller.co.jp

ハーマンミラー社オフィスチェア最強の椅子だけあってアーロンチェアとは違った座り心地で、アーロンチェア以上に色々と調節できる部分が多くてビックリした。前傾姿勢はできないけどアーロンチェアでも前傾機構使ったことないし、そんなことはどうでも良かった。

在庫がなかったから22日に届く。待ち遠しい。いい買い物をした。次はマットレスに投資したい。

ぶら下がり健康器を購入

www.amazon.co.jp

これを買って試しに懸垂をやってみたが1回しかできなかった。懸垂用じゃないので背筋用のフォームは厳しいとのこと。腕だけでも10回くらいできるようになりたいので地道にやっていく。

ちゃんとした懸垂用のマシンよりは省スペースで軽くて手頃な価格ではあるが、やはり本格的な懸垂をやるには適していないっぽい。ってか庶民はジムに行けと友達に言われた。


チンニングで背中に効くフォームを作る効果的な練習法

ハンコンの大人の事情に落胆

ついに Xbox OneForza Motorsport 6 を購入した。

www.xbox.com

PS3グランツーリスモ6よりグラも綺麗で音も良く、ゲームとしての楽しさも圧倒的だった。しかしグランツーリスモ6用に買った Logicool G27 が動かない。ホイールスタンドも買ったのに...

www.4gamer.net

対応機種を増やすためにはプラットフォームごとのライセンスチップを実装する必要があるが、1台のシステムに複数のプラットフォームのチップを実装することはメーカーが許可してくれない。PCと兼用にできるのはライセンスチップが必要ないからだ。

G29 や G920 を買う余裕はないので泣きながらゲームパッドで遊んでいる。ゲームパッドでも楽しめるけど、やっぱレースゲーとしては UX が半減すると言わざるを得ない。ってか G920 は Xbox が売れない日本では発売しないとか残念過ぎる。

gaming.logitech.com

gaming.logitech.com

今後 PS4 で発売されるグランツーリスモシリーズも遊べなくなるので G27 とホイールスタンドは早速納戸行きである。非常に悲しい。

グランツーリスモSPORT - PRODUCTS - グランツーリスモ・ドットコム

炭水化物カットのこうかはばつぐんだ。10日で6kg痩せた。

f:id:proxy0721:20160118181442p:plain

昨年10月頃の健康診断で、肝臓が入院の一歩手前判定が出て精密検査してくれと言われ、困って会社の産業医に相談した。

身内に肝臓の病気を抱えている者がおらず、過去にウィルス性疾患にかかったこともないことを告げるとソッコーで「肥満が原因」と診断された。

過去の健康診断結果も持参して見てもらい、5年で5kg太っていることを指摘された。脂肪肝というやつか... 血中脂肪値も桁が1つ増えるレベルでオーバーしていた。

そこで炭水化物、糖質をカットしましょうとアドバイスをもらい、以下の食生活シフトを実行した。

【今までの食生活】

  • 果汁100%ジュースを好んで飲む
  • ヨーグルトとヤクルトを好んで飲む
  • 牛乳を好んで飲む
  • ごはんやパンをたくさん食べる
  • 休日に飯がないと冷凍のパスタを好んで食べる
  • 筋トレしていないのにプロテインを飲む
  • 昼は会社内で販売している米だらけの安い弁当(500円くらい)
  • 栄養成分表示などは一切気にしないで食べる(ちなみに冷凍パスタ1袋で炭水化物70gを余裕で超える)

【見直した食生活】

  • 飲み物は麦茶だけ
  • 主食は摂らないでおかずだけ
  • そのかわり満たされるまで肉と魚を食べまくる
  • 週一でレバーを食べる
  • 夜は納豆、もずく、めかぶ、チーズくらいで済ます
  • 基本的にセブンイレブンに依存(1回1300円くらい)
  • 常に裏面の栄養成分をチェックし、1日の炭水化物量を70g以下に抑える

そしたら痩せた。具体的には内蔵脂肪が笑えるスピードで減っていった。寝たら500gずつ体重が減った。

今まで体重は健康診断でしか計測してなかったが、この度オムロンの自動でデータ送信してグラフ化できるやつを購入して毎朝計測する習慣を付けた。

標準体重が66kgで、自分は標準より骨肉量が少なめだから、これからは筋肉比率を上げていかないといけない。

ダイエットって空腹を我慢したり辛い運動を継続させないといけなかったり、リバウンドが怖かったりするイメージが強かったけど、
この炭水化物カットの手法はかなり楽ちんに減らすことができる。

運動は週一の長友先生の体幹トレーニングだけ。それすらやらなくても痩せただろう。

長友佑都体幹トレーニング20

長友佑都体幹トレーニング20

ただ、痩せるのはマイナスがゼロになっただけなので、40歳を見据えて今のうちから良質な筋肉を育てていかないといけない。

産業医が言っていたが、30代は食生活でなんとかなる。しかし40代はそうはいかない。筋肉があきらかに劣化するらしい。

炭水化物カットは医学界でも効果が最も期待できる手法らしい。

糖を摂らないので脳に栄養がいかないのでは?と最初は懸念したが、そもそも現代社会の食品で炭水化物がまったくない食品はほとんどない。

例えば唐揚げの衣にも十分含まれている。

アスリートや学生、ガテン系の人みたいに大量のエネルギーを消費する人でない限り、ただのデスクワークの大人には現代社会の食生活は糖質が多過ぎるのである。

清涼飲料水と名の付いた砂糖水たち、これらを厚生省が何かしらの規制でもすれば、日本の医療費は大幅に減らせる可能性があるのかもしれない。

5ヶ月ぶりにプールに入って死にそうになったけどオリンピックのメダルを触れた

kitajimaquatics の北島康介選手の交流会に参加した。通常は年末に実施されるが、2015年度分はリオリンピックに向けての活動のため今日にリスケされた。

護国寺駅にある日大豊山にて、最初は教室で新人インストラクターの紹介や、北島康介選手への質疑応答が行われ、その後に11階の無塩素プールでスイムセッションした。

2015年の夏くらいに参加した辰巳の長水路マスターズ大会以来の入水で、ウォーミングアップで脈拍が最高を迎えたまま1時間で1500mくらい泳いだ。

教室内で北島選手が持ってきたメダルが回されてきたので写真を撮っておいた。まさかパンピーが触れる機会が来るとは...

水の感覚やスカーリングの肘、腰の位置などが思いっきりデグレードしたので2016年は練習を再開したいと思う。

アテネ
f:id:proxy0721:20160110130055j:plain
f:id:proxy0721:20160110130106j:plain

北京
f:id:proxy0721:20160110130647j:plain
f:id:proxy0721:20160110130701j:plain

ロンドン
f:id:proxy0721:20160110130722j:plain
f:id:proxy0721:20160110130732j:plain

俺の顔でけぇ(笑)
f:id:proxy0721:20160113001751j:plain