CloudFrontでStreaming配信

Amazon CloudFrontで動画Streaming配信してみたので、その手順まとめ。
手順っつーほどのものでもないほど簡単だけど。

事前準備

手順1:S3タブで動画配信のBucketを作成する



Bucketの名前はまあ適当に。Regionは東京にしておきます。

手順2:CloudFrontタブで動画配信のDistributionを作成する



Delivery Methodで「Streaming」を選択します。
Select Bucketで先程作成したBucketを選択します。

手順3:Distributionの詳細設定


とりあえずデフォルトのまま。今回はしませんが、CNAMEの設定は後でもできます。

手順4:Distributionの確認・完了


設定の確認画面が表示されますので、「Create Distribution」をクリックしましょう。

Distributionが作成されますので、しばらく待ちましょう。
Domain Nameで表示されている「xxxxxxxxxxxxx.cloudfront.net」がStreaming配信のサーバー名になります

手順5:Bucketに動画ファイルを配置


Distributionに指定したBucketに動画ファイルを配置します。
これで準備は完了です。

手順6:Streaming再生をする

Streaming再生に必要な情報は以下の通りです。

  • streamer ― rtmp://xxxxxxxxxxxxx.cloudfront.net/cfx/st
  • file - sample.mp4(↑の例の場合)


その他必要な情報はDeveloper Guideを。
Amazon CloudFront

ec2-upload-bundleが失敗したりしなかったり。

ec2-upload-bundleが途中で失敗するエラーが発生した。
必ずエラーになるわけではなく、発生したりしなかったり。
発生するときは以下のようなエラーが出ていた。

Failed to upload "./image.part.21": Curl.Error(): SSL read: error:00000000:lib(0):func(0):reason(0), errno 104.
ERROR: Failed to upload "./image.part.21": Curl.Error(): SSL read: error:00000000:lib(0):func(0):reason(0), errno 104.

色々調べてみたら対応策と思われるものがいくつかあったので試してみた。

--url http://s3.amazonaws.comオプションをつける

成功した。

--location ap-northeast-1オプションをつける

失敗した。東京リージョンが無いって言われた。

--location has invalid value 'ap-northeast-1'

--retryオプションをつける

失敗を乗り越えて成功した。
失敗するのだが、何度かトライして成功した。

「--url http://s3.amazonaws.com」でいけそうだが、念のため「--retry」もつけておくことにしようか。

次女の1歳児検診で思うこと

次女が1歳児検診を受けてきました。
特に問題なく、順調に成長しているということで安心しました。


実はうちの次女は一ヶ月早産で産まれてまして、体重も1700gしかありませんでした。
しかも産まれてすぐの検査で血糖値に問題があるということで、速攻救急車で大きな病院に運ばれて、
そこから2週間ほどNICU(新生児集中治療室)にいました。


当時は本当に焦った。血糖値が低いって言われても素人の私には何のことだかわからないし、
NICUって言われても何のことだかわからない。
ただ、次女を搬送するため産婦人科にやってきた救急車を見て、背筋がゾクっとしたことは今でも鮮明に覚えている。
病院での再検査、結果が出るまで一人きりで待っていたとき、
次から次に悪いことが頭に浮かんできて恐怖に押し潰されそうだった。
結局再検査の時点で、少し血糖値が上昇していて、命の危険はないということを説明されて
先生の前で涙をこらえきれず、ボロンボロンに泣いてしまった。
いっぱい管を繋がれた、軽くひくほど小さな赤ちゃんは、それでもしっかり生きていたのだった。


そこから2週間後の退院まで、僕は毎日病院に行った。
着替えやオムツ、搾乳した母乳などを届けなくてはならないのだけど、
NICUっていうのは両親しか中に入ることができない。(ちなみに白衣・マスク着用&鬼のような消毒)
しかし、嫁は産後だから一人で車の運転もできないし、体力も回復していない。
そうなると当然僕がやるしかない。僕がやらなきゃいけないんだと強く思った。
「この子には今、俺しかいないんだ。俺がやらなきゃ死んじゃうんだ!」て思った。


その時からずっと思っていることがあります。
当たり前だけど赤ちゃんってアレだぜ?あいつら本当に何もできないんだぜ?
ウンチすらマトモにできないんだぜ?ほんのちょっと放ったらかしにするだけで死ぬんだぜ?
すんごい弱くて、びっくりするくらい儚い命なんだからさ、本当に死なないでほしい。
自分の子供は言うに及ばずなんだけど、他人の子供も死んでほしくない。
無理なこと言ってるのはわかっているんだけど、子供が死なない世の中になってほしい。
ただでさえ弱い命なのに、わざわざ散る必要なんて絶対ない。


子供死ぬな。絶対死ぬな。

PHPでWebSocketサーバ実装 ※まだ途中

まだ納得のいく動きになってないのだけど、他にやらないといけないことができたので、
これまでのところをメモ的エントリ。


PHPによるWeb Socket実装「PHPWebSocket」
GitHub - GeorgeNava/phpwebsocket: PHP and WebSockets


PHPでWebSocketのサーバ実装ができるならステキじゃない?と思って手をつけてみますた。
詳しい説明は割愛、というかちゃんとできたらまた丁寧に書きます。


ここで提供されているサンプルは、ChatBotというか、なんしか入力された文字に応じて、
決められた返答を、入力した人に返すというただそれだけのもの。
それだと面白くないので、複数人が接続してチャットができるように改造しようとしてみた。
早い話がPHPWebSocketによるチャットアプリを作ってみようとした。


chatserver.php

#!/php -q
<?php  
// Run from command prompt > php -q chatserver.php
include "websocket.class.php";

// Extended basic WebSocket as ChatServer
class ChatServer extends WebSocket{
  function process($user,$msg){
    $this->say("< ".$msg);
    $this->broadcast($user->socket,$msg);
  }

  function broadcast($client,$msg){ 
    $msg = $this->wrap($msg);

    foreach($this->users as $user){
      if($user->socket!==$client){
        socket_write($user->socket,$msg,strlen($msg));
        $this->say("! ".strlen($msg));
      }
    }
  }
}

$master = new ChatServer("localhost",12345);

このchatserver.phpを実行して、複数ブラウザからアクセスしてみると
なぜかそれぞれのソケットリソースへの書込み(socket_writeの箇所)が最初だけうまくいかない。
二回目以降は正しく動く。図で言うと以下みたいな感じ。

左が書き込んだ「よほほい」(1)は右に表示されず、次に書き込んだ「むほほん」(2)は表示される。
Debugしてみたが、(1)も(2)も間違いなくsocket_writeの箇所は通っているし、エラーも吐いていない。
ブラウザ側の問題かもしれない・・・?
よくわかんないけど、また時間のある時に続きを調べます。


※動作環境
PHP 5.3.3
ブラウザ:Chrome 10.0

Google AppsでGmailのテーマを利用する

Google AppsGmailを使用するとデフォルトの設定ではテーマ等、ベータ版の機能が利用できません。
Google Appsの管理者画面で設定を変更する必要があります。


Google AppsダッシュボードのTOPで、「ドメインの設定」を選択します。


「新しいサービスとベータ版の機能」で「ベータ版の機能を使用する」にチェックして保存します。


これでGmailでのテーマ等ベータ版の機能が利用できます。
反映には少し時間がかかるようです。

インストールしたAndroidアプリ

Androidにインストールしたアプリのうち、よかったものをメモ。
【機種:HTC Desire HD SoftBank 001HT】

システム系

Simeji
フリック入力の無い携帯はもう考えられない。とりあえずお約束ということでSimeji。
OpenWnnもいずれ試してみるつもり。

https://market.android.com/details?id=com.adamrocker.android.input.simeji

MySettings
各種設定変更をお手軽にできるアプリ。BluetoothWifiGPSのオンオフ等。
呼び出しモードの変更もここからサクっとできる(マナーモードとか)

https://market.android.com/details?id=jqsoft.apps.mysettings

Advanced Task Killer
タスクマネージャーアプリ。定期的に動かすようにすれば3939になってる。
このテのアプリは一つはいるだろうから適当に入れたんだけど、よいと思う。

https://market.android.com/details?id=com.rechild.advancedtaskkiller

Startup Cleaner 2.0
スタートアップで起動するアプリを制御できる。
今何がバックグラウンドで動いているかの確認にもなる。

https://market.android.com/details?id=com.bright.startup2

アンチウィルスフリー AVG
Androidウィルスチェック。やはり入れておいた方が気持ち的に安心。
程良くバッテリーを食う感じなので注意が必要。

https://market.android.com/details?id=com.antivirus

App 2 SD Free (move app to SD)
アプリをSDカードに移動させるアプリ。移動できるアプリとできないアプリがあり、まとめて表示してくれる。
本体容量が少ない機種であれば必達。

https://market.android.com/details?id=com.a0soft.gphone.app2sd

ツール系

ClipStore
クリップボード管理アプリ。履歴や定型文の登録ができる。
Simejiからマッシュルームで呼び出すことも可能。

https://market.android.com/details?id=jp.benishouga.clipstore

QRコードスキャナー
そのまま。QRコードを読み取る。標準でついてない場合は必要かと。
読み取った内容をメールで送ったりもできる。

https://market.android.com/details?id=com.google.zxing.client.android

ライブ壁紙・ウィジェット

Thunderstorm Live Wallpaper
カミナリのライブ壁紙。この開発者さんのライブ壁紙全部カッケェ。
他に魚、雪、宇宙、空等がある。有料版になると細かい動作の設定ができる模様。

https://market.android.com/details?id=fishnoodle.storm_free

Best Matrix Live Wallpaper
Matrixのライブ壁紙。Matrix壁紙沢山あるんだけど、色々試してこれが一番良かった。
スピードや表示文字種の設定ができる。

https://market.android.com/details?id=com.jarodyv.livewallpaper.matrix

Animated Weather Widget, Clock
HTCチックな時計と天気のウィジェット。タップするとアニメーションの天気表示がされる。
無駄にカッコイイ。

https://market.android.com/details?id=com.mobilityflow.animatedweather.free

ホームアプリ

ADW.Launcher
程良く使いやすいホームアプリ。HTCの既存のヤツでもよかったんだけど、ドック機能が欲しくて。
テーマとかも変更できる。

https://market.android.com/details?id=org.adw.launcher


基本的にAndroidに特化したアプリをまとめてみますた。
しかし、PC版のAndroidマーケット便利すぎるだろ。
PCブラウザから携帯端末にアプリをインストールできるとか楽しすぎる。ついつい入れまくってしまう。
他にも入れたヤツはいっぱいあるので、また別の機会に。


※これらのアプリのインストールは自己責任でお願いします。

何やりたいの?って話

モノづくりじゃないのかもしれないって最近思う。
言ってもエンジニアとして10年以上やってきたワケですから嫌いじゃないですよ?モノづくり。
そう、正確に言うなら「モノづくりだけじゃない」ってことなんだと思います。


じゃあ何がやりたいのかっていうと、一言でいうと「事業」なんですよ。
モノを作って世の中に出して収益をあげる。
これを長年携わってきた、このWebの世界でやっちまいたい。
Webはいい。
「もう無いだろう」「もう出尽くしただろう」と思っても次から次に新しい画期的なサービスが登場する。
きっとこれ終わり無いんだよ。
僕もやりたい。めっさやりたい。
新しいWebサービスを創りだして、世界中の人に使ってもらいたい。
けどそれだけじゃない。それにビジネスモデルを絡めて利益を出していきたい
お金がまわらないと事業とは言えないし、そもそも事業として成り立たない。
お金が欲しいというより、Webサービス事業をやっていきたい
(…ごめん、正直言うとお金も欲しいわwww)


そう、それをやるためには当然「作る」工程が必要になる。
もちろん自分でもできるかもしれないけど、僕よりすごい技術者はいっぱいいる。
いや、いるのは当然わかってたんだけど実際見た
志が高くて、飽く無き技術への探究心を持っている人達を。
そういう人達と力を合わせていきたい。
そうすればきっと素晴らしいモノができあがるに決まってるから。


じゃあお前の役割は何よ?って聞かれるとぶっちゃけよくわからないwww。
どういう立ち位置がいいのかわからない。キャラが定まってない。
キャラづけは甘いけどやりたいコトは決まってる、そういうことです。