shell起動時にkey登録
# ~/.zshrc test $(ssh-add -l | grep "/Users/toqoz/.ssh/id_rsa" | wc -l) = 0 && ssh-add
みたいな感じ。もっと登録すべきkeyがある場合は、追加していくと良いと思う。
ssh-add -l
は一個も登録されてない時、The agent has no identities. っていうのを標準エラーではなく標準出力に出すから、
test $(ssh-add -l | wc -l) = 0
とかってやってもうまくいかない。
最後のwindowをquitする時に確認してくれるようにする(vim)
NeoBundle 'tyru/vim-altercmd' command Q :call s:gentle_quitman() function! s:gentle_quitman() let window_counter = 0 windo let window_counter = window_counter + 1 if window_counter == 1 let a = input("Really quit last window? [n]|y") if a == "y" q endif else q endif endfunction call altercmd#load() AlterCommand q Q AlterCommand Q q
参考
pluginにした
*_test.go の依存packageをinstallする。
*_test.go
でのみimportされているpackageは、単純に go get ./...
だと、入らないので go list -f '{{.TestImports}}' ./... | sed 's/\[//g' | sed 's/\]//g' | xargs go get
する必要がある。
go help list
見ると色々なものを取得できることが分ってよかった。
追記: go get -t [pkg]
で良いっぽい
github.com/go-sql-driver/mysql での datetimeとtime.Timeのマッピング
db, err := sql.Open("mysql", "user:passward@/dbname?parseTime=true")
みたいな感じで、parseTime=true
を設定してやる必要がある。https://github.com/go-sql-driver/mysql/blob/v1.1/packets.go#L649
ただ、これだとdatetime->time.Timeにparseする際に標準時として行なわれるので、parseTime=true&loc=SOME_LOCATION
と、locを設定する必要がある。
古いバージョンだと、loc=Asia/Tokyo
とかをparseできないのでloc=Japan
とかって指定すると良いと思う。https://github.com/go-sql-driver/mysql/commit/7503ab8073eb37c533ac4a211e9a9f469e5cd267 でescapeしたのを渡すようになってるので、これ以降のバージョンだと locl=Asia%2FTokyo
って渡してやれば良い。
go get -u の挙動が良くわかってなくて、今まっさらな環境で go get github.com/go-sql-driver すると、v1.1が入るのに、 v1.0.2 が 入った環境で go get -u github.com/go-sql-driver してもupdateされなくて困ってる。
go get -u でupdateされなかった理由
goで同一ディレクトリに、複数main.mainをおきたい
続編を書いた。
とりあえずここに落ち着いたGoの即時実行環境 -2014年冬- - コンドルが飛んでいる。
以下古いやつ
その場で書いて実行できて置いておける、みたいな場所が欲しい。go playgroundは便利だけど、それだけで十分かというと、そうではないので、適当なディレクリにスクリプト雑多においておいて go run a.go
とか、go run b.go
って出来るようにしておきたい。
それ自体はできるけど、Vim上とかで警告[1]されるのがつらい。
そういう時には、// +build ignore
とか書いておいてビルド対象じゃなくすると良いっぽい。ignoreじゃなくても、コード書いてる環境がターゲットにならないような指定ならなんでもいいけど、ignoreって書いておくと通じやすいし良さそう。c.f. http://golang.org/pkg/go/build/#hdr-Build_Constraints
a.go
// +build ignore package main import ( "fmt" ) func main() { fmt.Println("b") }
b.go
// +build ignore package main import ( "fmt" ) func main() { fmt.Println("b") }
追記
importしたけど、使ってないpackageがある時とか未定義な変数使ったりしてる時の警告も出なくなるので、どっちが不便かわからない感じはする。
追記2
微妙な感じだけど、こんな感じで対処した。あと、:silent make <args> | cwindow
時に描画が変になるのをどうにかしたい。
augroup GoFile autocmd! " .... au BufWritePre *.go :call GoMakeSetting() augroup END function! GoMakeSetting() setl makeprg=go\ build augroup GoMakeSettingGroup au! augroup END if exists(":Make") != 2 command -nargs=* Make silent make <args> | cwindow | redraw! endif if match(getline(1), "\/\/ *\+build *ignore") != -1 setl makeprg=go\ build\ % augroup GoMakeSettingGroup au BufWritePost <buffer> :Make au WinEnter * if winnr('$') == 1 && getbufvar(winbufnr(winnr()), "&buftype") == "quickfix"|q|endif augroup END endif endfunction
- [1] main redeclared in this block previous declaration at みたいなやつ
tmuxで一個[前|後]のwindowと入れ替えるやつ
入れ替えたいことが時々あるけど、swap-window でxとyを交換したいことがあんまりなくて、このwindowを0番に移動して、他の並びはそのままみたいにやりたいことが多い。
「move 0 って指定すると、現在のwindowを0に持ってって、他のはそのままずらす。」みたいなの作ろうかと思ったけど面倒だし、window切り替えみたいにそんなに頻繁にするもんじゃない気がして、一個ずつ前に持ってったり後ろに持ってったりするのでいいやと思ってそう定義した。
# window閉じたりした時に、番号詰める。これをセットしとかないと、欠番出てきてこの方法で移動が出来なくなる。 set-option -g renumber-windows on unbind h bind -r h run 'cw=$(tmux display-message -p \#I) && [ $cw -gt 0 ] && tmux swap-window -s $cw -t $(($cw - 1))' unbind l bind -r l run 'cw=$(tmux display-message -p \#I) && tmux swap-window -s $cw -t $(($cw + 1))'
■
世界を(:Ag 変更依頼)変えさせて(:Qfreplace)おくれよ(:%s/変更依頼/修正依頼/g) そしたら(:wq)君と(git add -A; git commit -m '変更依頼 -> 修正依頼') キスがしたい(git push)
みたいなことを散々言いながら、だるくて一向に手を付ける気にならない病を患って2日が経過してる。
Redigo(redis client)使う場合の注意
redis.Conn#Do(https://github.com/garyburd/redigo/blob/master/redis/conn.go#L368) はredis.Conn#Send -> redis.Conn#Flush -> redis.Conn#Receive みたいなことしてるんだけど、threadsafeではなく複数のgoroutineでコネクションを使いまわしてた場合、アレな感じになるのでredis.Pool使ったりして、コネクション使いまわさないようにしないといけない。
Gokuraku作った
Golang入門として、SoundCloudの曲をURL入れて追加していったやつを適当に再生してくれるみたいなやつを作った。 ToQoz/Gokuraku - GitHub
追記
こんな感じです。
Gokuraku, goweb/websocketのインストールにbzr, hgいるのダルい感じする
— ピヨちゃんです (@ToQoz) August 15, 2013
あと多分Go1.1以上でしか動かない感じする
— ピヨちゃんです (@ToQoz) August 15, 2013
■
「Railsのモデル = ActiveRecord」「いや別に違うけど」みたいなやりとりよく見るけど、100年後も言ってそうだなと思ってた。なんでかなと思ったんだけど、Railsのモデル、ActiveRecord使ってDBと便利に繋がりたい時
class SomeModel < ActiveRecord::Base end
って書くせいで誤解されている気がする。
これだと「SomeModelはActiveRecord::Baseの一種」みたいな感じになって、それが間違っているわけでもない気がするけど、そこから想像力豊かな各位により「全てのモデルはActiveRecord::Baseの一種」みたいな感じに思われそう。
class SomeModel include ActiveRecord::Base end
だったら、モデルが便利にDBと繋がりたいならActiveRecord使うといいよみたいなニュアンスになって、モデル = ActiveRecordみたいなこと言われなくて済むと思う。
銭湯のトイレ
■
class PostsController < ApplicationController respond_to :html, :json def index @posts = Post.all respond_with @posts end end
$.ajax('/posts', { dataType: 'json', contentType: 'application/json' })
みたいな感じのがあったとして、
/posts
に遷移- どっか他のページに遷移
$.ajax('/posts', { ... })
実行- /postsに戻る
で、キャッシュされたjsonが「Content-Type?ウェ?」みたいな感じで描画された。。。(Chrome)
とりあえず何が正しいのか調べてるけど、とりあえず cache: false
することで現実の問題から逃げました。
複数window開くときのテスト
turnip/capybaraでテスト書いてる時に、
あるリンクをクリックすると、ポップアップ開いたり新しいウィンドウ開いて、そこでなんか操作する
みたいなことがある。こんな感じでできる。
_, popup = page.driver.browser.window_handles within_window(popup) do expect(page).to have_content('message') end
開いたままのWindowがあるせいでテストが変なこけ方したから、メインのWindow以外を閉じるみたいな感じにした。
# spec/spec_helper.rb RSpec.configure do |config| config.after(:javascript => true) do page.driver.browser.window_handles[1..-1].each do |sub_window| within_window(sub_window) do page.execute_script "window.close();" end end end end
■
とにかくやる気がでない。だるいって感じが続きすぎていてだるい