2013年7月18日木曜日

2時間くらいハマってた...

nginxのキャッシュが微妙に効いてない時があって唸ってたら

http://wiki.nginx.org/HttpProxyModule#proxy_ignore_headers

proxy_ignore_headers X-Accel-Redirect X-Accel-Expires Cache-Control Expires Set-Cookie;
で一発で解決。

2013年7月2日火曜日

オフィス移転準備中

前回のエントリで移転のご案内をしました。
まだ回線等の移設作業が完了していませんが、ひとまずWiMaxやXi等の回線で最低限仕事は出来るようになりました!

諸々落ち着いたらレセプションを行う予定でおります。
是非皆様遊びに来て下さいませ。

作業デスクとチェア。毎日使うものなので出来るだけ手触りがよくて手に馴染むものをと、福岡が誇る全国屈指の家具の町、大川で仕入れてきました。無垢材で重厚な作りです。

Untitled


リラックススペース・打合せスペースとしてソファも用意しました。
カウチタイプなので仮眠もバッチリ!?

Untitled


ソファ側から。窓側はガラスウォールになっているので、とても明るいです。

Untitled


そしてテラスからの眺め。ちょっと一息出来ますね!

Untitled


植物とか置きたくなってきますね!
それでは正式な移転日とレセプションの日程が決まりましたらまたお知らせ致します!

2013年6月28日金曜日

本社移転のお知らせ

今日はお知らせです。
2013年7月8日(くらいに)グルー株式会社が移転します!

新住所は
〒810-0075
福岡県福岡市中央区港2-8-25 ibb CORE minato 4F
になります。

都市高速西公園ランプより車3分。
地下鉄大濠公園より徒歩5分。
桜の名所、西公園へも徒歩10分程。
近くには、オシャレな飲食店が立ち並ぶと。
近隣のコインパーキングも60分100円のものがほとんどでした。

ビルの前面はガラスカーテンウォール。
そしてそして、なんといってもテラスから海が眺められるという開放感溢れるオフィスでした。
個別空調、OAフロア、セキュリティ設備など、建物ファシリティも充実。
内覧に行った時の写真を2枚ほど。

IMG_2568


IMG_2575


撮ってきた写真の一覧はこちら。
http://www.flickr.com/photos/sakoda/sets/72157634210749756/

都会の中で海の見えるオフィス、実は憧れてました。我々の仕事は目を酷使しますし、出来るだけみんながリラックスしていい環境で仕事が出来るオフィスを求めていました。
テラスがなかなか広いです。お外でミーティングやランチが出来ますね!

軽く移転パーティ的なものも企画しておりますので、その際は是非皆様ご参加下さいませ。(正式な日程が確定次第Facebookでご案内させて頂きます)

皆様遊びに来て下さいね。あー楽しみ!

2013年6月24日月曜日

ゴノツクヒで裏話します

http://oreoka.com/2013/06/movie-site/

福岡を代表するIT系メディア「俺を囲む: oreoka.com」
にも掲載して頂いたのですが、毎月5日(5のつくひ、ゴノツクヒ)にイベントやろうぜ的な動きが凄いです。時代は「5」です。僕の愛車のmazda cx-5もcx-「5」です。

2013/6/25の火曜日、持ち込み企画ですが、ゴノツクヒとして、イベントをやらせて頂きます。内容はズバリ、

「動画の裏側」

決して、アレな撮影現場の裏側とかではないですよ(垢バン怖いので相当オブラートな表現です)

配信や変換や非同期処理の裏側ですからね(マジレス気味で)。それってある意味、アレです。寄ってる。だいぶ寄ってる。

でも、興味ある人が来てくれたらって思います。今、非同期とか、分散とか、アツいです。様々なオープンソースなコンポーネントの組み合わせでベンチャーがラーメン代稼げる事例はもっとあっていい。そんな話が出来ればと思います。

ノウハウなのかどうかはわかりません。僕は、ただただオープンソースでコミットしてる人には頭が上がらない。ぼくもただただコミット出来る人になりたい。ぼくみたいなクズのような人間でもCPAN authorになったり出来る。

オープンソースへのコミット方法はソースコードだけじゃなくて、資金やサポートでコミット出来る事も出来るはず。ぼくはオープンソースに触れ、オープンソースから教えてもらい、オープンソースで飯を食わせてもらいました。

そろそろ、俺のターンにしたい。返したい。伸ばしたい。アレのおかげって言いたい。
オープンソースに感謝の意を行動で示していきたい。

そんな事ばっかり話すと思います。
潰れかかってジリ貧だったしがない地方ミュージシャン(才能無し)を救ってくれたのは暖かいハッカー文化だったって、伝えたい。

2013年6月23日日曜日

Macbook Airを新調し、データ移行でThunderboltの威力を思い知った

Macbook Air(Mid2012)13inch からMacbook Air(Mid2013)13inch へ乗り換えました。スペックはCPUをCore i7へ、メモリを8Gへ、SSDを512GへアップグレードしたBTO版。

各種ベンチマークは色んなサイトで検証されているのでそっちを見たほうが早いですね。
http://ushigyu.net/2013/06/19/comparison-between-new-and-old-macbookair-performance/http://blog.livedoor.jp/dankogai/archives/51875372.html
僕的には単純に12時間起動可能な省エネルギー化を達成してくれたところとほとんどマシンスペックを犠牲にしていないところ、そしてより強化された足回りに惹かれて購入という流れです。

仕事柄電源が使えない箇所で作業する事もあるため、今回のアップデートは嬉しかったというわけです。

さてさて、毎回マシンを新しくした時の問題が過去のデータの引き継ぎです。
Macの場合は移行ツールが非常に充実していていい感じなのですが、いかんせんデータ移行にかかる時間が年々増えてました。毎年データが増えていってるので当然ですね。

今回もまた半日くらいの時間を使うのだろうなと思っていたのですが、使っていた前モデルがThunderboltを搭載していたなと、今回はThunderbolt経由で移行してみる事に。

やった事は非常にシンプル。

前機種をTarget Disk Modeでブートして、Thunderboltケーブルで新機種とダイレクトに接続。後は新機種をブートさせ、移行ツールでターゲットのディスクを選択。

とこれだけです。
そしたらなんとなんと、これまで10時間とかかかっていたデータ移行を20分程度で終わらせる事が出来ました!!(前機種で使っていたデータ容量は130Gくらいです)

今回は前機種・現機種ともの足回りの速いSSDだったからという理由はあるかもしれませんが、まさか20分でデータ移行が終わると思っておらず、嬉しビックリしております。

Thunderbolt搭載機同士の移行には超オススメです!
ケーブル自体が3,000円前後しますが、大幅な時間短縮に貢献してくれますヨ!

2013年5月13日月曜日

Light weightなデプロイツール「Cinnamon」がいい感じ

前回の投稿より1ヶ月ほどあいてしまいました。
今回も技術系のお話です。

通常開発時には、

  1. 手元のマシンに環境を作ってプログラミング
  2. お客さんとの確認用に開発サーバにアップロードして確認
  3. 本番環境にアップロードして本運用
こんな流れをとってるかと思います。
1 - 3は新機能の追加とかバグ修正とかで毎回繰り返される流れですね。

そこで問題になるのが、2 - 3を手動でやっている場合、都度手作業が発生し、非常に面倒な事になります。人の手で作業するとどうしてもミスも発生しますね。

そこで登場するのがデプロイツールです。この2 - 3の作業を自動化してくれるツールですね。とても便利。

調べてみると、デプロイツール、色々あります。

Capistrano(Ruby製。Railsアプリのデプロイはほぼこれ?)
Mina(Ruby製。新参者っぽいですね)
Fabric(Python製。軽量っぽい)
Cinnamon(Perl製。こちらも軽量っぽい)

うちの会社ではCinnamonを使っています。Capistranoの高機能部分をバッサリ切り落としたような非常にシンプルなものです。なぜCapistranoではなくCinnamonを使っているのか、それは以下の理由です。

デプロイ、というと大げさだけれども個人で作っているような小規模なものなので「ssh して git fetch する」程度のことができればそれで良いわけで、緊急時の切り戻しとかいろいろな ops ツールとの動的な連携といったところまでは必要としていない。
Capistrano を使って居ると Rails を前提としている箇所とか、バックグラウンドであれこれやっているところを自分の環境に合わせるためにいろいろ work around を入れる必要があって、どうにもそこがストレスでした。
シンプルであるが故に目が届きやすい、何をやっているのかわかりやすいというわけです。

railsless-deploy とかもあるみたいですけど、使った事がありません。

RailsのアプリケーションであればCapistranoが相性良いのはわかっているのでそちらを使うでしょうね。

Cinnamonは$HOME/.ssh/configの中身を見てくれるので、デプロイ先の設定がとても楽です。

Rails, Plack等本番環境に配置後アプリケーションサーバの再起動が必要なものはほぼ導入したら楽になるのは確実ですが、PHPのお仕事では、高度なキャッシュ処理等を導入していない場合、ほとんどファイルをアップロードするだけでデプロイ出来てしまいます。
(PHPの利点でもありますね)

しかし、高度なキャッシュ処理や複数台数による分散処理等を行なっている場合は、やはりこういったツールを導入した方が便利なのとそうでない場合もコマンド一発でデプロイ出来てしまうので楽になれます。

所詮デプロイ、本番環境に反映して動けばいいのだ。でも、それすらも楽したいのだ。
そんなエンジニアさん、お待ちしてますよ!

2013年4月9日火曜日

地方に仕事を生み出せたらいいなーと思った

東京はやっぱりすごいですよねってお話

を読んで。

僕は東京に住んだ事は無いけど、最近はお仕事の関係で月に1回くらいのペースで行ってる。確かに元エントリに書かれている通り、人・お金・情報、とても充実していると思う。刺激も多い。きっと仕事も多い。

でも、地方にもよいところはたくさんある。
快適な住環境だったり、美味しい食事だったり。温泉もある。
東京よりは生活費もそもそも安くあがる。

でも、もしかしたら仕事はあまりないかもしれない。

僕が大好きな広島のとある会社の社長が何かのインタビューでこんな事を言ってた。

「金は有限、知恵は無限」

よし、やっぱ知恵を絞って地方に仕事を生み出そう。
そう思った火曜日の午後。

最近のお仕事は、サーバー構築。
お金は無いけど知恵を絞って安いサーバーを最高のパフォーマンスに仕立てる。
これが実に楽しい仕事なのです。

そうそう、グルー株式会社で、チームメンバーを募集してます。
みんなで知恵を絞り、手を動かして、一緒に仕事を生み出して行きたいと思ってます。

プログラマの言葉に
「Shut the fuck up and write some code.」
というのがあります。

「ぐだぐだ言ってないでコード書けよ」
という意味です。

「やった事ないけど、とりあえずやってみるか」
そんな心意気をお持ちの方、一度うちの会社を覗いてみませんか?

2013年4月4日木曜日

WebSocketを古いブラウザで使用する時のTips

かなり久しぶりの更新ですね。

うちの会社で提供しているGlueSupportというライブチャットサービスがあるのですが、中はFlashで実装されています。なんだかんだでやっぱりまだFlashは現役ですよね。

しかしながらトレンドを追っかけてみるとだいぶFlashはレガシーな扱いです。最新のトレンドを反映させたバージョンもあってよいなと。

というわけで、GlueSupportのテキストチャットバージョンをリニューアルし、それをHTML5のWebSocketベースに置き換えるプロジェクトを進めています。今月末にはリリース出来るかなと思ってます。

# 色々課題があって、残念ながらビデオチャットバージョンは当面Flashになりそうです。

さてさて、そのWebSocketですが、これがまた古いIEでは動かないのですね。
IE10でしか動きません。IE10インストールしている人いますか?身近な人でも誰もIE10を使っている人がいません。どうしよう。

そこで、古いIEでもWebSocketを使えるFlashの擬似環境を提供してくれるモジュールを使用します。

https://github.com/gimite/web-socket-js/

基本的にはreadmeにあるようにこのモジュールを以下のように組み込めばOKです。

<!-- Import JavaScript Libraries. -->
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript" src="web_socket.js"></script>

<script type="text/javascript">

  // Let the library know where WebSocketMain.swf is:
  WEB_SOCKET_SWF_LOCATION = "WebSocketMain.swf";

  // Write your code in the same way as for native WebSocket:
  var ws = new WebSocket("ws://example.com:10081/");
  ws.onopen = function() {
    ws.send("Hello");  // Sends a message.
  };
  ws.onmessage = function(e) {
    // Receives a message.
    alert(e.data);
  };
  ws.onclose = function() {
    alert("closed");
  };

</script>

しかしながら、実はこれだけでは通信出来ません。
Put Flash socket policy file to your server unless you use web-socket-ruby or em-websocket as your WebSocket server. See "Flash socket policy file" section below for details.
とあるように、サーバ側のWebSocketの実装にweb-socket-rubyもしくはem-websocketを以外のものを使っている場合、Flash socket policy fileというものを送出しなければなりません。

今回WebSocketの実装にはnode.jsを使用している為、
https://github.com/3rd-Eden/FlashPolicyFileServer
これを組み込めばよさそうです。

が、色々ググってみると、もっと簡単な方法があるようです。

http://gimite.net/pukiwiki/index.php?Flash%A4%CE%A5%BD%A5%B1%A5%C3%A5%C8%A5%DD%A5%EA%A5%B7%A1%BC%A5%D5%A5%A1%A5%A4%A5%EB#x9735172

こちらの記事にあるように、単純にサーバの843ポートから以下のXMLを出力すればいいだけのようですね。今回はこちらの方法を使用してみます。

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <allow-access-from domain="*" to-ports="6666"/>
</cross-domain-policy>

この例では、6666番のポートを全てのドメインに対して許可する。という感じです。
上記の記事の例ではinetdを使ったものになっていますが、うちのサーバはCentOS6を使っている為、これをxinetdで動かすようにしてみます。
  1. まずは in.flashpolicyd.rb をダウンロード
  2. /path/to/cross-domain.xmlというファイルを用意し、上記のXMLを記入
  3. /etc/servicesに以下を追記
    flashpolicy 843/tcp
  4. /etc/xinetd.d/flashpolicy を作成し、以下をコードを書く
    service flashpolicy
    {
            disable                 = no
            port                    = 843
            socket_type             = stream
            wait                    = no
            user                    = nobody
            server                  = /path/to/in.flashpolicyd.rb
            server_args             = /path/to/cross-domain.xml
    }
  5. sudo /etc/init.d/xinetd restart
これで無事に843番ポートが開き、IEでもFlashを使った擬似WebSocketを利用した通信が可能になりました!

いやーJavaScriptって面白いですね!

さてさて、久しぶりの技術系のエントリでございました。
GlueSupportの新バージョンにご期待下さいませ。

# 先日の役員会議で社長はもっとブログを書け!と喝を頂きましたので続けられるよう頑張ります!

久しぶりにブログを書く

最初ログインできなくて焦った。 いや、ログインはできたのだが、ログイン後に自分のブログの管理画面に遷移できず、新しいブログを作成する画面になってしまったからビビッてしまった。 どうやら、Google+(現在はサービス終了)に紐づいたプロフィールを設定しているとこのような状況に陥る...