日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

travis上でdockerのmysqlを使ったらCan't connect to MySQL serverと言われてハマった

travisでdocker container上のmysqlに接続しようとしたらなぜか接続できずハマりました。
最終的な原因は $HOME/.my.cnf に設定が上書きされてたのという点でした。
検証用にちょろっと書いたレポジトリはこちら

github.com

travis上でdocker containerを立ち上げて、--defaults-extra-fileのオプションで設定ファイルを読み込み接続しようとしました。
ローカルでやるとこんな感じです。

$docker run --detach --env MYSQL_ROOT_PASSWORD=root --publish 3307:3306 mysql:5.6
bcd7e3220a8efdf52198ab7f03cf2990ce4e00da2e25e417fe5a2f4e24c8f11c

$cat mysql.conf
[client]
user=root
password=root
host=127.0.0.1
port=3307

$mysql --defaults-extra-file=mysql.conf -e 'SELECT 1'
+---+
| 1 |
+---+
| 1 |
+---+

接続余裕ですね。
しかし、同じようなことをtravis上でやると失敗しました。

https://travis-ci.org/ara-ta3/travis-docker-mysql-sample/jobs/350786275

$ docker run --detach --env MYSQL_ROOT_PASSWORD=root --publish 3307:3306 mysql:5.6
Unable to find image 'mysql:5.6' locally
5.6: Pulling from library/mysql
Status: Downloaded newer image for mysql:5.6
6cbf40ed94765b27eaafe2fb6f00be11e0a00265bd30ac125eeab2cbbb071c22

$ sleep 10

$ sudo service mysql stop
mysql stop/waiting
$ mysql --defaults-extra-file=mysql.conf -e 'SELECT 1;'
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

原因はmy.cnfの読み込みの順序でした。
--helpやら色々やっていくと読み込まれている設定ファイルの順序が出ていました。

$ mysql --defaults-extra-file=mysql.conf --help
mysql  Ver 14.14 Distrib 5.6.33, for debian-linux-gnu (x86_64) using  EditLine wrapper
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

...

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf /home/travis/build/ara-ta3/travis-docker-mysql-sample/mysql.conf ~/.my.cnf 
The following groups are read: mysql client

なるほど、--defaults-extra-fileで指定されたファイルの後に ~/.my.cnfが読まれるんですね!!! 😇
~/.my.cnfにしっかり[client]の設定が書かれていました。
--print-defaultsというオプションを指定してみたら先になんかport指定されてるぞ・・・?というところから気が付きました。
--print-defaults便利だったので、なんか設定が変だなとなったときは使っていきたいですね。

$ cat ~/.my.cnf
# Managed by Chef for packer-5a26f3f3-4b65-3c91-579b-7cc9c3fb2e7f.c.eco-emissary-99515.internal :heart_eyes_cat:
[client]
default-character-set = utf8
port = 3306
user = root
password =
socket = /var/run/mysqld/mysqld.sock
[mysql]
default-character-set = utf8

$ mysql --defaults-extra-file=mysql.conf --print-defaults
mysql would have been started with the following arguments:
--port=3306 --socket=/var/run/mysqld/mysqld.sock --user=root --password=root --host=127.0.0.1 --port=3307 --default-character-set=utf8 --port=3306 --user=root --password= --socket=/var/run/mysqld/mysqld.sock --default-character-set=utf8 

これがベストかは置いといてrm ~/.my.cnfしたらとりあえず動きました。
動いたサンプルのビルドはこちらです。

https://travis-ci.org/ara-ta3/travis-docker-mysql-sample/builds/350787431

2017年振り返りと2018年どうしようかなみたいな雑記

なんとなく振り返ります
今年は
1月に突発性難聴になり、
2月は知り合いの結婚式で仙台に行き、
3月は一緒にコミュニティ運営してて海外に行ってる親友の結婚式に行き、
5月最後に会社のチームで合宿に行き、

techlog.voyagegroup.com

6月に1dayのインターン手伝いで京都に行き、
Treasureの講義用にレゴスクラム初めて出てみたり、

レゴ(R)で始めるスクラム入門(レゴスクラム) - ワイクル株式会社 | Doorkeeper

7月は死ぬほど暑い中DarkでBBQして、

Dark BBQ 2017 · Issue #41 · ngineerxiv/dark · GitHub

Splatoon2にハマり始め、
8月はTreasureの手伝いをして、
9月はPHPカンファレンスの資料作りで死にかけ、
10月にPHPカンファレンスで登壇して、

techlog.voyagegroup.com

ISUCONで敗北して人権を失い、イカになり、

arata.hatenadiary.com

11月、12月は無限にゆるいかの人とSplatoonをやった1年でした。

arata.hatenadiary.com

去年書いた抱負とか全く覚えてないw

arata.hatenadiary.com

■去年書いてた今年の抱負

  • 本を3冊は完走したい
  • ピアノで10曲暗譜
  • Darkのpublicなもくもく会の回数を増やす
    • 今年は3回だったので5回くらいは最低限やりたいなぁ

本を3冊は完走したい

ほとんど読めんかったです\(^o^)/
とりあえず3冊は読めたのでよかったです

読んだ本

ゼロから作るDeep Learningは結局よくわかってないので、もう一度読み直したい

bookmeter.com

完全独習 統計学入門は簡単な統計がわかってすごいよかった
統計学ももうちょっと踏み込みたいなぁ

bookmeter.com

スティーブ・ジョブズ 驚異のプレゼンはPHPカンファレンスの前に読んだけど、
すごく活かせたかで言うと怪しいのでまた読まないといけない

bookmeter.com

読みたい本

来年はDDDとか設計の本とか統計の本あたりを読んでいきたい

bookmeter.com

bookmeter.com

bookmeter.com

ピアノで10曲暗譜

くらいしか弾けるようにならんかったw
無理ぽよw
来年はもう少し公開したりとかできたらいいなぁ

Darkのpublicなもくもく会の回数を増やす

3回でした・・・
明らかにSplatoon2の影響なので、来年は頑張りたい・・・

(だいたい)新卒エンジニア もくもく会 #4 - connpass

(だいたい)新卒エンジニア もくもく会 #5 - connpass

(だいたい)新卒エンジニア もくもく会 #6 - connpass

感想と来年の抱負

ピアノよく弾くようになって新しい曲でも楽譜見ながら弾けるようになってきたので継続して弾いていきたい。
Splatoonのコミュニティの人ともっともっと遊んでいきたい。
勉強する機会が明らかに減ってしまったので、頑張ってやるようにしていきたい。
今年関わった方々みなさんありがとうございました!
また来年も仲良くしてください\\\ ٩( 'ω' )و ////

■目標

  • 本は最低3冊読む
  • ピアノ10曲暗譜目標
  • Darkのpublicなもくもく会5回
  • めっちゃ遊んで人生を楽しんでいく

MacのFinderとかIntellijのOpen Projectでdot directoryを表示させる

GolandでGoのProjectを開こうとしたんですが、
$GOPATHが .go になっていて、
Openしようとしてもどうやって選択すればいいかわかりませんでした。

Golandでプロジェクトを開こうとしている時の状態

f:id:arata3da4:20171219183118p:plain

困って inttelij dot directory open とかで頑張ってググッた結果
こんなところにたどり着きました。

intellij-support.jetbrains.com

Command + Shift + '.' (Dot) で.から始まるディレクトリを表示できるらしい。
押したらこうなりました。

f:id:arata3da4:20171219183431p:plain

Finderでも同じショートカットなんですね。
とりあえずよかった。めでたしめでたし。

私とSplatoon2

この記事はDark - Developers at Real Kommunity Advent Calendar 2017の1日目の記事として書かれています。
Splatoon最高なんでみなさんやりましょう。
今何日目だと思ってるのかという問に対しては黙秘させて頂ければ幸いでございます・・・

adventar.org

Splatoonは2から始めたのですが、
気がついたらプレイ時間が660時間以上プレイになっていました。
発売日が7/21で12/1までの日数は134日なので1日平均4.93時間みたいです。
愉快ですね。

はい。
この下書きを書いた時は↑のような状態でしたが、
今や750時間以上プレイになっていました。
7/21から12/19は152日らしいですが、
割り算をするとやはり平均4.93時間でした。
5時間の壁は厚いです(ぇ

はい。
2から始めたけど一応S+までは来たので、
この雑な記事では私がSplatoonでやってよかったなぁと思ったことを書こうと思います。

1. ジャイロでエイムが合うように頑張る

ジャイロで合わせられたほうがいいみたいだったので、
このあたりの動画を見て、ジャイロに慣れるように頑張りました。

www.youtube.com

スティックよりもジャイロの方が、少しエイムが過ぎてしまったときとか戻しやすかったのでこの辺は慣れてよかったなと思いました。

2. 自分の動画を撮って振り返ったりする

自分で動画を撮ってyoutubeにあげといたりすると、
知り合いの上手い人に見てもらってあれこれ言ってもらえてとても便利です。

www.youtube.com

ちなみに使ったキャプチャのやつはこれでした。

www.elgato.com

今見るとクソだなぁとか思うのは成長している証拠ですね!
最近撮れてないんでまた投稿していきたい。

3. イカをやってる人たちのコミュニティに入る

最高にやってよかったなと思ってるのがこれです。
知り合いから聞いてこんなサイトがあるのを知りました。

スプラトゥーン2のコミュニティ|イカナカマ2

ここでぱっとみてゆるそうなところに入ってみたら、最高のイカ生活が待ってました(?)

ikanakama.ink

そもそもDiscordで雑談してるだけでも楽しい。
試合でもめちゃくちゃ上手い人がいたりするので楽しい。
その人たちを倒せたりすると面白いし、
やられた時にアオリイカではない変な煽りをされると芸術性を感じてとても楽しいですw
結構人数がいたりするので、プライベートマッチで新しく出たステージを試せたり、
ガチマッチを試せたりするし、レベルが高いので楽しいです。
コミュニティに入ってよかった。
ゆるいかの全ての人に感謝!\\\ ٩( 'ω' )و ////

楽しかった思い出の一部がこちら

  • パブロでふざけながら攻めてる様子

  • パブロで敵陣に遊びに行った結果潰された様子

  • バイトでいくら最後入れられず荒ぶる様子

  • コミュニティの交流戦で優勝した時の様子

交流戦は本当に最高でした。
今思い出して泣きそうなったw
やっぱチーム組んで一体となって戦うの本当に楽しいですね。
Splatoon甲子園とかもそんな感じで出てみたいです。

まとめ

  • ジャイロ便利なので早めに慣れると良さげ
  • 自分のプレイを上手い人に見てもらって色々言ってもらえると動き方がわかって良い
  • コミュニティに入って色んな人と楽しむの最高!
  • 特にゆるいかコミュニティ最高!!!

webpackでERROR in Entry module not found: Error: Can't resolve 'babel' と言われて怒られた

久しぶりにwebpackを触ったらタイトル通り怒られてしまったので
その時調べたメモです。
webpackのversionは3.8.1でした。
エラー内容はこんな感じ

$make webpack/admin
path/to/npm run webpack -- --config ./webpack.config.js

> webpack-hello@1.0.0 webpack /Users/a-tanaka/booster
> webpack --watch "--config" "./webpack.config.js"


Webpack is watching the files…

Hash: 4f6ee5333597035827a3
Version: webpack 3.8.1
Time: 48ms

ERROR in Entry module not found: Error: Can't resolve 'babel' in '/Users/a-tanaka/booster'
BREAKING CHANGE: It's no longer allowed to omit the '-loader' suffix when using loaders.
                 You need to specify 'babel-loader' instead of 'babel',
                 see https://webpack.js.org/guides/migrating/#automatic-loader-module-name-extension-removed

その時のwebpack.config.jsはこんな形

module.exports = {
    entry: {
        main :__dirname + "/main.js",
    },
    output: {
        path: __dirname + '/dist/',
        filename: '[name].bundle.js'
    },
    module: {
        loaders: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: 'babel'
            }
        ]
    },
    resolve: {
        extensions: ['*', '.js']
    }
};

結論から言うとmodule.loaders[0].loaderの babelbabel-loader に変える必要があるみたいですね

変更後

module.exports = {
    entry: {
        main :__dirname + "/main.js",
    },
    output: {
        path: __dirname + '/dist/',
        filename: '[name].bundle.js'
    },
    module: {
        loaders: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: 'babel-loader'
            }
        ]
    },
    resolve: {
        extensions: ['*', '.js']
    }
};

変更後に実行すると大丈夫そうでした。

$make webpack/correct
path/to/npm run webpack -- --config ./webpack.config.corrent.js

> webpack-hello@1.0.0 webpack /Users/a-tanaka/booster
> webpack "--config" "./webpack.config.corrent.js"

Hash: 8bee2d00eb6691bcae24
Version: webpack 3.8.1
Time: 433ms
         Asset     Size  Chunks             Chunk Names
main.bundle.js  2.51 kB       0  [emitted]  main
   [0] ./main.js 38 bytes {0} [built]

webpack1.xから2.xになる際にloaderのsufiixもつけないといけなくなったみたいですね。
そんな触ってなかったっけな・・・という思いが強いですw

https://webpack.js.org/guides/migrating/#automatic-loader-module-name-extension-removed

検証用に使ったコードはgistに置いたので参考になれば幸いです。

https://gist.github.com/ara-ta3/dd980bb3e014659339bf3739ff939e05

参考

terraformを使ってさくらのクラウド上にサーバを立ち上げる

ISUCON7予選と同じ環境を立ち上げたいなーと思ってsakura cloudのterraformを触ってみたのでそのメモです。
第一歩目として単にサーバを立ち上げて見ました。
さくらのクラウドユーザコミュニティによる公認ツールがあるようなのでそれを使いました。

github.com

やることは

  1. API Tokenの取得
  2. terraformの設定を書く
  3. 実行する

という感じです。

1. API Tokenの取得

すごくまとまっていたので、ここを参考にすれば一発です。

インストールガイド - Terraform for さくらのクラウド

2. terraformの設定を書く

resource "sakuracloud_disk" "disk01"{
    name = "disk01"
    source_archive_id = "${data.sakuracloud_archive.ubuntu.id}"
    password = "password" # ssh用のパスワードなのでいい感じに変更する必要あり
}

# サーバー
resource "sakuracloud_server" "server01" {
    name = "server01"
    disks = ["${sakuracloud_disk.disk01.id}"]
    tags = ["@virtio-net-pci"]
}

data sakuracloud_archive "ubuntu" {
  os_type = "ubuntu"
}

ちょっとはまったところ

最低限の設定を書きたかったので下記記事を参考にしたのですが、

knowledge.sakura.ad.jp

resource "sakuracloud_disk" "disk01"{
    # ディスク名
    name = "disk01"
    # コピー元アーカイブ(CentOS 7.3 64bitを利用)
    source_archive_id = "112900062806"
    # パスワード
    password = "YOUR_PASSWORD_HERE"
}

の部分でsource_archive_idが今現在異なっているらしく * sakuracloud_disk.disk01: Failed to create SakuraCloud Disk resource: Error in response: &sacloud.ResultErrorValue{IsFatal:true, Serial:"...", Status:"400 Bad Request", ErrorCode:"param_res_not_found", ErrorMessage:"不適切な要求です。パラメータで指定されたリソースが存在しません。IDをご確認ください。"} と怒られてしまいました。

sakura cloudのpublic archiveと言うもののIDみたいですが、
それがちょくちょく更新されて変わっているみたいですね。

なので先程書いた例のように

data sakuracloud_archive "ubuntu" {
  os_type = "ubuntu"
}

と書いてあげて、 source_archive_id = "${data.sakuracloud_archive.ubuntu.id}" を利用すればいい感じに出来るようです。
os_typeに記載できるのはこのあたりにありました。

terraform-provider-sakuracloud/data_resource.md at cf50171462b9fc40ca4d68d99f84b72e009279a5 · sacloud/terraform-provider-sakuracloud · GitHub

3. 実行する

あとはterraformを実行するだけです。
さくっと行けそうだったのでdockerでやりました。
makefileに書いたのでこれを使うと make apply token=... secret=... みたいな感じで実行できます。

token=
secret=
SAKURA=init apply plan destroy

$(SAKURA):
  docker run -it --rm \
      -e SAKURACLOUD_ACCESS_TOKEN=$(token) \
      -e SAKURACLOUD_ACCESS_TOKEN_SECRET=$(secret) \
      -v $(PWD):/workdir \
      sacloud/terraform $@

https://hub.docker.com/r/sacloud/terraform/

ちょっとはまったところ

インストールガイドを見ながら実行したんですが、
微妙にコマンドが違っていて動かなかったですw
latestのimageで実行するとmountするディレクトリが現在異なっているようでした。

今のところ下記のように書いてありますが、 /work のところを /workdir に変える必要があります。
Dockerhubの方のREADMEでは /workdir になっていたのでわかって良かったです。

# ×
$ docker run -it --rm \
         -e SAKURACLOUD_ACCESS_TOKEN=[さくらのクラウド APIトークン] \
         -e SAKURACLOUD_ACCESS_TOKEN_SECRET=[さくらのクラウド APIシークレット] \
         -v $PWD:/work \
         sacloud/terraform apply
# ◯
$ docker run -it --rm \
         -e SAKURACLOUD_ACCESS_TOKEN=[さくらのクラウド APIトークン] \
         -e SAKURACLOUD_ACCESS_TOKEN_SECRET=[さくらのクラウド APIシークレット] \
         -v $PWD:/workdir \
         sacloud/terraform apply

追記

書いた直後に中の方が直してくださいました!
すごい!はやい!
今ドキュメントの方は動く形になっているかと思います

追記ここまで

下記がapplyしてdestroyまで実行したときの流れです。
はじめにinitする必要があるようでした。

### terraform plan

$make token=xxx secret=yyy plan
docker run -it --rm \
        -e SAKURACLOUD_ACCESS_TOKEN=xxx \
        -e SAKURACLOUD_ACCESS_TOKEN_SECRET=yyy \
        -v /Users/a-tanaka/sakura:/workdir \
        sacloud/terraform plan
Plugin reinitialization required. Please run "terraform init".
Reason: Could not satisfy plugin requirements.

Plugins are external binaries that Terraform uses to access and manipulate
resources. The configuration provided requires plugins which can't be located,
don't satisfy the version constraints, or are otherwise incompatible.

1 error(s) occurred:

* provider.sakuracloud: new or changed plugin executable

Terraform automatically discovers provider requirements from your
configuration, including providers used in child modules. To see the
requirements and constraints from each module, run "terraform providers".

error satisfying plugin requirements
make: *** [plan] Error 1

# terraform init

$make token=xxx secret=yyy init
docker run -it --rm \
        -e SAKURACLOUD_ACCESS_TOKEN=xxx \
        -e SAKURACLOUD_ACCESS_TOKEN_SECRET=yyy \
        -v /Users/a-tanaka/sakura:/workdir \
        sacloud/terraform init

Initializing provider plugins...

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

# terraform plan

$make token=xxx secret=yyy plan
docker run -it --rm \
        -e SAKURACLOUD_ACCESS_TOKEN=xxx \
        -e SAKURACLOUD_ACCESS_TOKEN_SECRET=yyy \
        -v /Users/a-tanaka/sakura:/workdir \
        sacloud/terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

data.sakuracloud_archive.ubuntu: Refreshing state...

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  + sakuracloud_disk.disk01
      id:                        <computed>
      connector:                 "virtio"
      graceful_shutdown_timeout: "60"
      name:                      "disk01"
      password:                  <sensitive>
      plan:                      "ssd"
      server_id:                 <computed>
      size:                      "20"
      source_archive_id:         "112901206585"
      zone:                      <computed>

  + sakuracloud_server.server01
      id:                        <computed>
      cdrom_id:                  <computed>
      core:                      "1"
      disks.#:                   <computed>
      dns_servers.#:             <computed>
      gateway:                   <computed>
      graceful_shutdown_timeout: "60"
      interface_driver:          "virtio"
      ipaddress:                 <computed>
      macaddresses.#:            <computed>
      memory:                    "1"
      name:                      "server01"
      nic:                       "shared"
      nw_address:                <computed>
      nw_mask_len:               <computed>
      packet_filter_ids.#:       <computed>
      tags.#:                    "1"
      tags.0:                    "@virtio-net-pci"
      zone:                      <computed>


Plan: 2 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

# terraform apply

$make token=xxx secret=yyy apply
docker run -it --rm \
        -e SAKURACLOUD_ACCESS_TOKEN=xxx \
        -e SAKURACLOUD_ACCESS_TOKEN_SECRET=yyy \
        -v /Users/a-tanaka/sakura:/workdir \
        sacloud/terraform apply

data.sakuracloud_archive.ubuntu: Refreshing state...
sakuracloud_disk.disk01: Creating...
  connector:                 "" => "virtio"
  graceful_shutdown_timeout: "" => "60"
  name:                      "" => "disk01"
  password:                  "<sensitive>" => "<sensitive>"
  plan:                      "" => "ssd"
  server_id:                 "" => "<computed>"
  size:                      "" => "20"
  source_archive_id:         "" => "112901206585"
  zone:                      "" => "<computed>"
sakuracloud_disk.disk01: Still creating... (10s elapsed)
sakuracloud_disk.disk01: Still creating... (20s elapsed)
sakuracloud_disk.disk01: Still creating... (30s elapsed)
sakuracloud_disk.disk01: Still creating... (40s elapsed)
sakuracloud_disk.disk01: Still creating... (50s elapsed)
sakuracloud_disk.disk01: Still creating... (1m0s elapsed)
sakuracloud_disk.disk01: Still creating... (1m10s elapsed)
sakuracloud_disk.disk01: Still creating... (1m20s elapsed)
sakuracloud_disk.disk01: Creation complete after 1m28s (ID: 112901361233)
sakuracloud_server.server01: Creating...
  cdrom_id:                  "" => "<computed>"
  core:                      "" => "1"
  disks.#:                   "" => "1"
  disks.0:                   "" => "112901361233"
  dns_servers.#:             "" => "<computed>"
  gateway:                   "" => "<computed>"
  graceful_shutdown_timeout: "" => "60"
  interface_driver:          "" => "virtio"
  ipaddress:                 "" => "<computed>"
  macaddresses.#:            "" => "<computed>"
  memory:                    "" => "1"
  name:                      "" => "server01"
  nic:                       "" => "shared"
  nw_address:                "" => "<computed>"
  nw_mask_len:               "" => "<computed>"
  packet_filter_ids.#:       "" => "<computed>"
  tags.#:                    "" => "1"
  tags.0:                    "" => "@virtio-net-pci"
  zone:                      "" => "<computed>"
sakuracloud_server.server01: Still creating... (10s elapsed)
sakuracloud_server.server01: Still creating... (20s elapsed)
sakuracloud_server.server01: Creation complete after 29s (ID: 112901361336)

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

# terraform destroy

$make token=xxx secret=yyy destroy
docker run -it --rm \
        -e SAKURACLOUD_ACCESS_TOKEN=xxx \
        -e SAKURACLOUD_ACCESS_TOKEN_SECRET=yyy \
        -v /Users/a-tanaka/sakura:/workdir \
        sacloud/terraform destroy

data.sakuracloud_archive.ubuntu: Refreshing state...
sakuracloud_disk.disk01: Refreshing state... (ID: 112901361233)
sakuracloud_server.server01: Refreshing state... (ID: 112901361336)

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  - sakuracloud_disk.disk01

  - sakuracloud_server.server01


Plan: 0 to add, 0 to change, 2 to destroy.

Do you really want to destroy?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: yes

sakuracloud_server.server01: Destroying... (ID: 112901361336)
sakuracloud_server.server01: Still destroying... (ID: 112901361336, 10s elapsed)
sakuracloud_server.server01: Destruction complete after 15s
sakuracloud_disk.disk01: Destroying... (ID: 112901361233)
sakuracloud_disk.disk01: Destruction complete after 2s

Destroy complete! Resources: 2 destroyed.

destroy前コンソールを見たら作成されていました。
さくっと作れるので、これで設定書いてISUCON7予選の環境を再現していきたいです。
2ファイルしかないのでコピペで十分そうですが、
使ったMakefileなどはここに置きました。

github.com

ISUCON7で予選落ちしてきた

去年同様に id:hoto17296id:jp_taku2 と一緒にDarkというチームで出てきました。
結果は26772点!

f:id:arata3da4:20171023182952p:plain

去年は0点で、26722 / 0 = ∞(?)倍のスコアなのでこれこそ圧倒的成長ですね!

arata.hatenadiary.com

最終的なランキングも出てましたが、144(=12 ^2)位でした。
きりがいい。
全ランキングが出ると、来年はもっと上位目指すぞという気持ちになっていいですね。
優勝目指すぞ!ってなって、負けたとしても去年よりはあがった!とかわかるととても嬉しいです。

isucon.net

一週間夏休みを取っていたせいで、一番の懸念は当日の朝起きれるかでしたが起きれて良かったです。
(開始時刻遅くなっちゃったけど
開始時刻が遅れたので少しゆっくり目に行ったらインクの塗り合いが行われてたのがハイライトです。

やったこと

Appサーバ2台、DBサーバ1台の構成で、言語はPHPを選びました。

当日はprivateにしていましたが、ここのレポジトリを使ってコードを置いたりしていました。

github.com

あとは30分毎に今どんな状況だっけみたいな話をしたり誰がどこやってるかみたいなのを整理したりしました。

f:id:arata3da4:20171021211437j:plain

最後の1時間にsplatoonのラスト1分のBGMを流すとめちゃくちゃ焦ってよかったです(?)

www.youtube.com

f:id:arata3da4:20171024191434j:plain

便利だったこと

去年もやったんですが、Makefileによくやる作業をまとめるの便利です。

application server用のMakefile

nginx_log=/tmp/nginx-access.log

alp:
  sudo cat $(nginx_log)|alp --sum --aggregates "/icons/.+"

alp/less:
  sudo cat $(nginx_log)|alp --sum --aggregates "/icons/.+"|less -Ss

restart/php:
  sudo systemctl restart isubata.php.service

clean/nginx:
  sudo rm -f $(nginx_log)
  $(MAKE) restart/nginx

restart/nginx:
  sudo systemctl restart nginx.service

db server用のMakefile

slow_query=/var/log/mysql/mysql-slow.log

slow/ptquery:
  sudo pt-query-digest $(slow_query)

clean/slow:
  sudo rm -f $(slow_query)
  sudo systemctl restart mysql.service

mysql:
  mysql -uisucon -pisucon isubata

例えばnginxのログを一度削除して、nginxを再起動したいみたいなコマンドを作ったりしました。
ログを削除するときにログの場所どこだっけとか、
systemctlのコマンドこれであってるっけとか考えなくて良くて、
make clean/nginx でログを削除して、nginxをリスタートできます。
便利!
去年は色々書いてたけど、今年はあまり書かなかったので、みんなあんまり使ってなかったのが悲しかったです。
コマンドが1コマンドが多いから特にいらんかったみたいな話もありました。
来年はもうちょっと色々書いて便利にしていきたい。

ベンチマーカーも公開されたので、復習していこうと思います。
運営の方々当日大変だったと思いますがとても楽しめました!
ありがとうございました!

github.com