グループごとにランダムで1件
例によって MySQL 限定です。
PostgreSQL でも LIST_AGG
とか使えばいけそう?
team_players
team | player |
---|---|
red | taro |
red | takeshi |
red | maro |
white | daikichi |
white | tsubasa |
white | ninja |
white | takamori |
上の red, white 各チームから、ひとり誰でもいいから出てきてほしい、 という要件で、下のようなクエリを実行する。
SELECT team , SUBSTRING_INDEX(GROUP_CONCAT(player ORDER BY rand() SEPARATOR ","), ",", 1) AS random_selected FROM team_players GROUP BY team;
実行するたびに、red, white から選出される player が変わる。
当然スカラ値しか取れないが、得られた値をキーにして JOIN することはできる。
Emacs の起動高速化の試み(2)
el-get
をやめて、標準の package.el
に切り替えた
だいたい 300ms ほど削れた。
そもそも自分の場合 el-get
である必要がなかった……。
exec-path
をキャッシュするようにした
毎回 exec-path-from-shell-initialize
を実行していて、これも 300ms ほどかかっていた。
終了時に exec-path
を書き出しておいて、起動時に読み込むようにした。
PATH を変更するということはほぼないので、困ることもない。
これで 0.7 秒ほどで起動できるようになった。
雑な init.el の括弧バリデーション
check-parens
関数をセーブ前に噛ませればいい。
(add-hook 'emacs-lisp-mode-hook 'check-parens-before-save) (defun check-parens-before-save () (add-hook 'write-contents-functions 'check-parens nil t) ; local-hook )