1 名前:デフォルトの名無しさん [2015/12/07(月) 07:26:33.87 ID:NYLGCW0V.net] 実際にJavaScriptを書いている人の情報交換所です。 プログラミング既習者専用です。初心者の方はご遠慮下さい。 玄人の方、歓迎致します。
321 名前:デフォルトの名無しさん mailto:sage [2016/07/18(月) 02:38:48.12 ID:UhcVRSnP.net] 無駄をなくすなっていうのは、 一行の無駄もなくすって意味だし、 (コンピュータにやらせる) 仕様を出してきたのはお前だし、 短いっていうのが無駄をなくすってことだし。 わかってねぇなぁ。 今時アセンブラで書くとか言う話をするのかねぇ。 一番の無駄は人間が作業することなんだがw
322 名前:デフォルトの名無しさん mailto:sage [2016/07/18(月) 02:42:22.09 ID:CK8ZYmxh.net] >>319 これか。確かに俺が確認したのと同じ事だな。 os0x.hatenablog.com/entry/20100916/1284650917
323 名前:デフォルトの名無しさん mailto:sage [2016/07/18(月) 02:45:40.64 ID:UhcVRSnP.net] >>322 読めば一瞬で終わってた内容。 おつかれさんwww
324 名前:デフォルトの名無しさん mailto:sage [2016/07/18(月) 02:47:05.64 ID:CK8ZYmxh.net] >>321 まあ今のお前にいくら言っても分からないとは思うが、必要なのは、 「構造的」簡潔さなんだよ。 「記述的」簡潔さではない。 もちろん記述も簡潔な方がいいんだけどね。 とはいえ、構造が簡潔なら記述が複雑になることもないんだよ。 とにかくお前は大きいのをまずは書いてみることだよ。 そうすれば色々と至らなさが分かると思うよ。
325 名前:デフォルトの名無しさん mailto:sage [2016/07/18(月) 02:49:44.99 ID:CK8ZYmxh.net] >>323 それはない。 俺の疑問はgetTime()が何故いるのか?であって、 add/subについてではないから。 まあこの際どうでもいいが。
326 名前:デフォルトの名無しさん mailto:sage [2016/07/18(月) 03:01:24.39 ID:vbFE3yAk.net] また殺人くん呼ばわりのあのアホかな。 あのな、DateTimeというのは、日付と時間だよな。ある一点を指し示す値だ。もっと詳しく言えば、ある内部値を、日付と時間として扱えるようにしたオブジェクトだ。 その、「ある一点を指し示す日付と時間同士を、四則演算する」って凄くナンセンスだと思わない? ある一点と、ある一点の間の距離は、numberか? 違うよな。 .net見てみろよ。TimeSpan型がある。 例外とかそういう馬鹿な話じゃない。 頭の中を整理して、できて良いかできてはいけないのか精査せえ。 何故getTimeしてるかわからんのか? エポックとして、一点の情報ではなくなり、原点からの長さとして値を返してると考えるとことができる秒に変換しとるよな。要はベクトルに。 お前高校数学からやり直してこいよ。
327 名前:デフォルトの名無しさん mailto:sage [2016/07/18(月) 03:02:19.26 ID:vbFE3yAk.net] >>326 言い忘れ。 「ベクトルなら加減乗除自在だよね」とダメ押ししとくわ。
328 名前:デフォルトの名無しさん mailto:sage [2016/07/18(月) 03:11:07.49 ID:UhcVRSnP.net] >>325 > 俺の疑問はgetTime()が何故いるのか?であって、 日付に +1 するときだろw
329 名前:デフォルトの名無しさん mailto:sage [2016/07/18(月) 03:13:48.33 ID:UhcVRSnP.net] いま普及している言語で、完璧な 構造的簡潔さとやらを備えてる言語ってなんだろうねw 重要なのは道具として使えることだよ。 道具として使えるならば簡潔でなくても良かった。 そうやって、制限のある中で今まで 実現してきたんだって。
330 名前:デフォルトの名無しさん mailto:sage [2016/07/18(月) 05:04:13.15 ID:FfTrxk2L.net] >>325 ES.nextでvalue-objectやらvalue-proxy、もしくは演算子オーバーロードが議論されてるよ。 まあとは言え今のDateをそのまま対応させるのはナンセンスだし、いろいろ問題あるから、 サフィックスで数値型を拡張できる優秀な案を使って、 1s -> <time>(1s) 2016Y+7M+18D -> <time>(1468767600000s) 3s - 1s -> <time>(2s) date - 1s -> <date> の用にできる。 まあその場合もgetTimeが要らなくなるわけじゃない、 勿論今でも単項+演算子使えば要らないので、要らないの定義によるが、 君は結局もっといい形があるじゃん、と言いたいのか、なんなのかよくわからないな。
331 名前:デフォルトの名無しさん mailto:sage [2016/07/18(月) 23:56:44.27 ID:CK8ZYmxh.net] >>330 基本的には ・getTime要らないなら何故いちいち付いているのか?(全員付けているのか) ・今確かに動いているが本当に引き算は出来るのか?(仕様内なのか) の確認だから。 今の仕様でもそんなに悪くないけど、直交してないから実装に負担がかかる。 とはいえ今更変更することは無理だし、 新仕様を検討している連中はこの辺全て分かっているだろうから、見守るしかないね。 なおgetTimeが要らないといっているのは引き算時限定であって、(これは経緯を見れば分かるはずだが) やっぱりlodash君は「前との関連で」の会話が出来ないんだな。 多分ガチのアスペなんだと思う。 とはいえここは匿名掲示板なんだから、俺たちがアスペに対して気を使う必要はない。 (個人を特定して気を使う必要はない) 過去の発言は全部読めるのだから、ちゃんと読み直して付いてこいとしか言えんね。 lodash君の会話の組み立て方では普通は荒らし扱いされる。 それは読み直すことによって多少は改善するから、まずはそれを心がけることだ。 という書き方だと伝わらないのかな? まあしかしこれ以上面倒見れんが。
332 名前:デフォルトの名無しさん mailto:sage [2016/07/19(火) 00:27:47.65 ID:gHzhdyCj.net] > ・getTime要らないなら何故いちいち付いているのか?(全員付けているのか) たまたま > ・今確かに動いているが本当に引き算は出来るのか?(仕様内なのか) 仕様に書いているのだから、仕様通り
333 名前:デフォルトの名無しさん mailto:sage [2016/07/19(火) 00:39:36.64 ID:gHzhdyCj.net] > なおgetTimeが要らないといっているのは引き算時限定であって、(これは経緯を見れば分かるはずだが) 他にどんな演算子があるかぐらい調べろよw new Date() / 1 new Date() * 1 new Date() % 10 new Date() ** 1 +new Date() -new Date() ~new Date() new Date() > 0 (< <= >= も同様) new Date() << 1 (>> >>> も同様) new Date() & 1 new Date() | 1 new Date() ^ 1 これらも仕様通りgetTime()はいらない。 というか逆に+のときだけgetTime()が必要と思ったほうが良いぐらい。 +は文字列結合と数値の加算の二つの意味があるから、仕方なくこうなってしまったという話。 (それ以外は二つの意味はない)
334 名前:デフォルトの名無しさん mailto:sage [2016/07/19(火) 00:48:15.24 ID:gHzhdyCj.net] > 今の仕様でもそんなに悪くないけど、直交してないから実装に負担がかかる。 > とはいえ今更変更することは無理だし、 直すならばDateの仕様ではなく、+オペレーターの方。 Perlみたく、+ は数値演算、 . で文字列結合 とするしかない。
335 名前:デフォルトの名無しさん mailto:sage [2016/07/19(火) 01:05:34.97 ID:gHzhdyCj.net] どうやら俺の発言が気に食わないようだが 俺に比べて技術と知識も劣ってるから、 getTimeがいらないのは引き算限定とかいう 発言で反論しようとするんだよなw 一般論として技術力が高い人ほど多くのことを 知っているんだよ。知ってるからこそ技術力も高くなる。 関数型プログラミングはいいよ。コードがシンプルになる。 lodashやjQueryは便利なライブラリ。
336 名前:デフォルトの名無しさん mailto:sage [2016/07/19(火) 02:25:00.57 ID:9Xihfq37.net] 相変わらずアスペ全開だな。 まあついでに言っておくと、JavaScriptの連中は仕様書を書いている連中すらゴミだってことだ。 オブジェクト指向を理解出来てない。 Type固有の案件は全部15章に突っ込まないと駄目だ。 11章の演算子(+)に書くとか、親クラスのメソッドに子クラス毎にif文入れているようなものだ。 あの仕様書では頭からお尻まで全部読まないと理解できない。典型的な駄目コードだ。 だから俺も読み込むまでに余分に時間がかかった。 var Object = { operator+: funciton() { if (typeof(this)==='Date') // 11.6.1 NOTE1 // 現行仕様書 }}; var Date = { operator+: function() { // 15.9.X // こっちに書くべき }}; Type固有の例外規定が15章に書いてない時点で仕様書の構造がゴミ。 但し書きはダブって良いので、15章にも書き、そっちがオリジナルであるべき。 上記上側みたいに、Dateオブジェクトの特別扱いを、子クラスでメソッドをオーバライドせず、 親クラスのメソッドにいちいちif文入れてこられたらキレるだろ? 上記下側のように、子クラスでオーバライドした上で、 親クラスのメソッドに「Date型ではオーバライドされています」とコメントを付けておくべき。
337 名前:デフォルトの名無しさん mailto:sage [2016/07/19(火) 02:25:35.18 ID:9Xihfq37.net] お前らの大半はこれにすら気づけないと見ている。 正直、JavaScriptの連中が上達してないのはかなり根が深い問題だと認識し始めてる。 仕様書すらこれだ。 多分君らの大半は何が良いコードなのかも理解出来ていない。 それはまともな構成の仕様書/コードを見たことがないからだ。 これについては、丁度OOPのスレでそれを問う勇者がいたから見てくるといい。(今は死にスレだが) echo.2ch.net/test/read.cgi/tech/1467992113/10 echo.2ch.net/test/read.cgi/tech/1467992113/65 例えば仕様書だけでもまともであれば、 無意識的にオブジェクト指向を学習出来たはずなのだが、そうなっていない。 この酷い仕様書を読むまでは気づかなかったが、 当たり前だが他言語の仕様書は達人が書いているので、こうはなっていない。 だから仕様書を読んでいれば無意識的に オブジェクト指向(正確には著者のプログラミングスタイル)も学習していける。 JavaScriptにはこれがない。つまるところ、教科書が悪いから上達しにくい。 それでも、他人のコードをほぼ全て見える状況は、おつりが来るほど有利だとも思うのだが。
338 名前:デフォルトの名無しさん mailto:sage [2016/07/19(火) 03:43:57.22 ID:pXKjqsL9.net] 上達くんはトリップ付けてくれよ
339 名前:デフォルトの名無しさん mailto:sage [2016/07/19(火) 04:38:03.16 ID:gHzhdyCj.net] 自分の能力不足を仕様のせいにまでしてきたねw
340 名前:デフォルトの名無しさん mailto:sage [2016/07/19(火) 04:50:08.67 ID:gHzhdyCj.net] Dateにオペレータ+を書くとかさ間抜けすぎるっていうかw 世の中にはいろんな言語があるってことを知らないんじゃないかねぇ。 そして最高の言語があるとか思ってるんじゃないかねぇ。 JavaScriptにおいて演算子はクラスのメソッド(相当)ではない。 演算子のオーバーロードがないのもクラスのメソッドじゃないからだ。 だから演算子が特定のクラスにつくことはない。 もし+演算子がクラスのメソッドであれば、それはクラスごとに変更可能であるはずだ。 また戻り値も好きに変えられるはずだ。(例えばComplex型+Complex型の結果をComplex型にする等) だけどJavaScriptではそれは出来ない。といったらJavaScriptは劣ってるとか言うんだろうな(苦笑) これは言語のコンセプトの違いでしか無い。スクリプト言語としてそういう設計になってる。 JavaScriptにおいて演算の結果は文字列か数値にしかならない。(厳密に言えばNaNとかもあるが) 演算子はクラスメソッドではなく、演算子が使われた段階でオブジェクトはプリミティブ型に変換される。 Date型に対して+メソッドが呼ばれるのではなく、プリミティブ型への変換メソッド(valueOf)が呼ばれる。 その後に演算子の効果が働く。 な? 能力が低いんだよこいつは。 自分の知ってる○○の言語の常識でしか考えることが出来ない。
341 名前:デフォルトの名無しさん mailto:sage [2016/07/19(火) 04:57:24.04 ID:gHzhdyCj.net] Dateにoperator+を書くべきじゃないと言ったが、 もちろんObjectにも書くべきじゃない。 >>336 はさも、Objectにoperator+があるのが 現行の仕様だと言っているが、現行の仕様は Objectにoperator+なんてものは存在しない。 ObjectにあるのはvalueOfメソッドだ。 そしてObjectのvalueOfメソッドに if Dateなら?みたいなコードはない。 Operator+解釈のアルゴリズムの結果、Date型のvalueOfメソッドが呼ばれるだけだ。 Operator+の処理が実行されるのは、Object(やDate)のメソッドが呼び出される前だ。 それは仕様を読めばわかること。 だからこそ15章 Native ECMAScript objects ではなく、 11章 Expressions に分離して書かれているのだ。
342 名前:デフォルトの名無しさん mailto:sage [2016/07/19(火) 09:44:05.11 ID:Lmd4i1Ew.net] >>336 仕様書が変に構造化されてて読みにくいのは非常にその通り。 でもES2015以降徐々に改善されて行ってるよ。 そういう意味でも最新の仕様書を読んだほうが良い。 で、確かに@@toPrimitiveはビルトインではDateとSymbolくらいにしかついていないので特有だが、 別にこれは外したり自由に付けたりもできるし、処理の流れの中で例外というわけでもない。
343 名前:デフォルトの名無しさん mailto:sage [2016/07/19(火) 17:59:10.43 ID:Ll9Tyf8R.net] 頭おかしいのかな。 オブジェクト指向でも、クラス指向ではない。 型は無いに等しい。アヒルの様に鳴き、アヒルの様に歩けば、それはアヒルである、という「見做し」を代わりに使用する。 この2つだけで、何故演算子がその時と場合で意味が変わるか、理解出来るんじゃなかろうか。 知能低すぎなのは、その程度で関数型とか言っちゃってる脳味噌じゃねえの? valueOfは、見做しの典型だろ。 どんなオブジェクトであれ、どんな経緯でプロトタイプがチェーンされていても、それを辿って一番最初に見つかったvalueOfが使われるんだから。
344 名前:デフォルトの名無しさん mailto:sage [2016/07/19(火) 19:56:18.15 ID:Lmd4i1Ew.net] まあそういう挙動が変だ、嫌だって言うなら delete Date.prototype[Symbol.toPrimitive] すれば変えられる。 誰かは言わないけど世の中には delete Object.prototype.__proto__ とか嫌いで許せない物をまず削ってから始める派の人も居るみたいだしね。
345 名前:デフォルトの名無しさん mailto:sage [2016/07/20(水) 00:55:34.54 ID:uzXTbo4C.net] >>344 そー。 if Dateとかナンセンスすぎんのよ。 とりあえずvalueOf呼んで、その実装が誰のものかどのインスタンスのものかなんか気にせず、帰ってきたのが値で、 それ以上でもそれ以下でも無い。 クラスのメソッドとか脳味噌の代わりにウニ詰まってるレベル。 オブジェクトか、オブジェクトのプロトタイプのプロパティに functionが入ってるだけであって、クラス()のメソッド()でも何でも無い。 関数を一級市民とみなす関数型言語erが、まさかの関数をメソッドと特別扱いするとは。 演算子は演算子であって、それ以上でもそれ以下でもない。その後に効果が働くも何も、それ以外の役には立たんから演算子として、言語として定義されとんのだ。
346 名前:デフォルトの名無しさん mailto:sage [2016/07/20(水) 02:05:37.37 ID:eZynd/Sj.net] >>342 > 処理の流れの中で例外というわけでもない 俺が言っているのは、ToPrimitiveを呼ぶことではなくて、 ToPrimitiveのデフォルト値がTypeによって異なっていることだ。 ただしこれについては俺も>>336 内では間違っていた。正確には以下。 var Object = { ToPrimitive: funciton(hint) { // 9.1 if (typeof(this)==='Date') // 11.6.1 NOTE1 // ES5.1仕様書 }}; つまり、15.9 に書くべき内容が、次点の 9.1 にも書いてなくて、 11.6.1 に書いてある。 二重に落とし穴になっている。 そして、当たり前だがNOTE1が例外だと言っている。 というか例外じゃなければNOTEの意味無いだろ。 仕様書のおかしな構造は、おそらく仕様書それ自体を書いたわけではなくて、実装から起こしたからだ。 だから仕様書として妥当な場所ではなく、それが実装してある場所に記述があるのだろう。 とはいえその場合でもこのNOTE1の内容なら 9.1 にあるべきであって、 いずれにしても 11.6.1 にあるのはかなり謎なのだが。 そして、実装から起こすにしても、まともな実装ならそのまま仕様書に焼き直しても上手く行く。 いずれにしてもアレなんだろうさ。 NOTE1(仮): Dateの場合はhintにStringを与えて呼び出す // 11.6.1 にあっても不思議ではない、 // 336の俺の勘違いはこれ、11.6.1にある点と整合させる為に脳内変換してしまった NOTE1(ES5.1仕様書): ToPrimitiveはhint無しの場合、 Date以外はNumberが、 DateはStringがhintに与えられたものと見なす // ToPrimitiveの動作説明を(+)の説明内に配置?意味不明 // しかもToPrimitiveの場所(9.1)にはこの説明は無しかよ!マジで頭おかしい
347 名前:デフォルトの名無しさん mailto:sage [2016/07/20(水) 02:06:29.35 ID:eZynd/Sj.net] さてES7仕様書を確認してみた。確かに大幅改訂されている。 7.1.1のToPrimitiveの所にNOTEがある。(改善あり) 12.8.3の + の所にはこれまでどおりのNOTE記述、まあこれはあった方がいい。 20.3.4.45にはDate.prototype[@@toPrimitive](hint)が追加されている。(改善あり) 結果、俺が問題だと思った点は全て改善され、妥当な配置になっている。 > そういう意味でも最新の仕様書を読んだほうが良い ああその通りだ。今後俺はそうするよ。少なくともES5.1仕様書はゴミだ。 > 別にこれは外したり自由に付けたりもできるし、処理の流れの中で例外というわけでもない それは完全に後付だよ。とはいえ妥当な解決策ではあるが。 最初からNumberならこの部分自体が丸々要らない。 無駄仕様で無駄に膨らむ駄目パターンの典型だ。 とはいえ、ES7には今のところ問題点はないね。 俺もこの解決策を採るだろうし、仕様書としても今現在俺が検出した問題点は全て解決済みだ。 徐々に改善されているのは事実だね。 ただまあ、20年も経とうとしているのにこのレベルの改善を未だにやっていること自体が問題だが。 他言語の仕様/仕様書なら、最初からこんな問題は存在しない。 というか、ブレンダン・アイクは何で仕様書を書かなかったんだろう? 彼が第1版を書けばこんな事にはならなかったはずなんだよ。 >>344 ググったらヒットした。で、試してみた。 が、効果あるか?特に何も変わらない気がするが。 ES6フラグとか指定必要?
348 名前:デフォルトの名無しさん mailto:sage [2016/07/20(水) 02:09:56.99 ID:eZynd/Sj.net] あ、ちなみに試したのは後者、間違いないようにもう一度書いておくと、以下ね。 > delete Object.prototype.__proto__ とりあえず期待した効果がない(気がする)
349 名前:デフォルトの名無しさん mailto:sage [2016/07/20(水) 02:15:43.13 ID:E+SEwayU.net] > 他言語の仕様/仕様書なら、最初からこんな問題は存在しない。 そんなわけねーだろw どんな言語でも最初は汚いし 完璧な言語はない。 なによりお前、他の言語と言ってるが、 じゃあ具体的にどの言語だよ? どうせしらんだろ
350 名前:デフォルトの名無しさん mailto:sage [2016/07/20(水) 02:31:38.89 ID:eZynd/Sj.net] >>344 いじってみると、動作の差異を検出出来た。 delete以降は__proto__指定でのプロトタイプ切り替えは出来なくなる。 ただし、リテラルとしてオブジェクト全体を生成する場合は指定が効くという、 極めて中途半端?な状態になっている。 果たしてこれが仕様なのか、もちろん動作自体ももっと確認しないと怖くて使えないが、 これが仕様であれば、意図は分かるし、最初からこうならこっちの方がいい。 ただ、今現在の動作しているコードの中でこれをやるのは無理だね。副作用が怖すぎる。 (つまり、結論としては、仕様だと確認出来ても使わない)
351 名前:デフォルトの名無しさん mailto:sage [2016/07/20(水) 02:40:40.72 ID:xVzG2GNh.net] >>350 それがなぜかが判れば、自分がどれだけ間抜けな事言ってるかかわかると思うよ。 アスペならダックタイピングとか、関連用語を詰めてこい。
352 名前:デフォルトの名無しさん mailto:sage [2016/07/20(水) 03:30:00.35 ID:eZynd/Sj.net] B.2.2だろ? 他を見てもアクセサとして実装するところまでは仕様のようだから、 deleteに関しても仕様通りの実装になっていれば同じ動作だろう。 しかしObject.definePropertyを使えば同じ事が副作用無しで出来るのに わざわざdeleteする意味は何?
353 名前:デフォルトの名無しさん mailto:sage [2016/07/20(水) 07:46:36.40 ID:2oUQ3wZY.net] >>350 まあ多分Object.prototype.__proto__が嫌いな人は Object.prototypeに余計で醜いの生やすな!って言いたいのもあるだろうから それで良いんじゃないのかな。 あとまあES仕様は基本的に一箇所に最小限しかかかれていなくて、 慣れていないうちはあっち行ったりこっち行ったりする必要があるが、 逆に言うと基本処理を覚えてパターンに慣れるほどに読みこなしてしまえば、 短い一部を読むだけで理解できるからむしろ楽という事もある。 仕様書いてる人もそうだから、初めて読む人の読みづらさがなかなかわからないんじゃないかな。
354 名前:デフォルトの名無しさん mailto:sage [2016/07/20(水) 09:31:33.55 ID:E+SEwayU.net] このようにJavaScriptの仕様書っていうのは よく読まれやすい。読んでいるからこそ苦情も出てくる。 それに対して、他の言語の仕様書は読む気すらおきない
355 名前:デフォルトの名無しさん mailto:sage [2016/07/20(水) 13:30:34.45 ID:2oUQ3wZY.net] 処理系と仕様が完全に分離されてるのもどちらかと言うと珍しいのもあるかもな。 RubyやPythonだったら言語学者でもない限りメインの処理系の動き=仕様ということで納得する部分があるが JSだと沢山の処理系で動くように作らないといけないからね。 各処理系の対応度合いもまちまちだし、1つの処理系だけ取っても変化が早い。 だから言語仕様書を頼ることが多くなるのかもね。 でも言語仕様書はあくまで言語仕様書であり、リファレンスとは違うので誰にでも分り易いものではないね、
356 名前:デフォルトの名無しさん mailto:sage [2016/07/20(水) 23:30:45.27 ID:E+SEwayU.net] JavaScriptの標準APIがRubyのそれとは違って 大幅に機能が少ないからのは標準化のせいなのかな? 他言語を見習って一気にメソッド増やしてほしいものなんだが。 ruby-doc.org/core-2.3.1/Enumerable.html これらのメソッドの多くがないから、lodashなどに 頼る必要が出てくる。 他言語で標準化されてるならば、JavaScriptに取り入れるかなんて 議論する必要はないと思うんだけどな。
357 名前:デフォルトの名無しさん mailto:sage [2016/07/21(木) 07:48:11.60 ID:3EZYXG7o.net] Rubyやらより遥かに後方互換性を切るのが難しいからね。 Rubyやらはなんだかんだ言ってメジャーバージョンアップの時には思い切って互換性を切ることができる。 そこでの一番の問題はユーザーがついてきてくれるかとか、そんなところ。 でもJSは後方互換性を切るとなったら、それが受け入れられるかなんてむしろどうでもよくて、 今あるコンテンツのほぼ全てに影響がないかが大事になる。 それは同等の力を持ったエンジンが複数あり、ユーザーコミュニティではなくエンジン開発陣主体だから。 目線が違うので、便利だから入れようという盛り上がりが起こることは少なく、 今ある特にパフォーマンスや技術的問題を、具体的に解決できる提案が取り入れられやすい。
358 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 21:25:32.47 ID:u7v77FIA.net] IndexedDBでdeleteObjectStoreする時にトランザクションが(仕様上)取れなくて、 そのままdb.close()するとエラーになる時があるんだが、これってどうすればいいのだ? e.target.errorは以下。e.target.transacsionはnull(IDBFactory.openで呼んだ直後) target:IDBOpenDBRequest error:DOMException: The connection was closed. code:20 message:"The connection was closed." name:"AbortError" createObjectStoreはtransactionプロパティがあるのでそれでoncompleteを待てるのだが、 deleteObjectStoreは何故かvoidを返す仕様で、待ちようがない。 ならばそのままクローズで良いのかと思いきや、エラーになる。 https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/deleteObjectStore 普通ならIDBDatabase.transactionがプロパティでそこから辿れるはずなのだが、メソッドだし。 deleteの時にトランザクションがないわけがないし、 それにアクセス出来ないのは仕様上の欠陥だと思うが。 createObjectStoreがobjectStoreを返すのは便利で良いが、本来はTransactionを返すべき。 だったら空オブジェクトにtransactionプロパティだけでも付けておいてくれないと対応出来ない。 なおヒット状況は、 1. あらかじめIndexedDBに500個ほどオブジェクトストアを作っておく。 2. open直後にそのうち3つほどを連続して消す。 3. クローズ。 この3のタイミングの取り方が分からない。 IndexDBは初めて使うので、使い方が間違っていたり、 或いは大幅に勘違いしてるかもしれないけど、その辺も含めてよろしく。 なおアプリとしてはもう一度削除されるだけなのでクリティカルな問題ではない。
359 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 22:46:27.65 ID:Dn9vwW86.net] >>358 createもdeleteもversionchangeでしか使えんだろう。
360 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 23:07:56.19 ID:u7v77FIA.net] createObjectStoreも単発で作るだけなら同じかもしれないが、それは試していない。 こちらの使い方では以下サンプルの通り、 createObjectStore直後にobjectStore.transaction.completeで書き込みを行っているので、 書き込み側では今のところ問題はない。 > 「データベースを構築する」からの抜粋 > var objectStore = db.createObjectStore("customers", { keyPath: "ssn" }); > objectStore.transaction.oncomplete = function(event) { > } > https://developer.mozilla.org/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB#Opening_a_database ちなみにcreateObjectStoreのtransactionは複数作成しても同一なので (oncompleteは最後に1回呼ばれるだけ) おそらくdeleteObjectStoreのトランザクションとも同一。 だからこれが見えれば問題は解決出来るはずなのだが、辿り方が分からない。 (というか仕様上抜けているように見える)
361 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 23:34:58.54 ID:u7v77FIA.net] ちなみにcreateObjectStore/deleteObjectStoreを常用しようとしている。 APIを見る限り、確かにこれは通常想定されている使い方ではないようだが、 versionカウンタが64bit整数だから出来ない使い方でもない。 管理上最適な階層にすると、今回はcreate/deleteを常用する事になる。 だからそれが出来るかどうか試している。(実用に耐えるかどうか)
362 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 23:35:23.04 ID:sjfW/TwQ.net] トランザクションはversionchange全体で1つ
363 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 23:45:38.76 ID:Dn9vwW86.net] >>360 ハンドラに代入したらそりゃ一回だけじゃねえの? addEventListener使わないのはどうして? 複数作成しても同一、ってなんで複数作成する必要があるの? トランザクションと同じ、の根拠何なの? onupgradeneededでしか使えないんじゃなかったっけ? 消す意味がわからんのだけど、なんで消したいの? 消さなきゃいけないなら保存なんかしなけりゃ良いと思うんだが。 createObjectStoreがなんでtransaction帰すべきなの? ObjectStoreをcreateしたのに。 一つのストアから、2つ以上のトランザクション作りたい場合に詰むんじゃねえの? なんか根本的に間違ってない?
364 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 23:48:10.59 ID:ZqmshKaM.net] なぜ、ストアごと消す必要があるんだろう。 中身だけ消せばいいんじゃねえの?clear一発っしょ。
365 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 00:02:44.22 ID:m1LOPf7I.net] 中身だけ消す使い方も出来るが、それだと名前対応の辞書引きが必要になる。 管理上「最下層の名前=最下層のobjectStoreの名前」が一番簡単だからそうしている。 アクセス/追加/廃棄単位もこれと同一だから、管理上はそこにobjectStore階層を置きたい。 もちろんキーに全部含めてフラットに扱うことも出来るが、 元々階層オブジェクトなのをフラットにしてDBに負荷をかけるのは本末転倒だ。 それでコードが楽になるならメリットもあるが、今回はそうではないし。 今回は完全に階層オブジェクト(末端はファイル)だからIndexedDBの必要はないのだけど、 FileSystemAPIだとChromeしか使えない。 これについてはFireFoxはIndexedDBを使えという主張らしく、 確かに機能的には上位互換だから、動作が十分に軽ければ問題ない。だからそれを試している。 https://dev.mozilla.jp/2012/07/why-no-filesystem-api-in-firefox/ www.html5rocks.com/ja/tutorials/file/filesystem/
366 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 00:09:17.75 ID:bLWZhaRu.net] ファイルって何に使ってるの? 最悪消えても良いのならCacheStorageもあるが。
367 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 00:15:46.53 ID:m1LOPf7I.net] >>362 確認した。おそらくそのようだ。 > Transactions of this mode cannot run concurrently with other transactions. Transactions in this mode are known as "upgrade transactions." > https://developer.mozilla.org/ja/docs/Web/API/IDBTransaction そしてこの"upgrade transactions."がどこのプロパティに現れるのか知りたい。 つか、一つならdb.transactionにぶら下げといてくれよなと。 createObjectStoreの後にもここにはぶら下がってないね。
368 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 00:23:12.68 ID:m1LOPf7I.net] >>366 Web上のファイルの保存用途に使う。(アーカイブ) だからファイルが保存出来れば何でも良い。 (まだFileSystemAPIは試していない) URLは最初から階層になっているし、それを保つのが管理上一番楽だからそうする。 したがって、DBアクセスの必要はない。 ユーザがライフタイムを完全に管理出来なければならない。 (Web上から削除された時、ユーザ側で削除するか保存するか決める) CacheStorageはあとで見てみるが、チラ見では新しすぎる感じ。
369 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 00:32:40.08 ID:utwn7AiT.net] >>365 頭おかしくなければ、もともと階層オブジェクトなのをフラットに、とか変な事考えなくていいんじゃねえの? /hoge..../a.php?aaa/bbb /hoge.../a/aaa/bbb が同じとかあんじゃん。 url:{ content:Blob, schema:xxx, host:xxxx, port:xxxxx, path:[aaa,bbb,ccc] } とでもオブジェクト作って、pathにインデックス貼れば? なんの負担でも無いよ。indexで引くDBだからindexedDBなんだし。 階層構造を保存するためにハードディスクが階段の形してるなら寝言続けて。
370 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 00:36:42.04 ID:m1LOPf7I.net] >>366 CacheAPI見てみたがライフタイムの管理がよく分からん。 「ユーザ側からの削除無しなら永久保存」(つまりファイルと同じ)に出来る物なの? https://developer.mozilla.org/ja/docs/Web/API/Cache あとIndexedDBはFireFoxがそういっているから試してみているだけであって、 FileSystemAPIだとWindowsから直接コピーとか出来るはずなので、 結果的にアーカイブの管理が楽にはなるから、そっちを使うかも。 いずれにしても今は試している段階だ。 何か情報あればよろしく。
371 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 00:42:53.49 ID:utwn7AiT.net] 自分はすごく考えた結果、こうする他がない、でもわからん。不自然な答えになる。そのやり方は不自然なやり方だからどこにも載ってないから教えてってときに、情報出し渋るなよ。 どう考えても自分の発想が間違ってる以外の結論出ないんだから。 >>370 しかしなんでパスをインデックスに出来ないの? 限界サイズは一番でかいか無限だよ。IndexedDBは。
372 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 00:43:11.87 ID:m1LOPf7I.net] >>369 それも何の負担もないが、 元のURLもクエリを含まないからそのままでも全く負担無いんだよ。 だからその方法ではコードは楽にならない。 仮にFileSystemAPIを使ったとして、 Windowsから直接ファイルをアクセス出来れば、 アーカイブが要らなくなった時にエクスプローラから削除出来るでしょ。 直感的に一番簡単。 それを意味無くフラットなDBにしてしまったら、 そのアプリいちいち起動しないとあれこれ出来ないでしょ。 バグってて削除出来ないとかもあり得るわけでね。そういうこと。 他アプリとインタフェースが揃っているのは重要なんだよ。 仮にIndexedDBも結果的にWindowsファイルの階層として見える形で objectStoreを置いてくれていれば、同様のことが期待出来るわけだし。
373 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 00:49:08.43 ID:m1LOPf7I.net] >>371 出し渋るも糞もアーカイブだと言ってるだろ。 パスはインデックスにするよ。ただしフラットにはしない。 限界サイズはndexedDBよりも多分FileSystemAPIの方が上だ。
374 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 00:56:03.75 ID:m1LOPf7I.net] IndexedDBの容量制限は実質1/10*HDDね。 https://developer.mozilla.org/ja/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria 多分FileSystemAPIには上限がない(HDDの上限だと信じている) 繰り返すが、今回は元々アーカイブ用途だからそもそもDBアクセスの必要はない。 (横断的クエリとか検索とかは全く必要ない) ただ、機能的には上位互換だから動作に問題なければそれでもいい。それだけ。
375 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 01:07:03.73 ID:utwn7AiT.net] >>372 は?消すのはエクスプローラーなの? 意味なくフラットなぁ。 十分に意味のあるフラットだと思うけど。 バグって削除できないから、だから最初の発想では毎回ストアを作って破棄します、なんて考え方だったの?あきれた。 upgradeはなんなのか。 dir /S/Bした結果だから余程見慣れてると思うけどね。 WindowsWindowsって気持ち悪いけど。 べつに、どのフォルダ以下、って、キーの先頭xxxxxx文字が指定のもの、なんだし、特に変わらんと思うんだけど、 お前の中で違うならそうなんだろう。 フラットに見えるものが、フラットではないと思うのがよくわからなすぎて悩むわ。 indexedDBには文字列しか保存できないと思ってんのかな。 フラットにはしない!って、じゃあどうやってWindowsってフォルダの構造保存してるんだろう。 って考えたら、 フラットなものに保存されてる事気づくと思うんだけど。 >>374 だから、実際のサイズ調べてこいよ。 クォータまでだよ。 それに、残念だけど、フォルダとして見られる物じゃないよ。
376 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 01:09:42.35 ID:utwn7AiT.net] まさかディレクトリ掘るのに再起使ってるから、平たくする方法がわからんのかな。 そんなに階層階層言うなら、階層構造渡したらそのまんま保存してくれるラッパ作るか、 バイナリの保存はちょっと考えなきゃならんがブラウザ版nedbでも使えばいいのに。
377 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 01:16:58.93 ID:bLWZhaRu.net] >>370 保証はされていないが、一般的な環境ではまず問題ない。 というかIDBも実際は永続性は保証されていない。 Fxだと保証されているのは非標準のオプションを指定した時のみで、 他のブラウザでも基本的に一時的なものでディスクが埋まった時は利用頻度の少ないものから削除される。 トランザクションだって完璧でない。実際はパフォーマンス向上のためにディスクの書き込み完了を待たない。
378 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 01:19:31.86 ID:m1LOPf7I.net] >>375 > それに、残念だけど、フォルダとして見られる物じゃないよ。 そうか、これは残念だ。 だったらやっぱりFileSystemAPIかな。 削除機能は内部にも付けるけど、 エクスプローラでも追加/移動/削除出来た方がいいのは自明だろ。 他アプリとの連携もし易くなるし。 まあお前が色々勘違いしているのは分かるけど、 既に言っていることばかりだから読み返してくれ。
379 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 01:25:17.05 ID:utwn7AiT.net] >>378 だから、FileSystemApiがだよ。 フォルダとしては見られないか、超掘り返さないと見れないよ。 更にいうと、エクスプローラでなんなりするべきものじゃない。 それはもう、Electronかなんかで作れ。な? お前が勘違いしてるのは、多分indexedDBへの保存の方法だとの思うけど。 そのために必要な階層構造を保ったまま、indexdDBに十分入れれるからな。
380 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 01:25:40.46 ID:utwn7AiT.net] まぁ、インスペクタでは表にしかならんだろうけど。
381 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 01:30:27.67 ID:m1LOPf7I.net] >>377 了解。ありがとう。 アーカイブ用途なのでトランザクションに関しては問題ない。 再ダウンロードして保存すればいいだけだから。 機能は、Web上で削除されたファイルをまだ削除されていないように見せかけるもの。 それが永久だとアーカイブということになる。 CacheAPIは多分この用途に作られているから、 それが使えるのならそっちを使った方が色々すんなり行くのだろうね。 プロキシとして機能してくれるなら、いちいちObjectURLに張り替える必要もなくなるし。 全体として楽になる。 ただ永久保証無しなら、何らかの形で抽出機構が必要になる。 これがちと面倒か。 多分CacheAPIの区画を「永久」「一時」とユーザー側で指定出来れば一番良いのだけど、 無理だよね?
382 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 01:33:03.22 ID:m1LOPf7I.net] >>379 JavaScriptオブジェクトそのまま突っ込めるって話だろ。 もう試したが、今回の用途にはメリットがないんだよ。
383 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 01:34:46.91 ID:m1LOPf7I.net] >>379 > だから、FileSystemApiがだよ。 え、マジで?
384 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 01:38:12.92 ID:utwn7AiT.net] >>382 そのままじゃなくて、書き加えて保存できるし、 その任意のプロパティをインデックスに出来るよ。 お前の言うフォルダ名も、そのままでも、セパレータで分割しても、両方でもインデックスとして保存できる。 このフォルダ以下、これと同じ階層のもの、ファイル、全部綺麗に管理できるんだけどね。 これをフラットだからダメ、って言うなら、 一つのオブジェクト入れるオブジェクトに好きなだけツリー構造こしらえれば良いのかもしれん()が。 ノータリンに説明した時間が無駄だったな。
385 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 01:44:52.41 ID:m1LOPf7I.net] >>384 とりあえず384に書いていることは全部知っているぞ。 ただそんなことせずともURLそのままで保存すれば良いだけなんだよ。 サーバ側でそれなりに考えて階層化されているわけでね。
386 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 01:53:36.82 ID:utwn7AiT.net] >>385 はぁ。そうですか。 それでidb程度が使えないというか、わけわからん仕様出してくるとは、「それなりに考えて」階層化してるものが、表型DBに落ちてりゃ最高に面白いけど、フォルダ()なんだろうな。 好きに悩んでバギーなもの作ればよろし。
387 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 01:59:36.01 ID:utwn7AiT.net] ブラウザの枠越えてフォルダがどうとか言うなら普通にWindowsアプリ組めばいいんじゃないのかな。 ブラウザはブラウザでサンドボックスになってるから良いのに。
388 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 02:02:44.31 ID:m1LOPf7I.net] >>386 いや何を勘違いしているのか知らんが、コードはもう動いているし今はテスト中だぞ。 まあそれはさておき、FileSystemAPIが異なるファイルシステムを使っているのは 確定ではないがどうやらそのようだ。 というかこれだとWeb屋は言葉を間違っている。 サンドボックス:その内部で何をやっても外部に影響はない ブラックボックス:その内部がどうなっているか外部からは見えない ブラウザストレージはサンドボックスである必要はあるが、 ブラックボックスである必要はない。というかFileSystemAPIならなおさら。 てかマジでブラックボックスならFileSystemAPIの存在価値無いよ。 これだとFireFoxの言うとおりだと言うことになる。 何で意味無くブラックボックス化してんだ?
389 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 02:14:19.68 ID:utwn7AiT.net] >>388 サンドボックスだ、としか言ってないし、 ブラックボックスではない、とは言ってないからいいんじゃねーの? 動いててテストフェーズなのに未実装機能あるなんて面白いのか面白くないのかわからんな。 だから言ってんじゃん。 それゴミ。idbの方がはるかにマシ。 要はクロームアプリ同士で、ファイルが筒抜けにならんように隔離してみました、って感じ。
390 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 02:22:51.64 ID:m1LOPf7I.net] >>389 いやFileSystemAPIと言うからにはエクスプローラで操作出来ないと駄目だろ。 機能としてはIndexedDBの方が上位互換なんだから、 独自ファイルシステムなら存在価値がない。 > 要はクロームアプリ同士で、ファイルが筒抜けにならんように隔離してみました この必要あるの? 具体的に言えばアプリのシグネチャ?でも混ぜ込んであるって事? ローカルストレージが共通なのが多少問題だったから仕切ったってわけか?
391 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 02:50:07.77 ID:m1LOPf7I.net] あー、つかお前らがよく使う言葉思い出したわ。 IndexedDBでもFileSystemAPIでも、 内部データを「追加/移動/削除」する為の機能を自分で作るのは、 「エクスプローラーの再開発」(車輪の再開発)なんだよ。 Windows上のエクスプローラーが使えたらそれが一番良いだろ。 ドラッグアンドドロップやプレビューの機能は全部持っているし、バグもないし。 つか何故いちいち「マイエクスプローラー」を開発しなければならんのよ? これが>>379 の勘違いに対するお前らの言葉での答えね。 そしてChromeは「マイエクスプローラー」の開発を強制するわけだ。 アホかねと。
392 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 07:34:32.01 ID:utwn7AiT.net] >>390 ブラウザってパソコン以外にも乗るじゃん。 その時、ファイルシステムなんて存在しないかもしれないよ。 って話。 >>390 例えば、なんかのアプリで保存したパスワードなんかを、別のアプリから覗き見出来ないようになってる。 >>391 世界中の人がWindowsのエクスプローラやマックのFinder使ってるから訳じゃないんだよw 内部データを追加、移動、削除するってのは、つきつめたらそれが機能なんだから。 お前が使いたいのがたまたまエクスプローラなだけだから、そう思うんだろうけど。 マイエクスプローラーではなくて、自分が使いやすいUI作れよ。 それか、どっかポート開けてwebDAVででも晒してローカルでマウントさせろ。
393 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 10:56:09.85 ID:uzkoNVx4.net] どうしてこういう人は、ライブラリを作ろうとはしないんだろう。 ディレクトリ一覧を帰す関数、あるディレクトリのディレクトリとファイル一覧を帰す関数、ファイルを新規、取得、更新、削除する関数を作っときゃ、それらの下回りがindexedDBだろうがサーバ関数だろうが関係無く透過的に扱えんじゃねえの? それこそ、内部実装無視してindexedDBに行ごとに入れようが、クソでかいオブジェクトとして入れようが、はたまたサーバに入れようが、ご希望の動きがすぐ書けると思うんだけど。
394 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 21:30:14.52 ID:m1LOPf7I.net] すまぬ、>>358 は間違い。 upgradeのときはe.target.transactionが最初から入っている。 昨日も確認したのだが、どうやら間違えたようだ。 これで修正出来たかは確認中。 これとは別に、createObjectStoreのoncompleteが少し早いタイミングで返ってくるらしく、 oncomplete直後にput等をせずに終了するとエラーになる。 これはupgradeのtransactionが並列出来ないということなので、 一旦closeして開きなおして並列性を高めようとしたが、失敗した。
395 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 21:40:34.14 ID:m1LOPf7I.net] >>392 未来のストレージがどうなるかは別の話だ。 FileSystemAPIはオレオレエクスプローラの再開発をしなくて良いのが利点であって、 それがないのならゴミでしかない。 お前が色々再開発をするのは勝手だけど、大多数の人にとっては、 普段使っている物がそのまま使えるのが一番分かりやすいUIだ。 Webアプリ間での相互アクセスを禁止するのはいいとして、 OSからの透過アクセスを禁止する意味はない。 ブラウザアプリからは常にブラウザ経由になるのだから、 アクセス権限、unixで言う644とか755とかを管理するのが一番簡単。 何でそんな糞仕様にしたのか意味不明。 ていうかChromeではBlobをIndexedDBにいれれないのか。使えねえ。 IndexedDBで両対応という作戦は頓挫した。根本的に練り直しだ。 てかマジでこの辺統一しろよな。 > While Firefox supports blob storage for IndexedDB, > Chrome currently does not (Chrome is still implementing support for blob storage in IndexedDB). > If you are targeting Chrome for your app and you want to store blobs, > the File System API and App Cache are your only choices. > However, AppCache storage isn't locally mutable, > and doesn't allow for fine-grained client-side management. > https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Introduction
396 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 21:41:45.37 ID:m1LOPf7I.net] >>393 それはお前が無能だからお前の周りも無能しかいないだけ。
397 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 00:24:48.05 ID:ua608nki.net] >>395 なら、エクスプローラーで管理しろよもう。 文句ばっか言って鬱陶しいわ。 electronでざっくり作るか、いっそcsで書けば?Windows()だけでしか動かないクソアプリを。 >>396 お前の事言ってるの。 俺はライブラリ作ってるよ。 オフラインアプリ用のスクリプトも画像も、ServiceWorkerとindexedDBで全部賄ってるから、「出来るのに技術的な問題だと思いこんでカスだなこいつ」って思ってんじゃん。
398 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 00:49:53.34 ID:fTj2N0cj.net] 今のところはそのつもりだ。cscriptと併用する。 Unix使いならcron位自分で書けということでいい。 もちろん他にいい方法が見つかったら変更する。 長期的運用を考えた場合、 ブラウザがクラッシュした時に破損する可能性がある場所はアーカイブとしては使えない。 また他アーカイバも既にあるので、それらとの相互運用を考えた場合も、 生ファイルシステムでないと駄目だ。 格好は悪いがこれが運用上は一番マシだ。 まあもうちょっと考えるが。
399 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 01:04:54.52 ID:ua608nki.net] >>398 生ファイルシステムほど不安定な場所もないと思うけど。 サーバ側mongo,クライアント側nedbで適当に同期すれば?
400 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 01:17:30.72 ID:fTj2N0cj.net] インストールが必要な時点でアウト。 というかお前は無駄にシステムをでかくする病気にかかっていると思うぞ。
401 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 01:47:37.85 ID:ua608nki.net] >>400 はぁ。 思い描くものがあれば説明してみ。 大体な、それは不可能と応えていくわ。
402 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 08:05:29.74 ID:ZcVGgUHo.net] システムをでかくする病気って言われても、要件が見えなさすぎるんだししゃーなくない? サーバ側ではデータベースに入ってんだろ?じゃあリプレイスすりゃいいじゃん。 むしろ、サーバのデータベースは何者かわからん。 アーカイブってなんだそりゃ。何のどんなアーカイブかわからんし、さらにそれが階層構造とか、階層構造はデータベースに入れられない()とか不思議発言過ぎるんじゃねえか?
403 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 08:18:51.01 ID:exF8NocQ.net] >>395 お前一体何時の記事見てんだよ。 MDNに頼るにしても最低でもLast updatedくらい見ろ。 もう何年も前にサポートされてるわ。 この手の情報は半年経つともう古い。 そして最終的にはブラウザのissuesやcommitsやソースコードを読まないと確かなことは言えない。 独自実装・勝手解釈・消費期限切れの塊であるMDNに1から10まで頼るのは危険。
404 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 11:20:47.03 ID:ZcVGgUHo.net] というかね、ミニマムなコード片書いてくれればいいと思うんだが。 書いて、あ、Blob入るじゃんって気づくから。 入らなければbase64なりにして突っ込みゃ良いだけだし。 そのまんま、自分のライブラリになると思うけど。
405 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 11:32:18.33 ID:ZcVGgUHo.net] ファイルが保存できればそれでいい、って言う割には、階層が、とか、自分の実装に凝り固まり過ぎだろ。 ただのrdbでもindexedDBでも フルパス|[パス,,]|ファイル名|拡張子|中身|更新日などの情報| って形で保存すりゃなんとでもなるだろ、常識的に考えて。 パスは、 file:// file://home file://home/xxxxx file://home/xxxxx/yyyyy の配列で持っといて。 あるパス以下の物→パスで絞れば一撃 あるファイル→ファイル名で一撃 あるパスのあるファイル名→フルパスで一撃 でカーソル取れんじゃん。 あとはよしなに処理すりゃいいんじゃねえの?その為のトランザクションなんだし。 ディレクトリごとにストア分けて、ディレクトリを削除するのに、トランザクション何個も張る羽目になるっしょ。
406 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 21:49:08.63 ID:fTj2N0cj.net] >>403 おおありがとう。Blobサポート済みか。 となるとボツではなくなった。 記事は古いとは思ったが、政治的案件は時間では解決しないから、どうせ駄目だと思っていた。 >>401 いやcscript併用案はもう既に動いている。 考え方は簡単で、ブラウザで出来ないのはローカルファイルのサポートだから、 それをcscriptにやらせるということ。 とはいえ読み出しには手動で指定が必要だから、それとどっちがマシかということになる。 俺が勘違いしていたFileSystemAPIは ・ブラウザ側で「あるディレクトリ」を指定。これはブラウザ側で手動でしか出来ない。 (指定方法の取り扱いは「ダウンロード」フォルダと同じ) ・そのディレクトリ以下は読み書き自由。 だった。 もちろん生ファイルシステムでOS側からは直接読み書き変更可能。 ブラウザ側からのアクセスはWebアプリ毎にアクセス権が設定されている。 というかこれ以外のFileSystemAPIなんてゴミだろ。 あの糞仕様なら誰も使わない。使う意味無いし。 JavaScript界隈で思うのは、「使ってない奴」「三流プログラマ」が仕様を策定しているということ。 だから「使えない」「使いにくい」仕様が溢れかえっている。FileSystemAPIがゴミなのもこのため。 従来は仕様策定に関われる時点でそれなりの実力者しかいないからこういう事はなかったが、 良くも悪しくもJavaScriptはWebだって事だね。 >>405 つ薬
407 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 22:55:54.15 ID:exF8NocQ.net] exeみたいな実行形式やそのOSで特別な意味を表すシステムファイル等として書き出されちゃまずいので実態は偽装される様になってる。 ゴミというか、実験的で気まぐれな機能。もう何年も更新されていない。 誰も使わない、でもブラウザ内部では使われている。別に広く使われることを期待されていない。 IndexedDBやCacheDBの存在で意義をなくしつつある。 柔軟に検索したいなら前者、そうでないのなら後者をどうぞ。 君が望むようなファイルシステムAPIなどがなかなか策定されないのは幾つか理由がある。 でも技術的要因は取り除かれてきた(例えばPermissions API、Web App Manifest)ので、 あとは需要と雛形とブラウザベンダーのやる気次第。 とはいえ今はCSSや他の比較的低レベルなAPIが盛り上がっていて注力してるから後回しだろう。 W3CのMLを見ても「いくつか議論の余地がある」レベルの関心だ。 今はまだアイディアを貯めている段階だろう。
408 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 23:01:47.75 ID:exF8NocQ.net] あーでもやっぱりそろそろ動き出すかもな。 https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/_6Euwqv366U これが落ち着けば足回りが揃うから。
409 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 23:50:21.90 ID:fTj2N0cj.net] >>407 > exeみたいな実行形式 Webアプリから起動出来なければこれは問題無いだろ。 > OSで特別な意味を表すシステムファイル等 要するにシンボリックリンク等で全部筒抜けになる場合だろ。 これも結局Webアプリ側はブラウザを通しての作成しか出来ないので、それを止めればいいだけ。 OS側からシンボリックリンクを貼ったり、exeを置くのは自由でいい。 Webアプリ側でexeを起動出来ず、シンボリックリンク等を作成出来なければいいだけ。 つまりファイルは「データ」としてしか扱えないという、実装するにも至極簡単な制限でしかない。 FileSystemAPIははっきり言って使う気がない仕様を策定してる。だったら策定しない方がマシ。 まあ策定してから捨てるというのがJavaScript流ではあるようだが。 > IndexedDBやCacheDBの存在で意義をなくしつつある。 結局の所、「勝手に削除される可能性がある」時点でアーカイブとしては使えない。 見たところここを保証する気はなさそうなので、 今回俺がこれらをメインに据えることは出来ないし、 どのみち「削除されない」ストレージも必要になると思う。
410 名前:デフォルトの名無しさん mailto:sage [2016/08/23(火) 23:50:56.04 ID:fTj2N0cj.net] > Both Microsoft Edge and Mozilla Firefox are implementing the subsets documented in "File and Directory Entries API" for compatibility with Chrome in supporting Directory Upload. 正直これさっさと実装しろというのはある。 ディレクトリ指定出来ればUIが全然簡単になるから。 あとIndexedDBも全然こなれてない。 createObjectStore.oncompleteのタイミングがおかしいのは既に言ったが、(>>394 ) それとは別にキューの実装もおかしい。 トランザクションがロールバック単位なので、 当初は各リクエストそのままで500トランザクションとか送ったら 「多すぎてキューに入りきりません」とエラーになった。 普通はキューは動的に確保すればいいので、500程度でオーバーフローとかアホかと思ったが、 そんなことを言っていても仕方ないので数珠繋ぎ方式に変更、トランザクションは数個に絞った。 ただそれでもごく偶に、しかも一つ目のトランザクションで同じエラーがでる。 つまり、IndexedDBのキューの実装はバグってる。 なおChrome50。Vistaなのでこれ以上更新出来ないし。 結局の所、大多数が使っている機能じゃないとバグ報告が上がってなくてバグが残っている。 IndexedDBもまだその程度だよ。安心しては使えない。 ただ従来方式の「ダウンロードリンク」を使うにしても、 1日10万ダウンロードとかになるので大丈夫なのか?という疑問はあるが、これも試すしかない。 (ダウンロードは履歴が残るようになっているので、手動ではあり得ないほどの数になると、 履歴がオーバフローするバグが残っているのではないかと恐れている。 これも知ってたら教えて欲しいが。)
411 名前:デフォルトの名無しさん mailto:sage [2016/08/24(水) 00:44:52.82 ID:dKh15413.net] >>406 お前のコードこそ、特定のプラットフォームか外出てるじゃん。 どう使いにくいのかが分かれば良いんだが。 もう老人であたらしいこと覚えられないならご愁傷様。
412 名前:デフォルトの名無しさん mailto:sage [2016/08/24(水) 00:48:32.19 ID:1m5/CfUP.net] >>410 トランザクションがROLLBACK単位とか言うか 適宜コミットして、setTimeoutで遅延させてつかえよ。 ボンクラすぎるだろ。 タイミングも合ってるよ。 脳みそ腐ってないならば、ぜんコード上げてみろよ。見てやるから。
413 名前:デフォルトの名無しさん mailto:sage [2016/08/24(水) 00:52:22.97 ID:7vNot/FK.net] IndexedDBが小慣れていないと言われてるのは周知の事実。 が、機能は揃っているので上で言われてるように 大抵皆ライブラリを書いたり、使ったりして問題なく過ごしている。 君のここまでの書き込みは全然建設的じゃないし、 ほんとにバグがあるのか、もしくは君の方がが小慣れていないのかが分からない。 結果、ただの愚痴にしか聞こえずそれに対して何も言えることはない。 せめて再現するための最低限のコードを載せてくれ。 あと10万ダウンロードはやめとけ。ZIPなどに圧縮すればいい。 もしくはもう一般WebAPIだけで作るの諦めろ。 一般公開するかは知らんが、それだけの機能なら 拡張機能もしくはブラウザアプリにしてインストール必須にしても構わないだろう。
414 名前:デフォルトの名無しさん mailto:sage [2016/08/24(水) 02:09:31.50 ID:fG60fvYz.net] >>413 > ほんとにバグがあるのか、もしくは君の方がが小慣れていないのかが分からない。 これはその通り。当初の>>358 は間違いだったからね。 ただ仕様は大体理解したので、多分>>394 と>>410 はバグだ。 とはいえ切り分けはしない。 最新版が使えない状況で切り分けて報告する意味はないので無駄だから。 (最新版では既に治っているかもしれない) 俺については「バグがある」という認識で使うか、使うのを止めるかでしかない。 つまり他の方法も試して一番マシな方法を使うだけ。 ちなみにchromiumに対してバグ報告もしたことあるし、受け付けられてもいるよ。 ただそれをやるにしてもここでやる意味はない。直接報告すればいいだけ。 コードはここには上げない。 コピペすればいいだけのコードすら協力してくれないお前らに対して期待はしていないし、(>>270 ,279) 話を聞く限りお前らの腕前/デバッグ出来る範囲を完全に超えている。 コードを上げてもお前らでは何も出来ないよ。 いずれにしても既に公開はしているから、勝手に探せばいい。 100kダウンロードはその話だと試したわけではないんだろ?だったら俺が試すだけだよ。 ZIP化してもいいが取り扱いが面倒になるだけだから、いければ生ファイルで行く。 > 拡張機能もしくはブラウザアプリにしてインストール必須にしても構わないだろう。 これは何が違うんだ?調べた限りでは大差ないようだったが、違うのか? なお今回欲しい機能は以下。 ・ローカルファイルからのユーザ指定無しでの読み込み ・ダウンロード時のフォルダ指定(階層化したフォルダに対してのダウンロード先指定) これらが出来るのなら乗り換えを検討する。 ちなみに今のところGreaseMonkeyで不自由していない。 ただ、GM専用機能も使ってないので、乗り換えは出来る。
415 名前:デフォルトの名無しさん mailto:sage [2016/08/24(水) 02:10:28.07 ID:fG60fvYz.net] > 君のここまでの書き込みは全然建設的じゃないし、(中略) > 結果、ただの愚痴にしか聞こえずそれに対して何も言えることはない。 上記の通り、俺は相談以上の期待をお前らに対してはしていない。 だから気に入らなければレスくれなくていい。 (上記経験により俺もそういう距離感で行くことにしたから) そちらも分かるように、どこまでの情報があれば何を回答出来るかはこちらも分かっている。 その上で書いているのだから、それについては無理という件については無視でいい。 馬鹿共は置き去りにしないとスレのレベルが上がらない。 その上でバグ確認に協力してくれるというのなら、 それは申し訳ないが今回はそこに踏み込む気はない。 理由は上記どおり、最新版でないと意味無いから。 そちらが既にバグに当たらない記述のライブラリなりを持っているのならそれで問題ないわけだし。 心配せずともchromeなんてバグだらけだぞ。 こなれていないところに踏み込んだらすぐに遭遇する。 それはそちらも知っていると思うが。 君らは気に入らないかもしれないが、俺は情報をくれた奴には感謝している。 ただ君らが「持ちつ持たれつ」という感覚を持ち合わせていないことも学習したから、 君らに大して期待もしていない。だから再度言うが、気に入らなければ無視でいい。 (というかこれまでの俺が甘かっただけで、本来は君らのスタンスの方がここには向いている)
416 名前:デフォルトの名無しさん mailto:sage [2016/08/24(水) 02:47:00.24 ID:fG60fvYz.net] >>413 > IndexedDBが小慣れていないと言われてるのは周知の事実。 ちなみに俺はJavaScript屋ではないから、 こういう、「周知の事実」ってのは知らない情報だ。 だから君にとっては大したことなくても、俺にとっては助かっている。 その「周知の事実」にアクセス出来る人に対してこちらから提供出来る情報はほぼ無い。 せいぜい遭遇した事実/外部目線で見た感想を垂れ流すことくらいだ。 で、これを既にやっているわけだが、 結果、愚痴にしか見えないというのなら、それはそれで仕方ない。 残念ながら、こちらが「情報交換」として提供出来るのはこの程度でしかないんだよ。 何が君らにとって有意義な情報かもこちらには分からない。 だからとりあえず垂れ流すのみ。
417 名前:デフォルトの名無しさん mailto:sage [2016/08/24(水) 07:24:26.62 ID:dKh15413.net] 何様かわからんな。 出せる情報もなく、教えてくれって虫が良すぎるだろ。 Qiitaにでも行ってくれば?
418 名前:デフォルトの名無しさん mailto:sage [2016/08/24(水) 08:19:51.08 ID:u65p5RKL.net] 俺はindexedDBを商用製品に普通に使ってる(しかも、ローカルへのキャッシュとして)から、ぶっちゃけどんなドヤされても、こいつの書いた実装が悪いんだろうなとしか思えん。 トランザクションで500件を超えるって、そんなデカいアトミックな操作が思いつかんレベル。 ファイルの取得であれば、保存できればそれでワントランザクションだろ。 関数越えてトランザクション持って回って、どっかで非同期な呼び出しがあってカーソル見失った瞬間にトランザクション失敗してるんじゃねえの? とかそんな感想。 ある一定バージョンのファイルセットが取得できるまでをトランザクションと見なすなら、バージョンごとに仮データとして保存するトランザクションと、 古いセットを削除して、仮データを有効データに更新するトランザクションの二本で充分でしょ。 なんで、自分より相手方の方が馬鹿に違いない、と思えるのかわからん。 俺もコミッタだけど、その発想でプルリク投げた事は無いわ。
419 名前:デフォルトの名無しさん mailto:sage [2016/08/24(水) 08:36:10.31 ID:u65p5RKL.net] ダウンロードリンク、の代わりにindexedDB使う発想がわからん。 何がどこにどうダウンロードされるんだろう。 それはローカルに持ってたらどう便利なんだろう≒ローカルにあれば二度と押さないボタンなんだろうか? なんか(アーカイブってのが何のアーカイブかはわからんが)ウェブから取得させるときに、二回目以降はそのクライアントのデータを使わせて、ダウンロードしたフリすれば良いの? サービスワーカーで書いちゃだめなの?その処理。
420 名前:デフォルトの名無しさん mailto:sage [2016/08/24(水) 08:45:06.93 ID:7vNot/FK.net] >>416 おいおい、はぶてんなってw 建設的でないどころではなくなってるぞ。 これだけ皆が比較的長文で沢山レスして構ってくれてるんだから あとは君の態度次第で強力な仲間となるだろうよ。 答えをもらう代わりに問題をきちんと問題として認識できる形であげれば それで十分「交換」になる。 あとDLに関しては500くらいで試してみて。 確かpermissionの取り方によるのか知らんが50か100毎に確認出たはずだから。 ファイルごとにオーバーヘッドもかかるだろうしアーカイブ化した方がいい。
421 名前:デフォルトの名無しさん mailto:sage [2016/08/25(木) 00:05:19.06 ID:eAOsu6G6.net] >>420 1日500DLなら現在味見中で、既に2週間ほど動作して問題は発生していない。 確認は一度も出ていない。ただ、出る環境の場合はこれは使えないのも確かだ。 まあ500DLなら人力でも十分あり得る範囲、さすがにこれでバグ遭遇はない。 ローレベルでのファイルのオーバーヘッドはない。 そもそも自動アーカイブはほぼ書き込みばかりだから投げ捨てだ。 また、データの大半はjpg等の圧縮済みファイルだ。 (個数としてはテキストの方が多いがjpg一枚でおつりが来る) だからzipというよりtarなんだが、それもしない方がいいだろうという読みだ。 まあここら辺はこちらで試す。 > あとは君の態度次第で強力な仲間となるだろうよ。 セミコロンの位置でドヤア()、文法でドヤア()する奴がいくら居たって邪魔なだけ。 俺について助けになるのは、プログラミング上級者(10k行のコードを平気でメンテ出来る)か、 俺以上にJavaScriptの仕様に詳しい連中だけだ。 後者については俺がJavaScripterではないのでここの連中でも当てはまるケースも多い。 それが俺がここにいる理由。 前者について当てはまるのはここには居ても数人だ。 だから内部構成についての指摘は大半が俺から見ればデタラメに過ぎなく、ウザイだけ。 よって、そっちに流れないように上位アーキテクチャの話に絞っているわけでね。