shingoushori's dialy

音信号処理を専ら研究していた元博士後期課程の学生によるメモ

ピカブイ/ポケモンGO、xR

バーチャルであっても、いやバーチャル故に、肉体感覚
どうしようもなく、生身の身体的にもキャラクターにもバイタリティ的にも
肉体的なそれらでコントロール、それらがコンテンツかされている感じが
ヒシヒシとする

ポケモンレッツゴー ピカブイ で辛いのが、
ポケモンGOスタイルのボールを投げるモーションだ
どうしようもなくゲーム的運動神経が悪い私には、どうしようもなく苦しい
大好きだったはずの単純なレベル上げができない、どうしようもない絶望感
この肉体から解き放たれたいのに 忌々しい
運動神経が悪いのに絡みついた暗黒の私の小学生時代が、
夏草が草刈機で焦がされたような胃酸の味わいが、はらわたから煮えくり返ってくる

xR、VRであってもそれは変わらない

例えば、現実世界で出不精な私は、htc viveを購入して2週間目に入ろうとしても、
まだVRChatに出向けていない
パソコンのスペックから部屋のスペース不足、
如何しようも無い現実の人間関係の都合まで
Virtual であるとしたって所詮は現実の内側なんだ、陸続きでしかない

その怪しい敷居に、他の現実での旧来型の敷居と同様かそれ以上に苦しむものとして、
どうその苦しみを如何としていくのか
というあたりに、後発というどうしようもない身の程ゆえの弁えと度胸が問われるのだろう

Simutransのセーブデータ (非圧縮xml のみ) を読み込み->書き出し ~ 「passenger_factor」を設定

[趣旨]
Simutransのセーブデータ弄りであるとか、もちろん信号処理のなにやらづくりに向けて、デスクトップからファイルをドラッグする処理 〜 を準備します。

 

今回は、Simutransのセーブデータ (非圧縮xml のみ) をパースしてエディットして、また書き出しです。

ちょっとしたエディットとして、「passenger_factor」を設定します。

↓ Simutransのセーブデータ (非圧縮xml のみ) をドラッグアンドドロップすると、「ダウンロード」と書かれたリンクが追加されます。"output.sve"としてダウンロードできるはず。開発環境は、macchrome

Drop files here
passenger_factor :

                   

 

 

 

 

[参考文献]

クライアントサイドJavaScriptでXML文書のDOMをパースする

XML Parser

Blob - Web API インターフェイス | MDN

HTML非表示・使用不可メモ(Hishidama's disabled/visibility/display Memo)

JZZ.js

MIDIファイルをいじるWebコンテンツ on はてなブログ 〜 の検討
今回は、jazz-softさん作の、 JZZ.jsでやってみました

Drop files here

                                                                   

 

いろいろと多機能そう。
とりあえず、MIDIファイルのblobでの読み込み/書き出しはそれなりに簡単にできた。
ノートの追加がtickベースで、on/offそれぞれでも、長さ指定でもできそう。

MidiPlayerJS + MidiWriterJS

MIDIファイルをいじるWebコンテンツ on はてなブログ 〜 の検討
今回は、grimmdude (Garrett Grimm) さん作の、 MidiPlayerJS MidiWriterJS
でやってみました

Drop files here

                                                                     

MidiWriterJSの機能が最小限しかできていなさそう
同じ方が作ったものながら、
MidiPlayerJSとMidiWriterJSとではインターフェースが似て非なる
特に苦しいのが、各トラックにて複数ノートを同一時間に配置できるのが、
On/Offが全く同じタイミングの時のみ

<MIDIのライブラリのトレンド>
どうにも、MIDIファイルのblobでの読み込み/書き出しをやれる
JavaScriptのライブラリが意外にも全然見つかりません
見つかるのは次のようなものばかり
・楽器として演奏するためのMIDI信号いじり
・Playerとして再生する
・とりあえず何か書き出す

<CDN : Content Delivery Network>
はてなブログのようなところで
JavaScriptのライブラリを参照するにあたって壁になるのが、ファイル構成
画像しか置けない ましてやNode.jsのモジュールなんぞは置けない
ありがたいのが、CDN
CDNに対応できてるライブラリであれば、<script src="hoge">  で参照できる
できるライブラリを探すのにも困るわけだが ...
今回のライブラリで検討したのは、とりあえずCDNで参照できたから
そこが全てであったりする

midi-player-js CDN by jsDelivr - A CDN for npm and GitHub
midi-writer-js CDN by jsDelivr - A CDN for npm and GitHub

できそうでもやってみるとできないことばかり ...

 

mac で PHP を localhost でやり始めるにあたってのメモ

2018 -> 2019 の年越しは、PHP やりはじめとなりました。

で、はてなブログに埋め込みたいのだが、
.php ファイルとして別立てにする必要があるらしく、
それがはてなブログ単体ではできない。腰砕けである。

が、とりあえずローカルでやってみる。
すると、もっと腰砕けなことに。

Hello World が出ない。

PHP本家の最初のチュートリアルから確認。
PHP: PHP を使用する初めてのページ - Manual

<?php echo '<p>Hello World</p>'; ?>
これが、出ない。なんかコメントアウトされる。

↓ 調べてみたところ、
↓ /etc/apache2/ なんてところの httpd.conf なる、
↓ 書き込み制限がついてるようなファイルを vim で弄る羽目に

MacでPHPを有効にする方法 - Qiita

MacでApacheの設定ファイルを編集する - Qiita

Simutrans 2018年の取り組み - 本体改造 編

本記事は、Simutrans Advent Calendar 2018 〜 12/20 バグらせて楽しいSimutrans〜増解結、そしてトマソン です 

Simutrans っていう、最高なフリーでオープンソースな交通シミュレーション
それについての、2018年の私のたぶん独自な取り組みについて書きます
Part 3 として、Simutrans本体改造 増解結 + トマソン についてです

[増解結]
増解結とは ...
例えば、鉄道で hoge 駅から foo 駅まで走るとして、
fuga 駅で後ろ2両が切り離されて bar 駅まで走る別の編成になったりする運用のことです。
これは例です。この但し書きの念押しについては、後述。

増解結は2018/12現在、まだ公開できるところまでできていません。
↓ 私の開発環境での現状は、こんな感じです なお、BGMはトマソンです 詳しくは、後述。


本記事の趣旨は増解結にあるのではなく、本体改造に向けての考え方の公開です。
およそ、ひめし (@himeshi_hob) | Twitter さん著のシムトラ本体改造本に、
1人の本体改造をやる者として例示を添えるようなものです。
シムトラ本体改造本を是非読んでください。
本体改造しない方も、本体の機能に満足していない方は、是非読んでください。
きっと、提案内容の実現可能性が上がります。


なお、2018年に実装された本体改造 〜 すでに使える機能については、
ひめしさんの 12/24 分のアドベントカレンダーで紹介されそうです。
あるいは、ひめしさんのシムトラ学会の発表でまとめられています。
私がやったものも色々あります。可愛がっていただけると嬉しいです。

1件、裏技を紹介します。公共駅民営化を使うと、プレイヤー間で資金を移動できます。

 

[まとめ]
・増解結は未完成
・ひめしさんの本体改造本を読もう!
・2018年もいろいろ本体改造しました OTRPに入れてもらえたので、是非使ってください

==============================================================

さあ、以下は本体改造制作途中の混沌です。

[増解結]
さて、増解結。具体的に機能を列挙するとなると、厄介なんです。
要は、"編成 (convoi) に属する何かの物 (object / class) が、増結されたり解結される" それだけのことしか説明していません。それだけの条件しか絞っていません。
これだと抽象的で伝わらないかもしれません。抽象、複数の具体的なケースをまとめているからです。具体化しましょう。

・LA路線のCA編成はNX駅でLB路線のCB編成を分離
・LA路線のCA編成はNX駅で機関車CB編成を増結 NY駅で分離 機関車CB編成はNX駅隣接のDZ車庫所属
・LA路線のCA編成はNX駅から別プレイヤーのLB路線のCB編成として運用
・LA路線のCA編成はNX駅からNB駅まで船舶CB編成にてフェリー輸送
・LA路線のCA編成はNX駅からバス路線CB編成・CC編成としてそれぞれ運行

なぜ抽象化する必要があるか。実装に必要だからです。
複数の具体的なケースを両立できる抽象的な概念が具体化できて、ようやく実装ができます。
しかし、実装できるのは具体的なケースごとになります。
したがって、途中段階での評価は散々なものになることでしょう。
それでも、斬って棄てられるのを覚悟して絞ります。1つずつ積み上げていくしかないのですから。

[積み上げ 〜 バグらせて楽しいSimutrans]
本体改造をやる最大の特権として、実装途中のバグ動作が楽しめることにあると思います。
自分が欲しい機能が作れるかというと、そうでもないんですよ。使ってもらってなんぼなので。

以下に、Twitterにあげた実装の途中経過を並べます。こんな感じの順番で積み上げて行きます。

なお、バグ動作も2種類に大別できます。楽しめるものと楽しめないものです。
楽しめないものは、異常終了です。急に画面が消えます。
変な動きをしている分には眺めていられます。消えてしまうのは、うろたえ、憔悴します。
異常終了の原因は、大抵メモリのアクセス違反です。
増解結は字面の通り、メモリも増やしたり解放したりします。異常終了の嵐です。
ですので、眺めていられる安定した状態のバグ動作までたどり着くと、その日はよく眠れます。

[必要な道具・取らせたい状態]
増解結の実現に必要な道具はなんでしょうか。
その道具はどんな機能 (function) が果たせればいいのでしょうか。
その道具の機能で、何かの物をどういう状態からどういう状態に変えれば良いのでしょうか。
これらが揃って、ようやく実装です。... いや実際には、さらにテストデータが必要です。

現時点で必要と考えている道具・状態を列挙します。
・任意地点での編成の追加・削除 〜 車庫 (depot) でしかできない
・駅停止状態の拡張細分化:増解結前客扱い, 増結対象待ち状態, 増解結中, 増解結後客扱い ...
・任意地点を目的地とする 〜 自動的にホーム先端になる -> 本体改造 advance_to_end で実現
・増解結地点と車庫のペアリング
・増解結情報の格納場所・編集UI

つまり、私の増解結の現状とは、上2つの実現性検証に成功した状況 ということなのです。

[本体改造を取り巻く状況]
誰かに向けての本体改造をするには、2018年12月現況、明るくない状況のように思います。
・何をベースに改造するか : 本家 or OTRP
・どういう形で届けるか : 本家統合 or OTRP統合 ... or 各々でマージ 
・何を作ればいいのか : 複数の人が声をあげるものの、同じものを求めているか不明
・どこまで作ればいいのか : NetSimutrans 対応 ? OTRP 対応 ? 新規アドオン ? 本家統合目指し品質 ?
こういう土台が混沌としています。
2018年、日本のシムトランサーは 本家からOTRP に移行した人が多かったのではないでしょうか。
その一方、ソースコードからビルドする人は、全然増えていなかったのではないでしょうか。
Twitterを眺めている分には、私にはそのように見えます。
ですから、日本のシムトランサー向けに本体改造するなら、OTRPベースでOTRP統合をお願いする。
実質的にこれしかない道です。
これでは、OTRPのオーナー ひめし (@himeshi_hob) | Twitter さんに負担が集中します。
本家からみて異質で多様で日本のシムトランサーの要求を実現する、
それも持続的にメンテしていくとなれば、
せめてソースコードからビルドする人だけでも増えた方が良いと思います。

もっと言えば、ソースコードからビルドできる人が増えないのであれば、
本体改造で日本のシムトランサーの要求を実現しようという人は、増えない方が良いとも言えます。
本体改造がひめしさんを通さずば渡らないのであれば、ひめしさんが全部作った方が早いからです。
本家採用の難しさ同様、ひめしさんとしてのOTRPオーナーなりプログラマーとしての主義があり、
結局のところ調整は発生します。ひょっとすると、私は本体改造しない方がいいとも思っています。
そういう点でも、ソースコードからビルドできる人が増えた方が良いと思います。

なお、本家フォーラムへの投稿については、私が特別に躊躇しているだけとも言えます。
英語が得意じゃないです。... 日本語も別に得意じゃないです。
なので、GitHubにあげたらご自身でサクッと載せちゃえるよう方が増えると助かります。

[おまけ : Mac での本体改造]
Visual Studio Code を使い始めました。なかなか快適です。
プロジェクト単位での管理なので、
開くタブを記憶できるとか、ファイルを跨いで検索できるとか、期待した効果が得られました。

 

[おまけ : トマソン] Simutrans本体改造の方法として、BGM提供という手もあります
私も1曲作りました Where-Thomassons-Lie です

No49に向けて 7拍子 x 7小節を1セクションとして、
1セクションごとに旋律を担当する楽器が増え、7回繰り返しで終わる ...
無調音楽な雰囲気としてカオスな乱開発、赤棒が立ち並んだ混沌を表現してみました
BPMも49です

が、本家フォーラムにて「Simutransの雰囲気に合わないね」となりまして
music.tab ではコメントアウトされ、ついでにNo50にされてしまいました ...
... そんなこともあり、懲りました
本家への提出すらも諦めたのがさらに2曲あったりします


[最後に]
私の最大の期待は、シムトラ乱開発動画が増えることにあります。
増えるといいなぁ ...

Simutrans 2018年の取り組み - セーブデータいじりWebアプリ 編

本記事は、Simutrans Advent Calendar 2018 〜 12/13 セーブデータいじり1.9 です 

Simutrans っていう、最高なフリーでオープンソースな交通シミュレーション
それについての、2018年の私のたぶん独自な取り組みについて書きます
Part 2 として、セーブデータいじり1.9 ... セーブデータいじりWebアプリです
なぜ 2.0 ではなく 1.9 かというと ... 致命的に残念だからです

[bzip2.jsがあればいいのに ...]

Simutrans のセーブデータには、私が知る限り 6タイプあります
 引用 : Simutransポータル日本語版 -> 設定ファイル/simuconf.tab - Simutrans日本語化・解説
zipped ... zip圧縮保存
bzip2 ... bzip2圧縮保存。zipよりもファイルサイズが小さくなるため、ネットワークゲームに適しています。ただし圧縮解凍はzipよりも若干遅くなります。(102.2.2以降)
binary ... 圧縮せずに保存
xml ... xmlで保存(101.0以降)
xml_zipped ... xmlでzip圧縮して保存(101.0以降)
xml_bzip2 ... xmlでbzip2圧縮して保存(102.2.2以降)
内訳としては、2タイプ x 3タイプ となるわけですな

で、私が作れているセーブデータいじりWebアプリでは、非圧縮xml のみです
これがどれくらい残念なのか調べてみました ...

あれ、肝心のアンケートが見れない?!

 

ちなみに、乱開発の神 128な人 (@128Na) | Twitter 様は bzip2 だそうです ...

なぜ bzip2 ではできず、xml だけなのか
一番の間違いは、はてなブログの記事としてコンテンツを作ろうとしていること です
はてなブログの記事として書いているので、HTML5 + JavaScript でやっています
JavaScript で Webアプリ用のライブラリの公開は、最近は Node.js をはじめとした
サーバーサイド?なるものが流行っています
それだと、はてなブログの記事で呼び出せない事が多いのです 呼び出せるものもありますが
で、一番の泣き所なのが、bzip2 に圧縮できるライブラリで、呼び出せるものが見当たりません
なんてこった ...

ちなみに、問題は解凍圧縮だけでもありません
困ったことに、xmlとバイナリで変数の桁数が違うとか、スペーサーと思しき空データが違うとか
非圧縮と圧縮とでなんか違うとか、どうせバージョンで違うとか
わざわざ本体からJavaScriptに移植してメンテしようとすること自体が、間違っているだろう!
... と、思います、はい ...

とはいえ、セーブデータのタイプさえ変えてしまえばいいわけで
それはずっとである必要は全くないのです
セーブデータいじりしたい時だけでも、手軽にタイプを変換できるように ...
それはJavaScriptでフォローする必要もなく、それこそ本体改造でやれば良いのです
そのうちやります

---

以下、これまでに作ってみたやつを列挙します。

情報取得編

 ---

編集編

 ---

大規模に開発するとなると、次のような整理をやりたくなります
Simutrans は、大規模開発に耐えられるUIが間に合っていないですよね

そういうのをやるのに、本体改造でやるのが ... まぁ ... 主流だと思いますが、
私にはどうにも冗長に思えるのです UIを追加する本体改造は ...  
なので、簡単に作れて、簡単に提供できて、簡単に使えて、簡単に遺したい ...

セーブデータいじり2.0 を目指して、今後も細々と続けていきます