何か主張があるときに主語がWeなのかIなのかで全然状況が変わってきてしまうことがありがちなので、そこは主語を省略してないで欲しい。
- (私個人が(他の人も同様かもしれませんが))○○で困ってるんです。
- (私たちみんな)○○で困ってるんです。
言ってることはフレーズは同じでも、括弧の中身が違うだけで意味がだいぶ変わってしまいます。 また、受け取る側もそれを受けてアクションする内容や優先度も変わってくるので、ちゃんと説明出来てると嬉しいなと思いました。
何か主張があるときに主語がWeなのかIなのかで全然状況が変わってきてしまうことがありがちなので、そこは主語を省略してないで欲しい。
言ってることはフレーズは同じでも、括弧の中身が違うだけで意味がだいぶ変わってしまいます。 また、受け取る側もそれを受けてアクションする内容や優先度も変わってくるので、ちゃんと説明出来てると嬉しいなと思いました。
MySQLのエラーログにこんなエラーが出ていたとします。
150819 10:05:09 [ERROR] Slave I/O: The slave I/O thread stops because a fatal error is encountered when it try to get the value of SERVER_ID variable from master. Error: , Error_code: 1159
エラーメッセージは読めば良いとして、 Error_code: 1159
これの意味が分からない。
そういうときは、ドキュメントを見れば良いという話もありますが、いちいちブラウザ開くのめんどうくさい。
そういうときは perror
コマンドを使ってあげるとよいでしょう。
% perror 1159 MySQL error code 1159 (ER_NET_READ_INTERRUPTED): Got timeout reading communication packets
なるほど、接続がtimeoutしたのかというのが分かったりします。
そんな地味な perror
コマンドでした。
MySQLにはperrorという地味なコマンドがありましてね。
エラーコード出力されてるけどよく分からないと言うときこんな風に打ってあげるとたまに便利。 `perror 1159`
— masasuzu? (@masasuz) August 19, 2015
2年前同じような記事書いてたことを今思い出した。
今できなければ、だいたいできないと思った方が良い。
大事だと思ったらすぐやる。どうでもいいならやらない。くらいでいいの心持ちでいたい。
git remote set-url --add ${remote}
して上げれば良い。
# git clone git@github.com:masasuzu/p5-Acme-LoveLive.git cd p5-Acme-LoveLive git remote set-url --add origin git@bitbucket.org:masasuzu/p5-acme-lovelive.git # git push
この例だとgithubとbitbucket両方にpushするようになっているが、githubと社内のgitサーバ両方同期したいときにどうすれば良いのかなーと調べて出てきた一つの答えがこれ。
定期的にcronで同期させるとタイムラグがあるのに対して、こっちだとリアルタイムに同期出来るのが利点かな。ただ、cloneした後にこの設定忘れると、社内のミラーレポジトリが古いままになってしまって非常に面倒くさくなることもあり得るのが注意点ではある。 cronで同期方式とgit push時に同期方式、一長一短ではあるが、さて。
あと思いついた方法としてgithubのwebhook飛ばして、それをhookにしてfetchするとか、jenkinsさんお仕事任せるとかそういう方法もありますね。
fluentd 0.12.15 の話です。
結論から言うとFluentdのfilter_grepが、keyの後にスペース1個しか許容してくれません。 なので、下記のようにそろえるために、スペースを余分に入れると、意図しない正規表現になってしまいます。
<filter fluent.info> type grep exclude1 message (?:^out_forest plants new output|adding rewrite_tag_filter rule) </filter>
正しくはこう。
<filter fluent.info> type grep exclude1 message (?:^out_forest plants new output|adding rewrite_tag_filter rule) </filter>
ソース的にはこのあたりで、スペース一個でsplitしてるので、2個目以降のスペースはregexに含まれてしまうという。
key, regexp = conf["regexp#{i}"].split(/ /, 2)
out_rewrite_tag_filterと同じ感覚で設定すると自分のようにはまるのが請け合いという話でした。
<match static.access.**> type rewrite_tag_filter rewriterule1 vhost (?:hogehoge.jp|fugafuga.jp) ignore rewriterule2 uri (?:/favicon.ico|/robots.txt) ignore rewriterule3 vhost (.*) static.access.site.$1 </match>
以上です。今日1時間くらいはまってた話でした。
あー、fluentdのfilter_grepって、keyの後にスペース1個しか許容しないなこれ。
`conf["exclude#{i}"].split(/ /, 2)`
`exclude1 message hogehoge`とか書いててはまってた。。。
— masasuzu? (@masasuz) August 10, 2015
設定ファイルにこう書いて再起動するだけ。
<source> type monitor_agent bind 0.0.0.0 port 24220 </source>
拡張子json
を付けるとJSONで結果が返ってくるので、jqと組み合わせるとか、プログラムで処理しても良い。何も付けないとLTSVで結果が返ってくる。
curl --silent localhost:24220/api/plugins.json
ちなみにもともと自分が、やりたかったことはforwardのキュー溢れしてないかどうかなのでこういう風にしてあげれば良い。
% curl --silent localhost:24220/api/plugins | grep forward | grep plugin_category:output plugin_id:object:3fb168dda99c plugin_category:output type:forward output_plugin:true buffer_queue_length:3 buffer_total_queued_size:1447111 retry_count:0 plugin_id:object:3fb16aad87d8 plugin_category:output type:forward output_plugin:true buffer_queue_length:77 buffer_total_queued_size:26217068 retry_count:0 plugin_id:object:3fb168667b9c plugin_category:output type:forward output_plugin:true buffer_queue_length:27 buffer_total_queued_size:21915109 retry_count:0 plugin_id:object:3fb1687cb9fc plugin_category:output type:forward output_plugin:true buffer_queue_length:54 buffer_total_queued_size:2465405 retry_count:0 plugin_id:object:3fb168d580a0 plugin_category:output type:forward output_plugin:true buffer_queue_length:13 buffer_total_queued_size:421007 retry_count:0
Fluentdのforward回りで少しはまってたときに役に立ったリソースメモ。 解決しつつあるので、その件についても後で書く
なんとなく某所から圧力がかかったので、雑に対応しました。
% perl -Ilib -MAcme::LoveLive -E 'binmode STDOUT => "utf8";say join(":", $_->fullname_ja, $_->cv) for Acme::LoveLive->unit("Aqours")->members' 小原鞠莉:鈴木愛奈 津島善子:小林愛香 黒澤ダイヤ:小宮有紗 高海千歌:伊波杏樹 桜内梨子:逢田梨香子 松浦果南:諏訪ななか 黒澤ルビィ:降幡愛 国木田花丸:高槻かなこ 渡辺曜:斉藤朱夏
ご査収ください。
というか、9人中5人も名前があ
で始まるのかー。
crystalをちょっと触ってみたくなったので、hello worldするまで。 基本ドキュメントに書いてあります。
anyenvは入ってる前提です。plenvやrbenvと同じノリで、開発したいのでcrenvを使います。
cd ~/.anyenv git pull anyenv install crenv exec $SHELL -l
現時点で最新の0.7.5をインストール
crenv install 0.7.5 exec $SHELL -l crenv global 0.7.5
ちゃんとインストールされてることを確認。
% crenv versions * 0.7.5 (set by /Users/masasuzu/.anyenv/envs/crenv/version) % crystal --version Crystal 0.7.5 [2a33a87] (Thu Jul 30 17:19:13 UTC 2015)
こんな内容の hello.cr
を書きます。
puts "hello world"
crystal
もしくはcrystal run
で実行出来ます。
crystal hello.cr
# もしくは
crystal run hello.cr
crystal build
で実行バイナリを生成してくれます。
crystal build hello.cr ./hello
--release
オプションを付けると最適化してビルドしてくれます。
crystal build hello.cr --release
crystalには言語標準でプロジェクトの雛形を作ってくれる機能があります。べんり!
crystal init app
でアプリケーション、crystal init lib
でライブラリプロジェクトの雛形が作れます。
% crystal init app hello-world create hello-world/.gitignore create hello-world/LICENSE create hello-world/README.md create hello-world/.travis.yml create hello-world/Projectfile create hello-world/src/hello-world.cr create hello-world/src/hello-world/version.cr create hello-world/spec/spec_helper.cr create hello-world/spec/hello-world_spec.cr Initialized empty Git repository in /Users/masasuzu/project/crystal/tmp/hello-world/.git/