Archive for the 'Programing' Category

ポケミクサポートウィンドウ

pkmk
MIDI IN の信号をみて、ノートON の時だけミクさんの絵が口を開けるだけの小物プログラムです。

学研大人の科学「ポケットミク」を買って楽しんでいたのですが、これを PC に USB 接続すると音階固定ながらノートONが送信されていることに気がつきました。
このウィンドウを Windows PC に表示した状態でポケットミクの鍵盤を演奏すると、演奏に合わせて絵がぱくぱくします。

それだけです。

Download: pokemiku_view.zip (1.85MB)



「テイルている」のその後

ttsnap02
「テイルている」というパズルゲームを作った事がある。
2002年10月とかあるからもう11年も昔の話ですな。

当時は「天使のしっぽ」というアニメにどはまりしていて、それのファン活動の一環として作成した「同人ゲーム」といったところです。
Linux で動くゲームとして公開していますが、Windowsで動くものとして作成し CD-R に焼いて同人誌即売会で売るのが目的でした。まあ結局即売会で売れたのは10枚ちょっとという数字だったのでそれなりにしょんぼりして、後はオンラインでの配布とオープンソースとしての公開を軸とします。
絵は友人に描いて貰ったとはいえ、元キャラの意匠的なものはアニメから持ってきているものでして企画運営会社のワンダーファームさんに因るところが大きくその後あんましプッシュはしていません。

Windows版を作るのが目的でしたが、Linux とのマルチプラットフォームで作るというあたりがプログラマとしてのお楽しみでありそのために SDL というシンプルなライブラリを利用していた次第。
当初は Delphi 好きだったこともあって、ObjectPascal 互換のオープンソースコンパイラである FreePascal を選択し開発しています。当時 FreePascal はあんまり使われていなかったから、試しに使ってみたかったというのが理由ですが、その後あんましパッとしない扱いでしたね。

PSP の Homeblew が始まった頃、SDL がまっ先に移植されました。
シンプルな上にファウンデーションな部分をまとめてくれるので、大抵の組み込みハードには移植されます。
そこで PSP 上の SDL にテイルているを移植してみるために FreePascal で書かれてたコードを C言語(C++じゃないよ)に書き直してみました。2005年10月のお話。
以降、このC言語版がベースとなっていきます。

先にも書いたようにアニメのキャラなんで私個人の成果として振り回せず、あまり流布しないように細々と公開していた次第。そんな中でも GP2X に移植したものが一番広く見られていたのかな。
これが一部ではそこそこにうけてましてねえ。GP2X wiz にはバンドルアプリとして「テイルている」の画像差し替え版が入っていたくらい。
そのほかの部分でも細々とごひいきいただいていて、以前紹介した Android版 SDL を用いた移植例の様にあちこちで派生移植を見かける次第。

ドイツ在住の Martin Dieter という人もなんか妙に「テイルている」を気に入ってくれている一人で、昔から何かハードに移植したりする度にメールをくれる人物。テイルているの Wii移植版とかでググるとでてくる。
ちょい前まで明確な配布サイトを持っていなかったのだけれども、最近落ち着いてきたらしくダウンロードとかできるようになっているみたいなので宣伝しておこうというのがこの記事の意図。

BigVioSoft / TailTale

全部を見ているわけでは無いけれども Win/Mac/Linux/Android/NDS/PSP といったところがターゲットの様子。
Android版は GooglePlay からダウンロードできるらしく > GooglePlay
この Android版、起動時に http://u-ac.net から gamedata_high-v1.0.0.4.zip をダウンロードしてゲームのデータとするんだけれども、日本からだと回線が細くてダウンロードが終わらずに失敗することもあるみたい。ご注意。

Ver1.0 以降は SDLnet を使ったネットワーク対戦プレイの実装に力を入れているみたい。
WP_20131218_002

新しいキャラ絵があったらくれとか言われて追加で絵を渡してやったりしてます。

ほかにも色々データ差し替えたりして頑張っているみたいなので気が向いたら見てやってくださいな。

細々としたものではあるけれども、オープンソースならではな広がりかもね。



Windows8 でも CPUメーターが欲しい


メインマシンを Windows8 にしてから久しく。
時たま動かなかったり挙動が怪しいアプリもありつつ、楽しく使い込んでいる日々。

しかし、Windows8 には Vista と 7 であった「デスクトップガジェット」なる小物の仕組みが無くなっているのだよな。これだけが不満。
私は、今 PC がどれだけ仕事をしているのか見えていて欲しい人なので、いわゆる CPUメーターの類のガジェットを常用していた。けど、Windows8 ではこれがかっぽり欠落してしまっている。
しょうが無いからタスクマネージャを開いてパフォーマンスビューを眺めていたりするけれどもなんか違う。

やっぱりデスクトップに CPUメーター欲しいよ、CPUメーター。
しかしま、大したアプリではないからこれくらいの小物自作するか。ということで、初めて触る WPF と XAML を叩いてそれっぽいのを作っている。
デスクトップアプリに回帰とか単なる昔の懐かしみなのかもしれん。


一応CPUの数でバーの数が変わる。左が 6コア12スレッドで、右が 2コア4スレッド。

取り敢えず動いた所のプレビュー版。
Download: fmCpuWatch.zip
.NET Framework 4.0 以上が必要。
Win8 は .NET Framework 4.5 なので何も気にせず動くはず。

取り敢えず、終了時に座標をレジストリ記録とかで覚えて毎回同じ場所に表示させたい。
それくらいはやる予定。



過去ゲームのAndroid移植版


秋月かたね氏が拙作の古い SDL ゲームを Android で動かしてくれたよ、という紹介記事。

PSP や GP2X の homebrew 界隈でいろいろやっていたときに交流があった SDL 仲間。
SDL はマルチプラットフォームライブラリなので、それで作っておけば割といろんな環境に移植しやすかったりする。
でまあ、SDL for Android というライブラリがあるのでこれを使って拙作のあれこれをビルドしてみてくれたらしい。
ありがたいありがたい。こういうコード使い回しをだれかがやってくれるというのがオープンソースとかの醍醐味だね。

秋月かたね氏は特に配布ページを持っていないとのことで、public 設定の SkyDrive にて公開されている。
http://sdrv.ms/MlCmFF

apk で配布されているので、実際に Android機で動作させるには apk をインストールする手順が必要になる。パッケージマネージャを使うとか、adb を使うとか。
そのへんの技量がある方が扱ってくださいまし。


まあ、古いゲームはどうしても今見るとつらいものがある感じ。
あの頃は OpenGL が動かない様なハード(特にGP2X)用にシンプルなビットマップコピーメインだったからなあ。
なので、最近作ったもので TCGS-Cave と同じく OpenGL を使っている LasterShoot の移植もお願いしてみた。

良かったら遊んでみてください、と
単なる宣伝記事。



未完成/modo601 のボーンに VMD をインポートしたい


今現在ご愛用の 3DCG ツールである modo に最新版である modo601 がリリースされた。
強力なモデリングとレンダリングが売りのツールではあるけれども、それ以外の特にアニメーションについてはイマイチだったことは否めない。
そんな modo が 601 になってついにボーン変形が付きキャラクターアニメーションにも使える様になってきた。

早速ボーンで遊んでみるが、モデルは適当に箱とかで実験すればよいもののモーションはそうはいかない。自分で作成するのはかなり大変なものである。
そこで思い出すのが MMD 界隈。
3DCG のモデルを共有するのは以前から結構行われていたけれども、モーションデータの共有というのは難しくてほとんど行われてこなかった。BVH 形式がモーションキャプチャーデータのポスト形式となってようやく標準的な形として使われ始めたがモーションの提供はあまり行われてこなかった。
それをあっという間に覆したのが MMD界。ダウンロードして使えるモーションファイルをもの凄い勢いで公開、共有していった。これは凄いことだと思っているのですよ。

そんな MMD 界の成果である VMD モーションデータを利用できないかなというのが発端。
Read more…



プログラマーを超えるプログラム

http://twitter.com/ruripeco
自作の乱作文生成bot の「るりぺこさん。」が稼働して1年半近くにもなる。ここ半年はプログラムの更新を行っておらず特に目立ったアルゴリズムの更新もないため、ほとんど放置状態なのだけれどもそれでも毎日『おっ、これはなかなか』と思わせる珍文章をつぶやいているため作った本人が割と楽しく眺めている。
まあ、乱数作文なので意味が通らない文章ばかりなのだけれども、それでもなんとなく意味があるようでないようなところとか面白いと感じる部分はあるように思う。
しかし、この「作者が見て面白い」というのはずいぶんと奇妙な構図にも思える。
プログラマーがプログラムを作った以上、それを作ったプログラマが意図する範囲でしかコードは動けないものなのではないだろうか。作者が作成して意図しない動きをした場合それはバグと呼ばれる物なのではないか。
本当にプログラムがプログラマーの意図を超えて動作するなんてことはあるのだろうか。

作成したプログラムがプログラマーの意図通りに動かない、予想を超えて動くという状況にはどのようなものがあるだろう。

      ・意図した動作をする様なコードが書けていなかった(コードのバグ)
      ・仕様に不備があり、特定のパターンが策定できていなかった(ロジックのバグ)
      ・仕様を超えた範囲で動作した(仕様の不具合)
      ・動作そのものは規定だが、入力と出力が任意である

上の3つはバグなりミスの範疇だが、最後のひとつはそうではなくソフトウェアとして正しい挙動となる。
例えばコンパイラなどでアプリケーションをコンパイルする作業はプログラムとして正しく動作しているものとなる。ただし、その結果できた素晴らしいアプリケーションはコンパイラのプログラマが意図したものではない。コンパイラのプログラマの成果でもないし、コンパイラに不備があったわけでもないが、ユーザーはコンパイラを使ってコンパイラの作者の想定を遥かにこえたアプリケーションを生みだすことができるだろう。
同じようにワープロソフトを使って直木賞作品が書かれたとしても、それはワープロソフトのプログラマの意図とは違ったものであろう。
これを全部ひっくるめてプログラムが引き起こした物と定義できるのなら、プログラムが作者の意図したとおりに動きつつ意図しない成果を世界に影響することができると言えるかもしれない。

プログラマーはしばしば、コンピューターやコードの中で自分が神にでもなったかのような幻想に酔いしれることがある。というかありがちな気がする。
問題をモデリングし、演算解決の道具であるコンピューター記述言語に落とし込み、おおよその事象を演算にまで分解して自分が意図した結果を表現してみせる。コンピューターはプログラムで記述した通りに動くから、プログラム自体がプログラマーの力量を表した物であり結果を導き出したのはプログラマーのおかげであるという。
まあそれは問題をモデリングした範疇では正しいかもしれない。
だからといってプログラマーが絶対かというとそういうわけではないだろう。あくまで限定された観測範囲でのお話で、そのへんは問題モデリングの専門である数学屋さんや物理屋さんと似通ったようなものかもしれない。

でもプログラムはミスひとつで経済を崩壊にまで追いやることができるし、死者を出す可能性もある。そこまで範囲が広がる可能性があるのなら、世界を変えることもできるかもしれない。
しかし、それにはプログラムが動作する仕様範囲と「それ以外」の認識が必要なのではないだろうか。
コンパイラの例がたぶん一番わかりやすいように思う。
プログラマーが作製したプログラム自体は規定の動作をするのだけれども、それに何をさせるかというソースを与えて結果を生み出すのがプログラマーではない他者であるという構図。プログラマー以外のものがソース提供をするといった関係性。それこそが、プログラマーを超える動作をさせるということの注視点なのだと思う。
なぜそのような事になるのかというと、コンピューターやプログラムが動いて成果を出すという流れがずいぶんと複雑になっていて関与する物がアルゴリズムやプログラムコードだけでなくなっているからである。
プログラミングも構造化して、オブジェクト指向化して、データ指向化して、今やコードはデータやデザインのおまけみたいになってしまった。アプリケーションという箱物が売れなくなり、大量の情報とネットワークがお金を生みプログラムはそれを支える仕様のひとつになってしまっている。

だからどうという悲観論とかそういった話ではなく、そのような沢山の人とデータを上手く取り入れるようにすることでプログラマーの技量以上の成果を出すプログラムを作れる様になるのではないかという見解を示したかった。
成長するプログラムというとなんだかまだSFの世界のお話みたいだけれども、SNSとかいったソーシャルアプリケーションサイトの発展というのはだいたいそういった視点なんじゃないかと思う。サイトデザインそのものは仕様のままなのだけれども、そこに集まった人たちが思い思いに利用を始めて驚くような展開と成長を始めたりする。
そこに自己成長といった視点を持ち込めば十分に人工知能的な世界を見いだせるのではないかと思う。いかにして人工知能的なスフィア空間を拡大させていくか、昨今のモノ作りにはそういった環境全てを包括した視点が必須となる。
別な見方をすれば、ネットワークと莫大なデータを与え続けることで大なり小なり成長するプログラムを作れるだろうし、それがやりやすい時代になってきている。
自分で作ったプログラムが成長して作者を楽しませてくれる、それはおしゃべり型botが見せてくれる本当に小さな成果だけれどもプログラマーを超えた何かに変貌したということを見せてくれる瞬間。
「るりぺこ。」さんはそんな世界をほんのちょっとだけ垣間見るための手習いなのです。



るりぺこ。 Ver 0.4

1ヶ月ほどまえに突然「作ったよー」とアナウンスした拙作 Twitter bot の「るりぺこ。」ですが、出力を見ながら地味ーに改良を続けているところ。制作者的には手を入れるたびにどんどん進歩していくのがわかるので可愛くてしかたがないのだけれども、外から見てるとあんまり変化がわからず相変わらず残念なことを言う娘にしか見えないかもしれず。
けれども、今回のVer0.4では大きな機能が付け加わった。mentionに対して返事をする機能の追加。@ruripeco 宛になにかつぶやくと数分後にお返事が来ると思うので、非実在友達としてご利用ください。

一応返事はするけれどもあいさつ系は弱いというか返せないので、基本るりぺこへの挨拶はしない方向でひとつ。

人工無能みたいに自然な会話を目指しているのとはちょいとちがうので、定型パターンの返信とかは持っていないのですよね。

まあ、気が向いたらかまってやってください。

twilog (http://twilog.org/ruripeco) で古い発言と今の発言を見比べると結構違うことがわかるんじゃない、かな。



koruri Wiki

先日アナウンスした「@るりぺこ。」の技術的情報を記録しておくWikiを作っておきました。

http://www.fumi2kick.com/koruri/

まだ全部のページを書き切れていませんが、まあ追々。
Wikiは永遠の工事中という話もある。



@るりぺこ。

概要: Twitterでbotつくってみた
http://twitter.com/ruripeco

ruripeco01.jpg

昔からランダム作文ゲームの類は大好きだった。誰が、どこで、どのように、何をした、の文節が書かれたカードをシャッフルして適当に拾って読むと可笑しい感じのあれである。「坊主が・野原で・鯖を・蒸す」

そういった文章生成っぽいものをふいに考え始めた。
人工無脳とか文章ジェネレーターの類を研究するにはどうしたもんだべ、人工無脳のソースでも読むか?と考えを巡らせてみたところ、やっぱりデータの収集が一番最初でしょという事になった。
今はWEBのおかげでいくらでも文章と出会える様になったのでこういうとき便利なものである。さて何をクロールして文章や単語を集めようか、WEBページかBlogかRSSか。色々考えてみたら、今回の目的にはTwitterのTLを収集して回るのが一番なんじゃないかという結論に達した。公開されているものだし、文章のみだし、長くても140文字だし、生きた今の文字が飛び交っているしで。
てなわけでTLを収集するスクリプトを作ってここ1ヶ月ほど回していた次第。
50万センテンスに35万ワードくらい貯まってきた。このデータが使えるか使えないか、どう利用するかはひとまず置いておいて、これくらい貯まると文字データの塊として扱うことができるようになるものだ。そこで、そろそろ解析&アウトプット側もなんとかしようかと軽くランダム作文レベルのものをさえずるbotを作ってみたというのが「るりぺこ。」
今は純粋なランダム出力なので使えない娘だけれども、まあ長い目で見てやってくだされ。

人工無脳はあこがれるけれども、目指しているところは人工無脳の様でちょいと違うかも。どっちかというと文章ジェネレータというか、コメンテーターとかそんな方面。

内部プロジェクト名は「koruri(小瑠璃)」だったんだけれども、Twitterにはすでに「こるり!(@koluri)」という人工無脳さんがおられるので「るりぺこ。」になった。koruriはバックグラウンドでデータの収集解析をするプロジェクトで、そのデータを使ってさえずるペルソナジェネレーターがるりぺこ。といった風に分かれる事となった次第。まあ、るりぺこ。は機能次第で代替わりするかもしらんからこれでよかったのかも。
botスクリプトは大したものじゃないんだけれども、そっちのほうに興味がある人もいるだろうからそのうちkoruriプロジェクトの解説やコードを提供する予定。汎用性はないので参考用に。



「Wiiの写真チャンネルで、柊かがみ」の種明かし

私がニコニコ動画にうpした動画の中で一番の好評を頂いたのがこの Wii でかがみん。
この動画を投稿してから、今日で丁度一周年なのです。
5月28日というのは、らき☆すたの主人公である泉こなたの劇中設定誕生日ですよ。
ついでに言うと私の誕生日でもあったりするのだけれども、誕生日が嬉しい歳でもないので足下にほうりなげておこう。

これを製作したのは「Excelで長門有希」に影響されての事なんだけれども、なんかしらんが好評でランキング入りも果たした。
Youtube にも転載されて海外でも評判になった。Youtubeには三人の人がそれぞれに転載して同じ動画が3本あがっていたのだけれども、その中でも一番視聴数が高かった転載分がすでに削除されているので一見そんなに再生数が伸びていない様に見えるかもしれない。(ニコニコの良動画をYoutubeに転載して紹介するというBlogに使われていたので容量のローテーションから削除されたのだと思われ)
そっからさらに世界各国のゲーム系ニュースサイト(KOTAKUとか)で話題になり一周して日本に戻ってきたりしていたのだけれども、その時はYoutubeからさらにどっかの動画共有サービスに転載されまくっていて実際の所どこに転載されているかはまったく把握できていない。
んだから、ニコニコの再生数16万(2008/05/28現在)という数字より多くの人が見ているんじゃないかなあ。

tilepicker_miku.jpg
さて、賢明な人であればこれを手作業で絵を並べて作ったものとは思わないだろう。なにかプログラムを使って作ったんだろ、と。
もちろんその通り。
そういった作り方についての種明かしをしてしまうのは冷めるだけなんだろうけれども、もう賞味期限も切れているし良いよね。未だに、見に来てくれる人が居るのはありがたいところですが。

tilepicker_ss.jpg
この動画を作るために自作したプログラム。作り捨てっぽい突貫作成。
一枚一枚のタイルとなる画像がたくさんある(100枚くらいあると良い)ディレクトリと、完成図になる 41x25pixel という小さなBMP画像を用意して、このプログラムを実行すると指定出力ディレクトリに999枚の連番ファイル名付きJPEGを生成するという仕組み。
タイルとなる画像はピクセル平均値で大体の色味を調べておき、リストとして保持。完成図のピクセル1個1個の色に近い平均値をもつタイル画像を探して割り当てるといった単純な仕組み。一応、色判定でおかしくならないようにYUVで比較したり、右方向に誤差拡散したり、同じ画像が隣接しないようにしたりと簡単な画像処理アルゴリズムがいくつか盛り込まれていたりはする。

というわけで、Windowsで動作するバイナリを置いておく。
お手元のWiiで試してみたり、まだ知らない人に見せてあげたりしてくりゃれ。
[May.29.2008 追記]いくらいい加減な使い捨てツールとはいえメモリ消費(実はリーク)が酷すぎたので修正して差し替え。
Wiiの写真チャンネルでタイル絵作成くん: tile_picker002.zip

ちなみに画像が999枚もあると写真チャンネルでサムネイルをロードして表示するまで結構時間がかかるのです。
1分半〜3分くらいはかかるはず。




You can follow any responses to this entry through the RSS 2.0 feed. You can skip to the end and leave a response. Pinging is currently not allowed.