shingoushori's dialy

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

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 を目指して、今後も細々と続けていきます

Simutransのセーブデータ (非圧縮xml のみ) を読み込み->書き出し ~ 全駅公共駅化

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

 

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

駅のリストを取得してみます。
ついでに、全駅を公共駅にしちゃいます。

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

Drop files here

                                                                

[参考文献]

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

XML Parser

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

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

Simutransのセーブデータ (非圧縮xml のみ) のマップサイズを取得してみた

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

 

今回は、Simutransのセーブデータ (非圧縮xml のみ) からマップサイズを取得してみました。

'einstellungen_t' っていうのの、0番目と13番目がそれっぽいです。
'einstellungen' は、ドイツ語で'設定'らしいです。 それっぽいですね。
しかし、n番目っていうあたりが不安。セーブデータのバージョンによって変わりそうですね。

ドラッグアンドドロップされたSimutransのセーブデータの、 version と pak と マップサイズを表示します。

Drop files here

                                                   

なぜ version と pak も表示するかと言えば ...
↓ この記事からの拡張だからです  1つずつできることを積み上げていきます

 

 

[参考文献]

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

XML Parser

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

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

memo : SilentVoice: Unnoticeable Voice Input by Ingressive Speech

2018年10月ごろの話題 のメモ


SilentVoice: Unnoticeable Voice Input by Ingressive Speech
〜 息を吸いながら発話 小さい音量での発話でも音声認識できる

https://www.microsoft.com/en-us/research/uploads/prod/2018/10/UIST2018_SilentVoice_cameraready.pdf

 

日本語の紹介記事

音声認識のために発話方法までも発想するとは、清々しい!

 

 

Simutrans 2018年の取り組み - Squirrel AI Player 編

本記事は、Simutrans Advent Calendar 2018 〜 12/6 リス です 

Simutrans っていう、最高なフリーでオープンソースな交通シミュレーション
それについての、2018年の私のたぶん独自な取り組みについて書きます
Part 1 として、リス!

 

[ リス?!]

Simutrans には、なんと AI Player がついています。しかも2種類も。
そのうちの1種類は、Squirrel なる謎の言語で自作できるらしいです。

Squirrel は英語で リス だそうです。
そう、つまりこの記事の趣旨は、「Squirrel AI Player を作り始めてみた」 です。

Squirrel は ... なんか ... そう ... プログラミング言語です。
ボーカロイドスクリプトLua のお友達みたいです。
よくわからないけど、なんとなくニュアンスで?
C言語も覚束ないのに、必要に応じてC++JavaScriptPythonもいじる〜
のノリでできます。できました。・ワ・

 

ご安心ください。作らなくても、Simutrans に同封されています。

[使ってみる]

ここをこうして

f:id:shingoushori:20181206004359j:plain

こんな画面が出てくるので、選べば出来上がりです。
私はちょっと作ってみたので色々ありますが、本体についてくるのは "sqai" だけです。

f:id:shingoushori:20181206004403j:plain

新規マップで走らせてみると、
こんな感じで産業施設に群がった路線をいきなり作ります。
割と高確率でそのまま破産します。
乗車率100%になるまで動かないバスで詰まるバス停を幹線道路に作りまくります。
挙げ句の果てに、破産時に道路が接収されたついでに元からある幹線道路の交差部分を巻き込み削除させます。AI、まじでやばい。シンギュラリティ感じる。

f:id:shingoushori:20181206005022j:plain

そういえば、このブログ内では ↓ こんな記事をすでに書いていました。
乗車率100%になるまで動かないバス路線を作らせているのは、AI のスクリプトな訳です。だから、そういう設定を弄ってしまえばいいんです。
運行頻度が上がるので、もちろん倒産します。

 

[リファレンス]
英語です。ぶっちゃけわかりにくい。なんか足りないような気がします。
Simutrans-Squirrel-API: Main Page
そしておそらく Simutrans の GUIでできる全ての操作が API 化されていないのでは?
その辺り、AI Playerでできることも増やしていきたいところ。

 

[余談]
Simutrans本体についているAI Playerだと、"AI 旅客" がオススメです。

こんな感じで、いい感じに各街にバス網を作りつつ、隣町に順々に伸ばしていきます。
そして ... 倒産していますね ... なんてこった。

f:id:shingoushori:20181206011718j:plain

 

[いざ、自作]

... (GitHub の使い方に悩んだりしているため、省略) ...

とりあえず、こんな感じで すぐには破産しないバス網を作る AI Playerが組めてます

f:id:shingoushori:20181206020746j:plain
↓ ちなみに、AI Player 自作の経過を YouTube のプレイリストにまとめてます

[Simutrans] expr : Squirrel AI Player - YouTube

[余談]
マップ最初期のバス路線網の今のところのオススメは次のようなものです
AI Player で検討して赤字で倒産させまくって到達した現在の見解です
・できるだけ直線コースになる既設道路を使った経路 かつ できるだけ遠いところ
を選んで路線を組む
・乗り換え需要に期待し、隣り合う街を遠い街で乗り換えさせる
・それなりに新車が出ても遅くてペネルティが課せられにくいスペックのバスを選ぶ

 

[まとめ]

Simutrans の AI Player は、すぐ倒産してかわいい。

 

[余興]

えーっと ... リス! ... 井の頭自然文化園 の リスの小径 です。
市内建築の公園、博物館、文化施設、謎施設 ... 税金の無駄遣い ... 曰く付き物件 ...
が増えるといいですね。街が大きくなった時の駅名候補も増えるので。

なんと、ストリートビューがありました。

www.google.co.jp