Vidyo 技術者認定トレーニング受講してきました。

会社より3日間出張で、Vidyo JapanにてVidyo 技術者認定トレーニング受講してきました。
今日最終日で、35問のQuiz TESTがあり29問正解で合格でした。
東京まで行ってきたので合格して何よりです。

Vidyoとは、最新の映像圧縮技術(H.264/SVC)を使用したテレビ会議システムです。
SVCアーキテクチャーとして特許も取得されている今時の技術なのです。^^
VidyoGatewayを使用すればPolycomとかレガシーな機器も接続できます。

グーグルのビデオチャット「Google+ ハングアウト」、
任天堂のWiiなどにもSVCが組み込まれています。すばらしい・・・

http://japan.vidyo.com/technology/
http://businessnetwork.jp/Detail/tabid/65/artid/2372/Default.aspx

L2TP-VPN に Windows 7 でエラー789で接続できない。

Windows 7 で、VPN接続でL2TP-VPNを作成して接続を試みるも、「エラー789で接続できない。」

解決方法:
 1) regeditで、”HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesPolicyAgent” を
   作成し2をセットする。

   ここを参考:
   http://network.station.ez-net.jp/client/remote/vpn/l2tp-win7.asp 

  それでも、エラー789 ><

 2) サービスを眺めていたら、IPsec 関連のサービスが2つ無効になっていたので、
  それを自動に変更した。
  ・IKE and AuthIP IPsec Keying Modules 無効→自動
  ・IPsec Policy Agent 無効→自動

これで動作しました。明日からのセミナーは自分のPCで操作できるかな。

これか、3Dのメロディーラインを表示 MIDITrail

【自由の翼(TVサイズ)】 -進撃の巨人- オーケストラアレンジ
http://www.youtube.com/watch?v=Zgn9VrBmCOQ
【オーケストラ】進撃の巨人OPメドレー「自由への進撃」(Orchestral arrange “Attack on Titan” OP medley)
http://www.youtube.com/watch?v=rtCTFdhEdYg

で使われている、で使われている、MIDIの信号表示で3D風になってるのですが、なんのソフトが探してみたところ、
3Dの宇宙空間に複数トラックのノートが浮かぶMIDIプレイヤー「MIDITrail」
でした。

すごいなこれ。しかしこういうのをみるとやってみたくなる性分でして、
ずっとずっと昔作曲した曲があるので、このソフトに食わしてみるかな・・

Android でのスクリーンキャプチャー

前回の宿題で、Androidでアプリからスクリーンキャプチャーを取る方法です。

Androidでアプリからスクリーンキャプチャーを取るにはroot権限がないとだめです。(一部機種でrootを取らなくてもできるものもあります。)

Android 4.0以降では、root化してあればscreencap,screenshotコマンドで簡単にとれるのですが、Android バージョン2.3では使えません。
フレームバッファー /dev/graphics/fb0から直接取得することになります。
(このデバイスは,rootでないとアクアセスできません。)

Android 4.0以降では、電源ボタン+ボリューム(↓)同時押しで取れますが、アプリでこのキーのエミュレートをしても、「電源ボタン」押下は、やはりrootでないと反応しません。

今回、自分使用している機種:SONY Xperia SO-01C 480×854 Android バージョン2.3.2では、Google Playにアップされているツールはどれも正常にとれないのです。赤みがかかった画像になる。RBGAの配列が違うようです。しかたがないので作ることにした。

自分のスマホはrootを取っているので、今回はうまくいけば、アプリにする予定
(公開は今のところ考えていません。)

1) フレームバッファーから生データを取得
#cp /dev/graphics/fb0 /sdcard/fb0

fbのファイルサイズは、3,410,432で、480×854で1ピクセル4バイトとすると
+,-,x,/を思考錯誤して以下の式にたどりついた。

(3410432-(65536 x 2))/2 = 480 x 854 x 4

で、元サイズから65536×2バイト余分引いて、ダブルバッファリングしているので1/2すると、ちょうど480 x 854 x 4になります。

2) 無理やりBMPにしてみる。

fb0にヘッダー54バイトを加えます。
unsigned char header[54] = {
    0x42, 0x4d, 0x36, 0x05, 0x19, 0x00, 0x00, 0x00,0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
  0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x56, 0x03,0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x05, 0x19, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

一応、画像になってますが、上下反転して、色も少しおかしいです。RとBが入れ替わってる。

3) データ変換する。行単位で上下を変換し、BGRA -> RGBAにする。

#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>

#define BMP_SIZE (3410432-(65536*2))/2

unsigned char srcdata[BMP_SIZE];
unsigned char outdata[BMP_SIZE];

unsigned char header[54] = {
    0x42, 0x4d, 0x36, 0x05, 0x19, 0x00, 0x00, 0x00,0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
    0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x56, 0x03,0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x05, 0x19, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

int main(int argc, char *argv[]){

int fd,fd_out;
long i,j;

unsigned char c;
unsigned char *p;

fd = _open(“fb0”,O_RDONLY | O_BINARY );
if(fd == (-1)){
return(-1);
}

p = srcdata;

//_read(fd,srcdata , 3410432 – (65536 * 2));
for(i = 0 ; i < BMP_SIZE ; i+= 53760){
_read(fd,p,53760);
p += 53760;
printf(“%in”,i);
}

fd_out = _open(“fb0-001.bmp”,O_CREAT | O_WRONLY | O_TRUNC | O_BINARY,S_IREAD | S_IWRITE );
if(fd_out == (-1)){
return(-1);
}

//これだと、上下逆さ&色抜け(R<->B)
//_write(fd_out,header,54);
//_write(fd_out,srcdata,(3410432 – (65536 * 2))/2);

//————————————

unsigned int width = 480;
unsigned int height = BMP_SIZE  / 480 / 4;

        //上下反転
for(i = 0; i < height; i++){
for(j = 0; j < width * 4; j++){
outdata[(height – 1 – i) * width * 4 + j] = srcdata[i * width * 4 + j];
}
}
//R,B入れ替え
int cnv = 0;
for(i = 0 ; i < BMP_SIZE ; i += 2){
if(cnv == 0){
p = &outdata[i];
c = outdata[i];
cnv++;
}else{
*p = outdata[i];
outdata[i] = c;
cnv = 0;
}
}

_write(fd_out,header,54);
_write(fd_out,outdata,BMP_SIZE);

_close(fd);
_close(fd_out);
}

こうすると、正常な画面になります。これで、スクリーンキャプチャーツールが作れます。(要root)

*root化状態でパズドラを動かすとデータが初期化されますので注意が必要です。といっても/system/bin/su,/system/xbin/su,/sbin/suのようにsuがなければ大丈夫です。

参考:
ビットマップフォーマット
http://www.kuwalab.net/technics/bitmap/
RGB565の時は、16bit のデータフォーマットなので
少し調整が必要です。
http://android-dev-log.ldblog.jp/archives/11346611.html

DBD::Pg::st execute failed: ERROR: invalid input syntax for integer: “”

とある検索データ作成中です。

perlのDBD利用での、postgresデータベースのintegerへのNULL値のinsertエラーですが、以前は、
====
例)
dummy表:
 no integer
 name character varying
 level intger
====

$insert = “insert into dummy (no,name,level) values (?,?,?)”;
$sth_insert = $dbh->prepare($insert);
$data = “null”; #とか、$data = “”でもいけた時もあった。
$sth_insert->bind_param(1,”TEST”,$data);
$sts = $sth_insert->execute();

で、bind_paramの方で、NULL判断してくれてintgerにNULL値が入ってくれてたのにこれだとエラーする。
当然、$data = “”ではだめで、結局 $data = undef;
として、変数そのものをundef(未定義値)にしてOKとなった。

*自分が使ってるphpPgAdminもデータ挿入で、intger項目未入力だと””エラーとなる。
いつからこんなことに。PostgreSQL 8.?以降から。旧システムからの移行するとき注意が必要・・

木の歴龍 テクニカルダンジョン やっとグリフォン 最終日やっとゲットできた。

6/4から超級と地獄級でグリフォン追加されましたが、全然遭遇せず。
やっと最終日の2倍期間で、ゲットできました。
5Fに向けてスキル貯め調整してたけど、4Fで遭遇して2ターンで倒せきれずここは、コンティニューした。
超級、地獄級と合わせて通算36周はしたかと思います。

PostgreSQL インポートエラー

サーバリプレイスの為、PostgreSQL 8.1 コードセットUTF-8で作られたデータベースをpg_dumpでexportして、
新しいサーバのPostgreSQL 8.1にimportしようとしたところ、
invalid byte sequence for encoding “UTF8”: 0xc030
でimportできない。(500MぐらいのDB)データ中に不正なコードがあるようで、
手当てするにもいったいどれだけあるのかも不明・・・

そこで、以下の手順を思いついた。nkfでUTF-8からUTF-8に変換したらいいのではないかと。

nkf -xw –no-best-fit-chars src.dmp > dst.dmp
dropdb abcd
createdb abcd
psql abcd < dst.dmp

importできました。メモに残しておきます。
結局、src.dmp と dst.dmpの差分を取ると、文字化けしていたレ―コードは2レコードだった。

※ -xは、半角カナは半角カナのままにする。
–no-best-fit-charsは、適当なキャラクターに変換しない。(例:全角「-」は全角「-」のまま)

パズドラ: Pazdof パズドフ for Android / Xperia arc (SO-01C) 2.3.2

Pazdof パズドフは、hiehieさんが作られているパズドラのコンボ解析アプリです。

Androi4.0以上だと、「パズドラCombo」があり解析に必要なスクリーンショットもroot権限なしで、電源ボタン+ボリューム(↓)同時押しで取れるのですが、自分の持ってるXperia arc (SO-01C) は、スクリーンショットはroot権限がないととれません。
しかもAndroid 2.3.2でそもそも「パズドラCombo」が使えません。

ここぞという時に使いたいので、Pazdof パズドフを使って見ることにしました。

<必要なツール>
■PCツール
・Android-SDK (adb)
 http://developer.android.com/sdk/index.html
・ffmpeg.exe
  http://blog.k-tai-douga.com/category/359294-1.html
  にコンパイル済みのものが配布されていました。

 *スクリーンショットを取るには、USBでPCと接続してPC上で取る必要があります。
  他のスマホ機種だとroot化していれば、アンドロイドアプリで取れるのですが、  Xperia arc 2.3.2だと全体的に赤みがかかってしまいます。
  Xperia arcはRGBXで、どのアプリもXRGBフォーマットで変換しているようで、使えません。

■Androidアプリ
・Pazdof パズドフ for Android
  https://play.google.com/store/apps/details?id=jp.hiehie.pazdof

<設定>
●PCとXperiaをUSBで繋げておく。
DOS窓で、以下を実行。-pix_fmtは、rgbaです。rgb32だと赤が抜けて青みになります。
フレームバッファから直接rawファイルをPULLして、ffmpegでpngに変換します。

1) adb pull /dev/graphics/fb0 fb0
2) ffmpeg  -vcodec rawvideo -f rawvideo -pix_fmt rgba -s 480×854 -i fb0 -f image2 -vcodec png c:tempimage001.png

3) adb push C:tempimage001.png /mnt/sdcard/Pictures/Screenshots/

●XperiaでPazdof パズドフ起動(Android 2.3.3以上ですが、2.3.2でも動作しました。)

1) [開始]ボタンを押します。
 ・スクリーンショット保存場所:デフォルト設定でOK。
 ・右90度回転はチェックを外す。
 ・ドロップ位置の調整(Y座標) -16でフィットしました。
  正しい位置にくると、解析結果が自動で表示されます。
 ・ルートの表示位置の調整(Y座標) -27ぐらい。

以上で、パズドラを起動すればPCでスクリーンショットを取ってAndroidに転送すれば自動で解析ルートが表示されます。
(*PCからのコマンド実行は、BATファイル作成してファイル名も時間を含むようにすると良い。)

[追記]
Xperia arc 2.3.2 でのスクリーンショットが赤色な謎がこの機会で分かった。
これで、自力でスクリーンショットアプリ作れます。(root化必要ですが)
/dev/graphics/fb0のフレームバッファーをRBGに変換すれば良いだけですので、
以前、カメラアプリを作った時のコンバートが利用できるかと。
https://play.google.com/store/apps/details?id=jp.picolix.camera.controll
http://dip.picolix.jp/disp9.html

Nexus 7 root化したらパズル&ドラゴンズが動かなくなってしまった。

Nexus 7にパズドラ(パズル&ドラゴンズ)入れて遊んで見たんですが、その後root化したらパズドラが動かなくなってしまった。

どうも、
/system/app/Superuser.apk
/system/xbin/su
この2つがあるとだめなようで、/system/app/Superuser.apkは、
/data/app/Superuser.apkに移動して、/system/xbin/suはとりあえず、suuにrenameして、
動作するようになった。

*書き換えメモ:/system フォルダを書き込み可能にする
$ adb shell 
$ su
# mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system