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の新バージョンにご期待下さいませ。

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

2012年8月21日火曜日

マツダ CX-5 アイドリングストップからエンジン再始動時の振動をなくす方法


今年の3月に契約して5月末納車以降、大活躍な愛車のCX-5 XD(クリーンディーゼルモデル)。


もうね、このクルマめちゃめちゃいいですよ。ちょっと幅がでかいってのはありますが(全幅1840mm)走りがとてもいい。強力なトルクでしかもフラット。ハンドリングも大満足。出張時の足、開発合宿、営業に使ったりしてますが、荷室も十分広い。加速よし、燃費よし(燃料が軽油なので安い)。僕が今まで乗ってきた車の中で過去最高に満足度が高いです。

このクルマ、もう一つ面白い機能があって、i-DM(インテリジェント・ドライブ・マスター)という運転のコーチング・ティーチング機能がついてます。ようは荒く無駄のある運転をすると低得点、丁寧でメリハリのある運転をすると高得点と診断してくれる機能です。

5点満点で評価してくれ、高得点を続けると、更に難易度の高い(診断基準が厳しい)ステージに移るようになってます。1st, 2nd, 3rdまであるみたい。ぼちぼち走行距離が6,000kmくらいになるんですが、今、3rdステージでスコアアベレージが4.5くらいです。これが良い方なのかどうなのかがイマイチわからなくて、ソーシャル連動とかで他のオーナーのスコアとか見れると面白そうですね。

ここから本題。
こんなにいいクルマなんですが、唯一気になっていた問題があって、それの解決策がわかったのでエントリにおこします。

このクルマ、i-stop(アイストップ)という名のアイドリングストップ機構がついてます。信号待ちで停車すると自動的にエンジンが止まるってやつですね。ブレーキを少しでも緩めるとエンジンが再始動してすぐに走行に移れます。
アイドリングストップしてる時は車内はとても静かだし、なかなかいいものなんですが、唯一気になっていたのがエンジン再始動時のクルマの振動です。0.4秒、しかも1クランクで始動するとはいえ、結構その振動が気になっていました。「ブルっ」ってくるんですよね。不快なレベルまではいかないけど、気にはなるレベル。

それで色々試してみたのですが、エンジン再始動時に振動が出る場合は以下のような操作をしたときのようです。
  1. 停止時にフットブレーキを踏みまししてアイドリングストップスタート、そのままフットブレーキを緩めてエンジン再始動(通常使用してる時は皆さんコレの状態のはず)
  2. 停止時にフットブレーキを踏み、シフトレバーを「N」にしてそのままアイドリングストップ、発進時に「D」レンジに切り替えてエンジン再始動(停止時にNに入れる派といったところでしょうか。これでも振動が出る)
大体信号待ち等の一時的な停止時にはこのいずれかの操作で停止していると思うのですが、これはいずれも振動が出ました。しかし2の方法で、一旦フットブレーキをリリースするという動作を加えると、振動が嘘のように解決します。実際には以下のような操作に。
  • 停止時にブレーキを踏み、シフトレバーを「N」にしてそのままアイドリングストップ、サイドブレーキを引いて、ブレーキを離す。発進時に再度ブレーキを踏み、「D」レンジに切り替えてエンジン再始動(振動が全く出ない!)、サイドブレーキを下ろして発進
これでびっくりするくらい振動がなくなります。「長い信号待ちではニュートラルにしてサイドブレーキ」のアレをやればいいわけです。機構的には停車中に「N」レンジ&フットブレーキをリリースで、振動無しフラグがたつと思います。

駆動系の接続等々の制御も恐らくコンピュータでやってるでしょうから、このへんはもしかしたらマイナーアップデートで振動をなくす事は可能なのかもしれませんね。

と、ここまで書いてアレですが、上記の方法で確かに振動はなくなるものの、僕は普段は1の方法で運行しているので、出来れば1の方法で振動がない状態でエンジン再始動してくれるのが理想です。

マツダさん、期待してます!

2012年8月1日水曜日

オフィス移転のお知らせ


8月になりましたね。二期目も1/12が終わってしまいました。
さて、Facebook等ではご案内させて頂いておりましたが、先月末で大名のコワーキングスペース「ShareOffice Costa」を卒業し、今月から新オフィスに移転しました。

新オフィスの住所は「福岡市中央区舞鶴1-1-10 天神シルバービル 4F」です。
ShareOffice Costaで出会った仲間と共にガンガン活動していきますです!

ちなみにオフィス、こんな感じです。



本来であれば、個別に移転のご案内を送るべきところですが、本エントリにてご案内のご挨拶とさせて頂きます。

それでは皆様、今後ともよろしくお願いいたします。


2012年7月24日火曜日

グルー株式会社を設立して1年が経ちました


2011年7月1日に設立したグルー株式会社ですが、先日無事に1周年を迎えることができました。ようやく1歳になりました。いやー、とにかくこの1年早かったです。メンバーも増えました。

今日のエントリではこの1年を簡単に振り返りつつ来期の目標など書いてみます。
まずグルー株式会社では以下の自社サービスを提供しています。

   * 動画配信サービス「Gemediar
   * ビデオチャットサービス「Social GlueCast
   * ブラウザだけで顧客サポートできるビデオチャットシステム「GlueSupport」

最後の「GlueSupport」はもう間もなくリリースする新サービスです。
本当は7月頭にリリースする予定だったのですが、色々あってもう少しかかりそうです><。ご期待下さい!
これらの自社サービスの提供と同時にシステム案件の受託開発業務も行なっています。

以前のエントリでも書いた通り、上記サービスによる売上がそのままラーメン代になっててギリギリトントン。
受託開発は基本的にはフローではありつつも保守やメンテナンス、機能拡張まで含めた提案をやりつつ、お客様へのヒアリングの中で「ああ、こんなニーズがあるのか」と気付かされる事もよくあり、単なる受託開発ではなくパートナーとして共同事業でやりましょう的な流れも。

というわけで、1期目は無事に終了です。
お国にちゃんと税金も収められそうです。

さて、僕もスタートアップブームに乗っかって起業したクチですが、ぶっちゃけウェブサービス面白いけど難しいです。かなり地道です。うちはB2Bな製品ばかり作ってますが、作ってすぐ売れるもんじゃない。サービスでお金を頂く事は本当に大変(だけど、お金を頂けた時はものすごい喜び)。

長い目で見守る事が大事なのかもしれません。
幸い、現在はインフラ系にかかるコストは劇的に下がっているので、サービスを維持するだけならなんとかなります。出ていくお金を限りなく少なくするには己の技術さえあれば可能な時代です。脳みそのスイッチングコストを無視すれば安易にピボットしなくていいんじゃないかと思ったりもします。じっとチャンスを待つには今はとてもよい環境かもしれませんね。でも、フィードバックと改善を繰り返すパワーは絶対必要で、僕の中でその部分に対する気づきと反省が多かったです。


さて、2期目は広げる時期です。多くの人に使ってもらえるように動きます。

そのための新しいプラットフォームを用意しようと思っています。
1年の間に出来た3つのサービス、これらを生かしてどういう面白い事が出来るのか、見せていけたらいいなと思います。
皆様、今後ともグルーをよろしくお願いします!

久しぶりにブログを書く

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