oinume journal

Scratchpad of what I learned

IntelliJ IDEAのgo-lang-idea-pluginをビルドする

最近Goを少し書くようになった。PythonRubyを書く時はIntelliJを使っているので、GoもIntelliJで書きたい。ただ、IntelliJからインストールできる公開されているプラグインは今年の1月の古めのものなので、go-lang-idea-pluginを自分でビルドしてインストールしてみた。

必要なもの

ビルドする

$ cd path/to/go-lang-idea-plugin
$ wget http://download-cf.jetbrains.com/idea/ideaIC-13.1.4.tar.gz
$ tar xvzf ideaIC-13.1.4.tar.gz
$ mv idea-IC-135.1229/bin/inspect.sh idea-IC

build-package.xmlを下記のように書き換える。

--- a/build-package.xml
+++ b/build-package.xml
@@ -7,7 +7,7 @@
     <property name="dist" location="dist"/>

     <property name="go.plugin.name" value="ro.redeul.google.go" />
-    <property name="idea.community.build" location="${user.home}/Tools/idea-IU-133.193/" />
+    <property name="idea.community.build" location="./idea-IC" />
$ ant -f build-package.xml

でビルドが成功すると、dist/ro.redeul.google.go.jar というファイルができているので、これをIntelliJからpluginとしてインストールすればおk

基礎からわかる Go言語

基礎からわかる Go言語

Jenkinsで過去のビルドをワンクリックで再ビルドしたい

結論から言うと「Rebuild Plugin使え」

ユースケースとしては、ビルドパラメータを使ってディプロイ先の環境などを指定している場合、これを毎度指定するのはつらいので、過去のビルド履歴からワンクリックで再ビルドできないかというもの。Rebuild Pluginを入れると下記のようにビルド履歴をクリックすると"Rebuild"というリンクが出るのでこれをクリックすると同じビルドパラメータを使ってビルドし直すことができる。

jenkins-rebuild-plugin

これを知る前まではビルド履歴からパラメーターを調べてしてそれを新規のビルドで指定して、ってやっていたんだけどパラメータが多い時つらかった。そろそろJenkinsを窓から投げ捨ててCircleCIとかが使いたいです。

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

MySQL 5.6で本当にオンラインでDDLが実行できるか検証してみた

MySQL 5.6での機能強化点(その1) - パフォーマンスと使い勝手を大きく向上 | Think ITに書いてあるようにMySQL 5.6からオンラインでDDLを実行してもレコードのINSERT, UPDATEはできるようになったとあるので、これが本当なのか検証してみた。MySQLにおいてレコード数の多いテーブルに対するALTER TABLE文の発行は以前から問題視されていて、pt-online-schema-changeみたいなものを駆使するのが常套手段だった。

検証環境

CREATE TABLE `redirect` (
  `rd_from` int(8) unsigned NOT NULL DEFAULT '0',
  `rd_namespace` int(11) NOT NULL DEFAULT '0',
  `rd_title` varbinary(255) NOT NULL DEFAULT '',
  `rd_interwiki` varbinary(32) DEFAULT NULL,
  `rd_fragment` varbinary(255) DEFAULT NULL,
  PRIMARY KEY (`rd_from`),
  KEY `rd_ns_title` (`rd_namespace`,`rd_title`,`rd_from`)
) ENGINE=InnoDB DEFAULT CHARSET=binary
  • このredirectというテーブルにカラムを追加するDDLを流すと大体1分ぐらいかかる(のでそのすきにINSERTとかを実行してみた)
$ mysql -uroot -e "create database wikipedia"
$ mysql -uroot wikipedia < /tmp/enwiki-20140502-redirect.sql
$ time mysql -uroot wikipedia -e "alter table redirect add column comment varbinary(255) not null default '' "

real    1m5.789s
user    0m0.003s
sys 0m0.002s

カラム追加中にINSERT/UPDATE/DELETE

DDL

$ mysql -uroot wikipedia -e "alter table redirect add column comment varbinary(255) not null default '' "

INSERT

mysql> insert into redirect values (43000000, 1, 'alter test', '', '');
Query OK, 1 row affected (0.04 sec)

UPDATE

mysql> update redirect set rd_namespace=2 where rd_from=43000000;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

DELETE

mysql> delete from redirect where rd_from=43000000;
Query OK, 1 row affected (0.16 sec)

問題なし。ってか最初に紹介したページにはINSERTとUPDATEについてしか記述がなかったけどDELETEもいけた。

カラム削除中にINSERT/UPDATE/DELETE

DDL

$ mysql -uroot wikipedia -e "alter table redirect drop column comment"

INSERT

mysql> insert into redirect values (43000001, 1, 'alter test', '', '', 'test');
Query OK, 1 row affected (0.04 sec)

UPDATE

mysql> update redirect set rd_namespace=2 where rd_from=43000001;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

DELETE

mysql> delete from redirect where rd_from=43000001;
Query OK, 1 row affected (0.10 sec)

問題なし。

インデックス追加中にINSERT

もう面倒なのでINSERTだけ検証。

DDL

$ mysql -uroot wikipedia -e "alter table redirect add index rd_title (rd_title);"

INSERT

mysql> insert into redirect values (43000002, 1, 'alter test', '', '');
Query OK, 1 row affected (0.07 sec)

問題なし

インデックス削除中にINSERT

インデックスの削除が一瞬で終わってしまうため検証できず。

カラムの型変更中にINSERT

これは5.6でもブロックされるはずなのだが気になったのでやってみたところ、やっぱりちゃんとブロックされた。

DDL

$ mysql -uroot wikipedia -e "alter table redirect modify column rd_namespace bigint NOT NULL DEFAULT '0'"

INSERT

insert into redirect values (43000000, 1, 'alter test', '', '');

結論

カラム型の変更以外ではもうpt-online-schema-changeいらないんじゃないかなーと思った。MySQL 5.6はGTIDやパフォーマンスが改善されていないなどでいいイメージがなくあまり使われていない印象なんだけど、こういうところは積極的にアップデートする理由になるのではないかと思った次第。仕事でも4万qpsぐらいクエリが来てるサーバにMySQL 5.6使っていて特に大きな問題は起きてないっす。

実践ハイパフォーマンスMySQL 第3版

実践ハイパフォーマンスMySQL 第3版

ノンアルコールビールはサッポロ プレミアム アルコールフリー ブラックがオススメ

最近諸事情によりノンアルコールビールを飲むようになったのでステマ記事。

コンテキスト

  • ビール一杯で普通に酔えるぐらい酒が弱い
  • ビールは飲みたいけど、飲んでしまうと寝むくなって何もできなくなる
    • ビール飲んでサッパリした後にもう一仕事したい

なぜサッポロ プレミアム アルコールフリー ブラックか

  • ノンアルコールビールはいろいろ飲んだけどこれが一番ビールっぽくっておいしいと感じた
  • 黒ビールが嫌いでなければオススメ
  • 泡もけっこう出る
  • 普通のビールに比べて安い(スーパーで130円ぐらい)

もちろん普通のビールに比べればマズいけど、雰囲気を楽しみたいっていうレベルならこれで十分だと思ってる。

vagrant ssh でログインせずそのままコマンドを実行したい

vagrant sshVMに入ると思うんだけど、ちょっとしたコマンドをそのまま実行したい時にVMのShellにログインするのはダルい。そういう場合は -- を使ってvagrantコマンドの引数を終わらせて、その後に任意のコマンドを書くといい。

$ vagrant ssh -- uptime
 09:08:55 up  3:54,  0 users,  load average: 0.04, 0.11, 0.13

ずっとこのハイフン2つってどういう意味なんだろうって思ってて調べてみたら引数の終わりを表すヤツなんすねー。