「プログラミング」に関する日記(18)

プログラミング関係の話題。プログラミングコーナーを更新したとか、プログラミングの内容に踏み込んだ話とか。

<前 次>

無題

ほったらかしにしていたプログラミングのコンテンツもそろそろ何とかしたいところですね。
スクリプト言語はもうLuaで事足りてしまったのでDirectXかCairoあたりを充実させたいものです。

無題

MSWMMのページ更新しました。
各要素がUIDでリンクされていることさえ分かれば分からない部分があっても大体何とかなるので特筆すべきことは少ないのですが、とりあえず自分で分かる部分はちょくちょく追記していきます。

無題

オプーナのサントラ、予約始まってますね。
この調子でオプーナ2なんかも出してほしいものです。

MSWMMのXML部分を解析するプログラムを作りました。
プログラミングのページではXML部分の構造は大部分が書かれていませんが、必要な仕様を満たすだけならば全部知らなくてもプログラムを組めるのです。

無題

XMLデータを読み込むときにXmlReaderクラスでちまちま読み込むの面倒だなーと思ってたら、XmlDocumentという便利なクラスがありました。
いちいち開始タグと終了タグを別々に処理する必要がないのです。
また何か作るときに役立ちそうです。

無題

MSWMMのページ更新しました。
プロジェクト設定らしき部分をチョコチョコと。
動画の構成を知る上ではあまり重要じゃないデータかな?

そうそう、ポケモンでコバルオン捕まえました。
そらをとぶ要員として連れてきたはずのカモネギがなぜか大活躍してくれました。

無題

先日のαチャンネルと元の色を復元するプログラムはAlphaGeneratorという名前にすることにしました。
ひねりのないソフトだけにひねりのない名前です。
名前はともかくとして、先日の数式には問題がありました。
というのも、ブレンド結果は元の色OのRGB値それぞれに対して同一のα値を用いるためブレンド結果から単純に元の色が割り出せないのです。
で、ブレンド結果から直接ではなく、α値を求めてからその値を用いて元の色を算出します。
O = (CA*255 - BA*(255-A))/A

無題

任意の2色を背景とした2画像からαチャンネルと元の色を復元するプログラムを作っています。

α値があると想定した本来の画像において、
・元の色を共通でO(0~255)
・α値を共通でA(0~255)

背景色とブレンドした画像AとBにおいて、
・背景色をそれぞれBAとBB(0~255)
・ブレンド結果をそれぞれCAとCB(0~255)

とすると、
・CA = O*A/255 + BA*(255-A)/255
・CB = O*A/255 + BB*(255-A)/255

という連立方程式が成り立ちます。

これを解くと、
・O = (BA*CB - BB*CA)/(BA - BB - CA + CB)
・A = 255*(BA - BB - CA + CB)/(BA - BB)

となります。

この式を適用することで、
・元の色とα値は分からない
・背景色とブレンド結果は分かっている
という画像の元の姿が復元されるわけです。

9周年

ということで、EncodingEditorをアップしましたよ。
今までちゃんと動作テストしていなかったのでこの機会に動作テストをして、問題のある部分は修正して、妥協する部分は妥協して、注意点はちゃんと明記しておきました。

無題

EnumFlagEditorを先に公開しました。
EncodingEditorのほうは実装していながら全くテストしていない部分があるので。
各列挙型の宣言のところで設定してもプロパティのところで設定してもいけます。

無題

EnumFlagEditorだいたいできました。
フラグをポチポチ立てたり下ろしたりしていると組み合わせフラグも連動してなんだか楽しいです。

1284649111.png

無題

MSWMMのXMLの要素のページを更新しました。
まだ中途半端ですがこうやってアップしておかないと忘れそうで。

無題

アンパンマンDBの最近のTOP10が機能しなくなっていたので修正しました。

それはそうとちょっとニコニ・コモンズについて。
今はランダムに並べる機能がないのでなんとかこっち側で実装したい。
まず、サーチ結果のページ内容から「件中」を含む行を抜き出し、その行内でbタグに囲まれた最初の数字、または「件中」より前にある最後の数字を抜き出す。
0~抜き出した数字-1の範囲の整数の乱数(R)を生成する。
(R)を30で割った整数部分に1を足すとページ番号(P)、あまりがページ内オフセット(O)となる。
次にアクセスするURLは「http://www.niconicommons.jp/search/~?page=(P)&…」だとわかる。
「<!--thumb start -->」と「<!--thumb end -->」で囲まれた部分が一つ一つの素材。
正規表現などを使ってこの部分を順次抜き出せば(O)の値を使って目的の、つまりランダムな素材が見つかる。
偏りのある乱数生成器とニコニ・コモンズのソート機能を使えば新しいものや人気の素材が出やすいようなランダムセレクトも作れる。
これを順次繰り返せばランダムに並べる機能も作れるというわけ。
コモンズサーバーへの負荷を考えるならば同じページへのアクセスは極力減らして一回のアクセスで必要な情報を全部取り出すようにしたい。

今からやるぜ!

影の塔、買いました。
なんかサントラも付いてきていました。
ゲーム音楽好きの私としてはとても嬉しいことですね。

そうそう、影の塔のページの更新とかぶって目立っていませんが、先日言っていたPropertyHelperを公開しました。
よろしければ使ってくださいませ。

ギャギャー星人が行く

オプーナやってました。
気になってたテレビを一気に最終話まで。
聖者の白いネコはまだ見ていなかった気がしますが。

TGWSAdmin、アクセスログの集計システムが出来上がりました。
とりあえず検索フレーズとアンパンマンDBの集計が実際にできるようになりました。
以前はアクセスの延べ回数で数えていたのですが、今回はユニークアクセス数を取るようにしました。
また、大文字小文字や全角半角の違いは吸収し、表記ゆれがある場合には最も多かった表記を採用するようにしました。
延べ回数で言うとずいぶん前から「アンパンマンDB」が検索フレーズのトップだったのですが、ユニークアクセス数で言うと実は「爆ボンバーマン」が一位だったりします。

で、この副産物としてPropertyHelperなるクラスが出来上がりました。
なんというか、きわめてありふれた機能しかないのですが、自分で作ったほうが早く、なおかつ使いまわすと便利なクラスなのでした。

無題

自動更新プログラム作っていました。
各タスクの設定をするためにPropertyGridコントロールとやらを使ってみました。
属性を使いまくるので慣れない部分が多いですが結構楽しいですね。
ソフト自体の動作としては、パスワードの流出を避けるため、パスワードを送る前に偽のパスワードを送信し、ちゃんとエラーを返してくれるかどうかをチェックしています。

grepfolder使ってみました。
ファイルの全文検索を行うソフトなのですが、使う文字コードを指定できるのが嬉しいですね。
バイナリ検索もできれば言うことなしだったのですが。

無題

明日アンパンマンの新しい映画が上映開始ですね。
公式ブログでも「お友達やお母さん、お父さん、おじいちゃん、おばあちゃんも誘って、ぜひ劇場へお越し下さい。」なんて言ってます。
お友達に「大きいお友達」は入るんでしょうかね。

個人的に旬な話題のMSWMMの構造についても少しずつ調べています。
MSWMMのファイルを自分で作るというよりは、MSWMMファイルを解析してそれを元に別なものを作りたいという気持ちがあります。

無題

MSWMMのページを更新しました。
XMLの中身に深く立ち入る前にまず形式的にサンプルに含まれている要素を列挙してみました。
また、情報量が結構多くなってきたのでページの分割もしておきました。

無題

NeoMuplのDLL作ってました。
DirectMusicはとりあえず再生はできるようになりました。再生状態の取得がまだできない状態ですが。
まあ、再生状態の取得は以前にもやっていたことなのでたいした負担ではなかろうと思います。
で、NeoMuplの本体を使ってテストするのはやっぱりテストの自由度に制約が出るので、テスト専用のプログラムを作成しました。
DLLに渡すパラメータを設定するだけの簡素なもので、テストプログラムのほうでは例外処理なんかは一切行っていません。
そして、DirectShowとストリーミング再生の仕組みもだんだん分かってきたので、そろそろDirectShowの再生にも着手できそうです。
多分DirectMusicとDirectShowの間でDirectSoundを共有すればエラーで落ちるなんてことはなくなくはず…。確証はないけど。
あと、従来のNeoMuplはDirectShowでの再生ではループ位置の設定が非常にいい加減でまともなループ再生ができなかったので、今度はサンプル単位で精密なループ処理ができるようにしようと考えています。実現可能かはまだ未知数ですが。

<前 次>