僕のYak Shavingは終わらない

車輪の再発明をやめたらそこには壮大なYakの群れが

nanapi勉強会 vol6 - エンジニアとデザイナーの協働 に行ってきた!

top

http://nanapi.doorkeeper.jp/events/18274

Time Schezdule

時間 テーマ 発表者

19:00〜19:30 開場・受付開始 -

19:30〜19:40 挨拶 株式会社nanapi和田

19:40〜20:00 プロダクト開発を最適化するためにやめた4つのこと 株式会社nanapi 小島 泰洋

20:00〜20:20 Coineyのチーム文化 コイニー株式会社 松本 隆応

20:20〜20:40 未定 株式会社VASILY 村田 卓朗

20:40〜21:00 Qiita/Qiita:Teamの開発 Increments株式会社 小西 智也

以下個人的まとめ。

※個人の主観が入っているので、必ずしも発表内容を反映しているわけではない部分があります。予めご了承ください。また修正がある場合は即座に修正させていただきます。

19:40〜20:00 プロダクト開発を最適化するためにやめた4つのこと 株式会社nanapi 小島 泰洋

kozyty

nanapiの4人目のエンジニア

@kozyty

nanapodというpodcastをやっている メンバーをゲストに呼んだ雑談が主。

kozytyがおくる、nanapiのpodcast “nanapod”はじめました。 | kozyty.com

今日はemosiの話。知らん。

会議をやめた

  • その変わり席を隣にして蜜にコミュニケーションするようにした

カンバンをやめた

  • Pivotal+Slackを使ってる

できるだけ開発をやめた

  • 外部サービスにあるものは全面的に頼るようにした
  • 辺に最適化してしまうのを避けれるようになる

エンジニア、という型にハマるのをやめた

  • 開発以外のプロダクトに関する部分に集中するようにした

20:00〜20:20 Coineyのチーム文化 コイニー株式会社 松本 隆応

coi

Coineyは今は30人くらいに一気に増えた。デザイナーの人。

完璧主義による衝突

完璧なデザイン vs 理想のコード

本質のクオリティが低下する。無駄な部分に注力してしまう。プライドがある。変なものを出すのは恥ずかしい。

→100%をやめる。70%でいいとする。

作業は少なく、仮説検証を早目にやる

無駄な作り込みをして、現場で混乱が発生した。

UIなど遷移を増やすと開発コストもかさむし、単純作業も増える。

まずは現場を見て、それでUI・機能をつくって仮設を検証する

役割を意識しすぎる

助けてって悲鳴を上げている人がいても、領域を区分しすぎてしまって誰も助けない事象が発生してしまう。誰かが助けると思うのではなく、全員が互いに問題を共有して解決していくことが重要。

そのためには、自分自身の肩書を捨てることが重要。

20:20〜20:40 株式会社VASILY 村田 卓朗

(題名、ぎりぎりまで未定だったので、最初のスライド見逃してわからなかった。なんだっけ?)

iqon

エンジニア。 現在はAndroidエンジニアの統括。

iQonの開発者。めっちゃ優秀やん(一時期ベンチマークしていたのでわかる)。

ディレクターの役割がすごい多くて、デザイナーはデザイン、エンジニアはコーディングと、ボールが偏っていた。

またディレクターがHubになっているので、コミュニケーションもディレクターに集中してしまう。

ディレクターがやっていたことを他に流して、デザイナーとエンジニアの役割を拡張する。

  • ディレクター
    • ビジネス・接客交渉
    • スケジュール管理(全体かな)
  • デザイナー
    • デザイン
    • ユースケース
    • アンケート
    • アンケート作成
    • スケジュール管理(自身の)
  • エンジニア
    • コーディング
    • ユースケース
    • アンケート
    • 数値管理
    • スケジュール管理(自身の)

互いのコミュニケーションコストが下がって、エンジニアとデザイナーとのコミュニケーションが増えた。

リリースまでのフロー

→デザイン→開発→リリース

これだと動かしてみてからダメな部分に気づくことが多かった。

→デザイン
  →開発
    →リリース

デザインと開発の期間を被せた。早めに問題がわかるようになった。 軌道修正が早くなった。

最後にどれだけ磨き上げるかが重要。

Qiita/Qiita:Teamの開発 Increments株式会社 小西 智也

qiita

Qiitaのデザイナの方。開始から3.5年。

Qiita系はデザイナ2人、エンジニア3名で行っている。

文化

  • HRT(謙虚、尊敬、信頼)
    • ちーむぎーくで紹介されていたやつ
  • 属人性の排除
  • Focus

詳しくはこちら!

QiitaやKobitoを作る開発チームの文化 - Qiita Blog

体制

常に見直す。

基盤

  • Githubを全体で使う
    • デザイナーも4000コミットくらいしている
    • デザイナーもpull-reqしている
    • エンジニアとデザイナのコミュニケーション用でありデザイナーとデザイナーでもやりとりしてる
  • Slack
  • Qita::Team
    • 日報
    • 今後の方針などの重いやつも書いている
    • なおかつドッグフーディング

  • スクラム(みたいなやつ)
  • 課題の追求
    • 入社仕立てのr7kamuraくんがぶっこんで来て議論が一日中続くこともあった(良い意味で)
  • 検証サイクル(ユーザーヒアリング)

ポジションをとる

全員がお伺いを立てて物事が進まないことがある。なので個人が意見を主張して物事を進めていく。

まずは何か思ったら身近な人に話してみる。他のメンバーの意見を聞く。

意見を主張すると軋轢が生まれるかもしれないが、むしろウェルカム。

Mac Book Proについての小並感

https://lh3.googleusercontent.com/-z-DsTLPnIa0/VE9po_uiwKI/AAAAAAAAt4E/6CgmUbZJ4E8/w2234-h1676-no/IMG_0262.JPG

MacBook Proを購入 - Apple(日本)

僕が買ったのは下のマック。

http://i.gyazo.com/a0bdbf1ddc66c4a8a91637535d65a2c8.png

以下小学生並みの感想

  • 今までMBA11だったけどそれと比較して
    • 当たり前だがちょっと重い
      • だがバックパックを買ったので持ち運びは楽勝
      • だがしかしオフィス内で移動するときはちょっと手から滑りそうになって怖い
    • キーボード
      • MBAとちょっと配置が違うのがちょっとストレス
        • 左手小指がデフォでCtrlじゃないとかちょっとないわ
        • MBP関係ないけど英語キーボードはやっぱりreturnが小さい
        • 気のせいかもしれないけど、全体的にキーからキーの間に距離を感じる
  • 13インチRetina
    • 背景がすごく綺麗、すごくすごーく綺麗、すごーry
    • あとは地味な変化しか感じない正直
    • デフォルトのディスプレイの設定だとMBA11インチよりも表示領域がすくなるなるの謎
    • 解像度が高いためかドラック時に描画で引っかかる
    • Retina対応してないソフトやサイトだと画像がものすごく残念になる
  • Yosemite
    • Dashboardがデフォで表示されてなくてカレンダーすぐみれなくてこまったけど多分これは自分のせい
      • 起動してないだけなので、普通に起動すればいい
    • Spotlightをこれを気に本格的に使ってみたらAlfredの使用回数が一日数百回だったのが数回以下になった
      • ついでに以前していたカスタマイズ設定が消えてやる気を失った
      • 英辞郎をすぐ引けるようにカスタマイズしていたが、Mac内臓の辞書も優秀じゃん
    • 右上押すと出てくる通知がiOSっぽくなって便利。これは好き。
    • うごかなくなったもの

たまにMBA11インチ触ると落ち着く症状が出ている以外は基本的には快適です。

気になるAdvent Calendar 2014

ん、Excel

各企業ノベルティシール剥がし選手権

退職したので社用PCを返すときに僕は固まりました。

私物のステッカー等は、はがして返却すること

((((;゚Д゚))))ガクガクブルブル

https://lh3.googleusercontent.com/-qC_QFmxZ9oU/VFNmPqyblfI/AAAAAAAAt40/FyP_WU4ew2E/w1782-h1376-no/IMG_0280.JPG

(((((((( ;゚Д゚))))))))ガクガクブルブルガタガタブルブル

https://lh3.googleusercontent.com/-DcLg7ObK28o/VFNmRLRZDvI/AAAAAAAAtr4/u45QWXgDeDA/w1834-h1376-no/IMG_0281.JPG

ちょっと控えめに貼っていたにしろこれはつらい・・・。

曇りなき眼で剥がし始める

一番はがしやすいやつから行きましょう。

まずはコロプラ

https://lh5.googleusercontent.com/-hFwb3bqF_T0/VFNmSuN7ZqI/AAAAAAAAtsE/756v8t0zEFc/w1032-h1376-no/IMG_0282.JPG

え!?

えぇ!?

そういうタイプなの!?

綺麗に残ってる。

https://lh3.googleusercontent.com/-jvUJONq7bvQ/VFNmjADfZNI/AAAAAAAAtuI/GQKlR7exIIs/w1032-h1376-no/IMG_0293.JPG

うん、綺麗だ。

いきなりこれでは先が思いやられる。。。

あとまわしだ、次はNiigata.pm

f:id:kazuph1986:20141102131646j:plain

うえーい!はがしやすい良いシール!これは再利用できそうなので取っておこう。

お次はtwelvesouthさん

https://lh6.googleusercontent.com/-r0LDdUtpUdk/VFNmVet5BqI/AAAAAAAAtsc/y_hZ-nU7bSg/w1032-h1376-no/IMG_0284.JPG

あ、これは…これはだめなやつだ…爪をやられたので次…

次はgithubと見せかけたcakeのシールです。

https://lh4.googleusercontent.com/-FHwerSG45hg/VFNmW9yV5aI/AAAAAAAAtso/6QX-gZnIjHM/w1032-h1376-no/IMG_0285.JPG

これは!思った通りだ!小さい時にタンスに貼っちゃうシールと同じタイプのやつだ!!

https://lh5.googleusercontent.com/-j3mNCjIZnuo/VFNmYF9B3qI/AAAAAAAAts0/GFSjitDai-E/w1032-h1376-no/IMG_0286.JPG

ぐはっ!

https://lh6.googleusercontent.com/-3vBfBgqOmu0/VFNmhiRYz6I/AAAAAAAAtt8/vu_h3qLZG6s/w1032-h1376-no/IMG_0292.JPG

うん、やめよう、、、これは道具の登場を待とう、、、

https://lh5.googleusercontent.com/-VITTjpx5b7U/VFNmbTg80KI/AAAAAAAAttM/5wMmB7w5lOY/w1032-h1376-no/IMG_0288.JPG

よっしゃ!幻のサービス「なみっく」は一瞬で剥がせたぜ!!

https://lh3.googleusercontent.com/-JkD-rNOlAgM/VFNmc6XvjiI/AAAAAAAAt48/nT9t_ympuNc/w1136-h1376-no/IMG_0289.JPG

剥がしたあとも綺麗!完璧!

https://lh5.googleusercontent.com/-5tNQjQtE1VY/VFNmef_crWI/AAAAAAAAttk/U7WOkmQxeGE/w1032-h1376-no/IMG_0290.JPG

Co-Workはどうかなぁ?

https://lh3.googleusercontent.com/-8cFW1AKLv7U/VFNmgKibGkI/AAAAAAAAttw/psXffxkVgUE/w1032-h1376-no/IMG_0291.JPG

しゃっっっあああああ!!

よし、次はここをせめるぜ。

https://lh4.googleusercontent.com/-yyKDi6m1w64/VFNmlH_kAgI/AAAAAAAAtuU/0Vv7ATDFe2Q/w1032-h1376-no/IMG_0294.JPG

まずはお父さん

https://lh3.googleusercontent.com/-NQiTMCG6ayo/VFNmmZpiccI/AAAAAAAAtug/n6VdlPrRHII/w1032-h1376-no/IMG_0295.JPG

うん、だよね、、、いいよ、もういいからお父さんは

チームラボはどうかなぁ?

https://lh3.googleusercontent.com/-I3U7EqiSK1I/VFNmpK1DXNI/AAAAAAAAtu4/ioxCYjWuaXU/w1032-h1376-no/IMG_0297.JPG

https://lh3.googleusercontent.com/-Juj-Ryh3uvA/VFNmq4-kD1I/AAAAAAAAtvE/NUnsAobBvXc/w1032-h1376-no/IMG_0298.JPG

綺麗に剥がれた!さすがチームラボ!

https://lh4.googleusercontent.com/-4wmlbE98cGU/VFNmsz7JlYI/AAAAAAAAtvQ/CTO7TZwkXKA/w1032-h1376-no/IMG_0299.JPG

うん、最近は安定しているTwitter!さすが!

お次はpixiv!

https://lh4.googleusercontent.com/-A_UjKD6Oo4Q/VFNmvE_4RmI/AAAAAAAAtvc/6E7nBxN4UZU/w1032-h1376-no/IMG_0300.JPG

さくっと

https://lh3.googleusercontent.com/-OfR36IWQmpA/VFNmwRieaCI/AAAAAAAAtvo/t44MzitGUmI/w1032-h1376-no/IMG_0301.JPG

いったぜ!!

お次は天下のAWSですよ!

https://lh4.googleusercontent.com/TEzyKSATaGzq5-ckSSIqiQzZGBQ8grRXFSsGCTODzg1V=w1032-h1376-no

あ、これは、まさか、、、

https://lh3.googleusercontent.com/-kqeyq5HEqtM/VFNmzoW5VUI/AAAAAAAAtwA/O7K3m7SfaGs/w1032-h1376-no/IMG_0303.JPG

あ、やっちゃった、、、タンスだ、、、

AWSのことは忘れてオロさん行きましょう。

https://lh4.googleusercontent.com/-ixPmnTUKR_s/VFNm1EVArEI/AAAAAAAAtwM/Gcr1d-VFvUU/w1032-h1376-no/IMG_0304.JPG

おろ?

https://lh4.googleusercontent.com/--kcIZbrQ4vY/VFNm2t0eZjI/AAAAAAAAtwY/56ZLJX9Zg6U/w1032-h1376-no/IMG_0305.JPG

おろォォォォォォ!!!!

涙を拭いて次に行きましょう(´;ω;`)

https://lh3.googleusercontent.com/-gXKrYEB3bb8/VFNm4PNTgvI/AAAAAAAAtwk/ZA0_qtcxdLE/w1032-h1376-no/IMG_0306.JPG

mobageは?

https://lh3.googleusercontent.com/-6MCWOal02VU/VFNm5n0NFeI/AAAAAAAAtww/mkD61CTfyNw/w1032-h1376-no/IMG_0307.JPG

OK!

次はBeatRobo

https://lh6.googleusercontent.com/-cVfg5o5-guE/VFNm7FnOdyI/AAAAAAAAtw8/teTUxVmo038/w1032-h1376-no/IMG_0308.JPG

いける!

https://lh4.googleusercontent.com/-3XTilgAxa5Y/VFNm8lQWR3I/AAAAAAAAtxI/Xk0OvGf2tYg/w1032-h1376-no/IMG_0309.JPG

HTML5はOK!

フォースク行こう!

https://lh5.googleusercontent.com/-dorclj-zDsM/VFNm-Pm9uPI/AAAAAAAAtxU/X6wUFSO9_4s/w1032-h1376-no/IMG_0310.JPG

あれ、いやな予感?

https://lh5.googleusercontent.com/-bH9YJGO7Pi8/VFNm_aa0kkI/AAAAAAAAtxg/S4DsepJrLIs/w1032-h1376-no/IMG_0311.JPG

綺麗に剥がれた!そもそもこのシール紙じゃないっぽい!!

enchantJSはぁ?

https://lh4.googleusercontent.com/-eeBw5sb5W_o/VFNnBDj8OHI/AAAAAAAAtxs/WQ01U_uS9nQ/w1032-h1376-no/IMG_0312.JPG

おっけーくまー!!(・(ェ)・)

https://lh5.googleusercontent.com/-0fPq9RAerQY/VFNnFLIRDDI/AAAAAAAAtyE/n1AaSUVAbcU/w1032-h1376-no/IMG_0314.JPG

https://lh6.googleusercontent.com/-0TZk49UW5pM/VFNnG69hNFI/AAAAAAAAt4Q/dLHAHmCVi5E/w1834-h1376-no/IMG_0315.JPG

https://lh5.googleusercontent.com/-H9gCec9BnOA/VFNnISTi6NI/AAAAAAAAt5I/JloOhH-hMbY/w1650-h1376-no/IMG_0316.JPG

ふう、一旦めぼしいのは剥がした。

これからはさっきの積み残し処理だ、、、

Zippoとカッター

https://lh3.googleusercontent.com/khlXmhJ91jsx6exJ1wfheXgnX4AXQ7ct_2nEQQzKw2LL=w1032-h1376-no

まずはZippoだけ塗ってシールを弱らせる

https://lh6.googleusercontent.com/-5ZmbBHdQ4SY/VFNnMXQ3DYI/AAAAAAAAt4Y/ntPWDs8YElM/w1834-h1376-no/IMG_0318.JPG

ちょっとまってからー

https://lh3.googleusercontent.com/-HE0Fqmc-CD0/VFNnOL4l23I/AAAAAAAAt4g/croGU4LDj7k/w1834-h1376-no/IMG_0319.JPG

はい無理〜!!

https://lh3.googleusercontent.com/-EeJ1Lyw956o/VFNnPv5tkTI/AAAAAAAAtzM/JRdyJeRofwc/w1032-h1376-no/IMG_0320.JPG

とここで援軍のカッター攻撃が炸裂!!

https://lh4.googleusercontent.com/-zIYycskM4Gw/VFNnWI30AaI/AAAAAAAAtz8/ulIL5jJMlMQ/w1032-h1376-no/IMG_0324.JPG

刃を水平に保つのが重要です!

https://lh3.googleusercontent.com/-fDUrqQR2u-8/VFNnXpr5NrI/AAAAAAAAt0I/S3jpL0RBFLk/w1032-h1376-no/IMG_0325.JPG

一応剥がれた!

https://lh4.googleusercontent.com/-9f1rZAe5X3U/VFNnZRS_qmI/AAAAAAAAt0U/BLDbMxBVZvA/w1032-h1376-no/IMG_0326.JPG

これをZippoをつけたティッシュで吹くと〜?

https://lh6.googleusercontent.com/-WLk1TSTmpS8/VFNnbFyKbCI/AAAAAAAAt0g/IDdd5llHFWo/w1032-h1376-no/IMG_0327.JPG

ピッカピカ!!!

タンスも〜?

https://lh5.googleusercontent.com/-pQyJuCcDUZU/VFNnct33-SI/AAAAAAAAt0s/gsHiB1Jh6ks/w1032-h1376-no/IMG_0328.JPG

この通り!

https://lh3.googleusercontent.com/-jvRlFnq4HLA/VFNngJBnQhI/AAAAAAAAt1E/-dkXfF8g6EQ/w1032-h1376-no/IMG_0330.JPG

cakeも〜

f:id:kazuph1986:20141102131358j:plain

ごりごり

https://lh4.googleusercontent.com/-tOfFWZ90C28/VFNnmCxUqVI/AAAAAAAAt10/5JlwtIYYkOY/w1032-h1376-no/IMG_0334.JPG

スパーン!!!

見ためピカピカ!(?)

https://lh5.googleusercontent.com/-7Cwv9wWZbdc/VFNnnxJqlGI/AAAAAAAAt2A/22jsLQdFUE8/w1032-h1376-no/IMG_0335.JPG

ラストのコロプラさん!!!

https://lh3.googleusercontent.com/-x6q4i0q7Sgk/VFNnp05kTgI/AAAAAAAAt2M/HKEqI9i_sc8/w1032-h1376-no/IMG_0336.JPG

おや?

https://lh4.googleusercontent.com/-NHDbSvfOxL8/VFNnrT6_J3I/AAAAAAAAt2Y/lHODHeQu_Z4/w1032-h1376-no/IMG_0337.JPG

おやおやぁ!!

https://lh5.googleusercontent.com/-xFPwWZ-ufgo/VFNns56CKZI/AAAAAAAAt2k/OhwAKgl_Ctw/w1032-h1376-no/IMG_0338.JPG

剥がすのがおもしろい!!

https://lh3.googleusercontent.com/-tU1h74evAfU/VFNnueHmVfI/AAAAAAAAt2w/QHeOnTt6b3w/w1032-h1376-no/IMG_0339.JPG

綺麗さっぱり剥がれました。

https://lh6.googleusercontent.com/VOteivcGSqT3mrm1oURmmoRhIxY3WtpnZH81K_XCR72w=w1588-h1376-no

https://lh4.googleusercontent.com/-W0zxLFSdvgk/VFNnv0rlFkI/AAAAAAAAt28/NA-fywb26io/w1032-h1376-no/IMG_0340.JPG

以上、探しやすさの目安にどうぞ〜

株式会社ガイアックスを退職しました。

株式会社ガイアックスという最近ではソーシャルサポート系で稼いでいる会社を昨日(2014/10/31)退職しました。

(超短期間も含め)在籍していた人で有名な方だと、「Zごろう」さんとか「Xろん」さんとか「Cよんご」さんとか「Aまちゃん」さんとか 最近だとPerl界で超有名な大型フリー素材新人のpapixくんとか、現JPA理事の肥後さんがいたりして なんだかんだエンジニア界隈でも露出している良い会社だと思います。

また最近世間を騒がせている「Mむらい」さんや「TOM」もガイアックス出身です。面白いですね!!

退職した理由

単純にプライベートでやってたプロジェクトがいい感じにノッてきたのでそれに専念したかったからです。

つまり起業が理由です。

ガイアックスのやっている事業ドメインと関係ないプロダクトだったこともあり、 そのへんはまったく後腐れなく送り出してもらえる運びとなりました。

前職について

新卒で入った会社だったのでかなりできないところから育てていただきました。

Webアプリケーションの基本的な部分は内定時代の研修で結構ご迷惑をかけながらも 学ばさせていただいて、なんとか一人でPerlのWebアプリケーションをかけるようになり、 その後の新人研修ではAndroidアプリを一人一つつくれるところまでやりました。

その後はコミュニティサイトをつくったりFacebookアプリをつくったりブログをつくったりiPhoneアプリAndroid、運用改善ツールをめっちゃ導入したりしてました。

またマインド的にエンジニアも数字が見れないとだめだということで、 社長自らの経営講座を実施してくれたり、他の営業の方々からビジネスの話を聞く機会もありました。

そんな感じで起業できる人材を多く育てていて、 最後の方は新規事業に従事していたのですが、 エンジニアしながら営業をやったりマーケティングにも携わることができました。

人によるかもしれませんが、エンジニアに集中したい同期はそのままエンジニア専任になっていたし、 自分みたいに事業の営業も経験するなど

「その人自身がいきたい方向へ行くのをアシスト」

してくれる素晴らしい会社でした。

つながり

退職となってから一番うれしかったのは、今まで一緒に働いた人がちゃんと僕と連絡をとってくれようとしたことです。

入社当時の同期の一部とはこれからも一緒ということもあるし、一緒に開発をした仲間というよりも戦友のような人も自分がやめると聞いて駆けつけてくれたり、メッセージを送ってくださったりしてくれて本当に嬉しかったです。

今後もこの縁を途切れさせずにまた一緒に働ける日が来ると嬉しいなと思いました。

これから

Webアプリ、スマフォアプリが書けるようなったのでこれからはIoTという文脈で マイコンの組み込みをやったり回路をつくったりCADでメカの設計ができるようになれればと思います。

まずはスマフォとのマイコンインターフェイスあたりから攻めてますがかなり楽しいです。

半導体チップの英語のデータシート(仕様書)を眺めながらプログラミングするのは、 研究時代の論文を見ながら実装するのに似ていて先進的なことをやっている気持ちになれてワクワクします。

常に新しいことを学びながらものをつくる。

自分はこういうことが合っているなぁと実感しながら過ごす日々です。

最後に

自分をここまで成長させてくれた前職には本当に感謝しています。 僕が入ったのはだいぶ過渡期の時でしたが、 最終的には朝礼でほろりもしてしまうくらいのいい会社になりました。

今まで本当にお世話になりました。

ありがとうございました。

ガイアックスでは起業家マインドを持ったエンジニアを募集しています。

Mac初期構築メモ 2014

https://lh4.googleusercontent.com/-TrYlRgwv0QU/VE9padfRvwI/AAAAAAAAtPs/w5TW_oNlUuI/w1834-h1376-no/IMG_0255.JPG

初期設定

  • トラックパッド
    • 大体有効に
  • ドック
    • サイズは小さく
    • 拡大にチェックを入れて中くらいに
  • ミッションコントロール
    • ホットコーナー
      • 左上…アプリケーションウィンドウ
      • 左下…Mission Control
      • 右下ディスプレイをスリープさせる
  • キーボード
    • キーボードタブ
      • F1, F2などのすべてのキー〜って書いてある部分をチェック
      • 修飾キーからCaps LockをControlに変更
    • ショートカットタブ
      • Spotlight検索フィールドを表示は⌘スペースに変更
      • 入力ソースの前の入力ソースを選択は^スペースに変更
  • アクセシビリティ
    • ズーム機能をオン
    • スクロールジェスチャと修飾キーを使ってズームにチェックを入れ⌘に設定

アプリケーション

  • Chrome
    • ブックマーク同期、複数ユーザー設定しているとすぐに環境ができて便利
  • Slack
    • チームとのチャット
  • Skype
    • いろんな人とチャット
  • Astro
    • Facebookメッセージだけを見れるので気が散らない
  • Alfred
    • 高機能なランチャー。カンペ機能が好き。
  • Pocket
    • あとで読む
  • Better Touch Tool
    • Win7みたいに画面をドラッグして横に寄せる
  • ShiftIt
    • ショートカットを使ってウィンドウの横詰め、全画面などが可能
  • Dropbox
  • Evernote
  • Twitter
  • LINE
  • Karabiner
    • HHK mode
    • key repeat tuning
    • MBPならOption_RをFnにして、Fn+F1系を明るさ・ボリューム調整にチェック

http://i.gyazo.com/1b5e2be65f7363cdf81d3d19210f1e6e.png

  • Spotify
  • Google IME
    • 環境設定から円マーク入力時にバックスラッシュになるように設定
  • Android File Transfer
  • ChromeCast
  • ClipMenu
    • 色々貼り付けられて便利

開発用アプリケーション

  • iTrem2
    • 何はともあれこれがないと始まらない
  • Xcode
    • iOSエンジニアなら
  • Dash
    • ドキュメント用
  • Colors
    • 画面上の色を採取してRGBで取得できる
  • Gyazo & Gifzo
    • 画面の静止画、動画のキャプチャ
  • Skitch
    • 画面キャプチャとモザイク、説明線、コメントなどの追加
  • KeyCastr
    • 画面に今入力しているキーを教示できる。技術系プレゼン時のデモ用。
  • LightBlue
    • Buletooth機器に接続できる。BLEモジュールのデバッグ用。
  • Reflector
    • iPhoneをつないで画面錠に表示できる
  • Sequel Pro
    • サーバー指定してSSHでログインしてmysqlをコマンドを叩いてコンソールに入るかのごとくをGUIで全部できる

brew アプリケーション

Install Homebrew

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew list
ansible                         doxygen                         htop-osx                        libtool                         openssl                         rlwrap
apple-gcc42                     dvm                             hub                             libusb                          ossp-uuid                       rrdtool
asciidoc                        elasticsearch                   icu4c                           libusb-compat                   packer                          sane-backends
aspell                          emacs                           imagemagick                     libxml2                         pango                           snappy
autoconf                        fontconfig                      influxdb                        libxslt                         pcre                            sqlite
automake                        fontforge                       ino                             libyaml                         pdftohtml                       terminal-notifier
bazaar                          freetype                        ios-sim                         little-cms                      peco                            tesseract
boot2docker                     gauche                          irssi                           little-cms2                     phantomjs                       the_silver_searcher
bsdmake                         gd                              jasper                          lua                             picocom                         tig
cabextract                      gdb                             jp2a                            macvim                          pidof                           tmux
cairo                           gdbm                            jpeg                            massren                         pixman                          tree
casperjs                        gettext                         jq                              maven                           pkg-config                      vim
chromedriver                    git                             leptonica                       mecab                           plenv                           watch
cmake                           git-flow                        leveldb                         mecab-ipadic                    postgresql                      wget
codemod                         glib                            libevent                        memcached                       proctools                       wine
convmv                          gnu-getopt                      libffi                          mercurial                       protobuf                        winetricks
cscope                          go                              libgpg-error                    mobile-shell                    pstree                          xmlto
ctags                           gobject-introspection           libgphoto2                      mongodb                         qt                              xz
curl-ca-bundle                  gradle                          libicns                         mysql                           readline                        zsh
docbook                         graphviz                        libksba                         ncftp                           reattach-to-user-namespace
docbook-xsl                     gts                             libpng                          netpbm                          redis
docker                          harfbuzz                        libtiff                         nkf                             ricty

Font

http://sourceforge.net/projects/sourcecodepro.adobe/

homebrewを使ってiTerm2でRicty for powerline設定した - Qiita

CLI Tools

brew install git
brew install zsh
brew install reattach-to-user-namespace
brew install tmux
brew install wget
brew install hub
brew install tig
brew install sqlite
brew install ansible
brew install tree
brew install watch

brew tap laurent22/massren
brew install massren

# http://qiita.com/yu_suke1994/items/b9fa651d77aed2eae339
brew tap supermomonga/homebrew-splhack
brew install cscope
brew install lua
brew install --HEAD cmigemo-mk
brew install --HEAD ctags-objc-ja
brew install macvim-kaoriya --HEAD --with-lua --with-cscope
brew linkapps

or # https://github.com/splhack/macvim/releases

curl https://raw.githubusercontent.com/kazuph/dotfiles/master/install.sh | sh

git clone https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

Install Programming Language

brew install go
 go get github.com/motemen/ghq
brew install node

brew install rbenv ruby-build
brew install libtool libxslt libksba openssl libyaml readline
rbenv install 2.1.4

おまけ

MBPのダンボールにおにぎり4つ入ってた

https://lh5.googleusercontent.com/-icFCkl_qSK0/VE9pcAFNV-I/AAAAAAAAtP4/4tIljaL0Z_Q/w1032-h1376-no/IMG_0256.JPG

ISUCON2014予選でがんばってきた

去年に引き続きISUCON予選に参加しました。

チーム名は「/^o^\マッミョサーン」で最終スコアは26890でした。チームメイトはid:kazupyongと@kokonokaです。

18時過ぎた時点での管理画面での順位は24位でした。

一日目チームはベンチマークツールに致命的なバグがあってそれで高スコアを出していたチームがいたみたいですが、こっちは普通にworkload 18くらいでフィニッシュしました。

言語はrubyで、今回特にミドルウェアの変更・追加は一切行いませんでした。

スコアの上がり方はこんな感じ。

score

前半はずっとinputと最初の一手の実装に時間を使ってしまっていて、全体の時間を有効に使えませんでした。このへんは完全なる実力不足ですね><

やったこと

初期準備

まずはいつものように公開鍵を配ってメンバー全員がsshで入れるように。

その後bitbucketでレポジトリをつくってpush。そこからアプリケーションを眺めて全容を把握。DBの構造とapp.rbを一通り眺めてbenchを流して見るって感じ。

初期スコアは1200くらい。

それが終わったらまずはmysqlのスロークエリを出します。

my.cnf

[mysqld]
slow_query_log=ON
slow_query_log_file=/tmp/mysql-slow.log
long_query_time=0

pt-query-digestが便利なのでそれもインストール。

sudo yum -y install perl-DBI perl-DBD-MySQL perl-Time-HiRes
sudo yum -y install perl-IO-Socket-SSL
sudo rpm -ivh http://www.percona.com/redir/downloads/percona-toolkit/2.2.10/RPM/percona-toolkit-2.2.10-1.noarch.rpm
pt-query-digest /tmp/mysql-slow.log > ptqd.log

こんな感じでスロークエリを解析しました。

ヤバイやつからワーストでランキングされて見れるので機械的に上から改善して行ってもほぼ問題ないと思います。

またnginxでaccess.logも出しました。レスポンスタイム含めてLTSVで出しましたが、特にLTSVである意味はなかったと思ってます。

/etc/nginx/nginx.conf

    log_format  ltsv  'host:$remote_addr\t'
                      'user:$remote_user\t'
                      'time:$time_local\t'
                      'req:$request\t'
                      'status:$status\t'
                      'size:$body_bytes_sent\t'
                      'referer:$http_referer\t'
                      'ua:$http_user_agent\t'
                      'taken:$request_time';

    access_log  /tmp/access.log ltsv;

アクセスログのレスポンスタイムなども集計できるスクリプトをつくって以下みたいに出力してました。

NGINX REPO
sum[sec] ave[msec] count URL
40       69        591   POST/login
18       18820     1     GET/report
7        79        100   GET/mypage
4        4         1183  GET/stylesheets/bootstrap.min.css
4        4         1183  GET/images/isucon-bank.png
3        3         1183  GET/stylesheets/bootflat.min.css
3        3         1083  GET/
2        2         1183  GET/stylesheets/isucon-bank.css

count  status_code
5912   200
591    302
4      304

これを見るととりあえずlogin時のPOSTでレスポンスタイムの総時間が40秒となっていて他のページよりも割合的に時間がかかっているので、ここを修正すればいいことがわかります。 去年のISUCONと同じ集計スクリプトを使いまわしていたので楽でした。

login時のボトルネック外し

ログイン時にログイン成功・失敗の情報を毎回login_logにINSERTしていたこと、そしてそこからSELECTして過去の失敗履歴を算出しているクエリがワーストクエリだったことを受けて、まずはその部分で複雑なSELECTを実行しないように、専用のテーブルを作成しました。

ログイン失敗時にはそのテーブルにipとuser_idをINSERT or UPDATEして失敗数をCountして行き、ban or lockされているかはそのテーブルからシンプルにSELECTするだけでいいように変更していきました。 作業する度にスコアが徐々に上がり、1200→3000→4500となり、workloadをこの辺でいじり始めて7000ほどになり、最後にlogin_logが必要なくなったのでINSERTしてる部分も削除してスコアが1万を越えました。

終了2時間前くらいでやっとインデックスを貼る

別に最初から貼ってもいいですが、login_logなどは使わなくなることが戦略的にわかっていたので、無視して続けていました。

ここで自分たちで追加したbanとlockを管理するテーブルにおけるクエリが、スロークエリのランキグの上位を占めていたので、INDEXを貼ったら1万5千くらいまでになりました。

my.cnfのチューニング

id:kazupyongさんの秘伝のタレを豆乳!2000くらい寄与した気がします。

cannot assign requested address

このへんでベンチツールが悲鳴を上げるようになりました。直感的にulimitかなって思ったのですがとりあえず何も変わらず、最終的にtcpかなーって言ったらid:kazupyongさんが記事を発見して解決してくれました。さすが!

参考記事

http://d.hatena.ne.jp/download_takeshi/20091013/1255443592

http://blog.ybbo.net/2013/05/27/tcp%E3%81%AEtime_wait%E3%82%92%E7%84%A1%E3%81%8F%E3%81%99%EF%BC%81/

workload調整

workload 4くらいでずっと来ていたのを一気に12や18とかに増やして行き、いい場所を探しました。結果的にこれで2万くらいになりました。

nginxによる静的ファイルのキャッシュ化

どの時点でやったか忘れましたが、この変更では数百くらいしかスコアがあがらなかった認識です。

打つ手をなくし1時間くらいぶらぶらする

新規にテーブルを作成してカウントする方法は元々安牌で、時間があればmemcachedにしようと思っていたのですが、結果的に最後でバグるのを怖れ動けずにいました。

この時点でやったら1万くらい上がっていたかも?

またこの時点で、レスポンスタイムの総計が一番大きいのがGET /となっていたので、これを解決しようとも考えていました。

原理的にはクッキーに値を埋め込んで、nginx側でif文で振り分けURLをリライトすればnginx側だけでキャッシュしたページを捌けるので速くなるだろうと踏んでいましたが、

「え、それどう設定すればいいの(^q^)」ってなって断念。

普段からやってないことはやっぱりできないですね、、、

ラスト20分、思いつきの一手

GET /改善したい!って思って、超雑にrubyの変数を使ってerbのレンダリング結果をキャッシュするようにしました。unicornで10プロセス立ち上がっているので、正直効率悪いのですが、これとworkloadの調整で最後に20000から27000くらいまであがりました。

app.rb

     get '/' do
-      erb :index, layout: :base
+      if flash[:notice] == "This account is locked."
+        $html_l ||= erb :index, layout: :base
+      elsif flash[:notice] == "You're banned."
+        $html_b ||= erb :index, layout: :base
+      elsif flash[:notice] == "Wrong username or password"
+        $html_w ||= erb :index, layout: :base
+      elsif flash[:notice] ||= "You must be logged in"
+        $html_y ||= erb :index, layout: :base
+      else
+        $html ||= erb :index, layout: :base
+      end
     end

はぁー、nginx力あげたい。

終わりに

正直自分たちのレベルでやりたいことは全部やってしまっていて、できると思った実装は全部実現しただけでも良かったのですが、まだまだ実力不足ということを思い知らされました。

実力があれば、

  • テーブル増やしてカウントの対応をやったあと、memcached/redisでさらに高速化できた→実装速度不足
  • tcp周りで意外に時間を消費した→Linuxカーネルパラメータ周りの設定経験不足
  • MySQLだけでもhandlersocketが使えた?→知らん、経験不足
  • nginxの設定だけで出すべきGET /を振り分け→一度でも勉強していればすぐできた
  • 他、気づいてない部分での高速化

などできたのかなと思います。

また過去の経験からhtopやdstatは使ってるとかっこいいけど、パフォーマンスを上げることについてはなんら寄与しない

って思っていましたが今回もそうでした。強いて言うならhtop叩いてcpuが暇してればworkloadの変更の時ってことくらいですね。

測定からボトルネックを探し、そこに集中して改善作業を続けるってことは完全に実践できたと思うので、あとは

  • 測定力そのものを上げる→自分たちが気づいてないボトルネックがあるはず
  • 改善力を上げる→自分たちが実装できないことがたくさんあったはず

ということで、来年へ向けて刃を研いで行きたい所存です。

運営の方へ

楽しいISUCONをありがとうございます。

来年もまた実力を上げてリベンジしたいと思います。

来年はworkloadで何も変なことが起こらないといいですね★

お疲れ様でしたm( )m