Fish shell環境でgvmを導入する
Fish shell環境でgvmをインストールすると、bashで書かれているgvmスクリプトが構文エラーしてしまい、useコマンドなどがうまいこと動作しません。 これは、以下の手順で解決できます。
fishermanをインストールする
fishermanはfishのプラグインマネージャです。fisherコマンドが利用できるようになり、便利なプラグインを簡単にインストールできるようになります。
$ curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisher % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 100 61490 100 61490 0 0 22493 0 0:00:02 0:00:02 --:--:-- 50073
bassプラグインをインストールする
bassはFish shell環境でbashを利用するためのプラグインです。以下のfisherコマンドで簡単にインストールできます。
$ fisher edc/bass
gvmをインストールする
いよいよgvmをインストールします。
bashから、以下のコマンドを実行します。
$ bash bash-3.2$ bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) Cloning from https://github.com/moovweb/gvm.git to /Users/onamae/.gvm Created profile for existing install of Go at /usr/local/opt/go/libexec Installed GVM v1.0.22 Please restart your terminal session or to get started right away run `source /Users/onamae/.gvm/scripts/gvm`
source /Users/onamae/.gvm/scripts/gvm
を実行したあと、/Users/onamae/.config/fish/config.fish
に以下を追記します。
function gvm bass source ~/.gvm/scripts/gvm ';' gvm $argv end
Fish shell support · Issue #137 · moovweb/gvm · GitHub
書いたら、source /Users/onamae/.config/fish/config.fish
を実行します。
これで、Fish shell環境でgvmコマンドが利用できるようになりました。
brew updateでRepository not foundと言われたら
brew update
したらそんなリポジトリありませんよ言われました。
> brew update remote: Repository not found. fatal: repository 'https://github.com/peco/homebrew-peco/' not found Error: Fetching /usr/local/Homebrew/Library/Taps/peco/homebrew-peco failed!
なくなってしまったリポジトリはbrew untap
コマンドで消せます。
> brew untap peco/homebrew-peco Untapping peco/peco... (47 files, 37.9K) Untapped 2 formulae
このあと、再度brew update
すると、エラーなく更新できました。
brew untap
って使ったことなかったわー
Docker for Macで「com.docker.osx.hyperkit.linux failed to start Exit code 1」
Docker for Macをアップデートしたらこんなエラーが出て起動できなくなった。
調べると、リセットしたほうがイイヨー、アンインストールダヨーって意見が
出てくるんだけど、もうちょっと調べると
rm ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
だけすれば復帰できるってことで、やってみたら無事回復。よかった。
MySQLで外部キーを追加しようとしたら「Cannot add foreign key constraint」と怒られた
Sequel Proで外部キーを追加してたら怒られた。
MySQLの応答: Cannot add foreign key constraint
こういうときはrootで
mysql> SHOW ENGINE INNODB STATUS\G
をすると、
------------------------ LATEST FOREIGN KEY ERROR ------------------------
という箇所があるので、そこを確認するとエラーの詳細を見ることができます。
まあ、繋げようとしているカラムの形が微妙に違っているのがほとんどだと
思うので、
- idの片側だけunsignedじゃないか
- tinyintとsmallintを繋げようとしていないか
とかを確認すれば、大抵は解決できるんじゃないかな?と思います。
ちなみに
データが入った状態で外部キーをつけようとすると、以下のエラーが出ることがあります。
Cannot add or update a child row: a foreign key constraint fail
これは、今あるデータの整合性が取れてないので(参照先に存在しないIDがある等)
適宜修正をしてあげましょう。
【メモ】Golangでスライス型にスライス型をappend
Golangでスライス型にスライス型をappendする。
s1 := []string{"aa", "bb", "cc"} s2 := []string{"dd", "ee", "ff"} s1 = append(s1, s2)
としてgo run
すると
cannot use r (type []string) as type string in append
とエラーしてしまう。[]stringにappendできるのはstringだよ!と。
これは、appendの2つめの引数に3点リーダ(...)を付与することで解決できます。
s1 = append(s1, s2...) // s1=>[]string{"aa", "bb", "cc", "dd", "ee", "ff"}
s2が可変引数として展開されて、以下を実行したのと同じ結果が得られます。
s1 = append(s1, "dd", "ee", "ff")
【メモ】Golang/dbrでreplace intoがしたかった。
※2016/12/16 修正しました
Go言語のO/R Mapper、dbrでreplace intoがしたかった。
のですが、dbrではreplace構文はサポートしてないらしい。
それで、delete-insertで対応することにしました。
type ( //User ユーザー User struct { ID int Contacts []*Contact } //Contact ユーザーの連絡先 Contact struct { MailAddress string } ) //replaceUserContacts ユーザーの連絡先を削除して登録する func (u *UserContacts) replaceUserContacts(sess *dbr.Session) error { //削除して _, err := sess.DeleteFrom("user_contacts"). Where("user_id", u.ID). Exec() if err != nil { return err } //登録 for _, c := range u.Contacts { _, err := sess.InsertInto("user_contacts"). Columns("user_id", "mail_address"). Values(u.ID, c.MailAddress). Exec() if err != nil { return err } } return nil }
よし超シンプルだぜと思って実行したら、なんとぜんぜん登録されない。
確認したら、deleteの返り値errに
dbr: wrong placeholder count
って入ってる。
処理してるところ
を確認すると、プレースホルダー( where id = ?
に当たる部分)と
バインドする値(u.ID)の数が不一致だぞと言っている。なんでや。
なので、
//replaceUserContacts ユーザーの連絡先を削除して登録する func (u *UserContacts) replaceUserContacts(sess *dbr.Session) error { //削除して _, err := sess.DeleteBySql(`delete from user_contacts where user_id = ` + strconv.Itoa(u.ID)). Exec() if err != nil { return err } //登録 for _, c := range u.Contacts { _, err := sess.InsertInto("user_contacts"). Columns("user_id", "mail_address"). Values(u.ID, c.MailAddress). Exec() if err != nil { return err } } return nil }
と、変数バインドしないようにしたところ、エラーなく動作するようになりました。
【メモ】間違えて削除したローカルブランチを復元するときに怒られた
reflogを参照して、間違えて削除したローカルブランチを復元するとき
fatal: Not a valid object name
と言われて復元できなかったのですが
$ git reflog # feature/hogeを削除する直前のコミット番号(HEAD@{n}というやつ)を控える $ git branch feature/hoge HEAD@{12} # => fatal: Not a valid object name: 'HEAD@12'. と出て復活できない
これはコミット番号をダブルクォートで囲んであげればOKです。
$ git branch feature/hoge "HEAD@{12}" # ダブルクォートで囲んでみる $ git branch * dev feature/hoge #<= 復活できた! master