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

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

<前 次>

無題

アンパンマンDBのデータベース容量超過のことですが、うちのサーバーではどうやらSQLiteも使えるようです。
もし本当に使えるとするとWeb公開用の800MBが使えるので、今まで2MBしかなかったデータベース容量から考えると破格の大容量といえます。
アンパンマンDBの数千件程度のデータならSQLiteでも他の大規模向けデータベースとそん色ないらしいですしね。

無題

すれ違い通信やらCギアスキンやらの目的でポケモンセンターに行ってきました。
子供たちが多かったのはもちろん、大きいお友達もそれなりの数いました。
Cギアスキンのほうはなんだか拍子抜けする合言葉でしたが、まあポケモンではいつものことなのでしょう。
ダークライも配布していそうな気がしていましたが、こちらは明日からでした。
だからと言ってまた明日行くなんてことはありませんが。

プログラミングのMSWMMのページ更新しました。
まだ肝心のデータ本体には到達できていませんが、次の次あたりの更新でたどり着けそうなペースです。

無題

久々にCairoいじってました。
SVGへの書き込みは実は簡単なのですが、私のやりたいSVGの読み込みと表示は一筋縄ではいかないのです。
SVGにはいろんな機能があるだけに、その全てに対応するため他のいろんなライブラリと依存関係があるのです。
一応全部用意したのですが、組み合わせがよくなかったらしく、うまく動きませんでした。

無題

ほったらかしにしていたプログラミングのコンテンツもそろそろ何とかしたいところですね。
スクリプト言語はもう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使ってみました。
ファイルの全文検索を行うソフトなのですが、使う文字コードを指定できるのが嬉しいですね。
バイナリ検索もできれば言うことなしだったのですが。

<前 次>