- HipChatのAPI Auth Tokensのページでauth tokenを作成しとく。
- HipChatのRoom API IDsのページで通知したいRoomのIDを知る。
https://www.pivotaltracker.com/projects/プロジェクトID/integrations
Pivotal側がちょっと分かり辛いんだけど、上記のようなURLにあるActivity Web Hookにroom_idとauth_token付きで登録する。(v5では動かないのでv3にする必要があるので注意。)
https://api.hipchat.com/v1/webhooks/pivotaltracker/?auth_token=トークン&room_id=ルームID
HipChatのPivotal Tracker Integrationを参照すればignoreなどもっと細かい設定ができることがわかる。
以前はコレだったけど、
puts "-----------------------------------"
puts @posts.inspect
puts "-----------------------------------"
今はputsしてPowのログを見る方式にした。(ログを見るのはtailかConsole.app)
# app/controller/home_controller.rb:
class HomeController < ApplicationController
def index
puts 'foo'
end
end
Powの標準出力と標準エラー出力はlogに向いてるのでただputsするだかけなのは楽だ。
アプリの一部では使うからjbuildrのgem入れてるけど基本的にscaffoldでjson使いたくない場合。
# config/application.rb:
module Rails
class Application < Rails::Application
config.generators do |g|
g.jbuilder false
end
end
end
指定したIPからの接続しか受け付けない(古いタイプの)システムと連携したい場合にHerokuだと困る。
ProximoというAddonは固定IP付きのproxyを提供してくれる。rest-clientとかで接続するときにproximoの提供するproxyを設定してリクエストすればOK
require "rest-client"
RestClient.proxy = ENV["PROXIMO_URL"]
res = RestClient.get("http://api.someservice.com/endpoint")
puts "status code", res.code
puts "headers", res.headers
これで固定IP + https + 証明書が必須なシステムとかとも連携できる。httpsの通信をhttp proxy経由で可能かな?とちょっと心配だったけどproxyは中身知らんぷりでそのまま転送するので大丈夫。
proximoはリクエスト数がPlan毎に決まってるので必要なリクエストでだけproxy経由して節約する。
$ curl -x http://proxy.com:8080 http://example.com
port指定しないとデフォルトでは1080番にアクセスしに行く。知らないとハマって死ぬ。
おまけ
SSLの証明書とパスワード付きでアクセスする。cert.pemはprivate keyとclient certをconcatinateしたもの!これを知らない者は死ぬ!
$ curl -x http://proxy.com:8080 -E cert.pem:password http://example.com
% brew update
% brew upgrade ruby-build
% CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" rbenv install 2.1.0
% rbenv global 2.1.0
% gem install bundler rbenv-rehash
% rbenv rehash
バージョンのパッチレベル表記がシンプルになったのは気持ちいいですね。
サーバー台よりS3+CloudFront代の方が高いという自体になっているので、どーせAppサーバー1台だから怖話の画像ファイルをそのままストレージにおいてみた。

capistranoでおなじみの安心構成なのでS3のファイルをscpするだけで完了。
stop and bootするぐらいでは別のストレージになってるなどはなかったけど、柔軟に構成を変えられるのが売りだとおもうのでそういう場合に「あれ、あの画像どこいった?」とならないように注意が必要。
しかし、EYC外のアプリを1台インスタンスにポコっと持ってきてもとりあえず動くのでそこからS3化考えるってのも入り方としては良さそうに思いました。
元から入ってるrubyが最新版ですがsudoとかで壊すとやっかいなので。
% brew install readline openssl
% CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl` --with-gcc=clang" rbenv install 2.0.0-p247
% rbenv global 2.0.0-p247
% rbenv rehash
% gem install bundler rbenv-rehash
会社(FJORD, LLC)で怖話というサイトを2年やってきました。
僕らは2人の会社なので月に70万の利益があれば諸々の雑費を含めて運営していけると考えました。そして開始時に今度のサービスは2年はやろう。SEOは我慢だ。と思って2013年の9月に単月で70万の利益があったらプロジェクトは成功。達しなかったら失敗と定義付けてやってきました。
そしてその2013年の9月が来て結果は失敗となってしまいました。それについてはFJORDのブログに書きました。
ブログにも書きましたが感想はとにかくお金稼ぐの難しいなぁという感じです。
あとは、これは俺がアホだということもありますが、技術面のWebサービスのマネタイズやプロモーションに及ぼす影響の余りの無さにびっくりしました。
Webサービスで技術が優れているというのは、下記のような影響を与えます。
- バグが少ない
- 新機能登場が競合に比べて早い(競合が存在したとして)
- 長年やった場合にコストが少ない(技術的負債をすくなくできる)
- 表示がちょっと速い
- 大規模アクセスに耐えられる
まだまだ怖話程度の規模では関係無いものばかりです。
僕がエンジニア方面の動きを頑張ってもあまり意味が無いのがしんどいですね。
いろいろな背景の人に教えを請いに出かけてみようかなと思います。
何で俺(やオマエら)はマネタイズやプロモーションが下手なんだろう。
俺が思うに、それはプログラミングの面白さと関係無いからだろう。
人月の神話に確かプログラミングの面白さに下記があった(もっとある)
- パズルの楽しさ
- 知的好奇心
- 子供が父親に変なペン立てを作ってあげる時のように人の役に立ちたい(便利なものを作ってあげたい)
我々は面白くないもの耐性が非常に低いので何とかして新しい快楽回路を構築する必要がある。
Webサービス作りの段階について
Webサービスを作るのは楽しい。しかし、ゴルフではじめはドライバーがボールに当たっただけで嬉しいのに、その内ボールに当たるのは当たり前になり、飛ぶ飛距離が出ないと満足できなくなるように、Webサービスにも上達するにつれて快楽の段階がある。
- Webサービスを作れる。
- 便利なWebサービスを作れる。
- 儲かるWebサービスを作れる。
例えば一度2の段階に進むと便利だと周りに持ってもらえなさそうなWebサービスを作ろうという気が無くなる。3の段階に進むと便利でも儲からないWebサービスに挑む気がしなくなる。(4、5とあるのだろうが、俺は食っていける程のWebサービスを作ったことが無いのでまだわからない)
3のための努力というのはプログラマーが面白い努力とは全く関係無いことが多い。例えば俺が猛勉強して怖話をrailsから複数のnode.jsアプリからなるSOA形式に書き換えて大規模開発に対応できるようにしたとしても儲けは全く変わらないだろう。(むしろ減りそうだ)
営業を1から勉強しようと頑張ってみているが「資質や、やるべきことが真逆なので難しいんじゃないか」との意見をいただいている。勿論両方できる人もいるが俺にはそういう能力は無いらしい。
対策としてはマネタイズ・マーケティングの上手い人と組むというのが一般的なんだろう。