<![CDATA[おわらない | ブログ記事]]> https://apxxxxxxe.dev/ RSS for Node Mon, 30 Jun 2025 17:58:39 GMT <![CDATA[価値観4象限マトリクス]]> https://apxxxxxxe.dev/entries/value_four_matrix https://apxxxxxxe.dev/entries/value_four_matrix Mon, 30 Jun 2025 00:00:00 GMT <p>小戸らでくさんの<a href="https://nekoorinu.monster/%E4%BC%BA%E3%81%8B%E3%83%BB%E4%BC%BA%E7%9A%84AdventCalendar202409">4象限マトリクス</a>に触発され、自分でもテンプレートを考えてみました。</p> <p><img src="%E4%BE%A1%E5%80%A4%E8%A6%B34%E8%B1%A1%E9%99%90%E3%83%9E%E3%83%88%E3%83%AA%E3%82%AF%E3%82%B9.png" alt="center:"> 価値観4象限マトリクスといいます。<br> 12のトピックについて、あるキャラクターがそれを好きか嫌いか、またそれを欲しいかいらないか(やりたいかやりたくないか)という2つの観点で度合いをマッピングします。<br> キャラクターの価値観を掘り下げることを目的としています。</p> <h2 id="使用例">使用例</h2> <p>どのように使用するかの例として、私のゴーストでやってみました。</p> <h3 id="ハイネ">ハイネ</h3> <p><img src="%E4%BE%A1%E5%80%A4%E8%A6%B34%E8%B1%A1%E9%99%90%E3%83%9E%E3%83%88%E3%83%AA%E3%82%AF%E3%82%B9-haine.png" alt="center:"></p> <p><strong>知識</strong>:何でも知りたい 知識に貴賤はないわ<br> <strong>アート</strong>:自分で作るより鑑賞するのが好きよ<br> <strong>挑戦</strong>:変化を取り入れてこそ生活に張りが出るというものよ<br> <strong>仕事・勉強</strong>:霊のコミュニティでの仕事 問題解決に取り組むのは好きよ<br> <strong>友情</strong>:対等な関係は常に築きたいものね<br> <strong>おしゃれ</strong>:着飾っている人を見るのは好き 自分を飾ろうとは思わないけれど<br> <strong>信仰</strong>:教会の静謐な雰囲気は好き 祈ろうとは思わないけれど<br> <strong>お金</strong>:あって困るものではないけれど、依存は身を滅ぼすでしょうね<br> <strong>睡眠</strong>:最近はあまり取っていないわ 退屈していないもの<br> <strong>名誉</strong>:軽んじられなければそれ以上は求めないわ<br> <strong>恋愛</strong>:自由を縛るものだと思わない?身体的、精神的にも<br> <strong>食事</strong>:ただただ、面倒 生前よりはマシだけれど</p> <h3 id="ヨウト">ヨウト</h3> <p><img src="%E4%BE%A1%E5%80%A4%E8%A6%B34%E8%B1%A1%E9%99%90%E3%83%9E%E3%83%88%E3%83%AA%E3%82%AF%E3%82%B9-youto.png" alt="center:"></p> <p><strong>食事</strong>:食べるのは好き。成長期みたいで身長も伸び続けてるよ<br> <strong>友情</strong>:友達と毎日遊んでる。ゲームより外で体を動かすのが好き<br> <strong>挑戦</strong>:隣町に新しくできたスポーツショップに行ったりする<br> <strong>アート</strong>:図工の授業がかなり好き。夏休みの工作とか、自由に考えて作れるから好き<br> <strong>知識</strong>:雑学の本とかは好きだよ<br> <strong>お金</strong>:おこづかいでお菓子を買うのは好き。でも無くてもあんまり困らないかも<br> <strong>睡眠</strong>:9時には寝てる。え、みんなそうじゃないの?<br> <strong>おしゃれ</strong>:興味はない…ことはないけど。あんまり前のめりでも変でしょ<br> <strong>恋愛</strong>:態度に出すと冷やかされるのが嫌<br> <strong>名誉</strong>:仲いい友達と楽しく過ごせれば、目立つとかはしなくていいかな<br> <strong>仕事・勉強</strong>: 退屈。45分も座ってるのしんどいよ<br> <strong>信仰</strong>:初詣などは行くけどそれだけ</p> <h2 id="やってみよう">やってみよう</h2> <p>テンプレートpsdはこちらからダウンロードできます。<br> トピックの変更・追加はご自由にどうぞ。</p> <p><a href="https://apxxxxxxe.dev/contents/value_four_matrix/%E4%BE%A1%E5%80%A4%E8%A6%B34%E8%B1%A1%E9%99%90%E3%83%9E%E3%83%88%E3%83%AA%E3%82%AF%E3%82%B9.psd">価値観4象限マトリクス.psd</a></p> <![CDATA[20250629]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202506291553 Sun, 29 Jun 2025 00:00:00 GMT <p class="article-p">4象限マトリクスの記事に包装紙についてのやつを追加しています</p> <![CDATA[派生トークリクエスト機能]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202506241516 Tue, 24 Jun 2025 00:00:00 GMT <p class="article-p">ハイネに派生トークリクエスト機能を追加しました</p> <p class="article-p">ダブルクリックメニューの歯車ボタンから設定一覧を開き、そこから設定をオンにすることでランダムトーク時にリクエストボタンが表示されるようになります<br> リクエストボタンを押すとインプットボックスが表示され、web拍手経由で該当トークへの派生トークリクエストを送ることができます</p> <p class="article-p">各ランダムトーク、例えば服装にこだわりがないというトークに対して「服を選んであげようか?」という呼びかけをリクエストすることで、それに対する返答という形で派生トークが生える…かもしれません</p> <p class="article-p">派生トークが追加されたランダムトークは「トーク統計」画面から優先的に閲覧することができます</p> <p class="article-p">ご活用ください</p> <![CDATA[青唐おろしうどん]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202506150024 Sun, 15 Jun 2025 09:00:00 GMT <p class="article-p">丸亀製麺の青唐おろしぶっかけうどんが今年も始まりましたね<br> 初めて存在を知ったのは<a href="https://x.com/ngntrtr/status/1539543460234924032" class="article-a">ナガノ先生のツイート</a>からで、レポを見つつも心の何処かで「こういう大手が出す辛さは万人向けに抑えられてるんだよな~」と思いつつ食べたら"本気"の辛さがあり感動した覚えがあります</p> <p class="article-p">今年は青唐おろしうどんという名前で出ているみたいです 微妙に名前が変わった?<br> 関係ないけど自分はアホほど声が通らないので(家族全員そういう声質)丸亀製麺のオーダーが通りづらくて毎回緊張しています 今回は通った<br> 今年も去年と同じくらい辛くて美味しかった!<br> 単純な辛さ的には一昨年が一番辛かった気がします</p> <p class="article-p">期間中にもう2回くらい食べに行きたい…</p> <![CDATA[20250615]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202506150524 Sun, 15 Jun 2025 06:00:00 GMT <p class="article-p">成人向けギャラリーを作成しました 18歳以上の方のみ閲覧可とします<br> あわせて成人向けギャラリーにハイネのR-18アニメーションを追加しています</p> <![CDATA[June Bride]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202506091229 Mon, 09 Jun 2025 00:00:00 GMT <p class="article-p">ギャラリーに絵を一枚追加しました<br> ハイネのウェディングドレス絵です</p> <![CDATA[4象限マトリクス]]> https://apxxxxxxe.dev/entries/four_matrix https://apxxxxxxe.dev/entries/four_matrix Mon, 02 Jun 2025 00:00:00 GMT <p class="article-p">小戸らでくさんの「4象限マトリクス」を自ゴでやってみました。<br> 4象限マトリクスの詳細は<a href="https://nekoorinu.monster/%E4%BC%BA%E3%81%8B%E3%83%BB%E4%BC%BA%E7%9A%84AdventCalendar202409" class="article-a">小戸らでくさんの紹介記事</a>をご覧ください。</p> <h2 class="article-h2" id="待ち合わせ">待ち合わせ</h2> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/four_matrix/%E5%BE%85%E3%81%A1%E5%90%88%E3%82%8F%E3%81%9B.png"><img src="/contents/four_matrix/%E5%BE%85%E3%81%A1%E5%90%88%E3%82%8F%E3%81%9B.png" alt="" class="w-[80%] mx-auto"></a><p></p></div> ハイネ:時間には厳格 でも暇な時間は思索にふければいくらでも潰せるので、よほどシビアなスケジュールでない限り遅刻には寛容<br> ヨウト:何もなければまず遅れないけどアクシデントとかにはちょっと弱い 遅刻されることへの耐性はふつうくらい</div> <h2 class="article-h2" id="大きい方">大きい方</h2> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/four_matrix/%E5%A4%A7%E3%81%8D%E3%81%84%E6%96%B9.png"><img src="/contents/four_matrix/%E5%A4%A7%E3%81%8D%E3%81%84%E6%96%B9.png" alt="" class="w-[80%] mx-auto"></a><p></p></div> ハイネ:食事に極端に関心がないのでいくらでも譲る<br> ヨウト:そりゃいっぱい食べたいが食い意地張るのもな…と思いつつ食欲が勝つ</div> <h2 class="article-h2" id="筆跡">筆跡</h2> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/four_matrix/%E7%AD%86%E8%B7%A1.png"><img src="/contents/four_matrix/%E7%AD%86%E8%B7%A1.png" alt="" class="w-[80%] mx-auto"></a><p></p></div> ヨウト:いわゆる男の子の字 書き取りとかを真面目にやるので比較的読みやすい<br> ハイネ:自分が読めればいいような字を書いている 書類仕事で怒られるのでそういうときは気をつけている…が、客観的には依然としてのたくるような文字</div> <h2 class="article-h2" id="ずるいこと">ずるいこと</h2> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/four_matrix/%E3%81%9A%E3%82%8B%E3%81%84%E3%81%93%E3%81%A8.png"><img src="/contents/four_matrix/%E3%81%9A%E3%82%8B%E3%81%84%E3%81%93%E3%81%A8.png" alt="" class="w-[80%] mx-auto"></a><p></p></div> ハイネ:抜け道上等 それで良い結果を獲得するなら自他ともに歓迎しがち<br> ヨウト:いい子ちゃんがち 稚気は湧いても自制が効くタイプ</div> <h2 class="article-h2" id="ダンス">ダンス</h2> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/four_matrix/%E3%83%80%E3%83%B3%E3%82%B9.png"><img src="/contents/four_matrix/%E3%83%80%E3%83%B3%E3%82%B9.png" alt="" class="w-[80%] mx-auto"></a><p></p></div> ふたりとも苦手<br> ハイネ:運動全般が苦手<br> ヨウト:下手なので人前ではやらないけど自分の部屋で好きな曲をかけて踊ったりする</div> <h2 class="article-h2" id="歌">歌</h2> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/four_matrix/%E6%AD%8C.png"><img src="/contents/four_matrix/%E6%AD%8C.png" alt="" class="w-[80%] mx-auto"></a><p></p></div> ヨウト:わりとうまい が、同級生からは逆に冷やかしを受けるのであまり歌いたがらない<br> ハイネ:音痴 でも機嫌がいいとき鼻歌とかを歌う方</div> <h2 class="article-h2" id="夜食">夜食</h2> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/four_matrix/%E5%A4%9C%E9%A3%9F.png"><img src="/contents/four_matrix/%E5%A4%9C%E9%A3%9F.png" alt="" class="w-[80%] mx-auto"></a><p></p></div> ハイネ:食欲ない<br> ヨウト:食べたくなる前に睡魔が勝つ</div> <h2 class="article-h2" id="料理">料理</h2> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/four_matrix/%E6%96%99%E7%90%86.png"><img src="/contents/four_matrix/%E6%96%99%E7%90%86.png" alt="" class="w-[80%] mx-auto"></a><p></p></div> ハイネ:レシピをきっちり守るので何でも作れる でもそれって誰でもできることじゃない?と思って進んでやることはない 他人に振る舞う場合はあるいは、という感じ<br> ヨウト:少し親の手伝いをする程度 遊びの時間が減るのであまり乗り気ではない</div> <h2 class="article-h2" id="包装紙">包装紙</h2> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/four_matrix/%E5%8C%85%E8%A3%85%E7%B4%99.png"><img src="/contents/four_matrix/%E5%8C%85%E8%A3%85%E7%B4%99.png" alt="" class="w-[80%] mx-auto"></a><p></p></div> ハイネ:シンプル不器用&#x26;不慣れ ペーパーナイフで丁寧にぐしゃぐしゃにする<br> ヨウト:そこそこ慣れている 大人用カッターを使うのに親の監視が必要だったが最近はそれも無くなった</div> <h2 class="article-h2" id="幽霊">幽霊</h2> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/four_matrix/%E5%B9%BD%E9%9C%8A.png"><img src="/contents/four_matrix/%E5%B9%BD%E9%9C%8A.png" alt="" class="w-[80%] mx-auto"></a><p></p></div> ヨウト:怪談の本を読んだ日は夜のトイレにびびりまくる でも読んじゃう<br> ハイネ:日常すぎる</div> <![CDATA[Crave The Grave を公開しました]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202505302316 Fri, 30 May 2025 00:00:00 GMT <p class="article-p">ゴースト「<a href="https://github.com/apxxxxxxe/Haine#readme" class="article-a">Crave The Grave</a>」を公開しました</p> <p class="article-p">このゴーストは2019年頃に「郊外通りのハイネ」として公開していたものを再構成した作品です<br> 舞台設定などが練られておらず公開し続けるに忍びなかったため短期間で公開を停止し、最近までずっと設定を再構成しては崩しを繰り返していました。栞も里々から始まりYAYAへ、そして現在はプログラミング言語Rustによる独自栞へと移行しました(このあたりの変遷はGitHubのコミット履歴などに残っています)</p> <p class="article-p">思い入れのある作品であり、演出や機能面など各方面に力を入れています<br> よろしくお願いします</p> <![CDATA[無題20250529]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202505291329 Thu, 29 May 2025 00:00:00 GMT <p class="article-p">ギャラリーに過去に描いた絵を追加しました<br> かなり昔のものも含まれており、恥ずかしいので見てください</p> <![CDATA[無題20250523]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202505231019 Fri, 23 May 2025 00:00:00 GMT <p class="article-p">昨日に引き続きサイトを更新しています<br> 今日はトップページについて下記の変更を加えました</p> <ul class="list-disc ml-7 mb-3"> <li>レイアウト改修</li> <li>ハイネ、ヨウトの画像にアニメーションを追加</li> <li>ギャラリーへのリンク画像を設定(各ゴーストにゆかりのあるアイテム群)</li> </ul> <p class="article-p">画面が華やかに見えていれば嬉しいのですが…</p> <p class="article-p">今回の制作で始めてAsepriteのアニメーション作成機能を使いました<br> かなり直感的にいじることができてよかったです</p> <![CDATA[無題20250522]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202505221436 Thu, 22 May 2025 00:00:00 GMT <p class="article-p">サイトのレイアウトを変更しました<br> 往年のサイトに倣って横幅を狭めたのと、トップページにサイトマップとしてアイコン画像を描いて設定しています</p> <p class="article-p">大幅な変更の影響でモバイル版のレイアウトが崩れているのですが追々直していきます…</p> <![CDATA[無題20250519]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202505191557 Mon, 19 May 2025 00:00:00 GMT <p class="article-p">2025/5/18の伺アニお疲れ様でした!<br> 日野は\45 FoxyLabでNaoさんと一緒に参加させていただいていました<br> おかげさまで用意したグッズも完売し、たくさんのデベロッパーさん、ユーザさんとお話することができました<br> イベント初参加でしたが1日通してとても楽しかったです<br> お声掛けいただいた方々、またイベント関係者の皆様ありがとうございました!</p> <![CDATA[無題20250513]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202505131317 Tue, 13 May 2025 00:00:00 GMT <p class="article-p">子供の頃に特定ベクトルの作品を浴びて性癖が曲がる経験は誰しもあるかと思いますが、<br> わたしにとってのそれが<a href="https://x.com/garvvjunyaSKB/status/1429284487947378691" class="article-a">以前流れてきたツイート</a>で紹介されていました</p> <p class="article-p">「ぞくぞく村のゾンビのビショビショ」<br> まさにこの本が当時の学級文庫にあって、頻繁に読んでいたのを思い出しました<br> このシリーズはこのキャラクターの造形が妙にフェティッシュで、他にも雪女や人魚などが印象に残っています<br> 自分は肩にかかる癖のあるロングヘアが性癖なのですが、その原体験の一つに本書があるような気がしています</p> <p class="article-p">昨今はコロコロなどの少年誌でこんなんええんか?というデザインや描写がしばしば話題になったりしていて、<br> ネットの普及などもあり現代の子供は手の届く範囲に刺激が多いななどと考えていたのですが文化とはそういうものなのかもしれません 性癖は曲がるもの</p> <![CDATA[無題20250511]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202505110556 Sun, 11 May 2025 00:00:00 GMT <p class="article-p">web拍手の返信をブログのみで行うように方針を変更します<br> Mastodonでも行っていたのですが窓口は一本化したほうが双方おそらくうれしいため…</p> <p class="article-p">なので今後拍手返信を待ち受ける必要がある場合はブログのRSS購読でご確認いただければ幸いです</p> <![CDATA[無題20250508]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki20250508133330 Fri, 09 May 2025 06:00:00 GMT <p class="article-p">他の方に描いていただいた作品を紹介するコーナーを<a href="https://apxxxxxxe.dev/gallery/" class="article-a">ギャラリー</a>に追加しました<br> アカウント無しでアクセスできるページであるかどうかを紹介の基準としています</p> <![CDATA[2025/5/9にweb拍手をくださった方へ]]> https://apxxxxxxe.dev/entries/webclap202505081330 https://apxxxxxxe.dev/entries/webclap202505081330 Fri, 09 May 2025 03:00:00 GMT <p class="article-p">(4/24に拍手をくださり、その続きとして5/9に拍手をくださった方への返信です)</p> <p class="article-p">詳細なご回答ありがとうございます。おかげさまで原因が判明しました!<br> ご推察の通り、SSPが日本語を含むファイルパスに配置されている場合に不具合が生じていました。</p> <h3 class="article-h3" id="原因読み飛ばしていただいて構いません">原因(読み飛ばしていただいて構いません)</h3> <p class="article-p">現在の仕様ではプラグインのロード時にプラグインのファイルパスをSSPから受け取っている(ログファイルがプラグインフォルダの直下に生成される機能などはこれを用いています)のですが、<br> ここで日本語文字列が含まれている場合は読み込みに失敗してしまい、以降の処理が部分的に働かなくなっていたようです。</p> <h3 class="article-h3" id="対応">対応</h3> <p class="article-p">修正バージョン(<a href="https://github.com/apxxxxxxe/GhostSpeaker/releases" class="article-a">v1.2.4</a>)を作成し、公開しました!</p> <p class="article-p">上記の問題に対処し、SSP(厳密にはプラグインのフォルダ)が日本語を含むファイルパスに配置されている場合でも動くように修正しています。<br> テストとして、こちらの環境で <code>C:\Users\Public\Downloads\伺か\ssp.exe</code> となるように配置したSSPで検証し、プラグインが正常に動作することを確認しました。</p> <p class="article-p">すでにフォルダ名をアルファベットに変更することでご対応いただいたとのことで、ご不便をおかけして申し訳ありませんでした。<br> 本バージョン以降では問題なくご利用いただけるかと思います。</p> <p class="article-p">また何かご不明点などございましたらご連絡いただければ幸いです。</p> <![CDATA[無題20250509]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202505091330 Fri, 09 May 2025 00:00:00 GMT <p class="article-p">アラームを設定してから仮眠を取っていたのですが、</p> <ul class="list-disc ml-7 mb-3"> <li>初回アラーム: 睡眠時間1時間40分</li> <li>スヌーズ機能アラーム: 睡眠時間10分</li> </ul> <p class="article-p">で2つの体感時間がほぼ同じでした そんなことある?<br> ちなみにばっちり夢も見ました 人体のふしぎ</p> <![CDATA[雑記]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202505081101 Thu, 08 May 2025 00:00:00 GMT <p class="article-p">試験的にサイト全体の指定フォントをメイリオにしました<br> メイリオがインストールされている環境では優先的に使用されます</p> <p class="article-p">往年の雰囲気(というより2010年代のwiki文化あたり?)を目指しての変更ですがどうかな<br> しばらくやってみて見にくさが勝つようだったら戻します</p> <![CDATA[雑記]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202505060659 Wed, 07 May 2025 00:00:00 GMT <p class="article-p">数日前からTwitterなどで創作サーチ(<a href="https://tters.jp/s" class="article-a">https://tters.jp/s</a>)が話題ですね</p> <p class="article-p">ざっと眺めるだけでもサイト管理者さん達の個性と創作意欲が発揮されていて楽しいです</p> <p class="article-p">特に目を引いたのは「<a href="https://www.nuilulu.me/" class="article-a">るる美の保健室</a>」さん<br> やりたいこと全部やってる感じがめちゃくちゃ素敵です こうありたい</p> <![CDATA[2025/4/24 に拍手をくださった方へ]]> https://apxxxxxxe.dev/entries/clap202505060208 https://apxxxxxxe.dev/entries/clap202505060208 Tue, 06 May 2025 00:00:00 GMT <p class="article-p">GhostSpeakerの不具合について、ご報告ありがとうございます。 原因調査のためにいくつかご質問させていただきたいことがございます。<br> 長くなっておりお手数をおかけして申し訳ございませんが、ご確認いただければ幸いです。</p> <h3 class="article-h3" id="ご確認したいこと">ご確認したいこと</h3> <ul class="list-disc ml-7 mb-3"> <li>本プラグインにおける自動更新機能は現在削除済みですが、v1.0.2時点では有効でした。v1.0.2では動作するというのは、自動更新が走り、最新版への更新が行われたうえでのことでしょうか?(バージョンはプラグインメニューの最上部に記載されておりますので、ご確認いただければ幸いです。)</li> <li>v1.0.2より先のバージョンで音声合成が行われないとのことですが、 <ul class="list-disc ml-7 mb-3"> <li>棒読みちゃん</li> <li>VOICEVOX</li> <li>COEIROINK2</li> </ul> </li> </ul> <p class="article-p">のすべてで音声合成が行われないということでしょうか。(上の3ソフトとは別々のロジックで通信しているので、原因の切り分けのためのご質問です)</p> <h3 class="article-h3" id="前提">前提</h3> <p class="article-p">上記のご質問は、以下の前提に立つものです。</p> <ul class="list-disc ml-7 mb-3"> <li>v1.2.1以前、ログファイルの初期化に失敗した場合は回復不能エラーとしてSSPごと落ちるという仕様になっていました。ログファイル機能にそこまでの厳しさは必要ないということでv1.2.2以降は警告メッセージのみ発し、それ以降の機能はそのまま続ける仕様になっています。</li> <li>すなわちv1.0.2ではログファイルの初期化に失敗した場合はSSPごと落ちるはずなので、本お問い合わせの焦点はログファイルが生成されないことではなく、v1.0.2では動いていた音声合成が以降のバージョンで動かないことにあると推測しております。</li> </ul> <hr class="border-t my-5"> <p class="article-p">ご依頼、ご説明は以上となります。<br> 改めて、お手数をおかけして申し訳ございませんがご回答いただければ幸いです。</p> <![CDATA[イラスト!!!!!]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki202505051706 Mon, 05 May 2025 12:12:02 GMT <p class="article-p">ホウ酸さんにハイネと女性ユーザのイラストを描いていただきました!!!!!!(<a href="https://misskey.io/notes/a7dcqx7o2pez02m3" class="article-a">link</a>)<br> 顔が近く、感情がある ありがとうございます…</p> <![CDATA[雑記]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/zakki20250505 Mon, 05 May 2025 00:00:00 GMT <p class="article-p">最近ランニングをしています</p> <p class="article-p">学生の頃のマラソン大会は競争の面が強くて嫌だったけれど、<br> 夜中に一人で走るのはなかなか楽しい</p> <![CDATA[理想の女を描いていただきました]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/fammefatale_from_others Mon, 10 Feb 2025 00:00:00 GMT <p class="article-p"><a href="https://apxxxxxxe.dev/gallery/fammefatale/" class="article-a">私の理想の女</a>を小戸らでくさんに描いていただきました (<a href="https://nekoorinu.monster/illust.html" class="article-a">link</a>)</p> <p class="article-p">ここでいう理想の女という概念は小戸らでくさんが考案された概念で、<br> 名の通り自分にとっての理想の女を考えてみようというムーブメントでした</p> <p class="article-p">うちの理想の女は儚さと強さがある人でした<br> 不意に消えてしまいそうな雰囲気だけど、問題解決能力が高く他人に頼らず一人で生きていける人 でももういない<br> 「もう会うことのない人」という概念が持つ雰囲気 何がきっかけだったか思い出せないけど昔から好き</p> <p class="article-p">みたいなことをその場にいた人たちと話し合っていました<br> それぞれの人が考案した理想を見て、あ~確かに好きそ~ となったりしてよかったです<br> あとマジでガチの理想を凝縮しているので人に話したり見せるのが恥ずかしいというのも共通の感想でした</p> <p class="article-p">みなさんも理想の女/男/その他 を考えてみてはいかがでしょうか</p> <![CDATA[サイト更新: ギャラリーページ追加]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/publish-gallery Wed, 05 Feb 2025 00:00:00 GMT <p class="article-p">サイトに<a href="https://apxxxxxxe.dev/gallery/" class="article-a">ギャラリー</a>ページを追加しました。<br> 伺かのイラストだけでなく、自作絵全般を載せていく予定です。</p> <![CDATA[福笑い式surfaces.txtジェネレーターを作った話]]> https://apxxxxxxe.dev/entries/adventcalendar_20241207 https://apxxxxxxe.dev/entries/adventcalendar_20241207 Sat, 07 Dec 2024 00:00:00 GMT <p class="article-p">伺か・伺的 Advent Calendar 2024 (第2会場) 7日目の記事です。<br> 6日目の<a href="https://note.com/kanade_lab/n/n36254ac65034" class="article-a">ななっちさん</a>に続いて、日野つみが記事を書かせていただきます。</p> <p class="article-p">本記事では、界隈でたびたび話題となっているサーフェス定義方針、<br> いわゆる「福笑い式」について界隈での動きなどを提示したのち、<br> 私が開発した福笑い式に基づくsurfaces.txtジェネレーター「surfaces-mixer」について紹介します。</p> <h2 class="article-h2" id="福笑い式の定義">福笑い式の定義</h2> <p class="article-p"><strong>※記事で言及する便宜上本項で定義していますが、一般的な意味を定めるものではありません。</strong></p> <p class="article-p">「福笑い式」とは、伺かのサーフェス定義ファイルsurfaces.txtにおいて、<br> サーフェス番号の桁一つに対してパーツを割り当てるという手法です。<br> 例えば、サーフェス番号111~999の範囲で、1の位には目パーツ、10の位には口パーツ、100の位には眉パーツを割り当てるといった具合です。</p> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/adventcalendar_20241207/20241201_adventcalendar.png"><img src="/contents/adventcalendar_20241207/20241201_adventcalendar.png" alt="福笑い式の図"></a><p>福笑い式の図</p></div></div> <p class="article-p">「1は開いた目」 「2は閉じた目」 「3は笑った目」というように数字に対してパーツの意味を割り当てておくことで、<br> 「普通の眉、笑った口、笑った目はサーフェス番号133番」というように、サーフェス番号からパーツを推測しやすくなるというメリットがあります。 パーツの組み合わせを網羅しているため、欲しい表情を瞬時にゴーストに適用することができます。</p> <p class="article-p">デメリットとしては、パーツが増えるほど組み合わせの数も指数関数的に増えていくため<br> 手作業でのsurfaces.txtの記述が困難であることが挙げられます。</p> <h2 class="article-h2" id="界隈における取り組み">界隈における取り組み</h2> <p class="article-p">福笑い式に関する取り組みを知っている限りご紹介します。<br> 他にもあるよ!という場合は<a href="http://clap.webclap.com/clap.php?id=apxxxxxxe" class="article-a">Web拍手</a>等で教えていただけると幸いです。</p> <h3 class="article-h3" id="桁ごとにパーツを指定するsurface定義"><a href="https://yoippari.n0v0.be/p/dev_10Ksurface.html" class="article-a">桁ごとにパーツを指定するsurface定義</a></h3> <p class="article-p">冷やし湯さんが作成された福笑い式サーフェス定義を積んだサンプルゴーストです。<br> また、リンク先ページでは福笑い式についての解説もされています。</p> <h3 class="article-h3" id="サーフィス組み合わせ機"><a href="https://ukiya.sakura.ne.jp/other/surfacecombinator.html" class="article-a">サーフィス組み合わせ機</a></h3> <p class="article-p">Ukiyaさんが作成されたWebアプリケーションです。<br> 画像ファイル名をパーツ別に指定することで、福笑い式のsurfaces.txtを生成します。</p> <h3 class="article-h3" id="サーフェス連番ジェネレータ"><a href="https://kuronekokuro.bake-neko.net/ukagaka/index.html" class="article-a">サーフェス連番ジェネレータ</a></h3> <p class="article-p">クロ猫黒さんが作成されたexe形式のアプリケーションです。<br> パーツ別に別ディレクトリに格納されたパーツファイルを読み込んで、福笑い式のsurfaces.txtを生成します。</p> <h3 class="article-h3" id="surfacebuilder"><a href="https://github.com/kanadelab/SurfaceBuilder" class="article-a">SurfaceBuilder</a></h3> <p class="article-p">ななっちさんが作成されたexe形式のアプリケーションです。 パーツ画像をドラッグ&ドロップすることで、サーフェス合成プレビューを確認することができます。<br> また、合成したサーフェスの定義をクリップボードにコピーする補助機能も搭載されています。</p> <h2 class="article-h2" id="surfaces-mixer">surfaces-mixer</h2> <p class="article-p">本記事で紹介するsurfaces-mixerは、上記の取り組みを参考にしつつ、以下の特徴を持つsurfaces.txtジェネレーターです。<br> surfaces-mixerは設定ファイルに特定のフォーマットでパーツの指定を記述し、それを読み込むことでsurfaces.txtを生成します。<br> フォーマット(yaml)の把握と簡単なコマンドラインの操作さえ可能ならば、柔軟で強力、かつメンテナンスフリーにsurfaces.txtを生成することができます。</p> <h3 class="article-h3" id="surfacestxtのメンテナンスが容易">surfaces.txtのメンテナンスが容易</h3> <p class="article-p">従来の福笑い式ジェネレーターは、surfaces.txtの一部を生成し、<br> 残りは手作業でsurfaces.txtへ移植するという手法が一般的でした。</p> <p class="article-p">一方、surfaces-mixerは、surfaces.txtの全体を生成することができます。</p> <h3 class="article-h3" id="パーツの指定方法が柔軟">パーツの指定方法が柔軟</h3> <p class="article-p">surfaces-mixerは yaml というデータ形式を採用することで、surfaces.txtに手書きしていた<br> <code>animation</code>や<code>collision</code>を含むサーフェス定義をそのまま記述することができます。</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow"># サンプルファイル # yamlファイルはraw,charactersの2分類を起点に構成される。 # # - raw: descriptなど、組み合わせに関係のない定義。 # ここに記述された内容はsurfaces.txtの冒頭にそのまま出力される。 # # - characters: キャラクターごとのパーツの定義。 # [構造] # // \0キャラクターの定義 # - base: ... # 頭や胴体など、全サーフェスに共通するパーツの定義。 # parts: # 基点 # - group: 〇〇 # 「目」「口」など、そのグループ名が何であるかの目安。 # details: # 詳細情報の基点 # - name: △△ # 「半目」「閉じ目」など、そのパーツが何であるかの目安。 # text: ... # そのパーツのサーフェス定義。 # // \1キャラクターの定義 # - base: ... # 頭や胴体など、全サーフェスに共通するパーツの定義。 # parts: # 基点 # (移行同様) raw: | descript { version,1 } characters: # \0側キャラクター - parts: - group: 顔色 details: - name: 通常顔 text: | - name: 照れ顔 text: | animation500600.interval,runonce animation500600.pattern0,overlay,101,0,0,0 - group: 目 details: - name: こっち目 text: | animation500300.interval,runonce+rarely animation500300.option,shared-index animation500300.pattern0,overlay,201,0,0,0 animation500300.pattern1,overlay,209,4000,0,0 animation500300.pattern2,overlay,204,100,0,0 animation500300.pattern3,overlay,201,100,0,0 - name: あっち目 text: | animation500300.interval,runonce+rarely animation500300.option,shared-index animation500300.pattern0,overlay,203,0,0,0 animation500300.pattern1,overlay,209,4000,0,0 animation500300.pattern2,overlay,206,100,0,0 animation500300.pattern3,overlay,203,100,0,0 - group: 腕 details: - name: 前手 text: | animation505000.interval,runonce animation505000.pattern0,overlay,503,0,0,0 collisionex13,hand,polygon,288,423,330,410,336,414,341,422,328,446,317,436,288,442 collisionex14,hand,polygon,282,501,262,536,261,550,285,556,299,549,294,521,295,512 - name: 胸に手 text: | animation504000.interval,runonce animation504000.pattern0,overlay,501,0,0,0 animation590000.interval,runonce animation590000.pattern0,overlay,601,0,0,0 collisionex13,hand,polygon,288,423,330,410,336,414,341,422,328,446,317,436,288,442 collisionex14,hand,polygon,282,501,262,536,261,550,285,556,299,549,294,521,295,512 base: | collisionex10,shoulder,polygon,205,319,206,309,214,301,229,299,251,293,248,312 collisionex11,shoulder,polygon,292,293,309,299,332,302,339,315,301,315 collisionex7,mouse,ellipse,260,259,283,268 collisionex8,head,polygon,292,134,319,151,340,176,339,192,292,190,240,192,201,187,213,158,230,140,259,127 collisionex6,face,polygon,270,285,239,267,227,246,220,214,222,189,227,173,315,170,320,189,321,210,315,245,305,268 //素体 element0,overlay,surface1000.png,0,0 # \1側キャラクター - parts: - group: 素体 details: - name: 通常 text: | - name: 腕上げ text: | animation500600.interval,runonce animation500600.pattern0,overlay,101,0,0,0 - group: 目 details: - name: こっち目 text: | element0,overlay,surface3000.png,0,0 - name: あっち目 text: | element0,overlay,surface3001.png,0,0 </div> <p class="article-p">このyamlファイルをsurfaces-mixerに読み込むことで、以下のsurfaces.txtを生成することができます。</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">charset,UTF-8 descript { version,1 } // 顔色 surface111,112,121,122 { // 通常顔 } surface211,212,221,222 { // 照れ顔 animation500600.interval,runonce animation500600.pattern0,overlay,101,0,0,0 } // 目 surface111,112,211,212 { // こっち目 animation500300.interval,runonce+rarely animation500300.option,shared-index animation500300.pattern0,overlay,201,0,0,0 animation500300.pattern1,overlay,209,4000,0,0 animation500300.pattern2,overlay,204,100,0,0 animation500300.pattern3,overlay,201,100,0,0 } surface121,122,221,222 { // あっち目 animation500300.interval,runonce+rarely animation500300.option,shared-index animation500300.pattern0,overlay,203,0,0,0 animation500300.pattern1,overlay,209,4000,0,0 animation500300.pattern2,overlay,206,100,0,0 animation500300.pattern3,overlay,203,100,0,0 } // 腕 surface111,121,211,221 { // 前手 animation505000.interval,runonce animation505000.pattern0,overlay,503,0,0,0 collisionex13,hand,polygon,288,423,330,410,336,414,341,422,328,446,317,436,288,442 collisionex14,hand,polygon,282,501,262,536,261,550,285,556,299,549,294,521,295,512 } surface112,122,212,222 { // 胸に手 animation504000.interval,runonce animation504000.pattern0,overlay,501,0,0,0 animation590000.interval,runonce animation590000.pattern0,overlay,601,0,0,0 collisionex13,hand,polygon,288,423,330,410,336,414,341,422,328,446,317,436,288,442 collisionex14,hand,polygon,282,501,262,536,261,550,285,556,299,549,294,521,295,512 } surface.append111-222 { collisionex10,shoulder,polygon,205,319,206,309,214,301,229,299,251,293,248,312 collisionex11,shoulder,polygon,292,293,309,299,332,302,339,315,301,315 collisionex7,mouse,ellipse,260,259,283,268 collisionex8,head,polygon,292,134,319,151,340,176,339,192,292,190,240,192,201,187,213,158,230,140,259,127 collisionex6,face,polygon,270,285,239,267,227,246,220,214,222,189,227,173,315,170,320,189,321,210,315,245,305,268 //素体 element0,overlay,surface1000.png,0,0 } // 素体 surface1011,1012 { // 通常 } surface1021,1022 { // 腕上げ animation500600.interval,runonce animation500600.pattern0,overlay,101,0,0,0 } // 目 surface1011,1021 { // こっち目 element0,overlay,surface3000.png,0,0 } surface1012,1022 { // あっち目 element0,overlay,surface3001.png,0,0 } </div> <p class="article-p">このように、パーツ別の定義を箇条書き的に記述することができます。</p> <h3 class="article-h3" id="使い方">使い方</h3> <p class="article-p">1. 生成したいsurfaces.txtのyamlファイルを作成します。上記サンプルを参考にしてください。</p> <p class="article-p">2. surfaces-mixer.exeの最新版を以下リンクからダウンロードします。<br> <a href="https://github.com/apxxxxxxe/surfaces-mixer/releases" class="article-a">https://github.com/apxxxxxxe/surfaces-mixer/releases</a></p> <p class="article-p">3. ダウンロードしたsurfaces-mixer.exeを、surfaces.txtを生成したいディレクトリに配置します。<br> パスを通せる方は、任意のディレクトリに配置したのち、環境変数PATHに追加してください。</p> <p class="article-p">4. コマンドプロンプトを開き、surfaces-mixer.exeがあるディレクトリに移動します。<br> 例えば、<code>C:\Users\user1\Ukagaka\ssp\ghost\myghost\shell\master</code> に移動する場合は、</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">cd C:\Users\user1\Ukagaka\ssp\ghost\myghost\shell\master </div> <div>と入力します。<br> <div class="my-5 flex flex-col justify-center items-center"><a href="/contents/adventcalendar_20241207/cmd_cd.png"><img src="/contents/adventcalendar_20241207/cmd_cd.png" alt="cdコマンドで目的のディレクトリ(フォルダ)へ移動"></a><p>cdコマンドで目的のディレクトリ(フォルダ)へ移動</p></div></div> <p class="article-p">5. コマンドプロンプトに以下のコマンドを入力します。</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">.\surfaces-mixer.exe -i [yamlファイル名] </div> <p class="article-p">例えば、yamlファイル名が<code>surfaces.yaml</code>の場合は、</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">.\surfaces-mixer.exe -i surfaces.yaml </div> <div>と入力します。 <div class="my-5 flex flex-col justify-center items-center"><a href="/contents/adventcalendar_20241207/cmd_surfaces-mixer.png"><img src="/contents/adventcalendar_20241207/cmd_surfaces-mixer.png" alt="surfaces-mixerの実行"></a><p>surfaces-mixerの実行</p></div><br> 成功していれば、スクリーンショットのように「saved to ~」と表示され、surfaces.txtが生成されます。</div> <h2 class="article-h2" id="まとめ">まとめ</h2> <p class="article-p">福笑い式サーフェス定義はパーツ分けがされた画像群を用いてシェルを作成する際に便利な手法です。<br> 具体的には、<a href="https://khmix.sakura.ne.jp/download.shtml" class="article-a">キャラクターなんとか機</a>によって生成されたパーツからシェルを作る場合に効果を発揮します。<br> もちろん自作シェルの場合でも、パーツを分けたものを福笑い式にサーフェス定義することで、網羅的に表情を作成することができます。</p> <p class="article-p">ぜひ紹介させていただいたツール、あるいはsurfaces-mixerを使って、福笑い式のsurfaces.txtを生成してみてください。<br> ここまで読んでいただき、ありがとうございました。</p> <![CDATA[Skeb用資料]]> https://apxxxxxxe.dev/entries/haine_references https://apxxxxxxe.dev/entries/haine_references Sun, 20 Oct 2024 00:00:00 GMT <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/haine_references/20240822_cry.png"><img src="/contents/haine_references/20240822_cry.png" alt="最新の絵です" class="w-[80%] mx-auto"></a><p>最新の絵です</p></div></div> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/haine_references/haine.png"><img src="/contents/haine_references/haine.png" alt="" class="w-[80%] mx-auto"></a><p></p></div></div> <![CDATA[2024/8/8 にweb拍手をくださった方へ]]> https://apxxxxxxe.dev/entries/webclap_response_20240808 https://apxxxxxxe.dev/entries/webclap_response_20240808 Sat, 10 Aug 2024 00:00:00 GMT <p class="article-p">こちらこそハイネを気にかけてくださってありがとうございます~~~</p> <p class="article-p">2019年代に一度公開したときは完成度の低さに自分で恥ずかしくなっちゃって公開を停止していました</p> <p class="article-p">現在も正式に公開するのはまだ先ですが、(おそらくご存じの通り)GitHubから開発中のデータをダウンロードできるようになっています</p> <p class="article-p">すでに当時から大幅な変更が入っており、今後も設定変更・仕様変更などがあることは否めませんがゆるくお付き合いいただければと思います</p> <![CDATA[サイト内部の更新]]> https://apxxxxxxe.dev/blog https://apxxxxxxe.dev/entries/static-update Wed, 07 Aug 2024 00:00:00 GMT <p class="article-p">以前まではSSRを用いた動的サイトとして本サイトをデプロイしていましたが、<br> Next.jsのstatic exportを使ってサイトを静的に生成する形に更新しました。ちょっと早くなったかも</p> <p class="article-p">ところで、この文のような記事にするまでもない雑記は一覧に全文を表示する形式にしました。<br> 記事らしい記事の更新もできていないので、今後はマイクロブログっぽい使い方もしたりしつつなんとかこのスペースを活用していきたいですね</p> <![CDATA[gitで過去のコミットを編集したり分割したりする方法]]> https://apxxxxxxe.dev/entries/git-split https://apxxxxxxe.dev/entries/git-split Wed, 26 Apr 2023 00:00:00 GMT <h2 class="article-h2" id="tldl">TL;DL</h2> <p class="article-p">intaractive rebaseを使いましょう。</p> <h2 class="article-h2" id="はじめに">はじめに</h2> <p class="article-p">gitでコミット分割の方法を調べたのでメモしておきます。</p> <h2 class="article-h2" id="手順">手順</h2> <h3 class="article-h3" id="git-logして該当コミットとその1つ前のコミットのshaを確認">git logして該当コミット(とその1つ前のコミット)のSHAを確認</h3> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">git log --oneline 83f52e6 (HEAD -> main) hoge f1cae65 fuga b8929a2 piyo 0fd0f4e hoge 945b51e fuga 18f60e3 piyo d6b8ce8 poyo </div> <p class="article-p">下から2番目の18f60e3のコミットを分割したいとします。<br> このとき、18f60e3,d6b8ce8の2コミットをのちに入力できるように記憶しておきます。</p> <h3 class="article-h3" id="git-rebaseで該当コミットを編集可能な状態にする">git rebaseで該当コミットを編集可能な状態にする</h3> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">git rebase -i d6b8ce8 </div> <p class="article-p">とするとエディタが開き、そこには</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">pick 18f60e3 piyo pick 945b51e fuga pick 0fd0f4e hoge pick b8929a2 piyo pick f1cae65 fuga pick 83f52e6 hoge # Rebase d6b8ce8..83f52e6 onto d6b8ce8 (6 commands) (以下省略) </div> <p class="article-p">のような記述がなされています。<br> 今回いじりたいのは18f60e3なので、</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">edit 18f60e3 piyo pick 945b51e fuga pick 0fd0f4e hoge pick b8929a2 piyo pick f1cae65 fuga pick 83f52e6 hoge # Rebase d6b8ce8..83f52e6 onto d6b8ce8 (6 commands) (以下省略) </div> <p class="article-p">と文頭のpickをeditに変え、保存して閉じます。</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">Stopped at 18f60e3... piyo You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue </div> <p class="article-p">と出力されれば成功。18f60e3が編集可能となりました。</p> <h3 class="article-h3" id="git-resetで変更をワーキングディレクトリに戻す">git resetで変更をワーキングディレクトリに戻す</h3> <p class="article-p">現在、18f60e3での変更はヒストリー上にあるので、コミットし直すためにワーキングディレクトリまで引き戻します。</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">git reset HEAD~ </div> <h3 class="article-h3" id="変更をコミット">変更をコミット</h3> <p class="article-p">git add, git commitで変更をコミットします。<br> ここでコミットを小分けにすることで、当初の目的であるコミット18f60e3の分割が叶います。</p> <h3 class="article-h3" id="git-rebase---continueでheadにチェックアウトして終了">git rebase --continueでHEADにチェックアウトして終了</h3> <p class="article-p">コミットが完了したら、rebaseで編集モードを終了し、HEADへチェックアウトします。</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">git rebase --continue Successfully rebased and updated refs/heads/main. </div> <p class="article-p">過去のコミットを分割しなおすことができました。</p> <h2 class="article-h2" id="参考">参考</h2> <ul class="list-disc ml-7 mb-3"> <li><a href="https://git-scm.com/book/en/v2/Git-Branching-Rebasing" class="article-a">3.6 Git Branching - Rebasing</a></li> <li><a href="https://ken-c-lo.hatenadiary.org/entry/20130706/1373092204?utm_source=pocket_saves" class="article-a">Gitで数個前のcommitを遡って分割する</a></li> <li><a href="https://qiita.com/phanect/items/4353854cb0d962916acf?utm_source=pocket_saves" class="article-a">Git でブランチを上書きする</a></li> </ul> <![CDATA[直近のゴーストをリスト表示するプラグインを作った]]> https://apxxxxxxe.dev/entries/recentghosts-intro https://apxxxxxxe.dev/entries/recentghosts-intro Sun, 24 Jul 2022 00:00:00 GMT <h2 class="article-h2" id="要旨">要旨</h2> <p class="article-p">いっぱいゴーストがいるのでより便利な方法で管理したいと思いました。<br> 思いつく方法は</p> <ol> <li>お気に入りのゴーストとその他のゴーストを別管理</li> <li>起動したいゴーストを検索する</li> <li>最近起動したゴーストをリスト表示</li> </ol> <p class="article-p">3.のみ既存の機能になかったので<strong>プラグインを作りました</strong>。</p> <h2 class="article-h2" id="きっかけ">きっかけ</h2> <p class="article-p">私の環境にはゴーストが700名ほどインストールされています。<br> どのゴーストさんも満遍なく起動したいとはいえ、このままではあまりにも無秩序です。<br> ある程度優先順位をつけ、探しやすくする必要があると考えました。</p> <h2 class="article-h2" id="アプローチ">アプローチ</h2> <h3 class="article-h3" id="1-お気に入りのゴーストとその他のゴーストを分ける">1. お気に入りのゴーストとその他のゴーストを分ける</h3> <p class="article-p">最初に思いつく方法でした。お気に入りは特別な枠で管理したいものです。<br> SSPでは、ゴーストのインストールディレクトリを複数設定することが可能です。(バルーンなども同様)<br> この機能を使うことで、お気に入り/それ以外のみならず、イベント別・ジャンル別など様々な分類が可能になります。</p> <h3 class="article-h3" id="2-起動したいゴーストを検索する">2. 起動したいゴーストを検索する</h3> <p class="article-p">ユーザの需要をより即時的かつ直感的に叶える方法です。<br> これもSSPに該当する機能が搭載されています。<br> Ctrl+Eで開くエクスプローラーでCtrl+Fを押すと開く検索窓に単語を入力することで、ゴースト名はもちろん作者名、キャラクター名までもを対象にゴーストの検索が可能です。<br> とてもべんり</p> <h3 class="article-h3" id="3-最近起動したゴーストのリストを作る">3. 最近起動したゴーストのリストを作る</h3> <p class="article-p"><a href="https://ja.wikipedia.org/wiki/%E5%8F%82%E7%85%A7%E3%81%AE%E5%B1%80%E6%89%80%E6%80%A7" class="article-a">時間的局所性</a>という概念があります。<br> ある時点で参照されたデータは近い未来に再度参照されることが多いというコンピュータ科学での考え方ですが、これは一般にも同じことが言えると思います。実際、よくテキストエディタに搭載されている「最近使ったファイル」には類似の思考が見えます。<br> ぜひこれをSSPでも使いたいと思ったのですが、SSPに最近起動したゴーストを表示する機能はありませんでした。(私が気付いてないだけであれば教えていただけると幸いです)<br> ということで<strong>最近起動したゴーストをリスト表示するプラグインを作りました。</strong><br> <div class="my-5 p-3 text-xs border-solid border border-gray/[0.6] rounded-lg"><a href="https://github.com/apxxxxxxe/recentghosts" class="flex flex-row"><img class="ogp-image object-contain w-1/4 mr-3 pr-3 border-solid border-r border-black" src="https://opengraph.githubassets.com/91f4c81932187158a69928a079fae756e8d5e72c195fc0a0798f0a50c2dbd84e/apxxxxxxe/recentghosts" alt="GitHub - apxxxxxxe/recentghosts: 伺か プラグイン"><div class="flex flex-col justify-center"><h1 class="font-bold" id="github---apxxxxxxerecentghosts-伺か-プラグイン">GitHub - apxxxxxxe/recentghosts: 伺か プラグイン</h1><p class="text-darkgray">伺か プラグイン. Contribute to apxxxxxxe/recentghosts development by creating an account on GitHub.</p></div></a></div></p> <h2 class="article-h2" id="直近のゴーストの簡単な説明">「直近のゴースト」の簡単な説明</h2> <div><div class="my-5 flex flex-col justify-center items-center"><a href="https://raw.githubusercontent.com/apxxxxxxe/recentghosts/images/image.png"><img src="https://raw.githubusercontent.com/apxxxxxxe/recentghosts/images/image.png" alt="preview"></a><p>preview</p></div></div> <ul class="list-disc ml-7 mb-3"> <li>本プラグインを有効にしておくと、起動したゴーストが自動的に20件まで記録されます。</li> <li>メニューから本プラグインを実行するとリストが表示されます。</li> <li>リストには各ゴーストの切り替え・呼び出し機能があります。</li> </ul> <p class="article-p">ぜひおためしください。</p> <![CDATA[ゴースト作成のTIPS]]> https://apxxxxxxe.dev/entries/tips https://apxxxxxxe.dev/entries/tips Wed, 29 Jun 2022 00:00:00 GMT <h2 class="article-h2" id="で口パクアニメーションしないようにしたい">「......」で口パクアニメーションしないようにしたい</h2> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/tips/kuchipaku.gif"><img src="/contents/tips/kuchipaku.gif" alt="……で口パクを止めている"></a><p>……で口パクを止めている</p></div></div> <h3 class="article-h3" id="シェルの口パク">シェルの口パク</h3> <p class="article-p"><a href="http://ssp.shillest.net/ukadoc/manual/descript_shell_surfaces.html#introduction_animationinterval" class="article-a">surfaces.txtのアニメーションインターバル定義</a>には、トークに合わせてanimationを動かすオプションのtalkがあります。 これを使うとトーク時に口を動かす表現が実現できます。ただし、これは「……」のようなセリフ的には無言の部分でも口が動いてしまいます。解決策を考えましょう。</p> <h3 class="article-h3" id="解決策">解決策</h3> <ul class="list-disc ml-7 mb-3"> <li><strong>「……」をクイックセクション(\_q)で囲む。</strong></li> </ul> <p class="article-p">クイックセクションには以下の特徴があります。</p> <ol> <li>クイックセクション内の文章は一瞬で表示される</li> <li>ただしウェイトは有効である</li> </ol> <p class="article-p">クイックセクション内の文章は一瞬で表示されます。一瞬で表示されるということは、当然口パクの対象外になります。<br> いっぽうで、クイックセクション内でもウェイト(\w9や\_w[500]など)は依然として有効です。</p> <p class="article-p">すなわち、以下のようにさくらスクリプトを記述することで、口パクする/しないを指定することができます。</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">// before ……あいうえお // after \_q…\_w[500]…\_w[500]\_qあいうえお </div> <p class="article-p">その都度ウェイトを仕込むのは大変なので、里々ならreplace.txt、YAYAならOnTranslateに置換処理を記述するとよいでしょう。</p> <h2 class="article-h2" id="トーク文章の表示速度を辞書側で調整したい">トーク文章の表示速度を辞書側で調整したい</h2> <p class="article-p">SSPのデフォルト表示速度は50ms/文字(ユーザ側で調整可能)ですが、<br> 早口、ゆったりの表現や長い文章をゆっくり表示したいなど、ゴースト側から表示速度を変更したいことがしばしばあります。</p> <h3 class="article-h3" id="実現するための考え方">実現するための考え方</h3> <ul class="list-disc ml-7 mb-3"> <li>遅らせたい場合、1文字ごとにウェイト(\_w[25]など)を入れて表示速度を調整すればよい</li> <li>早めたい場合は上記に加えてさくらスクリプト\_qでデフォルトのウェイトを消す必要がある</li> </ul> <p class="article-p">考え方自体は単純ですが、問題はどうやってウェイトを挿入するかです。 機械的に1文字ごとにウェイトを入れようとすると、さくらスクリプトの記述が壊されてしまいます。</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">\_q -> \\_w[25]_\_w[25]q\_w[25] (さくらスクリプトが機能しない) </div> <h3 class="article-h3" id="具体的な方法yaya">具体的な方法(YAYA)</h3> <p class="article-p">さくらスクリプトをRE_REPLACE関数で一時的に制御文字に置き換え、ウェイト挿入後に再度置換することで解決します。</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">AddWait { // _argv[0]: 対象文字列 // _argv[1]: ウェイト[ms] // メッセージスピードの標準は50ms これに加算すると考えて調整 _text = _argv[0] _wait = '\_w[' + _argv[1] + ']' // 適当な制御文字 YAYAは0x0を扱えないので0x1で _tagmark = CHR(0x1) // さくらスクリプトは_tagmarkに置き換えて退避 //(さくらスクリプト中にウェイト記述が挟まって破綻するのを防ぐ) // 置換したさくらスクリプトは配列に保持しておいて適宜取り出す _t = RE_REPLACE(_text, '\\_{0,2}[a-zA-Z0-9*!&#x26;\-+](\d|\[("([^"]|\\")+?"|([^\]]|\\\])+?)+?\])?', _tagmark) _tags = RE_GETSTR _tagcount = 0 _textlen = STRLEN(_argv[0]) _result = "" for _i=0; _i&#x3C;_textlen; _i++ { _c = SUBSTR(_t, _i, 1) if _c == _tagmark { _result += _tags[_tagcount] _tagcount += 1 } else { _result += _c + _wait // #1 } } _result } </div> <p class="article-p">OnTranslateInternal関数にこれを仕込むことでウェイトの調整がトーク全体に適用されます。</p> <h2 class="article-h2" id="連続して同じトークが来るのを避ける">連続して同じトークが来るのを避ける</h2> <p class="article-p">たくさんのトーク群からどのようにトークを選び、喋らせるかは、ゴーストの実在感・トークの没入感に関わります。<br> トーク選択の基本処理はSHIORIがよしなにやってくれていますが、デベロッパー側からある程度ルールを設定することも可能です。</p> <h3 class="article-h3" id="前提">前提</h3> <p class="article-p">トーク被りを避け、出来るだけまんべんなくトークが選ばれるようにしたい。</p> <h4 class="article-h4" id="里々">里々</h4> <p class="article-p">『$文「○」の重複回避』『$単語群「○」の重複回避』を利用してトーク被りを回避できます。<br> 詳しくは<a href="http://soliton.sub.jp/satori/index.php?%E7%89%B9%E6%AE%8A%E5%A4%89%E6%95%B0#o772b719" class="article-a">こちら</a>を参照</p> <h4 class="article-h4" id="yaya">YAYA</h4> <p class="article-p">関数のオプション「nooverlap」を指定することでトーク被りを回避できます。<br> 詳しくは<a href="https://emily.shillest.net/ayaya/?%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB/%E6%96%87%E6%B3%95/2.%E9%96%A2%E6%95%B0#vce5bec3" class="article-a">こちら</a>を参照</p> <h4 class="article-h4" id="提案ルーレット選択アルゴリズムを実装するyaya">提案:ルーレット選択アルゴリズムを実装する(YAYA)</h4> <p class="article-p">上記の方法では、直前のトークとの被りのみ考慮されます。つまり極端に言えば、トークがA,B,C,...と用意されているのに、</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">トークA -> トークB -> トークA </div> <p class="article-p">のような順番は依然としてありえます。<br> このトークさっき聞いたな?となるのはなるべく避けるべきです。<br> そこで提案したいのが<a href="https://ja.wikipedia.org/wiki/%E9%81%BA%E4%BC%9D%E7%9A%84%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0#:~:text=%E3%82%82%E3%81%AE%E3%81%8C%E3%81%82%E3%82%8B%E3%80%82-,%E3%83%AB%E3%83%BC%E3%83%AC%E3%83%83%E3%83%88%E9%81%B8%E6%8A%9E,-%5B%E7%B7%A8%E9%9B%86%5D" class="article-a">ルーレット選択アルゴリズム</a>です。<br> 実装方法として、</p> <ul class="list-disc ml-7 mb-3"> <li>各トークに重みを付け、それを考慮したランダム選択を行います。</li> <li>選択のたびに次の処理を行います。 <ul class="list-disc ml-7 mb-3"> <li>選ばれたトークは重みを1に減らす</li> <li>選ばれなかったトークは重みを一定数増やす</li> </ul> </li> </ul> <p class="article-p">これにより、トークが選ばれた直後は被る確率が最小になり、その後少しずつ確率が増えることで前述の問題を軽減し、より自然かつ満遍ないトークが可能になります。</p> <h5 class="article-h5" id="実装例">実装例</h5> <p class="article-p">拙作ゴースト「<a href="https://github.com/apxxxxxxe/Haine/blob/main/ghost/master/yaya_rouletteselection.dic" class="article-a">Crave The Grave</a>」で実装されています。</p> <h2 class="article-h2" id="トークを日本語的にいい感じのところで自動改行したい">トークを日本語的にいい感じのところで自動改行したい</h2> <h3 class="article-h3" id="トーク毎に改行にこだわるのは面倒">トーク毎に改行にこだわるのは面倒</h3> <p class="article-p">ゴーストのトークを書く際、通常の文章と異なる最も大きな点は改行だと思います。<br> 筆者は文章の中途半端なところで改行が挟まると読みづらいため、読みやすい部分で改行を入れるのですが、 一般的なブログサイトは1行60文字程度であるのに対して、伺かの標準バルーンは24文字(全角、SSPデフォルト+の場合)であり、トークを書いていると改行が頻繁に来るなと感じています。 そこで見栄えの良い改行を自動化し、デベロッパーがトークの内容に専念できるようにするにはどうすればよいかを考えました。</p> <h3 class="article-h3" id="文節を機械的に見分けて処理する">文節を機械的に見分けて処理する</h3> <p class="article-p">見栄えの良い文章とは、すなわち意味の区切り=文節で改行が入っている文章です。 例えば、</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">吾輩は猫である。名前はまだない。  どこで生れたか頓と見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。 </div> <p class="article-p">という文章をバルーンで表示する場合、そのまま書き込むとこうなります。</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">吾輩は猫である。名前はまだない。  どこで生れたか頓と見当がつかぬ。何でも薄暗いじ めじめした所でニャーニャー泣いていた事だけは記憶 している。吾輩はここで始めて人間というものを見た。 </div> <p class="article-p">24文字の時点で機械的に折り返されています。ぶつ切りな印象です。<br> つぎに、以下で紹介する自動改行関数を通した場合こうなります。</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">吾輩は猫である。名前はまだない。  どこで生れたか頓と見当がつかぬ。何でも 薄暗いじめじめした所でニャーニャー泣いて いた事だけは記憶している。吾輩はここで始めて 人間というものを見た。 </div> <p class="article-p">文節で改行しています。<br> 従来より自然な印象が出ている気がします。</p> <h3 class="article-h3" id="くわしい説明yaya">くわしい説明(YAYA)</h3> <p class="article-p">形態素解析ソフトMeCabを実装したSAORI(<a href="https://github.com/ponapalt/csaori" class="article-a">kisaragi.dll</a>)で文章を単語に分解し、各品詞から文節を割り出すことが可能です。 これを利用して、文章を文節ごとに改行する関数を作ります。</p> <ul class="list-disc ml-7 mb-3"> <li>editing</li> </ul> <h3 class="article-h3" id="実装例-1">実装例</h3> <p class="article-p">拙作ゴースト「<a href="https://github.com/apxxxxxxe/Haine/blob/main/ghost/master/yaya_insertlinefeed.dic" class="article-a">Crave The Grave</a>」で実装されています。</p> <h2 class="article-h2" id="栞を最新版にしよう">栞を最新版にしよう</h2> <h3 class="article-h3" id="よい">よい</h3> <ul class="list-disc ml-7 mb-3"> <li>新機能が使える</li> <li>バグが修正され、不自由/危険が解消される</li> <li>最新版をつかっているという安心感</li> </ul> <h3 class="article-h3" id="わるい">わるい</h3> <ul class="list-disc ml-7 mb-3"> <li>更新の手間(複数ゴースト等を抱えていると特に)</li> </ul> <h3 class="article-h3" id="解決策-1">解決策</h3> <ul class="list-disc ml-7 mb-3"> <li><a href="https://github.com/apxxxxxxe/shioriupdater" class="article-a">複数の栞ファイルを一括で更新するツール</a>を使う</li> </ul> <p class="article-p">ただし現在の機能ではdllファイルを差し替えるのみなので、更新に伴って必要となる作業がある場合は手作業で行う必要がある。</p> <h2 class="article-h2" id="ある着せ替えパーツの表示順をサーフェスによって変えたい">ある着せ替えパーツの表示順をサーフェスによって変えたい</h2> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/tips/sode_sample.png"><img src="/contents/tips/sode_sample.png" alt="こういうサーフェスがある。"></a><p>こういうサーフェスがある。</p></div> <div class="my-5 flex flex-col justify-center items-center"><a href="/contents/tips/sode_nashi.png"><img src="/contents/tips/sode_nashi.png" alt="袖を着せ替えパーツとしている。"></a><p>袖を着せ替えパーツとしている。</p></div> <div class="my-5 flex flex-col justify-center items-center"><a href="/contents/tips/sode_nashi_ushiro.png"><img src="/contents/tips/sode_nashi_ushiro.png" alt="腕を後ろで組むサーフェス(表示の優先度が胴>腕)を作りたいけれど、"></a><p>腕を後ろで組むサーフェス(表示の優先度が胴>腕)を作りたいけれど、</p></div> <div class="my-5 flex flex-col justify-center items-center"><a href="/contents/tips/sode_ushiro_failure.png"><img src="/contents/tips/sode_ushiro_failure.png" alt="同一のanimation番号では胴<腕のままなので、後ろに表示されない。"></a><p>同一のanimation番号では胴&#x3C;腕のままなので、後ろに表示されない。</p></div></div> <p class="article-p">だからといって後手のみanimation番号を変えただけだと、別の着せ替えパーツとして認識されてしまう。</p> <h4 class="article-h4" id="解決法">解決法</h4> <p class="article-p"><strong>addid</strong>(<a href="http://ssp.shillest.net/ukadoc/manual/descript_shell.html#sakura.bindgroup*.addid,ID" class="article-a">解説</a>)を使うと複数のanimationをまとめて1つの着せ替えパーツとして定義できる。<br> 上述のように後手を別アニメーションとして定義したあと、shellのdescript.txtに以下のように記述する。</p> <div class="font-sans text-sm mb-4 mx-4 border-solid border border-gray/[0.6] shadow">sakura.bindoption.group,袖 sakura.bindgroup505318.name,袖,長白 sakura.bindgroup505318.addid,500168 // 注 // animation505318: 前手用の袖アニメーション // animation500168: 後手用の袖アニメーション </div> <div><div class="my-5 flex flex-col justify-center items-center"><a href="/contents/tips/sode_ushiro_success.png"><img src="/contents/tips/sode_ushiro_success.png" alt="やりたい動作が実現できた。"></a><p>やりたい動作が実現できた。</p></div></div>