Nexus 7 (2013)からの動画キャプチャ

ゲームの録画をしたくなったので動画キャプチャ環境を整えたなど。最初はChromecastの出力をHDMIスプリッターに繋いだけど、やはり帯域の問題で、Chromecast に出力した時点で画質が結構劣化してた。有線のHDMI出力アダプターの方が明らかに鮮明だった。

録画サンプルと機器の詳細をメモしておくよ

録画サンプル

(A) N7 2013 → Chromecast → HDMI スプリッタ → HDMI キャプチャ

http://juggler.jp/game-prru/video/capture-via-chromecast.mp4

(B) N7 2013 → HDMI 出力アダプタ → HDMI スプリッタ → HDMI キャプチャ

http://juggler.jp/game-prru/video/capture-via-hdmi-adapter.mp4

Windows ムービーメーカーで切り出して再エンコードしたもの
Bの方が明らかに良いね

機器の詳細

SlimPort 用 HDMI 出力アダプタ

microUSBから映像を出力する規格はMHLとSlimPortがあり、GalaxyやXperia系はMHL、Nexus系はSlimPort らしい。それぞれ異なる出力アダプタが必要になる。

http://www.amazon.co.jp/gp/product/B00I1C6RZ6 Nexus対応 SlimPort to HDMI 変換アダプタ 【Nexus7(2013動作確認済】 〔添付品 : HDMI ケーブル・充電用ケーブル〕

メーカーのVodaviewがAmazon経由で販売しているもの。充電用USBケーブルとHDMIケーブル付きで2789円だった。画面の縦横は自動的に処理される。Full HD を縦画面でそのまま…というモードはないみたい

HDMI スプリッター

HDCP 周りの問題を解決するためにHDMIスプリッターを挟む。

http://www.amazon.co.jp/gp/product/B003U0M3BQ LEICKE KanaaN 1入力2出力 対応HDMI 分配器 スプリッター Y-アダプタ 1080p FullHD1.3b 2-port/ 1 to 2

SPD Japan出品の純正品。HDMIケーブル1本+ACアダプタ付きで2599円だった。バスパワー動作は出来なかった。

HDMI キャプチャデバイス

HDMI 信号の画像と音声をPCにキャプチャする機器。まあ何でも良いと思うんだけど、今回使ったのはコレ

http://www.amazon.co.jp/gp/product/B00MIQ40JQ Elgato(エルガト)Elgato Game Capture HD60 (日本語ソフトウェア/正規輸入品)

Elgato Game Capture HD60

Elgato Game Capture HD60

メーカーのElgatoがAmazon経由で販売しているもの。18590円だった。1080p/60fps 対応、HDMI パススルー出力あり。キャプチャ時のエンコード品質は標準(14Mbps,6.4GB/時)から最高(40Mbps,18.1GB/時)まで調節可能。

irc.juggler.jp のサービス障害と irc2.juggler.jp の追加

irc.juggler.jp は2014年10月9日17時45分頃から翌日2時30分頃まで停止していました。

リレーサーバなしだと障害時にチャンネルを維持できないので、対策として irc2.juggler.jp を用意して irc.juggler.jp とリレーさせました。 使っているIRCサーバソフトは64bit環境での稼働実績がなく、またVPSでのIRCサーバ運用もこれが初めてなので公開ベータ扱いです。

irc.juggler.jpの2ch@IRC脱退について

http://irc.juggler.jp/ の告知の詳細です。

2014年4月に Jim が irc.2ch.net をDNSから消しちゃった件について、2014年9月に Jim と色々交渉した結果、彼のネットワークポリシーだと irc.juggler.jp が再度 2ch@IRC とリレーできる可能性はほとんどないという結論に至りました。よって irc.juggler.jp は 2ch@IRC から脱退して、独立したIRCサーバとなります。ユーザの皆様にはご不便をおかけします。

2ch@IRCの現状

  • irc.2ch.net : 2ch@IRCの新1鯖。Jimが9月6日に建てた。彼のネットワークポリシーにより、外部とのリレーはほぼ不可能
  • irc.2ch.sc : 2ch@IRCの旧1鯖。3月ごろまでは irc.2ch.netの名前でアクセス可能だった
  • irc.nurs.or.jp : 2ch@IRCの旧2鯖。3月ごろまでは irc2.2ch.netの名前でアクセス可能だった
  • irc.juggler.jp : 2ch@IRCの旧3鯖だった。(脱退済)

上記4つがリレーせずに存在して、ユーザが分散しているのが現在の状態です。

時系列

今回の流れを時系列順に書くとこうなります

  • 4月ごろ:irc.2ch.netおよびirc2.2ch.netがDNSから消える。ただしサーバは稼働しており、旧1鯖はIPアドレス指定で、旧2鯖は IPアドレス指定および irc.nurs.or.jp の名前でアクセス可能。
  • (時期不明) 旧1鯖に irc.2ch.sc の名前でアクセスできるようになる。ただしWebサービスは停止した
  • 6月30日: irc.nurs.or.jp が メンテナンスに入る。この時点でサーバ間リレーは機能しなくなった。
  • 9月4日:irc.juggler.jp が 2ch.net の現管理者の Jim と交渉を開始。
  • 9月5日:irc.juggler.jp は 2ch@IRC から脱退を表明。
  • 9月6日:Jimは彼のirc.2ch.netを新しく建てた
  • 9月6日:irc.nurs.or.jp がメンテナンスから復旧

2ch@IRCの今後の展開

irc.2ch.net に Jim が Web IRC を設置するのは時間の問題でしょう。そうなると「板からリンクされてゼロインストールで使えるチャット」という2ch@IRCの本来の機能は復活することになります。

ただし長期的には、西村 vs Jimの 裁判によりDNSの所有権が移動して、irc.2ch.sc が irc.2ch.net として復活する可能性がかなりあります。

irc.juggler.jp の現状

irc.juggler.jp は irc.2ch.net にも irc.2ch.sc にも肩入れしないという選択をとりました。Jimが建てた irc.2ch.net とリレーできる可能性がない状態で 2ch@IRC を名乗り続けるのも、irc.2ch.sc とのリレーが長期間存在しない状態で 2ch@IRC を名乗り続けるのも、適切ではないと感じたからです。

2ch@IRCの既存ユーザの受け入れ先について

2ch@IRCの既存のユーザの大半は現時点では irc.juggler.jp に接続していますが、ユーザがどう動くのかは私にはわかりません。

irc.juggler.jp から外部サーバへの誘導告知を積極的に行える状態にはなっていないと思います。主に受け入れ側の態勢が整っていないという認識です。お家騒動が解決して、受け入れ準備ができた状態でならirc.juggler.jp はサービスを閉じても構わないと思います。もし irc.juggler.jp 独自のユーザ層ができていればまた話は別ですが。

個人的な感想

4月からの 2ch@IRCDNSトラブルによるユーザ数の減少がどれだけ食い止められるか、というのが私の視点です。Jimが裁判に勝っても負けても、その後に 2ch@IRC のユーザがどの程度残るのかが重要でした。irc.2ch.netとそのWeb導線が生きているのなら、それを誰が運営しているかはどうでもよいと思います。
結果的に私自身と 2ch@IRC との関係がなくなるというオチになりましたが、別段それで誰が困るということもないでしょう。

irc.juggler.jp の今後については、 2ch@IRC の末端という立場ではなくなった故に可能になることもいくつかありますが、どちらかというといつまでもIRCだとモバイルとの相性が悪くてどうしようもないので、そこをなんとかしたいです。

Android アプリの間違った作り方 の続き


ずっと前に「Android アプリの間違った作り方」という記事を書いたけど、
見なおしてみると色々アレだったので、今ならこうするというのを書いておく

Activity の初期化と終了処理

Activityはバックグラウンド状態になったり画面を回転させたりすると一時的に破棄/復元される事がある。プロセスごと一時的に破棄される場合もあるので、例えばstatic変数に状態を保存しても復元の際にそれが維持されているとは限らない。初期化処理と終了処理を書く際に破棄と復元を考慮するには以下のような工夫が必要になる。

onCreate(), onNewIntent(), onSaveInstanceState(), onRestoreInstanceState()

あるActivityが作成された時に、それが最初に作られたのか、一時的に破棄された後に復元されたのかはonCreateの引数がnullかどうかで切り分けられる。この引数に渡されるBundleは onSaveInstanceState() で設定したものと同じ内容になる。

void onCreate(Bundle state){
	initUI(); // ActivityのUIを初期化する
	if( state != null ){
		// このActivityは復元されたものなので、
		// state を使って状態を復元する
		restoreState( state );
	}else{
		// このActivityは新規に作成されたものなので、
		// インテントを使って状態を初期化する
		initState( getIntent() );
	}
}

void onNewIntent(){
	// あるActivityが新しいIntentを受け取った時に呼ばれる
	// インテントを使って状態を初期化する
	initState( getIntent() );
}

void onSaveInstanceState(Bundle state){
	super.onSaveInstanceState(state)
	// TODO: state に画面の現在の状態を保存する
}
void onRestoreInstanceState(Bundle state){
	// state を使って状態を復元する
	restoreState( state );
}

void initUI(){
	// UIの初期化を行う
}
void initState(Intent intent){
	// TODO: intent の情報を使って状態を初期化する
}
void restoreState(Bundle state){
	// TODO: state の情報を使って状態を復元する
	restoreState( state );
}
isFinishing()

Activityの 終了処理をonPause,onStop,onDestoroy に書く際、一時的な破棄とfinish()による破棄を区別するには isFinishing() を使う。あるActivityが一時的に破棄される際は isFinishing()はfalseを示す。

アプリケーションレベルの状態の管理

もしあなたのアプリAで「アプリ単位の状態管理」を実現したいなら、まずはAndroidはアプリ単位の起動状態なんて管理していないことを知っておいて欲しい。特に何も指定しない場合、アプリAに含まれるActivityは別のアプリBの画面スタックの末尾に積まれることもあるし単独の画面スタックに積まれることもある。公式ドキュメントのタスクアフィニティについての記述を参照。
http://developer.android.com/guide/components/tasks-and-back-stack.html#Affinities
それでもアプリケーションレベルの状態を管理したいなら、以下の手法が使えるかもしれない。

アプリケーション単位の初期化を行うタイミング
  • 外部から起動されるActivityの種類を1個だけにする
  • そのActivityに android:launchMode="singleTask" を指定する

この状態でそのActivityのonCreate()が呼ばれて、それが復元ではない(Bundle引数がnull)場合、その時点でアプリ単位の状態を初期化していい。

アプリケーション単位の状態の保存と復元

これだけだとプロセスごと破棄された場合に状態が失われてしまうので、
アプリ単位の状態をフラッシュメモリに保存する仕掛けを入れる。
画面スタックの底にあるアクティビティとそこから呼び出される子アクティビティの全てに以下のような記述を行う。

(manifestに登録したアプリケーションクラス)
class App1 extends Application{
    static MyAppState app_state;

    void saveAppState(){
        is( app_state != null ){
            // TODO: アプリ単位の状態をフラッシュメモリに保存する
        }
    }
    
    void prepareAppState(Activity activity,Bundle activity_state){
        if( activity_state == null &&  activity is (画面スタックの底にあるアクティビティ) ) ){
            // 初回起動なので、状態を初期化する
            // もし直前までの状態が残っていればその後処理を行ってもよい
            app_state = new MyAppState();
        }else if( app_state == null ){
            // TODO: フラッシュメモリから状態を読み込む
        }
    }
}

(Activity派生クラス全て)
void onPause(){
    super.onPause();
    ((App1)getApplication()).saveAppState();
}
void onCreate(Bundle state){
    super.onCreate();
    ((App1)getApplication()).prepareAppState(activity, state);
}

この方法には問題もあって、外部から呼び出せるアクティビティが1個に限られてしまうし、
それが呼び出されるたびにアクティビティの画面スタックのルート以外の部分が全て一旦クリアされてしまう。

アプリ単位の揮発性の状態を管理する、もっとイイ手法があれば誰か教えてください。

PENTAX K-3用のカメラプレート(Lブラケット)

カメラを縦位置で三脚に固定する際、アルカスイス型雲台の信者はカメラにL字型のプレートを取り付けるのですが

RRSもKirkもK-3用のLブラケットを出す予定はないそうですorz

We have no plans to create custom plates for the K-3 camera at this time.
Unfortunately it seems that camera will not be able to use our BK7-L plate,
which fits the K-7, K-5, K-5 II/IIs models.

If you would like a generic plate to fit to that camera,
I’d need to know the distance between the center of the tripod socket and the straight back
edge of the camera. Please let me know if you have further questions.

Really Right Stuff, LLC

Q: do you have plan to sell the L-braket for Pentax K-3 ?

A: Sorry we do not. Thank you,

Kirk Enterprise Solutions

(2013/11/1) K-3本体が来てみたらKIRK BL-K7 が普通にぴったり装着できました。底面の突起もちゃんと避けてます。なので以下の記述はほぼ無駄になったかも… ちなみにRRSのBK7-Lは前側のストッパーが干渉して装着できないはずです。



仕方ないので汎用のLブラケットを探してみます。

Desmond L型クイックリリースプレート DAL-1

Desmond L型クイックリリースプレート DAL-1

SUNWAYFOTO DPL-03

製品画像 http://i.imgur.com/ZzUViHc.jpg
http://i.imgur.com/ZzUViHc.jpg

  • 左側は KIRK BL-K7 です。K-5/K-7用のカスタムLプレート。90g。ネジ穴がクランプの中央にくるようになっています。カメラ本体底面四隅にある足(突起)を避けるよう、周辺部は少し凹んでいます。手前側にはストッパーがないのでK-3でも干渉しない可能性はゼロではありませんが、ネジ穴の位置を調整する機構はないのでカメラ本体の三脚穴の位置によってはフィットしないような気がします。
  • 右側は SUNWAYFOTO DPL-03 です。カメラ本体の三脚穴の位置にあまり依存しない構造。ストッパーを外したり左右逆に装着したりできます。HDMIやUSBの端子と干渉するおそれがありますが、K-3ならFLU CARDがあるのであまり気にする必要はないでしょう。画像手前の部分が長めなので、装着位置によっては電池ボックスを開けられなくなります。

JTec の汎用Lブラケット

製品画像を見る限りコンパクトそうで良いのですが、重量が全部58gというのは記載ミスでしょう。

感想

電池ボックスを塞いでしまうのは思ったより難儀です。重量よりも全長の短さを重視した方がいいかもしれません。K-5で測った場合は横幅95mm以内であれば電池ボックスを塞ぐことはないようです。挙げた中でこの条件を満たすのはhejnarの92mm,JTecの74mm,76mmが相当します。


使用感などの報告はK-3本体が届いてから…

PENTAX K-5, K-3 のACアダプタ

ペンタックスデジタル一眼レフに装着するACアダプタは二種類あります。

  • K-AC50J (D-AC50とメガネケーブルのセット)(対応機種 645D/ K-5/ K-7/ K10D/ K20D )
  • K-AC123J (D-AC120とメガネケーブルのセット) (対応機種 K-5II / K-5IIs / K-3 )

実際に両方買ってみました。

製品画像 http://i.imgur.com/jh6QObC.jpg
http://i.imgur.com/jh6QObC.jpg

サイズと重量は K-AC50J よりも K-AC123J の方がややコンパクトですが、コネクタ形状と定格出力(DC 8.3V 2A 16.6W)は同じでした。
気になって問い合わせてみたら「結論からいうと互換性はある。明記していないのは認可が云々」という回答を頂きました。
どうも電気用品安全法絡みのモデルチェンジのようですね。

…ちくしょう! 片方は無駄になっちゃったじゃないか!