ISUCONに向けてpprof導入手順まとめた

pprofとは

Go用プロファイリングツール
実行時間を計測して処理の重い箇所を調べることができるとても便利なツール

pprofの画像

導入手順

ライブラリの取得

$ go get -u runtime/pprof
$ go get -u net/http/pprof

※go modを利用していれば不要だった気がする

コードの修正

インポート部分に下記追加

import (
        ...
        ...
+   _ "net/http/pprof"
)

main関数に以下を追加

func main() {
+   runtime.SetBlockProfileRate(1)
+   runtime.SetMutexProfileFraction(1)
+   go func() {
+       log.Println(http.ListenAndServe("0.0.0.0:6060", nil))
+   }()
        ...
        ...
}

ここまでできたらほぼ完了。

依存パッケージのインストール

WebUIでグラフを見れるようにするために下記をインストール

$ apt install graphviz
or
$ yum install graphviz

ポート開放

WebUIを外から見れる用にするために 1080 ポートを開ける

分析データ収集

アプリケーションが動いてる状態(ISUCONならベンチマーク中)で以下のコマンドを実行しデータを収集&WebUIを起動する

$ go tool pprof -http=0.0.0.0:1080 {アプリケーションのディレクトリ}  http://localhost:6060/debug/pprof/profile

プロファイルできてから再度見る場合

$ go tool pprof -http=0.0.0.0:1080 {アプリケーションのディレクトリ} {収集したファイルパス}

実行が終了したら以下のURLで見ることができる。

http://xxx.xxx.xxx.xxx:1080/

※ポートの説明

  • 1080:pprofを結果を外部から見るためのポート
  • 6060:pprof自体がアクセスするためのポート(外部からアクセスしないので、開けなくてよい)

参考サイト

medium.com

docs.google.com

HHKB厨が corne cherry を自作してみた

1年前くらいに自作したcorneキーボードの記事の下書きが眠ってたので消化です。

作って一時期使ってたのですが、HHKB type-s Hybrid が出て衝動買いしてからそっちを使ってしまってますw(これで家にHHKBが3代目ですよ、、) corneも無線対応してまた使いたいですね。

背景

今まで HHKB BTモデル無刻印 を使っていたが友達に左右分離がいいぞと言われたので、買ってみた。

自分のキーボードに求めるもの

ということで自分がほしいと思うキーボードの条件を洗い出してみた。

  • US配列であること(記号が入力しやすい)
  • コンパクトであること
  • 静かであること
  • 配線が少ないこと(できれば無線であること)
  • 2〜3万円で揃うこと

上記に加えて自作のきっかけでもあるので左右分離キーボードを試してみたいと思っていました。

購入したもの

自作キーボードキット

Corne Cherry

『cherry 茶軸』(42個)

キーキャップ

適当な黒い無刻印のやつ(40個)

f:id:zoe302:20190926203551j:plain

以下自作工程写真

※写真はろうと思ったら画質良すぎて変換めんどくさくなったのでgoogleフォトでw

photos.app.goo.gl

firmware の設定

自作しただけではまだ使えません。キー配置の設定をマイクロチップに設定する必要があります。 今回は QMK Firmware を使って設定しました。

私の設定は下記レポジトリに入ってます。参考にしてみてください。 github.com

キー配置以外にも設定できるのですが、最初なのであまりいじってません。

キー配置は全部で4レイヤ設定しています。 設定次第ではもっとレイヤを増やすこともできますが、レイヤを増やしすぎると切り替えに使うキーが増えるのでその分corneだとそもそもキー数が少ないので配置がつらくなりますw

  1. デフォルトレイヤ=アルファベット
  2. RAISEレイヤ=Fnキー+移動系キー
  3. LOWERレイヤ=数字キー+記号キー
  4. SWITCH(RAISE+LOWER同時押し)レイヤ=予備(なにか欲しくなったら追加予定)

完成

完成したcorne cherry

マイクラサーバ運用でやっている5tips

みんなでマイクラする図

お久しぶりです。すっかり寒い季節になってしまいましたね。

最近はマイクラにハマっており、マイクラサーバを運用していたりします。 せっかくなのでその際の取り組みとして工夫してよかったことをまとめて行きたいと思います! マイクラサーバの運用記事や構築記事は色々あると思いますが、 サーバ運用者視点で取り組みや楽しさをまとめてる記事はないかなと思ったので、思い切って記事にしてみました。

この記事は ウィルゲート Advent Calendar 2019 - Qiita の19日目の記事です。 いよいよ残り一週間切りましたね!

昨日は @okashoi さんの PHP + Swoole で論理回路シミュレータを作ってみた でした。

この記事で書かないこと

「マイクラサーバの構築方法、運用方法について」はこの記事では言及しません。当初はこれを書こうかなと思っていたのですが、結構長くなってしまう上に真新しい情報がないので今回は取り上げないこととします。別途機会があれば別記事にまとめるかもしれません。

あくまでも今回は、 技術 以外のマイクラサーバ運用時のtipsや楽しみ方、こういうことやったら良かったよ、という内容に的を絞って書いていきます。

前提

まず先にマイクラサーバを運用している前提について書いていきたいと思います。

ユーザ

サーバでの想定利用ユーザを先に書いておきたいと思います。

まず本記事でのマイクラサーバはプライベートでの運用なので、全ユーザはサーバ運用をしている私の知人に限られます。 また、ユーザのほとんどは私の所属している会社の友人が主で、残りの数人も同じエンジニアコミュニティに所属している人ばかりです。 なので、いきなり誰も知らないユーザが入ってくるというようなことはありません。

サーバ運用

サーバの準備については私個人が好きでやっていることなので、私個人で借りているVPS上で私一人で運用されています。 もともと私個人が趣味開発用に借りてた1000円程度のVPSに同居しており、現在は少しスケールアップして2000円程度になっています。 サーバの費用についてはメンバーからのカンパ方式と私の善意(私がやりたいからやる)で運用しています。

工夫してよかったこと

1. Discord の導入

みんな知人みたいなものなので Discord を導入して、Discord 内でコミュニケーションを取れるようにしました。 これによりテキストコミュニケーションや、ボイスチャットでのコミュニケーションが取れるようになりゲーム中でもわいわい遊べるようになりました。 (オンラインゲームなので当たり前ではありますが)遠方にいる人とも一緒に遊べるのはとても良いですね。 ※実際、会社に内定者インターンとして来ていた子と一緒に遠方からでもコミュニケーション取りながら遊べたりしてとても良いですね。 Discord を用意することでゲームの待ち合わせをしたり、あ、今あの人やってるから自分もやろう!などができるのでとても良かったと思います。

2. Trelloの導入

みんな大好きかんばんです。 やりたいことややったことを可視化することで参加者のモチベーションにもつながると思って導入しています。 みんなのアイディアなんかもここに書いていくことで一緒にやる仲間を募集しやすくなります。 みんなで大きなチケットを消化したときはお祝いなんかもして楽しいですね。

Trelloで管理されたマイクラタスク

3. 参加したくなるような企画

ただ目的なくマイクラをやっていても楽しいは楽しいのですが、色々目標を持ってやるともっと楽しくなると思っています。 例えば、私達のサーバでは某 Youtuber さんの企画をまるまる真似て『マイクラ人狼』なるものをやったり『マイクラバトルロワイヤル』をやったりしてました。 他にも『特定モンスターを一番多く倒した人が優勝選手権』みたいなものも企画しています。 単純にマイクラをやるでも楽しいので良いのですが、こういう企画があると一層楽しくなるのでおすすめです。 特にマイクラ人狼は普通の人狼バトルロワイアル要素が混ざっており、普通の人狼とは一味違うのでとても楽しいです。 ※人数集めるハードルだけが少し難点かも。

4. Kyashの導入

サーバ費用はカンパ式でと冒頭でも書きましたが、毎月サーバ費用に対して参加者からお気持ちでサーバ費用を頂いています。 サーバ費用の支払に関しては極力手軽に支払いできるように Kyash という送金サービスを利用しています。 QRコードで送金先を指定して簡単に送金できるので、とても楽にカンパできると思います。

5. 情報の一元管理

最後が情報の一元管理です。情報が散乱しているプロジェクトはエンジニアの皆さんも嫌いだと思います。 マイクラでも同じく情報の一元管理は大事だなと私は考えています。 公開されているマイクラサーバの場合情報はwikiなどにまとめてることが多いかと思います。 ですが、今回の場合クローズドな完全身内だけのマイクラサーバのためwikiを用意して誰でも見れるように整える必要はないと考えました。 なので、すべての情報を Google スプレッドシートで管理するように考えました。 あらゆる情報をできるだけこのスプレッドシート上に集め、新しい参加者が来たときもここを教えれば済むようにまとめています。

スプレッドシートに一元管理されてる図

まとめ

イクラプライベートサーバで工夫してきた点をまとめてみました。 趣味なので一番は楽しくやれることですが、仕事を通して学んだこともうまく遊びにも活かせていて個人的にはとても良いなと思っています。 遊びながら楽しく発見して、それをまた仕事にも活かして、という良い循環ができてくると仕事も生活も豊かになっていくなと感じています。 ということで、これからもマイクラを通して色々学んでいきたいと思います!

明日のアドベントカレンダーwg_ishikawa さんの「グロースハックについて内定者たちとしたディスカッション」です。お楽しみに!

【惨敗しました】ISUCON9予選に向けて準備してきたこととやったこと

前回の更新が徳丸試験受験だったのでちょうど1ヶ月ちょっと空いてしまいましたね。

この1ヶ月の間、割とこのISUCON9予選に向けて準備してきたので、そのことについて書きたいと思います。 どんな問題だったかや、何をしたら早くなるなどの解説や、運営方針で色々あったことについては、この記事では触れません。

あくまで忘備録的に自分たちが何を準備してきて、当日何が出来たかをまとめておきます。 惨敗とはいえ、用意はかなりしてきたつもりなのでそれなりにためになる情報もあるんじゃないかなと思ってます。

f:id:zoe302:20190914152904p:plain f:id:zoe302:20190914152713p:plain

ISUCONってなに?

去年の参加記に説明あるので読んでみてください!

blog.zoe.tools

準備してきたこと

上記の通り去年のISUCON8で点数的には割と惜しいところまで行ったこともあり、今年こそは予選通過を本気で目指していました。 予選通過に向けて去年の振り返りをもとに練習を重ねました。

役割を決めての練習をする

今回チームメンバーは アッキー (@akki_megane) | Twitter02 (@cocoeyes02) | Twitter と参加しました。 それぞれ早い段階で役割を決めたのでその役割で練習をしました。 役割はざっくりこんな感じです。

役割を決めての練習は全部で6日ほど練習しました。 練習には過去問のISUCON5やISUCON8の予選問題を再現して練習してきました。

デプロイスクリプト用意しておく

これも前回の反省からの行動です。 事前に、用意できるものはできるだけ用意してきました。 用意したスクリプトなどはすべてgithub上で管理していました。 また当日のタイムライン管理もwikiで予めやることを書き出し、迷うことなく作業できるようにしておきました。

github.com

特に初期、サーバをもらってからやることはだいたい決まってるので、まとめています。

pprofを見れるように

ここは前回に比べて割とうまくできるようになったと思います。 web pprofを アッキー (@akki_megane) | Twitter が色々調べてくれたおかげでとても見やすく、分析に置いてもとても役立ちました。

f:id:zoe302:20190914153034p:plain

(写真は↑しかとってなかったのでこれだけ、、)

2チーム参戦

これについては自チームの話とは関係ないですが、身内のコミュニティから今回ついに3チーム参戦しました。 ずっとISUCON面白いぞ、といいながら練習会をやってきた甲斐がありました。どのチームもコミュニティ名の「oysters」に少しかけた名前で出場してくれてました

当日やったこと

書こうと思ったけど疲れてきたので特に工夫したことだけ書いて、あとは当日のgithubレポジトリを貼っておきます。

工夫したこと

ポモドーロ

25分で作業を行い、5分でやったことの報告と次やることの報告。2ポモドーロ進捗なかったらみんなで解決に当たる。という方針でやってました。

環境構築について

今回はalibaba cloudのコンソールから各参加チーム代表者が運営に共有されたイメージをもとにインスタンスを立てベンチを回すと言う形式でした。 なので、まず最初1台を立て準備を整えベンチを回し、初期バックアップなどのスクリプトを実行した後、そのインスタンスをもとにカスタムイメージを作成し、作成したカスタムイメージをもとに 4台 インスタンスを立てました。 2台は最初に立てたものと合わせて競技用のインスタンス、残り2台はチームメンバーの開発環境として配布しました。

施策の検証方法について

これは試行錯誤しながら思いついた方法ですが、開発環境として本番同等のインスタンスを渡すことが出来たので、アプリ側で改修したものが正しく改修出来ているかを確認する方法として、本物のポータルのベンチを使う、ということができることに途中で気づきました。具体的にはポータルでベンチを回す際にはグローバルIPアドレスとインターナルIPアドレスを入れてサーバを登録後、ベンチを回すのですが、どうせ本番提出時もベンチに使うIPはproxyしているwebサーバだけなので残り2つをチームメンバー二人のサーバを登録することで施策をそれぞれ改修してベンチを回してデバッグするということが出来ました。 おかげで、本番に上げたらベンチ落ちてまた改修、みたいなことを減らすことが出来ました。

当日レポジトリ

github.com

基本的に当日はこのissueをもとに行動していきましたのでだいたいやったこと、やろうとしたことはこれを追えばわかるはず。 (このレポジトリはこのブログを書くにあたって公開にしており、ISUCON開催中はプライベートリポジトリでやっていました。)

当日の様子 (ちなみにこのとき僕は熱を出していて、しんどかったのでノーリアクションですが、めっちゃ楽しかったのでISUCON終わる頃には熱が治ってました)

振り返り

チームで振り返りをしたら追記します!

最後に

運営さんいつもありがとうございます。 ISUCONもかなり規模が大きくなってきたので今まで通り出来ない部分や、期待も大きくなり大変な部分も多くあるかと思いますが、 いつも問題作成、運営してくださり、とても楽しく参加させていただいております! 特に今回は問題のクォリティも高くとても準備に力が入っておりとても満足させていただきました!

徳丸基礎試験を受けてきました

f:id:zoe302:20190808203904j:plain

こんにちは。 暑い日が続いてますね。 最近は 徳丸基礎試験(試験名:ウェブ・セキュリティ基礎試験) に向けて勉強してきていたので、受けてみての感想などをざっくりまとめたいと思います。

徳丸基礎試験(試験名:ウェブ・セキュリティ基礎試験)とは

これです。

peatix.com

セキュリティ界隈で有名な徳丸さん監修のウェブセキュリティ試験です。 今回はその基礎試験のベータ試験(第一回目)でした。

公開して1時間くらいで枠が埋まってしまったらしいです。

自分が申し込んだときは増枠前の最後の1枠だったので滑り込みセーフでした。

受けてみようと思ったきっかけ

徳丸試験のベータ試験が公開される前から徳丸試験というものを作っているという話は聞いており、 セキュリティは自身も気になっていた領域ではありました。 受験フォームが公開された日に知り合いが受けよう!と言ってシェアしていたので一緒に受けてみよう、という軽い気持ちで受けることにしました。 それに第一号合格者って響きが少しかっこいいなぁと思ったのもあります。

試験までの勉強方法について

試験までは約1ヶ月弱くらいでした。試験までの間の土日などを使い主に下記の本を読みながら勉強をしていました。

出題範囲の本の内容を軽くまとめて事例ベースで紹介しているような感じの本でした。 期間もあまりなかったので基本的にはこの本を読んで出そうなところを勉強するスタイルですすめていました。

受験ページに書いてありますがこちらが出題範囲の本です。この本はウェブセキュリティについてすごくまとまっておりとてもいい本で、ウェブエンジニアなら一冊は手元に置いておきたい本ではあるのですが、一ヶ月で読むには少し量が多かったですwなので基本的にはサラッと読み、自分の知識が足りない部分について補てんするように読んで行きました。

受けてみての感想

正直自分はあまりこういう試験を受けた経験がないことと、この試験は今回が第一回目だったこともあり、どれくらい勉強をすればいいか、合格ラインがどれくらいか、というものがわからず、割と闇雲に勉強していました。 まぁセキュリティの勉強なので勉強して無駄になるということは特にないので、問題はないのですが資格試験を受けるための勉強方法としてはコスパ悪い勉強方法だったな、と少し振り返りました。 また、試験の内容については口外できないので省きますが、勉強してみた結果、自分のセキュリティ知識でどこらへんが弱いのか認識できたことはとても良かったです。 意外と知らない攻撃手法や脆弱性があったり、知ってるつもりでもいざ説明しようとするとできないところとかがありました。

試験勉強をするということ自体久しぶりで少し懐かしい気持ちになったりもしました。普段は自分の今使いたい技術を思いつきで調べて学ぶということが多いので たまには、今回のように目標を決めて時間をとって体系的に技術を学んでみるのも面白いですね。

試験結果は3ヶ月くらいで出るらしいです。 結果が出るのが楽しみです。ドキドキ。結果出たらまたブログに書こうと思います。

【開催レポ】無限LT会 #2 【まだLT事前に作ってんの!?】

無限LT #2 運営一同
無限LT #2 運営一同

気づけばあっという間に7月ですね。 LT会やらもくもく会やらいろいろイベント企画したりISUCON練習してたりしてたら6月も終わってました。 あ、あと最近知り合いに誘われてサバゲにもちょこちょこ顔だしていました。

無限LT会 #2 開催しました

前回 5/12 に無限LTを開催しました。

blog.zoe.tools

前回のイベントを開催したときは準備期間が実質1週間ほどでしたが、

今回は準備期間1ヶ月ちょっと時間を取って入念に準備をしてきました。

準備期間を多く取ったので、いろいろ新たな取り組みをしてみたりしていました。

参加者の皆さんに少しでも楽しんでもらえてたら幸いです。

コンパスページは下記です。だいぶ煽ったサブタイトルですねw

このコンパスページを公開してから1日と経たずに参加枠が埋まってしまい、運営一同ビックリしていましたw

oysters.connpass.com

当日の様子

当日はハッシュタグで参加者の皆さんにいろいろつぶやいてくださってるので見てみてください〜。

togetter.com

発表順は司会がシャッフルして決めます。

発表順をシャッフルするキュアセブン
発表順をシャッフルするキュアセブン

下記発表の一部です。

今回からの取り組みとして、各LTのなかからベストLTを決めました!

無限LT会 #2 のベストLTに輝いたずんださん

ベストLTに輝いたずんださんには「無限LTシャツ」を贈呈させていただきました。

最後は懇親会でみんなでのんびりお話してました。

懇親会の様子
懇親会の様子

最後に

次回の無限LT会の運営準備もすすめています。また準備ができたら、コンパスページで募集しますので楽しみに待っていてください!

【開催レポ】 Oysters ゆるゆる無限LT #1 【運営視点】

f:id:zoe302:20190515112703j:plain

どうもお久しぶりです。

今回は私が所属している Oysters という若手ものづくりコミュニティで企画、開催したゆるゆる無限LTの運営側の立場で記事を書きたいと思います。

oysters.connpass.com

無限LT 開催のきっかけ

もともと、OystersにはLTジャンキーが多数存在しており、LT会を不定期開催していました。

そんなLTジャンキーが集まったLT会が普通に終わるはずもなく、気づいたらみんなLTを聞いているうちに次のLTネタを作り、そのまま発表しだす、ということが起きました。この発表スタイルがLTジャンキーたちにはひどく好評で無限LTと勝手に名付けられ、その後も不定期で開催されていました。

その後、某氏によってオープンな活動としてやってみたい、ということで提案を頂き、開催に至りました。

その経緯などについては下記ブログ参照。

www.nyamucoro.com

Oysters 所属メンバーから運営メンバーを募り、内容や会場確定、企画から開催までを急ピッチで準備を進め公開したイベントページが上記のコンパスページとなります。

会はどうだった?

会の運営は参加者の協力もあり非常にスムーズにいきました。会のアンケートもとったのですが、皆さんとても満足いただけたようで、運営としてとても嬉しかったです。

実際の会がどうだったか等については参加者がいい感じにまとめてくれてたり、ツイッターハッシュタグに投稿してくれているので、ここでは言及はしませんが、気になる方はぜひそちらも参照してみてください。

ハッシュタグ

twitter.com

参加者のブログ

shiningcureseven.hatenablog.com

scrapbox.io

blog.pinkumohikan.com

(こちらは主催、企画者だけど) www.nyamucoro.com

どんなことしたの?

今回、主催は ういろう🍤👩🍤@新卒3年目PHPer (@nyamucoro) | Twitter が引き受けてくれたので、私の方では必要そうなタスクの洗い出しや、相談役、手が回ってなさそうな部分のサポートに徹するようにしていました。

タスクの洗い出しや、タスク管理に関しては github の イベント企画 issue で議論の上、別途派生した issue を切り、プロジェクトで進捗管理をしていました。

開催までの issue github.com

タスク管理用のプロジェクト

github.com

特にどんなことに気をつけていたの?

会の開催までで気をつけないと行けない大きなタスクとしては、下記の通りです。

  • 日程のFIX
  • 会場の確保
  • イベントページ(Connpassページ)の公開

上記タスクについては、どれがかけても開催することができず、それぞれ相互に作用し合うタスクでもあるため、慎重に進める必要もあります。

それ以外で今回、特に気をつけたこととしては、イベントの開催名についても議論を行いました。

もともと仲間内で無限LTという名でやっていたのですが、どうしても無限LTという名前だけでは、LT初心者や初参加者に「難しそうなイベント」と思われてしまわないかという懸念がありました。

というのも無限LTの効果として、「一日に何回もLTを作って発表してを繰り返し、かついろんな人のLTを聞くことでLTのスキルが一日で大幅に磨かれる」と考えていたため、LT初心者こそ参加の価値が高いと考えていたためです。

なので、LT初心者でも参加しやすいイメージを持ってもらうためにどうすればよいのかについて議論を重ねました。その結果、イベントに「ゆるゆる」をつけ、ターゲットユーザも初心者がわかるようにして、初心者歓迎の雰囲気を出してみました。少しでもゆるい雰囲気が伝わっていれば嬉しいです。

今後は?

公開版第一回をやってみた所感としては、参加者にもかなり好評だったかなと思っていますので、第二回以降も企画していきたいと考えています。

ひとまず、今週振り返りを行うので、その後振り返り内容を活かし、次回開催を企画していきます!

なので第一回の発表時間でLTしたりないよ!という方や、第一回行けなかったから第二回参加したいよという人は今のうちにLTネタに磨きをかけておいてくださいw

それでは第二回の無限LTでお会いしましょう〜。

f:id:zoe302:20190515112758j:plain