Lutea - H2k6以外の何か Prototype Phase 8

November 21, 2010

まだPrototype Phaseですが、名前を付けて公開してます。
H2k6風 データベース型オーディオプレーヤ Lutea(仮)
オプソでC#で開発中。

ここまでPrototype = H2k6とのコンパチ優先で作ってきましたが、
そろそろPrototypeを外そうかと思っています。

まずマルチユーザ対応は要らないと思うので外したい。
(現状で設定ファイルがマルチユーザ非対応ですし)

それから、.qファイルについてもINIファイル形式が嫌なので変えたい。
案はいくつかあるのですが、現状有力なのが単一XMLファイル形式で、
<?xml version="1.0" encoding="UTF-8" ?>
<folder name="クエリ">
  <query name="一週間以内に聞いた曲">SELECT * FROM list WHERE current_timestamp64() - lastplayed &lt;= 604800;</query>
  <query name="ランダム20曲">SELECT * FROM list order by random() limit 20;</query>
  <folder name="評価から">
    <query name="評価3つ星以上">SELECT * FROM list WHERE rating &gt;= 30;</query>
    <query name="評価5つ星">SELECT * FROM list WHERE rating = 50;</query>
  </folder>
</folder>

こんなファイル1つに全部まとめてもいいんじゃないかなと思っています。



車輪の

October 13, 2010

sqlite3.dllの.Netラッパー書いててはまったこと。
呼び出し規約。

sqlite3のAPIは関数の呼び出し規約がcdeclなのでDllImportする関数全部にCallingConvention = CallingConvention.Cdeclを付けなきゃいけない。
[DllImport("sqlite3.dll", EntryPoint = "sqlite3_close", CallingConvention = CallingConvention.Cdecl)]
private static extern int sqlite3_close(IntPtr db);


また、create_functionにて使用するコールバック関数のデリゲートもcdeclにしなければならない
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void _XFunc(IntPtr sqlite3_context, int n, IntPtr sqlite3_value);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void _XStep(IntPtr sqlite3_context, int n, IntPtr sqlite3_value);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void _XFinal(IntPtr sqlite3_context);



H2k6以外の何か Prototype Phase 3 なう。

September 28, 2010

yah2k6-2

http://blog.livedoor.jp/nig_luce/archives/51615576.htmlの件。

2chのH2k6スレにぽつぽつ書いてますが、実装進めてます。

最近はID3v2,MP4(AAC),Ogg,Flac,ApeTag(Ape,WV,TAK)のタグ読み込みを実装してみたので、
ライブラリへのインポート機能を作ろうかなと思ってます。
最終目標の中にCUEとInternalCUEに対応するというのがあるのですが、
CUEはともかくInCUEはH2k6のデータベースに入れるのは無理がある感じになるので保留ってことで。

CUE,InCUEの扱いについてですが、今考えているのはH2k6のDBに新たにtrack_numberというColumnを作り(
file_nameとtrack_numberのセットがDBの主キーになります)
file_nameとtrack_numberのペアでトラックを識別するという方法です。
具体的には

file_name | track_number
"hoge.mp3" | 0 ← 通常の単曲ファイル
"fuga.cue" | 1 ← hoge.cueの1曲目
"fuga.cue" | 2 ← hoge.cueの2曲目
"piyo.ape" | 5 ← piyo.ape埋め込みCUEの5曲目

という感じになります。

CUE対応を考えると、CUEから参照されているファイルの扱いが若干悩ましいところであります。

例えばフォルダに
hoge.cue
hoge.ape
があって、hoge.cueはhoge.apeを参照しているという場合、
hoge.cueを優先し、hoge.apeは単曲としてインポートすべきではないでしょう。

では、hoge.apeにcueが埋め込まれていた場合は?
hoge.apeをInCueファイルとしてインポートしてhoge.cueは無視するのが妥当ではないでしょうか。

ところで、CUEから複数のオーディオファイルを参照している場合は単曲ファイルをCUEで纏めていると考えられます。
この場合はCUE優先、かな。

先日ドコモ契約しました。

August 09, 2010

もう7年ほどDポ/ウィルコム一本でやってきましたが、新たにドコモの携帯を契約しました
ありがとうウィルコム。
いつさようならするかはまだ考え中ですが、多分停波までキープすることはないと思います。

購入した端末は東芝製T-01Bです。Windows Mobileです。
将来的にはAndroidかなーとは思うのですが、現状ちょっと気に入らない所があるのでAndroidはパスしました。
最後のWindows Mobile端末として、すなドラ!1GHzの端末を買ってWMの真価を見るというのもいいかなと思いましたので。
続きを読む

alertがoverrideできない。これIEのバグっぽい気がするんだけどどうすれば

June 25, 2010

JavaScriptでいちいちalertのダイアログが出るとうざいなって時に
window.alert = function(){ /*・・・*/ }
という感じでalertをoverrideして置き換えることがたまにあると思います。
どこかのdivに出力させる、とか、firebugのコンソールに送るとか、何もしない、とか。

ところが、IEにおいては特定の条件下で上記のコードを評価した後でもnative codeのalertが実行されてしまう、つまりoverrideができていない、という現象が見られました。

特定の条件とは何かというと「alertを置き換える前にalertを呼び出している」ことです。
なぜalertを呼び出した後だとalertの置き換えができないのかさっぱり分かりません。
また、他の組み込み関数についてはまだ調査していません。

確かなのはこの挙動をするのがIEだけであり、IEでもalertを使う前にoverrideした場合は期待通りに新しい関数に置き換えられるということです。

--
テスト用ページを作りました


本件は以下の環境にて検証しました。
IE 8.0.6001.18702@xp SP3
IE 7.0.5730.13IC@xp SP3

エロゲームービーとそのエンコーダ/コーデックのライセンスについて

April 24, 2010

前回のエントリからTMPGEnc Free版の商用利用に関する部分を抽出し、TMPGEnc以外のライセンスについて加筆しています。

概要

TMPGEnc (ver. 2.525.64.184)は無料版にしか存在しないバージョン番号であるため、ver. 2.525.64.184でエンコードされたファイルは無料版のTMPGEncでエンコードされた動画であることが分かります。
しかし、TMPGEnc 無料版の商用利用は禁止されていますので、ソフトウェアの販促動画を作成する目的での使用はライセンス規約違反であると考えられます。

 3: 禁止事項
    3) 商用利用の禁止
    私的使用目的での利用、または社内・内部使用とプレゼンテーション使用目的での利用とします。
    商用利用する場合は、「TMPGEnc Plus 2.5」をお買い求め下さい。 

TMPGEnc無料版 ソフトウェアライセンス規約より抜粋

TMPGEnc (ver. 2.525.64.184)でエンコードした動画を販促に使用しているソフト

ブランドタイトル作者ファイル名MD5
Frontwing魔界天使ジブリール4URA(エンコード者不明)Djib4_OP.mpge643f6d0f43b90f507e285403aec6702
しゃくなげみみをすませば不明mimisuma_op.mpg8bdb3a208bce8891ec9b4225f2e8cd7a
しゃくなげぴゅあらっ!不明purelove_op_cm.mpg58e1e17a1846f4e6e3d343967d83458e
脳内彼女嘘デレ!(嘘バージョン高画質版)けっぽし(StudioKPC) usodere_pvuso_high.mpgd98c04208bb9d706cf01fe3cc95414f3
みなとそふと真剣で私に恋しなさい!!スタジオ雲雀(エンコード者不明)majikoiOP.mpg4c50640f7e5e5ade9dd21c98656cd8b8
August夜明け前より瑠璃色な Moonlight Cradle 不明mc_promotion.mpgf193fd9d1f42b62d0d553f591b8cf7b1
August夜明け前より瑠璃色な Moonlight Cradle 不明夜明け前より瑠璃色なMC_PVHDWEB.mpg9b312850014f4ceaa7a763c40df505bc
Lump of SugarPrismRhythmRMGPrismRhythm_demo.mpgbaeee5ad5857e0cec848e57bd2c683d7

この表は随時更新する予定です

さいごに

以上のように無料版のTMPGEncを商用に利用している例が多く見られます。

確実にTMPGEnc 無料版だと断定できるのはTMPGEnc ver. 2.525.64.184を使用しているものだけですが、これら以外にも古いバージョンの無料版が使用されている例が多くあるのではないかと思います。

また、MPEG2/MPEG4系/MP3を使用している場合、各コーデックの権利を保持している団体へのライセンス料の支払いが必要となる可能性があります。
例えばMP3については、ゲームソフトの製品内で使用する場合mp3licensing.com - Royalty Ratesで規定されているライセンス料が発生します。
但し、ソフトウェアの販促目的での公開という場合にどういった条件が適用されるかは不明です。

*参考:TMPGEnc FAQ::TE25.TMPGEnc 2.5(無料版)の商用利用は?



エロゲムービー考(技術面)

April 20, 2010

所謂エロゲー・ギャルゲームービーを集めてるフォルダの動画を調べてみて分かったこと。

手法


動画ファイル中に含まれている文字情報を抽出してみます。
Linux上のzshにて下記のコマンドを実行しました。
$ for i in *.mpg *.mpeg ;do ;echo ;echo $i ;strings $i | head -n 10;done | less


なお、今回はmpeg形式のファイルのみを対象としています。

以下追記。続きを読む

Yet Another Hogehoge....

March 17, 2010

H2k6モドキのプロトタイプをちょこちょこ作ってたりします。

yah2k6


H2k6はMFC系アプリですが、自分はC++でWindowsアプリを書ける気がしないのでC#で書いています。
…P/Invokeでsqlite3.dllやbass.dllを呼び出してうんたんというのもちょっと馬鹿馬鹿しいですし、そこまで揃える必要もないのですが。

プロトタイプシステムの目的は
「H2k6形式のデータベースを読んで再生するアプリを作る」
ことです。
後に流用できるようなライブラリ(sqlite,bass)のラッパーとプレイヤーのコアを作ってしまおうという目論見です。
こいつは一通りできたらpublicにしてみるつもりです。
現時点でもデータベースは読んで、音は鳴らす"だけ"は出来ているのですが。

ただ、とりあえずプロトタイプは書いてみてるんだけど、その後の方向性が決まってないっていう状態です。
永遠に決まらない=本気システムの実装がスタートしない可能性もかなり高いです。
その辺の思うところも後で書くかも。

すぷりんぐをーず

March 10, 2010

ネットエージェントの
〜研究開発職志望の方へ〜 「特別枠」で面接します
の問2が解けない。

問1はBase64。ぐぐっても答え出てるからいい。
decodeすると"pbh.jp/wiz"になる。
このURLをそのまま入れると301でhttp://packet.black.hole/wiz/にリダイレクトされるが"pbh.jp/wiz/"(スラッシュを補完)とすると問2のページに行ける

問2は2問あって、
(a)e5877ebe3560be14d35c6eb96ffa38fee97078f0 を解読
するか
(b) を解読
するかして答えを http://vulnerability.jp/{answer}.html
の{answer}に入力するというもの。
(a)と(b)の答えは違うらしい。

これも現時点ではぐぐると出てくるから既知とするけど(a)は"pbh.jp/wiz"をSHA1関数に通したもの。

しかし、"pbh.jp/wiz"を入れてもNot foundが出るだけ。
"pbh.jp/wiz"とSHA1ハッシュ値が衝突する文字列を求めろってことでは?っていう説もあるが、これを求めるのは結局マシンパワー頼り。
セキュリティ会社の採用試験の問題の模範回答が「ぶるーとふぉーすします」はナシだろう。
というわけで、"pbh.jp/wiz" == SHA1 ==> e5877ebe3560be14d35c6eb96ffa38fee97078f0 から読み取ることは
SHAを使って「何か」をしたものがanswerになるよ、ってことのはず。

で、SHAをどう使うか、これが分からない。
"pbh.jp/wiz/" や "packet.black.hole/wiz" 等をSHAに通したものをanswerに入れてみたが、どれもnotfound・・・


それでは、(b)はどうか。
まぁ換字なんだろう。
文字数が少ないので出現頻度を考えても意味はなさそう。
文字を鏡映しにしたように見えるところがあるけど、多分関係ない。
2行目の両端が'になっていて、引用符で囲まれたように見える。
これが引用符だとすると、2行目が引用符に囲まれた文字列で1行目が関数名(?)か何かのように見える。
9文字の関数、として思い浮かぶのはまずSHAnnnSUMじゃなかろうか。
(a)でSHA1SUMを使って(b)でSHAnnnSUMを使うというのはかなりモットモラシイ。
しかし、1行目がSHAnnnSUMの換字だとすると1文字目と7文字目がともに"S"の文字であることと矛盾してしまう。

残念。・・・しかしここでモットモラシイSHAnnnSUM説を捨てるのは嫌なのでもう少し深追い。
(b)の文字を見ていると何となく数字を思わせるような規則性がある気がする。
というわけで、単純な換字ではなく、アルファベットの並びの上で前の文字との差を取ってそれを符号化していると考えてみる。
しかし、この説も5文字目と8文字目が同じ符号になるということと矛盾する。
なぜなら8文字目はUであり、7文字目のSとの差分は2に決まるが、これを満たす5文字目が存在しない。
SHA224SUM => 5文字目は0の符号
SHA256SUM => 5文字目は3の符号
SHA384SUM => 5文字目は5の符号
SHA512SUM => 5文字目は(-4)の符号
となり、いずれも2にはならない。

・・・はい詰んだ。
というわけで今日新幹線の中ででもまた考えます。

Data corruption in atl1e NIC (on Linux?)

January 31, 2010

NFSでマウントしたりしたデータが壊れるー orz のです。
とりあえずメモ書き。続きを読む

GWAVE公式WEB