$yuzu->log();

技術ネタなど。

ISUCON5予選に参加してきました

ISUCON5の予選に参加してきました。

ISUCONとは?

お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトル、それがISUCONです。過去の実績も所属している会社も全く関係ない、結果が全てのガチンコバトルです。

メンバーは

今回のお題

「ISUxi」という、どこかで聞いたことのあるような名前の「高負荷に耐えられるSNSコミュニティサイト」 機能としては

  • ログイン、ログアウト
  • プロフィール
  • 友達
  • 記事 (友達限定公開あり)
  • コメント
  • 足あと機能 などなど割りと複雑なもの。

実装言語はRubyPerlPythonPHPJava、Go、Nodeなど様々なものがあり、PHP7を使って挑む気マンマンだったのですが、
スタート当初、運営側のPHPの実装ではベンチマークが期待する動作をせず、急遽使用言語をRubyに変更。
Nodeは準備すら出来なかった模様。Noderってチームは何の言語を選んだのだろう。

環境

  • Ubuntu 15.04
  • Nginx
  • MySQL
  • Google Cloud Platformのn1-highcpu-4 (vCPU x 4、メモリ 3.6 GB)

やったこと

  • New Relic導入
  • Nginxで静的ファイル配信
  • Redisでusersやfrient listをキャッシュ
  • MySQLインデックス貼り貼り
  • Unicorn workerチューニング
  • N + 1問題のクエリが沢山あったのでチューニング
  • MySQLのクエリ最適化

もろもろ
6割ぐらいはMySQLクエリ最適化してた気がします。

感想

8時間ぶっ通しで集中してたのでめちゃくちゃ疲れたけど、普段使ってない技術を使うので勉強になるし、すごく楽しかったです。
主催・共催のLINE、Treasure Data、TREASURE、TECHORUS、Googleの皆様、本当にありがとうございました!

Webコミュニティサイトを運営しているすべての人の読んでもらいたい本

Web Community CGMビジネス”成功請負人”たちの考え方 Webコミュニティでいちばん大切なこと。

Webコミュニティでいちばん大切なこと。 CGMビジネス“成功請負人”たちの考え方

Webコミュニティでいちばん大切なこと。 CGMビジネス“成功請負人”たちの考え方

2008年に出版された本で、nanapiのけんすうさん(当時はロケットスタート)をはじめ、みんなの就活日記の伊藤将雄さん、ループスの斉藤徹さんなど、知る人ぞ知る、CGMコミュニティサイトで実績のある方々が、それぞれの経験を元に運営方法などのノウハウを記述しています。

@tomzohさんがバイブルと仰っていたのでAmazonでポチって読んでみました。

www.hasegawa-tomoki.com

私自身もWebコミュニティサイトを運営しているのですが、この本は本当に素晴らしいと思いました。

サイトを運営しててこういう問題あったなーというあるあるが満載でした。

多少古めかしい話題もありますが、Webコミュニティとは何かをそれぞれ分析し、サービスリリースからグロースまで、運営におけるリスクマネジメント(炎上、荒らし対策)、収益モデルなど、体系的にまとめられいます。

WEBコミュニティのフレームワーク本といったところでしょう。

目次を以下に記します。(敬称略)

1 スタートから成功までの目標とプロセス (早稲田大学大学院/伊藤将雄)

  • 1-1 コミュニティづくりの基本を固める
  • 1-2 設計・開発から、プレオープンまで
  • 1-3 コミュニティを軌道に乗せるには

2 リスクマネジメントの必須項目(株式会社ロケットスタート/古川健介)

  • 2-1 コミュニティサイトに潜むリスクとは
  • 2-2 リスクのある書き込みを減らす
  • 2-3 法的リスクについて

3 ユーザーモチベーションを高める運営術(株式会社セプテーニ・クロスゲート/水波桂)

  • 3-1 管理人はいるか コミュニティをはじめる前に
  • 3-2 コミュニティの育て方
  • 3-3 少しの工夫が大きく刺さる 動的に見せるコツ

4 Webコミュニティにおける収益モデルの考え方(株式会社ドリコムジェネレーティッドメディア/平尾丈)

  • 4-1 Webコミュニティの収益モデル「CREAM」メソッド
  • 4-2 ネット広告による収益の最適化
  • 4-3 ネット広告の変化の兆し

5 ECと集合知の融合。〜ソーシャルコマースの潮流〜(株式会社ループス・コミュニケーションズ/斉藤徹・大迫正治)

  • 5-1 ソーシャルコマースの実態
  • 5-2 ソーシャルコマースの機能
  • 5-3 コマースと連動したコミュニティの運営
  • 5-4 ソーシャルコマース構築の実際
  • 5-5 ソーシャルコマースによる新しい消費行動

6 モバイルコミュニティの可能性(株式会社ゆめみ/片岡俊行)

  • 6-1 モバイルコミュニティの特徴
  • 6-2 モバイルコミュニティの収益化
  • 6-3 モバイルコミュニティの動向・事例

7 コミュニティビジネスの未来(アルカーナ株式会社/原田和英)

付録 ひろゆき氏インタビュー

まとめ

私は普段本は読み終わったら、Amazonマーケットプレイスに流すのですが、 この本は手元において何度も読み返そうと思います。

  1. 自社コミュニティサイトに対しての愛
  2. インターネット&コミュニティサイトについての愛
  3. ユーザへの愛

の3つの愛を心に留め、今後のサイト運営にこの本を役立てていきたいと思います。

清水亮さんの新作『最速の仕事術はプログラマーが知っている』感想

IPA 独立行政法人 情報処理推進機構」から天才プログラマー/スーパークリエイターと認定されている、清水亮さんの新作「最速の仕事術はプログラマーが知っている」を読みました。 ものすごくキャッチーなタイトルですねw

私もプログラマーの端くれなので、清水さんがどんな仕事のこなし方をしているのか、非常に興味がありました。

最速の仕事術はプログラマーが知っている

最速の仕事術はプログラマーが知っている

なぜ今、ビジネスの頂点にプログラマーあがりの人が君臨しているのか?

スティーブ・ジョブズはこんな言葉を残しています。

「アメリカ人は全員コンピュータのプログラミングを学ぶべきだと思うね。

なぜなら、コンピュータ言語を学ぶことによって考え方を学ぶことが出来るからだ。」

ビル・ゲイツMicrosoftラリー・ペイジGoogle

ジェフ・ベゾスAmazonマーク・ザッカーバーグFacebook

といった経営者は、みんなプログラマー出身者。

プログラミングから学べる思考法こそ、彼らのビジネススピードの原動力なのです。

KISS(Keep It Simple, Stupid!)原則 = 「シンプルにしておけ、この間抜け!」

DRY(Don't Repeat Yourself.)原則 = 「同じことは書くな」

YAGNI(You Ain't Gonna Need It)原則 =「必要になってからつくれ」

プログラマーの世界には、こうしたムダを削ぎ落とすための数々の原則や仕組みがあります。

本書ではそこから導き出される実践的な仕事術を、

国家認定天才プログラマーであり、経営者でもある著者が伝授します。

この本はプログラマの効率化とライフハックを関連付けていて、プログラマーなら当たり前の原則である、KISS原則、DRY原則YAGNI原則を軸に仕事術が語られていました。

印象に残ったポイントをまとめてみます。

  1. DRY原則に基づき、よく使う表現はすべて、辞書登録してメールは5秒で送る。

  2. 長文にWordは使わずテキストエディタを使う。Markdown記法を使えばキレイな文章が仕上がる。

  3. プレゼン資料は直前に書け。アイディアをカタチにするときに、その時の最先端の話題をフォローしておくかおかないかだけで、できあがったプレゼン資料の効果はまったく異なる。

  4. エジソンは手抜きの天才だった。怠けるために考える。くだらない仕事はすべて機械にやらせた。

  5. インターネットに公開されている情報は情報受信者のためではなく、発信者のために作られている。

  6. ハッカーの道とは、持続的な改善と反復を積み重ねていくこと。ハッカーとは、物語は常に向上できる余地があり、完璧なものは何もない。と信じている人のこと。

  7. プログラマーの職業的美点は、他のどの職業人よりも自分が無能であることに自覚的であること。

  8. 匿名チャットで経営会議すれば、権力者も自分のアイディアを、仕事をよく知る人たちに同じ目線で共有できるし、平社員やアルバイトでも社員と対等に話ができる。

  9. リーダーは働いたら負け。NEETであれ。

本書内で登場する、「プログラマー的な考え方」は、合理的に仕事をこなす上で、非常に納得できるものが多く、面白い本です。

PHPの名前空間( namespace )のセパレーターがバックスラッシュ"\"になった理由

PHP名前空間(namespace)の区切り文字はバックスラッシュ"\"が採用されています。 最初はエスケープに見えてすごく違和感でした。

気になって調べてみるとバックスラッシュが採用されるIRCログを発見しました。 それによると理由は以下の5つだそうです。

  1. セパレータとしての入力のし易さ
  2. typo-vulnerabilitytypo時にエラーや警告なく意図しない動作に繋がらない)
  3. 構文解析のし易さ
  4. IDE互換性
  5. 文字数

ナルホドネ!!

パーフェクトPHP

パーフェクトPHP

Vagrant で作った仮想マシンから Box ファイルを作る方法

Vagrantで作った仮想環境を他人の環境でもまるまる使えるようにする方法です。

そんなのDocker使えばいいじゃんって言われそうですが、Vagrant使っているけどDockerは習得していないという人のために。

$ vagrant --version                                                            
Vagrant 1.7.2

NICマッピングを削除

# ホスト
$ vagrant ssh

# 仮想
$ sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules
$ exit

# ホスト
$ vagrant halt

boxファイル作成

$ vagrant package
$ ls
package.box

boxファイルができました。

作成したboxファイルをインポート

作成したboxファイルを渡してあげて以下のコマンドを実行してください。

$ vagrant box add hogeos package.box
$ vagrant init hogeos
$ vagrant up

これで環境をまるっと移すことができます。

実践 Vagrant

実践 Vagrant

【池上彰】世界で起きている大問題を包括的に知ることが出来るオススメ本

ニュース解説番組にひっぱりだこな池上彰さん。

そんな池上彰さんの新作、「知らないと恥をかく世界の大問題6 〜21世紀の曲がり角。世界はどこへ向かうのか?〜」を読みました。

池上彰さんの世界情勢の分析を分かりやすく教えてくれる「知らないと恥をかく世界の大問題」シリーズは全部で6作目になりました。

  1. 大国アメリカの野望と世界への責任
  2. ヨーロッパ、衝突の現場から
  3. イスラムの台頭
  4. 人類共通の問題に立ち向かえるのか?
  5. 戦後70年を迎える東アジアの未来志向
  6. 突き進む安倍政権が目指すもの

内容は上記になっています。

特に、

  1. 現在の原油安の理由が、アメリカ、サウジアラビア、イラン、ベネズエラ、シリア、キューバなど経済から宗教が複雑に絡み合いもたらされていること。
  2. イスラム国がどうして生まれてきたのか

の二点が非常にわかりやすく解説されており、勉強になりました。

イスラム国やオバマ大統領後のアメリカ、アベノミクス集団的自衛権、沖縄の基地問題憲法改正、等、知識としては決して先鋭的なものではありませんが、このぐらい知っておけば「世界情勢に疎い人」とは思われないでしょう。

過去の失敗を二度と繰り返さないこと。そのために歴史を学ぶ必要があるのだと思います。『知らないと恥をかく世界の大問題』という題名のシリーズは、多くの読者の支持を得て、ついに6冊目となりました。空港の書店に並べられ、国際線の機内で海外に出かける予習として読んでいる人をよく見かけます。ありがたいことです。5冊目から6冊目までの間に、世界は大きく変わりました。そんな変化の確認のためにも、この本がお役に立つことを願っています。

と本書にかかれている通り、国際線の機内で読む分量としては非常に調度良いです。
是非海外へ向かう前に空港でこの本を手にとってみてください。

【CentOS】迷惑メール(スパム)扱いされない為の最低限設定しておきたい3つの設定【Postfix】

さくらVPSCentOSの環境を構築し、localhost(ローカルホスト)からPostfixでメールを送信しても、なにも設定していないと高確率で迷惑メール(スパム)扱いされてしまいます。
Yahoo!メールは幾分か緩いですが、Gmailはほぼ100%迷惑メール(スパム)扱いされます。

最近は無料でSMTPサーバを貸してくれるサービスもあり、そちらを使う場合もあるかもしれませんが、localhost(ローカルホスト)から送信する場合もあると思うので、そちらで最低限しておきたい3つの設定を記します。

当方の環境は下記の通りです。

サーバー: さくらVPS(CentOS)
ドメイン: お名前.comで契約したhoge.com
メールソフト: Postfix

1. DNS逆引きレコード変更

さくらVPSの場合、契約したタイミングで、さくらのドメインが割り振られますが、WEBサービスを運営する場合は独自ドメインを取得し、そちらで運用してると思います。

何も設定せずにサーバーのIPを逆引きした場合、さくらのドメインが表示されるため、運用しているWEBサービスドメインと異なり、迷惑メール(スパム)扱いされます。

ですので、まずはDNS逆引きレコードを運営しているWEBサービスと同じドメインに変更しましょう。

さくらVPSの場合、コントロールパネルから逆引き設定できます。 f:id:yuzurus:20150613144542p:plain

確認は以下のコマンドを叩いて、ドメインが変わっていればOK

$ nslookup IPアドレス

2. SPFレコードの設定

Sender Policy Framework(センダー・ポリシー・フレームワーク)とは、電子メールにおける送信ドメイン認証のひとつ。差出人のメールアドレスが他のドメインになりすましていないかどうかを検出することができる。 SPF もしくは SPF認証 とも呼ばれる。

端的に言えば設定しておけば成りすましじゃないよ、ということを伝えることができるので、SPFレコードを設定してください。

お名前.comの場合は下記の画像のようにしてください。 f:id:yuzurus:20150613142310p:plain

ホスト名: 空
TYPE: TXT
TTL: 3600(お好みで)
VALUE: v=spf1 +a:hoge.com ~all

DKIMの設定

Domainkeys Identified Mail(DKIM)は、電子署名方式の送信ドメイン認証である。 DKIMでは送信側で電子メールに電子署名を付加し、受信側でその電子署名を照合するという方法で送信者のドメイン認証を行う。

DKIMの設定はOpenDKIMを使います。

sudo yum install opendkim

OpenDKIMを使って鍵を作成します。

sudo opendkim-genkey -D /etc/opendkim/keys/ -s hoge_com_selector -d hoge.com

作成された/etc/opendkim/keys/hoge_com_selector.txt の内容をDNSに登録してください。

f:id:yuzurus:20150613150429p:plain ホスト名: hoge_com_selector._domainkey
TYPE: TXT
TTL: 3600(お好みで)
VALUE: v=DKIM1; k=rsa; p=MIGfMA0GCSq…

/etc/opendkim.confの設定

# 送信と受信
Mode sv

# comment out
# KeyFile /etc/opendkim/keys/default.private

# uncomment
KeyTable refile:/etc/opendkim/KeyTable

# uncomment
SigningTable refile:/etc/opendkim/SigningTable

# uncomment
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts

# uncomment
InternalHosts refile:/etc/opendkim/TrustedHosts 

/etc/opendkim/KeyTableの設定

hoge_com_selector._domainkey.hoge.com hoge.com:hoge_com_selector:/etc/opendkim/keys/hoge_com_selector.private

/etc/opendkim/SigningTableの設定

*@hoge.com hoge_com_selector._domainkey.hoge.com

Postfixの設定

/etc/postfix/main.cfの末尾に下記を追記

smtpd_milters = inet:127.0.0.1:8891

OpenDKIMとPostfixのrestart

sudo service opendkim restart
sudo service postfix restart

OpenDKIMの設定が正しいか確認

メールを送信して署名が追加されているか確認する。

# mail example@gmail.com
Subject: Test
Test
.

メールログ(/var/log/maillog)を確認し、

DKIM-Signature header added (s=hoge_com_selector, d=hoge.com)

という文字があれば設定完了。

参考 http://nobnoob.hatenablog.com/entry/2013/04/01/093120