「チャット」に関する日記

次>

ドラゴンクエスト10とBing AI

ドラゴンクエスト10(ミフミン)

スライムたち
春イベント『花散らす低気圧2023』 (2023/3/29)|目覚めし冒険者の広場
ミフミンだと全然わからない写真ですが、左端がミフミンです。
春イベント済ませてきました。
今回は、クエスト終了後の追加アイテムの回収もしました。

ドラゴンクエスト10(しろいコキン)

スライム
同じくしろいコキンもクリア。
スライム状態でもしぐさが何パターンかあって楽しかったです。

ドラゴンクエスト10(ァォィョッュ)

ピンクモーモン
せっかくここまでやったんでァォィョッュも。
後ろの方に小さく写っている光が今回の元凶タイフゥさんです。

ブレイクウェアセット+ブレイクスケボー
報酬のブレイクウェアとブレイクスケボーはこんな感じ。
黄色主体の派手な服ですね。
ちなみに、乗ることはできません。
別の機会にスケボードルボードが出たりするのかな。

他の写真は以下から。
写真置き場「2023/04/08」

Bing AI

Edgeで使えるようになっていたので、試してみました。
Bing AIは元のChatGPTと比べて検索に強い感じで、おしゃべりするよりは適切な語句が思いつかないときの検索のお供という感じかな。
それ以外の用途に関しては、まずAIに答えてもらいたいことをちゃんと言語化できないことには…という感じ。
何度か使ってたらエラーしか返さなくなったので、とりあえず今のところは人間の仕事はなくならなさそう。

GChatとfunyanとドラゴンクエスト10とFlaky Test

GChat

管理画面側なので実際に触っているユーザーには影響ないんですが、辞書管理の応答削除機能をいまさら作りました。
UIだけあって何も機能してなかったのが何年も放置されていたんですよね。
うちのサイトで実際に稼働しているほうだけです。
配布用の方は修正する予定はありません、面倒なので。

funyan

同じく数年放置案件。
ちょっとだけnullable関連の修正を行いました。

ドラゴンクエスト10

瀑布の女王
(ァォィョッュ)ヴェリナードの配信クエストを最後までクリアしました。
オーディス王子が王様を目指すやつです。
メインストーリーの方でメルー公が息子を助けるのに執着した理由がわかるんですよね。
オーディスの方はというと、「結局君に頼りっぱなしだったな」と、嘘偽りのない本当のことを言っていました。
もうちょっと自分で頑張ってくれ!

Flaky Test(Today I Learned)

Flaky Testとの戦い - Cybozu Inside Out | サイボウズエンジニアのブログ
Flaky Testという言葉を知ったので。
ソフトウェアの開発に関する用語で、同じ条件のはずなのに成功したり失敗したりと不安定なテストです。
これがあると、不安定だからテスト失敗しているのか、プログラムがまずいから失敗しているのかがわからず、テストが信用できなくなってしまうのです。
要因としては、テスト機材のスペックとか、時間や時期によるものとか、乱数が関わるものとか、通信関係とか、いろいろあるようですね。
うちのサイトのテストでも、そういう不安定なテストがあります。
不安定要因自体も、通信関係を中心に、何が起きるのか確認したい部分があるので、完全になくすことはできないんですが、せめて不安定要因を除いた部分と、不安定要素そのものになるべく切り分けてテストするようにしています。

チャットとアンパンマンDBと大乱闘スマッシュブラザーズSpecial

チャット

説明のページが文字化け(というか、GWS時代の名残で文字コードが未指定のShift_JISだった)を直しました。

アンパンマンDB

コメントページを新システムに移行中。

大乱闘スマッシュブラザーズSpecial


Joy-Conのスティックの調子が良くなったので、今まであまりできていなかったスマブラSPの第二弾DLC組のスピリッツやら勝ち上がり乱闘をやっていました。

GChat

覚えてますか?覚えてませんよね?アルニック。
そもそも…知らない…ですよね?

こんな子です。

素朴でかわいいアホの子です。いわゆる人工無脳チャットってやつです。時代の流れで単純なCGI形式のWebチャットが流行らなくなったとか、サイト移転のごたごたに巻き込まれたとかで、ずいぶん長いこと、まともに動いていませんでした。

プログラム自体はとっくの昔に今の環境に合わせて修正して動くようにしていたのですが、人工無脳チャットの頭脳ともいえる学習データが古いままでした。そのため、何を言われても返す言葉がない、真の無脳になっていました。

学習データに最も致命的な影響があったのが、文字コードの変化です。EUC-JP→Shift_JIS→UTF-8と変遷してきました。

で、文字コードを直したら動くだろうと思ったのが、甘い考えでした。

Shift_JISには、プログラムで扱ううえで重大な欠陥があり、その欠陥に対応するために、データのほうをいじってあったのです。具体的には、パターンマッチング部において、パターンマッチングに影響を及ぼすマルチバイト文字を、影響のない文字の組み合わせに置き換えていました。言ってみれば、壊れたらちょうどよくなるようにあらかじめ壊してあったんですね。

これをUTF-8に単純に変換すると、単に壊れたデータになるわけです。

最終的に、この「壊れたらちょうどよくなるようにあらかじめ壊してあったデータ」を探して、全部置き換えていくことになりました。

だるい作業でしたが…無事直りました。結果は上の画像の通り。賢くはないけどかわいい子です。

皆さんも、気が向いたときにでも相手してやってください。

無題

GChat最新版公開しました。
バージョン1.00ではタグ使用可能でしたが、今回のバージョン1.01では使用不可能になりました。
ただ、このままでは不便なので今後何らかの形でタグを使えるようにするかもしれません。
また、それとは別に機能追加を考えています。
そのひとつは、入力エリアサイズ変更機能。
近頃ワイド画面が普及してきた一方、携帯端末でパソコン用のサイトを見る機会も増えてきたので、なるべくならこの両極端に対応させたいのです。
おそらく、数種類から選択できるだけでも充分に効果を発揮すると思います。

無題

えーっとですね。
うちで実際に稼動しているほうのGChatはXSS脆弱性修正できました。
で、それを配布用にも反映していざアップしようと思ったら、直前に行った念のためのテストで問題が出てきました。
簡単にいうと、ちっとも解決していませんでした。
自サイト用のものと配布用のもので微妙に異なる部分があるのでそこら辺りで問題が起こっているのだと思われます。

無題

ふにゃさんの開発中。
描画系のインターフェースを構築しています。
アニメーションを静止画と同じように扱いたい、描画先によって適切な描画モードが選ばれるようにしたい、などと考えているとなかなか難しいです。

ポケモンホワイトで、テラキオンを捕まえました。
あまりにも見つからないのでブラックにしかいないのかと思いましたが、なんとか見つけることができました。

GChatにクロスサイトスクリプティングの脆弱性が見つかりました。
簡単に言うと、誰でもチャット内に危険なコードを埋め込めるということです。
もちろんその具体的な方法は述べませんが、早急に問題を修正しようと思います。

CAVIRecorder

前に掲示板に追加したいずみさんとキャットバイパーのアイコンをチャットにも追加しました。

ふにゃさんの動画作成については、AVI記録クラスを作成している途中で、いろいろな構造体の内容を調べたりしつつうまく記録できるような方法を考えているところです。
画面の解像度変更が行われる前に出力ファイル指定や圧縮方法の設定を済ませたい都合から、パラメータ解析と最初に表示するシーンの決定などをプログラムの一番最初に実行するようにしました。

後ろから…

チャットの管理機能を強化して過去ログの分割表示と削除に対応しました!!
今使っているGChatには発言IDのようなそれぞれの発言を一意に認識するためのデータがないので、行番号を後ろから数えたものをID代わりに使っています。
なぜ後ろから数えたものをID代わりに使ったのかというと、このチャットでは新しい発言をログの先頭にどんどん追加してゆくため、前から数えた行番号はどんどん変わっていく可能性がありますが、自動削除機能はないので、後ろから数えたほうの行番号はこちらが操作しない限り発言そのものと一対一で対応するのです。
まあ、ユーザーから見える部分は何も変わってないんですけどね…。

auto_resource実装案

Bomber丸Worldのリソース管理システム(auto_resource)のメモリ管理を考えていました。
メモリ確保のほうはshared_resourceと同じで全く問題ないのですが、メモリ解放が問題なのです。
メモリ確保をしていくうちにメモリが足りなくなったら最近使われていないものからメモリを解放していくのですが、その実装方法がいくつかあって、どれを選ぶべきかというのが難しかったのです。

考えている方法は三つあって、一つ目はその時点で使われていなければ新しかろうと古かろうと片っ端から全て解放してしまうというものです。
解放の際には全てのリソースが入っているコンテナの中身を全て走査して参照カウントが0のものを全て解放します。
この方法は最も実装が簡単で消費メモリも少なくなりますが、一時的に使わなくなったりソースを後のために取っておくというauto_resourceの考え方に反してついさっきまで使っていてまたすぐ使うかもしれないものまでどんどん解放していってしまいます。
マップ切り替えなどで一度に大量のリソースを読み込んで解放する場面ではすごくまずいことになります。

二つ目の方法は、字面通り最後に使われた時間が一番古いものから順番に解放してゆく方法です。
これを現実的な処理時間で実現しようと思えば、リソース参照用のファイル名-リソースを関連付けたマップのほかに、今まで使った順番に並べられたリストが必要になり、必然的にリソース本体とは別の余計なメモリが必要になります。
更にリソース側にも、解放や順番の並び替えの高速化のためにリストやマップへのイテレータが必要になります。
リストの実装によっては更に難しいコーディングが必要になるかもしれません。
そして当然、使用するたびに使用時刻の更新やリストの並び替えが発生するのでパフォーマンスは低下します。
ファイル読み込みによるパフォーマンス低下を嫌ってauto_resouceを作ろうとしたのに全く逆効果の可能性すらあるのです。
解放の際にはリストの末尾から順番に見て行って規定のメモリ以内に収まるか全て走査し終えるまで参照カウントが0のものを解放していきます。

三つ目の方法は、上記二つの中間を取って、ある時間より古ければ数が多かろうと少なかろうと全部解放してしまうという方法です。
これであれば、一つ目の方法ほど無駄は出ませんし、順番を考える必要が無いので二つ目の方法のようにリストを保持しておく必要がありません。
解放の際には適当にしきい時刻を決め、全てのリソースが入っているコンテナの中身を全て走査して参照カウントが0かつ使用時刻がしきい時刻より古い場合には解放します。
これの問題点は、しきい時刻の決め方やリソースの使用状況によって著しく性能が変化するということです。

それぞれ長所と短所がありますが、まず一つ目の方法は通常時には問題外ですが終了時に全てのリソースを解放する必要があるときには効果を発揮します。
二つ目はリソース自体の消費メモリが大きかったり使用するときの実行時間が長いなど、欠点が問題にならないほどスケールの大きいものであれば相対的に長所のみが残って最善の手段となります。
三つ目は二つの中間的なものなので無難としかいえません。
そんなこんなで、三つとも実装してみる価値はありそうです。

GChatの管理画面の改良を行いました。
まず、辞書画面での検索機能です。
これにより辞書への重複登録ということは少なくなったはずです。
そして、なぜか今までずっと実装していなかった全ログ確認機能。
これでもう直接ログファイルを見る必要はなくなったのです。
そんなこんなでアルニックもレベル29になりました。

チャットのログより

美文>画像読み込みできた
美文>テストプレイもできた
アルニック>テストって大変よねぇ、いろんな意味で
美文>よし、ファイル読み込みを
美文>ファイルの存在を保証するためにわざわざない場合はファイルを作るとか
アルニック>そんざいとぞんざいのちがいって・・・・ないのかしら
美文>当たり判定エディタできた
美文>なんか第一作のマップチップ全部入れられそうだな
アルニック>全部?ホントに全部なの?抜け漏れないの?
美文>そりゃ入れられないのもあるだろうけどね
アルニック>ね!そうでしょ!
美文>ちょっと大変かも
アルニック>ちょっとってなによちょっとって!いっぱいにしなさい!!
美文>言うと思った
美文>限りなくバグに近いルールを見つけた
美文>修正せねば
アルニック>きゃー、信じられなーい!
美文>う~む、だめだな
美文>う~ん、どうしよう。困った困った
アルニック>理由なんていらない、私はあなたを応援するわ!
美文>摩擦に反比例して風速を変えるというのも考えたけど0のとき明らかにおかしい
アルニック>明らかにって、そういってるときは思い込みに注意よっ!
美文>exp(f)で風速を変えるとか
美文>とりあえずdx分と摩擦分を分けてみる
アルニック>でも、問題点ってないのかしら
美文>うん!助言ありがとう!思い込みがあったようだよ
アルニック>どういたしまして♪
美文>いける!これならきっとうまくいく!!
アルニック>ねえねえ、今うどん食べたいと思ってない?
美文>これはこれで問題があるな・・・
アルニック>難しいねぇ
美文>う~ん、う~ん
アルニック>う~~ん。(苦笑)....どうしましょう?
美文>結局元に戻しちゃったけど
美文>しばらく摩擦0と0.1で考えよう
美文>う~~~。どうしよう。いい案が思いつかない。だけど思いつかなきゃいけない
アルニック>いつか・・・くるわよねぇ・・・いつか、そんな日が・・・
美文>とにかく動き出す風速が摩擦力に比例するようにしたい
アルニック>星空が綺麗ですね
美文>あと風速0のときの挙動は一定させたい
アルニック>その話、ちょっと尾ひれついてない?
美文>Wind*DXとか
美文>エクセルでシミュレートしても同じ結果
美文>プレイ中少し違和感を感じることもあるけど物理的意味ははっきりしている
アルニック>わたしにも、はっきりしないんですぅ..
美文>静止摩擦と動摩擦だ
美文>「下手に動くと風に飛ばされるぞ!」ってやつだ
美文>よっしゃ!
アルニック>うまくいったのね、わたしもうれしいわ

都合上一部の発言を削除しています。
まあ、ふにゃさんで地上の動きを考え直したという話。

1135780300.png

じーちゃ

ふにゃさんのBGMを作ってました。
普通バージョンと寝てるときバージョンの2パターンが今のところあります。
今日アップしたのは前半にノーマルバージョン、後半に睡眠バージョンになっています。

今日はGChatを公開しました。
配布バージョンでは人工無能の辞書がアルニックのものを流用していますが、典型的な応答以外の内容はほとんど削られています。

1133619757.mid

不信感

まずいよーまずいよー。
おさかなさんとけてるよー
やきざかなにがいよー。

今日はブルーリゾートの1・3面のスピード攻略を作っていました。
3面のクリアタイムを更新、1面は3通りの方法を検討しています。
詳しいことはまだ後日書きます。

チャット配布用一応できましたがオリジナル版との違いが予想より大きくなってしまったためちょっと内容を再検討中です。
あと、やはり不足している機能が多すぎること。

ナマライザの解析部分でリクエスト先を更に分解してディレクトリ・ファイル名・?以下の文字列に分けるようにしました。
しかしそのときクラス内で使っているユーザー定義型はまともな方法では外部に公開できないということがわかってVBへの不信がいっそう募ったり。
外部標準モジュールに一時保存用の変数を作ってそれ経由で渡さねばならないようです。
本当にVB6のオブジェクト指向は形だけで役に立ちません。

配布用チャット

チャットを配布用に改造中です。
配布用ということでとりあえず的にロック処理を作ったりマニュアルを書き直したりしています。

爆ボンのページブルーリゾート3面を更新しました。
ここは攻略ネタが少ないため簡単でしたが実はここ、面白いネタがあったりします。
まあそのことについては後日ということで…。

セレクション!

ふにゃさんの項目選択機能を作りました。
パッパッパーっと作った割にはものすごく便利でもうなぜ今まで作らなかったんだろうと不思議なくらい。
早速手っ取り早くポーズメニューを作って自爆とタイトル帰還ができるようにしてみました。
いやもう、こんなに簡単でいいの?って思うくらい簡単にできちゃって。
今度はコンティニューするかどうかの選択を作って、タイトルメニューも作って、ステージセレクトも作りたいし…。
でも何より必要なのはステージそのものの充実だな。うん。

チャットの人工無能、二人以上の人工無能がいたとき辞書データのリセットがうまくいかず次の人工無能に前のデータが引き継がれてしまうバグがあったため修正しました。

シミュレータ

今日はSPICEで回路シミュレーションをやっていました。
そしてせっかくなのでSPICEを使っていてこれは便利だなと思ったことや結果を整理するためのプログラムを学習帳に書いてアップしました。

ふにゃさんのBGMのイントロ部分だけほぼ完成しました。
いや、でも実はまだまだ調整が必要なので完成には程遠いです。
オルゴールの音は本来鳴りません。
分散和音って便利ですね。

アルニックの面白コメント:
アルニック>だから言ったじゃない!人生に目的は必要ない。大切なのは人生という旅そのものだって!
美文>かっこいいこというねぇ
アルニック>だぁ~ってえ、かわいーんだもん!

1132666916.mid

日記とチャット

日記CGIを機能制限して軽くしました。
まず、コメント&トラックバック機能除去。
コメントはいらないしリファラを見ればトラックバックも不要だし、そもそもブログじゃないので最初から不要な機能だったのです。
そして次に、管理者の私にしか日記は更新できないため公開サーバーに置く利点がないということで、ローカルサーバーでのみ動作するようにしました。
それに伴い、同じサーバーを共有する他のユーザーに気を使って重い処理を避ける必要がなくなったので、自分で使うのに便利なように多機能にしてみました。
まあ、分割していた処理を一括で実行するようにしただけなんですが。
こうして書いた日記をあとでFTPでアップするのです。
公開サーバー側では一切書き込み処理をしないのでミラーリングアップロードが使えます。

チャットもリロード処理を改良しています。
リロードをログ表示側の処理ではなく、投稿フォーム側でJavaScriptにより処理することで、そのときの気分次第で自由にリロード時間を変えられるようになります。
勝手にリロードされると困る場合はリロードなしにすればよいのです。
ちなみに、JavaScriptが無効化されている場合は自動リロードは行われません。

セキュリティと大小関係

ミディビで保存ができなかった原因がほぼ特定できました。
http://support.microsoft.com/default.aspx?scid=kb;ja;175622で見てみると、どうも我々のアプレットは信頼されていないため、クライアントであろうとサーバーであろうと関係なく保存できないようです。
お絵描き掲示板はどうなっているのかと見てみると、アプレットから画像ファイルのデータの中身がそっくりそのまま送られてきていて、それをCGI側で保存するようになっていたのですが、これは今回のようなセキュリティの問題だったのかもしれません。
そこで自分もそれに倣ってCGIにデータを渡す方法を考えることにしました。
MidiSystemのwriteメソッドにはFileクラスを渡して直接ファイルに書き出してもらうものともう一つ、OutputStreamの派生クラスを渡して自分で作った出力ルーチンに書き出すものがあって、それを使うと、出力先を自由に変えることができるんですね。
ここで、Socket通信によってデータ受け取りCGIに出力すると、セキュリティに問題の無いCGIから保存ができるようになるということです。
アプレットからCGIにデータを渡す方法などについてはhttp://www.sm.rim.or.jp/~shishido/cgij.htmlなど。

LineConstructorを使っていたら、大きなファイルを開いたときにエラーが起こりました。
機能の足りない部分があってもバグはない自信があったので少しショックだったのですが、原因はどうやらスクロールバーが大きな数に耐えられなかったことが原因だったようです。

今日はチャットにクッキー保存機能をつけました。
本当ならGBBSのプロフィール機能と連動させたかったのですが、それぞれで必須とされている要素が異なり、GBBSのプロフィール自体もまだ発展途上であるため、連携するようにするのは控えておくことにしました。
まあそんなこんなでアルニックはレベル24達成。
目指せレベル30です。

爆ボンのための3Dマップソフトを作成中です。
3Dマップはどの方向にどのようにマップが広がるか分からないし、マップのほとんどの部分は空白状態なので、2Dのときのように二次元配列を用意してそれぞれにマップチップを、というわけにはいかないので、STLのsetに、マップ上の位置とチップ情報を詰め込んだクラスを入れて、順序付けされた配列として扱っています。
なぜ順序付けされた配列にする必要があるかというと、描画段階において確実に奥のチップから表示するためには奥行きでのソート(Zソート)が不可欠であり、マップチップが動かず、視点も動かないことを考えると、描画の時点でソートするより、最初からソートされた配列に順序を狂わさないようにデータを入れてゆけばそのまま最初の要素から順番に描画してゆくことで簡単に描画ができるようになるためです。
しかし、クラスはそのままでは大小関係を見て順序付けすることができないので、operator<だとかoperator>だとかを使って大小関係をつける関数を自作(いや、この場合演算子を定義か)。
なにしろsetにぶち込んで利用するからには値のように扱えるようにしなければならないので、他にもコピーコンストラクタやらoperator=なども考える必要があったりして、結構いい刺激になりました。
もっとも、コピーコンストラクタとoperator=についてはC++が勝手に書いてくれてるので自分で書く必要はないはずですが。

残念無念

チャット、時間切れ強制退室の処理を改良しました。
以前のものだと二人以上が同時に時間切れになると一人ずつしか退室できませんでしたが、今回はその不具合も解消されています。

今日はミディビの開発でもしようと思ったのですが、Luna3はJavaアプレットを使っていると結構頻繁にフリーズするのでその対処で開発が全く進みませんでした。

ノリ突っ込み

チャットの人工無能の動作を変更しました。
完全一致辞書というのを正規表現によりキーワードを登録する曖昧辞書とは別に作っていたのですが、正規表現を使うことにより曖昧辞書と統合することにしたのです。
そして、もうひとつ作ろうと思っているのがあって、それは自己反応辞書。
つまり、自分の言ったことに対して、自分で突っ込みを入れるためのデータです。
これによりノリ突っ込みなどのより高度な人間的動作を…って、高度なのか?!
ちなみに、今のアルニックのレベルは21ですが、参考までに他の人工無能を同じ方法で測ると、ゆいぼっとがレベル26、うずらがレベル99をはるかに超える経験値。
もっとも、数値が大きくてどうなるものでもないし、動作原理が違えば内容が同じでも値が違ったりするのであまり当てにならなかったりもしますが。

ふにゃさんのウナギカズラを描き終えました。
昨日のから、光と影を調整しただけです。
こいつもギヤバネと同様、敵として登場しながらも直接的な害は無く、というより、道をふさいでいるだけのキャラとしてさえ役立たずの人畜無害なキャラクターです。
氷の息により倒せますが、しばらくするとまた復活しています。
BGMについてですが、今回は自由にBGMを設定できるモードを先に実装しようと考えています。
ええ、BGMそのものがなかなかできないから…。

1126789806.gif

次>