今日はjs, go, railsを使う案件でDocker + GCPということでKubernetesのチュートリアルをチマチマ。

Pod, Deployment, Service, Containerと新しい概念・用語が沢山出てきて混乱しますね。AppEngine使えば楽そうなんだけどなー。

ユーザーの行動を記録して外部のサイトに送りたい。 アクション毎にリクエスト送ると無駄だから離脱時に一括して送りたい。 そういう時はbeforeunloadイベントを使えばいい。Mobile Safariでは動かないので代わりにpagehideイベントを使う。

主要モバイルブラウザ遷移時のイベントの種類と挙動 - Qiita

ただ、非同期でデータを外部に送ると送信を待たずに終わってしまうので同期リクエストにする必要がある。

しかし、今作っているのは色んなサイトに埋め込んでもらうJSプログラム。

それ入れると離脱時に待たされるとか言語道断なのでこういう方法は自サイトじゃないと使え無さそう。

古いgojiのエントリーばっかりで新しいgojiのが見つからないので。

package main

import (
    "goji.io"
    "goji.io/pat"
    "net/http"
    "golang.org/x/net/context"
)

func main() {
    mux := goji.NewMux()
    mux.HandleFuncC(pat.Get("/"), func(ctx context.Context, w http.ResponseWriter, r *http.Request){
        // ...
    })
    mux.Handle(pat.Get("/*"), http.FileServer(http.Dir("public")))
    http.ListenAndServe("localhost:8000", mux)
}

public以下に置いたファイルにアクセスできる。

herokuで普通にgit push heroku masterするとrails db:migrateされません。

下記のbuildpackを使うとENVから指定したコマンドをデプロイ時に実行してくれるのでdb:migrateできます。

gunpowderlabs/buildpack-ruby-rake-deploy-tasks: Run arbitrary rake tasks on deploy to Heroku

$ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-ruby -a your-app-name
$ heroku buildpacks:add https://github.com/gunpowderlabs/buildpack-ruby-rake-deploy-tasks -a your-app-name
$ heroku config:set DEPLOY_TASKS='db:migrate' -a your-app-name

Review AppsのAutomatic Deployをやってる時に便利。

ここ1年ぐらい家のPCでも会社のPCでもvimが落ちる。

splitして保存して終了したりすると落ちる。

不要な設定を全部はずして(syntastic以外)最小限で動かしても落ちる。

syntasticを使わなければ落ちないが、syntastic的なことができないなら他のエディタ使ったほうが良い。

おそらくpure vimの世界の問題じゃなくてpythonとかrubyとかの拡張系がおかしいんだとおもう。

色んなパターンで落ちてる人がいて各種対策を試してみたけど現状、俺の力では解決できなさそう。

他にもそんな人がいたらおすすめしたいのがMacVim(やMacVim-Kaoriya)をCLIで使う方法。

~/.zshrc:

alias vim='env LANG=ja_JP.UTF-8 /Applications/MacVim.app/Contents/MacOS/Vim "$@"'

色々といい塩梅でコンパイルされてるので動く。落ちない。良い。

開発用ではvimやAtom、Xcodeなどを使ってますが、ちょっとメモったり何かの下書きなどはCotEditorを使っています。

メモなどはspotlightですぐ立ち上げてプレーンテキストで、等幅フォントで書きたい。余計な機能も見た目も要らない。軽くてすぐ立ち上がるものが良い。

CotEditorで無駄なものを非表示にするとこんな感じの見た目にできます。

https://gyazo.com/14e5d959ac916eea56b1ee192e8c0aa8

プログラムなどで状況が混乱した時もCotEditorにメモって整理します。

書いたものはCotEditorでファイルに保存することは殆どなく、コピペでWebのフォームに投稿したり、別のツールに貼ったりが多いです。

そういったいつでも使えるサブツールとしてとても気に入ってます。

終戦記念日ですね。今日は僕の祖父の手記を描き起こしたブログ、大東亜戦争従軍記のアクセスが一年で一番多くなる日です。

ついこの間読み返したんですが、知り合いの人々の呼び名?通称?みたいなのが面白く、気になりました。

帰国葛城丸乗船(六) | 大東亜戦争従軍記

村では、善六阪の充男一郎、中道の常作、伝兵衛籐の伝三、小沢新宅の総欽、冶右門の忠太、鍛冶の春一など、俺たちより幾らか若い組に大勢の戦死者があった。それに引き換えて、年上の層に当たるものは、応召者も少なく、戦死者は一人もなかったことは喜ばしいことだった。

小沢の大将、九兵門新宅などはれっきとした現役出でありながら、召集にならなかったというのは不思議なくらいだった。

伝兵衛籐の伝三?鍛冶の春一?ルナティックドーンの称号みたいなものかな?

https://gyazo.com/462d80568ec2c3c6fca0b4e3b9281ab8

手抜き全文検索(LIKE '%foo%')したい時の書き方。

like用のsanitizeするメソッドをいつも忘れてググるので。

scopeは返り値がnilの場合all扱いになるので都合がいい。

class User < ApplicationRecord
  scope :search, -> (keyword) {                                                                                                                                                       
    where('name like ?', "%#{sanitize_sql_like(keyword)}%")                                                                                                                           
  }
end

ログイン処理のコードレビューにおいて、認証部分が自作されていて、md5をつかっていたので、なぜ自作するのか?なぜmd5を使うのか?という点について議論になりました。

  • CodeIgniter-Ion-Authを使う
  • blowfishを使う(phpならpassword_hash関数、PASSWORD_BCRYPTオプションが良さそう)

僕は自前認証かつmd5を使う意味がわからなかったのでちょっと辛辣な表現になってしまいました。(その方が安全で楽なのに何故しないのか?的な)

ちょっと揉めてしまいまして、

「中途半端に(その実装を)採用しちゃったせいで、なんかあったら駒形さん直してくれんの?土日でも対応してくれんの?」

という感じになり、最終的には、

「レビューはあくまで"サジェスト"に留めて欲しい。」

ということになりました。コードレビューにおいて、

「ここはAAAではまずいのでBBBにすべきです。」

ではなく、

「ここはAAAよりよいBBBというやり方がありますよ。採用するかしないかは…アナタ次第です m9」

という感じですね。

https://gyazo.com/e00a80de33754a6f65c5a1c11ee15851

ホント レガシー改善は地獄だぜ

関連:レガシーPHP改善日記シリーズ

config/application.rbからは設定がなくなっている。

# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.

上記のようにconfig/initializersに置けとのことなので置く。

config/initializers/i18n.rb:

Rails.application.config.i18n.default_locale = :ja