読者です 読者をやめる 読者になる 読者になる

日頃の行い

\\\\ ٩( 'ω' )و ////

ISUCON6 オンライン予選に出て惨敗してきました。

isucon

9/17(土) にISUCON6の予選に出てきました。

isucon.net

最終結果は0点です。ただただ悲しいです。
予選前に3年目で本選行けないなんてエンジニアじゃないとか言いましたが、
生きていて大変申し訳ないです(´;ω;`)ウッ…
僕らのチームのピークは一番最初に回したベンチが4000点弱くらい行って一瞬トップ10に載ったことでしょう。

チームメンバー

チーム名は dark で由来はコミュニティ名からです。
メンバーはそのコミュニティにいるhoto17296jp_taku2でした。
来年こそ・・・

方針とかやったこととか

  • ちゃんと計測する
    • 去年ここが甘かった
    • 今年は出来た気がする
  • 頻繁に打つコマンドはMakefileに書く
    • 2回くらい打ったら追加してました
    • この辺も去年同様でよかった
  • 使用言語はRuby
    • 初めjsで行こうとしたんですが、starをつける所がバグってたっぽい?ので結局Rubyでいきました。
    • POSTしようとするとundefinedが飛んでるっぽかった
  • 午前中に環境(計測周り)を整えて午後から直していく

やったこと

Rack Profile見る限り(パット見で正直わかるけど)一番やばそうなhtmlfyをhotoに投げつつ
そもそも0点なのがやばかったのでPOSTの/star と /login ら辺をやりました。
今回のレギュレーションだとPOSTの遅延が1件につき-200点とかなので、
やばいと思いつつ直そうとして終わりませんでした。(´;ω;`)ウッ…
starをredisに突っ込むまでは良かったんですが、userの登録実は使われていなかったので、全部メモリに乗っければよかった。

計測

alpやpt-query-digestらへんをとりあえず入れたのと、New Relic入れたりRackプロファイラ入れたりしました。
正直alp使う余裕も無いまま終わりましたw slow query出てる所の改修してる間に終了でしたwww
(´ノω;`)…

  • alp

github.com

  • pt-query-digest

https://www.percona.com/doc/percona-toolkit/2.2/pt-query-digest.html

  • New Relic

newrelic.com

newrelicのアプリケーションモニタリング便利で、どのURL内でどの処理がどれくらいかかってるのかが見れたりするので大体これでよかったんじゃないかみたいな感じでした。

f:id:arata3da4:20160918173026p:plain

f:id:arata3da4:20160918173020p:plain

  • Rackプロファイラの参考にした記事

qiita.com

Makefile

Makefile便利です
後半めっちゃ疲れてきたときにあのコマンドなんだっけとか思い出さなくていいです。
makeの補完が全てを解決してくれます。
人類に優しい。
それぞれのサービスのログ確認とか、サービスやらミドルウェアのリスタートとか色々書きました。

.PHONY: /etc/mysql/my.cnf

nginx_log_file=/var/log/nginx/access.log
mysql_slow_log_file=/var/log/mysql/mysql-slow.sql
lang=ruby
dbname=isuda

#########################
# isuda
#########################

confirm:
  curl 'localhost:5000/user?name=motemen'

status_systemd:
  sudo systemctl status

show_log_isutar:
  sudo journalctl -u isutar.$(lang)

show_log_isuda:
  sudo journalctl -u isuda.$(lang)

restart_isuda:
  sudo systemctl restart isuda.$(lang)

restart_isutar:
  sudo systemctl restart isutar.$(lang)

restart_isuinit:
  sudo systemctl restart isuinit.$(lang)

restart_all:restart_isuda restart_isutar restart_isuinit

log_isutar:
  sudo journalctl -u isutar.ruby

log_isuda:
  sudo journalctl -u isuda.ruby

stop_isuda:
  sudo systemctl stop isuda.$(lang)

stop_isutar:
  sudo systemctl stop isutar.$(lang)


#########################
# nginx
#########################

confirm_nginx:
  sudo nginx  -t

reload_nginx:
  sudo systemctl reload nginx

restart_nginx:
  sudo systemctl restart nginx

alp:
  sudo alp -r -f $(nginx_log_file) $(opt)

clean_nginx_log:
  sudo rm -f $(nginx_log_file)
  $(MAKE) reaload_nginx

#########################
# mysql
#########################

restart_mysql:/etc/mysql/my.cnf
  sudo systemctl restart mysql
   @echo "Socket通信でやってるせいかこいつだけだとアプリが止まるのでmake restart_all もしたほうがいい"
  $(MAKE) restart_all

/etc/mysql/my.cnf: webapp/config_file/my.cnf
   @echo "$<$@にコピーするよん"
  sudo cp -f $< $@

show_log_mysql:
  sudo journalctl -u mysql

pt_digest_query:
  sudo cat $(mysql_slow_log_file) |/usr/local/bin/pt-query-digest

mysql:
  . ./env.sh; mysql -u$$ISUDA_DB_USER -p$$ISUDA_DB_PASSWORD $(dbname)

#########################
# redis
#########################

restart_redis:
  sudo systemctl restart redis

show_log_redis:
  sudo journalctl -u redis


#########################
# deploy
#########################

arata_fetch:
  cd ./webapp && git fetch arata

arata_merge:
  cd ./webapp && git merge arata/master

感想

  • まいくろさーびす〜〜〜〜〜〜↑↑↑↑(´;ω;`)ウッ…
  • isupam〜〜〜〜〜〜
  • NewRelic便利
  • Makefile便利
  • インスタンス1台だと他のメンバーの機能を検証中にベンチ回せなかったりして厳しい
    • とは言え複数台になるとコードの共有とかインスタンスコピーとか環境が実はちょっと違うとかありそうで怖い
    • 練習でやってみるのがいいのかな
  • ベンチの結果が0点だとなにか変わったのかすらもわからなくてとてもつらい
    • ベンチのメッセージからタイムアウトの数が減ったくらいしかわからなかった
  • Option(人権) => None
  • 生きててごめんなさい
  • 来年には人権を取り戻す
  • 一人ですらISUCONの問題で予選突破するレベルの高得点叩き出せなきゃ話にならないと強く思ったので強くなります
  • とてもつらかったけど問題はめっちゃ楽しかったです。運営の方々ありがとうございました!!

最後に

こちらが反省のために食べた地獄谷の麻婆豆腐の様子です。

Gotanda.js#4 in Retty でLTしてきました #gotandajs

JavaScript

6/3にGotanda.jsというイベントがあり、そこでLTしてきました。

gotandajs.connpass.com

イベント全体を通した内容などはこちらの記事にまとめられていました。
(私の資料次の日にあげたので見つからなくてすみません・・・
www.chirashiura.com

発表内容

発表資料はこちらです。
slideshareあげたら日本語消える問題直ってなかったので、speakerdeckにしました。

speakerdeck.com

node-questというライブラリを作ってSlack上でRPGを再現するみたいな話をしました。
node-quest自体は概念だけで、hubot上で色々実装する必要はありつつ、色々実装してみてこんな感じで遊べるよみたいなのが伝わればよかったかなぁと思います。
是非気になった方はぜひ使ってみてください\\\ ٩( 'ω' )و ////
ただ、version1.0.0行くまでは突然インターフェースが変わる可能性があったりするので、すみませんというところです・・・w

www.npmjs.com

ほんとはやりたかったこと

hubotの具体的な実装を書いたpluginを公開してだれでもインストールできるようにしたいなと思っていたので、これは今後やろうかなと思いました。
先週やる気が出なくて、空実装まででした。

github.com

感想

  • JSのフレームワークとかbuildツール周り趣味でしか使っていないので、その辺聞けて良かった
  • Webpackで3分半と聞いてやばそうと思った(小並感)
  • 学びが多くて良いためにLTする側としてはハードル高くてめっちゃ緊張した
  • デモ盛り上がってよかった
  • またいい感じのネタを仕込んでLTしにいきたい\\\ ٩( 'ω' )و ////

(だいたい)新卒エンジニア向け技術交流会vol.7 を実施した話

日記

6/4にこんなイベントが有りました。

dark.connpass.com

参加者 34名 出席者 30名で参加率88%でした。わりと高め\\\ ٩( 'ω' )و ////
ありがとうございます!

【参加された方々へ】
Slackの方にもぜひぜひ参加してください。
認証情報わからん・・・等あればこちらから招待送るので、__dark__ (@ngineerxiv) | Twitter にリプライやDMなどでご連絡ください〜

http://yamiga.waka.ru.com/slack

発表内容

内容の一覧というか予定はこんな感じでした。

f:id:arata3da4:20160605220103p:plain

ウチのおじいちゃん凄いんだよ(Jenkinsってこんな使い方もするぜ)

by @jp_taku2

※資料は見つけ次第追記します
Jenkinsおじいちゃんと労る話でした。
実際のおじいちゃんももっとちゃんと労りましょう(?)w

チームを作ろう

by @papix

https://slas.la/papix/dark7

slasla というサービスを立ち上げた時の話でした。
技術的に何を使っている等の話からサービス開発楽しそうと思えるエモい話まであってサービス開発いいなと思いました。

スタートアップのくせになまいきだ

by @hoto17296

https://slas.la/hoto17296/hoto_dark_7

"今すぐ"ガンガン開発/ガンガンデプロイ・"スケールしても" ガンガン開発/ガンガンデプロイすることが大事という点からHerokuを使ったアプリケーション開発の話でした。
The Twelve-Factor App (日本語訳) のお話は知らなかったので学びがありました。

Z-Shell

by @equal_001

zshの便利さについての話でした。http://www.zsh.org/
実際資料はそこまでなく、ライブコーディング?ライブコマンディング?で発表してくれました。新しい!
zsh自分も使ってますが、何も考えずとりあえず設定している項目が多くて「あ、それそういう設定でそうなるんだ」みたいな感じになってよかったです。
ちなみに私は「ぜっしゅ」と読んでます。

(Title忘れてしまったので資料見つけ次第追記します)

by @YAMITZKY

わりと後半私が酔っ払ってたためタイトル忘れてしまいました😇
ただ、pyconに投稿するとのことだったので、そのうち資料と共に公開されると思うので、その時に追記しようと思います。
ちなみに、pyconに投稿しないと、次回イベント時にピザではなく、寿司になり、差分の金額を@YAMITZKYさんが払ってくれるとのことでした←

最後に

次回イベントはまた3ヶ月後とかになるかと思います。
ぜひ気になる方は ngineerxiv - connpass にてメンバーに登録してみてください〜