YAPC::Asia 2015 に参加してきた #yapcasia
ブログを書くまではYAPC::Asiaということで!!
今年もYAPCに参加してきました!! とりあえず、最高だった。
聞いて印象に残ったトーク
1日目
Managing Containers at Scale with CoreOS and Kubernetes
CoreOSってよりかはk8sの話がメインでどんな感じに使うかのDEMO多めのトークでした。 個人的には、k8sブログとかで記事見かけてたけど、どんな風に使うのかイマイチわかっていなかったので良かった。
ただ k8s 自体の冗長化はどうすればいいのか質問すればとかったと反省。
Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜
成長しているサービスを改善している裏側だった。 読んだ本をどうやってプロダクションにとりいれてるかすごい参考になった。
紹介されている本のなかで幾つか積んであるのでさっそく読もうと思った。
ベストトーク賞おめでとうございます。
2日目
ISUCONの勝ち方
再起動時にNFS の起動で失敗するやつは何をやってもだめ
— tkuchiki (@tkuchiki) 2015, 8月 22
再起動したらNFSがマウントできないチームがありましたね うッ… 頭が #yapcasia #yapcasiaE
— こんぼい。 (@Konboi) 2015, 8月 22
昨年は予選敗退してなんとも悔しかったので今年は勝ちたいと思って聞かせて頂きました。
聞きながら自分達がやってたやり方を振り返りながら聞けてよかった。
サーバーサイドエンジニア(特にPerl)のためのiOSアプリ開発入門
Demoがことごとく失敗してて失礼ながら笑ってしまいました ← 何度か挫折しているけれど、無料で実機に送れるとのことなのでもっかい手を出してみようかなと思いました
ソーシャルゲームにおける AWS 移行事例
同期の@tkuchikiが登壇するということで聞いてました。 会社で色々聞いていましたが、詳しいところまで把握できていなかったので勉強になりました。
上に挙げたトーク以外にもLTをはじめ色々な話を聞くことができました。
さいごに
牧さんをはじめとするYAPCのみなさん本当にお疲れ様でした!!! おかげさまで、本当に楽しい2日間(前夜祭はいけなかったので)を味わうことができました! 本当にありがとうございました!!!
自宅のルータからraspiへ振られるlocal ipを固定する
はじめに
自宅で使っているルータはElecomのWRC-F300NF
お、お前エンジニアなのにそんなルータなのかよ… とdisが飛んでくるかもしれませんが、 日常で使う分には全然困らない程度に速度出るし、安かったのでこれを使っています。
macアドレスを調べる
pi@raspberrypi ~ $ ifconfig eth0 Link encap:Ethernet HWaddr <mac アドレス> inet addr: < local ip> Bcast:< local ip brod cast> Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:164 errors:0 dropped:0 overruns:0 frame:0 TX packets:141 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:16804 (16.4 KiB) TX bytes:19580 (19.1 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
HWaddr
がmacアドレス。
inet addr
が現在振られているlocal ip。 設定が終わった後に任意のIPが振られているかはここを見る
local ip を固定する
ルータの管理画面にログインする。
WAN&LAN設定 > LAN設定 > 固定DHCP設定
から設定する
IPアドレス
には設定したいローカルIPアドレスを。MACアドレス
には先ほど調べたMACアドレスを入力するaa:bb:cc:dd
など:
で区切られているが入力するときは:
は除く
コメント
には任意
設定してルータを再起動すると設定される。
再起動後にifconfig
で確認すると設定したIPが設定されていることを確認。
まとめ
固定IP振れてめでたしめでたし
ELECOM 11n/b/g対応 無線LAN親機(Wi-Fiルーター) 300Mbps WRC-F300NF (利用推奨環境 3人・ワンルーム・平屋)
- 出版社/メーカー: エレコム
- 発売日: 2014/04/21
- メディア: Personal Computers
- この商品を含むブログ (3件) を見る
Raspberry Pi2 Model B ボード&ケースセット (Standard, Clear)
- 出版社/メーカー: TechShare
- メディア: エレクトロニクス
- この商品を含むブログ (6件) を見る
pull request builder plugin を使わずgithub上にテストの結果を表示する
はじめに
現在のプロジェクトではJenkinsを使ってCIを行っています。 当初ビルドのタイミングはポーリングで行っていました。 しかしポーリングだと再度ビルドを走らせる必要がある時に空コミットする必要があったり、jenkinsのrebuild pluginを追加しポチポチしてビルドする必要がありました。
段々と億劫になり今は、Githubのweb hookでGithub::Hooks::Reciverというhook server経由でjenkinsのjobを実行するようにしました。
jenkins側の設定でbranchをパラメータとして渡せるようにして置くことで任意のbranchを指定してjobを実行できるようにしてあります。
と説明が長くなりましたが、今回はそのjobの実行結果をtarvis ciを連携したときのようにbuildの結果をgithubにも表示するようにしましたのでその方法をメモしておきます。
結果こんな感じに表示されるようになりました。
どうやったのか
説明したような仕組みでjenkinsのjobを回しているので結果を表示するためだけにpull request builder plugin を入れて設定するのは大分面倒だなと思って、何かないか色々調べていました。
調べていると以下の記事が見つかった
Githubのpull requestページに、テスト結果を表示するJenkinsの設定
この記事によると GithubのCommit Status API を使えば実現出来そうということがわかったのでやってみました。
以下の様なscriptを用意しjenkinsのPost build task で実行してあげればpull request の最後のcommitのステータスを設定してくれます。
use 5.018; use warnings; use strict; use FindBin::libs; use Furl; use Git::Repository; use JSON::XS; use Pithub; use Sub::Retry qw/retry/; { my $repo_user = ‘sample-user-name’; my $repo_name = ‘sample-repo-name’; my $git = Git::Repository->new(work_tree => ‘project/dir/path’); my $sha = $git->run('log', '-n', '1', '--pretty=format:%H'); my $state = { 'SUCCESS' => { state => 'success', description => 'ぐっ!! (๑•̀ᄇ•́)و✧', }, 'UNSTABLE' => { state => 'error', description => 'アタフタ ヘ( ̄□ ̄;)ノ ヽ(; ̄□ ̄)ヘ アタフタ', }, }; my $url = $ENV{BUILD_URL}; my $furl = Furl->new; my $json = retry 3, 5 => sub { my $res = $furl->get( "$url/api/json?tree=result" ); decode_json $res->content; }; my $result = $json->{result}; exit(0) unless $state->{$result}; my $ph = Pithub->new( token => ‘GITHUB_API_TOKEN’ ); $result = $ph->repos->statuses->create( user => $repo_user, repo => $repo_name, sha => $sha, data => { state => $state->{$result}{state}, description => $state->{$result}{description}, target_url => $url, } ); }
ぐっ!! (๑•̀ᄇ•́)و✧
まとめ
ステータスが出るようになってめでたしめでたし。
raspberry pi で自宅サーバー構築
はじめに
毎日の業務ではAWSを使っていて簡単にサーバー追加とかインスタンスサイズ変更とできて非常に便利に感じている。 ただ普段あまり意識しないもう少し低いレイヤーのことも出来なきゃなと思ったのでが自宅サーバーを運用しようと思う。
ただ、いきなりがっつり自宅サーバー準備しても動かす物の予定も無いし電気代もかかるのやだなーと思ってたのでraspberry pi でカジュアルに動かして見ることにする
やらないといけないであろう事をざっくりと書き出してみる
- 自宅のルータからraspiへ振られるlocal ip が変わらないようにする
- 自宅のネットワーク外から自宅サーバーへ接続するようにする
- 自宅サーバーへ設定したドメインのIPアドレスが変わっても繋がるようにする
とりあえずやらないといけないのはこのぐらいかなーと
がんばるぞ〜!!
ジュラシック・ワールド
IMAX 3D で見たけど大分良かった。
テストをコケたままにしない理由
はじめに
現在担当しているモバイルアプリゲームではマスターデータのテストを行っています。
- リレーション先のデータが存在しているか
- 入力されているデータが想定しているデータか
- シソーラスのチェック
などヒューマンエラーがおきやすい所、おきた所を防ぐためにマスターデータに対してもテストを行っています。
本題
表題だけみると当たり前のことですが、運用をしていると施策のタイミング変更などやんごとない理由で上記であげたテストがコケる不十分な状態のマスターデータをデプロイする必要が出てきます。 CIサーバーではテストを回すと常にそのテストがコケた状態になります。
それがチーム内で共有されているとしてもテストがコケた状態だと それ今はコケるテストだから という状態が続く可能性があります。
その状態が続くと同一テスト内で他のテストがコケた場合に気づきにくくなります。
じゃあどうする
なので自分の場合は、そのようなケースが出てきた時はテストコードを修正し該当のデータだけテストをスキップさせる という方法を取っています
まとめ
テストこけっぱなしにするの(・へ・)ヨクナイ!
本番のマスターのDBでhistoryを残さないために
本番のマスターのDBで直接SQLを叩くことはほとんどありません。 が、どうしてもやんごとない事情でSQLを直接叩かないといけない時がでてきます。
SQLの実行自体はいいのですが、他の人が誤ってhistoryから実行したら怖いですね。
そうならないように現在のプロジェクトでは master_mysql
のようなコマンドを用意し
どうしても直接本番のマスターDBでSQLを実行しないと行けない場合はそれ経由で実行しています。
master_mysql の中身は
#!/bin/sh MYSQL_HISTFILE=/dev/null mysql -uuser_name -hhostname -ppassword db_name "$@"
こんな感じになってます。 これで他の人がhistory経由でミスすることが多少は防げると思います。