僕のYak Shavingは終わらない

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

気になる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

BLE Boot Camp White Note : BLEのやば濃いイベントの二日間

みそかつ

※上記写真は帰りの名古屋駅で食べた「矢場とん」のみそひれかつ丼定食の写真であり本イベントとはまったく関係ありません

White Note?

  • 白紙状態からの文字起こし
  • 当日のメモやある程度のフレームがない状態から、ある項目について頭の中を全部書き出したらどうなるかという試み
    • そのため記憶違いがあるかもしれません。予めご了承下さい。
  • 下の内容は公開するつもりで書いてるので少し抽象的に書いてます
  • 以下の内容はまだ書き出したばかりなので随時URL・画像等を増やしていきます

Pick Up

  • まずこのイベントを開催してくださったことが本当にありがたかった。主催・運営された方々、講師陣、そして参加された方々に感謝します。
  • 普通のイベントでは考えられないほど濃い参加者
  • 講演・ワークショップを通した講師陣・参加者の思考をトレースできるのが本当に楽しかった
  • シーケンス図による可視化の重要性、その作成ツールを知れたのは大きかった
  • 今後のメンバーとしてのつながり、秘密のFBグループでの情報共有ができることが一番の成果

TODO

  • このページの画像・リンク・スライド資料を増やす
  • シーケンス図で自分プロダクトを描いてみる
  • 「BLE ブラックハット」
  • ソフトとハードのライフサイクルの違いから生じるスキマを埋めるBLE機器の今後の展望についてまとめる

そういえば話してないこと

  • BLEモジュールって何がいいですか?オススメ
    • それぞれのBLEのファーム開発スタイルも
  • AndroidにおけるBLE
    • 本イベントではかなりiOSよりの話が多かった

以下作業

  • ハードルの高いイベント
    • 開催は岐阜、参加費1.1万円
    • チケットは24時間で完売したらしい
    • それだけ感度が高く1万円以上払っても良いメンバーだけが集まった
    • 講師含めずとも参加者がそもそもBLEの猛者たちになった
      • 大手電機メーカー、ユカイ工学、IoT系ベンチャー(個人、複数)、VC、BLE関連の受託開発数多く引き受けている方、IoTベンチャーからプロトタイプ製作を数多く引き受けていた方などなど
    • そういう意味で場所・価格設定などが最高のフィルタリングになった
  • 豪華な講師陣
    • iBeaconのkindle本を出版した方が講師
      • AES暗号を半導体レベルで実装したことがある
      • BLE、iOS、HomeKit、セキュリティなどの仕様を隅々まで理解していて本当になんでも答えてくれた
      • 深い哲学を持ち参加者が感化されるほど
    • IAMASの教員であり、GainerArduino Fioを開発し販売していた方が主催
  • 基調講演とワークショップの複合的なイベント
    • 参加者のBLEに対する概念の穴埋め的な存在であった基調講演
    • 身の回りにある実際のBLE機器を触り、背景や通信のシーケンス的な考察、及び改善案の話合い
      • その機器の実際の開発者からの内部的な説明があることも
    • アイディアスケッチ
      • あるシチュエーション・ペルソナが持つ課題を解決するにはどういうBLEデバイスを作成すればいいのか?
        • 出来上がったものよりも、猛者たちとプロセスを共有することで得られたことが大変多かったように思う
  • 書くことの出来ない裏話の濃さ
    • 飛び火で始まった裏話、予定変更してでも聞きたいとても濃い内容
    • あるKickStarter系のデバイスの裏側的な話
    • プロトタイプエンジニアの目利き、危険案件を見分けるにはどうすればいいのか?
    • 既存のIoT機器開発者の苦労話とそれをどうやって克服しようとしたか
  • WillPower
    • 人間の根源的なやる気
    • 人間の行動は大体これに左右される
    • 寝たら回復するが、できるだけ減らさずに生きていくのはどうすればいいのか?
    • IT技術者がIoTをやるときには多くの壁が存在する、それを乗り越える力
    • 0を1にして更に100とかにするまでずっと継続していくのはどうすればいいのか?という処世術だと思った
  • シーケンス図の意外な重要性
    • ユーザーとしてクソな商品だと思ったものが、書くことでエンジニア的におもしろい商品だとわかることも
    • 共通言語の提供
    • 正直1人でアプリとサーバーサイドを書いているときは書いたことなかった・必要性も感じなかった
    • イベントドリブンじゃない場合もそうで、デバイスが絡むことでよりシーケンス図の重要性が増したと思う
    • [TODO]自分の製品でも実践しようと思った
  • アンカンファレンス
    • 聞き足りない・話合い足りないことを参加者自身がリクエスト・講師側になることも
    • ① BLEにおけるセキュリティ
      • 規格嫁
      • Webのセキュリティの技術を流用できる
      • スニファー対策・デバイスの破壊なども含めた超実践的な話
      • 講師の方によるBLEが可能なセキュリティ対策の輪郭が見えるほどまで説明してもらった(今回の技術的には一番の収穫!!)
        • そのためBLEで出来ないところ・弱い部分は各々実装する必要がある
      • その他免責などについて
    • ② ネットワークから見たBLEデバイスについて
      • 概念的な話
      • もの・人間はネットワークから見たら単なるデータベース
        • BLEのプロファイルの表現でしかない
      • 人間の行動パターンの抽出からアドテクへの道筋・グロースハックへの応用について
      • 形あるもののライフライクルの遅さと、ソフトのライフサイクルの速さ、それを埋める後付BLEの機器の価値
      • M2M、マシン同士の関わり、BLEがそれを安価に可能にしたこと
  • 3年後のBLEの中核にいるメンバーがここに集まっているのではないか?という実感と期待
    • がんばります。

お疲れ様でした。

参考

BLE Bootcampに参加した #blebootcamp

Qittaでこんな記事も書いてます。こちらも合わせてどうぞ。

IoTやるならまず知っておきたいパーツ屋・オンラインショップ

TimeTicketで上位にいたらしい

後輩がkazuphさんが上位にいるっていうからどのページか探したら普通にランキングページがあったのね。

人気チケットランキング(最近1ヶ月) | TimeTicket[タイムチケット]

f:id:kazuph1986:20140903101856p:plain

タイムチケット「プログラミングなど相談乗ります( ・`д・´)b」with 本間 和弘 0.5時間500円〜 @最近は大崎・五反田周辺にいます。,インターネット | TimeTicket[タイムチケット]

iOSAndroidでアプリいくつかつくっていたり、PerlRailsやGoでWebアプリケーション書いていたりするのでその辺の話や、会話の過程でどうやって勉強しているとか、よく参考にしているサイトはどれとか周辺の情報も人気があるみたいです。

ちなみにリーンアナリティクスを読んでのうんちくの話もできるつもりなのですが、 そっちのチケットは人気がないですねw なのでサービス企画の話もされたら上のチケットで普通に話しています。

一応レンジは初心者〜中級者までだと思ってるので、 上級者の方は逆に僕の方から購入させてくださいw

ということで気になった方は、まずは是非TimeTicketのメッセージだけでもいいのでご相談くださいm( )m