日記(116)

<前 次>

アンパンマンDBとFNチェンジャー2

アンパンマンDB(システム)

ストリクトクエリ、独自実装の方向で作ってます。
「:」で分割する方向性はそのまま。
分割内容に「:」を含みたい場合は、「\」でエスケープ。
分割内容に「\」を含みたい場合も、「\」でエスケープ。
例えば、「#test:test」を検索するストリクトクエリは、「user_tag:+:test\:test」になります。
エスケープしていない場合は、正しく解釈できないので、「user_tag:+:test:test」は無効です。
この分割ルールは早々にできましたが、分割結果をどう使うかっていうのは項目の種類ごとに実装が必要なので、そっちはまた追々ということで…。

FNチェンジャー2

今更ながら、ウィンドウ最下部についているプリセットの読み書きUI、何の説明もないのでわかりにくい気がしてきました。
自分用ツールなので分かりにくくても私には支障はないのですが、仮にもみんな向けに公開しているわけですから、一応改善はしておいたほうがいい気がしてきたので、課題立てておきました。
実はこう見えてOSSなので、コントリビュートしたい人は作ってみてもいいんですよ。

アンパンマンDB(システム)

ストリクトクエリの件、区切り子じゃないコロンをどうするかでちょっと悩んでます。
str_getcsvは区切りとして扱わない区切り子を考慮してくれますが、そのためには「"」など囲み記号が追加で必要になるんですよね。
単なるCSV(ここではCharacter Separated Values)であればそれでいいんですが、アンパンマンDBの検索構文では、ルーズクエリ・ストリクトクエリ両方に共通する文法で、スペースや「"」を含む単語は「"」で囲むという仕様があって、クオートの仕様がぶつかってしまいます。
一応ぶつかったところで、どちらにもエスケープ処理はちゃんとあるので、「"」で囲んだものを「"」でエスケープして「"」でさらに囲むみたいなことをすれば、不具合なく取り扱えるはずですが、ちょっとさすがにややこしいかなと。
ストリクトクエリの囲み記号を「"」以外にするか、そもそもstr_getcsvを使わずに完全に独自仕様にするか…。

あと、ストリクトクエリをパースするのとは逆に、ストリクトクエリを構築する機能もアンパンマンDBにはあるんですが、str_getcsvの逆をやる関数が実はPHPには今ないんですよね。
CSVの構築にはfputcsvがありますが、これはファイルに出力されてしまいますし、末尾に余計な改行も追加されます。
多分どうにかする方法はあるとは思うのですが、そこまでしてPHPの標準関数使うべきかな…と思ったり。

やはり独自仕様にする…かなぁ。

アンパンマンDBとドラゴンクエスト10

アンパンマンDB(記事更新)

来週の放送情報。
カッパチーノは21世紀に入ってから登場したメンバーの中ではかなり好きなほうなので、楽しみであります。

ドラゴンクエスト10

毎月10日はDQXで遊ぼう! ~DQコスプレパーティー2024~ (2024/5/1)|目覚めし冒険者の広場
テンの日。
DQコスプレ装備なんて持ってないけど冷やかしで見に行くだけ行ってみようかなと思ったら、人が多くて重すぎて写真も撮らずに退散してきました。

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

  • 【コイン】プチドラゴンをはじめて倒した!

テンの日で渡されるカードをテリーに押し付けるために個人的に毎月恒例の魔法の迷宮周回していたんですが、道中スキップのために入れたプチドラゴンカード、今日初めて使ったっぽいです。
まさか初めてだったとは思わず、こちらも写真は撮っていませんでした。
ァォィョッュはブレス耐性100%なんでドラゴンの攻撃ほとんどスルー出来ると思ってたんですが、「息」と名の付かない火では普通にダメージを受けました。
危ないというほどの場面はなかったけど、予想外のダメージ受けたなァ。

アンパンマンDBと日記

アンパンマンDB(システム)


善は急げで+-つけてみました。
しかしこうして見てみると、一行が長くなって折り返された時の見せ方にまだ改良の余地がありそうですね。

関係ないですが、検索のストリクトクエリもいくらか改良を考えています。
一般ユーザーにも教えている範囲では、みんなのタグの「user_tag:user_tag:○○:○○」があるんですが、最初の「user_tag:user_tag」の部分が見るからに冗長ですね。
本当は最初のトークンと次のトークンは意味が違っていて、最初が項目名、次はそれをどう扱うかというインターフェース指定なんですが、みんなのタグを含め、インターフェースを複数持つ項目はないから、実は項目ごとにインターフェースはすべて固定なのです。
なので、この冗長性を排除したいというのが一つ。
第二に、これは実用上ほぼ問題ないんですが、「○○」の部分にコロンを入れられないという地味な問題もあります。
あと、第三として、リスト項目をより細かい条件で検索できるようにするといった、純粋なグレードアップもしたいところですが、ストリクトクエリのトークン数は現状固定なので、まあまあ難しいのが現状です。
このあたり、第一の冗長性は当然廃止するとして、第二・第三の問題は、str_getcsvを使えばいい感じにトークンに分解できると思うので、これでトークン数可変で処理するようにすれば、まとめて解決できるんじゃないかと思っています。

日記

たまーに無題のまま日記投稿しちゃうことあるので、投稿前に無題チェックを入れるようにしてみました。
シンプルにJavaScriptで題を判定してconfirmしています。

アンパンマンDB(システム)

昔のアンパンマンDB(アンパンマンDB3)では、編集画面でプレビューすると、どの項目が編集されたか、編集内容を編集前と編集後で比較表示できるようになっていました。
しかし、今のバージョン(アンパンマンDB4)になって、項目の取り扱い方が大きく変わったため、比較表示機能は失われてしまいました。


復活させました。
今回、編集内容の表示機能を復活させるに当たって、以前より見やすくしてみました。
編集前後を並べるのではなく、diffコマンドみたいに差分のあった行を色分けして強調表示しています。
欲を言うならもっとdiffコマンドに寄せて、追加行に+、削除行に-をつけたりするとかあってもよかったかもしれないですね。

これを作るに当たって使ったライブラリは、編集データの文字列化に使うsymfony/yamlと、できた文字列の差分表示に使うsebastian/diffの2つ。
差分表示のほうははJavaScriptでやっちゃおうかなとか思ってたんですが、しっくりくるものがなかったので、結局どっちもPHPでやりました。

symfony/yamlは、構造化されたデータを複数行のわかりやすくdiffの取りやすい文字列に変換(シリアライズ)してくれます。
diffを取りやすいというのがポイントで、JSONだと配列の要素の後ろ(または前)にコンマがつくかつかないかが要素の順序で変わったりして、実質変化のない行まで差分になってしまうのですが、YAML形式だとそういうのが起こりにくくなっています。
ただし、構造化されていないただの文字列を渡すと、JSON形式の一行の文字列にまとめられてしまうので、この場合だけはシリアライズ処理をせずにそのままdiffに渡します。

sebastian/diffは、おそらくPHPUnitにも使われている、行単位の差分検出ライブラリです。
シンプルに使えば、一発でいい感じのdiff文字列を出してくれるのですが、HTMLページに表示するにはdiff文字列ではちょっと都合が悪いので、配列形式のデータを一度出してもらって、そこから自力でHTMLを作るようにしています。
差分行の色は、GitHubと同じ色にしました。

プリンセスピーチ Showtime!


マーメイド-1「メロディ・オブ・オーシャン」攻略。
音波信号で魚類を隷属させる支配的衣装、もとい、きれいな歌でおさかなさんに助けてもらえる友好的衣装です。。
一回目は見逃しがあったのと、最後のミニゲームで失敗して一発コンプリートは逃したのですが、二回目で取り切れました。
最後のミニゲームは拠点防衛型シューティングゲームと思えば…というか、本当にスピード感がシューティングゲームなんよ。

他の写真は以下から。
プリンセスピーチ Showtime!(2024/05/07)の写真

プリンセスピーチ Showtime!

放置してたピーチ、進めました。


パティシエ-2『ナイトメアパーティへようこそ』
パティシエは、見た目にもふんわりした相手(お菓子)の、ふんわりした正解ラインをぴったり当てるゲームなので、ちょっと苦手。
また、見た目完成しても、決定ボタン押すとか所定の場所に運ぶとかして結果にコミットしないと成功扱いにならないので、コミット漏れで失敗扱いされることもしばしば。
とはいえ、今回は普通に成功させていればキラメキストーンが全部手に入るやつだったので、一発でコンプリート。


そしてキラリスタ救出ステージ。
さっきのステージもそうだったんですが、敵も味方もおいしさ命で、味さえよければ分かり合えるやつら。
真っ当にお菓子作り対決を挑んできて、美味しさで浄化されていったのでした。
これも一発コンプリート。


本編とは関係ないけど、アクションリハーサル怪盗。
パティシエとは違う理由でこれもまた苦手ジャンルだったのですが、アクションリハーサルは覚えゲーなんで、何度もやってるとさすがに慣れました。
ということで、これまた一発…じゃないけど、報酬コンプリート。

他の写真は以下から。道中とセリフが中心。
プリンセスピーチ Showtime!(2024/05/06)の写真

<前 次>