モーダルの分類とユーザに与える影響。
Pluckのあるクエリでexplainをどうやって出力するか
idが1000より大きいユーザの地域一覧を取りたかった
User.distinct.where('id > 1000').pluck(:city)
というコードを書いて、「distinct意味ないじゃん」みたいなことを言われた
実はクエリの遅延評価によってpluckまでクエリに含まれるのだが、それを以下のコードを見せて証明しようとした
User.distinct.where('id > 1000').pluck(:city).explain
エラーが起きた。そりゃそうだ、pluckが返すのはArrayで、 Array#explain
はないのだから
これうまくやりたい。pluckしたあとでもexplainでクエリ見たい
解1
pluckはクエリを発行するが、explainに必要な情報は Activerecord#Relation
? 特殊変数に入れておく。で、explainで使う
解2
pluck_explain(:city)
というメソッドを生やす
解2はハックしてる感がないので1点。
心の科学と脳の科学の関係に関する考察
2012年に書いたレポートを発掘したので公表する。論文と呼ぶには体裁が整ってない上に、チェックもろくにしてないけどそのまま載っけることにする。
高校生のころ考えてたことをまとめて授業のレポートで提出したもの。
BigQueryで相関サブクエリがうまく動かなかった話
相関サブクエリ自体よくないやり方ではあるけれど、それを使ってみたらわかりにくい挙動をしていた
例えばこんな感じのクエリ
SELECT ( SELECT 1 FROM rdb.users WHERE users.total_pay < payments.pay ) FROM rdb.payments
payments.payに応じてusersを絞り込んでごねごねしたくて書くと、
invalidQuery: LEFT OUTER JOIN cannot be used without a condition that is an equality of fields from both sides of the join.
というエラーがでる
どうも、BigQueryでは効率をあげるために、サブクエリはJOINに変換されるらしく、相関サブクエリ内のWHEREが不等号だとエラー起きるっぽい
BigQuery Subqueries Efficient Join - Stack Overflow
バグじゃないかと思うけど、とりあえずの対処としては、相関サブクエリを書かないようにすること(CROSS JOINなどして条件絞り込みする)、そのためにサブクエリを書くときはWITHで分離できるときは分離してしまうこと、かな
RailsでDevise使った上でAPI作ろうとした話
Devise(GitHub - plataformatec/devise: Flexible authentication solution for Rails with Warden.)はユーザ登録・ログイン関係をよしなにやってくれるけど、フロントエンド用のAPI作ろうと思うと苦労する
ちょっと調べた感じだと色々書かないといけないっぽくて、それは嫌なので雑にハックした
macOS Sierra で brew updateできなかった話
brew update
しようとすると
Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
と言われた。秘密鍵は正しいのに。
問題はこれ
macOS Sierra のSSH接続で、秘密鍵へのパスを覚えてくれない問題 - Qiita
秘密鍵のパスワードを毎回求められるようになったけど、brew update
の際には途中でパスの入力を求めずにエラーを吐いてしまう
解決策はリンク先にあるように.ssh/config
に
Host * UseKeychain yes AddKeysToAgent yes
みたいなの書く
トランプを使ったボードゲームを考えた
プレイヤー:2人
必要なもの:日本で一般的に売られているトランプ(各スート13枚+ジョーカー2枚の計54枚。ただし、ジョーカーは一枚だけ使用する)
- 各プレイヤーにスペード&クローバーかハート&ダイヤの組み合わせの26枚のカードを配る
- ジョーカーを1枚フィールドに置く
- スペード&クローバーを持っているプレイヤーを先行とし、互いのプレイヤーはフィールドに置かれているカードに接するように1枚づつ手札をお互いに置いていく。このとき、接するカードのスートは問わない
- 置き方は、フィールドのカード1枚の上下どちらか、もしくは上下に半分だけずらすように左右どちらかに置く。つまり、1枚のカードの周囲には最大で6枚のカードが置かれることになる
- 上・右下・左下もしくは下・右上・左上の三方に敵カードが1枚づつ以上置かれたカードはゲームから除外される
- 互いの手札を置き終わったときゲーム終了とし、それぞれのプレイヤーは自分のカード3枚を選択し、その三点で構成される三角形の面積の大きい方を勝者とする。ただし、3枚のカードはすべて自分のカードのみで接続されていなければならない
- ジョーカーはワイルドカードとし、自分のカードとして扱って良い
どこかに穴があったり、明らかにどちらかが有利だったりするかな?