Open legokichi opened 9 years ago
ベースウェアにこの栞が対応していることを伝える方法
Ikagaka Ghost APIよりもIkagaka Shiori API のが適切な名前では
現状のGhost.jsには 1.栞を判定し、読み込む互換栞を決定する部分 2.栞と通信する部分 の2つが含まれています。
如何かの動作環境としては現状以下の種類が想定されます。
以上から以下の場合が想定されます。 ・JS栞を使用する場合 ・ネイティブFSを使う場合 - FSはJS栞側で処理するのが効率的(Ghostの引数にFSはいらない) ・互換FSを使う場合 - FSは栞のload()前に栞が参照するFSに書き込む必要がある(Ghostの引数にFS必須) ・FSを使わない場合 - JS栞によってはFSを使わないという選択が可能 ・Windows上でDLLを使用する場合 ・ネイティブFSを使う - FSは栞側でのみ処理できる(Ghostの引数にFSはいらない)
判定系は栞と独立で、これら栞の選択とFSの有無判定までをまかせて、必要な場合の中身渡しと栞のロードと通信確保をGhost.js、スレッドの動作は栞側にまかせるというのが妥当な施策だと考えます。 判定系もAPIというかプラグイン仕様的な奴を定める必要があるかと。
Windows上でオリジナルの栞DLLをネイティブで動作させるというものは、簡単な方法としては「shioridllproxy.exe的なのに栞パスを渡してexecFileしstdioで通信するようなJS栞」をつかうなどがあります。
また将来的にnodeっぽいrequireが実現できるならば、descript.txtにゴースト独自のJS版栞を記述させ、それを読み込むということも考えたい。
これも「shiori.dll.jsをサンドボックスっぽいとこでrequireしてloadとか呼ぶようなJS栞」を使うことでいけそうです。 このrequireしてloadとか呼ぶような仕様は如何かの管轄ではなく「そのようなJS栞」の管轄になりますが。
FSは必ず渡すが、その中身は実FSか仮想FSかを問わずnode.jsの非同期FSのAPIをみたしたものであることが保障されるとかかな?それと別にこれが実FSなのかどうかとかのフラグを渡すとして。
閑話休題。自分用メモ。
如何かはオンラインゴースト「Ghost as a Service(GaaS)」を目指したい。 その実現方法としては、
自分用メモ。
Ikagaka仕様において、各コンポーネントの役割。
http://twilog.org/duxca/date-150201/nort この辺の議論の末、 new Ghost(fs, path) か new Ghost(NanikaStorage, ...) のどちらかにしよう、arraybufferは良くないという結論になりました
node-fs互換の利点は学習コストが少ないこと、 NanikaStorageの利点は各種ファイルやディレクトリへの便利API含んでるので実装が楽なこと、バックエンドにfsの他にも使えそうなこと
です
NanikaStorageが仕様化できればGhostだけでなくNamed APIのShell、Balloonでも使って行こうと考えてます
NanikaStorageの仕様化一応やりました。
NanikaDirectoryの仕様とあわせて storage.shell(ghostpath, shellpath) .then (directory) => files = directory.asArrayBuffer() とできます。
NanikaStorageからFS wrapperとして必要そうなものを抽出してみました https://github.com/Ikagaka/Ikagaka.js/wiki/Ikagaka-1.0-API-Specifications#ikagaka-storage-api
BrowserFS: Buffer返すのキモい FileSystemAPI: そんなものなかった { [path]: ArrayBuffer; }: メモリ食うのでない NanikaStorage: 独自API、けどすでに内部的に実装されてる
ので、BrowserFSをラップしたNanikaStorageが採用される見込みです
{ [absPath]: (data?:arraybuffer)=> Promise<ArrayBuffer>; }ならすべて解決するのでは
これまでの候補と私の認識
要件
私の順序としては
です。
Ghostにはfsを渡すべきではないか。 directory: { [filePath: string]: ArrayBuffer; }という現状維持案はベースウェア側がファイル保存処理を行っている。 しかしGhostはつまることろSHIORIであり、本来ファイル操作についてはベースウェアは関知しないはずである。 なのでFSに書き戻し可能なオブジェクトを渡し、この責務をベースウェアからはずすべきでは。 load,unloadにネイティブのSHIORIの仕様以外のことをさせているのは分かりづらく気持ち悪い。
Ikagaka Ghost API 1.0の仕様についての議論スレッドです。
うにゅう@もどき板の意見も拾いますのでGitHubのアカウントをお持ちでない方はそちらもご利用ください。
ご意見お待ちしています。