板検索:
JavaScript情報交換所(プログラミング既習者専用) (526)
まとめビュー
1
デフォルトの名無しさん[]   投稿日:2015/12/07 07:26:33  ID:NYLGCW0V.net
実際にJavaScriptを書いている人の情報交換所です。
プログラミング既習者専用です。初心者の方はご遠慮下さい。
玄人の方、歓迎致します。
コメント6件


2
デフォルトの名無しさん[sage]   投稿日:2015/12/07 07:27:56  ID:7ldc1+VM.net
↓ こちらへどうぞ

【JavaScript】スクリプト バトルロワイヤル52【php,py,pl,rb】 [転載禁止](c)2ch.net
【JavaScript】スクリプト バトルロワイヤル52【php,py,pl,rb】

3
デフォルトの名無しさん[]   投稿日:2015/12/07 13:08:45  ID:ZskqcMPL.net
JavaScript リファレンス - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference

4
デフォルトの名無しさん[sage]   投稿日:2015/12/07 21:04:06  ID:Pr/O+rrT.net(4)
(1) プログラミング既習者専用です。初心者の方はご遠慮下さい。(大事なことなのでry
  ここで言う初心者とは、3,000行のプログラムを動かすのにも苦労する人達のことです。
  なお、JavaScriptの習熟度は問いません。
  言語を問わず、3,000行程度なら楽勝であれば問題ありません。
(2) 初心者だと思える投稿は無視してください。初心者用スレは他に沢山あります。
(3) 質問スレではありません。特に初心者からの質問はガン無視でお願いします。
(4) 長文が読めない低脳はお引き取り下さい。

【リンク集】
https://developer.mozilla.org/ja/docs/Web
https://msdn.microsoft.com/ja-jp/library/yek4tbz0.aspx (JavaScript)
http://hakuhin.jp/js.html (逆引き)
http://stackoverflow.com/

他仕様書等のリンクは質問スレのテンプレを参照してください。かなり整備されています。
プログラミング既習者であれば、MDNとMSDNでほとんど事足ります。
ブログ等は間違いが多すぎるので、MDNのサンプルコードから出発することを薦めます。
逆引きなら上記hakuhin.jp、困った場合はstackoverflowが秀逸です。

【初心者用スレ】
JavaScript の質問用スレッド vol.118 (ム板質問スレ)
+ JavaScript の質問用スレッド vol.118 +
ECMAScript デス 5 (ム板仕様スレ)
ECMAScript デス 5
【超初心者用スレ】
JavaScript の質問用スレッド vol.127 (Web制作板質問スレ/頻繁に分裂中)
+ JavaScript の質問用スレッド vol.127 + /Web制作板

テンプレは>1>4

5
デフォルトの名無しさん[sage]   投稿日:2015/12/07 21:06:06  ID:Pr/O+rrT.net(4)
[状況]
Web制作板はIDが出ないのでアフィカス/teratailerが暴れている感がある。
「1〜10まで足す」みたいな質問にも回答が付くという奇妙さだ。
また、ライブラリ厨の意味無い布教活動も嫌がられている。
個人的には低脳アフィカスが一番の癌だと思うが、
奴らは印象操作が目的なので反論されても喚きちらすだけ。
もう超初心者スレとして分離するしかない。
回答する奴も初心者なのでデタラメだらけだが、あいつらにはそれでも問題ない。
明らかに間違っている事を正しいと言い張る馬鹿共を矯正する方法は2chにはない。

ム板の質問スレはIDが出るので、逆に言えばIDが出て困る奴はいない。
ほとんど流れていないが、質問すればWeb制作板と同レベル以上の回答は付く。
まともな回答を期待するのならこちらに投稿した方がいい。ただし回答が付くまで時間がかかる。

Web制作板の方はIDが出たら困る奴が「流れているスレ」として見せるために無理矢理流している感がある。
このため、上記のように、ただ単に無視すべき投稿にもレスが付く、どうしようもないスレになっている。
また、どうでもいい一般論を投げかけ、無理矢理流そうとしているものも散見される。
やりたい放題やられているわけだが、しかしその先には何もないように思えてならない。
何がやりたいのかはかなり疑問だ。ただ、止める方法もないので、分離するしかない。

仕様について厳密に詳細を確認したければECMAScriptスレがいい。
正直、他も含めてJavaScriptスレ住民の仕様に対するこだわりは異様だと思うが、
逆に言えば、厳密に議論したければ相手はそこにいる。
ただしそいつらは仕様にはすごく詳しいが、コードは記述していないらしく、
何が本当に問題なのかを実感できていない。
だから地に足のついていない議論になってしまう。
とはいえ、詳しいことは事実だ。だから仕様について正確を期すのならそこがいい。

6
デフォルトの名無しさん[sage]   投稿日:2015/12/07 21:36:46  ID:Pr/O+rrT.net(4)
以上、どうしようもないスレばかりなので新しく「プログラミング既習者専用」スレを立てることにした。
現時点でまともな奴がほぼいないので、新しく訪れてくれる人を待つことになる。
気長な話になるが、やらないことには始まらないので、とにかく始めることにする。

3,000行についてだが、OAOOはもちろん徹底しているとして、
1,000行なら勢いで書いてしまえる規模だ。
ところが3,000行となると、内部構成をある程度マトモに設計していないと破綻し始める。
逆に言えば、内部設計を正しく行い、かつ実装できる人の目安として3,000行を楽々、とした。

7
デフォルトの名無しさん[sage]   投稿日:2015/12/07 21:39:35  ID:Pr/O+rrT.net(4)
[状況追加]
11/28に立てたスレ(同スレタイ)
JavaScript情報交換所(プログラミング既習者専用)
が何故か1週間で落ちたので、もう一度立て直した。

2ヶ月以上書き込みがないスレもこの板にはあるので、書き込みが無くて落ちたわけではなさそうだ。
削除依頼も確認してみたが、該当はなかった。
質問スレがvol118, vol124と完全に被っているのに放置されているため、重複削除でもない。
原因が不明のため、とりあえず再び立てて様子見することにした。

一応7日ほどは持っていた(はず)なので、4-5日程度毎に俺が話したい案件を上記前スレ
JavaScript情報交換所(プログラミング既習者専用) 4-7
からコピペしてきて落とし、これでしばらく持たせる。
もちろんそれ以前に話題があれば勝手に開始してくれて構わないし、
俺の案件についてレスを付けてくれれば応じる。

このスレの狙いは、まずは人を集めることだ。だから半年以上持たせる必要がある。
あの質問スレの状況だと、まともな上級者はウザがって寄りつかない。
上級者を集めたいのなら、彼等にとって読む価値のあるスレを用意して待たなければならない。
これには時間がかかる。機能するには半年以上かかるだろう。
しかし、やらないことには始まらないので、とにかく始める。

出来るだけ落ちないように努めるが、いかんせん基準が分からないのでまた落ちるかもしれない。
その場合は再び立て直すが、それにしても落ちまくるのは問題なので、
基準を知っている人がいたら教えて欲しい。
コメント2件

8
デフォルトの名無しさん[sage]   投稿日:2015/12/08 09:13:19  ID:DJ+OQKIp.net(3)
>7
10レス未満だと落ちるよ
コメント2件

9
デフォルトの名無しさん[sage]   投稿日:2015/12/08 09:14:10  ID:DJ+OQKIp.net(3)


10
デフォルトの名無しさん[sage]   投稿日:2015/12/08 09:14:58  ID:DJ+OQKIp.net(3)

11
デフォルトの名無しさん[sage]   投稿日:2015/12/08 21:57:28  ID:lwK5Kg+O.net
>8
ありがとう。了解した。
とはいえ予定は7の通り。

12
デフォルトの名無しさん[sage]   投稿日:2015/12/11 22:17:41  ID:D3bPQRrf.net
>8
EMCAスレが落ちているのを確認した。
10スレ未満は丁度1週間で落ちるようだ。

それはそうと、現実問題として上級者がJavaScriptにはいない(いにくい)のかもと思うようになった。
元々は単なるヘルパースクリプトで、質問スレ見ても分かるとおり、単発の修正とかに使われていた。(はず)
今なら「PHPでやれ」と回答すべき案件等と言えば分かりやすいか。
Ajax以降は必要となれば大型化するが、クライアント側に大型データ構造を持つ使い方は自然ではない。
MMORPG等をWebGLで実現するにしても、クライアント側は描画に徹してデータはサーバ側に送るのが普通だ。
だから内部構造にこだわるべき中級者以上が育たない(必要ない)環境なのかもしれない。
あるチームでサーバクライアント型アプリ(ゲームでもチャットでもいいが)を作るのなら、
サーバ側に実力者を振り分けなくてはならないのは自明だ。

とはいえ、出てくるかどうか待ってみることにする。
ググれば分かるとおり、奴らはQiitaが好きみたいだが、俺は匿名の方がいいと思っているので。
とはいえ、匿名掲示板はどうしても雑音が多すぎる。
彼等がQiitaのほうを好むのなら、いくら待っても空振りで終わる。
それでも俺は試してみるが、盛大に空振りするかもしれないのでそのつもりで頼む。

13
デフォルトの名無しさん[sage]   投稿日:2015/12/13 21:10:31  ID:l4buRphf.net

14
デフォルトの名無しさん[sage]   投稿日:2015/12/15 20:58:50  ID:tWI33UQV.net
ECMAスレに居た人と実際にコードを書いてる人は層が違うと思うけどな。
言語仕様を愛する人と、WebAPI技術を愛する人と、フレームワークを愛する人は違うだろうし。
コメント1件

15
デフォルトの名無しさん[sage]   投稿日:2015/12/15 22:49:00  ID:Lzs/Av6i.net
>14
ああ、あれは明らかに違う連中だ。少なくとも俺と同じ側ではない。

プログラミングなんて本来は手段、従ってプログラミング言語は包丁であって、
もちろん包丁職人やコレクターもいていいが、道具として使う料理人が一番多いのが普通。
しかし彼等は異様に細部にこだわっている。彼等は何者だと思う?

そもそも仕様仕様とうるさいのだが、仕様の細部なんて使わないのが普通だと思うのだが。

Q. String が期待される関数 function func(str) に対して Array が与えられた場合はどうするべきですか?
A1. 当然暗記している型違い時の変換規則を活用し、適切に対処します。
A2. それはただのバグです。

型付き言語だとそもそもA1はコンパイルが通らない。
俺は型付き言語出身だから、当然A2で組んでいる。使う予定のない変換規則なんてどうでもいい。
ところが彼等はこれじゃ駄目だと喚く。
でも具体的にどう活用すればメリットがあるのかは示せない。
何なんだよいったい、と思う。


ところで連中は立て直さないのかな?
コメント1件

16
デフォルトの名無しさん[sage]   投稿日:2015/12/15 23:46:05  ID:bVMdPRVE.net
>15
それはダックタイピング系のことをちょっと大げさに捉えすぎて無いかい?
それと引数の型についての選択肢としては
A1.何も気にしない
A2.極力活用するよう努力する
A3.型チェックをしてエラーとする
の3つだろう。
例えばpromptの返り値のstrに対する処理をコードにするとこう
A1. str.slice()
A2. (str||'').slice()
A3. if(typeof str!=='string')throw 'No!';str.slice()

で、
A1派は、メソッドを持っていればそれで処理をさせて問題ない。
null等は自動的にエラーになるのでちょうどいい。

A2派は、どちらにしろ空の値はpromptをやり直したり別途特別な処理するんだろうから
nullなど無効も極力エラーは出さず空の値と評価してやるくらいがちょうどいい。

A3派は、来て欲しい型でなければエラーとするのが最も安全。

というような主張だろうが、君はどんな主張で、どんな主張に納得してないの?
コメント2件

17
デフォルトの名無しさん[sage]   投稿日:2015/12/16 00:04:47  ID:4ol9X0cq.net
また型が把握できる場合と、何が来るか本当にわからない場合では当然スタンスが違うと思う。
後者でいうと、Stringが期待される場面でArrayが来た場合なんてどうしようも無いだろうが、
Arrayを期待する場面なら他のArrayLikeなオブジェクトもArrayとして見てやるべきじゃないかという論になる。

そこで、また派閥が分かれるだろう。
何もしないまたはエラーとする(Array.isArray)(Arrayだけしか面倒を見ないから)、イテラブルだけ面倒見る([...arg])か、
多くのArrayLikeを面倒見る(Array.from(arg))か、何もしないまたはエラーとする(例えArrayに変換できなくともArrayのメソッドを持っていればよい)
また、配列の使い道によっては@@isConcatSpreadableを考慮するかどうかも問題になってくるだろう。
コメント1件

18
デフォルトの名無しさん[sage]   投稿日:2015/12/16 00:25:57  ID:bKnAvTte.net
まあ本当にそっち系の人はこんなもんじゃないか。
Object.prototype.toString.call(arg) == '[object Array]'
とArray.isArrayの違いとどちらが適切かを語るレベルまでいけば一人前か。

まあ彼らは意味に敏感なんだろう。
配列を期待するといっても、配列はいろいろあるし、期待の仕方もいろいろある。
なまじいろいろ知ってるだけに細部に拘りたくなるのだろう。
コメント1件

19
デフォルトの名無しさん[sage]   投稿日:2015/12/19 02:38:04  ID:BBkFE1FJ.net(9)
都合上、>7の前スレの内容を先に全て落とす。
以下4投は転載。

20
前スレ4[sage]   投稿日:2015/12/19 02:38:56  ID:BBkFE1FJ.net(9)
とりあえず俺が話したい項目を挙げておく。
気になる物があれば勝手にレスを付けてくれ。
もちろん他の誰かが勝手に始めてくれても構わない。
俺も気になれば勝手に参加するし、どうでもよければ無視する。

使い方は基本的に他のスレと同じ、ただし初心者お断り、だ。

21
前スレ5[sage]   投稿日:2015/12/19 02:39:25  ID:BBkFE1FJ.net(9)
・コーディングストラテジー
+ JavaScript の質問用スレッド vol.126 + /Web制作板
+ JavaScript の質問用スレッド vol.126 + /Web制作板

JavaScriptに於けるコーディングストラテジーだが、単純には以下2つのどちらかだと思われる。

α. 安全重視、全箇所で型/値チェック。
β. 簡素化重視、最初に型チェック、以降は「型」までは確定、値については保証無し。

αは関数単位で抜き差しが可能。その点機能の追加/削除は楽だ。
各関数は型判定等を持つため複雑になるが、安全領域を管理する必要がない。

βは期待される型以外では何も考える必要がないため、その分関数の仕様が小さくなり、
デバッグが楽でバグも出にくく動作も速くなる。ただし、型チェックを既に通っているかを管理する必要がある。
ネットワークに於けるファイヤウォール内/外の管理のようなものだ。
基本的に関数毎の抜き差しはできない。型チェック部分+動作部分のセットでやらないと駄目だ。
だから関数単位での粗結合化はできない。

俺はβでやっている。
そして現実的にはβしかないように思えるのだが、どうか?
可能であれば直接本職の方々の意見が聞きたいが、
JavaScriptはソース見放題だから、企業のサイトのソース(=本職製)からの類推でもいい。
ダックタイピングを生かすのなら多分αじゃないと駄目なのだが、
俺は型システムに慣れているというのもあって、今のところダックタイピングの利点を感じられない。
αだと各関数で様々な型を処理しなければならず、これがバグの元になるので、
最初からStringならStringと決めうちで各関数を用意、Stringしか入力されないように上位階層で対応している。
コメント1件

22
前スレ6[sage]   投稿日:2015/12/19 02:39:52  ID:BBkFE1FJ.net(9)
・プロトタイプの活用
静的クラスでは出来なくて動的プロトタイプでは出来ることを使って、何かできないか。
今思いつく中では、以下がある。
A. 動的プロトタイピング(__proto__の頻繁な変更)
B. インスタンスツリー
C. 親への透過的アクセス(親に動的に追加されたプロパティに対する透過的アクセス)

Aは変更自体はやっているが、頻繁に変更する需要がないのでそれ以上試していない。
Bは現在試しており、見にくくなる以外の弊害はない。見にくさについてはデバッグ用環境を整えて対応した。
メリットはフィールド共有によるフットプリント削減だが、
しかしこれはあらかじめ共有すると分かっていれば静的クラスでも出来る。
デタラメに共有したりしなかったりする場合も、
共有する派生クラスと共有しない派生クラスを用意すれば、静的な場合は対応可能になる。
従ってどうしてもというのならやはり動的なものに限られてしまうのだが、これは需要がない。
Cは試したいところだが需要がない。

従って、仕様としては出来るが、実際の需要がなく、活用できていない。
他の活用案もあれば是非。

23
前スレ7[sage]   投稿日:2015/12/19 02:40:19  ID:BBkFE1FJ.net(9)
・ダックタイピングの活用
共通基底クラスを持つ場合、当然ポリモーフィズムできるとして、
ダックタイピングの場合は、共通基底クラスを持たなくても、共通の名前のメソッドがあればポリモーフィズムできる。
だからといっても、活用案がないので、事例があれば是非。

24
デフォルトの名無しさん[sage]   投稿日:2015/12/19 02:41:08  ID:BBkFE1FJ.net(9)
以下、全て>16の定義で。

>16
こちらは基本A1で組んでいる。初段はA2もあり得る。
理由は>21のとおり、入力段で型を確定させる方が楽だと判断しているから。

JavaScriptの場合、型が確定しないのはDOMか鯖からの入力に限られる。
だから最初の段で型を確定させ、以降は型確定で組んでいる。
この場合、型確定エリアと型不確定エリアが明確に分離されるので、型確定を忘れるとおもむろにバグる。
しかしこれは前述のように限られており、見落としたりする心配はほぼ無い。

型を不確定のまま伝搬させるのは余計に難しい。だから通常あり得ない。
となるとA2/A3が必要なのは「どこから呼ばれるか分からない」という関数だけになる。
(型不確定エリアからの直接呼び出しがあり得る)
これについてはプログラムを見てそういうことがないように確認すればいいという事にしている。

というわけなのだが、どうかね?
A2/A3は関数の機能としてはA1のスーパーセットになる。型が予想外の時の分だけ仕様が大きい。
だからA1で組んでしまうのが楽だ。問題は見落としがある可能性が残る点。ただし、これは見やすい。
A2/A3の場合は見落としは考える必要はないが、
個々の関数が全ての型について設計通り動くことが求められるので、
テスト項目が多くなり、またバグを誘発しやすいと見ている。

ちなみに、「何が来るか分からない時でも正常動作」というのは、考えていない。
というか、その時はバグっていいという判断だ。
・入力が明確に間違っている場合、再入力を求める。誤入力状態での表示はどうでもいい。
・Ajax結果が不正の場合、リロードする必要がある。このときも表示はどうでもいい。
所詮はヘルパースクリプトだから、この辺で留めている。

25
デフォルトの名無しさん[sage]   投稿日:2015/12/19 02:42:15  ID:BBkFE1FJ.net(9)
>17
それはダックタイピングだと思うが、正直俺はその点に関しては気にならない。
期待通り動けば何でもいい。
気になる人は例えばtoString()の解釈について、
・ダックタイピングだ。toString()があるから使えるだけ。
・各型についてtoStringというインタフェースが実装されているのだ。
・toString()はテンプレート関数で、各型についてオーバーライドされているのだ。
と考えることが出来るかもしれないが、俺はどれでもいいと思っている。
JavaScriptはthisを関数側に持たせているため、callを使って他型のprototype等を間借りすることが出来る。
これは便利ではあるが、しかし真面目にインタフェース等で実装すれば済むことが大半だ。
だからこの方式もthisがいちいちはがれてbindしなければならない方が面倒だ。
classシステムのようにインスタンス側にthisを持たせる方が理に適っているように思う。

26
デフォルトの名無しさん[sage]   投稿日:2015/12/19 02:42:41  ID:BBkFE1FJ.net(9)
Array.from()を実装したとして、それがどこまでの範囲で使えるのかは「使う側が確認する必要がある」とする。
つまり、callで突っ込むのは勝手だが、ちゃんと動くかは「確認しろよ」ということだ。
その手の動作範囲を広げていくのは、YAGNIとかKISSとか言われるらしいが、大体無駄に終わる。
だからArray.fromの実装側は自分が使う最小限に留めて良く、間借り側が正常動作を保証しろと考える。
これはおそらくJavaScriptの思想とも合致している。
ArrayのメソッドはgetElementsByTagName等で返されるCollectionに対しても大体動作するが、
動作の保証はしていない。
つまり、間借り側(Collectionでcallする側)が正常動作を保証(確認)する必要がある。
クラスシステムの場合、実装してあれば確実に動作するし、実装していなければ動作はしない。(間借りも出来ない)
JavaScriptの場合は、使えそうなら使ってねといういかにも曖昧な感じで、それでいいのか?という疑問はあるが、
上記のように、「バグってたらリロードでおk」ならこの方が色々楽なのは事実だ。

結局の所、出自が(というよりも今も大半の用途でも)チョロスクリプトなので、それ向けに仕様がチューニングされている。
これで大規模なプログラムを組むのがそもそも無理がある、ということなのだとは思う。
チョロスクリプトとして使う分には、なかなか面白い仕様だと思う。
コメント1件

27
デフォルトの名無しさん[sage]   投稿日:2015/12/19 02:43:14  ID:BBkFE1FJ.net(9)
>18
それは同じだと思うが、違うのか?
=== なら以下にポリフィルとしてそのまま記載されている。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objec...
== の場合もその場合は危険性がないように思える。
ただし、これについては俺は真面目にやってないので自信はない。
ただ、そもそも「文字列との比較は === 」というのが lint で引っかかるので、常にそうすればいいだけだ。

> なまじいろいろ知ってるだけに細部に拘りたくなるのだろう。
これはあると思う。
あれだけ仕様が小さくて頭の中に入りきるサイズだから、というのはかなりあると思う。
C#やJavaなら調べながらのコーディングになるので、気にしてられない。
コメント1件

28
デフォルトの名無しさん[sage]   投稿日:2015/12/19 04:44:14  ID:WePRjNql.net
>26
問題はArrayが少し変わったオブジェクト程度であること
そしてArrayのメソッドは、ArrayLike(この場合lengthを持つもの)について保証していて最初からそのように作られている
JSにおいて配列の最も基本的な定義はlengthプロパティに要素の長さを記録しているもの程度のことでしかない
当然DOMの配列でも動くし、型付配列でも動く
それなのにわざわざArrayだけでしか動かなくする必要があるのか?

ここがミソで、わざわざArray以外にも対応する、のではなく、わざわざ対応しないようにするのかと考える
Array.isArrayは型付配列すらtrueを返さない
isArrayは配列がどうかのチェックではなく、Arrayかどうかのチェックだ

配列を扱うとする関数でArrayだけに絞るのはJSにおいて必ずしも十分ではないということだ
その関数を作る目的と使われるシチュエーションを考慮しないといけない

>27
@@toStringTagをお忘れかな?
===の件もそうだな
どうして必要もない制限をわざわざするのか?と思ってしまう
というのは半分ウソで、実際は他の演算子と文字数が違うものを基本で使うのは気持ちが悪いから==を基本で使う
経験上==を基本で使ったからといってバグになるようなことはない
型変換のバグは予想外に同値判定で通ってしまうことよりも、予想外に通らない事のほうが圧倒的に多いのだから
コメント1件

29
デフォルトの名無しさん[sage]   投稿日:2015/12/20 00:52:32  ID:wOVtY/I0.net(4)
>28
> そしてArrayのメソッドは、ArrayLike(この場合lengthを持つもの)について保証していて
> isArrayは配列がどうかのチェックではなく、Arrayかどうかのチェックだ
これは「isArray は Array.prototype の動作を保証するかどうかを返す」と考えていいのか?
これならまあ使える仕様だ。

ちなみに確認したが、DOMのCollectionについては isArray は false になる。
実際の所、このCollectionは無理矢理Array的アクセスが出来るように見せかけただけのものであり、
書き換え不能にしてあるから、例えば Array.prototype.splice.call(DOMのCollection,1,1) は(エラーを返さないが)動作しない。
だから辻褄は合っている。
まあ正直、「動作しないのならエラー返せよ」と思うが。以前はまった。

> @@toStringTagをお忘れかな?
ああこれは知らなかったからだね。
これも自然な仕様だが、だとするとMDNもちょっと書き換えたほうがいい気はするが。
コメント1件

30
デフォルトの名無しさん[sage]   投稿日:2015/12/20 00:53:42  ID:wOVtY/I0.net(4)
> 経験上==を基本で使ったからといってバグになるようなことはない
> 型変換のバグは予想外に同値判定で通ってしまうことよりも、予想外に通らない事のほうが圧倒的に多いのだから
まあ実際はそうなるはず、というかそれを目指して型変換規則が作られているはずなので。
実際のコードを見ると、==派と===派は半々という感じか。
一応googleのコーディング規約には === を使えと明記されていたはずだが、今見ると無い。
削除されたか、或いは俺の勘違いかだが、しかし日付を入れてないからどっちか分からない。
https://google.github.io/styleguide/javascriptguide.xml
この手のドキュメントのリリース日が辿れないってマジで馬鹿なのかあいつら。
というかこの辺で色々文化が違って無駄にストレスが溜まる。

俺は見た目はどうでもいい派なので、文字数の違いとかは気にならない。
俺が組んだところは基本的に === でも動くようにしてあるので、全部書き換えてもほぼ問題ないはず。
実際は歴史的経緯で混在しまくり、今更書き換えてデグレードするのは避けたいので、放置している。
ただJavaScriptの本来の設計は == なのだと思う。
(基本 == で、真に必要がある場合は === で)

31
デフォルトの名無しさん[sage]   投稿日:2015/12/20 00:54:09  ID:wOVtY/I0.net(4)
とはいえ、実際の所、他言語だと「潜在バグ」を嫌うので、===推奨になるのも分かる。
というか、おそらくそちらの方がプログラミングとしては正道だ。
JavaScriptの仕様は、「チャキチャキ作ってサクッとリリース」向けであり、「バグがないプログラミング」向けではない。
とはいえ、Webにはこれが正しいのも事実。
マイナーバグに対する作り込みでリリースが遅れるくらいなら、
バグがあってもクリティカルでないのならリリースした方がWebにはいい。
相手は「今欲しい機能」を求めているのだから。
逆に「バグのないプログラム」を目指すのなら、基本===ベースで行った方がいい。
相手は「将来欲しい機能」を求めていて、そこにバグがあっても困るという人だから。
ここら辺は置かれた状況の違いで文化の差異が発生していると考えている。

> わざわざArray以外にも対応する、のではなく、わざわざ対応しないようにするのかと考える
これが典型で、「100%動く保証」が必要か、「99%動けば問題ない」とするかだ。
見た目動いているからいい、を是とするか非とするかとも言える。
テストで100%網羅できることはない。
バグが無いことを目指すのなら、対応している事が確認できなければ使えない。
Array.isArrayでそれが確認できるのなら、それは使える仕様だ。

32
デフォルトの名無しさん[sage]   投稿日:2015/12/20 00:54:39  ID:wOVtY/I0.net(4)
@@toStringTagの件でも思ったが、まだ「ローカルプロトタイプ」は出来ないのか?
クラスシステムモドキで頑張っているようだが、元々prototypeを拡張するように設計されており、
実際の所、それの方がどう考えても使い勝手がいい。
だから、prototype.jsが流行ったというのも分かる。
問題はプロトタイプ汚染が発生することで、
逆にいえば、ローカルプロトタイプが規定できて汚染が発生しないのなら、おそらくそっちの方がいい。
とはいえ、今でも手動で __proto__ 等を使って設計できそうではある。
誰もこれをしないのはまた別の問題があるのか?

jQueryにしてもバージョン混在の問題があり、もちろん回避策もあるわけだが、
そもそもjQueryをローカル読み込み出来れば問題なくなるはず。
システム的にはスコープチェーンを辿っていく方式なので、
関数単位でのローカルプロトタイプは出来るように思えるが。

@@toStringTagについては、誰かが書き換えた影響が自分にも出る可能性があるということだと思うが、
この手のプロトタイプ汚染っぽいものを言語的に排除できるようにして、
prototypeを自由に拡張するのが本来のJavaScriptの思想だと思うのだが。

元々一人で組むチョロスクリプト用だからその機能がなかったのは仕方ないとしても、
無理矢理クラスにしようとしていて手こずっているように見える。
ローカルプロトタイプの方が多分この言語的には似合うだろう。
誰もやろうとしていなさそうなのは、何か別の問題があるのかな?
コメント1件

33
デフォルトの名無しさん[sage]   投稿日:2015/12/20 04:56:15  ID:xspa4nJy.net
>29
無理やりArray的アクセスが出来るように見せかけただけのものというより、
DOMのコレクションはそれはそれで立派なArrayとは違う配列。
そしてslice等の破壊的メソッドが通らないのは、見せかけだからではなく、
凍結された配列だから破壊的操作を受け付けないから。(エラーは返す)
>32
プロトタイプ汚染というのはビルトインを拡張するときくらいしか問題にならない。
それすらもES6モジュールで分離すれば解決するだろう。
それと、自由に「.prototype」を拡張することではなく自由に「プロトタイプ」を定義できることこそが、
インスタンスベースと見た時のJSの思想だと思う。
コメント1件

34
デフォルトの名無しさん[sage]   投稿日:2015/12/21 01:11:35  ID:RcNL5yk7.net(3)
>33
ふむ。もう一度確認してみたがエラーにはなるようだ。
確認してから書いたのだが、どうやら間違っていたらしい。すまん。


> それと、自由に「.prototype」を拡張することではなく自由に「プロトタイプ」を定義できることこそが、
> インスタンスベースと見た時のJSの思想だと思う。
多分これは違う。
> 自由に「.prototype」を拡張する
これでは既存のクラスシステムと同じだ。
「自分で型を作れる」または「『新規の』型を自分で作れる」だけに過ぎない。

JavaScriptのプロトタイプベースは、「既存の」型を拡張できるところが違う。
ただこれを活用できるかはまた別だ。
これはMDNでも紹介されている。
> これはとても強力です。
> JavaScript では、プログラム上でいつでもどれかのプロトタイプを変更することができます。
> ということは、実行時に既存のオブジェクトに対して追加のメソッドを加えることができるのです:
> (中略)
> これは Person オブジェクトをデバッグするときに役立ちます:
> https://developer.mozilla.org/ja/docs/Web/JavaScript/A_re-introduction_to_J...
ただしデバッグ時以外に活用する方法を誰も思いついていないのだと思う。

35
デフォルトの名無しさん[sage]   投稿日:2015/12/21 01:12:01  ID:RcNL5yk7.net(3)
ある実行中のJavaScriptがあって、それに対してevalでprototypeの変更を行えば、
仮に鯖上で実行中であってもいきなり動作を変えられる。これは他の言語では出来ない。
XenやVMWareがやっているようなライブマイグレーションを言語がサポートしている。

ただそんな機能があっても現実的には必要ない。
サーバーを一旦落としてデバッグ済みのソースに切り換えるのが今の通常の方法だ。
どうしても落とせないところは、今は上記のようにハードウェアレベルでライブマイグレーションができる。
だからソフトウェアレベルでのライブマイグレーションは必要ない。

一応文法的にもprototypeを拡張する方向で出来ている。
クラスに対して色々な書き方があるが、好みはあるとしても、
文法的/構造的に一番無理なく書けるのは prototype への直接差し込みだ。
だからMDNでもその記法で書かれている。
元々 prototype を拡張しながら使うように設計されているので、当然ではあるのだが。
> var Person = function (firstName) {
> this.firstName = firstName;
> };
>
> Person.prototype.sayHello = function() {
> console.log("Hello, I'm " + this.firstName);
> };
> https://developer.mozilla.org/ja/docs/Web/JavaScript/Introduction_to_Object...

36
デフォルトの名無しさん[sage]   投稿日:2015/12/21 01:12:28  ID:RcNL5yk7.net(3)
> プロトタイプ汚染というのはビルトインを拡張するときくらいしか問題にならない。
> それすらもES6モジュールで分離すれば解決するだろう。
しかし@@toStringTagの件はそれだろ?
俺は「そんなの書き換える奴が悪い」で終わりだが、
それが許されないから ==='[Object Array'] では駄目で Array.isArray なんだろ?
ただ import で自由にビルトインも含めて拡張できるのであれば、
上記「禁忌」とされてきて開かずの扉になっている部分を、誰かこじ開けるかもしれない。

37
デフォルトの名無しさん[sage]   投稿日:2015/12/21 05:09:36  ID:hMKGO21d.net
==='[Object Array'] では駄目で Array.isArray は良いとかではなく、
@@toStringTagを考慮してあげるか、そこまでしないかの差だというつもりで差があると言ったんだよ。
そもそもisArrayもProxyは通すからね。別にisArrayに通ったからといってそれがArrayの動作をすることまで保証されていない。
起源がArrayだという程度の意味しかない。
それで十分な場合も多いと思うが、より良い配列の判定がある場合も多いという話がしたかったのだよ。

あと、ビルトインの@@toStringTagが書き換えられた場合というのを、良い悪いで判断するのも自分の感覚と合わない。
そういった行いを尊重しようとするか、しないかの判断ではないかな?
それとprotoypeというのはあくまでnew演算子が活用するだけのものであって、
それ以外に特別な意味はないし、プロトタイプベースの一角でしか無い。
一番大事なのはプロトタイプを変更できること。

それと動的変更は別に動いてる最中ではなく、変更をかけてから動かすという方が主だろう。
コンパイル言語ではなく、Web上で不規則かつ非同期にいくつものスクリプトが読み込まれ実行されるものなので、
何かを拡張したりするには、実際に動きながらするのが最も妥当な方法だ。

38
デフォルトの名無しさん[sage]   投稿日:2015/12/23 00:27:11  ID:fUoT5vqI.net
ここは「言って欲しい意見」を期待できるところではない。それは諦めろ。
さすがにそれだと本当に書いているのか疑問だ。
色々ツッコミどころはあるが、一つずつ行こう。

> あと、ビルトインの@@toStringTagが書き換えられた場合というのを、良い悪いで判断するのも自分の感覚と合わない。
> そういった行いを尊重しようとするか、しないかの判断ではないかな?
ビルトインの@@toStringTagの書き換えを尊重する場合って、具体的にどんなケースがあるんだ?
俺はこれはコーディング規約で禁止にされるべき項目だと考えている。
コメント1件

39
デフォルトの名無しさん[sage]   投稿日:2015/12/24 07:58:45  ID:Y5sNONvq.net
>38
「言って欲しい意見」を期待とはどういうことだ?
そちらがこちらの話した意図を正しく捉えて無かったようなので補足したまで。

そしてコーディング規約で禁止とかいうのが考え方狭すぎだろう。
JSはハックやパッチにも使うもの。
Arrayの@@toStringTagを書き換えたのなら、それ自体がほぼ目的の
それはArrayをStringTagで判定しているところに通さなくしたいというケースも有るだろうし、

一方大規模開発でStringTagに追加でメタ情報を付与して活用しようとするケースも有るだろう。
例えばArrayのStringTagを"Array:Any"とかにして、
int8型配列のを"Array:Int8"、他の自作配列を"Array:Hoge"にし、
デバッグや補助関数で活用するということも出来るだろう。

40
デフォルトの名無しさん[sage]   投稿日:2015/12/24 18:11:12  ID:k1/8SWkC.net
まあ自分が今回JSらしさとかtoStringTagらしさをどのように語っているのかというと、
仕様の定義に根拠を置いているんだよね。
緩いJSとは言え本当にすべきでないようなことや悪いことは仕様で禁止されている。
逆に禁止されていないのであれば、原則活用することは罪ではないと考える。

例えばtoStringTagはWritableがfalseだから通常無意識に書き換えられるようなものではないが、
Configurableはtrueなので強い意志があれば書き換えて良いものとなっている。
一方コンストラクタのprototypeプロパティはConfigurableがfalseだ。
これはJSにおいてprototypeプロパティのないコンストラクタはコンストラクタとして最低限成り立たない、
もしくはprototypeプロパティのないコンストラクタはJSらしくないからだ。
こういった改変をしようとするのは悪だと考える。

まあ互換性によって残っている良くない仕様というのもあるので、全て価値観を仕様に頼って良いわけではないが、
toStringTagなんてものはES2015において新しくよく話し合われて入れられたものであり、
その様々なシチュエーションで使えるようにしてくれた意志は尊重すべきだと思っている。

これが土台で、勿論その上に事案毎にコーディング規約やらが来る。

41
デフォルトの名無しさん[sage]   投稿日:2015/12/26 19:51:45  ID:WET3gKUy.net
「Microsoft EdgeのJavaScriptエンジンを、ChakraCoreとしてオープンソース化する」

Windowsがオープンソース化される予兆 - 阿久津良和のWindows Weekly Report | マイナビニュース
http://news.mynavi.jp/articles/2015/12/21/windows10report/
2015/12/21

42
デフォルトの名無しさん[sage]   投稿日:2016/01/10 21:23:23  ID:TMApyOC8.net
具体的なコードをもとに話を進めてくれないと、
何がやりたいのかさっぱりわからない
文字数は出来るだけ切り詰めて原則箇条書きとかね
一般論をダラダラやられても困る

43
デフォルトの名無しさん[sage]   投稿日:2016/01/12 17:09:01  ID:O9Go0Lwy.net
適当に例を挙げての具体的な話などしても意味は無い
具体的であればあるほど答えは誰が見ても決まってるのだから
そもそもその手の人達が一般的にどうしてそういう行動するのか共感ができないというから
その原理と一般的な信条、思考パターンを述べる展開になっている

44
デフォルトの名無しさん[sage]   投稿日:2016/02/08 22:51:41  ID:vWC/lFUG.net(2)
C言語信者な元ゲームプログラマーで今有明海の漁師です。
C言語信者なのは、スピード命!スクリプトとかCPU資源浪費しすぎだろ!
って思ってるから。
そんな私が、手持ちAndroid7インチタブレットで漁業用GPSロガーを使いたくなって
Google Maps API を触ってみた。

凄え。。。
Javascriptでなんでもできるじゃん・・・まじかよ・・・
Androidアプリ書こうかと思ったけどJavascriptでいいわ。
PCからも見れるしね。
まだ航跡記録とかマーカー記録とか作ってない中途半端な状態だけど
休みの日に酒飲みながら機能追加していくの楽しすぎるw
http://www13.plala.or.jp/tarna/maps/ariakekai/index.html
有明海を見てね。
長崎県と熊本県の間の内海です。
コメント1件

45
44[]   投稿日:2016/02/08 23:02:40  ID:vWC/lFUG.net(2)
あ、ちなみに、表示してる緯度経度は日本測地系です。
漁業用のGPSが今もみんな日本測地系を使ってるので。
携帯もスマフォもGoogleMapも世界測地系なので変換してます。

46
デフォルトの名無しさん[sage]   投稿日:2016/02/09 23:20:54  ID:JuURpG1d.net
>44
見た。
てか、きっちり書いてあるなあ。

Cから見ればJavaScriptなんて超大富豪プログラミングだからね。
ただ、JavaScriptのユルさはなかなか良いとは俺も感じる。
ブラウザでお気軽GUIできるのもいい。

とはいえ、その規模で収まっているうちはいいが、
これからバシバシ機能追加していくのなら、JavaScriptのアレな点が見えて嫌いになるかもw
コメント2件

47
デフォルトの名無しさん[sage]   投稿日:2016/02/10 09:11:00  ID:FkM1RfeE.net
>46
JavaScriptは今じゃ、ブラウザの言語でとどまってないからね。

1.Electronでマルチプラットフォームアプリを作成できる
2.CordovaでiOSやAndroidアプリを作成できる
3.Node.jsを使って、Raspberry Piのようなハードウェア制御ができる
4.同じくNode.jsを使って、PHPの代わりにサーバサイドの制御ができる

1粒で5度美味しいプログラミング言語です。緩いが故に大変な部分も
あるけれど、基本的にはライブラリを活用する事でその辺を軽量化でき
るしね。
コメント1件

48
デフォルトの名無しさん[sage]   投稿日:2016/02/11 01:04:16  ID:3e/IE9s+.net(2)
>47
嫌いな人も多いが、俺もnodejsの便利さにいまさらびっくりしてる。
eureca.io使って、クライアントとサーバが双方まるで直接呼んでるみたいにfunction呼び出しして、あまつさえコールバックまで出来るとは、とビビるくらい。
コメント1件

49
デフォルトの名無しさん[sage]   投稿日:2016/02/11 09:19:41  ID:pPotq0xY.net
>48
言語の弱点をライブラリ群がカバーしてくれてるから、助かるよね。
支持されていなかったら、そのライブラリ達もいないわけで。
コメント1件

50
デフォルトの名無しさん[sage]   投稿日:2016/02/11 16:07:05  ID:3e/IE9s+.net(2)
>49
あとは、プロトタイプベースで魔改造する余地があったのも大きいのかも。
普通の言語で、基底クラスを基底クラスのままメソッド追加するとか、上書きする、なんて今までの言語では頭おかしいって言われそうなユルさかつ、
言語仕様としてシングルスレッドじゃん→なんかコールバックさせる仕組みを外に持たないとね→実装
みたいな魔に魔を重ねた改造の結果、使いやすくなってるような気がする。

51
44[sage]   投稿日:2016/02/12 01:30:54  ID:ZoV9Wx9d.net(2)
>46
距離を計算するGoogleMapsライブラリに
グローバルで保持してる中心座標を渡したらエラー。。。
new 座標(global中心座標)して渡したら通る。。。どういうこと?

っていうか、渡す時も、受け取る時もnewしないとエラーが出ることがあるんだけどなんだこれ・・・
javascriptの仕組みを理解できてないね・・・orz

newで受け取った値を代わりに使ったら、前の値はメモリに残るだろうし
ガーベージコレクションは自分でしないといけないのかなぁ。
富豪だし無視してもいいかなぁw

もうちょっと遊びながら勉強してみます(汗
コメント2件

52
デフォルトの名無しさん[sage]   投稿日:2016/02/12 08:43:48  ID:eUWMATXs.net
>51
new Dateと同じだろ。

日付に見えてただのテキスト型になってるとかそういう事。なので、明示的に
型変換して入れてやる事はままある。

コメント1件

53
デフォルトの名無しさん[sage]   投稿日:2016/02/12 20:46:32  ID:jzfCjOnO.net
>51
物があるんだから具体的に何行目って言ってくれた方が分かりやすいとは思うけど、
見た目多分>52であってる。
俺もそんなに詳しい訳じゃないし、APIの仕様も知らないけど。

ガーベッジコレクション(GC)をユーザが起動する方法はない。
参照が切れればいつか勝手に回収される。
ただ、見た目バカスカリークする可能性があるタイプのプログラムじゃないから、
多少リークしていたとしても問題ないと思うけどね。

リークが気になるなら、chromeならDeveloperTool、FFならabout:memoryで確認できる。
ちなみにそこにGCするボタンもある。
コメント1件

54
デフォルトの名無しさん[sage]   投稿日:2016/02/12 23:30:42  ID:ZoV9Wx9d.net(2)
>53
// グローバル変数
var currentPos = new google.maps.LatLng({lat: 32.xxx, lng: 130.xxx});

//---------------------------------------------------------------------
// watchPositionSuccessCallback() 現在位置取得Success
//---------------------------------------------------------------------
function watchPositionSuccessCallback(pos) {
 currentPos = {lat: pos.coords.latitude, lng: pos.coords.longitude}; // あ、これがダメなのか?ここでnewしろと?
 var from = new google.maps.LatLng(currentPos); // ここで from に new しないで
 var to = google.maps.geometry.spherical.computeOffset(from, 350, heading); // 直に currentPos を使うとエラーが出ます

currentPos = {lat: a, lng: b};
って構文は
currentPos変数が保持してるLatLngオブジェクトのlatにaを代入、lngにbを代入する、
って思ってたんだけど違うのかなぁ?

ガベコレに関しては、ググると、
意図的にnullを代入すればメモリから消される、的なことを見たのだけどめんどくさいですよね。
上の例だと、
currentPos = null;
currentPos = new google.maps.LatLng({lat: 32, lng: 130});
最近のPCやスマフォはメモリ数GBとかあるしもう忘れることにしますw
きっとガーベージが増えたらGoogleChromeさんが勝手に掃除してくれますよね!
コメント2件

55
デフォルトの名無しさん[sage]   投稿日:2016/02/13 00:01:10  ID:lKczJ9J0.net
>54
currentPos={...}は、そのまんまcurrentPosに{...}を代入するだけで、
それぞれのプロパティに代入してくれるわけじゃないよ。
{...}自体が、new Object()だしね。
ガベコレが回収してくれるには参照を切ってやらなきゃならんのだから、null代入は必須。
意図的にnullを代入するとガベコレが回収する訳じゃないけど。
グローバル変数のcurrentPosはLatLngなんだから、{}でつっこむほうが間違ってる。
コメント1件

56
デフォルトの名無しさん[sage]   投稿日:2016/02/13 00:40:54  ID:o8xzA50z.net(3)
>55
レスthxです。

プロパティに代入しちゃえ!って
currentPos.lat = pos.coords.latitude;
currentPos.lng = pos.coords.longitude;
やってみたけどできないのね。
https://developers.google.com/maps/documentation/javascript/reference?hl=ja#LatLng
LatLngってオブジェクトはコンスタラクタ以外では値の設定ができないのかな?
富豪過ぎるwww

>{...}自体が、new Object()だしね。
>グローバル変数のcurrentPosはLatLngなんだから、{}でつっこむほうが間違ってる
うーん、イマイチ理解できてないですけど、
currentPos = new Object({lat: a, lng: b});
というlatとlngを持ったLatLngではない別のObjectが生成された、ってことなのかな?

型が緩いのは便利だけどデバッグ時にはわかりにくすぎるという諸刃の剣ですね。。。
勉強になりました。ありがとうございます!

#今回javascriptで組んでみて、CSSにも苦戦してるし、CSSとjavascript上のひも付けにも苦労してます(汗
#あぁあああなんでぇええ  って腹たつけど、意図的に動いた時にはやっぱり嬉しいですよね
#プログラミングって楽しいですよね!

57
デフォルトの名無しさん[sage]   投稿日:2016/02/13 01:31:30  ID:rQhUa0HJ.net(2)
>54,56
既に指摘されているとおりだけど、

> currentPos = {lat: pos.coords.latitude, lng: pos.coords.longitude};

> currentPos = new Object({lat: a, lng: b});
> というlatとlngを持ったLatLngではない別のObjectが生成された、ってことなのかな?
これで理解はあってます。

> currentPos = {lat: a, lng: b};
> って構文は
> currentPos変数が保持してるLatLngオブジェクトのlatにaを代入、lngにbを代入する、
> って思ってたんだけど違うのかなぁ?
これは違う。分割代入の構文はまた別にある。
この構文だと新しく lat と lng を持ったオブジェクトが作られる。currentPosに入っていた物は捨てられる。
(正確に言うと参照が切れる。全てから参照が切れていればいつかGCされる)

型は無いようで有るというか、C的に言えば全部ただのオブジェクトでしかないのだけれど、
new するとコンストラクタが呼ばれ、結果的に初期値等が設定され、
さらにプロトタイプも設定される。
また、getter/setterやProxyとかで色々細かいことも出来てしまうので、
API で new しろと言われている以上 new しないと駄目。
(Webの場合はURLで引っ張っているので、対象が書き換えられたらいきなり更新される。
そのリンクだと多分バージョン固定だからこの点は大丈夫だと思うけど、
APIはAPI通り使わないと危険。)

> 最近のPCやスマフォはメモリ数GBとかあるしもう忘れることにしますw
GCして欲しいのならnull代入するなりdeleteするなり関数で囲って関数ごと捨てるなりするしかないけど、
正直、今回のような場合の1個や2個はどうでもいいと思う。

> CSSとjavascript上のひも付けにも苦労してます(汗
基本的にclassを使えばいい。
コメント1件

58
デフォルトの名無しさん[sage]   投稿日:2016/02/13 01:57:33  ID:rQhUa0HJ.net(2)
> #プログラミングって楽しいですよね!
正直、ブラウザ上でのプログラミングはかなり楽しいと思う。
GUIで具しか書かなくていいのでチャキチャキ感があっていい。
ただ、他の新しいGUIは知らないから、他にもいいのがあるかもしれないけど。
コメント1件

59
デフォルトの名無しさん[sage]   投稿日:2016/02/13 03:17:29  ID:o8xzA50z.net(3)
>58
色々教えてくださってありがとう御座います。

ブラウザ上のプログラミングも楽しいですけど、
PC8801mkII-SRからプログラミングを始めた私としては、
限られたCPU速度、メモリー、直接ハードを叩いてる感、も楽しかったんですよ
V-Sync割り込みで画像移動させるとスムーズに動くとかね。

そういうハードの限界まで頑張る、的な楽しみは今では無いでしょうけど
Google Chromeには便利なデバッガーあるし、
ネット上には情報がいっぱいあるし、
今の若い人たちはjavascriptから遊んでもいいと思いますね。
html5のcanvasでゲームも作れるし。
文法的にはCにもjavaにも似てるからどこにでも進めるでしょう。
職業:プログラマーという選択が良いか悪いかは別としてねw
趣味:プログラムなら一生楽しそうだけどなぁ。

60
デフォルトの名無しさん[sage]   投稿日:2016/02/13 03:40:04  ID:o8xzA50z.net(3)
雑談ついでに。
私はプログラムはXyzzyで書いてます。
Windows用の軽いemacs互換エディタです。
http://www13.plala.or.jp/tarna/maps/ariakekai/icon/xyzzy.png
25年くらい前にX68000でTinyEmacsを使い始めてから、
もうemacsキーバインドじゃないと何も書きたくないです。
ゲーマーなんでWindowsを使ってますが、
Xkeymacsという、すべてのキーバインドをemacs風に変換するソフトが常駐してますw
今の環境はWindows7ですがWindows10にしたらXkeymacsが使えなさそうで怖いです。
最低Ctrl-H=Backspaceにできないと死にます。

スレチ、失礼しました。

61
デフォルトの名無しさん[sage]   投稿日:2016/02/17 19:47:14  ID:aoSk7bCH.net
今更ながらjs2-mode導入して色を付けてみたが、ちょっとイマイチだな。
キルリングの取り扱いが変わっていて慣れないし、
括弧閉じてもインデントが上がってくれない。
括弧の対応がハイライトされないのも謎だ。
まあもう少し使ってみるけど。

ただ、書いている最中に構文チェックするらしくて色が変わる。
これ自体は便利だと思うけど、どこまで使えるものなのかはまだよく分からない。

62
デフォルトの名無しさん[sage]   投稿日:2016/02/21 09:27:40  ID:lDbEdv1b.net
>57
>>GCして欲しいのならnull代入するなりdeleteするなり関数で囲って関数ごと捨てるなりするしかないけど
それらでCGされる保証はない
エンジンは一般的な場合に最適化されてる
一般的でないことはしないのが基本

63
デフォルトの名無しさん[sage]   投稿日:2016/02/24 01:04:57  ID:idPWr2uv.net
すいません、キルリングの仕様変更はemacs23からのものらしく、
js2-modeは関係ありませんでした。

括弧の対応のハイライトはやはりおかしいままですが、
対応が間違っている場合はそもそも色が変わるので、
結果的にはあまり問題はないですね。

64
デフォルトの名無しさん[sage]   投稿日:2016/03/28 23:29:32  ID:JoYhD075.net

65
デフォルトの名無しさん[sage]   投稿日:2016/04/13 23:34:15  ID:/QwzOlsU.net
textContentってquerySelectorで引っかけられないよね?とりあえず

Array.prototype.filter.call(src.getElementsByTagName('a'),function(dom){return dom.textContent==='XXX';})[0];

で取り出せるんだけど、もう少しましな方法って無いかね?(速度および見た目的に)
条件は、

1. <a>は10個くらいで、5〜6番目が引っかかるので、そこでショートカットしたい。
2. 取り出すのは最初の1個でいい。
コメント1件

66
デフォルトの名無しさん[sage]   投稿日:2016/04/19 11:57:14  ID:/d/wYc3X.net
速度も見た目も十分だよ
それを何度も実行する気なら状況によって要素や文字列をキャッシュすればいいし、
もっともっと短くしたいのならES2015を使えばいい
コメント1件

67
デフォルトの名無しさん[sage]   投稿日:2016/04/19 21:54:42  ID:18lMfaYE.net
テーブルに大量の行を挿入したい時とかって普通にやると応答止まるけどプロはどうやってんの?
コメント2件

68
デフォルトの名無しさん[sage]   投稿日:2016/04/20 01:37:27  ID:wi2IeNzq.net(2)
>66
本当は、

querySelector('a[textContent="XXX"]')

と書きたいところだ。
ただこれは出来ないので、これまでは致し方なく別関数なりベタで書いていた。
しかし call に慣れてくると実は意外と使えることに気づく。
使い道の無かった filter も便利に使えるかと思ったのだが、
配列メソッドなのでショートカットが無いのが唯一残念なところだ。
(個人的には記述量は気にならない。)

69
デフォルトの名無しさん[sage]   投稿日:2016/04/20 01:44:58  ID:wi2IeNzq.net(2)
>67
大量の行の挿入くらいじゃ止まらないし、
そもそも一画面分以上挿入する必要もないだろ。

具体的に何行挿入して、どれくらいカクついたらアウトなのよ?

70
デフォルトの名無しさん[sage]   投稿日:2016/04/20 08:04:48  ID:M3votfED.net
requestIdleCallbackで分割しながら挿入すれば良し

71
デフォルトの名無しさん[sage]   投稿日:2016/04/20 09:52:44  ID:98a+yUuB.net
vol.119で質問すれば良いのになぜこんな場所で質問してるのか
ここで詳しく回答する気は起きないので簡単にしかいわんけど
+ JavaScript の質問用スレッド vol.119 +

>65
XPathを使えば良いと何度もいわれてる

>67
1行ずつ何度も挿入してるんだろ
DFを使え

72
デフォルトの名無しさん[sage]   投稿日:2016/04/25 00:30:16  ID:th/2rgKP.net(3)
ふと思ったんだが、forEach って何で currentValue が this になるのがデフォじゃないんだ?
グローバルじゃ意味無いよな?
引数で与えられるから動作としては問題なく、見た目だけの話だけど。

> forEach に thisObject パラメータが与えられると、callback の呼び出しのたびにそのオブジェクトが this として使用されます。thisObject が与えられないか null だと、callback に結び付けられたグローバルオブジェクトが代わりに使用されます。
> https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objec...
コメント1件

73
デフォルトの名無しさん[sage]   投稿日:2016/04/25 04:01:16  ID:LMKLsb3i.net
thisに色んな意味を付けて何でもかんでも与えるなんてセンス無いから
現にアロー関数だったとき機能しないでしょ
コメント1件

74
デフォルトの名無しさん[sage]   投稿日:2016/04/25 04:10:55  ID:wavxOtJH.net(4)
>732
currentValue が thisになるのなんて、
DOMのイベントハンドラの中でthisが要素になるぐらいのもんだろ。
そもそもDOMはJavaScriptではない。
そもそもDOMがおかしいんだよ。
コメント1件

75
デフォルトの名無しさん[sage]   投稿日:2016/04/25 08:11:57  ID:th/2rgKP.net(3)
>73
> 現にアロー関数だったとき機能しないでしょ
あれはどっちかというと無駄な仕様変更だと思うが。
正確に言うと無駄な仕様を削除して新しく自動 .bind(this) に変更したわけだが、
その必要も無かった(と思う)

>74
> そもそもDOMがおかしいんだよ
これはそう思う。というか、あれは this になることで無駄な手間が増えてる。
イベントハンドラを継承で与えるとき、(クラスでイベントハンドラを共有するとき)
いちいちインスタンスに bind しなくてはならないので面倒だ。
必要なら e.currentTarget でよかったのに自動 this だからこうなる。

ただここら辺も統一感がなくてイマイチではあるが、
現実的には何とかなる範囲ではあるので、(我慢できる範囲)
AltJSもイマイチ本家を殺しきれないといったところか。
コメント1件

76
デフォルトの名無しさん[sage]   投稿日:2016/04/25 17:28:53  ID:q4sdOoqx.net
>72
Array#forEachのコールバック関数にcurrentValueをthis値束縛する動作が自然ではなく、それによるメリットもないからだ
prototype上のメソッドでもないただのコールバック関数がなぜarrayでもグローバルオブジェクトでもなく、cirtentValueに束縛するのだ?
Function#bindでthis値を1に変更した場合、全ての要素値が1と扱う実装に利便性があるとは思えない
(arrayに束縛するならわからんでもないが)
forEachは第3引数でコールバック関数のthis値を指定できるが、これは異なるスコープからデータを渡すのに便利だ
(jQuery#eachにはこの機能はない)

イベントハンドラ関数のcutrentTargetへのthis値束縛もDOM3までは存在せず、DOM4で実装から逆輸入して規定されたものだ
addEventListenerには元々、handleEventでthis値を束縛する機能があり、thisをcurrentTargetとして扱うコードはhandleEventを利用した途端に修正を迫られる
event.currentTarget === this は相互運用性の為に仕様に取り込まれたに過ぎない
ちなみに、jQueryではhandleEventを利用出来ない

jQueryがthisを多用するのは仮引数を書く手間を減らす為だけに定められた歪なものだ
ECMAScriptでは関数呼び出しされるまでthis値が定まらない不定値だが、jQueryはthisをローカル変数でも引数でもない第三の格納倉庫として利用し、コード上でthis値が変更されることを許さない
this値に変更されて困る重要なデータを格納するのが当然と思う風潮が一部で生まれている気がしないでもない
コメント4件

77
デフォルトの名無しさん[sage]   投稿日:2016/04/25 17:47:23  ID:6VBDo1JK.net
>75
仕様「変更」ではない
アロー関数はより「ピュア」な新たな関数
newも出来ないし、thisやsuperも変数と同じように参照する
bindとは違う
統一感はある
DOMは関係ない、altJSでも同じこと
というかデファクトであってそれに依存するのは非推奨
コメント1件

78
デフォルトの名無しさん[sage]   投稿日:2016/04/25 19:33:42  ID:th/2rgKP.net(3)
>76
指摘の通りDOMをイメージしていて、
これまた指摘の通り全部thisでやろうとすること自体が糞だと理解した。

> (arrayに束縛するならわからんでもないが)
確かにこちらの方が自然だね。(とはいえthisにこだわるのが間違いだったが)

> event.currentTarget === this は相互運用性の為に仕様に取り込まれたに過ぎない
見た目相互運用できるようには見えないが、
(thisに揃えても同じコードを再利用できるとは思えない。もちろん揃えないよりはマシだが)
後付けでいろいろ奇妙になっているのは理解した。
> http://7cc.hatenadiary.jp/entry/eventlistener-handleevent

> this値に変更されて困る重要なデータを格納する
jQueryは知らないが、これはconstの代りに使うということか?
アクロバティック過ぎる。


>77
> アロー関数はより「ピュア」な新たな関数
つまり機能限定版か。
そういう理解は出来なくもないが、導入するメリットは文字数以外に何もないだろ。
そりゃ意味無いって普通は言われるよ。
どうせ新規にするのなら、クロージャ無しとかまで踏み込んでもよかった。
(新規なら使い分けが必要/有効なところまで機能分離するべき)
コメント1件

79
デフォルトの名無しさん[sage]   投稿日:2016/04/25 22:39:46  ID:wavxOtJH.net(4)
>76
> jQueryがthisを多用するのは仮引数を書く手間を減らす為だけに定められた歪なものだ

違うよ。DOMの仕様に合わせただけ。

jQueryのイベントハンドラは、DOMのイベントハンドラと
互換性を考慮されて作られている。

例えば、この2つは同じように動く

$('#btn').on('click', function(event) {
 alert(this.id + event.currentTarget.id)
});

document.getElementById('btn').addEventListener('click', function(event) {
 alert(this.id + event.currentTarget.id)
});

どちらのイベントハンドラもthisは同じものを指しており、
またjQueryのeventオブジェクトはDOMのeventオブジェクトの仕様と
互換性を持たせて実装されている。

高い互換性ではないが、それでも程度はあるから移行が楽になる。

80
デフォルトの名無しさん[sage]   投稿日:2016/04/25 22:47:27  ID:wavxOtJH.net(4)
>76
> jQueryはthisをローカル変数でも引数でもない第三の格納倉庫として利用し、コード上でthis値が変更されることを許さない
> this値に変更されて困る重要なデータを格納するのが当然と思う風潮が一部で生まれている気がしないでもない

そんなことしません。

そう言う用途として使うのは、DOM要素のdatasetだよ。
このdatasetっていうのは比較的最近できたもので昔はなかった。

だけどjQueryは要素ごとの情報の格納場所の必要性を昔から認識していたため
datasetが作られるよりも前からdata()メソッドと言うのを持っていた。

そしてdata()メソッドがある理由の一つとして、
thisに直接値を格納するとブラウザのバグでメモリリークになる可能性があるから
「this(DOM要素)にデータを格納してはいけない。」と言っていたぐらいだ。

事実はあんたが思っているのと正反対だよ。
コメント3件

81
デフォルトの名無しさん[sage]   投稿日:2016/04/25 22:49:10  ID:wavxOtJH.net(4)
これね。

https://api.jquery.com/data/

The .data() method allows us to attach data of any type to DOM elements in a way that is safe from circular references and therefore from memory leaks.

82
デフォルトの名無しさん[sage]   投稿日:2016/04/25 23:32:07  ID:olQI0pZ8.net
>76でhandleEventの話が出ているが、使った人ならわかると思うが、
handleEventはswitchでイベントを振り分ける必要があって使いづらい。

なぜこんな仕様があるかというと、そもそもDOMはJavaScript以外の言語も
考慮されて作られているという事実で説明できる。

つまり関数の引数、つまりaddEventListenerの引数に関数を渡せない言語が存在する。
具体的に言うとJava。Javaでは引数に関数を指定することができず、
オブジェクトは指定できる。

handleEventインターフェースを実装したオブジェクトを引数に取る関数と
考えるとhandleEventという仕様がなぜ存在するかがわかる。
これは便利だから追加された機能じゃない。Java等で必要だったっから
追加された仕様であって、JavaScriptでは関数をそのまま指定した方がいい。
コメント3件

83
76[sage]   投稿日:2016/04/26 00:48:49  ID:74Un+zc0.net(4)
>78
> > event.currentTarget === this は相互運用性の為に仕様に取り込まれたに過ぎない
> 見た目相互運用できるようには見えないが、
document.all が標準化されたのと同じ理由だが、既存の資産(this で event.currentTarget を参照するコード)を生かす為だ
DOM3当時はデファクトスタンダードとして this 値が event.currentTarget を参照していたが、標準化されていなかったので確実に動作する保証がなかった
DOM4で標準化された事で既存のコードが確実に動作する事が保証された
単純に相互運用性を考えるなら event.currentTarget を使ったほうが良いのはいうまでもないが、
IE6の影響でXHTMLへの移行が進まなかった教訓を得てバッドノウハウでも積極的に取り入れて互換性を確保する方向にシフトした

> > this値に変更されて困る重要なデータを格納する
> jQueryは知らないが、これはconstの代りに使うということか?
これは言葉足らずだった、すまん
先述の jQuery.each と同じだ

// bad
jQuery.each([1, 2, 3], function (i, value) {
console.log(this); // Strict Mode なら Number型、sloppy mode なら Object 型 (Function#bind で変更される可変値)
});

// good
jQuery.each([1, 2, 3], function (i, value) {
console.log(value); // 常に Number 型 (Function#bind で変更されない固定値)
});

繰り返し処理をする上で要素の値は固定値でなければならないので this 値を指定すべきではない
コメント2件

84
デフォルトの名無しさん[sage]   投稿日:2016/04/26 00:50:01  ID:6NLvX0gR.net(6)
>80
> jQueryは要素ごとの情報の格納場所の必要性を昔から認識していた
これは俺もすごく思うが、
実際のところはリークと速度低下が怖くてJavaScript側で持っている。
さすが実用ライブラリだけあって痒い所には手が届いているというところか。

>82
> handleEventはswitchでイベントを振り分ける必要があって使いづらい。
これは何故?俺は使ったことは無いが、見る限りそういう感じではない。
イベントハンドラは基本的に直リンクというか、振り分け済みの関数を与えるのが基本で、
thisが効くオブジェクトを与えられるのなら、子クラスを与えればいいだけ。
当たり前だがオブジェクト指向の基本どおりだ。
また、最初からイベントハンドラ内で振り分けする気であれば、
ルートNodeにイベントつけてe.targetのclassで判定するのが自然だ。
何か別の条件ではまっただけの気がするが。

とはいえ、DOMの仕様がJavaScriptから見て中途半端なのはJavaとの相乗りが原因だとは理解した。

85
76[sage]   投稿日:2016/04/26 00:51:40  ID:74Un+zc0.net(4)
>83の続き

// bad
function fn1 (event) {
this.classList.add('hoge');
}

// good
function fn2 (event) {
event.currentTarget.classList.add('hoge');
}

element.addEventListener('click', fn1); // OK
element.addEventListener('click', fn2); // OK
element.addEventListener('click', {handleEvent: fn1}); // NG
element.addEventListener('click', {handleEvent: fn2}); // OK

handleEventを拡張した場合、this値を指定したコードは動作しなくなる
ようするに、this は可変値なので固定値をとりたい場合に使用するべきではないという事だ

---
this が可変値である事を上手く利用した例に Array.prototype.forEach がある

Array.prototype.forEach.call(document.querySelectorAll('.test'), function (element) {
element.classList.add('foo');
});

これが動作するのは Array.prototype.forEach が this 値が配列でなくとも動作するように設計されているからだ
this 値は変動するから Function#call や Function#bind が生きる
だからこそ、this 値が変動する事に価値を見出せる設計にする必要がある
コメント1件

86
76[sage]   投稿日:2016/04/26 01:08:23  ID:74Un+zc0.net(4)
>80
jQuery でも event.currentTarget で書くことは出来るが、ドキュメントのサンプルコードを読む限りでは作者が this を推奨しているように読める
「許さない」は言いすぎだったかもしれないが、this を推奨するという事は this 値が変更される事を考慮していないのではないか
this 値は実行コンテキストに入る時点で決まる不定値であり、this === event.currentTarget になる保証はない
https://api.jquery.com/on/

余談だが、jQuery#each と Array#forEach でコールバック関数の引数順序が違うのは this 束縛がある影響だと考えている
jQuery では this で各要素ノードを参照できるので第1引数に element を持っていくと index を参照する為には第2引数まで書かなくてはならない
forEach の設計としては直感的ではないが、ショートコーディングの為に index を第1引数に持ってくる歪な修正を加えたようにしか見えない
https://api.jquery.com/each/

jQuery('.hoge').each(function (i, element) { console.log(this, i, element); });
コメント1件

87
76[sage]   投稿日:2016/04/26 01:50:16  ID:74Un+zc0.net(4)
>80
> 事実はあんたが思っているのと正反対だよ。
jQuery#data は優れた機能(ただし、data独自属性の拡張はいただけない)だし、jQuery() のセレクタエンジンは素晴らしいものだった
JSON, querySelector 等、優れたライブラリ/先行実装が標準仕様に取り込まれるのはよくある事だ
jQuery の全てを否定したいわけではなく、「jQuery の this の使い方が好ましくない」と主張している

> そう言う用途として使うのは、DOM要素のdatasetだよ。
dataset は String 型しか格納できない為、jQuery#data の代替にはならない
jQuery#data の代替として期待されたのは DOMUserData だが、この API は残念ながら廃止された
https://www.w3.org/TR/2004/PR-DOM-Level-3-Core-20040205/core.htm...#DOMUserData
今では機能的に逆だが、WeakMap が代替となりうるだろう
http://www.ecma-international.org/ecma-262/6.0/#sec-weakmap-iterable

88
デフォルトの名無しさん[sage]   投稿日:2016/04/26 11:16:02  ID:x636ghAj.net
つうか結局何が言いたいの?
thisはpythonのselfみたいに一定の規則はあるが
あくまで0番目の引数みたいなもんで何に使おうが勝手だし
そういうのを利用するならきちんと把握しないといけない
その程度のことに良いとか悪いとかはない
使いたいならただ受け入れればいいだけ

なんかよく分からんけど気持ち悪いみたいな
結局愚痴をダラダラと言いたいだけならもうここら辺でやめとけ
コメント1件

89
デフォルトの名無しさん[sage]   投稿日:2016/04/26 17:56:08  ID:LGdk9fYg.net
C#みたいにobj.Methodでバインドしてくれれば楽で綺麗に書けるのにね
いちいちbindって書くの面倒
コメント1件

90
デフォルトの名無しさん[sage]   投稿日:2016/04/26 19:15:29  ID:v8OmTco7.net
>88
ここまで説明されて愚痴にしか読めないのなら口を出さなければ良いと思うけど

91
デフォルトの名無しさん[sage]   投稿日:2016/04/26 19:52:24  ID:PAn5oHiy.net
>89
引数としてメソッドを渡す際は今だと
obj.method.bind(obj)
よりもアロー関数を使って
()=>obj.method()
の方が良いかもしれない

あとバインド基本にするのは結構簡単
クラスのプロトタイプにそういうプロキシを挟めばいい
アノテーションとか使えるようになればなお綺麗に書けるね
まあバインドシンタックスobj::methodとかもあるんだけどね

そういうのを使えるトランスパイラ使うってのも悪くないと思う

92
デフォルトの名無しさん[sage]   投稿日:2016/04/26 23:52:32  ID:6NLvX0gR.net(6)
>83
前半、言っていることは分かるんだが、現実的には、
this がDOMであるコードと自前のオブジェクトを this 参照するコードを
同一のコードで処理(相互運用)するためには、
自前のオブジェクトをDOMモドキにする必要があって、
(DOMと同じプロパティ等でアクセスできるように形を揃える)
これだと余計に苦労する。
だから結局、既に書かれたコードを流用することは難しく、
書き直すかラップしてしまうほうが簡単だ。
多分現実的には相互運用をしている奴は少ないのではないかと思う。
もちろんthisで共通アクセスできないとその可能性すらないからそれよりはマシだが、
現実的にはこの仕様はあっても使えない。

93
デフォルトの名無しさん[sage]   投稿日:2016/04/26 23:53:03  ID:6NLvX0gR.net(6)
>82の話の通りなら、handleEventはJava用であって、JavaScript用ではないことになる。
実際、>85ではメリットが無いだろ。
JavaScriptでわざわざ使うのならメリットがある以下の記述になる。

var hit_list = new Set();
var EventHalndler = function(){
this.status = 'waiting';
}
EventHandler.prototype = {
handleEvent: function (e) {
e.currentTarget.classList.add('hoge'); // class で管理
this.status = 'hit'; // 個別オブジェクトで管理
hit_list.add(e.currentTarget); // Set で管理
}
};
var ehandler = new EventHander();
element.addEventListener('click', ehandler);

DOM側で管理するならclass、JavaScript側で一括管理でよければSetでいい。
どうしても個別のオブジェクトに格納したければ 「thisを生かして」 使うことになる。
当たり判定のグルーピングを細かく変更したいときはこのやり方が適するけど、
用途はあまり無いと思う。

94
デフォルトの名無しさん[sage]   投稿日:2016/04/26 23:54:04  ID:6NLvX0gR.net(6)
だから「相互運用」を考えるのなら、
e.currentTargetとthisの両方を異なる意味で用いている上記のようなケースをどうするかであって、
多分これはどうにもならんだろ。
手っ取り早いのはラップ関数内でthis値をMapなりから引っ張ってきてしまうことだが、
要するに書き換えが必要なので仕様をわざわざ合わせた意味がない。
何らかのために仕様をあわせたというのなら、
そのおかげで書き換えなくても済みました!がないと意味が無い。

DOM側からすると妥協だということだが、放置でもよかった気はする。(仕様として追認の必要なし)
なお、thisかe.currentTargetの片方しか使ってないコードは自動でも書き換えできる範囲だと思う。

しかしそうなると問題の出所はブラウザの実装で、
何故e.currentTargetに統一せずにthisを渡すことにしたかだな。
正直、あれ、thisで渡されても全くメリットないよな?

> DOM4で標準化された事で既存のコードが確実に動作する事が保証された
これは多分、気にする人にとっては重要なのだろうけど、
Webサイトなんて10年後の動作を保証されたところで意味が無いし、
「当面(数年)確実に動く」であれば大半の人にとって問題ない。
それが実装主体で推移している原因にもなっていると思う。

95
デフォルトの名無しさん[sage]   投稿日:2016/04/26 23:55:02  ID:6NLvX0gR.net(6)
>82
とここまで書いて気づいたが、switch は e.target ではなく e.type か。
確かにこれでは使いにくいな。JavaScriptなら以下で逃げられるが、
これが出来ないからオブジェクトで与えているのだと思われ、Javaでは壮絶な糞コードになりそうだな。

EventHandler.prototype = {
handleEvent: function (e) {
this[e.type].call(this,e);
},
click: function(e){},
mouseover: function(e){},
mouseout: function(e){},
};

96
デフォルトの名無しさん[sage]   投稿日:2016/04/26 23:55:42  ID:6NLvX0gR.net(6)
>86
いやそのjQuery.eachのthisは意味があるぞ。
それならthisで書かれたイベントハンドラをeachで回せる。(DOMのイベント寄り)
ただe.currentTargetで書くべきだというのと、
そもそも他に代替手段がありまくるので、割とどうでもいいが。
thisを固定したことによるデメリットの方が上回るかもしれない。

ただまあ、そちらの主張どおり、
thisに対しては緩く考える(○○が来ると仮定しない)方が何かと便利なのは事実だろう。

97
デフォルトの名無しさん[sage]   投稿日:2016/04/27 00:28:53  ID:mjPz9hpH.net
「thisは基本レシーバ」
それ以上でも以下でもない

98
デフォルトの名無しさん[]   投稿日:2016/05/01 14:45:40  ID:tKi6j9CT.net
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません

99
デフォルトの名無しさん[sage]   投稿日:2016/05/03 12:04:12  ID:YtCRz7OH.net
もうWebRTC利用したJS製のそういうフレームワーク何個も作られてるよ

100
デフォルトの名無しさん[sage]   投稿日:2016/05/03 18:27:13  ID:Hru3QNWj.net
WebRTCって要するにP2Pチャットサーバ用だよな。
元々それ用だけどそれ以外に用途が無い。
もちろん発展させればWinnyやskypeみたいな事は出来るけど、それなら最初からそっちでいいし。

俺も最初知ったときは「ウッヒョー」だったけど、冷静に考えたら落ち着いた。
現実的には大半の事案は鯖立すればいいだけだからね。
技術的には面白いとは思うけど。

101
デフォルトの名無しさん[sage]   投稿日:2016/05/04 19:58:18  ID:znxAfP3/.net
ちいと勘違いしてるが、WebRTCに鯖とのやり取りもといマッチングの仕組みは含まれていない。
WebRTCでそれをするのはちょっとハックっぽくなるが、
特にORTCなら鯖レスの固定相手P2Pも素直にできる。

現在は
・ビデオ/ボイスチャット
・MMOゲーム
・一方向型のファイル共有
によく使われてる

102
デフォルトの名無しさん[sage]   投稿日:2016/05/04 23:45:02  ID:umoiWZhY.net
> MMOゲーム
これにはいいかもな。

それ以外は正直、「ブラウザでできる」以上の意味は無いよね。
最初からP2Pする気ならP2Pアプリを使った方がいろいろいいし。
一方向型のファイル共有ってそれただの鯖じゃん。

103
デフォルトの名無しさん[sage]   投稿日:2016/05/05 04:30:39  ID:2KiZjc5Z.net
ブラウザでできるからこそ特大の意味があるんだよ
今著名なWebサービスはアプリも出してることが多いけど、
じゃあ皆がそっちの方を使ってWeb版はいっさい要らなくなるかというとそうではない
一時期そういう流れも起きたがやはり無理だったということで、今は流れが戻っている(Flipkartが良い例)
わざわざアプリをインストールして管理しないといけない手間が要らないのはとてつもない利点だよ

そして、ファイル共有に関しては鯖レスで実現できるところがメリット
鯖を挟むと帯域を本来の2倍取り、さらに負荷が鯖に集中してしまう
宛先の絞られているファイル等はP2Pで送る形のほうが良い

104
デフォルトの名無しさん[sage]   投稿日:2016/05/05 09:25:46  ID:fknk/t2B.net
ブラウザのBBOM化はもう勘弁して

105
デフォルトの名無しさん[sage]   投稿日:2016/05/09 15:41:03  ID:iKr5Nm9H.net
なんで?

106
デフォルトの名無しさん[sage]   投稿日:2016/05/09 22:54:55  ID:Ji3tRhpw.net
BOMのことだよな?
個人的にはDOMやBOMでAPIアクセスできるのはお手軽でいいと思うぞ。

107
デフォルトの名無しさん[sage]   投稿日:2016/05/09 23:34:30  ID:fQwtjbTF.net
もはや種類多すぎる上に増加スピードが速すぎて把握するのがしんどいわ
でも無ければ無いで何も作れないしな

108
デフォルトの名無しさん[sage]   投稿日:2016/05/10 10:34:10  ID:AYSgFkex.net
スピードが早いというが、一年くらい前から高レベル系のAPIが熟成期に入って停滞してると思う
また来年くらいから今度は低レベル系のAPIが動き始めるんじゃないかな

109
デフォルトの名無しさん[sage]   投稿日:2016/05/10 23:06:42  ID:vhPcYSkB.net
> 低レベル系のAPI
上の話ともリンクするが、ブラウザはお手軽さが最も重要なのであって、
ゴリゴリ書いて性能を出すのには不向きだし、流行らないと思うぞ。
結局のところ、専用ネイティブアプリには実行効率では勝てないのだから、必要なら開発される。
そこまでの必要/需要が無ければブラウザアプリのままでいけることになる。

ただ一つ思うのは、CPUとI/Oを分離し、非同期で書くことを強制するのは、実はかなり効いている。
体感、思っているよりだいぶ速いんだよね。
他言語だと普通に同期で書くし、描画でもそのまま記述する。(分離して書く習慣が無い)
これら遅い部分を明示的に分離し記述することが半強制されている結果、
結果的にCPU稼働率の高い「割と速い」コードが出来上がることとなっている。

だからちゃんと書いたJavaScriptは十分速いし、
それ以上の速度を要求するのならC/C++で書き直すしかない。(V8がC比5倍程度と十分速い為)
どんなJavaScriptでも最後にトランスパイルすれば速くなるというのなら、それはJIT側に含まれるべきだし、
何らかの記述制限をつけて「ちょっと速いJavaScript」を目指すものは、多分需要が無い。
(本来そこにはC比3倍程度というJavaアプレットがいたはずだが、完全に死んでるし)
コメント3件

110
デフォルトの名無しさん[sage]   投稿日:2016/05/11 07:45:48  ID:XhqmdNgU.net
>109
考え方が全く違う。低レベルAPIは、高レベルAPIを作るために必要なの。
高レベルAPIを標準仕様として策定してたら互換性などを強く考慮する必要があり、
メジャーブラウザが一通り実装して使えるようになるまで極めて時間が掛かる。

そしてその時に本当に必要とされるものに出来なかったという失敗も数多くしてきた。
実装にも時間が掛かるが、古いAPIを削除するにはそれ以上の時間がかかってしまう。

でも低レベルAPIを提供するようにすれば、ライブラリやポリフィル程度の気軽さと速度で
その時代に必要とされる高レベルAPIが作られていくようになるし、
そこで持て囃されデファクトを築いた仕様を改めて標準に持って来ればいい。

ポリフィルだらけになるということさえなんとかすれば、他の様々な問題が解決される。
それが低レベルAPIの道入。「Extensible Web Manifesto」だよ。

>109
また、何をもってちゃんと書くと言っているのかわからない。
結局スクリプト言語であるJSの大部分のコストかかる場所は大抵DOMなんかの外部APIを叩いた部分だからね。
でもそうでないゲーム思考エンジンなどを作ったりするけど、「ちゃんと書けば」
単純演算系ロジックのパフォーマンスが1/5倍なんて最悪の見積もりだよ。
1/5くらいのケースもあるけど、10%程度しか分からないケースもあり、アベレージで大体1/2位になる。

まだSIMDやらパラレルやらの最適化が完了してないのでそこが大きく絡むともう1/2くらいにはなるが、
1/5は最悪中の最悪ケース。
コメント1件

111
デフォルトの名無しさん[sage]   投稿日:2016/05/11 22:18:37  ID:ye4EAN+q.net
APIはポリフィルできても、言語はポリフィルできないからな。
だからBabelなどのトランスパイラが必要になる。

112
デフォルトの名無しさん[sage]   投稿日:2016/05/12 00:54:26  ID:TctSTaTq.net(4)
>110
> Extensible Web Manifesto
以下を読んだ。
http://jxck.hatenablog.com/entry/extendthewebforward
言っていることは分かるが多分無理だな。

低レベルAPIのすり合わせは高レベルAPIよりも難しい。
だから高レベルAPIのすりあわせすらマトモにできなかった連中には無理だ。

> そもそも、デバッギングはコーディングよりも2倍難しい。
> 従って、あなたが可能な限り賢くコードを書くとしたら、定義からして、あなたはそれをデバッグできるほど賢くない。
> ブライアン・カーニハン [Brian Wilson Kernighan]

高レベルAPIの仕様策定が失敗しているケースが多々ある点についてはよくは知らないが、
JavaScript言語自体の仕様を見る限り、いろいろ迷走している点は多い。

仕様策定が失敗するのは、単純に使用策定している奴らに先見の明が無いからだ。
だから逆に言えば、先見の明が無いような奴らが仕様策定に関わってはいけない。
JavaScriptの連中はそこらへんを勘違いしている。だからゴミ仕様が山積みになる。
AppCacheがゴミであろうと、仕様として策定された以上、実装しないわけには行かない。
だから結局、ブラウザに対してゴミコードを含まなければならないという足かせが出来ただけになる。
結果的にJavaScriptの世界はゴミが増えていき、ゴミに振り回されることになる。
これを理解できていない。

とはいえ、それでも進化の速度を取っているといえばその通りだ。
C#が伽藍型仕様開発なら、JavaScriptはバザール型という訳だが、目に付く失敗も多い。
もちろん、XHR等は大成功の一例なのだろう。どちらが多いのかは、俺にはわからない。
SeviceWorkerがどうなるのかは見ものだな。
コメント1件

113
デフォルトの名無しさん[sage]   投稿日:2016/05/12 00:54:55  ID:TctSTaTq.net(4)
> ちゃんと書く
速度を問題にしているのだろう?だったらきちんと速度が出る書き方をするということだよ。
5倍というのはググれば出てくるはずだがN-body、つまり演算部分だ。
同様のベンチは他の人もやっていて、大体同じような値になっている。

ただ指摘の通り、その部分は他のもっと遅い部分に隠蔽され、結果的に見えないことが多い。
(ただしだからといって遅い部分も含めて速度比較して大差ないとか言う屁理屈はうざいだけだから止めろ。
それは速度比較とは言わない)
だからJavaScriptが通常用いられる用途に関しては、JavaScriptは十分速いし、
それ以上を望むのなら、ゴリゴリ書くしかない。

> ゲーム思考エンジン
これは環境はなんだ?
個人的には主力テキスト操作スクリプトをAWK/Perl->JavaScriptに乗り換えようかと思っているんだが、
DOS窓から操作できる使いやすい環境ってないか?
AWKやPerl同様、一行ずつ標準入力からReadline出来ればそれでいい。
nodeが一番マシか?
コメント1件

114
デフォルトの名無しさん[sage]   投稿日:2016/05/12 05:43:37  ID:s4pSKHj7.net
WSHが一番マシ
コメント2件

115
デフォルトの名無しさん[sage]   投稿日:2016/05/12 08:43:22  ID:pPHDojvh.net(2)
>112
無理では無いと思う。
基本的にセキュリティや機能制限の面が一番難しいだけで、
そこさえクリアできれば、低レベルAPIの仕様自体は一意に決まりやすいものだから。
まあ高レベルAPIと同じくらいの難しさだろう。

そして求めてるのを作れなかったというのは、
策定に時間がかかったり、実装者や開発者とのやり取りが十分ではなかったから。
先見の明が無いと言えばそうかもしれないが、
今まで無かった様々な機能が必要とされる中でいきなり完璧を目指すのは無理というものだ。
そして今でさえ策定が遅いのにこれ以上慎重になるわけにもいかないのだよ。

それを反省し、よりフットワークの軽いだろうライブラリ界に高レベルAPIを練る役目を託し、
フィールドバックを十分にした上で標準仕様として改めて定義し直そうというのがEWM。
これにより発展速度も安定性も上がると思っている。

>113
自分が言った「ちゃんと書く」とは、asm.jsを(部分的に)手書きするということだ。
例えばこの記事の時点ではN-bodyもasm.jsならネイティブの約1/2(今はもう少し速くなってる)
自分の考えるこういう時のネイティブってのイメージはLLVM+Clangなんだが、
いずれにしろ記事見ても分かるように、syscallsが絡んだりするとasm.jsの方がパッと出早い場合も有るくらいなのだ。

まあ手書きしやすいように手書きするとやはり静的言語からコンパイルするよりは落ちることが多いが、
それでもアベレージで1/2のイメージで良いと思う。
自分はNodeを使ってる。V8はC++モジュールとの連携が楽なので、JSがどうしても苦手な部分はC++で書いたりもしやすい。
コメント2件

116
デフォルトの名無しさん[]   投稿日:2016/05/12 08:44:46  ID:pPHDojvh.net(2)

117
デフォルトの名無しさん[sage]   投稿日:2016/05/12 23:52:09  ID:TctSTaTq.net(4)
>114
WSHか。あれ食わず嫌いだったけど、やっぱお手軽でよさそうだよな。
まあやってみることにするよ。

118
デフォルトの名無しさん[sage]   投稿日:2016/05/12 23:59:02  ID:TctSTaTq.net(4)
>115
違う。
> 策定に時間がかかったり、実装者や開発者とのやり取りが十分ではなかったから。
仕様策定とは「常に」こういうものなんだよ。言語のみならず他でも全て。
有名なイラスト、見たことがあるだろ。
> ニコニコ大百科/a/顧客が本当に必要だったもの (リンクはRock54で貼れない)
だから、これを分かった上で、そうならないようにする「実力」が必要なんだよ。

具体的に言えば、どんなに時間がかかろうが、いい仕様(必要な物)ならみんな使う。
だから、時間をかけてでもいい仕様にするというのが「先見の明」作戦。
これが無理なら、古典的だが報告連絡相談(ホウレンソウ)をきっちりやるしかない。
出来なかったのなら、どちらの作戦もやりきる実力が無かっただけ。

試行錯誤で進めていくのもありだと思うけど、
それなら結果的に無意味になってしまった仕様等をばっさり捨てていく覚悟も必要。
(詳しくは知らないがRailsはこれに近いのかもしれないし、それも妥当な戦術)
後方互換も必要です、新しい仕様も必要です、
でも十分な仕様策定能力はありません、というのが今のJavaScriptの状態だね。
進化速度を捨てるわけには行かないのだから、後方互換を捨てるしかないと思うのだけどね。
この点で言えば、ポリフィルでお茶を濁しまくっているのはいい作戦ではある。

とはいえ、出来る/出来ないをここで議論する意味は無い。
結果を見ればいいだけだから。
コメント1件

119
デフォルトの名無しさん[sage]   投稿日:2016/05/13 00:04:56  ID:PxVJ9U+u.net(7)
>115
> 自分が言った「ちゃんと書く」とは、asm.jsを(部分的に)手書きするということだ。
だからそれは屁理屈なんだよ。
言語の速度比較なら、普通に書いた、つまりそこらへんに転がっている記述同士でやらないと意味無いだろ。
Cでインラインアセンブラを使うのは無し、
JavaScriptなら普通に [], {}を使って書いたものだよ。全面 TypedArray とかは無しだよ。
というか、それならそもそもそういう言語で書けって言われるようじゃ駄目だろ。
言語の比較なら、それぞれの言語の良さを生かした状態で記述してあるものでないと。

君が言っているのは、「チューニングしたときに伸びしろがあるか」ということであって、
言語の速度比較ではないんだよ。
CならSSEやCUDAまで導入できるのだから、それも入れていいかというと違うだろ。
普通に書いて普通にコンパイルできる状態での比較じゃないと意味無いだろ。

そして、そこでいちいちムキになることも無いんだよ。
不満があれば他言語で書けばいいだけ、
その言語を使っているのなら、エコシステム含めてその言語が一番マシだから使っているだけ。
それ以上でもそれ以下でもないだろ。

120
デフォルトの名無しさん[sage]   投稿日:2016/05/13 09:43:39  ID:1hqv3t07.net(2)
>118
JavaScriptと言うより、Webの宿命。ES仕様自体は元々が小さかったのも有り、
妥当で慎重な機能追加で順調に進化してきている。

そして今まで悪かったからこそそれを改善しようと言うのがEWMなのに、
なにを否定したいのかがわからん。
EWMならダメな仕様等をばっさり捨てていくことも可能。
というか結果的に皆が使い良いと認められる仕様だけが標準になるのだから。
更には公開と発展の速度まで引き上げられる。

そしてasm.jsを手書きすることが屁理屈だなんてとんでもない。
勿論emscriptenが書き出すようなのを手書きするのは変態だが、
どうせちょっと高速化を意識するとTypedArrayをメモリに見立ててあれこれするようになる。
それはasm.jsがやってることと同じなので、asm.jsパターンにちょっと直せばいいだけ。
ただのお作法みたいなものでしかなく、そっちこそ何をムキになってるんだか分からん。

別に素のJSがC++と比べてどれだけ早いなんて自慢話をしたいわけじゃないし興味はない。
JSで事実速いコードもそこそこ書くことが出来、その結果現実的に実現できることがあるということが自分にとって重要

もちろんこういうことをするのはレアケース。
だって先にも言ったようにそこら辺に転がっている実用コードの殆どのボトルネックが外部APIだし、
よくあるマイクロベンチみたいなのを意識しても仕方ないから。

一方それ以外の素の速度が重要なケースでは、どんな言語で書いてもそれなりにアルゴリズムやチューンを気にするだろうし、
asm.jsに沿って書く程度十分あり得る範囲だよ。
コメント1件

121
デフォルトの名無しさん[sage]   投稿日:2016/05/13 17:53:59  ID:1hqv3t07.net(2)
Railsとかサーバサイド言語/環境と違って
WEBは1つの実装で色んな時代に作られたデータを読まないといけないのだし
仕様の量も段違いで数十か数百かのモジュールが組み合わさって成り立っているのだから
その1つ1つのバージョンを意識したり指定したりということはできないし
原則後方互換性を守りながら拡張していくしか無い

WEBがもっとシンプルで昔のようにほぼW3Cが牛耳っていれば問題はなかったのだが
世間や環境がそうさせてくれなかった
WEBはマグロのように泳ぎ続けるしかない定め
コメント1件

122
デフォルトの名無しさん[sage]   投稿日:2016/05/13 20:51:55  ID:PxVJ9U+u.net(7)
>114
> Microsoft Windows 98、Windows 2000、および Windows Me には、
> Microsoft JScript および VBScript の 2 つのスクリプト エンジンが用意されており、
> 通常はこのいずれかを使用してスクリプトを記述します。
> Windows Script Host では、このほか、Perl、REXX、Python などのスクリプト エンジンも使用できます。
> https://msdn.microsoft.com/ja-jp/library/cc392505.aspx
やべーわ完全に食わず嫌いだったわ。
見た目、.NETと同じく言語非依存のフレームワークを提供しているんだな。
標準入出力+αで満足するから完全に十分だわ。
というか結果的にMSには先見の明があったな。

以下によると//xでデバッガが起動出来るらしいが接続してくれない。
そっちでは動いている?
> WSHはVisual Studioでデバッグを行うことが可能です。
> Visual StudioはExpressの場合にデバッグが行えないかもしれません。Professional以降が必要かもしれません。
> http://qiita.com/mima_ita/items/127e171db67aaee6ef30
Vista+VSExpressなんだけどね。
コメント1件

123
デフォルトの名無しさん[sage]   投稿日:2016/05/13 20:58:41  ID:JdHqQx2Q.net
外部と隔離された無人島で20年過ごしてきた人なのかな?

124
デフォルトの名無しさん[sage]   投稿日:2016/05/13 22:06:05  ID:PxVJ9U+u.net(7)
>120
> EWM
否定したいわけではないが、君が言っているような「打ち出の小槌」なんてどこにもないんだよ。

低レベルAPIを規定して高レベルAPIを柔軟に構築というのは確かに出来る。
ただ、その高レベルAPIを「仕様として」リリースしたら、一般的にはもう削除は出来ないんだよ。
だから不要になった場合は、エミュレーションモードとして、動きはするがそれだけのもの(速くはない)として残すことになる。
VGAとかがまさにそう。今時のグラボもVGAは表示できないといけないので、この方法で残している。

ただエミュをするのなら、低レベルAPIによってではなく、実装側で高レベルAPIだけをエミュしたほうが簡単なんだよ。
それを低レベルAPIでエミュしろ、そうじゃないと駄目だ、ということになると、性能が引き出しづらくなる。
だから結局、低レベルAPIで高レベルAPIを構築というのは効率が悪くなる。多分頓挫する。
そのやり方はAPIではなく、ライブラリの粒度でやるべきなんだよ。
ライブラリってのは標準JavaScriptを低レベルAPIとして、中レベルAPIを構築しているわけだから。

例えばAppCache、もういらないとして、ブラウザ側で高レベルAPIだけをエミュするだけならまあ簡単だろう。
他の似た機能があれば、それと中身は差し替えて見た目だけエミュすることも可能だ。
(WebSQL->IndexedDBの場合とか)
しかしそれを構築するために使用した低レベルAPI群があるとして、これらも不要になるわけだが、
それらを全部エミュしたままで残せということになると、結局手がつけられず、そのまま残すしかなくなる。
結果、ブラウザ側に「開かずの扉」的コードが累積していき、長期的に進化を妨げることになる。
こうならないためには、「将来的にも」不要にならないAPIだけを規定していくことが肝要。
これは低レベルAPIの方が難しいんだよ。
コメント1件

125
デフォルトの名無しさん[sage]   投稿日:2016/05/13 22:06:20  ID:PxVJ9U+u.net(7)
まあいずれにしても、上手く行くかどうかは結果を見ればいい。
俺は上手く行かないと予想している。
ブラウザ側も馬鹿ではないから、俺が言っていることぐらい分かっている。
だからgoogleの「最適化としては行うが、asm.jsにべったりでは無い」というのがかなり妥当。
旗振り側のFireFoxは実装するしかないから、両方の言い分は分かる。
君の見方だけではgoogleが及び腰な理由を説明できないだろ。
コメント1件

126
デフォルトの名無しさん[sage]   投稿日:2016/05/13 22:12:02  ID:PxVJ9U+u.net(7)
> どうせちょっと高速化を意識するとTypedArrayをメモリに見立ててあれこれするようになる。
それはCの考え方だ。そして君はC/C++と連携するためにNodeを使っているのだから、君としてはそれで正しい。
ただ、「メモリ」を意識するのはJavaScriptじゃないんだよ。
だから、君はおそらくCの考え方に束縛されている。

というか、それだと君はJavaScriptを使えていない。
君だと、Rubyでは何故ただの数値ですらオブジェクトなのか説明できないだろ?

例えばサーバーのログを解析するとして、grepで済むならそれでいいけど、
それ以上なら通常はPerl等が用いられる。
もちろんこれをCでやることは出来るけど、普通はやらない。
理由は簡単、Perlの方が楽だからだ。
それをどうしてもCでやれ、Perlはインストールしてねーとなると、ふざけるな!となるだろ。

JavaScriptも同じで、クライアントスクリプトという政治的要因が無ければ、
当たり前だがその言語を使うのが一番楽(適している)ところで使われる。
その状態においては、
> どうせちょっと高速化を意識するとTypedArrayをメモリに見立ててあれこれするようになる。
これが要求されることはほぼ無い。
というか、メモリアクセス速度が要求されるのなら、最初からC/C++で書け、でしかない。
実際にこれで高速化するのなら、本来Cで書けばいいだけのものをJavaScriptで書いてるだけだよ。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)

コメント1件

127
デフォルトの名無しさん[sage]   投稿日:2016/05/13 22:12:42  ID:PxVJ9U+u.net(7)
PerlやRubyと同様、JavaScriptにもいい点はあって、
それを生かす書き方をしていると、仮にCがブラウザで動いたとしても、Cじゃつれーわ、となる。
君にはそれが無いだろ?それはJavaScriptを使っているだけで、使えていない。

クライアントスクリプトでの高速化は、今の俺の結論としては「後回し」、これに尽きる。
1画面分しかDOM操作はしない。出来れば内部データも用意しない。
これだけで見た目はものすごく速くなる。

クライアントサイドでどうしても演算が必要な場合は、ゲームか非標準の強力な暗号化くらいだよ。
速度が重要なガチゲーやる奴は「サクサク専用アプリ」があれば必ずインストールする。
だから結局用途が無いんだよ。

速いことは重要なのだけど、JavaScriptに求められているのは演算やメモリアクセス速度ではない。
演算が10倍速になるより、DOM操作が2倍速になる方が効く。
asm.js っぽくコーディングするよりも、DOM操作を1つでも減らすようにした方が効く。
だから asm.js は悪くは無いけど、いい筋ではないんだよ。
そして一般のクライアントスクリプトで asm.js 流の書き方をすることも無いよ。
だって読みにくくなるだけで効果ないから。つまり、流行る理由が見当たらない。

君はasm.jsがブラウザに必要とされていると本当に思っているのかい?
asm.jsが実装されるより、ブラウザでのDOM操作速度が2倍になる方が普通はうれしいだろ。
コメント1件

128
デフォルトの名無しさん[sage]   投稿日:2016/05/13 22:40:16  ID:PxVJ9U+u.net(7)
>121
> 仕様の量も段違い
とにかくこういうことにしたい奴が多いようだが、これは明らかに違う。
.NETにしてもJavaにしてもクラスライブラリの量は桁違いに多い。
文法的にも覚えることは多いし、記述的にもより細かく指定できる。
JavaScriptは軽くて簡単な言語だよ。元々そう作られたものだし。
(これは悪いことではない)

> その1つ1つのバージョンを意識したり指定したりということはできないし
> 原則後方互換性を守りながら拡張していくしか無い
Javaは知らんが.NETはバージョン管理されていて、
廃止されたメソッド等もある。(完全上位互換ではない)
ちゃんとやれば出来ることなんだよ。もちろんその実力が必要だけど。

詳しくは知らないが、DirectXはバージョンが一つ違ったら別物だったらしい。
低レベルAPIだから必然的に実装とリンクしてしまうのでこうなる。
結果的にMSはDirectXを使い捨てし続けることで乗り切っている。
Webもやれば出来るだけだよ。やってないだけ、やる実力も無いだけで。

とはいえ、試行錯誤でいくというのも一つのいい作戦だ。
その場合は、どうしてもゴミが紛れ込んでしまうので、定期的にGCしないといけない。
それが全く出来てないからおかしなことになっている。
コメント1件

129
デフォルトの名無しさん[sage]   投稿日:2016/05/14 00:17:31  ID:8701OXOx.net(5)
> 詳しくは知らないが、DirectXはバージョンが一つ違ったら別物だったらしい。
DirectXだけじゃなくて「昔は」って言ったほうがいいよ。

MSにかぎらず開発初期は変化が激しいのが普通だから
バージョンが一つ違っただけでも大幅に違いがある。

だけど、MSもそうだけど、成熟してくるとそう変わらない。
DirectXも同じ。

130
デフォルトの名無しさん[sage]   投稿日:2016/05/14 05:05:12  ID:lm5IbmMb.net(2)
>124
だからその将来的にも不要にならないってのが低レベルなAPIであることは間違いないのだが。
例えばNodeはSocket APIがあったのでネイティブで対応する前からWebSocketやHTTP2にもすぐ対応できた。
低レベルってのは語弊があったかもしれないがこのSocket API程度のことをイメージして話してる。
CSSで言うと変数とかフローレベルの定義とか、その程度。
>125
それは最初だけ。V8も去年から専用の最適化機構を入れている。
>126
「Cの考え」とかはない。メモリに見立ててと言ったのが語弊が合ったかもしれないが、
盤面情報などを多重配列で構築する代わりに1つの型付配列に収める程度のアルゴリズムの問題。
データ配置を意識しないといけないが、実際幾つも変数やら配列データやらを用意するよりもシンプルになり、
パターンとしては別に他の選択肢と比べても奇抜ではなく、JSらしくないこともない。
>127
実際asm.jsを使う場面が殆ど無いのは先も言ったとおり。
ただDOMがボトルネックの場面について(削減などに関する別の毛色の話は出来るだろうが)あれこれ言っても仕方がないし、
一方もちろんマイクロベンチ的なのを考えても仕方がない(本当はそうでもないこともあるが)と思っているので、
残った殆どないケースだがJSで書く必要があり、速度も必要な場面を基準に、「「ちゃんと」」書いた時の話をしたまで。
普通の場面で「「普通に」」書いた時の話はしてない。あくまでかなりニッチな話としてした。
>128
Webは中央政権的でない(なくなった)から全てをひとまとめにしてバージョン付けはできない。
これは前提条件として話している。この前提がそもそも間違っているからと言う話題は
他のこれを前提の上どう良くしていくかの話題と分けてくれないとただの愚痴的批判でしかなくまともな話ができない。
コメント1件


131
デフォルトの名無しさん[sage]   投稿日:2016/05/14 05:07:22  ID:lm5IbmMb.net(2)
Webはそもそも誰のものでもなくオープンなものだ。これは前提以上のWebがWebであるための性質。
昔はいろいろなところがデファクトに沿いながらも自分達に都合のいい仕様を作った。
それじゃ困るからと言って標準化の動きがあって、ベンダーも自然淘汰され整理されてきたこともあり、ちょっとはまとまりがでてきた。
そこら辺で起こる、JSの高速化、スマホ等による環境の変化、中央政権的なFlash等プラグインの死。
よって今まで文章を表示するためでしか無かったWebを、アプリケーションの基盤となれるようにしようという需要・必要性が生まれた。
でもCSSの向上からBluetooth機能までありとあらゆることを一箇所で1つの仕様として定義するのは何十年かかるか分からない。
Flashのような中央政権的やり方はマズイという意識も合り、バージョニングの弊害の反省もあったので、
バージョンはむしろ廃止し、よりオープンなそれこそ誰でもGithubに書いて主張できるような仕様形態に「自然となっていった」。
さて、仕様策定のプロセスが大きく変わってきたが、(昔的な)標準機構(形・影は薄れてきてる)はこれから何をするのがよいのか。
じゃあもう低レベルなAPI群を定義して、もっとオープンに仕様を発展できるようにしよう。
というのがこれまでの歴史。
それを踏まえた上で分けて話して欲しい。
コメント1件

132
デフォルトの名無しさん[sage]   投稿日:2016/05/14 08:40:44  ID:/oE1tyua.net
横から見てる者だけと、今のところはID:PxVJ9U+uの説明がしっくりくる感じ
ID:lm5IbmMb は表現が抽象的すぎてわかりづらい
「「ちゃんと」」(何をどうちゃんと?)
「「普通に」」(普通って何?)
「自然となっていった」(どの辺りが自然?)
何となくわかる気はするけど、具体的でない部分が誤解を生みやすいと思う
「ちゃんと === 速度を最上位に最適化した普通はやらないようなニッチな最適化」
こんな感じだと勝手に認識してるけど、一般的な感覚で考えても「ちゃんと」とは言い難いような
コメント1件

133
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:45:41  ID:Jg6FEyPA.net(12)
>130
レベルに関わらず、「将来的に必要」なAPIだけ規定できれば全く問題ないのだが、
それが難しいんだよ。
AppCacheにしても、WebSQLにしても、その当時は「それが必要」だと思っていたはずなんだよ。
WebSQLの方は政治的横槍で、AppCacheの方は担当者の実力不足でゴミ化したわけだが。

いずれにしても、「今」そう思っているものが「将来も」正しいとは限らないんだ。
君が言っているものは「もう既にあって」「今必要」なものだろう。(Socketは1983年製)
それを仕様化するのも重要な仕事だけど、それは凡人でも出来る。
本来仕様化しなければならないものは、「今無くて」「将来およびその後もずっと必要」なものなんだよ。

AppCacheは後者をやろうとして頓挫した。これは実力不足だ。
WebSQLの方は前者、つまり既にあるものをWeb用に焼きなおそうとした。これは凡人でも出来る。
ただし政治的要因で頓挫した。
NodeのSocketは、前者でしかない。20年以上実績のあるものの導入であって、凡人でも出来るものだよ。

Webがもたらした「先進的」仕様は、例えばHTMLとCSSの分離とかだよ。
(当時はレイアウトと文書を分離しないのが一般的だった)
これが効いてて、スマホでも見れる画面になっている。(対応しやすい)
一方、基本的にピクセル指定する従来アプリ(.NET)とかをスマホで見ると悲惨だと聞く。
だから.NETはUIの焼き直しを迫られている。

AppCacheについては実は俺も使おうかと検討したことがあるが、止めた。
理由は、俺が対象としているサイトはリバースプロキシが普及していて、
変にキャッシュするより読み直したほうがサクサクだからだ。(304が速攻返ってくる)
これが他のケースでも当てはまるとしたら、仮にAppCacheの仕様がいいものだったとしても、誰も使わない。
この場合の正解は、「AppCacheなんてじきにリバースプロキシが普及するから必要ありません」だ。
あるいは、「オフライン?ナローバンド?そんなものはありえない時代がすぐに来ますよ」だ。
これを当時言い切れるかどうかが「先見の明」ということになる。

134
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:46:10  ID:Jg6FEyPA.net(12)
> JSらしくないこともない
要するに自分の手持ちの選択肢の中で「JSでやるのが一番マシ」と思えるのならそれでよし、
そうでないのなら、それはJSを無理に使っているだけだよ。

> 実際asm.jsを使う場面が殆ど無いのは先も言ったとおり。
ブラウザを作っている奴らも暇じゃない。無限のリソースがあるわけでもない。
奴らにとって「重要」だと認識されない限りは歯車は回らない。
そして今のところ、あるいは近未来的にもそうはならないというのが俺の見方だ。

135
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:46:57  ID:Jg6FEyPA.net(12)
> Webは中央政権的でない(なくなった)から全てをひとまとめにしてバージョン付けはできない。
これはそちらの認識が間違っている。
そもそも、仕様を策定するのは「困るから」であって、「支配する」為ではない。
元々W3Cがその位置にいたのだが、官僚的だったのか、とにかく仕様の決定が遅すぎた。
だから無視するのが通例になってしまっているが、本来はW3Cが機能していればよかっただけの話だ。

ただ結果を見ている限り、clientHeight/innerHeight等、
名前を決めればいいだけの部分でさえすり合わせ出来ていない点、
あるいはJavaScriptと名乗れずJScriptとなっている点等からしても、
(どちらが仕掛けたかはよく分からないが)何らかの政治的思惑が絡まっており、
W3Cは「使えない」として見切りをつけられているように見える。
(見切りをつけたこと自体は正しいが、それによって我々が不便をこうむっているのはご承知の通り)

136
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:48:07  ID:Jg6FEyPA.net(12)
> 中央政権的なFlash等プラグインの死
以下を読んだ。
> http://uxmilk.jp/5784
まあ俺も筆者と同意、Flashは死ぬべくして死んだだけ、
ジョブスが引導を渡した形になったのは、ジョブスに先見の明があっただけ、と思える。
実際、今Flashが欲しいって思うことは無いだろ?要らなくなったんだよ。

だから君の
> Webは中央政権的でない
というところが大前提として間違っている。
そもそも、何であっても「中央政権的」ではないんだよ。それが資本主義だから。

例えば、iPhoneが中央政権的であるとしよう。
ではiPhoneがその機能を「搭載」あるいは「削除」したら、他が「必ず」付いてくるか?
答えはNoだ。Flashが必要なら他サイトは対応し続けるだろうし、iPhone側も搭載を余儀なくされる。

例えば初期のiPhoneは「コピペ」機能が無かった。これはジョブスが「不要」と判断したかららしいが、
さすがにこれは3代目くらいで「復活」した。(これについてはなぜいらないと思ったのか謎)
Windows8はスタートボタンを「廃止」したが、誰も望んでいないこの変更は修正を余儀なくされた。
かつてRIMMという先進的DRAMがあったのだが、特許料を取るだけのものだと判明したため、
各社は旧来のDDRをDDR2/3/4と進化させるほうを選択し、RIMMは死んだ。
何かを中央政権的に仕掛けることは出来るが、それを追認するかどうかは市場が決める。
結果的に、無理な仕掛けは頓挫するようになっている。これは資本主義のいいところだよ。

君の世界観が中央政権的なものを肯定するのは、
一般に中央政権的なことが出来る規模のトップにいる奴はかなり優秀で、
そいつらのやったことが正しくて追認されることが比較的多いからだよ。
ただし上記のように、探せば結構間抜けなこともやっている。

137
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:49:00  ID:Jg6FEyPA.net(12)
だから、それが大多数の人にとって正解と思えるのなら、自然と
> じゃあもう低レベルなAPI群を定義して、もっとオープンに仕様を発展できるようにしよう。
ということになっていく。それは君や俺がどう思おうが関係ない。
ただ、そうなっていないのなら、それはそう認識されてないということだよ。
つまり君の認識が間違っているということ。

asm.jsもServeceWorkerももう数年になるが、これらは君的には普及したと思えるのかい?
あるいは、これらの流れを受けて、低レベルAPIを規定していくことが主流になったと思えるのかい?
俺にはそうは見えないけど。

138
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:49:22  ID:8701OXOx.net(5)
将来においても絶対に変わることがなくて、
ブラウザの実装者の負担にならない最低限の共通の機能をもったAPI
そしてその共通APIを使ってより便利なことをするライブラリ。

この2つを「標準化」するべきなんだよ。

今現在は、最低限のAPI部分しか標準化されてないから
jQueryやlodashなどがでてきてしまっている。

最低限の機能だけじゃ開発は楽にならないので、
他の別の何かは絶対に必要になる。

139
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:49:51  ID:Jg6FEyPA.net(12)
> よりオープンなそれこそ誰でもGithubに書いて主張できるような仕様形態に「自然となっていった」。
これは事実としてそうなっているね。
つまり大多数の人にとって、これが「現状一番マシなやり方」と認識されているということ。

ただし、
> バージョニングの弊害の反省
これはjQueryか?
一般的にバージョニングで問題が発生するのは使い方が悪いだけ。
つまり、「仕様」に関わってはいけないレベルの馬鹿な奴らがバージョンを規定するからだよ。
そして必要な機能を「中央政権的」に落としたりするから混乱する。
あるいは変更の必然性が無い(延期できる)部分をバージョンを変えたからといって無駄に変更してみたり。

バージョニングで成功している例は、例えばWindowsだよ。
外面バージョンは、95, 98, Me, 2000, XP, Vista, 7, 8, 10 となっている。
これらまとめて全部 Windows という名詞しかなく、
明示的に分離することが出来なかったら、会話するのに困るだろ。(Linuxがそれに近い状態)

正しくバージョニングが出来ない連中ばかりだからといって、
バージョン自体をつけないのはさすがに間違いだよ。
実際、ES5,6,7, HTML4,5, CSS3,4ってのがバージョンだし、バージョンが付いてない案件はさすがに無いと思うが。
(バージョンが廃止された案件は無いはず。機能していない案件は多々あるとしても)
そして「このブラウザでは、HTML5, ES5, CSS3 まで対応しています」と言い切るためのもの。

140
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:50:45  ID:Jg6FEyPA.net(12)
ところで、
> Bluetooth機能
これは何?と思って調べたら、本当にあるんだな。
> https://developer.mozilla.org/ja/docs/Web/API/Web_Bluetooth_API
仕様としてはまあ妥当だな。
正直、bluetoothまでWeb側で面倒を見る必要があるとは思えないが、
OSのシステムコールを直接やらせることは出来ないという縛りによって、
OSのシステムコールの再発明を迫られるという間抜けな事態に陥っている。
とはいえ、これについては今後とも再発明し続けるという解しか思いつかないな。
IEEE側の仕様を上手いこと流用する手はあるはずだが、あちらは低レベル過ぎるだろうし。

141
デフォルトの名無しさん[sage]   投稿日:2016/05/14 16:17:29  ID:ciGNYqZA.net(4)
だいぶ意見の摺り合わせがなされた。殆ど言葉の定義的なことやニュアンスの行き違いで
多分経験と立場からくる「常識」などの差を考えれば、根本的な部分の意見の出し方の相違はあまりないと思う。
もうこれ以上は無理だろうけど、明らかに違う部分と、自分の中で強い意見を持ってる部分だけ言っとく。

まずバージョニングについて。
もちろんバージョンが付いてる仕様(ほぼW3Cが中心で策定)も未だ多くあるが、Living Standard版(ほぼW3C以外が中心で策定)の仕様も多くある
HTMLのように両方ある場合、『ブラウザベンダーが見るのは、LS版の方』で、こっちhttps://html.spec.whatwg.org/multipage/introduction.html
(ここの1.6までを読めば多少感覚がわかると思う)

バージョンが付いてる方は、バージョンが付いていないと困ること(例えば製品の対応状況の表明、例えばある時期においての仕様参照)のために、
LS版の方から重要な部分を定期的に抜き出してまとめてるだけのものであって、実際我々開発者にとっては意味のないと言っていいくらいのもの。

まあバージョン=悪いとは言わない。仕様開発においてバージョンにとらわれ過ぎることの弊害というべきか。
そしてLS版はある意味で更新日付がバージョンとも言える。ようは異質な存在というより、もっと回転を早くしていきましょう的なものとも言える。
コメント1件

142
デフォルトの名無しさん[sage]   投稿日:2016/05/14 16:20:23  ID:ciGNYqZA.net(4)
そしてJSらしさについて
そもそもJSらしさとは何なのか?例えばクラスっぽいものを作ろうとした時、
functionと.prototypeを使うのがそうなのか?
それでもって継承っぽいものを実現したいときは、ハックに近い方法で言語の底のプロトタイプ性に干渉し為すのがJSらしいということなのか?
それとも今となってはclass構文と、extendsで実現するのが素直にJSらしいということなのだろうか?

自分はというと、どっちも使う。さらに、__proto__を使ったピュアなプロトタイプベースでクラスシステムを作ったり、mixinもやる。
そしてその全てがJSらしいと思っている。汚い部分も、何でもかんでもやろとする部分もJSらしさだ。
型付配列だってそう。JSに存在しているのだから、それを活用することは当然JSらしいと思っている。

自分はJSに関しては、仕様、策定プロセス、実装(特にV8)も含めて愛していて、自分にとってJSとはその世界全体だ。
いい加減に書けるのもJSだが、「こう書けば速くなります」と言った書き方もJSだと思う。
なぜならエンジンはJS(ES)仕様を実装しているわけだが、実装されたものがJSとも言えるからだ。

昨今標準仕様として策定が完了するためには、最低2つのメジャーなエンジンに実装されることが必要とされているが、
逆に言えば複数のエンジンがきちんとした意思を持って実装したものは仕様と近しいと思っている。
また重要なこととして、各エンジンの最適化は、なにも適当に出来そうなニッチなケースからしているわけではなくて、
世間で使われているコードが速くなるような最適化がなされているのだ。

つまり何がいいたいかというと、曖昧なJSにおいて、比較的きちっと最適化パターンに沿って書くのは、
テクニカルというより、『お行儀が良い』行為なのだ。

そして、asm.jsについても似たことが言える。TypedArrayを使うのは『良いアルゴリズム』だし、
asm.jsに沿って書くからといって、別にJS道を外れるというわけでもないのだ。
人それぞれ好きなように書けるのがJSだ、と考えてる。

143
デフォルトの名無しさん[sage]   投稿日:2016/05/14 16:39:37  ID:ciGNYqZA.net(4)
>132
チョット違うな
「ちゃんと」ってのは「ちゃんと」だ。
ただ、「(そういう)ニッチなケース」における、「ちゃんと」だってだけ。
ただ自分がニッチなケースをわざわざ挙げたわけではなく、必然的にそこに行き着くということ。『必然』
「言語」で対比して話しているようだったからDOM周りの外部APIを活用するような、Webにおいて普通のものついては除いて考えざるを得なかった。
ただ1+1を何億回やるみたいなのの延長のマイクロベンチで語ってもあまり仕方ないと思った。
先方がN-Bodyを例に出していたので先にそちらにも触れたが、もうちょい大きな実用物でもそう言えるということを書いた。

そしてそのもうちょい大きな計算主体な実用物ってのは、自分が思い浮かんで良く作ってる中だと、
ゲームの先読みAIか、エンコーダ的なものかしか思い浮かばなかった。
だから前者のようなものでは1/2、後者ではまだSIMDとパラレリズムの実装が不十分な段階だから、もう1/2にはなるよと説明した。

別にそれはJSで書かなくてもいいと言われれば、勿論そのとおり。
でもJSで書くとなったとき、これらをJSで書こうとする微変態が「ちゃんと」書くとは、
当然最低でもボトルネック部分はasm.jsスタイル、そしてSIMD、SAB、AtomicsみたいなAPIも使いたいと思うだろう
(実際に対象の互換性を考えて使えないこともあるとかはおいといてね)という前提や思考の流れで書いた。
コメント1件

144
デフォルトの名無しさん[sage]   投稿日:2016/05/14 17:31:31  ID:ciGNYqZA.net(4)
ここまでの流れ、ちょっと狐につままれているような感じだ。
自分としては歴史や試した経験事実に沿って、淡々とお話した部分が多い。
別にこの宇宙において何が善悪かを語ったつもりもなく、一例を挙げたりしながら部分部分に対して必然的な事柄を語っただけだ。
だからバザール型云々の話も意図的にスルーしている。

本来は何が正しいのか、歴史のどこが間違っていたのか、を語りたいのではなく、
今はどういう状況で、それに沿って今からどういう心構えでいればいいのかを把握し、
一緒にWebを良くしていこうねということがしたかったからだ。

もしかすると例えば自分はその低レベルAPIが大成功すると考えてると思われてるのかもしれないが、べつにそうは思っていない。
策定に関しても、難しさは高レベルAPIと同じくらいだろう、と書いたように別に現状と大きく変わるとは思っていない。
ただ、そーゆーじだいなのよー、いーものつくってほしーね、ってだけ。

まあ、そういうわけなので、そもそもダメ、とか言うのは今回の話においてタブー視していた。
そもそもダメ、それも代わりにこっちの方がいいという案も出してくれてはいるものの、過ぎたことだったり、現実そうはならないことばかりだった。
今の流れに沿った上で、こういう風に改善していく道があるんじゃないかと具体的で現実的に示して欲しかった。
(現実的というのは、今からメーリングリストで発言すれば多少は風向きを変えられそうなくらいな意見をイメージしている)

まあできれば、APIレベルの改善点を挙げて欲しかった。
こういうAPIが良いんじゃないか、だから抽象的一般的にこういうことが言えるんじゃないか、
だから今のWebのこの流れは間違ってるんじゃないか、とね。

そうじゃないと、Webはそもそもがダメ、それを素直に直すのは無理、じゃあWeb捨ててネイティブ行くか!ネイティブ最高!
くらいしか考える事、言うこと無いよね、って思った。

145
デフォルトの名無しさん[sage]   投稿日:2016/05/14 19:38:06  ID:8701OXOx.net(5)
三行でまとめろ

146
デフォルトの名無しさん[sage]   投稿日:2016/05/14 19:41:36  ID:8701OXOx.net(5)
> そうじゃないと、Webはそもそもがダメ、それを素直に直すのは無理、じゃあWeb捨ててネイティブ行くか!ネイティブ最高!
> くらいしか考える事、言うこと無いよね、って思った。

ウェブ技術でネイティブ開発すれば良い。
そうすればネイティブのものをウェブに以降することもし易いし
その逆も簡単になる。

今はネイティブの方が機能も多く速度が早いが、その問題も
ハードウェアとソフトウェアの進化によって次第に解決しつつある。
JavaScriptに新しいAPIが生まれているのは、ネイティブにしかない機能を無くすためだし、
asm.jsとかも速度を早くするため。

最終的にウェブ技術さえあればどちらの開発もできるようになる。
その時ネイティブアプリの終焉が訪れる。
コメント1件

147
デフォルトの名無しさん[sage]   投稿日:2016/05/14 22:08:17  ID:Jg6FEyPA.net(12)
>141
1.6まで読んだ。なるほどWHATWG側の見解は分かった。
しかし、ある意味ありがちな展開だ。
仕様を決めている奴は仕様を決めるのが目的で、使うためではないからな。(手段の目的化)
これは決裂して当然、とはいえもうちょっとマシな展開は無かったのかとも思うが。
そしてECMAscriptの仕様書が他言語と比べて異様な理由も理解した。

LS版が日付=バージョンなのはそれでいいが、
LSってのは「永遠に追いつかない目標仕様」であることを意味する。
実際そうなのかもしれないが。

本来は「仕様」がまずあって、それに沿って各所が部品を用意し、一気に組み上げるものだ。
プレハブの家とかいい例だ。
H264だって、仕様が確定してからでないとハードウェアデコーダは実装できない。
(仕様が少しでも変わるとゴミになる恐れがあるから)
LSってのはWebみたいに、いつでもダウンロードできて最新版が提供できるという前提でしか使えない。
LSでいけること自体がWebの強みかもしれんね。

148
デフォルトの名無しさん[sage]   投稿日:2016/05/14 22:09:49  ID:Jg6FEyPA.net(12)
> JSらしさ
ユルい所だよ。だから君の理解も間違いではない。

言語を比較するのなら、便利機能はどんどん追加されるから、裸の状態で比較した方がいい。
JSについては、型無し、動的確保、全ての関数にクロージャ、
お手軽匿名関数、正規表現、といったところだろう。(なお全て既存でありJSの発明ではない)
これらはCには無い。だからこれらを活用したいのならCよりJSということになる。
一方Cなら、ポインタ、最高速のメモリアクセス、ほぼアセンブラの低レベル記述となる。
だからメモリアクセスで勝負が決まったり、あるいはゴリゴリにチューニングしたいのなら、それはC向きだ。

例えばあるDOMのクリック回数をカウントしたいとして、JSなら
var count = 0;
dom.onclick = funciton(){count++;};
で終わりだ。一方、Cなら、
1. グローバルに配列またはハッシュを用意し、(遠くに記述される)
2. 各DOMに通し番号またはハッシュキーを用意し、(管理項目が増える)
上記と同様のコードとなる。
つまり、同じことを実現するのに、考えないといけないことが増える。要するに、面倒なんだよ。

JS含めてLL言語に求められるのは、チャキチャキ書いてサクッと実行、そして結果を得ることだ。
デバッグ時間も含めて結果を得るまでの最速が求められる。実行時の最高性能ではない。
だからお手軽に結果を得たければLLで、実行時の性能が第一ならCで書けということになる。

149
デフォルトの名無しさん[sage]   投稿日:2016/05/14 22:10:30  ID:Jg6FEyPA.net(12)
JSの特徴はユルさだ。だから君みたいに好きなように混ぜこぜで書くのならそれはJS向きだ。
ただ、TypedArray「しか」使う気が無く、またそれがそのアプリにとって重要なら、それはC向き案件だ。
それはメモリアクセス速度が重要だということだから。

N-bodyにこだわる必要は無くて、他のベンチでもおおむね同じだ。
「素のJS」を「素のC」と比べた場合、普通のコードなら5倍程度遅いということなんだよ。
当たり前だが添字範囲チェックはあるし、ハッシュキーも引くし、2重ポインタな訳だから、メモリアクセスは遅い。
TypedArrayでもこれらは変わらない。あれはこれ以前の型チェックが抜かれただけだから。

この状態で、5倍は見過ごせないというのなら、それはCで書くべきだし、
5倍程度で済むんだったら上等、それならイージーにやりたいと思うのならJSということだよ。
スクリプト言語で5倍程度なら、それは異様なほど速いので、俺は十分満足している。

TypedArrayは固定長配列だろ。それはユルさをひとつ消してしまう。
例えば、FIFOキューを作るとして、可変長なら shift(), push() だけで長さのことを考える必要もない。
それが固定長だと考える必要が出てくる。あふれないように追加のコードも必要だ。
もちろん固定長としてしか使わないのならTypedArrayでもいいし、
逆に固定長であることをTypedArrayで明記するというコーディングルールもありだろう。
しかし、こんなところを気にする奴が使うべき言語では無いんだよ。元々ね。それがLLというものだ。

150
デフォルトの名無しさん[sage]   投稿日:2016/05/14 22:12:06  ID:Jg6FEyPA.net(12)
多分な、Web系の奴らが勘違いしているのは、「Webは特別だ」と思っていることなんだよ。君も若干そんな感じ。
ただ、Webは特に難しいわけでもなく、移り変わりが激しいわけでもなく、また逆に、言われているほど馬鹿でもない。
関わっている普通の人たちが普通にがんばってきた結果が今であり、それはどの時代も大して変わらない。

> APIレベルの改善点
Bluetoothはあんなもんだろう。Promiseを返すのがいいのかは若干疑問だが。
DOMみたいにgetterが設定されまくったオブジェクトを返すほうが親和性があると思う。

AppCacheは要らないのなら廃止すべき。少なくとも「10年後に廃止する」というアナウンスを出すだけでもぜんぜん違う。
WebSQLも廃止するのなら廃止で、IndexedDBに統合するのなら廃止予定をアナウンスすべきだろう。
これらも放置すればブラウザの足を引っ張ることになる。廃止は10年後でいいから、その種まきを今やるべきだ。

asm.jsは基本的に意味の無い演算をすることになっていて、それで型情報を補完しているだろ。
だったら実演算部分に突っ込むのではなくて、コメントでもよかったんだよ。例えば、
function someFunc(start) {
start = start | 0;
ではなくて、
function someFunc(start) { // "use asm: int32 start"
とか。//で始まった一行コメントの最初に "use asm:がある場合に有効となる。
これだとasm.js非対応時に速度が落ちるという間抜けな事態は発生しない。
ただしコメントがバグっている場合は asm.js 対応環境でのみ動作しないということが発生する。(非対応環境では動作)
しかしこのコメントをつける奴らは当然対応環境でデバッグするのだから、これでいい。
コメント1件

151
デフォルトの名無しさん[sage]   投稿日:2016/05/14 22:13:45  ID:Jg6FEyPA.net(12)
XHRは304が見えるようにしたほうがいい。
XHLHttpRequest.canSee304 = true で status に 304 が見えるみたいなのでいい。もちろんデフォはfalseで。
あとリクエストの優先順位付けが出来た方がいい。
大量にXHRを発行するとブラウザ側の<img>レンダリングと取り合いになって、どちらかが待たされる。
優先XHR > 画面内img > 基本XHR > 画面外img > 劣後XHR
で3レベルあれば十分だと思うが、これはもう少し検討した方がいい。
今はchromeだと「先にリクエスト打ったもの勝ち」になっている。

DOMはレンダリングを一時停止するAPIがあったほうがいい。
DocumentFragmentはひとかたまりでしか使えない。
ばらばらの場所に一度に大量挿入するときにレンダリングをとめる手段が無い。
具体的に言えば、今画面に表示されているDOMをソートしなおすときとかに使う。

Array.createはやっぱり欲しいときがある。

ぱっと思いつくのはこんな感じか。
君の手柄にしてくれていいからよろしく頼むわ。

ところで君はNodeをコンソールでも使っているかもしれないようだが、デバッグ環境はどうなっている?
俺は>122のとおりWSH+VSには失敗している。
NodeがChromeDevToolsでデバッグできるのならそれも相当魅力的なので。
コメント1件

152
デフォルトの名無しさん[sage]   投稿日:2016/05/14 22:17:11  ID:8701OXOx.net(5)
>150

> 多分な、Web系の奴らが勘違いしているのは、「Webは特別だ」と思っていることなんだよ。君も若干そんな感じ。

Web系じゃないやつが勘違いしているのは、
「Web系の奴らがWebは特別だと思っている」はずだと
思っていることだよ。

誰も特別だと思っちゃいない。
お前には特別に見えるのか?
ならお前が特別だと思ってるんだろ。

153
144[sage]   投稿日:2016/05/15 05:38:37  ID:79V1eiQO.net(6)
>146-
まあAppCacheは(一応JSへのAPIもあるがそんなに使われていない)
あくまでキャッシュなのでいきなり削除しても問題になることが少なく
特例的に極めて廃止しやすい方だ。(廃止される)
他のAPIも、LSが広まりだしてから非推奨を設定しやすくなった。

しかし、ブラウザがその実装を取りやめるのは、各ブラウザが収集している
ユーザーが閲覧しているページでのAPIの利用頻度が実際にほぼ無視できるレベルまで落ちた時だから
開発者やそのための解説情報作者のモラルを高めないことには難しい。

とは言え、10年も経てば流石にどんな仕様でも削除出来ると思うよ。
ただ、EWMの夢物語でさえ東京オリンピックのころかなというイメージだ。
10年は自分にとってWebにおいて永遠と等しいように感じる。
コメント1件

154
デフォルトの名無しさん[sage]   投稿日:2016/05/15 09:04:33  ID:u/cc/woI.net(9)
>153
> 10年は自分にとってWebにおいて永遠と等しいように感じる。
これでいいんだよ。逆に有限で廃止すると混乱する。

> 10年も経てば流石にどんな仕様でも削除出来ると思うよ。
どんな糞仕様であっても放置しているだけでは削除できない。
typeof(null) が object なのを削除できてないだろ?
あるいはthisがグローバルになるという糞仕様も削除出来てないだろ。
この2つなんて、ただのバグの温床であって、活用できるものではない。
ではデフォで"use strict"にできているかというと、これも出来てないだろ。
そういうものなんだよ。

Webの仕様で、ただの案ではなく、完全に「正式仕様」として認識されたもので、
「正式に廃止」されたものがあるかい?
上記を見る限り、使われなくなったものは多々あっても、「正式に廃止」されたものは無いんだと思うよ。

> しかし、ブラウザがその実装を取りやめるのは、各ブラウザが収集している
> ユーザーが閲覧しているページでのAPIの利用頻度が実際にほぼ無視できるレベルまで落ちた時だから
まあこれは一概には言えないけどね。chromeはJavaを切ったろ。無視できるレベルではなかったと思うよ。
実際に、俺は偶に遭遇するしね。
これも「正式に廃止」したのではなく、勝手にサポートを止めただけだ。
事実上の廃止勧告であったとしても、仕様から「正式に廃止」することは無いのだと思うよ。

本来、仕様策定とは、こういった混乱を防ぐためのものだ。W3Cは全く機能していない。
この点については、
>131
> (昔的な)標準機構(形・影は薄れてきてる)はこれから何をするのがよいのか。
WHATWGは新仕様の採用には積極的なのだから、もうそっちは完全に任せて、
W3Cは旧仕様の削除に専念するのもありだと思うよ。
後者は要するに利害関係者間の調整であって、WHATWGの連中がやりたがる仕事ではないし、
本来の「仕様策定」側の仕事でもあるから。
コメント2件

155
デフォルトの名無しさん[sage]   投稿日:2016/05/15 12:44:09  ID:mCzE/lrH.net
何で削除出来てないかって、単純に
破壊的仕様変更は許さないだけでしょ。
言語仕様を変えるのもまずありえないけど、デフォルトを変えるって実運用では禁じ手じゃん。
だから、これはvいくつですよ、って宣言書いて、非対応であればハネる仕組みを充実させるしかないし、ポリフィルが要らなくなることは無い。

156
デフォルトの名無しさん[sage]   投稿日:2016/05/15 13:47:01  ID:e+kzQGE7.net
ブラウザのJavaScriptの特殊性を分かってないんじゃないだろうか?

開発した時のJavaScript実行環境と
違うバージョンの実行環境で動かすことだってあるのが
ブラウザのJavaScriptなんだが?

実行環境は互換性を保っていなければいけない。
当たり前の話なんだがな。

コンパイル言語で言えば、ある機械語の動作を
変えてしまうってことだよ。

157
144[sage]   投稿日:2016/05/15 16:58:58  ID:79V1eiQO.net(6)
>151,154
昔は知らないが今のバージョンのXHRは試したが304が最初から見えるはずだ。
優先度については自分もこの間も悩んだばかりだ。
XHRの進化は終わっているが、Fetchの方などでそこの部分は議論されているので見込みはあるかもしれない。
Fetchでは一応今のところリクエストには優先度というパラメータがある。(ユーザーエージェントが決める)
というとこまで決まっている。
まあ、みかけ上帯域制限するだけならStreamAPI使えば今でも出来るんだが、
帯域制限することも考えたAPIでないから、このAPI上でストリームを絞ったところで
実際ブラウザやOSがそれに従うという保証がないのが残念なところ。

DOMの一部分のレンダリングを止めるというのはちょっと難しいかも知れないが、
一旦スタイル指定で隠すというのが今のブラウザに対するそう言ったメッセージで、
そうしておくと無駄な処理は省略してくれる。
もしくは、DOM及びそれにアクセスするJSのプロセスを分けるという試みが為されているので
その延長上で期待するような状態が作れるかもしれない。

そして機能の正式な廃止だが、HTML5以前は独自実装およびデファクト仕様の山で、
HTML5になってから多少は整理したが未だ漏れてるものも数多くあるので、
廃止されるとなっても、それは機能の廃止というより独自実装の取りやめ、標準への追従に見えるということ。
実際にはshowModalDialogとかそこそこメジャーでも各ベンダーが一生懸命廃止させた仕様は幾つもあるし、
人知れず消えてったマイナーな仕様、挙動は沢山ある。
コメント1件

158
デフォルトの名無しさん[sage]   投稿日:2016/05/15 17:01:58  ID:79V1eiQO.net(6)
>154
'use strict'強制は、ES2015のclass構文内やモジュール内で達成されている。
typeof nullの挙動は2年前治そうという案の盛り上がりが頂点に達したのだが互換性のために断念した。
が、将来的な演算子オーバーロードの仕様が入ると共に直す策を入れようと言う案は出てる。
もしくは、V8が画策している型付厳格JSの方向性が成ればそちらでも更生は可能。

でも自分としては、動的言語で型を一生懸命「事前にチェックする」のは良くないという持論を持っている。
その代わり、せっかく備わっている暗黙の型変換を利用して、型を「揃えて」おくのが良いと思う。
例えば自然数入力を期待してpromptを出し続けるのであれば、
do{
n = prompt('自然数') | 0
}while(n <= 0)
で良い事が多いし、良いとするようにする。
この場合入力がキャンセルされた際のnullも、空入力の""も+演算子で0になる。
そういうパターンを活用し、そういうパターンが活用できるようなロジック・仕様を組み立てるのが、
JSをスクリプト言語として上手く活用していく上での1つの答えと思っている。

そういう感じで、nullに関して重要なのは、もっとよく扱えるようにする事かもしれない。
例えば昔から案があって、直近はそろそろ仕様に入りそうなくらい盛り上がってきたこれ
https://esdiscuss.org/topic/existential-operator-null-propagation-o...
こういう演算子が入ったりすれば、ますます「事前にチェックする」必要性がなくなる。
コメント5件

159
デフォルトの名無しさん[sage]   投稿日:2016/05/15 17:04:24  ID:79V1eiQO.net(6)
誤字脱字や凡ミスは良いように解釈してくれ。スマヌ。

160
デフォルトの名無しさん[sage]   投稿日:2016/05/15 17:51:57  ID:u/cc/woI.net(9)
そういえば asm.js については、本当にこれが必要だと思っているのなら、本格的に型を導入したほうがいい。
someVariable = someVariable | 0;
の代りに
function(int32 someVariable){
また、
var someVariable;
の代りに
int32 someVariable;
double64 someVariable2;
だ。というか、asm.jsはかなり中途半端な仕様で、本格的に型が導入されてたら完全にゴミになるだろ。

この記法だと、当然JIT側の対応が必要となるので、
周知徹底、つまり「仕様として正式通達」が必要だし、浸透する時間も必要だ。
ただ、JITの改変自体は、宣言部は functionDecSrc.replace(/int32|double64/g,'');
中身は functionSrc.replace(/int32|double64/g,'var');
を頭につけるだけだから、やる気だけの問題だ。
政治的に問題なく、大手の協力さえ得られれば、1年でいける。
本来はこういう「関係者間の折衝」含めていい仕様を策定するのがW3C等の仕事だ。
コメント1件

161
デフォルトの名無しさん[sage]   投稿日:2016/05/15 18:16:01  ID:gfIC+EQb.net
>160
アホか。パーサ書いて文脈見ずにreplaceなんかで解決できねえよ。

162
デフォルトの名無しさん[sage]   投稿日:2016/05/15 19:03:27  ID:u/cc/woI.net(9)
>157
> 昔は知らないが今のバージョンのXHRは試したが304が最初から見えるはずだ。
いや、見えんぞ。Vistaなんでアレなんだが、
chrome 50.0.2630.1 canary SyzyASan と FireFox 45.0.2 だ。
もしそちらで確認できるのなら、環境を教えてくれれば助かる。
Flags等の設定をしているか?俺は全くしていない。

一応確認だが、DevToolsやFireBugで 304 になっているリクエスト結果に対し、
JavaScript側から XMLHttpRequest.status で確認すると 200 になっているということだ。
アップデーターを実装したとき、304ならその時点で処理を止めたいのだが、
全部200に化けているからこれができない。
コメント1件

163
デフォルトの名無しさん[sage]   投稿日:2016/05/15 19:54:18  ID:79V1eiQO.net(6)
>162
http://httpstat.us/304
に対して試してるんだけどそれらの環境で304取得できるよ。
こういうコードで。
xhr = new XMLHttpRequest
xhr.open('get', '304')
xhr.onload = () => console.log('status', xhr.status)
xhr.send()
コメント2件

164
デフォルトの名無しさん[sage]   投稿日:2016/05/15 19:55:03  ID:79V1eiQO.net(6)
おっと、
xhr.open('GET', 'http://httpstat.us/304')
にしとくか

165
デフォルトの名無しさん[sage]   投稿日:2016/05/15 20:00:25  ID:u/cc/woI.net(9)
> Fetch
見てみたがよく分からん。
ただ、帯域制限したいのではなく、本当に必要なものを順に取得したいだけなんだよ。以下とも絡むが、
> 一旦スタイル指定で隠すというのが今のブラウザに対するそう言ったメッセージで、
これは display = 'none'; だよな?これだと確かにレンダリングはされないのだろうが、
その中に<img src='XXX'>があると src をとりにいくんだよ。
結果、この明らかに表示に関係ないリクエストでXHRが待たされてしまう。
また逆に、表示する<img>のsrc取得も、大量にXHRを打ち込んだ後だと待たされてしまう。
これはモロに表示が遅れるので丸見えになる。
自動でやってくれるのが一番いいのだけど、多分それは無理なので、(XHRが表示に関係するか判定できない)
少なくともユーザー側で「今欲しいかどうか」を指定する必要がある。

> DOMの一部分のレンダリングを止めるというのはちょっと難しいかも知れないが
いや、一部分ではなく全体を止めていい。
アップデータで更新部分を差し込む際、結果的にばらばらの位置に差し込まれるときがあるんだよ。
ただ、差込自体は一度に行われるし、全部差し込んでからレンダリングでいいので、全体停止でいい。
多分ダブルバッファ的なものをやりたがる奴も出てくるはずなので、どの道必要になるとは思うのだが。
今のDOMはレンダリング制御用のAPIが全く無いんだ。
(とはいえ、速度にこだわらなければ無くてもいいんだが)

> Null Propagation Operator
これは好みだろうな。
if (a && a.b) a.b.c = d;

if (a?.b?.c) a.b.c = d;
と書けるという事だろうけど、こんなところでタイプ量をケチってもしょうがないし、
バグってても見た瞬間修正できるので、正直どうでもいい。
コメント1件


166
デフォルトの名無しさん[sage]   投稿日:2016/05/15 20:08:28  ID:u/cc/woI.net(9)
>163-164
サンクス。こちらもそのコードで304を確認した。
ただし俺のスクリプトでは確かに304が200に化けている。
原因究明には少し時間がかかりそうだ。

167
デフォルトの名無しさん[sage]   投稿日:2016/05/15 20:45:26  ID:u/cc/woI.net(9)
>158
> 動的言語で型を一生懸命「事前にチェックする」のは良くないという持論を持っている。
流儀があるのなら好きなようにすればいいし、コーディングルールに引っかからなければいいとは思うが、
それは一般的にはトリッキーだと言われると思うぞ。

null と '' を弾きたいのなら、普通はチェック部分に纏めて以下にする。
do{
n = prompt('自然数');
} while(!n || n <= 0)
知ってないといけないことは、null は偽(常識), '' は偽(JavaScript特有)だ。
前者は他言語でもそうなので、後者だけ知っていれば済む。

それに対して、君のコードは
1. null | 0 の結果がどうなるか(JavaScript特有)
2. '' | 0 の結果がどうなるか(JavaScript特有)
を知っていなければならない。自動型変換後のビット演算だ。かなり仕様の隅っこ。
そしてそれは制御論理とは本質的に関係ない。
つまり「JavaScript知ってる俺カッケー」でしかないんだよ。

しかも、論理構造に無駄があるだろ。
俺のコードは、弾く部分で弾いているだけ。
弾かれる対象を確認するためには、whileの1行を見れば済む。
君のコードは、不正入力は後で弾かれる入力に変換して、結果的に後から弾く構造になっている。
だから弾かれる対象を確認するためには、2行見ないといけない。
記述が分散している分、バグも含みやすい。

だから無駄に難しいコードになっているんだよ。
それで速度等のメリットがあればいいんだけど、今回については無いと思う。したがって、糞コード扱いされる。

君は無駄に3倍難しいコードを書いている。
それは、俺のような単純明快なコードを書くように勤めれば、同じ労力で3倍の規模のコードを扱えることを意味する。
君のやり方だと能力の2/3をみすみす捨てているようなものなんだよ。勿体無いだろ?
コメント6件

168
デフォルトの名無しさん[sage]   投稿日:2016/05/15 20:52:38  ID:u/cc/woI.net(9)
>158
> 'use strict'強制は、ES2015のclass構文内やモジュール内で達成されている。
確認した。現実的にはこれで問題なさそうだな。
http://stackoverflow.com/questions/31685262/not-recommended-to-write-o...

169
デフォルトの名無しさん[sage]   投稿日:2016/05/15 22:01:03  ID:u/cc/woI.net(9)
>163-164
どうやら 強いEtag + nginx + gzip の場合に駄目らしいと分かった。
俺のスクリプトで化けているサイトも該当している。
> https://github.com/rtomayko/rack-cache/issues/111
しかしこれはこちらではどうにもならんな、、、、

とりあえず、XHRの問題ではないことは確かなようだ。

170
デフォルトの名無しさん[sage]   投稿日:2016/05/15 22:04:49  ID:WWQ4vbR2.net
>165
優先順位を粗方決めたいだけならServiceWorkerを使えば可能そう。


>167
つまり何が言いたいかというと、
n = prompt('自然数')

(この型は何だ!??)
という状態のまま処理を出来る限り進めないということ。
もっと言うと、「n」なのに数値じゃないかもしれない可能性を作らないこと。

このnをあちこちのサブルーチンに配ればあちこちで型に対するチェックや配慮が必要になってしまう。
そうではなく、もうなるべく早く、できればもう変数に最初に入れる前くらいに取りうる値を出来る限り狭めておく。
そうして置けば以降そのnについて心配しなくていいし、そういうのを徹底しとけば
いろんなサブルーチンを書いたり使うときも、引数の扱いで心配することが減る。

JSにおいて型周りで一番多く、かつデバッグが困難なのは、
数値と文字列、そしてそれにパターンマッチが絡んだりする場合だと思ってるので、
特にDOM APIにおいては明示的に数値や文字列にまず揃えることがお作法だと思っている。

どうでもいいが、変数や引数の型が一定になることはエンジンにとっても優しい。

だがそれで長々とやってたら動的型付け使ってるのが馬鹿みたいなので、
自分は暗黙の型変換(''+、+、|0、のようなもの)を活用する。
まあ「Number(str)」でもいいが、「parseFloat(str)」は嫌いだ。
コメント2件

171
デフォルトの名無しさん[]   投稿日:2016/05/15 23:44:52  ID:9x+kn/QP.net
>143
こいつダメだ

172
デフォルトの名無しさん[sage]   投稿日:2016/05/15 23:55:13  ID:u/cc/woI.net(9)
>170
> ServiceWorker
とりあえずhttps限定の時点で使えない。
気持ちは分かるがそこはユーザに選択させろよなと。

ただchromeが勝手に読みにいく<img>に対して優先かそうでないかを指定できないと意味が無い。
自分が打ち込むXHR内での優先順位ではないんだ。
ただそれ以前に優先順位のつけ方が見当たらないが、どれ?
https://developer.mozilla.org/ja/docs/Web/API/Request
コメント1件

173
デフォルトの名無しさん[sage]   投稿日:2016/05/16 00:26:42  ID:GmJz87Lv.net(3)
>170
主張は分かるがそれは完全に「型あり」の考え方だからな。
そうしたいのなら、「型」を導入してキャストするのが一番いい。
つまり、

Int32 n = (Int32) prompt('自然数');

となる。どう見ても Int32 にしかなり得ないと、一目で分かる。

ああ、だからそういった意味で言えば、 asm.js はキャストでもよかったのかも。
彼らは value | 0; で Int32 にキャストしているつもりなのかもしれないが、
それはビット演算を絶対にしない人の感覚であって、
実際にビット演算を使用する人の場合、あの記述だと混ざってしまうのでよろしくないんだよ。
とはいえ、JavaScriptの通常の使い方でビット演算が必要なことはかなり稀なのだけど。

> 特にDOM APIにおいては明示的に数値や文字列にまず揃えることがお作法だと思っている。
いやこの必要なくね?APIは期待した型を返してくるし、そこで引っかかった覚えは無い。
'px'が付いている連中は若干うざいけど、バグったらすぐ分かるし。

ただやっぱ君は「型あり」向きだと思うよ。俺もだが。
var 禁止で全部 Int32, double64, string のどれかに差し替えろといわれても大して不満無いだろ。
コメント1件

174
デフォルトの名無しさん[sage]   投稿日:2016/05/16 05:31:59  ID:3fs8uQMw.net
>172
HTTPS必須は、「Let's Encrypt」が一般的に広まって、もっと道入が楽になることに期待する。

SWはXHRに限らず、あらゆる通信をプロキシできる、そしてその種類(image等)が分かるので、
例えばページが開かれてから200msの間全てを保留して、
その間に溜まって、その後も溜まっていくものから優先度の高いと思うのから捌いていけばいい。

ただこれではimg間での優先度が付けられないのでそこは工夫する。
一番簡単なのはhashを使ったりURLに情報を入れる事だろう。(src='〜.jpg#high')
もしくはページ自体の取得もSWを通じて行われるので、もっとアグレッシブにHTMLを解析してリクエストが来る前に読み込んだり、
初回開いたときにリストを作っておいて、次回から利用するとかいろいろ考えられる。
コメント1件

175
デフォルトの名無しさん[sage]   投稿日:2016/05/16 08:47:49  ID:Pz1/eYkg.net(2)
横から口を出すが

>173
結局、>167の主張はスルーして「ToInt32(null) === 0 を知っていなければならない」の前提でいいのか
俺としてはES6の標準関数も型変換されているから「型変換ルールは知っていなければならない」で当然だと思うが

Math.min(null, 1); // 0 (「ToNumber(null) の結果がどうなるか」を知っていなければならない)
Math.min('', 1); // 0 (「ToNumber(null) の結果がどうなるか」を知っていなければならない)

それから>158は型付を否定しているわけではなく、「事前にチェックするのが良くない」とする考え方だ

function hoge (int32 n) {} // 事前にチェックするので bad
 ↓
function hoge (i) { var i32 = ToInt32(i)); } // 事前チェックは通過するが、後で型変換する
function hoge (i) { int32 i32 = ToInt32(i); } // 同上(型付でも考え方は変わらない)

長すぎる云々は>158がES6範囲内で動くコードを書いているのに対してあなたがこうあるべき新仕様と対比しているので当たり前
短くしたいのなら

function hoge (toint32 i) {}

でも作り上げればいくらでも短くなるだろう(自分で短い仕様を構想すれば良いんだから)
コメント1件

176
175[sage]   投稿日:2016/05/16 09:11:44  ID:Pz1/eYkg.net(2)
>154
HTML5でかなりの要素が廃止された
http://momdo.github.io/html51/obsolete.html#non-conforming-features
CSS2.1ではかなりの仕様変更がなされた(削除ではないが、変更でも現行CSSには影響力があるものだ)
http://www.d-toybox.com/spec/CSS2.1/appendixC/index.html

削除ではないが、追加する事で影響を受けたのがtypeof演算子
ES6でSymbol型が増えた事でObject型のチェックが面倒になった
Object (host and does not implement [[Call]])は規定文字列以外の全ての文字列値をとり得るが、"symbol"が追加された事でtypeof arg === "symbol"がObject型ではなく、Symbol型となった
実際、ES6でもType()に相当する機能がないんだよな...
http://ecma-international.org/ecma-262/5.1/#sec-11.4.3
http://www.ecma-international.org/ecma-262/6.0/#sec-typeof-operator

177
デフォルトの名無しさん[sage]   投稿日:2016/05/16 12:29:46  ID:8sje1dNr.net
そういえば、lodashのisObjectは未だに"object", "function"しかチェックしないな
https://raw.githubusercontent.com/lodash/lodash/4.12.0/dist/lodash.core.js

function isObject(value) {
var type = typeof value;
return !!value && (type == 'object' || type == 'function');
}

178
デフォルトの名無しさん[sage]   投稿日:2016/05/16 15:12:30  ID:x27HpYqy.net(2)
なんでそういう実装になってるんだろう?
function isObject(value) {
return value === Object(value)
}
の方が素朴で良い実装じゃね?

179
デフォルトの名無しさん[sage]   投稿日:2016/05/16 15:16:43  ID:x27HpYqy.net(2)
まあはやくReflect.isCallableとか追加されて欲しい、
ダックタイピングぽく、型より機能としてチェックするほうがいいと思う。

180
デフォルトの名無しさん[sage]   投稿日:2016/05/16 23:16:06  ID:GmJz87Lv.net(3)
>174
それはやれば出来るかもしれないが、「制御のための制御」になるので駄目だ。
別の言い方だと、それにかかる労力の割りに得られる結果がショボ過ぎて駄目だ。

そこらへんもやはり君はCの感覚なんだよ。「やりきれば出来る」というのがそう。
LL言語だと、「面倒なことは事はやらない」なんだよ。その分動作は遅いけど、手抜きが出来る。
そしてこの手抜きが出来る分、大規模なプログラムを扱うことが出来、
結果的にもっと大掛かりなこともできるという利点につながるんだよ。

分かるか?
勝負するところが違うんだ。
Cのような行単位でチューニング済みの最速コードを目指すのではなくて、
積極的に手を抜いて、結果的に規模の限界を突破することを目指すんだよ。
Cで10k行のコードを扱えるのなら、LL言語では30k行のコードを扱える。
当然やれる範囲が広がるだろ。
JavaScriptは簡単だから馬鹿でも扱えるというのは事実だけど、そこで留まるのではなくて、
それを達人が使ったら何が出来るのか?を目指すんだよ。
普通は「早く仕上げる」ためにLL言語なんだが、それだけではないんだよ。
コメント1件

181
デフォルトの名無しさん[sage]   投稿日:2016/05/16 23:32:06  ID:GmJz87Lv.net(3)
>175
> 長すぎる云々
まず文盲で無いことを示してもらおう。これは具体的にどこのことだ?
俺は長さについては問題にしていない。

文盲を相手にしてもどうせ読み間違えまくってくるので議論はどうやっても空回りする。
これはもう既に学んだ。
コメント1件

182
デフォルトの名無しさん[sage]   投稿日:2016/05/16 23:37:53  ID:oaJCE3x/.net
>181
>167の下記だろう

俺のコードは、弾く部分で弾いているだけ。
弾かれる対象を確認するためには、whileの1行を見れば済む。
君のコードは、不正入力は後で弾かれる入力に変換して、結果的に後から弾く構造になっている。
だから弾かれる対象を確認するためには、2行見ないといけない。
記述が分散している分、バグも含みやすい。

183
デフォルトの名無しさん[sage]   投稿日:2016/05/17 02:50:45  ID:rVqZFYUE.net(2)
> 弾かれる対象を確認するためには、whileの1行を見れば済む。

一行で書けば同じでしょ?

弾かれる対象を確認するためには、どこかの1行を見れば済む。

184
デフォルトの名無しさん[sage]   投稿日:2016/05/17 03:25:50  ID:rVqZFYUE.net(2)
それに一行に複数の意味を込めたらだめだよw

185
デフォルトの名無しさん[sage]   投稿日:2016/05/17 09:05:07  ID:sIex+koZ.net
>180
確かに個人的にはそういうコードを毎回書いても楽しいから苦にならないのだが、
何もそうしろと言いたかったわけではなく、一般的に利用するときは
ただそういうフレームワークを読み込んで、各リソースURLに「#priority」を付けるだけ
ってのは十分労力の割に結果がデカイと思うよ。

WebやJSの歴史見ても、「面倒なことは事はやらない」ってより、
「面倒なこと、汚いことは事はライブラリやフレームワークがやる」だった。
コメント3件

186
デフォルトの名無しさん[sage]   投稿日:2016/05/17 13:34:21  ID:3yAYzGW4.net
>167は null, '' しか考慮していない時点でダメ
"123hoge" を撥ねない時点で期待通りに動かない(自然数以外も代入されうる)

187
デフォルトの名無しさん[sage]   投稿日:2016/05/17 14:54:21  ID:bcEq7422.net
一番ヤバイのはnが文字列であることだろう
後々必ず問題を引き起こす

188
デフォルトの名無しさん[sage]   投稿日:2016/05/17 17:31:09  ID:ZRrmZHfn.net
>167は仕様理解者に恨みでもあるのか
「JavaScript知ってる俺カッケー」とか偏見にしても度が過ぎていると思うが

189
デフォルトの名無しさん[sage]   投稿日:2016/05/17 19:36:20  ID:lpSSxhpK.net
分からんな
演算子による暗黙の型変換を一通り覚えるのは
中級者への登竜門でそれほどハッキーなこととは思えん
Dateのインスタンスだけはプリミティブ化されるとき、
valueOfよりもtoStringの方が先に呼ばれるみたいなことを
前提なコーディングは流石に万人向けではないと思うが

190
デフォルトの名無しさん[sage]   投稿日:2016/05/17 22:07:15  ID:XBBLWA5H.net
暗黙の型変換は標準メソッドでも行われている事だし、それを覚えずしてJavaScriptを使うっていうのはなあ..
>158の問題点は ToInt32 されるから 9007199254740991"|0 === -1 になる事だが、>167の問題に比べたら些細な問題だ
これは Math.floor を使えば解決できる

do {
var n = Math.floor(pronpt('自然数'));
} while (n >= 0)

Math.floor() の暗黙の型変換(ToNumber)が「JavaScript特有」な論理をふりまくなら Math.floor(Number(pronpt('自然数'))) としてもいいが、正直冗長だと思う

191
デフォルトの名無しさん[sage]   投稿日:2016/05/17 23:41:38  ID:q3gkuA0r.net
>185
> 「面倒なこと、汚いことは事はライブラリやフレームワークがやる」だった。
正確に言えば、「やるとなると面倒だが、普通はたいていの人が必要とすることは、ライブラリやフレームワークがやる」だ。
これはWebに関わらずプログラミング一般だ。それがライブラリ/フレームワークの存在意義だし。

> 各リソースURLに「#priority」を付けるだけ
になっているライブラリ等が既にあるのかい?それなら確かに導入する意味がある。
それはどれだか教えてくれないか?
(ただ、多分俺の環境では実際に導入することは出来ないが)

いずれにしても、「がんばってまでやりきる」為の言語ではなく、「がんばらずにやれる範囲でサクッとやる」なんだよ。
既にライブラリやフレームワークがあるのなら、「がんばらずにやれる」のでサクッといただきだ。
そういう奴らが多い+プロプライエタリには極度にしにくいから結果的にいろいろ乱立することになるが、
それはある意味正しい姿といえる。
少し無駄や気に入らない部分があっても、自前で作り直すのではなく、面倒だからそのまま使う、だ。
その1メソッドの中での最適化で勝負するのではなく、
もっと大きい範囲での最適化(サクッと結果が出せるか)で勝負するんだよ。

あと追加。
https://developer.mozilla.org/en-US/docs/Web/Events/scroll
scroll の e に delta がない。
だから糞遅い scrollTop の問い合わせがいちいち必要になる。
.NETだと e.delta でどっち向きにどれだけスクロールしたかが取れる。
同様のことはmousemoveにも言えるのだけど、
あっちは clientX とかがあるから、DOMクエリしなくても追跡できる。
scrollはDOMクエリを強要されるのが辛い。
サンプルも window.scrollYを取っているけど、アレは実は結構重い。
そしてそれがサンプルにあるように、大抵の場合はスクロール位置の確認が必要になる。

192
デフォルトの名無しさん[sage]   投稿日:2016/05/17 23:42:45  ID:3NFQlF5/.net
Math.floorを使ってもdoubleで扱える範囲でないと仕方ないのは変わりない。
入力が適切に処理できる範囲に収まっているか確認し、大きすぎます等の案内を出す必要がある
コメント2件

193
デフォルトの名無しさん[sage]   投稿日:2016/05/18 00:08:03  ID:jjsucSg3.net(2)
>185
あと、ついでならMDNもお願いしていい?

1. https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objec...
内のメソッド parse について、
× > JavaScript で日付を表す文字列を解釈して、地方時で 1970 年 1 月 1 日 00:00:00 から経過したミリ秒を表す数値を返します。
○ UTCで

194
デフォルトの名無しさん[sage]   投稿日:2016/05/18 00:09:05  ID:jjsucSg3.net(2)
>185
2. https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objec...
test がさも search や exec の代りの高速メソッドとして使えるように書いてある。
これは半分事実なのだが、実際はtestはexecを1回やるだけなので、RegExpをバッファするとバグる。
具体的には以下。2回の同じ入力の呼び出しに対し、出力が異なる。
(testinputはそのページの使用例の出力先をconsole.logに書き換えただけの物)

function testinput(re, str) {
var midstring;

if ( re.test(str) ) {
midstring = " contains ";
} else {
midstring = " does not contain ";
}

console.log(str + midstring + re.source);
}

var rexp = /a/g;
var str = 'abc';
testinput(rexp,str); // abc contains a

testinput(rexp,str); // abc does not contain a

これは完全に落とし穴掘っているだけで、MDNだけ読んでいても気づかない。
だから「testは実際はexecを1回起動するだけです。詳細はexecを確認してください。」みたいな誘導が必要。
testに渡す正規表現に g つけんな!ってのはあるけど、
管理上、同じ正規表現を使いまわししたいときがあって、(その正規表現はプログラム内で1箇所にしたい)
そのときに g が付いているやつがあってバグった。
だから、「gつけないでください」という誘導でも実質的にはいいのだけど、多分MDNの雰囲気とは合わない。

195
デフォルトの名無しさん[sage]   投稿日:2016/05/18 00:33:18  ID:OcMV4DaZ.net
>192
そりゃそうだが、随分面倒な処理を要求するんだな
Number 型全体が IEEE 754 の制約を受けるわけだが、制約外の数値を正しく検出するようにしろという事か
対処療法的には入力文字列を正しくパースして数値比較する
根本的には ECMAScript のビルトインオブジェクト全体を書き換える必要があるわけだが、そこまでやる必要あるのかね
コメント1件

196
デフォルトの名無しさん[sage]   投稿日:2016/05/18 01:11:57  ID:r9bj4L60.net
>195
君の言う問題点とやらを解消するためにはそこまでやる必要があるというお話さ
そしてそんなに難しく考えなくともdoubleとして受け取るのならNumber.MAX_SAFE_INTEGERを超えてないかどうかチェックすればいいだけ
コメント1件

197
デフォルトの名無しさん[sage]   投稿日:2016/05/18 22:06:18  ID:Y5c0aQW+.net(3)
>196
なるほど、理解した

198
デフォルトの名無しさん[sage]   投稿日:2016/05/18 22:43:30  ID:Y5c0aQW+.net(3)
修正版

do {
 var n = Math.floor(prompt(Number.MAX_SAFE_INTEGER + '以下の自然数を入力してください'));

 if (!n) {
  alert('数値となる自然数を入力してください');
 } else if (n < 0) {
  alert('負の数は指定できません');
 } else if (n > Number.MAX_SAFE_INTEGER) {
  alert(Number.MAX_SAFE_INTEGER + '以上の数は指定できません');
 }
} while (!n || n < 0 || n > Number.MAX_SAFE_INTEGER);
コメント1件


199
デフォルトの名無しさん[sage]   投稿日:2016/05/18 22:49:59  ID:JiGf9hjC.net
誰が完璧な自然数受け付けのロジックを長々と書けといった……
そこまでするなら多長倍数ライブラリ使ったら?
コメント1件

200
デフォルトの名無しさん[sage]   投稿日:2016/05/18 23:38:34  ID:Y5c0aQW+.net(3)
>199
初めは while 条件だけで終わらせる予定だったが、
>192が「大きすぎます等の案内を出す必要がある」と指摘したからエラーメッセージを追加したが、MAX_SAFE_INTEGER だけエラーメッセージを追加するのはおかしいので他のメッセージも追加したら結果的にこうなっただけ
この程度のコードでライブラリを使う必要は感じないが、最近のコーダーはライブラリ使用の見極めが速いんだな

201
デフォルトの名無しさん[sage]   投稿日:2016/05/19 03:19:33  ID:tfaQOE9Q.net(2)
ってか、キャストしてる時点で型がどうのではなく、型変換してるからな。
普通に、/^[1-9][0-9]*$/するのがいいんじゃねーの?入力は文字列なんだから。
どう考えても、Math.floorに文字列を渡す理由にならん。先頭か末尾に空白あるときはどうなるんだっけ?とか悩むじゃん。
integer.Parse通さないと数字にならないどころか、例外すら発生するのがまともな型のある言語。
コメント1件

202
デフォルトの名無しさん[sage]   投稿日:2016/05/19 04:45:29  ID:3i7lekC+.net
>201
JavaScriptは型違いをTypeErrorとせず、暗黙の型変換をする言語なんだから型変換で正しいんだよ
コメント1件

203
デフォルトの名無しさん[sage]   投稿日:2016/05/19 05:59:57  ID:tfaQOE9Q.net(2)
>202
知ってるよ…だから、型のアノテーションがどうだとか、型を定義すべきだって話が眉唾と言うか、良い所全部殺すなって思うんよね。
コメント1件

204
デフォルトの名無しさん[sage]   投稿日:2016/05/19 07:31:01  ID:l0qmM6vP.net
>203
> 型のアノテーションがどうだとか、型を定義すべきだって話が眉唾と言うか、良い所全部殺すなって思うんよね。
文脈を読めてないんじゃない?
型付き言語にこだわっていた人と>198は別人

205
デフォルトの名無しさん[sage]   投稿日:2016/05/19 08:30:40  ID:F9dbx1t6.net
JavaScriptは型付き言語でないわけで、そこに型付きな考え方を付加させても、各々のポリシーでいかようにでもスタイルが変化するって事をわかってない感じ
また、型付き言語であっても変数に代入されるまでは型が確定されないわけで経過処理で型変換を挟んではいけないわけではない

206
デフォルトの名無しさん[sage]   投稿日:2016/05/19 13:24:53  ID:qyR8CUMd.net
入力は限られてるし、取り扱いを間違っても原則ブラウザがクラッシュしたりすることはない。
それどころか不意に関数エラーが出ても、こういったイベントドリブンな場合は、何も問題なく復帰できることも多い。
最悪詰まっても、文章は読める。そこが所謂低レベル言語との違い。

207
デフォルトの名無しさん[sage]   投稿日:2016/05/19 13:36:54  ID:Gndv5tvj.net
LLマンセー

208
デフォルトの名無しさん[sage]   投稿日:2016/05/19 14:55:40  ID:XceO64sZ.net
何も自慢できない男の人って可哀想(;;)

209
デフォルトの名無しさん[sage]   投稿日:2016/06/09 09:39:33  ID:FTTkP1ld.net
arrow function の引数の丸括弧を省略する記法嫌いな人って多くないのかな

const fn = arg => { console.log(arg); };

const fn = (arg)=>{ console.log(arg); };
コメント3件

210
デフォルトの名無しさん[sage]   投稿日:2016/06/09 13:20:53  ID:bsniAtVU.net(2)
時と場合によるだろう。
この場合は、あった方が良い

211
デフォルトの名無しさん[sage]   投稿日:2016/06/09 13:43:16  ID:QTm6YzLa.net(2)
>209
省略記法全般が嫌い
{} の省略の方が嫌だな

しかし、このアンケートに意味があるとは思えんのだけど、ただ雑談したかっただけ
多いか少ないかなんてどうでもいいと思うが

212
デフォルトの名無しさん[sage]   投稿日:2016/06/09 13:43:46  ID:QTm6YzLa.net(2)
ただ雑談したかっただけ?

213
デフォルトの名無しさん[sage]   投稿日:2016/06/09 14:51:10  ID:eWu1TzV4.net
>209
省略できるものは原則省略したほうがいい。セミコロンも含む。
短く書けるとき、あえてそうしないというのは、
何らかの特別な意味を表す必要がなければしない方がいい。
コメント5件

214
デフォルトの名無しさん[sage]   投稿日:2016/06/09 16:09:58  ID:bsniAtVU.net(2)
>213

そういうのは、ミニファイツールでOKでしょう。
コーディング中は、原則省略すべきじゃない。
GitHubで公開するソースも省略するべきじゃない。
可読性を下げてはいけない。

省略した方が読み易いとか云う奴は、独りよがりの変態なだけ
コメント1件

215
デフォルトの名無しさん[sage]   投稿日:2016/06/09 20:35:01  ID:ziShIi0x.net
>213
釣りはウザイから止めろ。
ガチで勘違いしているのなら google のコーディングルール読め。駄目な例まで挙げてある。
http://cou929.nu/data/google_javascript_style_guide/

>209
一般にどうなのかは分からんな。
しかし所詮は慣れだろうし、世間がそう書くなら慣れるしかないのでは。
なおそのケースなら俺は function と書くが。
sortの引数のような最初から function であることが確定している部分はいいけど、
それ以外の所(何が書かれるか分からないところ)には function と書いた方が見やすいと思うから。
コメント1件

216
デフォルトの名無しさん[sage]   投稿日:2016/06/11 16:34:28  ID:tWgkOxEq.net(2)
>214
いいや、無駄なものが付いてるほうが可読性が落ちる。
特にGitHubではセミコロン省略が推奨されてるでしょ。
https://github.com/feross/standard/blob/master/RULES.md#semicolons
それなのに付けろというのはそれこそ独りよがりだよ。
でも君が独りよがりだから悪いとは言わないよ。
JSは独りよがりで自由であるべきだからね。

217
デフォルトの名無しさん[sage]   投稿日:2016/06/11 16:40:46  ID:tWgkOxEq.net(2)
>215
釣りではない。
GitHubやnpmなど、セミコロンフリーのスタイルは確立されている。
自分も様々なスタイルを試した結果、今はこれに賛同しているだけ。
ただし、この2つは同じく原則省略でも細部の取り回しが異なる上、自分もそれらとは微妙に異なる。
ルールセットの他の部分は当然違う。結構細かくいろんなスタイルが存在する。
そのどれもが考えられてるのだから悪いとかフザケてるとか思うようなことでないと思う。
それなのに人の信念というか、正義を釣り呼ばわりするのはかなり独りよがりだと思う。
でも落ち込まないで、そんな君も好きだよ。
コメント3件

218
デフォルトの名無しさん[sage]   投稿日:2016/06/11 17:39:28  ID:ZhHlBSFM.net(3)
>217
キモいわ。

個人が作った勝手ルールだろ。それに従いたければ勝手にしろよ。
googleの方は「こういう問題があるから、こういうルールにしました」という、極めて実用的なものだ。
俺がgoogle側のルールを妥当とするのはこの点からだ。
コーディングルールは、見やすさではなく、バグを含まないためにある。
セミコロン程度の見やすさなんて、所詮慣れでしかない。
付いている方が無駄バグが発生しにくいのなら、当然それがルールで、見にくいのなら慣れろ、という立場だ。

お前はこのスレに来るべきではない。テンプレ読めよ。
お前は3,000行のコード、書けないだろ。

219
デフォルトの名無しさん[sage]   投稿日:2016/06/11 19:12:42  ID:ZhHlBSFM.net(3)
>217
つうかおめー、マジで頭おかしいぞ。
有名どころは全部「セミコロン付けろ」だぞ。
個人レベルでの勝手ルール持ち出すとか、キチガイだと分からないか?
それともGitHubを勘違いしているか?あれは誰でもアカウントを作れる。もちろん君でも。

> JavaScriptのスタイルガイドまとめ(おすすめ4選)
> google
> jQuery JavaScript Style Guide
> Airbnb JavaScript Style Guide
> > https://github.com/airbnb/javascript (star 36,207、対して feross は 5,886)
> Node
> http://qiita.com/takeharu/items/dee0972e5f39bfd4d7c8

220
デフォルトの名無しさん[sage]   投稿日:2016/06/11 19:13:01  ID:ZhHlBSFM.net(3)
> npm
> https://www.npmjs.com/package/standard
npmだけは確かに「省けるセミコロンは省け」と言っている。
ざっくり見た感じは、「JavaScriptについてよく知れば、それが出来る」ということらしい。
つまり、どういうケースでAutomaticSemicolonInsertionが動くか理解して、
常にそれを考えながらコーディングしろ、ということなのだが、
そんなことやってるからJavaScriptの連中は上達してないんだと思うけどね。

本来のプログラミングの「技能」は、言語をまたいで汎用的なものだ。
その言語でしか使えない知識は、「文法」でしかない。
俺たちはJavaScriptのおかしな文法を極めたいわけでもない。JavaScriptを使いたいだけだ。
君の論理なら、使いたいだけのために勉強を強いるのもまた「独りよがり」でしかないだろ。

不思議なのは、JavaScriptの連中にはこの主張をする輩が多い事だ。
npmが震源だったということなのか?
C++で「テンプレートを極めてから来い」
C#やJavaで「クラスライブラリを極めてから来い」
なんていう奴はいない。それはどだい無理だからだ。
だから知っている範囲でコーディングを開始していく。そして「そんな機能あったのか!」ってのも割とよくある。
JavaScriptはギリギリ極められるくらいの軽量言語ではある。
しかしだからといって、それを極めたところで益はない。せいぜいセミコロンが省けるだけだ。
そんなことに時間をかける価値なんてないだろ?
全部セミコロン付けてリントで落とし、さっさと本題に行こうというのが普通だ。
コメント1件

221
デフォルトの名無しさん[sage]   投稿日:2016/06/12 00:32:26  ID:npk74fIw.net(6)
詳細確認したが、
> セミコロンフリー (>217)
ではないぞ。

> // ok
> ;(function () {
> window.alert('ok')
> }())
>
> // avoid
> (function () {
> window.alert('ok')
> }())
> https://github.com/feross/standard/blob/master/RULES.md#semicolons

必要な時には行頭に付けろという、一周回った発想だ。

222
デフォルトの名無しさん[sage]   投稿日:2016/06/12 00:33:54  ID:npk74fIw.net(6)
npmの所にある3者のうち、(全部読んではないが、videoは全部見た)
1つ目は教条的な理由、
> “They’re required because ASI is unreliable.” Seriously!?
> These rules date back to the early days of JavaScript, in the late 90s.
> They’re not new, and in my opinion there is no excuse for someone calling themselves a professional JavaScripter and not understanding statement termination.
> It is blatantly irresponsible of the thought leaders in the JavaScript community to continue to spread uncertainty rather than understanding.
> http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-...
2つ目はどのみち必要だという理由、
> Even if you use semicolons at the end of every statement, some constructs parse in non-obvious ways. Regardless of your preferences in semicolon usage, you must know the rules to write JavaScript professionally.
> http://inimino.org/~inimino/blog/javascript_semicolons
3つ目は「関数には要らなくて関数式には付けろとか『初心者には』分かりにくい」ということだった。
> https://www.youtube.com/watch?v=gsfbh17Ax9I

よく見るとなるほどこのnpmのコーディングルールの作者がferossか。
ならばそれは「GitHubで確立されている」とは言わない。それは君がGitHubを勘違いしているだけだ。
GitHubはただの置き場であって、誰でも何でも置けるんだよ。プログラムである必要すらない。
とはいえnpmではある程度の評価を得ていることは事実だな。ただ明らかに主流ではないが。

セミコロン無しの有名言語はRubyとPythonだと思うが、そっち出身でなければ大人しく付けておいて、それに慣れた方がいい。
Ruby/Pythonとの相互運用なら可能性はありだが、
俺はRubyもPythonも知らないのでどちらがマシかの判断は付かない。
コメント1件

223
デフォルトの名無しさん[sage]   投稿日:2016/06/12 05:22:59  ID:Q2nOr0zy.net(2)
>222
大人しく付けておいて慣れたほうがいい。ね。
興味深い考え方だね。
でも自分はどんな作業にしろ常に思考し改善しようと努力する質だから。
大人しく常識に沿って手を動かすだけというのは好きじゃない。
少しでもそういう意識があればむしろ書かれているように、
Note: If you're often writing code like this, you may be trying to be too clever.
Clever short-hands are discouraged, in favor of clear and readable expressions, whenever possible.
というのに「気づく」と思う。
キモい?当たり前。
俺も散々吐き気をこらえていろいろなスタイルや概念を試してきた。
何度も行ったり来たりした。
キモいのは上等!その先に必ず改善があるのだから。
そして多くを見れば本当に「キモい」ものが何かがわかってくる。
class構文やプロトタイプ的継承術に慣れた後では
JSのデフォの継承システムが一番「存在的にキモい」ことに気づくのと同じ。
でも分かった。そういうのを他人に求めるのはエゴなんだと。
すまなかった。。。。。。。
コメント1件

224
デフォルトの名無しさん[sage]   投稿日:2016/06/12 05:36:18  ID:Q2nOr0zy.net(2)
>220
極める必要なんてない。
例えば暗黙の型変換周りと比べると非常に明快。
ただ、「括弧で始まる前に付ける」。
これさえ守ればいい。
細かいこと言えば『接続させたくない』接続可能な他の演算子の前にも付ける必要などあるが、
まずそうであることはありえない。

そして「括弧で始まる」ようなものを書くようになるのは入門終了後だから、
その程度の「決め事」と一緒にそれらの書き方を学ぶのが特に負荷になるとは思わない。

225
デフォルトの名無しさん[sage]   投稿日:2016/06/12 05:49:08  ID:GMtpRE4O.net
>他人に求めるのはエゴ
はいこれで決着ね

226
デフォルトの名無しさん[sage]   投稿日:2016/06/12 11:40:13  ID:npk74fIw.net(6)
>223
いや悪いが「キモイ」ってのは君の投稿内容のことであって、JavaScriptの記法の事ではなかった。
ここは馴れ合う場所ではない。

ただやはりそれは努力の方向を間違っていると思うよ。
先に書いたように、「文法」を覚える努力をいくらやったところでプログラミングの「技能」は上達しない。
勉強する前に鉛筆の削り方に異常にこだわるようなものだ。さっさと勉強を始めた方がいい。

> class構文やプロトタイプ的継承術に慣れた後では
> JSのデフォの継承システムが一番「存在的にキモい」ことに気づくのと同じ。
釣りか?JSのデフォの継承システム=プロトタイプ的継承だが。

> その程度の「決め事」と一緒にそれらの書き方を学ぶのが特に負荷になるとは思わない。
「とりあえず全部セミコロンつけとけ」の方が楽だ。何も学ぶ必要はない。(JSなら余分も問題にならない)
なお、JSの場合はセミコロンは「必要な場所に無ければ挿入される」であって、「不必要」ではない。
そして return の場合は改行でいきなり終端されるとか、動作に一貫性がない点もある。
たぶんRubyやPythonは最初から「不必要」で設計されている。この点が違う。

227
デフォルトの名無しさん[sage]   投稿日:2016/06/12 11:40:36  ID:npk74fIw.net(6)
インターネット上で自分と同じ意見を探すのは、使い方を間違っている。
最近「ブサヨ」「パヨク」とか言われているだろ。あそこまで見事に「裸の王様」になるのかとも呆れるが、
君は彼等と同じインターネットの使い方をしている。
どんなマイナーな意見でも、世界中を探せば同意見の奴は大概見つかる。自分が世界一マイナーな確率なんてほぼゼロだから。
だから、検索でヒットしても安心したら駄目だ。それはどれくらい支持された意見なのか確認する必要がある。
大勢が採用した物には、それなりの理由がある。マイナーならばそれにも理由がある。

君にはJavaScriptの技術力もないし、
マイナーな意見をGitHubの大勢だと勘違いしてしまう程、インターネットのリテラシーもない。
もちろん何故大勢が「セミコロン付けろ」なのかも分からないだろ。
余分な苦労をせずに上達したいのなら、「普通に」色々やった方がいい。もちろんそれも含めて君の自由だが。

そしてやはり君はここに来るべきではない。邪魔でしかない。
この手の「議論以前の常識」についてグダグダ言いたくないから別スレを作ったんだ。
君は「質問スレ」でいいはずだ。彼等はこの題目なら嬉々としてレスしてくるだろうし。
コメント1件

228
デフォルトの名無しさん[sage]   投稿日:2016/06/12 11:50:23  ID:k/2WgB7H.net
ここまで静観して見てたけどその例えはどうなのよ
Web板での政治社会的なレッテル貼りや質問スレの〜行以下のコード云々の煽りはともかく
このスレでだけはまともに議論や情報交換をするものだと思っていたのに心底残念だよ
コメント2件

229
デフォルトの名無しさん[sage]   投稿日:2016/06/12 12:18:41  ID:bynAnAmH.net
セミコロンは付けるか付けないかではない。付けさせるか付けさせないかだ。
そう考えれば付けさせるしかないだろ。
コメント2件

230
デフォルトの名無しさん[sage]   投稿日:2016/06/12 12:24:25  ID:npk74fIw.net(6)
>228
では出ていくなり、他スレを立てるなり、好きにすればいい。それも自由だ。
ここは言いたいことを言い合う場所であって、言って欲しいことを言ってもらえる場所ではない。

どこについて怒っているのか若干謎だが、
「ブサヨ」「パヨク」については適切な例えだと思うぞ。実際そうだし。
ただ彼等について嘲笑するだけなのは、それもまた駄目なんだよ。
自分もそこに陥ってしまう危険性に気づき、他山の石としなければならない。
実際、彼もその罠に嵌っているわけだし。

マイナーな状態で旗印があれば信者はそこに飛びつく。
そして周りが自分と同じ意見であることに安心してしまうのだが、それでは駄目なんだ。
セミコロン無し派がnpmに集結しているのは正直驚きだった。だから詳細を確認した。
結果、「宗教」だった。対してgoogle/jQuery/Node/Airbnbは「実利」だ。俺はノータイムで「実利」を取る。
とはいえ、いずれにしても「宗教」の時点で議論する意味はない。
どうあがいても平行線だからね。

だから結局好きにするしかないのだが、セミコロン付ける派にも「宗教」の奴はいるはずで、
人口が C/C++/Java >> Ruby/Python な以上、「宗教」としてもひっくり返らない。
だから変にこだわるのではなく、「セミコロンあり」に慣れるしかないだろ、というのが至極妥当な見解だと思うが。
コメント1件

231
デフォルトの名無しさん[sage]   投稿日:2016/06/12 12:26:16  ID:3NjnbAB7.net
>228
ここで議論したことあるけど、高確率で煽る方向に絡まれるから有意義な議論は期待できないと思うよ
議論中に軌道修正しようとしたけど、ほとんどが無駄だった

232
デフォルトの名無しさん[sage]   投稿日:2016/06/12 12:33:31  ID:npk74fIw.net(6)
>229
そうなんだけど、セミコロン無し派も結構ガチなんだよ。
リンターも整形ツールも既に提供している。
あのferossって奴もGitHubの垢見る限りそこそこ大物だ。

ただ正直、そこまでこだわる理由もよくわからんのだが、、、
コメント1件

233
224[sage]   投稿日:2016/06/12 16:06:44  ID:gONGsgja.net(2)
>227
俺はここはJSを愛する者達のスレ、と認識していた。
今は亡きECMAスレの面影を重ねているのかもしれない。
要するに、より良いJSを目指す者質の意見だ。
ただの常識とやらにそった意見の飛ばし合いならばそれこそそこらの質問スレですればいい。
こういう議論をするためこそにこのスレが有るのだし、
現にこういう議論が出て初めてスレが伸びたんだからそういうことに違いないだろう。
ともかく、こういう議論をすること自体は良い。としてもらいたい。

>229
彼に少しでも良いJSを目指したいという精神が感じられなければ、またこういうスレでなければ俺も「あえて」付けるなとは言わない。
この場所、このタイミングで質問した彼には真実に繋がるヒントを伝え、そこへ目指して欲しかった。

>230
>>「慣れるしかない」
どうして?いや、仮に「セミコロンを原則付けること」に慣れる必要があるとしても、
「セミコロンを原則付けないこと」にも慣れてはいけない理由なんてないし、
そっちを普段自分の中でメインで使って良くない理由なんてないよな。

>232
俺がこだわっているのは、「セミコロンを付けないほうがいい」ということよりもむしろ、
そういうことを教えたり教わったり考えたり、もっと自由な研究をしようよということだな。
た だ し、『プログラマー』『スクリプター』『JSer』になりたいのならね。
そうでないのならどうでもいいが、俺はそうなってほしい、JSを愛して欲しいと考えるからこうした立場をとっている。
JSを教えるとき、JSって、スクリプト言語って、プログラミングって楽しいんだよ、深いんだよ、広いんだよ
ということを感じてほしくはないかい?俺は欲しい。
一緒にJSを味わい尽くし、発展に協力してもらい、共に夢を見る関係になりたい。
そう思うことはそんなに変かな。
このスレでは許されると思ったんだけどね。寂しい。。

234
224[sage]   投稿日:2016/06/12 19:04:38  ID:gONGsgja.net(2)
あー、それとここまでの流れをちゃんと見てみたら混乱を招いてるようなので
一つ断っておきたいんだが、俺はバランスタイプなんだ。
俺が「セミコロンを付けないほうがいい」などと言ってるのは、
あくまで彼に対するレスが偏り過ぎないよう、不足分を埋める立場になっただけで、
その瞬間ではあくまで彼のためだけの、彼の方向に向いたレスでしかない。
他のレスとは補完関係であって、互いに影響を及ぼしたり対立したりするつもりはない。

もし他の人が「セミコロンを付けないほうがいい」といったならば、
俺は逆の立場から言っていた。
あくまで俺の目的は、広く深い心と知見と情熱を持った『JSer』育成にあるからだ。
何か1つのそれっぽい答えを貰うだけで満足してほしくはない。
いろんな案を受け入れ、自ら試行錯誤してより良いJSを追求していって欲しい。

235
デフォルトの名無しさん[sage]   投稿日:2016/06/12 23:59:15  ID:NYt/6ntu.net
自転車置き場の議論てやつだな
あほだな
コメント1件

236
デフォルトの名無しさん[sage]   投稿日:2016/06/13 00:25:03  ID:AxmCg6hy.net
>235
ほう、名詞があるんだね。
色々考えたんだけど、JavaScriptの連中が上達してない原因は多分そこだと思うんだよ。

C初心者「for文、while文、if文…」
JavaScript初心者「for文、while文、if文…」

C初心者「ポインタ…」
JavaScript初心者「セミコロンはどこに打つべきか議論しよう(キリッ」

C初心者「ポインタ…ポインタ…構造体…」
JavaScript初心者「暗黙変換の活用について(キリッ」

多分、本質的でないところにトラップされてるんだ。
Cはこの点、寄り道無しで初ボスかつラスボスのポインタがいきなり出てきて勇者は死ぬ。
そして何度も復活の呪文を唱えつつ、そこを抜ければいきなり中級者になってる。
JavaScriptの連中は完全にここで空回りしてしまってる。
セミコロンを打つ場所なんてマジでどうでもいいのに、さも重要なことのように言うのは詐欺だよな。
コメント2件

237
デフォルトの名無しさん[sage]   投稿日:2016/06/13 06:36:45  ID:o3uO7eJP.net
>236
実際には、セミコロンを打つ位置ではなくて、なぜセミコロンが省略でき、その場所では省略してはいけないのかが問題なんだけど、題目的にしか議論してないからな。
ポインタだって、参照と実体とかにフォーカスした方がいいんだろうけど、その辺スルーだし。

238
デフォルトの名無しさん[sage]   投稿日:2016/06/14 10:56:42  ID:ScASA3Ww.net
>236
一番重要で本質的なことは、
長く複雑なコードをいかにスマートに書けるか、
いかに問題を短く簡潔なコードで早く書けるか、
ってことだと思うよ。
各機能がどうのこうのは、それこそどうでも良いというか、
基礎という意味では重大だけれど、レベルが低いことだと思う。

セミコロンを打つ場所なんてマジでどうでもいいというのは、
それは初心者にとってそれよりも先にやるべきことがあるからその通り。
しかし中級者以降生産性やコードの質を上げていこうと思えば
この手の物事の重要性は増していき、最後には信念やら宗教やらと言われる問題に行き着くと思うよ。

ここは既習者スレなんだから、そういうことこそを話し合うべきだと思うけどな。

そして空回りしているというのは、ある見方ではそうだと思う。
JSは仕様の内も外も具体的な実装について殆ど意識されていないからね。
でもそれは逆に、具体的な実装に囚われず概念を学べると言えると思う。
その概念を習得すれば、例えば他言語に移ったとしても柔軟に対応できる。

他にもJSはマルチパラダイムと強く意識されて作られたわけではないが、その真似事ができる。
むしろJSこそ最も様々なプログラミングにおける本質的な物事を学べる言語だと思う。

239
デフォルトの名無しさん[sage]   投稿日:2016/06/14 18:26:48  ID:TG3hSyiU.net
検索用にセミコロンを 2 個3 個続けるのもありかな

240
デフォルトの名無しさん[sage]   投稿日:2016/06/15 01:26:31  ID:Iz/1ukPU.net
検索用にセミコロンを 2 個3 個続けるのもあり
と君が判断したのなら君の中ではありなんだろう

241
デフォルトの名無しさん[sage]   投稿日:2016/06/15 20:32:12  ID:AdfPujMx.net
マンセーが異様に多いのもJavaScripterのおかしな所だよな

242
デフォルトの名無しさん[sage]   投稿日:2016/06/16 07:55:44  ID:oMjTOMdB.net(2)
そうか?
むしろスクリプト言語の中じゃ代表コミュニティもないし、そういうのは少ないほうだと思うが。

243
デフォルトの名無しさん[sage]   投稿日:2016/06/16 08:00:04  ID:88N1/vwg.net
利用人口ぱねえからな。変なの目にする機会も多かろう。
コメント1件

244
デフォルトの名無しさん[sage]   投稿日:2016/06/16 15:16:35  ID:oMjTOMdB.net(2)
他人を理解できないってのは悲しいね

245
デフォルトの名無しさん[sage]   投稿日:2016/06/18 01:00:30  ID:HfDVf1Az.net
>243
人数自体はそんなに大したことはない。
おかしな奴の割合が異常に高いんだよ。
Webがホームということもあり、未熟な奴が平気で情報発信()している感もあるが。
http://www.tiobe.com/tiobe_index
http://spectrum.ieee.org/computing/software/the-2015-top-ten-programmi...
http://pypl.github.io/PYPL.html
コメント1件

246
デフォルトの名無しさん[sage]   投稿日:2016/06/18 05:23:04  ID:bYpIs91z.net
マンセーしたら未熟者扱い?
エキスパートな俺様は苦しんでるのに許せない間違っているってことだろうか
それとも辛い経験豊富で批判的な俺様カッケーって勘違いアピール?
傍から見るとひねくれ者の妬みにしか見えないが……

247
デフォルトの名無しさん[sage]   投稿日:2016/06/18 14:06:50  ID:P96CWXJR.net
観測範囲の問題
JavaScriptに限らず、おかしな人はどこにでもいる
このスレの>1は相当な変わり者だったようだが

248
デフォルトの名無しさん[sage]   投稿日:2016/06/19 04:58:43  ID:pwKRdbbJ.net(2)
おかしくない人って何よ

249
デフォルトの名無しさん[sage]   投稿日:2016/06/19 10:12:00  ID:0NV3J/pF.net
>245
Google で検索されたキーワード辺りで指標作った方が良さげな気がする。

250
デフォルトの名無しさん[sage]   投稿日:2016/06/19 12:28:35  ID:XPavHURr.net
ここは>1を含めて俺様主義の人が常駐してるのでまともな意見交換は出来んよ
始めは冷静でも、少し意見の食い違う人が現れただけでただの「主張の押しつけ合い」に発展する
意見交換するなら「そんな考え方もあるのか」ぐらいに自分の立場を引いて見つめる客観性が必要だが、彼は否定にかかるだけで相手をやりこめないと満足しないからな

251
デフォルトの名無しさん[sage]   投稿日:2016/06/19 15:16:34  ID:pwKRdbbJ.net(2)
俺もお前も仙人や神様じゃなく凡人なのだから、性質に割り振れる度合いは限られてる。
結局思考停止の傲慢くんも、視野無限の優柔不断くんも、同じくらい悪い議論しかできない。
その中間であっても、両者の悪いところを半々持つので、同じくらい悪い議論しかできない。
つまり無理難題夢物語ということ。「こんな議論もあるのか」ぐらい許容的になってもよかでは?
コメント1件

252
デフォルトの名無しさん[sage]   投稿日:2016/06/19 17:29:39  ID:+1vne4gn.net
そうやって他人の人格否定する辺りがまともな議論が成立しない理由なんだよな
http://d.hatena.ne.jp/takerunba/touch/20081028/p1

253
デフォルトの名無しさん[sage]   投稿日:2016/06/19 19:27:30  ID:fmRoj+h3.net(2)
そこで言う「まともな議論」とやらをここでする必要が有るのかい?
仕事でもあるまいし、自己主張のたまり場でもええんやないの?

254
デフォルトの名無しさん[sage]   投稿日:2016/06/19 19:36:59  ID:J/2rkjpj.net(4)
ここは電波を黙らせる方法がないのだから基本は自己主張のたまり場にしかならんよ
その状態で有益な議論に出来るかは当事者次第でしかない

255
デフォルトの名無しさん[sage]   投稿日:2016/06/19 20:13:29  ID:fmRoj+h3.net(2)
まあぶっちゃけ単純に「聞き手」不足なだけなんだけどね

256
デフォルトの名無しさん[sage]   投稿日:2016/06/19 20:36:57  ID:J/2rkjpj.net(4)
そうか?なら語って、どうぞ。
なおセミコロンについて語られても困りますので悪しからず。

257
デフォルトの名無しさん[sage]   投稿日:2016/06/19 22:34:40  ID:YTnkZ+TT.net(3)
自己主張の溜まり場なら「情報交換所」なんてタイトルを付けなければいいのにな
次スレは「JavaScript自己主張の溜まり場」に改名すればいい
コメント1件

258
デフォルトの名無しさん[sage]   投稿日:2016/06/19 22:50:20  ID:J/2rkjpj.net(4)
単発にはキチガイしかいないことの再証明乙

259
デフォルトの名無しさん[sage]   投稿日:2016/06/19 22:55:12  ID:YTnkZ+TT.net(3)
ID:J/2rkjpj
自己主張の溜まり場で有益な議論が出来る訳なかろう
キチガイといっている時点でおまえにはその気が全くないのだろうが

260
デフォルトの名無しさん[sage]   投稿日:2016/06/19 23:05:07  ID:YTnkZ+TT.net(3)
>251のよつな相手の非を盾に自分の非を正当化する行為も議論には邪魔だな
自己勝手の押しつけが横行するようなら「JavaScript自己主張の溜まり場」がこのスレに相応しい名前だと思うぞ

261
デフォルトの名無しさん[sage]   投稿日:2016/06/19 23:09:03  ID:J/2rkjpj.net(4)
やりたきゃ自分から始めればいいし、それに誰も食いつかなければその程度だったってだけだろ。
誰も池沼を相手にしたくないし、する義務もないんだよ。
何かあるのならさっさと始めろよ。

262
デフォルトの名無しさん[sage]   投稿日:2016/06/20 12:16:18  ID:GHIZIB85.net
スレタイ詐欺だな

263
デフォルトの名無しさん[sage]   投稿日:2016/06/20 23:23:32  ID:ismdVjCJ.net
基本的にこのスレは>1しかいないからこうなるわな
賛同者がいないことを盾に本題への言及を避けてるだけ

264
デフォルトの名無しさん[sage]   投稿日:2016/06/20 23:45:23  ID:hAl2oYmp.net
「本題」って何?

265
デフォルトの名無しさん[sage]   投稿日:2016/06/21 11:22:12  ID:papOtBqK.net

266
デフォルトの名無しさん[sage]   投稿日:2016/06/21 13:37:07  ID:NcocGzZA.net
つまりかつてのECMAスレみたいに、いろんな新情報を挙げていけばいいんでしょ?
でもそれから派生した議論は別問題だよ。
匿名掲示板なんだから、自己主張の溜まり場になって当然。
逆にそうでなくすことなんて無理無理。道理に反してる。
俺は質問スレ10くらいの時から100スレ間に渡っていろんな案を出して直そうとしてきたが、
まあ様々なところで一定の収穫はあったが、議論が暴走することだけはどうしようもならなかった。
なら逆に受け取る方が考え方・気持ちを切り替えていくしかないんだよ。

267
デフォルトの名無しさん[sage]   投稿日:2016/06/21 16:31:29  ID:wNHblGP/.net
新情報っていってもねぇw

268
デフォルトの名無しさん[sage]   投稿日:2016/06/27 00:33:14  ID:n3Kagte5.net(5)
TypedArrayとasm.jsの状況について詳しい人居る?

現在アプリにもっさり感がある。それであちこち修正したのだが、
ChromeDevTools/Profiles/CPU PROFILESで(program)が70-90%なのでJS側での速度改善はほぼ頭打ちだ。
そこで無理やり使用メモリを減らして速度向上させようとしている。
なお、評価はchromeで行っている。

JSのArrayは例えば [0,0,0] なら 16(header)+8*4(contents) = 48 Bytes になるようだ。
一つ中身が多いのは多分length分だろう。
元々オブジェクトだった物(26+88=116Byte)を強引にArrayに変えてこれを実現した。(項目も減らした)
ただ実際は struct { Int32, Int32, Int64 } なので本当は 16 + 4+4+8 = 32 になって欲しい。

そこで質問なのだが、
・asm.js 的記述(代入時に全部 |0 )したらメモリ確保も32bitになるかどうか
・TypedArrayの状況
を知りたい。

通常asm.jsは速度面ばかり話に出ていて、メモリ面の話が無い。
とはいえJITだと普通は無理だと思ので、
他の含めて何らかの方法でメモリ確保量を減らす方法を知っていればよろしく。
以下を見る限り、そういう用途向けではなさそうだが。
http://www.h2.dion.ne.jp/~defghi/asmjs/asmjs.htm

TypedArrayは使用メモリ自体は確実に減らせるはずだが、速度が異常に遅いのが気になっている。
以下で俺の環境だとざっくり7/7/100+/300+(以降全部)とかだ。
http://jsdo.it/sapphire_al2o3/sPa5
余計もっさりするようでは意味無い。試したことがある人は居るかい?
ググッたが、TypedArrayについては軒並み記事が古く、しかもやはり「遅い」という物が多い。
コメント2件

269
デフォルトの名無しさん[sage]   投稿日:2016/06/27 00:37:31  ID:rG4NGWrk.net(2)
生成が重いだけだろ
使い方を間違えてる

270
デフォルトの名無しさん[sage]   投稿日:2016/06/27 01:40:09  ID:n3Kagte5.net(5)
一応全体的に遅いということなのでそうだと勝手に思っていた。古いが以下。
http://blog.livedoor.jp/abars/archives/52103965.html

とりあえず確かめてみた結果、読み書きは1.5倍程度遅い。
許容範囲かといわれれば微妙だな、、、、
なおデータがなかなか安定しなかったので、若干怪しい。
サイズは俺が使う予定の1000にした。
このサイズなら確保との差が見えないが、オリジナルのサイズ(1.6M)だと見えていた。

function testArray(data, n, iter, start) {
var time_enter = Date.now();
for(var j=0;j<iter;j++)
for(var i = 0; i < n; i++) data[i] = i & 0xFFFFFFFF;
var now = Date.now();
return [now-time_enter, now-start];
}

function check(iter){
var start = Date.now()
console.log('array: '+testArray(new Array(count), count, iter, start));
start = Date.now();
console.log('Int32Array: '+testArray(new Int32Array(count), count, iter, start));
}

var count = 1000;
for (var i=100;i<100000000;i*=10) check(i);
コメント3件

271
デフォルトの名無しさん[sage]   投稿日:2016/06/27 01:40:47  ID:n3Kagte5.net(5)
array: 1,2
Int32Array: 2,2
array: 2,2
Int32Array: 4,4
array: 22,22
Int32Array: 35,35
array: 235,235
Int32Array: 369,369
array: 2544,2544
Int32Array: 3665,3665
array: 24831,24831
Int32Array: 36757,36757
コメント2件

272
デフォルトの名無しさん[sage]   投稿日:2016/06/27 02:01:59  ID:n3Kagte5.net(5)
しかしどうやっても Int64 を生成できないのが問題だ。
実装としてはInt64を使わずにdouble64なのかな?
だったら変換が毎回発生せずに済むからいいけど。
コメント1件

273
デフォルトの名無しさん[sage]   投稿日:2016/06/27 02:43:48  ID:Krh8v6Tl.net
> しかしどうやっても Int64 を生成できないのが問題だ。

はぁ?

274
デフォルトの名無しさん[sage]   投稿日:2016/06/27 02:59:51  ID:rG4NGWrk.net(2)
Chromeで試したけどInt32Arrayが全て上回った

275
デフォルトの名無しさん[sage]   投稿日:2016/06/27 03:37:44  ID:1KZKLXAx.net
>268
> 他の含めて何らかの方法でメモリ確保量を減らす方法を知っていればよろしく。
オブジェクトプール使え
コメント1件

276
デフォルトの名無しさん[sage]   投稿日:2016/06/27 04:57:14  ID:Hl6kI6LE.net
>270
古いが、じゃない。あまりにもあまりにも古すぎる。
例えばV8は1年前はasm.js用の特別な最適化はしないと言っていたのが、
今では実装がほぼ完了している。
時代の流れというのはとてつもなく早いのだよ。
半年以内の記事でないと評価に値しない。

>268
通常配列の最適化はエンジンによりまちまちだが、共通して言える分としては
全要素がSMI(≒Int32)かDouble時の最適化のみ。
SMIの要素にDoubleが交じるとそれはDouble配列として最適化される。

そして確かにasm.jsベースで書けば理論的には最大パフォーマンスに近いものが作れるだろう。
でもそれは例えば変数は同時にレジストリに乗る程度の数個に厳選して、
他は全て型付配列のアクセスに置き換えるテクから始まり、
メモリ上のデータの配置にまで気を使って初めて実現できること。

勿論大本のアルゴリズムは言うまでもなく最適でないといけない。
それが昨日今日asm.js始めたばかりの人間にできるかといえば否。
昔アセンブリで最適化してた経験でもないと人力では限界がある。

>272
もし本当にInt64を効率よく扱いたいのなら時代が追いついていない。
丁度今議論中。3年後にどうぞ。
コメント1件

277
デフォルトの名無しさん[sage]   投稿日:2016/06/27 17:22:50  ID:PSQIpa+S.net
Int64はなんでないのかねえ

278
デフォルトの名無しさん[sage]   投稿日:2016/06/27 18:12:51  ID:8aVYS4Ar.net
逆に考えればすぐ答えは出るよ
何故Float64Arrayはあるんだろうと

279
デフォルトの名無しさん[sage]   投稿日:2016/06/27 23:12:26  ID:n3Kagte5.net(5)
>275
今回は保存用(内部保持データ)なのでそれは使えない。

>276
> 半年以内の記事でないと評価に値しない。
それはそうだが実際に遅い。
FF(47.0)でも試したが、上記ほどの差はなく、ほぼ1倍だった。
絶対値としては両方ともchrome(50.0.2630.1 canary SyzyASan)のInt32Arrayとほぼ同じで、
chromeのarrayが速いだけのようだ。
なお古いchrome(49.0.2623.112 beta-m)でも試したが傾向は同じ。(ただし全体的になぜか5倍ほど遅い)

とりあえず環境によるのかもしれないので、>270の結果(>271)を環境とともに貼ってくれれば助かる。
コピペすればそのまま実行できる。当たり前だが数字が大きい方が遅い。
なお>271はchrome(50.0.2630.1 canary SyzyASan) + Vista だ。

> そして確かにasm.jsベースで書けば理論的には最大パフォーマンスに近いものが作れるだろう
いや、だからそれは「局所的」速度の話だろ。
俺は「全体的」速度を上げようとしている。
不要なオブジェクト生成はしていないので、メモリ攪拌はない。
ただし、どうしてもキャッシュミスは多いはずなので、これを改善しようとしている。
アクセスは150個単位で行われるため、TypedArrayにまとめてしまえばキャッシュヒットするようになる。(はず)
https://sites.google.com/site/shunichisnote/translations/data-oriented...
ただ、今はそれ以前の段階で、全体的なメモリ使用量を削減しようとしている。
コメント1件

280
デフォルトの名無しさん[sage]   投稿日:2016/06/28 15:51:09  ID:+n63MTqJ.net
あのねぇ、銀の弾なんてないのよ。
JIT用最適化ってのはね、理論が正しくても1つ書き間違えただけで台無しになったりするし、
小さなベンチの結果では大きなコードの結果が予測できないこともある。
それこそ最も確実なのはAOTで予測しやすいasm.jsに出来るだけ落としこむことなのよ。
JITの範囲で君の書いたどんな代物か分からないコードが、
どうすれば良くなるかなんて最早一般的な話ではできないのよ。

もうどんな見るに耐えなくなっても良いのでとにかく速さだけを追求したいということなら、
それはもう人が書くようなJSでなくなることは確か。
そこまで行かずとも、今よりいくらか無難に改善したいということなら、
それこそそのコードに依存するとても細かな話で難しい。

というか君もそういう密接な協力をして欲しそうな態度を取ってないし、
結局はただ自分がやってることの進歩を見て欲しいとか、
寂しくないよう日記のつもりでここに書きたいだけでしょ?
そういうのが悪いとは思わないけど、ただ返信してくれた相手を否定する病を発症しちゃあオシマイよ。
そこは君の弱さだよ。
コメント1件

281
デフォルトの名無しさん[sage]   投稿日:2016/06/28 20:52:20  ID:A7Bg25Ta.net
そう思いたければそれでいい。
ただ、その姿勢がお前らが全く上達してない原因だと思う。
俺は間違った指摘に対して間違っていると言っただけだ。

Cの奴らがあくまで「技術的」なのとは対照的に、お前らは「精神的」な物言いばかりだ。
ある意味、やっていることが「Web的」だ。言ったもの勝ちみたいな馬鹿が多い。
とはいえ、間違っていることをいくら主張しても正しくはならない。

そもそもオブジェクトプールはインミュータブルの世界ではほぼ意味がない。
http://www.html5rocks.com/ja/tutorials/speed/static-mem-pools/

そして俺はJIT向けの最適化をしようとはしていない。
事実、メモリをケチるとか、一度にアクセスするデータを纏めるとか、どの言語でも高速化する。
実際、>279内URLも言語には言及されてない。

もちろんそれ以前に他の改修点も多い。今はそこを整理中だ。
とはいえ、その先の「将来的改修方法」まで見据える必要があるので確認中ということになる。

>280
ところで、何でお前はそんなに認めて君なんだ?
俺の質問は「asm.jsでフットプリント削減/メモリ配置決めうちは出来るか」であって、
「asm.jsで局所的高速化が出来るか」ではない。
つまり、脱線しているだけだから素っ気ない回答になっているだけだ。
俺がやろうとしているのは、君が思っているasm.jsの使い方ではない。

282
デフォルトの名無しさん[sage]   投稿日:2016/06/29 20:10:31  ID:oxwc/50g.net(2)
自分の話なのに他人を非難し始めた!?
こりゃ重病や〜

283
デフォルトの名無しさん[sage]   投稿日:2016/06/29 20:14:07  ID:oxwc/50g.net(2)
こいつの親はなんで
「相手がどう思うかが大事」
「自分が伝えたつもりでも相手に伝わってなかったら意味が無い」
って教えてやらなかったのかな……
むごいね。

284
デフォルトの名無しさん[sage]   投稿日:2016/06/30 01:34:38  ID:YtNZP2Mq.net
ちなみに、当面の問題は解決した。
実はもっさりというよりはカクカクに近かったのだが、原因はキャッシュによるHDDアクセスの過剰だった。
ヘッダに cache-control: no-store を追加したところ、完全に治った。
ただそれでも(program)が70-90%であることには変わりないのだが、
スクレイピング中でも(idle)は80%以上なので、キビキビ感はある。

前にも書いたが、(>109)
CPUだけで動く部分は実は相当速くて、UIが主なJavaScriptではCPUを使い切ることはないのかもしれない。
俺の場合はスクレイピングが律速過程なので、サーバの速度が上がらない限りここで頭打ちだ。
数値計算のように完全にCPUだけで回るのなら限界が見えるが、そういう用途はないし。
遅延描画は制御がやや面倒だが、実現してしまえばDOMは1画面分しか扱う必要がなく、一瞬で処理される。

俺のアプリに関して言えば、階層スクレイピングを行っているので、
下位階層を参照する時は更新されていることが確定している。
だから no-store で全く問題ないし、あと5倍の余裕があるので、残るは美学的問題だけになった。
ここを修正するかはしばらく様子見になる。
情報をくれた人はありがとう。
コメント1件

285
デフォルトの名無しさん[sage]   投稿日:2016/06/30 06:40:45  ID:K37QNM6P.net
こういう自分用語多用・技術文書風自分語り・後出し情報でドヤ顔・他言語へのコンプレックスを持つ>284
スルーできないことこそ、お前らwが上達できない理由wだと思うよ

286
デフォルトの名無しさん[sage]   投稿日:2016/06/30 14:59:19  ID:YdAxXmxA.net
普段スルーするようなキチガイでも無人島じゃコミュニケーション取るしかないのと同じ。

287
デフォルトの名無しさん[sage]   投稿日:2016/07/17 18:00:55  ID:UzC9Qtsn.net(8)
+ JavaScript の質問用スレッド vol.121 +
質問スレ>213
自己紹介乙。
てかお前はどうしてそこにこだわるのか全く謎なのだが。

普通に考えれば、引き算が出来るのならMDNで、
> var elapsed = end.getTime() - start.getTime(); // 時間をミリ秒で表す
> https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objec...
これは明らかにおかしくて、
var elapsed = end - start; // 時間をミリ秒で表す
となるべきだろ。お前が言う「経験のある」奴ならここに地雷臭をかぎ取るわけ。
何らかの理由で getTime() しないといけないんだよ。
とはいえ、今1stEdition(1997)見ても abstruct operator という単語自体は使ってないが、
他は同じなので、最初から出来たのではないかとも思うのだが、、、まあよく分からん。
http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%201...

実際、彼がググって来た例でも直接引き算してないだろ。
俺が(当時)ググッた限りでも出てこなかったから、何かしら理由があるのだと思う。
というわけで俺は「使えない」判定を下していた。

で、これは多分「既に他言語を知っている奴」の普通のやり方なんだよ。
俺がお前に「経験がない」と断定しているのはこういうのが全く通じてないから。

何度も言っているが、お前はもっと書いた方がいい。
ここに質問に来る奴の大半は、「MDNを読め」で済む。
ただお前はもう教科書的な知識は十分にあるんだよ。
だから仕様書をいくら読んでもそれ以上にはならない。
お前が上達するには、書くしかないんだよ。

288
デフォルトの名無しさん[sage]   投稿日:2016/07/17 18:23:29  ID:UzC9Qtsn.net(8)
一応俺の疑問としては、
ToPrimitive(Number) は 無変換で Number そのものを返す。(9.1)
ToNumber(Number) は 無変換で Number そのものを返す。(9.3)
GetValue(V)はVが参照でなければ V そのものを返す。(8.7.1)
+ は ToPrimitive(GetValue(target))の型がStringならString連結、
そうでないなら ToNumber(ToPrimitive(GetValue(target))) で数値の和を返す。(11.6.1)
Date型は内部に time values を持ち、abstruct operationはこれを対象とする。(15.9.1)

だったら足し算も出来ないと駄目じゃね?ってことね。
厳密に言えばGetValueはabstruct operation ではないので、
仕様と実装に矛盾が無い為には、 GetValue(time values) がStringを返す必要がある。
こうなんだっけ?

289
デフォルトの名無しさん[sage]   投稿日:2016/07/17 18:30:48  ID:PyzTEoPA.net(9)
まだ43cmの深淵にはたどり着けないようだなw
コメント1件

290
デフォルトの名無しさん[sage]   投稿日:2016/07/17 18:40:03  ID:UzC9Qtsn.net(8)
>289
いやそれ何の事よ?
誤爆かと思いきや、そうではないのなら、
とりあえずブラウザバグっているからリロードしとけ。
コメント1件

291
デフォルトの名無しさん[sage]   投稿日:2016/07/17 18:50:05  ID:UzC9Qtsn.net(8)
ああ、引き算を確認するの忘れてた。

- は ToNumber(GetValue(target)) を引いて差を返す (11.6.2)
ToNumber(String) は 9.3.1 に従いパースする (9.3)

9.3.1内にはDate.toString()出力をパースする仕様はない。
だからGetValue(time values)はNumberを返さないと引き算は出来ない。
となると足し算も出来ないと仕様外のように思える。

なお確認している仕様はECMA5.1
http://www.ecma-international.org/ecma-262/5.1/#sec-11.6.1
コメント2件

292
デフォルトの名無しさん[sage]   投稿日:2016/07/17 18:54:57  ID:PyzTEoPA.net(9)
>290
> いやそれ何の事よ?
布石だよw

俺は最初から正しいことを
言っていたと示すためのな。
コメント1件

293
デフォルトの名無しさん[sage]   投稿日:2016/07/17 18:55:32  ID:PyzTEoPA.net(9)
>291
だから仕様通り(笑)

294
デフォルトの名無しさん[sage]   投稿日:2016/07/17 19:13:09  ID:UzC9Qtsn.net(8)
>292
まあ何か思惑があるのならそれでいい。
ただ俺が見る限り今のところはAddが出来てもおかしくない仕様のように見える。
もちろん俺は仕様書なんてほぼ見てないから、先のように単語を変更されていると気づけないが。

まあいいや、とりあえず新着情報があるまではどうにもならんし。
現実的にDateが揃いも揃って仕様違反って事もないだろうし、
先の例のように俺が仕様書を読み慣れていないせいで見落としている部分があるのだろう。

295
デフォルトの名無しさん[sage]   投稿日:2016/07/17 19:23:49  ID:UzC9Qtsn.net(8)
> (今回で言えば日付型同士の減算が可能!?) (質問スレ>213)
あと一応言っておくと、日付型ってのは普通は減算出来るんだよ。
だから質問者もいきなり減算しているし、
俺も逆にそれが出来ない!ってことでMDNに奇妙さを感じるわけでね。

だからこの点についても、この反応、もう一度書くと、

> (今回で言えば日付型同士の減算が可能!?) (質問スレ>213)

これは経験豊富ならあり得ないんだよ。
で、そういうのは明らかにバレバレだから、
普通に考えてお前が経験豊富だと思う奴はいないと思うんだよね。
何でそこにこだわるのか全く分からないんだけど。
匿名掲示板で虚勢を張る意味無くね? 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)

コメント1件

296
デフォルトの名無しさん[sage]   投稿日:2016/07/17 21:11:43  ID:PyzTEoPA.net(9)
>295
何いってんのお前w

MDNに日付の減算が出来ないなんて書いてないし
それなりにJavaScript使ってりゃ、
日付同士の引き算とかやるだろ。
ベンチマークとかでさ。

当たり前の知っていることなんだが?
お前にとっては当たり前じゃないんだろ?w

297
デフォルトの名無しさん[sage]   投稿日:2016/07/17 21:12:34  ID:PyzTEoPA.net(9)
> 現実的にDateが揃いも揃って仕様違反って事もないだろうし、
だから最初から仕様通りって言ってる

298
デフォルトの名無しさん[sage]   投稿日:2016/07/17 22:11:41  ID:UzC9Qtsn.net(8)
つか相変わらずお前は都合が悪いところは読まない主義なのなw

MSDNでもやっぱりgetTime()してるんだよ。
https://msdn.microsoft.com/ja-jp/library/ee532932(v=vs.94).aspx

既に言ったがMDNも。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objec...

ついでにStackOverflowでも軒並み。
http://stackoverflow.com/questions/10931288/how-to-add-subtract-dates-...
http://stackoverflow.com/questions/1296358/subtract-days-from-a-date-i...
http://stackoverflow.com/questions/7687884/add-10-seconds-to-a-javascr...

基本的にDateオブジェクトの直接操作は誰もやってないから、何か理由はあるとは思うんだけどね。
それが何かは俺には分からない。
考えられるのは、オブジェクト指向的な「メソッド越しに全てやれ」なのか、
実装ありきで来ている為、実は「仕様的裏付けがない」のか。(将来的に使える保証がない)
いずれにしても、サンプルコードにそう記述しない理由があるのは確かなんだよ。

どっちにしたってここまで地雷臭だと公開するコードなら直接操作は止めたほうがいいとは思うが。
質問者は今動けばいい個人レベルのコードだろうから別に構わないとは思うけど。

299
デフォルトの名無しさん[sage]   投稿日:2016/07/17 23:04:02  ID:PyzTEoPA.net(9)
だからgetTime使ってるからって
そのまま使えないってことにはならないんだが。
馬鹿なのかな?

300
デフォルトの名無しさん[sage]   投稿日:2016/07/17 23:28:43  ID:UzC9Qtsn.net(8)
まあどう思うかは自由だが、状況証拠からの推測なら、

1. 引き算は出来ているだけで、仕様として認められているわけではない
2. 多分俺の既投稿の解釈も間違いがあり、addの方は「仕様」で、subの方は「仕様外」

じゃないかな。以下でもgetTime()で引き算だ。
> delta *= date2.getTime() - date1.getTime();
> https://github.com/phiggins42/bloody-jquery-plugins/blob/master/...

とにかく確実に言えるのは、みんな引き算する前に getTime() してるんだよ。
オブジェクト同士を直で引き算している人は誰もいない。

で、もし君が「経験豊富」なら、
実はこういう「動くけど仕様外」のケースも結構あることを知っているはずなのだが。
だからマジでウザイしバレバレだから、いい加減にやめい。
いずれにしても、本当に経験豊富な奴は、誰も君のことを経験豊富だとは思わないよ。
虚勢を張るのも自由ではあるけど、意味無いと思うが。

301
デフォルトの名無しさん[sage]   投稿日:2016/07/17 23:30:23  ID:PyzTEoPA.net(9)
× 1. 引き算は出来ているだけで、仕様として認められているわけではない
○ 1. 引き算は出来ているし、仕様として認められている

302
デフォルトの名無しさん[sage]   投稿日:2016/07/17 23:31:41  ID:PyzTEoPA.net(9)
× 2. 多分俺の既投稿の解釈も間違いがあり、addの方は「仕様」で、subの方は「仕様外」
○ 2. addの方は「仕様」で、subの方も「仕様」

http://www.ecma-international.org/ecma-262/5.1/#sec-11.6.1
ここにもしっかり書いてある。
コメント2件

303
デフォルトの名無しさん[sage]   投稿日:2016/07/17 23:33:08  ID:PyzTEoPA.net(9)
しっかり書いてあるのに、それがわからないってことは
英語が読めないか、読めても意味がわからないんだろうな。

自覚して諦めて日本語でぐぐったら?w

304
デフォルトの名無しさん[sage]   投稿日:2016/07/18 00:12:28  ID:CK8ZYmxh.net(12)
>302
Note1だろ?
> Date objects handle the absence of a hint as if the hint String were given.

辿ってみたが、なるほど[[DefaultValue]](8.12.8)の所でデフォがDateに関してはStringというのは分かった。
そしてValueOf()が返してくるのはこれだから、Add側がString連結になっているのはこれでいい。
ただこれだとsub側が都合が悪い。つまり、もう一度書くと、以下になっているわけだが、

> - は ToNumber(GetValue(target)) を引いて差を返す (11.6.2) (>291)

GetValue(target)がデフォでStringを返してくるのでデフォのままでは引き算は出来ない。
一応GetValueにはPreferredTypeを指定することが出来て、
Numberを指定していれば数値が返ってくる。
だから仕様としてsubを定義する為には、subの時はNumber指定しないといけない。
で、それはどこに書いてあるんだ?

なおお前が大好きなmoment.jsも確認したが、同様に直ではなく、こちらはvalueOfを使っていた。
> mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
> http://momentjs.com/downloads/moment.js
つってもMDNには同じだと明記されているが。
> This method is functionally equivalent to the Date.prototype.getTime() method.
> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Ob...

いずれにしても、何かしら理由があったんだと思うが。
とりあえず5.1で確認出来たらその記載が旧仕様にあるかどうかを確認すればいい。

つかこの際英語は関係ないだろ。そういうのもコンプレックス出まくりだから止めたほうがいい。
英語は日本語より下手なのを自覚した上で、ヒット件数と内容をとるか、言語をとるかでしょ。
コメント3件

305
デフォルトの名無しさん[sage]   投稿日:2016/07/18 00:17:12  ID:CK8ZYmxh.net(12)
しかし話はそれるが、この仕様だと + と - なら - の方がToPrimitive()がない分処理が軽いな。
ベンチマークに現れるかは謎だが。


306
デフォルトの名無しさん[sage]   投稿日:2016/07/18 00:30:21  ID:UhcVRSnP.net(13)
>304
> だから仕様としてsubを定義する為には、subの時はNumber指定しないといけない。
> で、それはどこに書いてあるんだ?

お前は本当に馬鹿だなぁw

リンクは http://www.ecma-international.org/ecma-262/5.1/#sec-11.6.1 だろ
sec-11.6.1 だろ。
The Addition operator ( + ) だろ。

次の sec-11.6.2 になんて書いてあるのかも読めないのか?

307
デフォルトの名無しさん[sage]   投稿日:2016/07/18 00:31:42  ID:UhcVRSnP.net(13)
>304
> つかこの際英語は関係ないだろ。そういうのもコンプレックス出まくりだから止めたほうがいい。

お前が英語読めないんだろ?
だから自分で持ってきたリンクも読んでないんだろ。

それともなにか?自分が持ってきたものを
読めるのに、読んでないのか?

308
デフォルトの名無しさん[sage]   投稿日:2016/07/18 01:13:38  ID:CK8ZYmxh.net(12)
ああ、なるほど分かった。
String変換はToPrimitiveの時であって、GetValue時ではないんだな。
この点を>304では間違えていた。

Add: ToPrimitive(GetValue(target))でStringになって、それを連結。
Sub: ToNumber(GetValue(target))でNumberになって、引き算。
SubではToPrimitiveがないのがミソだ。

となるとそちらの主張通り、
> ○ 2. addの方は「仕様」で、subの方も「仕様」 (>302)
のように見える。

さて、記載されている箇所は分かったので初期仕様(1997)版を確認したが、
http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%201...
11.6.1 The addition operator(+)
11.6.2 The subtraction operator(-)
9.1 ToPrimitive
9.3 ToNumber
15.9 Date Object
に本質的な違いがあるようには見えない。
つまり、最初から仕様としてaddもsubも使えた(今と同じ動作だった)ように見える。
しかし誰もsubを使っていない。となると結論としては、

仕様には最初から盛り込まれていたが、
A. 実装が追いつかず、動かない環境が多かった。(あった)
B. バグっていて使える状況ではなかった。

のどちらかだね。
今後については、自分が対象とするブラウザで動作を確認出来れば使えばいいということになる。
はい、お疲れさまでした。

309
デフォルトの名無しさん[sage]   投稿日:2016/07/18 01:26:28  ID:UhcVRSnP.net(13)
> しかし誰もsubを使っていない。となると結論としては、
お前が見た限りの話だろw
使ってないだけで、使えない理由にはならない。

C. たまたま検索した所が使ってないところだけだった

昔うんぬんかんぬんが事実だとしても
今使えない理由にはならないからな。

事実として、今問題なく使えると判明しているものを使ってないだけ。
故に使ってないからと言って問題があるという事にはならない。
コメント1件

310
デフォルトの名無しさん[sage]   投稿日:2016/07/18 01:28:24  ID:UhcVRSnP.net(13)
で最終的な結論は俺が最初から言っていたとおり、
addも仕様、subも仕様。

こんなこと理解するまでに何時間費やしてるの?
センス無いんじゃね?w

311
デフォルトの名無しさん[sage]   投稿日:2016/07/18 01:44:14  ID:CK8ZYmxh.net(12)
>309
まあどう思おうが勝手だが、
基本的にはライブラリ開発者もMDN執筆者も俺よりJavaScriptの経験は明らかに豊富で、
その彼等が回避している事を俺がわざわざ試す意味はないよ。
君のアプリは君が好きなようにすればいい。

俺がセンス無いと思うのならそれでいい。
ただ、そんな無駄吠えしている限り、君は上達しないよ。

312
デフォルトの名無しさん[sage]   投稿日:2016/07/18 01:55:05  ID:UhcVRSnP.net(13)
使ってない=回避と考えてるのが
お笑い種だw

自分で持ってきた仕様書に俺が何度も
書いてあるって言ってようやく読んだくせにな。
理解遅すぎるんだよw

313
デフォルトの名無しさん[sage]   投稿日:2016/07/18 01:57:21  ID:UhcVRSnP.net(13)
きっとこの程度の理解能力じゃ
なんで+がこういう仕様になっているかも
まだ気づいてないんだろうな。
俺が指摘してようやく考え出すぐらいだろうw
コメント2件

314
デフォルトの名無しさん[sage]   投稿日:2016/07/18 02:02:36  ID:CK8ZYmxh.net(12)
>313
+は文字列内埋め込みにはこの方がいいからだろ。あれはあの仕様でも良いんだよ。
ただいちいち toString() する仕様でも良いんだよ。

てかお前は異様に「仕様」談義が好きみたいだが、マジで何か書いた方がいいぞ。
そしてその中で素晴らしいライブラリの使い方を披露すれば、布教も出来るだろ。

ついでに言っておくと、今回の質問者の「ライブラリは…」ってのはかなり妥当な状況だよ。
いちいちあの程度でライブラリを導入する方が手間なんだよ。

315
デフォルトの名無しさん[sage]   投稿日:2016/07/18 02:06:50  ID:CK8ZYmxh.net(12)
あーそういえば43cmってなに?
厨二病だとは思うが聞いておいてやるよw
コメント1件

316
デフォルトの名無しさん[sage]   投稿日:2016/07/18 02:07:17  ID:UhcVRSnP.net(13)
はっはっは、仕様を持ち出してきたのはお前だし、
俺は、そこに書いてあるから読めといっただけだ。
俺は談義なんてなんもしてねーぞw

317
デフォルトの名無しさん[sage]   投稿日:2016/07/18 02:08:12  ID:UhcVRSnP.net(13)
>315
ぐぐれかすw
俺が最初からこの程度のことを知っていたことを
証明するためのサイトだ。
コメント1件

318
デフォルトの名無しさん[sage]   投稿日:2016/07/18 02:16:59  ID:CK8ZYmxh.net(12)
あーまあ確かに今回は結局の所ほぼ自力で辿り着いているから、
確かに談義もしてないし、協力も大してしてもらってないわな。
とはいえ、getTime()については俺は前から疑問を持っていたからついでに調べたんだ。

>317
これか?
http://d.hatena.ne.jp/sandai/20100916/p1
んー、まあこれを読んでも今回の結論には至らないけどな。
ちなみに俺は仕様書を断片的にしか読んでないから、多分
ToPrimitive(Number)がvalueOfを呼び、
ToPrimitive(String)がtoStringを呼ぶのは予想出来るが、
それがどこに書いてあるかまでは確認してない。まあもういいが。
コメント1件

319
デフォルトの名無しさん[sage]   投稿日:2016/07/18 02:31:49  ID:UhcVRSnP.net(13)
>318
そこも少しあるが、そこのリンク先だw

おめでとう、ようやく俺に追いついたなw
コメント1件

320
デフォルトの名無しさん[sage]   投稿日:2016/07/18 02:33:00  ID:CK8ZYmxh.net(12)
>313
ああちなみに一応コメントしておくとな、

11.6.1のNOTE1で例外規定を書いているだろ?これは結局の所 if 文が必要になるんだよ。
だから仕様としては、「文字列として連結したいなら常に toString() 」の方が綺麗になる。
そうすれば+だけあるToPrimitiveが除去可能で、+と-を同じ関数で処理する目が出てくるだろ。
現実にはこれだけでは駄目だけど、そうやって無駄な関数を増やさないのが良い設計なんだよ。

本来腕前ってのはこういう「如何に無駄をなくすか」で勝負すべきであって、
お前らがやっているみたいな
「1行のチューニング」「俺の方が仕様に詳しい」「俺の方が短い」ではないんだよ。

321
デフォルトの名無しさん[sage]   投稿日:2016/07/18 02:38:48  ID:UhcVRSnP.net(13)
無駄をなくすなっていうのは、
一行の無駄もなくすって意味だし、
(コンピュータにやらせる)

仕様を出してきたのはお前だし、

短いっていうのが無駄をなくすってことだし。

わかってねぇなぁ。
今時アセンブラで書くとか言う話をするのかねぇ。

一番の無駄は人間が作業することなんだがw
コメント1件

322
デフォルトの名無しさん[sage]   投稿日:2016/07/18 02:42:22  ID:CK8ZYmxh.net(12)
>319
これか。確かに俺が確認したのと同じ事だな。
http://os0x.hatenablog.com/entry/20100916/1284650917
コメント1件

323
デフォルトの名無しさん[sage]   投稿日:2016/07/18 02:45:40  ID:UhcVRSnP.net(13)
>322
読めば一瞬で終わってた内容。
おつかれさんwww
コメント1件

324
デフォルトの名無しさん[sage]   投稿日:2016/07/18 02:47:05  ID:CK8ZYmxh.net(12)
>321
まあ今のお前にいくら言っても分からないとは思うが、必要なのは、
「構造的」簡潔さなんだよ。
「記述的」簡潔さではない。
もちろん記述も簡潔な方がいいんだけどね。
とはいえ、構造が簡潔なら記述が複雑になることもないんだよ。

とにかくお前は大きいのをまずは書いてみることだよ。
そうすれば色々と至らなさが分かると思うよ。

325
デフォルトの名無しさん[sage]   投稿日:2016/07/18 02:49:44  ID:CK8ZYmxh.net(12)
>323
それはない。
俺の疑問はgetTime()が何故いるのか?であって、
add/subについてではないから。

まあこの際どうでもいいが。
コメント2件

326
デフォルトの名無しさん[sage]   投稿日:2016/07/18 03:01:24  ID:vbFE3yAk.net(2)
また殺人くん呼ばわりのあのアホかな。

あのな、DateTimeというのは、日付と時間だよな。ある一点を指し示す値だ。もっと詳しく言えば、ある内部値を、日付と時間として扱えるようにしたオブジェクトだ。

その、「ある一点を指し示す日付と時間同士を、四則演算する」って凄くナンセンスだと思わない?

ある一点と、ある一点の間の距離は、numberか?
違うよな。
.net見てみろよ。TimeSpan型がある。

例外とかそういう馬鹿な話じゃない。

頭の中を整理して、できて良いかできてはいけないのか精査せえ。

何故getTimeしてるかわからんのか?
エポックとして、一点の情報ではなくなり、原点からの長さとして値を返してると考えるとことができる秒に変換しとるよな。要はベクトルに。

お前高校数学からやり直してこいよ。
コメント1件

327
デフォルトの名無しさん[sage]   投稿日:2016/07/18 03:02:19  ID:vbFE3yAk.net(2)
>326
言い忘れ。
「ベクトルなら加減乗除自在だよね」とダメ押ししとくわ。

328
デフォルトの名無しさん[sage]   投稿日:2016/07/18 03:11:07  ID:UhcVRSnP.net(13)
>325
> 俺の疑問はgetTime()が何故いるのか?であって、

日付に +1 するときだろw

329
デフォルトの名無しさん[sage]   投稿日:2016/07/18 03:13:48  ID:UhcVRSnP.net(13)
いま普及している言語で、完璧な
構造的簡潔さとやらを備えてる言語ってなんだろうねw

重要なのは道具として使えることだよ。
道具として使えるならば簡潔でなくても良かった。

そうやって、制限のある中で今まで
実現してきたんだって。

330
デフォルトの名無しさん[sage]   投稿日:2016/07/18 05:04:13  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が要らなくなるわけじゃない、
勿論今でも単項+演算子使えば要らないので、要らないの定義によるが、
君は結局もっといい形があるじゃん、と言いたいのか、なんなのかよくわからないな。
コメント1件

331
デフォルトの名無しさん[sage]   投稿日:2016/07/18 23:56:44  ID:CK8ZYmxh.net(12)
>330
基本的には
・getTime要らないなら何故いちいち付いているのか?(全員付けているのか)
・今確かに動いているが本当に引き算は出来るのか?(仕様内なのか)
の確認だから。

今の仕様でもそんなに悪くないけど、直交してないから実装に負担がかかる。
とはいえ今更変更することは無理だし、
新仕様を検討している連中はこの辺全て分かっているだろうから、見守るしかないね。
なおgetTimeが要らないといっているのは引き算時限定であって、(これは経緯を見れば分かるはずだが)
やっぱりlodash君は「前との関連で」の会話が出来ないんだな。
多分ガチのアスペなんだと思う。

とはいえここは匿名掲示板なんだから、俺たちがアスペに対して気を使う必要はない。
(個人を特定して気を使う必要はない)
過去の発言は全部読めるのだから、ちゃんと読み直して付いてこいとしか言えんね。
lodash君の会話の組み立て方では普通は荒らし扱いされる。
それは読み直すことによって多少は改善するから、まずはそれを心がけることだ。

という書き方だと伝わらないのかな?
まあしかしこれ以上面倒見れんが。

332
デフォルトの名無しさん[sage]   投稿日:2016/07/19 00:27:47  ID:gHzhdyCj.net(7)
> ・getTime要らないなら何故いちいち付いているのか?(全員付けているのか)
たまたま

> ・今確かに動いているが本当に引き算は出来るのか?(仕様内なのか)
仕様に書いているのだから、仕様通り

333
デフォルトの名無しさん[sage]   投稿日:2016/07/19 00:39:36  ID:gHzhdyCj.net(7)
> なお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
デフォルトの名無しさん[sage]   投稿日:2016/07/19 00:48:15  ID:gHzhdyCj.net(7)
> 今の仕様でもそんなに悪くないけど、直交してないから実装に負担がかかる。
> とはいえ今更変更することは無理だし、

直すならばDateの仕様ではなく、+オペレーターの方。
Perlみたく、+ は数値演算、 . で文字列結合 とするしかない。

335
デフォルトの名無しさん[sage]   投稿日:2016/07/19 01:05:34  ID:gHzhdyCj.net(7)
どうやら俺の発言が気に食わないようだが
俺に比べて技術と知識も劣ってるから、
getTimeがいらないのは引き算限定とかいう
発言で反論しようとするんだよなw

一般論として技術力が高い人ほど多くのことを
知っているんだよ。知ってるからこそ技術力も高くなる。
関数型プログラミングはいいよ。コードがシンプルになる。
lodashやjQueryは便利なライブラリ。

336
デフォルトの名無しさん[sage]   投稿日:2016/07/19 02:25:00  ID:9Xihfq37.net(2)
相変わらずアスペ全開だな。

まあついでに言っておくと、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型ではオーバライドされています」とコメントを付けておくべき。
コメント3件

337
デフォルトの名無しさん[sage]   投稿日:2016/07/19 02:25:35  ID:9Xihfq37.net(2)
お前らの大半はこれにすら気づけないと見ている。
正直、JavaScriptの連中が上達してないのはかなり根が深い問題だと認識し始めてる。
仕様書すらこれだ。
多分君らの大半は何が良いコードなのかも理解出来ていない。
それはまともな構成の仕様書/コードを見たことがないからだ。
これについては、丁度OOPのスレでそれを問う勇者がいたから見てくるといい。(今は死にスレだが)
オブジェクト指向システムの設計 172
オブジェクト指向システムの設計 172

例えば仕様書だけでもまともであれば、
無意識的にオブジェクト指向を学習出来たはずなのだが、そうなっていない。
この酷い仕様書を読むまでは気づかなかったが、
当たり前だが他言語の仕様書は達人が書いているので、こうはなっていない。
だから仕様書を読んでいれば無意識的に
オブジェクト指向(正確には著者のプログラミングスタイル)も学習していける。
JavaScriptにはこれがない。つまるところ、教科書が悪いから上達しにくい。
それでも、他人のコードをほぼ全て見える状況は、おつりが来るほど有利だとも思うのだが。

338
デフォルトの名無しさん[sage]   投稿日:2016/07/19 03:43:57  ID:pXKjqsL9.net
上達くんはトリップ付けてくれよ

339
デフォルトの名無しさん[sage]   投稿日:2016/07/19 04:38:03  ID:gHzhdyCj.net(7)
自分の能力不足を仕様のせいにまでしてきたねw

340
デフォルトの名無しさん[sage]   投稿日:2016/07/19 04:50:08  ID:gHzhdyCj.net(7)
Dateにオペレータ+を書くとかさ間抜けすぎるっていうかw
世の中にはいろんな言語があるってことを知らないんじゃないかねぇ。
そして最高の言語があるとか思ってるんじゃないかねぇ。

JavaScriptにおいて演算子はクラスのメソッド(相当)ではない。
演算子のオーバーロードがないのもクラスのメソッドじゃないからだ。
だから演算子が特定のクラスにつくことはない。

もし+演算子がクラスのメソッドであれば、それはクラスごとに変更可能であるはずだ。
また戻り値も好きに変えられるはずだ。(例えばComplex型+Complex型の結果をComplex型にする等)

だけどJavaScriptではそれは出来ない。といったらJavaScriptは劣ってるとか言うんだろうな(苦笑)
これは言語のコンセプトの違いでしか無い。スクリプト言語としてそういう設計になってる。

JavaScriptにおいて演算の結果は文字列か数値にしかならない。(厳密に言えばNaNとかもあるが)
演算子はクラスメソッドではなく、演算子が使われた段階でオブジェクトはプリミティブ型に変換される。
Date型に対して+メソッドが呼ばれるのではなく、プリミティブ型への変換メソッド(valueOf)が呼ばれる。
その後に演算子の効果が働く。

な? 能力が低いんだよこいつは。
自分の知ってる○○の言語の常識でしか考えることが出来ない。

341
デフォルトの名無しさん[sage]   投稿日:2016/07/19 04:57:24  ID:gHzhdyCj.net(7)
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
デフォルトの名無しさん[sage]   投稿日:2016/07/19 09:44:05  ID:Lmd4i1Ew.net(2)
>336
仕様書が変に構造化されてて読みにくいのは非常にその通り。
でもES2015以降徐々に改善されて行ってるよ。
そういう意味でも最新の仕様書を読んだほうが良い。

で、確かに@@toPrimitiveはビルトインではDateとSymbolくらいにしかついていないので特有だが、
別にこれは外したり自由に付けたりもできるし、処理の流れの中で例外というわけでもない。
コメント1件

343
デフォルトの名無しさん[sage]   投稿日:2016/07/19 17:59:10  ID:Ll9Tyf8R.net
頭おかしいのかな。
オブジェクト指向でも、クラス指向ではない。
型は無いに等しい。アヒルの様に鳴き、アヒルの様に歩けば、それはアヒルである、という「見做し」を代わりに使用する。
この2つだけで、何故演算子がその時と場合で意味が変わるか、理解出来るんじゃなかろうか。

知能低すぎなのは、その程度で関数型とか言っちゃってる脳味噌じゃねえの?
valueOfは、見做しの典型だろ。
どんなオブジェクトであれ、どんな経緯でプロトタイプがチェーンされていても、それを辿って一番最初に見つかったvalueOfが使われるんだから。

344
デフォルトの名無しさん[sage]   投稿日:2016/07/19 19:56:18  ID:Lmd4i1Ew.net(2)
まあそういう挙動が変だ、嫌だって言うなら
delete Date.prototype[Symbol.toPrimitive]
すれば変えられる。
誰かは言わないけど世の中には
delete Object.prototype.__proto__
とか嫌いで許せない物をまず削ってから始める派の人も居るみたいだしね。
コメント3件

345
デフォルトの名無しさん[sage]   投稿日:2016/07/20 00:55:34  ID:uzXTbo4C.net
>344
そー。
if Dateとかナンセンスすぎんのよ。
とりあえずvalueOf呼んで、その実装が誰のものかどのインスタンスのものかなんか気にせず、帰ってきたのが値で、
それ以上でもそれ以下でも無い。

クラスのメソッドとか脳味噌の代わりにウニ詰まってるレベル。
オブジェクトか、オブジェクトのプロトタイプのプロパティに
functionが入ってるだけであって、クラス()のメソッド()でも何でも無い。
関数を一級市民とみなす関数型言語erが、まさかの関数をメソッドと特別扱いするとは。

演算子は演算子であって、それ以上でもそれ以下でもない。その後に効果が働くも何も、それ以外の役には立たんから演算子として、言語として定義されとんのだ。

346
デフォルトの名無しさん[sage]   投稿日:2016/07/20 02:05:37  ID:eZynd/Sj.net(5)
>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
デフォルトの名無しさん[sage]   投稿日:2016/07/20 02:06:29  ID:eZynd/Sj.net(5)
さて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
デフォルトの名無しさん[sage]   投稿日:2016/07/20 02:09:56  ID:eZynd/Sj.net(5)
あ、ちなみに試したのは後者、間違いないようにもう一度書いておくと、以下ね。

> delete Object.prototype.__proto__

とりあえず期待した効果がない(気がする)

349
デフォルトの名無しさん[sage]   投稿日:2016/07/20 02:15:43  ID:E+SEwayU.net(3)
> 他言語の仕様/仕様書なら、最初からこんな問題は存在しない。

そんなわけねーだろw
どんな言語でも最初は汚いし
完璧な言語はない。

なによりお前、他の言語と言ってるが、
じゃあ具体的にどの言語だよ?
どうせしらんだろ

350
デフォルトの名無しさん[sage]   投稿日:2016/07/20 02:31:38  ID:eZynd/Sj.net(5)
>344
いじってみると、動作の差異を検出出来た。
delete以降は__proto__指定でのプロトタイプ切り替えは出来なくなる。
ただし、リテラルとしてオブジェクト全体を生成する場合は指定が効くという、
極めて中途半端?な状態になっている。

果たしてこれが仕様なのか、もちろん動作自体ももっと確認しないと怖くて使えないが、
これが仕様であれば、意図は分かるし、最初からこうならこっちの方がいい。
ただ、今現在の動作しているコードの中でこれをやるのは無理だね。副作用が怖すぎる。
(つまり、結論としては、仕様だと確認出来ても使わない)
コメント2件

351
デフォルトの名無しさん[sage]   投稿日:2016/07/20 02:40:40  ID:xVzG2GNh.net
>350
それがなぜかが判れば、自分がどれだけ間抜けな事言ってるかかわかると思うよ。
アスペならダックタイピングとか、関連用語を詰めてこい。

352
デフォルトの名無しさん[sage]   投稿日:2016/07/20 03:30:00  ID:eZynd/Sj.net(5)
B.2.2だろ?
他を見てもアクセサとして実装するところまでは仕様のようだから、
deleteに関しても仕様通りの実装になっていれば同じ動作だろう。
しかしObject.definePropertyを使えば同じ事が副作用無しで出来るのに
わざわざdeleteする意味は何?

353
デフォルトの名無しさん[sage]   投稿日:2016/07/20 07:46:36  ID:2oUQ3wZY.net(2)
>350
まあ多分Object.prototype.__proto__が嫌いな人は
Object.prototypeに余計で醜いの生やすな!って言いたいのもあるだろうから
それで良いんじゃないのかな。

あとまあES仕様は基本的に一箇所に最小限しかかかれていなくて、
慣れていないうちはあっち行ったりこっち行ったりする必要があるが、
逆に言うと基本処理を覚えてパターンに慣れるほどに読みこなしてしまえば、
短い一部を読むだけで理解できるからむしろ楽という事もある。
仕様書いてる人もそうだから、初めて読む人の読みづらさがなかなかわからないんじゃないかな。

354
デフォルトの名無しさん[sage]   投稿日:2016/07/20 09:31:33  ID:E+SEwayU.net(3)
このようにJavaScriptの仕様書っていうのは
よく読まれやすい。読んでいるからこそ苦情も出てくる。

それに対して、他の言語の仕様書は読む気すらおきない

355
デフォルトの名無しさん[sage]   投稿日:2016/07/20 13:30:34  ID:2oUQ3wZY.net(2)
処理系と仕様が完全に分離されてるのもどちらかと言うと珍しいのもあるかもな。
RubyやPythonだったら言語学者でもない限りメインの処理系の動き=仕様ということで納得する部分があるが
JSだと沢山の処理系で動くように作らないといけないからね。

各処理系の対応度合いもまちまちだし、1つの処理系だけ取っても変化が早い。
だから言語仕様書を頼ることが多くなるのかもね。
でも言語仕様書はあくまで言語仕様書であり、リファレンスとは違うので誰にでも分り易いものではないね、

356
デフォルトの名無しさん[sage]   投稿日:2016/07/20 23:30:45  ID:E+SEwayU.net(3)
JavaScriptの標準APIがRubyのそれとは違って
大幅に機能が少ないからのは標準化のせいなのかな?
他言語を見習って一気にメソッド増やしてほしいものなんだが。

http://ruby-doc.org/core-2.3.1/Enumerable.html

これらのメソッドの多くがないから、lodashなどに
頼る必要が出てくる。

他言語で標準化されてるならば、JavaScriptに取り入れるかなんて
議論する必要はないと思うんだけどな。

357
デフォルトの名無しさん[sage]   投稿日:2016/07/21 07:48:11  ID:3EZYXG7o.net
Rubyやらより遥かに後方互換性を切るのが難しいからね。
Rubyやらはなんだかんだ言ってメジャーバージョンアップの時には思い切って互換性を切ることができる。
そこでの一番の問題はユーザーがついてきてくれるかとか、そんなところ。

でもJSは後方互換性を切るとなったら、それが受け入れられるかなんてむしろどうでもよくて、
今あるコンテンツのほぼ全てに影響がないかが大事になる。
それは同等の力を持ったエンジンが複数あり、ユーザーコミュニティではなくエンジン開発陣主体だから。

目線が違うので、便利だから入れようという盛り上がりが起こることは少なく、
今ある特にパフォーマンスや技術的問題を、具体的に解決できる提案が取り入れられやすい。

358
デフォルトの名無しさん[sage]   投稿日:2016/08/21 21:25:32  ID:u7v77FIA.net(3)
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/deleteObjectSt...

普通ならIDBDatabase.transactionがプロパティでそこから辿れるはずなのだが、メソッドだし。
deleteの時にトランザクションがないわけがないし、
それにアクセス出来ないのは仕様上の欠陥だと思うが。
createObjectStoreがobjectStoreを返すのは便利で良いが、本来はTransactionを返すべき。
だったら空オブジェクトにtransactionプロパティだけでも付けておいてくれないと対応出来ない。

なおヒット状況は、
1. あらかじめIndexedDBに500個ほどオブジェクトストアを作っておく。
2. open直後にそのうち3つほどを連続して消す。
3. クローズ。
この3のタイミングの取り方が分からない。

IndexDBは初めて使うので、使い方が間違っていたり、
或いは大幅に勘違いしてるかもしれないけど、その辺も含めてよろしく。
なおアプリとしてはもう一度削除されるだけなのでクリティカルな問題ではない。
コメント3件

359
デフォルトの名無しさん[sage]   投稿日:2016/08/21 22:46:27  ID:Dn9vwW86.net(2)
>358
createもdeleteもversionchangeでしか使えんだろう。

360
デフォルトの名無しさん[sage]   投稿日:2016/08/21 23:07:56  ID:u7v77FIA.net(3)
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のトランザクションとも同一。
だからこれが見えれば問題は解決出来るはずなのだが、辿り方が分からない。
(というか仕様上抜けているように見える)
コメント1件

361
デフォルトの名無しさん[sage]   投稿日:2016/08/21 23:34:58  ID:u7v77FIA.net(3)
ちなみにcreateObjectStore/deleteObjectStoreを常用しようとしている。
APIを見る限り、確かにこれは通常想定されている使い方ではないようだが、
versionカウンタが64bit整数だから出来ない使い方でもない。

管理上最適な階層にすると、今回はcreate/deleteを常用する事になる。
だからそれが出来るかどうか試している。(実用に耐えるかどうか)

362
デフォルトの名無しさん[sage]   投稿日:2016/08/21 23:35:23  ID:sjfW/TwQ.net
トランザクションはversionchange全体で1つ
コメント1件

363
デフォルトの名無しさん[sage]   投稿日:2016/08/21 23:45:38  ID:Dn9vwW86.net(2)
>360
ハンドラに代入したらそりゃ一回だけじゃねえの?
addEventListener使わないのはどうして?

複数作成しても同一、ってなんで複数作成する必要があるの?
トランザクションと同じ、の根拠何なの?
onupgradeneededでしか使えないんじゃなかったっけ?
消す意味がわからんのだけど、なんで消したいの?
消さなきゃいけないなら保存なんかしなけりゃ良いと思うんだが。

createObjectStoreがなんでtransaction帰すべきなの?
ObjectStoreをcreateしたのに。
一つのストアから、2つ以上のトランザクション作りたい場合に詰むんじゃねえの?

なんか根本的に間違ってない?

364
デフォルトの名無しさん[sage]   投稿日:2016/08/21 23:48:10  ID:ZqmshKaM.net
なぜ、ストアごと消す必要があるんだろう。
中身だけ消せばいいんじゃねえの?clear一発っしょ。

365
デフォルトの名無しさん[sage]   投稿日:2016/08/22 00:02:44  ID:m1LOPf7I.net(18)
中身だけ消す使い方も出来るが、それだと名前対応の辞書引きが必要になる。
管理上「最下層の名前=最下層のobjectStoreの名前」が一番簡単だからそうしている。
アクセス/追加/廃棄単位もこれと同一だから、管理上はそこにobjectStore階層を置きたい。
もちろんキーに全部含めてフラットに扱うことも出来るが、
元々階層オブジェクトなのをフラットにしてDBに負荷をかけるのは本末転倒だ。
それでコードが楽になるならメリットもあるが、今回はそうではないし。

今回は完全に階層オブジェクト(末端はファイル)だからIndexedDBの必要はないのだけど、
FileSystemAPIだとChromeしか使えない。
これについてはFireFoxはIndexedDBを使えという主張らしく、
確かに機能的には上位互換だから、動作が十分に軽ければ問題ない。だからそれを試している。
https://dev.mozilla.jp/2012/07/why-no-filesystem-api-in-firefox/
http://www.html5rocks.com/ja/tutorials/file/filesystem/
コメント1件

366
デフォルトの名無しさん[sage]   投稿日:2016/08/22 00:09:17  ID:bLWZhaRu.net(2)
ファイルって何に使ってるの?
最悪消えても良いのならCacheStorageもあるが。
コメント2件

367
デフォルトの名無しさん[sage]   投稿日:2016/08/22 00:15:46  ID:m1LOPf7I.net(18)
>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
デフォルトの名無しさん[sage]   投稿日:2016/08/22 00:23:12  ID:m1LOPf7I.net(18)
>366
Web上のファイルの保存用途に使う。(アーカイブ)
だからファイルが保存出来れば何でも良い。
(まだFileSystemAPIは試していない)

URLは最初から階層になっているし、それを保つのが管理上一番楽だからそうする。
したがって、DBアクセスの必要はない。
ユーザがライフタイムを完全に管理出来なければならない。
(Web上から削除された時、ユーザ側で削除するか保存するか決める)

CacheStorageはあとで見てみるが、チラ見では新しすぎる感じ。

369
デフォルトの名無しさん[sage]   投稿日:2016/08/22 00:32:40  ID:utwn7AiT.net(11)
>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なんだし。
階層構造を保存するためにハードディスクが階段の形してるなら寝言続けて。
コメント1件

370
デフォルトの名無しさん[sage]   投稿日:2016/08/22 00:36:42  ID:m1LOPf7I.net(18)
>366
CacheAPI見てみたがライフタイムの管理がよく分からん。
「ユーザ側からの削除無しなら永久保存」(つまりファイルと同じ)に出来る物なの?
https://developer.mozilla.org/ja/docs/Web/API/Cache

あとIndexedDBはFireFoxがそういっているから試してみているだけであって、
FileSystemAPIだとWindowsから直接コピーとか出来るはずなので、
結果的にアーカイブの管理が楽にはなるから、そっちを使うかも。

いずれにしても今は試している段階だ。
何か情報あればよろしく。
コメント2件

371
デフォルトの名無しさん[sage]   投稿日:2016/08/22 00:42:53  ID:utwn7AiT.net(11)
自分はすごく考えた結果、こうする他がない、でもわからん。不自然な答えになる。そのやり方は不自然なやり方だからどこにも載ってないから教えてってときに、情報出し渋るなよ。
どう考えても自分の発想が間違ってる以外の結論出ないんだから。

>370
しかしなんでパスをインデックスに出来ないの?
限界サイズは一番でかいか無限だよ。IndexedDBは。
コメント1件

372
デフォルトの名無しさん[sage]   投稿日:2016/08/22 00:43:11  ID:m1LOPf7I.net(18)
>369
それも何の負担もないが、
元のURLもクエリを含まないからそのままでも全く負担無いんだよ。
だからその方法ではコードは楽にならない。

仮にFileSystemAPIを使ったとして、
Windowsから直接ファイルをアクセス出来れば、
アーカイブが要らなくなった時にエクスプローラから削除出来るでしょ。
直感的に一番簡単。

それを意味無くフラットなDBにしてしまったら、
そのアプリいちいち起動しないとあれこれ出来ないでしょ。
バグってて削除出来ないとかもあり得るわけでね。そういうこと。
他アプリとインタフェースが揃っているのは重要なんだよ。
仮にIndexedDBも結果的にWindowsファイルの階層として見える形で
objectStoreを置いてくれていれば、同様のことが期待出来るわけだし。
コメント1件

373
デフォルトの名無しさん[sage]   投稿日:2016/08/22 00:49:08  ID:m1LOPf7I.net(18)
>371
出し渋るも糞もアーカイブだと言ってるだろ。
パスはインデックスにするよ。ただしフラットにはしない。
限界サイズはndexedDBよりも多分FileSystemAPIの方が上だ。

374
デフォルトの名無しさん[sage]   投稿日:2016/08/22 00:56:03  ID:m1LOPf7I.net(18)
IndexedDBの容量制限は実質1/10*HDDね。
https://developer.mozilla.org/ja/docs/Web/API/IndexedDB_API/Browser_storage...

多分FileSystemAPIには上限がない(HDDの上限だと信じている)

繰り返すが、今回は元々アーカイブ用途だからそもそもDBアクセスの必要はない。
(横断的クエリとか検索とかは全く必要ない)
ただ、機能的には上位互換だから動作に問題なければそれでもいい。それだけ。
コメント1件

375
デフォルトの名無しさん[sage]   投稿日:2016/08/22 01:07:03  ID:utwn7AiT.net(11)
>372
は?消すのはエクスプローラーなの?

意味なくフラットなぁ。
十分に意味のあるフラットだと思うけど。
バグって削除できないから、だから最初の発想では毎回ストアを作って破棄します、なんて考え方だったの?あきれた。
upgradeはなんなのか。

dir /S/Bした結果だから余程見慣れてると思うけどね。
WindowsWindowsって気持ち悪いけど。
べつに、どのフォルダ以下、って、キーの先頭xxxxxx文字が指定のもの、なんだし、特に変わらんと思うんだけど、
お前の中で違うならそうなんだろう。

フラットに見えるものが、フラットではないと思うのがよくわからなすぎて悩むわ。
indexedDBには文字列しか保存できないと思ってんのかな。

フラットにはしない!って、じゃあどうやってWindowsってフォルダの構造保存してるんだろう。
って考えたら、
フラットなものに保存されてる事気づくと思うんだけど。

>374
だから、実際のサイズ調べてこいよ。
クォータまでだよ。
それに、残念だけど、フォルダとして見られる物じゃないよ。
コメント1件

376
デフォルトの名無しさん[sage]   投稿日:2016/08/22 01:09:42  ID:utwn7AiT.net(11)
まさかディレクトリ掘るのに再起使ってるから、平たくする方法がわからんのかな。
そんなに階層階層言うなら、階層構造渡したらそのまんま保存してくれるラッパ作るか、
バイナリの保存はちょっと考えなきゃならんがブラウザ版nedbでも使えばいいのに。

377
デフォルトの名無しさん[sage]   投稿日:2016/08/22 01:16:58  ID:bLWZhaRu.net(2)
>370
保証はされていないが、一般的な環境ではまず問題ない。
というかIDBも実際は永続性は保証されていない。
Fxだと保証されているのは非標準のオプションを指定した時のみで、
他のブラウザでも基本的に一時的なものでディスクが埋まった時は利用頻度の少ないものから削除される。
トランザクションだって完璧でない。実際はパフォーマンス向上のためにディスクの書き込み完了を待たない。
コメント1件

378
デフォルトの名無しさん[sage]   投稿日:2016/08/22 01:19:31  ID:m1LOPf7I.net(18)
>375
> それに、残念だけど、フォルダとして見られる物じゃないよ。
そうか、これは残念だ。

だったらやっぱりFileSystemAPIかな。
削除機能は内部にも付けるけど、
エクスプローラでも追加/移動/削除出来た方がいいのは自明だろ。
他アプリとの連携もし易くなるし。

まあお前が色々勘違いしているのは分かるけど、
既に言っていることばかりだから読み返してくれ。
コメント1件

379
デフォルトの名無しさん[sage]   投稿日:2016/08/22 01:25:17  ID:utwn7AiT.net(11)
>378
だから、FileSystemApiがだよ。
フォルダとしては見られないか、超掘り返さないと見れないよ。
更にいうと、エクスプローラでなんなりするべきものじゃない。

それはもう、Electronかなんかで作れ。な?

お前が勘違いしてるのは、多分indexedDBへの保存の方法だとの思うけど。
そのために必要な階層構造を保ったまま、indexdDBに十分入れれるからな。
コメント3件

380
デフォルトの名無しさん[sage]   投稿日:2016/08/22 01:25:40  ID:utwn7AiT.net(11)
まぁ、インスペクタでは表にしかならんだろうけど。

381
デフォルトの名無しさん[sage]   投稿日:2016/08/22 01:30:27  ID:m1LOPf7I.net(18)
>377
了解。ありがとう。

アーカイブ用途なのでトランザクションに関しては問題ない。
再ダウンロードして保存すればいいだけだから。
機能は、Web上で削除されたファイルをまだ削除されていないように見せかけるもの。
それが永久だとアーカイブということになる。

CacheAPIは多分この用途に作られているから、
それが使えるのならそっちを使った方が色々すんなり行くのだろうね。
プロキシとして機能してくれるなら、いちいちObjectURLに張り替える必要もなくなるし。
全体として楽になる。

ただ永久保証無しなら、何らかの形で抽出機構が必要になる。
これがちと面倒か。
多分CacheAPIの区画を「永久」「一時」とユーザー側で指定出来れば一番良いのだけど、
無理だよね?

382
デフォルトの名無しさん[sage]   投稿日:2016/08/22 01:33:03  ID:m1LOPf7I.net(18)
>379
JavaScriptオブジェクトそのまま突っ込めるって話だろ。
もう試したが、今回の用途にはメリットがないんだよ。
コメント1件

383
デフォルトの名無しさん[sage]   投稿日:2016/08/22 01:34:46  ID:m1LOPf7I.net(18)
>379
> だから、FileSystemApiがだよ。
え、マジで?

384
デフォルトの名無しさん[sage]   投稿日:2016/08/22 01:38:12  ID:utwn7AiT.net(11)
>382
そのままじゃなくて、書き加えて保存できるし、
その任意のプロパティをインデックスに出来るよ。

お前の言うフォルダ名も、そのままでも、セパレータで分割しても、両方でもインデックスとして保存できる。

このフォルダ以下、これと同じ階層のもの、ファイル、全部綺麗に管理できるんだけどね。

これをフラットだからダメ、って言うなら、
一つのオブジェクト入れるオブジェクトに好きなだけツリー構造こしらえれば良いのかもしれん()が。

ノータリンに説明した時間が無駄だったな。
コメント1件

385
デフォルトの名無しさん[sage]   投稿日:2016/08/22 01:44:52  ID:m1LOPf7I.net(18)
>384
とりあえず384に書いていることは全部知っているぞ。
ただそんなことせずともURLそのままで保存すれば良いだけなんだよ。
サーバ側でそれなりに考えて階層化されているわけでね。
コメント1件

386
デフォルトの名無しさん[sage]   投稿日:2016/08/22 01:53:36  ID:utwn7AiT.net(11)
>385
はぁ。そうですか。
それでidb程度が使えないというか、わけわからん仕様出してくるとは、「それなりに考えて」階層化してるものが、表型DBに落ちてりゃ最高に面白いけど、フォルダ()なんだろうな。
好きに悩んでバギーなもの作ればよろし。
コメント1件

387
デフォルトの名無しさん[sage]   投稿日:2016/08/22 01:59:36  ID:utwn7AiT.net(11)
ブラウザの枠越えてフォルダがどうとか言うなら普通にWindowsアプリ組めばいいんじゃないのかな。
ブラウザはブラウザでサンドボックスになってるから良いのに。

388
デフォルトの名無しさん[sage]   投稿日:2016/08/22 02:02:44  ID:m1LOPf7I.net(18)
>386
いや何を勘違いしているのか知らんが、コードはもう動いているし今はテスト中だぞ。

まあそれはさておき、FileSystemAPIが異なるファイルシステムを使っているのは
確定ではないがどうやらそのようだ。
というかこれだとWeb屋は言葉を間違っている。

サンドボックス:その内部で何をやっても外部に影響はない
ブラックボックス:その内部がどうなっているか外部からは見えない

ブラウザストレージはサンドボックスである必要はあるが、
ブラックボックスである必要はない。というかFileSystemAPIならなおさら。
てかマジでブラックボックスならFileSystemAPIの存在価値無いよ。
これだとFireFoxの言うとおりだと言うことになる。

何で意味無くブラックボックス化してんだ?
コメント1件

389
デフォルトの名無しさん[sage]   投稿日:2016/08/22 02:14:19  ID:utwn7AiT.net(11)
>388
サンドボックスだ、としか言ってないし、
ブラックボックスではない、とは言ってないからいいんじゃねーの?
動いててテストフェーズなのに未実装機能あるなんて面白いのか面白くないのかわからんな。

だから言ってんじゃん。
それゴミ。idbの方がはるかにマシ。
要はクロームアプリ同士で、ファイルが筒抜けにならんように隔離してみました、って感じ。
コメント1件

390
デフォルトの名無しさん[sage]   投稿日:2016/08/22 02:22:51  ID:m1LOPf7I.net(18)
>389
いやFileSystemAPIと言うからにはエクスプローラで操作出来ないと駄目だろ。
機能としてはIndexedDBの方が上位互換なんだから、
独自ファイルシステムなら存在価値がない。

> 要はクロームアプリ同士で、ファイルが筒抜けにならんように隔離してみました
この必要あるの?
具体的に言えばアプリのシグネチャ?でも混ぜ込んであるって事?
ローカルストレージが共通なのが多少問題だったから仕切ったってわけか?
コメント2件

391
デフォルトの名無しさん[sage]   投稿日:2016/08/22 02:50:07  ID:m1LOPf7I.net(18)
あー、つかお前らがよく使う言葉思い出したわ。

IndexedDBでもFileSystemAPIでも、
内部データを「追加/移動/削除」する為の機能を自分で作るのは、
「エクスプローラーの再開発」(車輪の再開発)なんだよ。

Windows上のエクスプローラーが使えたらそれが一番良いだろ。
ドラッグアンドドロップやプレビューの機能は全部持っているし、バグもないし。
つか何故いちいち「マイエクスプローラー」を開発しなければならんのよ?

これが>379の勘違いに対するお前らの言葉での答えね。
そしてChromeは「マイエクスプローラー」の開発を強制するわけだ。
アホかねと。
コメント1件

392
デフォルトの名無しさん[sage]   投稿日:2016/08/22 07:34:32  ID:utwn7AiT.net(11)
>390
ブラウザってパソコン以外にも乗るじゃん。
その時、ファイルシステムなんて存在しないかもしれないよ。
って話。

>390
例えば、なんかのアプリで保存したパスワードなんかを、別のアプリから覗き見出来ないようになってる。

>391
世界中の人がWindowsのエクスプローラやマックのFinder使ってるから訳じゃないんだよw
内部データを追加、移動、削除するってのは、つきつめたらそれが機能なんだから。
お前が使いたいのがたまたまエクスプローラなだけだから、そう思うんだろうけど。
マイエクスプローラーではなくて、自分が使いやすいUI作れよ。
それか、どっかポート開けてwebDAVででも晒してローカルでマウントさせろ。
コメント1件

393
デフォルトの名無しさん[sage]   投稿日:2016/08/22 10:56:09  ID:uzkoNVx4.net
どうしてこういう人は、ライブラリを作ろうとはしないんだろう。
ディレクトリ一覧を帰す関数、あるディレクトリのディレクトリとファイル一覧を帰す関数、ファイルを新規、取得、更新、削除する関数を作っときゃ、それらの下回りがindexedDBだろうがサーバ関数だろうが関係無く透過的に扱えんじゃねえの?
それこそ、内部実装無視してindexedDBに行ごとに入れようが、クソでかいオブジェクトとして入れようが、はたまたサーバに入れようが、ご希望の動きがすぐ書けると思うんだけど。
コメント1件

394
デフォルトの名無しさん[sage]   投稿日:2016/08/22 21:30:14  ID:m1LOPf7I.net(18)
すまぬ、>358は間違い。
upgradeのときはe.target.transactionが最初から入っている。
昨日も確認したのだが、どうやら間違えたようだ。
これで修正出来たかは確認中。

これとは別に、createObjectStoreのoncompleteが少し早いタイミングで返ってくるらしく、
oncomplete直後にput等をせずに終了するとエラーになる。
これはupgradeのtransactionが並列出来ないということなので、
一旦closeして開きなおして並列性を高めようとしたが、失敗した。
コメント2件

395
デフォルトの名無しさん[sage]   投稿日:2016/08/22 21:40:34  ID:m1LOPf7I.net(18)
>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/Introducti...
コメント2件

396
デフォルトの名無しさん[sage]   投稿日:2016/08/22 21:41:45  ID:m1LOPf7I.net(18)
>393
それはお前が無能だからお前の周りも無能しかいないだけ。
コメント1件

397
デフォルトの名無しさん[sage]   投稿日:2016/08/23 00:24:48  ID:ua608nki.net(3)
>395
なら、エクスプローラーで管理しろよもう。
文句ばっか言って鬱陶しいわ。
electronでざっくり作るか、いっそcsで書けば?Windows()だけでしか動かないクソアプリを。

>396
お前の事言ってるの。
俺はライブラリ作ってるよ。
オフラインアプリ用のスクリプトも画像も、ServiceWorkerとindexedDBで全部賄ってるから、「出来るのに技術的な問題だと思いこんでカスだなこいつ」って思ってんじゃん。


398
デフォルトの名無しさん[sage]   投稿日:2016/08/23 00:49:53  ID:fTj2N0cj.net(5)
今のところはそのつもりだ。cscriptと併用する。
Unix使いならcron位自分で書けということでいい。
もちろん他にいい方法が見つかったら変更する。

長期的運用を考えた場合、
ブラウザがクラッシュした時に破損する可能性がある場所はアーカイブとしては使えない。
また他アーカイバも既にあるので、それらとの相互運用を考えた場合も、
生ファイルシステムでないと駄目だ。

格好は悪いがこれが運用上は一番マシだ。
まあもうちょっと考えるが。
コメント1件

399
デフォルトの名無しさん[sage]   投稿日:2016/08/23 01:04:54  ID:ua608nki.net(3)
>398
生ファイルシステムほど不安定な場所もないと思うけど。
サーバ側mongo,クライアント側nedbで適当に同期すれば?

400
デフォルトの名無しさん[sage]   投稿日:2016/08/23 01:17:30  ID:fTj2N0cj.net(5)
インストールが必要な時点でアウト。
というかお前は無駄にシステムをでかくする病気にかかっていると思うぞ。
コメント1件

401
デフォルトの名無しさん[sage]   投稿日:2016/08/23 01:47:37  ID:ua608nki.net(3)
>400
はぁ。
思い描くものがあれば説明してみ。
大体な、それは不可能と応えていくわ。
コメント1件

402
デフォルトの名無しさん[sage]   投稿日:2016/08/23 08:05:29  ID:ZcVGgUHo.net(3)
システムをでかくする病気って言われても、要件が見えなさすぎるんだししゃーなくない?
サーバ側ではデータベースに入ってんだろ?じゃあリプレイスすりゃいいじゃん。
むしろ、サーバのデータベースは何者かわからん。
アーカイブってなんだそりゃ。何のどんなアーカイブかわからんし、さらにそれが階層構造とか、階層構造はデータベースに入れられない()とか不思議発言過ぎるんじゃねえか?

403
デフォルトの名無しさん[sage]   投稿日:2016/08/23 08:18:51  ID:exF8NocQ.net(3)
>395
お前一体何時の記事見てんだよ。
MDNに頼るにしても最低でもLast updatedくらい見ろ。
もう何年も前にサポートされてるわ。
この手の情報は半年経つともう古い。
そして最終的にはブラウザのissuesやcommitsやソースコードを読まないと確かなことは言えない。
独自実装・勝手解釈・消費期限切れの塊であるMDNに1から10まで頼るのは危険。
コメント1件

404
デフォルトの名無しさん[sage]   投稿日:2016/08/23 11:20:47  ID:ZcVGgUHo.net(3)
というかね、ミニマムなコード片書いてくれればいいと思うんだが。
書いて、あ、Blob入るじゃんって気づくから。
入らなければbase64なりにして突っ込みゃ良いだけだし。
そのまんま、自分のライブラリになると思うけど。

405
デフォルトの名無しさん[sage]   投稿日:2016/08/23 11:32:18  ID:ZcVGgUHo.net(3)
ファイルが保存できればそれでいい、って言う割には、階層が、とか、自分の実装に凝り固まり過ぎだろ。

ただのrdbでもindexedDBでも
フルパス|[パス,,]|ファイル名|拡張子|中身|更新日などの情報|
って形で保存すりゃなんとでもなるだろ、常識的に考えて。
パスは、
file://
file://home
file://home/xxxxx
file://home/xxxxx/yyyyy
の配列で持っといて。
あるパス以下の物→パスで絞れば一撃
あるファイル→ファイル名で一撃
あるパスのあるファイル名→フルパスで一撃
でカーソル取れんじゃん。
あとはよしなに処理すりゃいいんじゃねえの?その為のトランザクションなんだし。
ディレクトリごとにストア分けて、ディレクトリを削除するのに、トランザクション何個も張る羽目になるっしょ。
コメント1件

406
デフォルトの名無しさん[sage]   投稿日:2016/08/23 21:49:08  ID:fTj2N0cj.net(5)
>403
おおありがとう。Blobサポート済みか。
となるとボツではなくなった。
記事は古いとは思ったが、政治的案件は時間では解決しないから、どうせ駄目だと思っていた。

>401
いやcscript併用案はもう既に動いている。
考え方は簡単で、ブラウザで出来ないのはローカルファイルのサポートだから、
それをcscriptにやらせるということ。
とはいえ読み出しには手動で指定が必要だから、それとどっちがマシかということになる。

俺が勘違いしていたFileSystemAPIは
・ブラウザ側で「あるディレクトリ」を指定。これはブラウザ側で手動でしか出来ない。
(指定方法の取り扱いは「ダウンロード」フォルダと同じ)
・そのディレクトリ以下は読み書き自由。
だった。
もちろん生ファイルシステムでOS側からは直接読み書き変更可能。
ブラウザ側からのアクセスはWebアプリ毎にアクセス権が設定されている。

というかこれ以外のFileSystemAPIなんてゴミだろ。
あの糞仕様なら誰も使わない。使う意味無いし。

JavaScript界隈で思うのは、「使ってない奴」「三流プログラマ」が仕様を策定しているということ。
だから「使えない」「使いにくい」仕様が溢れかえっている。FileSystemAPIがゴミなのもこのため。
従来は仕様策定に関われる時点でそれなりの実力者しかいないからこういう事はなかったが、
良くも悪しくもJavaScriptはWebだって事だね。

>405
つ薬
コメント1件

407
デフォルトの名無しさん[sage]   投稿日:2016/08/23 22:55:54  ID:exF8NocQ.net(3)
exeみたいな実行形式やそのOSで特別な意味を表すシステムファイル等として書き出されちゃまずいので実態は偽装される様になってる。
ゴミというか、実験的で気まぐれな機能。もう何年も更新されていない。
誰も使わない、でもブラウザ内部では使われている。別に広く使われることを期待されていない。
IndexedDBやCacheDBの存在で意義をなくしつつある。
柔軟に検索したいなら前者、そうでないのなら後者をどうぞ。

君が望むようなファイルシステムAPIなどがなかなか策定されないのは幾つか理由がある。
でも技術的要因は取り除かれてきた(例えばPermissions API、Web App Manifest)ので、
あとは需要と雛形とブラウザベンダーのやる気次第。

とはいえ今はCSSや他の比較的低レベルなAPIが盛り上がっていて注力してるから後回しだろう。
W3CのMLを見ても「いくつか議論の余地がある」レベルの関心だ。
今はまだアイディアを貯めている段階だろう。
コメント1件

408
デフォルトの名無しさん[sage]   投稿日:2016/08/23 23:01:47  ID:exF8NocQ.net(3)
あーでもやっぱりそろそろ動き出すかもな。
https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/_6Euwqv366U
これが落ち着けば足回りが揃うから。

409
デフォルトの名無しさん[sage]   投稿日:2016/08/23 23:50:21  ID:fTj2N0cj.net(5)
>407
> exeみたいな実行形式
Webアプリから起動出来なければこれは問題無いだろ。
> OSで特別な意味を表すシステムファイル等
要するにシンボリックリンク等で全部筒抜けになる場合だろ。
これも結局Webアプリ側はブラウザを通しての作成しか出来ないので、それを止めればいいだけ。

OS側からシンボリックリンクを貼ったり、exeを置くのは自由でいい。
Webアプリ側でexeを起動出来ず、シンボリックリンク等を作成出来なければいいだけ。
つまりファイルは「データ」としてしか扱えないという、実装するにも至極簡単な制限でしかない。
FileSystemAPIははっきり言って使う気がない仕様を策定してる。だったら策定しない方がマシ。
まあ策定してから捨てるというのがJavaScript流ではあるようだが。

> IndexedDBやCacheDBの存在で意義をなくしつつある。
結局の所、「勝手に削除される可能性がある」時点でアーカイブとしては使えない。
見たところここを保証する気はなさそうなので、
今回俺がこれらをメインに据えることは出来ないし、
どのみち「削除されない」ストレージも必要になると思う。

410
デフォルトの名無しさん[sage]   投稿日:2016/08/23 23:50:56  ID:fTj2N0cj.net(5)
> 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万ダウンロードとかになるので大丈夫なのか?という疑問はあるが、これも試すしかない。
(ダウンロードは履歴が残るようになっているので、手動ではあり得ないほどの数になると、
履歴がオーバフローするバグが残っているのではないかと恐れている。
これも知ってたら教えて欲しいが。)
コメント2件

411
デフォルトの名無しさん[sage]   投稿日:2016/08/24 00:44:52  ID:dKh15413.net(2)
>406
お前のコードこそ、特定のプラットフォームか外出てるじゃん。
どう使いにくいのかが分かれば良いんだが。
もう老人であたらしいこと覚えられないならご愁傷様。

412
デフォルトの名無しさん[sage]   投稿日:2016/08/24 00:48:32  ID:1m5/CfUP.net
>410
トランザクションがROLLBACK単位とか言うか
適宜コミットして、setTimeoutで遅延させてつかえよ。
ボンクラすぎるだろ。

タイミングも合ってるよ。

脳みそ腐ってないならば、ぜんコード上げてみろよ。見てやるから。

413
デフォルトの名無しさん[sage]   投稿日:2016/08/24 00:52:22  ID:7vNot/FK.net(2)
IndexedDBが小慣れていないと言われてるのは周知の事実。
が、機能は揃っているので上で言われてるように
大抵皆ライブラリを書いたり、使ったりして問題なく過ごしている。

君のここまでの書き込みは全然建設的じゃないし、
ほんとにバグがあるのか、もしくは君の方がが小慣れていないのかが分からない。
結果、ただの愚痴にしか聞こえずそれに対して何も言えることはない。
せめて再現するための最低限のコードを載せてくれ。

あと10万ダウンロードはやめとけ。ZIPなどに圧縮すればいい。
もしくはもう一般WebAPIだけで作るの諦めろ。
一般公開するかは知らんが、それだけの機能なら
拡張機能もしくはブラウザアプリにしてインストール必須にしても構わないだろう。
コメント2件

414
デフォルトの名無しさん[sage]   投稿日:2016/08/24 02:09:31  ID:fG60fvYz.net(3)
>413
> ほんとにバグがあるのか、もしくは君の方がが小慣れていないのかが分からない。
これはその通り。当初の>358は間違いだったからね。
ただ仕様は大体理解したので、多分>394>410はバグだ。

とはいえ切り分けはしない。
最新版が使えない状況で切り分けて報告する意味はないので無駄だから。
(最新版では既に治っているかもしれない)
俺については「バグがある」という認識で使うか、使うのを止めるかでしかない。
つまり他の方法も試して一番マシな方法を使うだけ。
ちなみにchromiumに対してバグ報告もしたことあるし、受け付けられてもいるよ。
ただそれをやるにしてもここでやる意味はない。直接報告すればいいだけ。

コードはここには上げない。
コピペすればいいだけのコードすら協力してくれないお前らに対して期待はしていないし、(>270,279)
話を聞く限りお前らの腕前/デバッグ出来る範囲を完全に超えている。
コードを上げてもお前らでは何も出来ないよ。
いずれにしても既に公開はしているから、勝手に探せばいい。

100kダウンロードはその話だと試したわけではないんだろ?だったら俺が試すだけだよ。
ZIP化してもいいが取り扱いが面倒になるだけだから、いければ生ファイルで行く。

> 拡張機能もしくはブラウザアプリにしてインストール必須にしても構わないだろう。
これは何が違うんだ?調べた限りでは大差ないようだったが、違うのか?
なお今回欲しい機能は以下。
・ローカルファイルからのユーザ指定無しでの読み込み
・ダウンロード時のフォルダ指定(階層化したフォルダに対してのダウンロード先指定)
これらが出来るのなら乗り換えを検討する。
ちなみに今のところGreaseMonkeyで不自由していない。
ただ、GM専用機能も使ってないので、乗り換えは出来る。

415
デフォルトの名無しさん[sage]   投稿日:2016/08/24 02:10:28  ID:fG60fvYz.net(3)
> 君のここまでの書き込みは全然建設的じゃないし、(中略)
> 結果、ただの愚痴にしか聞こえずそれに対して何も言えることはない。
上記の通り、俺は相談以上の期待をお前らに対してはしていない。
だから気に入らなければレスくれなくていい。
(上記経験により俺もそういう距離感で行くことにしたから)
そちらも分かるように、どこまでの情報があれば何を回答出来るかはこちらも分かっている。
その上で書いているのだから、それについては無理という件については無視でいい。
馬鹿共は置き去りにしないとスレのレベルが上がらない。

その上でバグ確認に協力してくれるというのなら、
それは申し訳ないが今回はそこに踏み込む気はない。
理由は上記どおり、最新版でないと意味無いから。
そちらが既にバグに当たらない記述のライブラリなりを持っているのならそれで問題ないわけだし。

心配せずともchromeなんてバグだらけだぞ。
こなれていないところに踏み込んだらすぐに遭遇する。
それはそちらも知っていると思うが。

君らは気に入らないかもしれないが、俺は情報をくれた奴には感謝している。
ただ君らが「持ちつ持たれつ」という感覚を持ち合わせていないことも学習したから、
君らに大して期待もしていない。だから再度言うが、気に入らなければ無視でいい。
(というかこれまでの俺が甘かっただけで、本来は君らのスタンスの方がここには向いている)

416
デフォルトの名無しさん[sage]   投稿日:2016/08/24 02:47:00  ID:fG60fvYz.net(3)
>413
> IndexedDBが小慣れていないと言われてるのは周知の事実。
ちなみに俺はJavaScript屋ではないから、
こういう、「周知の事実」ってのは知らない情報だ。
だから君にとっては大したことなくても、俺にとっては助かっている。

その「周知の事実」にアクセス出来る人に対してこちらから提供出来る情報はほぼ無い。
せいぜい遭遇した事実/外部目線で見た感想を垂れ流すことくらいだ。
で、これを既にやっているわけだが、
結果、愚痴にしか見えないというのなら、それはそれで仕方ない。
残念ながら、こちらが「情報交換」として提供出来るのはこの程度でしかないんだよ。
何が君らにとって有意義な情報かもこちらには分からない。
だからとりあえず垂れ流すのみ。
コメント1件

417
デフォルトの名無しさん[sage]   投稿日:2016/08/24 07:24:26  ID:dKh15413.net(2)
何様かわからんな。
出せる情報もなく、教えてくれって虫が良すぎるだろ。
Qiitaにでも行ってくれば?

418
デフォルトの名無しさん[sage]   投稿日:2016/08/24 08:19:51  ID:u65p5RKL.net(2)
俺はindexedDBを商用製品に普通に使ってる(しかも、ローカルへのキャッシュとして)から、ぶっちゃけどんなドヤされても、こいつの書いた実装が悪いんだろうなとしか思えん。
トランザクションで500件を超えるって、そんなデカいアトミックな操作が思いつかんレベル。
ファイルの取得であれば、保存できればそれでワントランザクションだろ。
関数越えてトランザクション持って回って、どっかで非同期な呼び出しがあってカーソル見失った瞬間にトランザクション失敗してるんじゃねえの?
とかそんな感想。
ある一定バージョンのファイルセットが取得できるまでをトランザクションと見なすなら、バージョンごとに仮データとして保存するトランザクションと、
古いセットを削除して、仮データを有効データに更新するトランザクションの二本で充分でしょ。

なんで、自分より相手方の方が馬鹿に違いない、と思えるのかわからん。
俺もコミッタだけど、その発想でプルリク投げた事は無いわ。

419
デフォルトの名無しさん[sage]   投稿日:2016/08/24 08:36:10  ID:u65p5RKL.net(2)
ダウンロードリンク、の代わりにindexedDB使う発想がわからん。
何がどこにどうダウンロードされるんだろう。
それはローカルに持ってたらどう便利なんだろう≒ローカルにあれば二度と押さないボタンなんだろうか?

なんか(アーカイブってのが何のアーカイブかはわからんが)ウェブから取得させるときに、二回目以降はそのクライアントのデータを使わせて、ダウンロードしたフリすれば良いの?

サービスワーカーで書いちゃだめなの?その処理。

420
デフォルトの名無しさん[sage]   投稿日:2016/08/24 08:45:06  ID:7vNot/FK.net(2)
>416
おいおい、はぶてんなってw
建設的でないどころではなくなってるぞ。
これだけ皆が比較的長文で沢山レスして構ってくれてるんだから
あとは君の態度次第で強力な仲間となるだろうよ。

答えをもらう代わりに問題をきちんと問題として認識できる形であげれば
それで十分「交換」になる。
あとDLに関しては500くらいで試してみて。
確かpermissionの取り方によるのか知らんが50か100毎に確認出たはずだから。
ファイルごとにオーバーヘッドもかかるだろうしアーカイブ化した方がいい。
コメント1件

421
デフォルトの名無しさん[sage]   投稿日:2016/08/25 00:05:19  ID:eAOsu6G6.net
>420
1日500DLなら現在味見中で、既に2週間ほど動作して問題は発生していない。
確認は一度も出ていない。ただ、出る環境の場合はこれは使えないのも確かだ。
まあ500DLなら人力でも十分あり得る範囲、さすがにこれでバグ遭遇はない。

ローレベルでのファイルのオーバーヘッドはない。
そもそも自動アーカイブはほぼ書き込みばかりだから投げ捨てだ。
また、データの大半はjpg等の圧縮済みファイルだ。
(個数としてはテキストの方が多いがjpg一枚でおつりが来る)
だからzipというよりtarなんだが、それもしない方がいいだろうという読みだ。
まあここら辺はこちらで試す。

> あとは君の態度次第で強力な仲間となるだろうよ。
セミコロンの位置でドヤア()、文法でドヤア()する奴がいくら居たって邪魔なだけ。
俺について助けになるのは、プログラミング上級者(10k行のコードを平気でメンテ出来る)か、
俺以上にJavaScriptの仕様に詳しい連中だけだ。

後者については俺がJavaScripterではないのでここの連中でも当てはまるケースも多い。
それが俺がここにいる理由。
前者について当てはまるのはここには居ても数人だ。
だから内部構成についての指摘は大半が俺から見ればデタラメに過ぎなく、ウザイだけ。
よって、そっちに流れないように上位アーキテクチャの話に絞っているわけでね。

422
デフォルトの名無しさん[sage]   投稿日:2016/08/25 07:26:33  ID:kFTapBTb.net
なーんだ
自分の手足となってくれる素直で言うこと聞いて優秀な部下もしくは奴隷がフリーで欲しいってことだったのか

サイコパスにちょっとでも強力しようと思った俺がバカだったわ

423
デフォルトの名無しさん[sage]   投稿日:2016/08/25 08:20:27  ID:99xpDjOR.net
それにどうindexedDB使うのか全然わからん。
圧縮済みデータはそれ以上圧縮かからないから、圧縮しない、は
圧縮済みデータが一つのときだけじゃない?
エントロピーが偏れば圧縮は効くんだから、いくつか混ぜるとちゃんと圧縮は効くと思うけど。
そういう意味ではtarでアーカイブした上で、積極的な圧縮はせずに、Webサーバのgzip任せていいんでないの?
無駄な作り込みはバグ生むよ。

正直、普通に職業マやってたら、そんなステップ数のメンテは逆にしない。
逆に、しないように、スクラッチの時点でちゃんと切り分ける。

別に上級者気取りでも気にはしないけど、どう考えてもアーキが浮かばん。
アーキ屋何してんの?

何か情報を出すと俺のすごいシステムがパクられそうで怖い、みたいに聞こえるけど、そういうのって大体みんな通り過ぎて、王道はなるほど王道なんだな、って「そうしないだけ」だから、
気にせんで良いんじゃないの?
ホントに凄いかも!と思ったら、先にアイディアだけどっかに書いとけばいいよ。

424
デフォルトの名無しさん[sage]   投稿日:2016/08/26 18:32:39  ID:wJ1YpBkQ.net
ID:fTj2N0cj
ID:m1LOPf7I
ID:fG60fvYz
ここって他者を見下して優越感に浸る人が多いよな
>1からしてそんな感じだったからなるべくしてなったのかもしれんが

425
デフォルトの名無しさん[sage]   投稿日:2016/08/26 18:53:36  ID:4RusDDpB.net
もし本当に他者を見下してるように見えるんなら精神病院行ったほうが良い。
本当に見下してれば相手と会話したりしない。

426
デフォルトの名無しさん[sage]   投稿日:2016/08/26 23:31:04  ID:LTYwvQxl.net
バカほど人を見くびるもんだよ。
そして見くびれるからバカで居られる。
会話するメリットなんかいくらでもあるよ。ぬいぐるみは反抗しない「から。
反抗反論されると言うことは、自分の発言は反抗反論される程度の意味があんだ、むしろ相手が理解できない馬鹿なんだ」と思うことすらでき、一人で気持ちよくなれる。

427
デフォルトの名無しさん[sage]   投稿日:2016/08/27 05:01:58  ID:T1cpNbqY.net(2)
反抗しないぬいぐるみなんてここには居ないが?
後半は今回で言うと間違いなく ID:eAOsu6G6 の方だな
早く気付けよ
コメント1件

428
デフォルトの名無しさん[sage]   投稿日:2016/08/27 05:49:03  ID:eRYPSeFa.net

Slot
🍜🍜👻
💣💯🎴
💯🌸🍜
(LA: 0.55, 0.58, 0.53)

429
デフォルトの名無しさん[sage]   投稿日:2016/08/27 09:23:29  ID:4zJIWaih.net
>427
反抗するぬいぐるみが居るから、書きに来てるんだろ、って文書のつもりだったけど、眠くて誤字でわけわからん感じだな。すまん。

430
デフォルトの名無しさん[sage]   投稿日:2016/08/27 21:50:54  ID:T1cpNbqY.net(2)
よく分からんが反抗する側がバカにやり込められるのなら、
それはやり込められた側の方がもっと酷いんじゃないのか?

431
デフォルトの名無しさん[sage]   投稿日:2016/09/25 17:50:33  ID:Fmi0n6Ll.net(3)
Flashの仕組み全く知らないんだけどさ、Flashって高速再生出来るようにならないのかね?
以下知恵袋では「プレイヤーも自作」となっているので、
逆に言えばJavaScriptで高速プレイヤーを作成して入れ替えてしまえば可能なのか?
認証とかはさておき。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10160742165

具体的にはGyaoの動画を1.5-2倍速で再生したい。要求スペックは以下。
・個人的に使えればいい。つまりコマンド手打ちが必要でもいい。
・再生速度は固定でいい。つまり最初から1.5xか2xで固定、再生中の変更は必要ない。
・最悪バッファでもいい。つまり30分の動画なら15分バッファした後の2x再生でいい。
・ダウンロードすれば出来るのか?しかし面倒なので出来ればダイレクトで。

432
デフォルトの名無しさん[sage]   投稿日:2016/09/25 19:27:04  ID:r4NaSC4t.net
スクリプトでURI解析→ネットワークに対応した外部プレーヤで再生

433
デフォルトの名無しさん[sage]   投稿日:2016/09/25 21:06:19  ID:Fmi0n6Ll.net(3)
確かにそんなに難しく考える必要はないのかもね。
で、試してみたんだが、今のところ駄目だ。

データ取得先は当然あっさり分かる。
それをGOMプレイヤーに食わせてみた。
曰く、「ストリーミングサーバーが見つかりません」

ただGOMプレーヤー自体も滅多に使わないから、使い方が間違っているかも。
URLもこれでいいのかは謎だし。
なおAlquadeLiteも試したが、こちらは起動するもののFlashPlayerがクラッシュして駄目だった。

まあ何かあればよろしく。

434
デフォルトの名無しさん[sage]   投稿日:2016/09/25 23:14:29  ID:Fmi0n6Ll.net(3)
結局「GYAO動画ダウンローダJava」を使って高速再生は出来た。
ただし事前DLが必要だが、10倍速くらいでDL出来るので問題はない。

ただ正直ちょっと複雑だ。
こんなに簡単に出来るのなら公式で用意してくれよというのと、
意外に高速再生も快適ではないのでやっぱり用意する意味もないのかとも。

いずれにしても情報をくれた人はありがとう。

435
デフォルトの名無しさん[sage]   投稿日:2016/10/16 16:56:27  ID:u0ZoFejP.net
・「クライアントサイド」のJavaScriptでは、innerHTMLをエスケープ(サニタイズ)する必要ないのか?

サイトのJSON_APIがスクリプトタグを含む文字列を送ってきていて、
こちらのGreaseMonkeyスクリプトは今はそれをそのまま表示してしまっている。(見た目は消える)
これはXSS的に問題だと思っていたのだが、以下を見ると、またこちらでも試した限り、
divタグの中身等としてappendChild/insertBeforeする分には実行されないようだ。

> が!残念ながらこの場合はscriptは動きません。
> http://tech-blog.tsukaby.com/archives/894

とはいえ、見た目消えてしまうのでどのみち修正は必要なのだが、
XSSの脆弱性という意味での対策は必要ないということでいいのだろうか?

俺はJavaScriptの専門家ではない。
したがって情報は基本的に全てWebなのだが、例えば以下のように、

> 例えば、DOM Based XSSを発生させる典型的なコードの例として、
> 以下のようなinnerHTMLの使用があったとします。
> // ★★★脆弱なコードの例★★★
> var div = document.getElementById( "msg" );
> div.innerHTML = some_text; // 外部からコントロール可能な文字列
> http://www.atmarkit.co.jp/ait/articles/1312/17/news010_2.html

とあって、その後「ブラウザー上で」エスケープするなりcreateTextNodeをしているわけだが、
これって全くの間違いで、必要ないのだろうか?
(サーバーサイドならもちろん必要として、クライアントサイドなら問題なしでいいのか?
今のところ、筆者もこれらを混同しているように見える。
記事は2013/12と古いのだが、これ以降に仕様変更されたのか?
なお上記一つ目(動かないと書いている方)のブログは2015/04)

なお念のため再度言うが、「クライアントサイド」で「innerHTML」の場合。
「サーバーサイド」でもなく、「outerHTML」でもない。
コメント1件

436
デフォルトの名無しさん[sage]   投稿日:2016/10/17 00:31:40  ID:B8wMv80N.net
>435
script タグでなくとも イベントハンドラ( onxxxx = )で動作するコードを注入されたら危険だろう
コメント1件

437
デフォルトの名無しさん[sage]   投稿日:2016/10/17 01:16:39  ID:XzUmA52N.net
>436
ああ、確かにその通りだ。<img onload>とかね。
ではやはりエスケープしないといけないね。
なるほど、ありがとう。

438
デフォルトの名無しさん[sage]   投稿日:2016/10/18 13:06:11  ID:GiAjO0tK.net
ぶっちゃけいかなる脆弱性があったとしても、お金が関わるようなサイトでなければ関係ない
例えばある種のURLで飛ばされた時にXSS脆弱性があったとしても、
それは悪意のあるサイトから遷移したユーザーの責任。
それにCookieが抜かれようと変な表示がされようと何か致命的な問題になることはない。
いたずらレベル。

439
デフォルトの名無しさん[]   投稿日:2016/10/18 22:14:37  ID:8mVkPqez.net
それはその通りだし、神経質にやる気はない。
逆にそのためのブラウザの制限に辟易している状況だし。
とはいえ、JSON_APIの中身がtextなのかHTML文字列なのかは気にしておかないといけない。
その上で、どこまでやるかを各プロジェクト毎に決めればいいこと。

440
デフォルトの名無しさん[sage]   投稿日:2016/10/19 08:20:38  ID:pQsxuliv.net
そういうとこを気にするのは愚か
CSPを使い、それが通るように書けば良いだけ

441
デフォルトの名無しさん[sage]   投稿日:2016/11/21 01:56:59  ID:jF13U7nK.net(5)
IndexedDBのスループットが全く出ないんだが、誰か高速実装サンプルコードを知らないか?
URLくれると有り難い。

こちらの実装では、スクレイプ結果の9000ファイルを書き込むのに15-20分かかっている。
全体の容量は、IndexedDB格納済みで20MB程度、tarファイルだと30MB弱といったところ。
キャッシュ済みの状態なら再スクレイプには2-3分しかかからない。
これを<a download=xxx>でtarファイルにするのには数秒しかかからないが、(最後のダウンロードに数秒)
IndexedDBに全て書き込むには15-20分かかる。
この場合はスクレイプと同時に内部的にtarファイルを作成しており、
大半は再スクレイプの時間なので比較としては不適だが、5-10倍程度遅い。(A)
なおtarファイルの展開には2-3分かかるので、これとの比較でも5-10倍程度遅い。(B)

現状、ファイルに落とす場合はスクレイプの方が明らかに遅いので全く問題ないのだが、
IDBに格納する場合はスクレイプよりも遅いのでそこで詰まる。
といっても2倍も遅くはなく、またスクレイプ側は通常は90%以上idle状態なので
現実的には問題は発生しないはずだが、それにしても遅すぎる。

トランザクション等の機能は所詮CPU時間なので、何をやってもここまで遅くはならない。
(chromeの実装が酷くても、また俺の実装が酷くても)
上記ファイル時間(B)でも5-10倍遅いのは何かおかしい。

とはいえ使い方が悪い可能性も多々ある訳なのだが、
とりあえず高速実装サンプルコードがあれば比較出来るので助かります。

実装/実験の詳細は、上記の通り、9000ファイルをIDBに格納、全体で20MB程度、
objectStoreは多めで150個程度、その中に30-150個くらいのファイルがそれぞれ格納される。
トランザクションはオブジェクトストア毎に纏めており、
実際のトランザクションは40-80個程度で、大半は平行可能。(仕様としては)
一つのトランザクション内には20個ずつputを入れている。
(トランザクション単位でのロールバックなので今回は20個くらいが適当かと思っている)
ただしいかんせん書き込んでくれない。
何かヒントあればよろしく。
コメント1件

442
デフォルトの名無しさん[sage]   投稿日:2016/11/21 02:24:13  ID:xTCFhIWI.net(2)
またお前か。
なぜそんな事をブラウザでやるか、それもindexedDBになぜ入れるかわからんが、
インデックス貼り過ぎではないか、
WebWorkerやServiceWorker使わずに表スレッドでやってないか
くらいかな。
スクレイプの方がはやい、DBの方が遅い、と言っても、同時に走るわけでは無いよ、ネイティブの機能でない限り。

443
デフォルトの名無しさん[sage]   投稿日:2016/11/21 02:56:54  ID:jF13U7nK.net(5)
いや、表スレッドでやっているぞ。

ただそれは実際には問題になっているようには見えないが。
もちろん同期APIは使ってない。
つまり当然非同期だし、表スレッドで待つことはない。

> 同時に走るわけでは無い
あまりにスループットが低いのが気になっているわけだが、
確かにこの意味では「詰まる」事はあり得ないのも事実だな。

> インデックス貼り過ぎではないか
こちらはインデックスは使っていない。
インデックス使わないと超遅いとかいうのも見かけたが、
(覚えでは)3-4年前の記事だったし、取り下げていたのであてにならないと見たが、使わないと駄目か?
こちらはキーパス無し、キージェネ無し。外部キーを自前で供給している。
(要するにlocalStorageの容量増加版として使用している。ただし非同期だからどうにも使いにくいが。)
> データベースを構築する
> キーパス キージェネレータ
> https://developer.mozilla.org/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB

> なぜそんな事をブラウザでやるか
一番手軽だからだよ。ブラウズする時にはブラウザは必ず使う。
アーカイブ勝手に取れてれば楽でしょ。
別ソフト起動するのが面倒でない人はそうすればいい。

> indexedDB
ブラウザ側から「消せる」方が使い勝手がいいから。
なおファイルに落とす機能はもう完成済みで、サイトのミラーが勝手に構築出来るようになっている。
もちろん外部スクリプトでtarファイルを展開しなければならないが、これは仕様的に仕方ない。
IndexedDBはボロすぎて諦めていたんだが、微妙に使えそうになってきたので色気を出している。

というか俺はGreaseMonkeyだからね。サイトのスクリプトではないからあしからず。
コメント2件

444
デフォルトの名無しさん[sage]   投稿日:2016/11/21 04:59:18  ID:+MgjqZsm.net
愚直に1つずつ保存しようとするから愚直なパフォーマンスしかでない。
DBには圧縮ファイル1つしか保存しない。
利用するときは解凍してメモリ上で1つずつ読み書きする。
最後に圧縮して保存する。これで問題ない。
もしくはキャッシュ用に設計されたCacheStorageを使う。
コメント1件

445
デフォルトの名無しさん[sage]   投稿日:2016/11/21 08:17:47  ID:xTCFhIWI.net(2)
>443
だから、表スレッドでやるから遅いんよ。
同期APIでなくとも、常に一本しか走らん。

インデックス使わないと中身探すのに全舐めだよ。
もし、挿入でなくupdateしてるなら絶対に必要。これはライブラリとか使ってなくて手で書いてたら気づいてると思うけど。

アーカイブは普通、拡張書いてそこからDOM舐めて、http通信でサーバに送ったりindexedDBに保存したりファイルにしたりする。
グリモンのスクリプトでもあんま変わらん。
コメント1件

446
デフォルトの名無しさん[sage]   投稿日:2016/11/21 15:43:00  ID:LVMdN4w/.net
とりあえず必要最小限のコードを全部提示しろ

447
デフォルトの名無しさん[sage]   投稿日:2016/11/21 23:45:11  ID:jF13U7nK.net(5)
すまん解決したかも。

詳細を投稿しようとしたが何故かNGワード規制なので細切れで試す。

448
デフォルトの名無しさん[sage]   投稿日:2016/11/21 23:46:56  ID:jF13U7nK.net(5)
俺はIDBTransaction.oncomplete内でdb.close()していたのだが、
以下ではIDBRequest.onsuccess内でやっており、
//nparashuram.com/IndexedDB/perf/#Transaction based on Write
それってありか?ということでMDNを確認した結果、MDNでもそうなので
https://developer.mozilla.org/ja/docs/Web/API/IDBDatabase/close
パッチして味見した結果、とりあえず倍くらいにはなった。

それでもまだ遅いが、今は安定して動く状態ではないので詳細は確認出来ない。
本修正して安定動作させ、まだ遅いようならもう一度投稿する。
ちなみにコード自体は上記上側と似たようなもの。ただしoncompleteを使っていた。
コメント1件

449
デフォルトの名無しさん[sage]   投稿日:2016/11/21 23:47:37  ID:jF13U7nK.net(5)
上記一つ目、httpが引っかかったようだ。脳内補完よろしく。

450
デフォルトの名無しさん[sage]   投稿日:2016/11/22 01:12:38  ID:62WBcce4.net
>448
あのさあ。
なんで強引にそうむりやり解決するのかわからん。
db.close使うことなんかほとんど無くねえか?
当たり前のようにonsuccessでトランザクションcommitするだけじゃねえの?

ずーっと偉そうだけど、脳筋が知恵の輪を強引にバラしてドヤ顔してるように見えて仕方ない。
ラグビー部員かゴリラレベルだよ、それ。

451
デフォルトの名無しさん[sage]   投稿日:2016/11/22 23:13:11  ID:bRc12BV/.net(4)
oncomplete->onsuccessについては失敗した。
これは積み込みが早くなる(見た目終わったように見える)だけであって、
スループットは変わってない。
db.open->db.close間の時間を計測していたので間違えた。

意味としては並行トランザクションの数を増やせば同じだし、実際そんな感じだ。
onsuccessでやると他情報のライフタイムがずれるので、話が面倒になっただけだった。

452
デフォルトの名無しさん[sage]   投稿日:2016/11/22 23:23:12  ID:bRc12BV/.net(4)
>444
いや愚直なパフォーマンスでいいんだが、それすら出てないから問題視しているわけで。
ファイルと等速かやや遅いくらいなら十分なんだが。

圧縮展開を自前でやるのはさすがに面倒だ。
というかそれが常に成り立つならその機能ごと組み込んでおけという話だし、
実際そうなっている感触だ。
だからバグ対策でなければ自前でわざわざやる意味はないはず。

IndexedDBに関しては、基本的には「キー」となるものを「全体を一覧」出来る場所に保存して、
「本体」への参照をそれに持たせればよいだけだから、
ちゃんと実装してあれば大型ファイルへのアクセスはほぼファイルと等速になる。
だからFireFoxがFileSystemAPIを実装しない理由も妥当なのだが、
全然そうなってないからあれ?ってことで。(まだchromeでしか試してないが)
キャッシュ用に設計されている場合も
大型ファイル本体へのアクセス速度は上記の通り大して変わらないはず。
ただIndexedDBのようなインデックス検索が必要ないからその分速いが、
今はそこが見えるほどの状況になっていない。

ちなみに後述するが読み出しは速い。
(絶対的に速いかは未確認だが、書き込みと比べて50倍速い)

453
デフォルトの名無しさん[sage]   投稿日:2016/11/22 23:24:53  ID:bRc12BV/.net(4)
>445
いやIndexedDBは基本的に別スレッドで実行される。
いちいち "in a separate thread" って書いてあるだろ。
俺は使ったこと無いが多分Nodeと同じ。
> https://developer.mozilla.org/ja/docs/Web/API/IDBObjectStore

ちなみにプロファイラーで確認したが、表スレッドは完全に遊んでいる。
60秒間で100ms程度動いていて、他はアイドル。
OS上のCPUメーターでも遊んでいるし、いずれにしてもCPUがらみで引っかかっている感じではない。
ただ、I/Oで引っかかるなら普通のファイルと同速になるはずなのだが、これがないから不思議に思っている。

> インデックス使わないと中身探すのに全舐めだよ。
> もし、挿入でなくupdateしてるなら絶対に必要。これはライブラリとか使ってなくて手で書いてたら気づいてると思うけど。
これはないよ。
普通にIndexedDBを実装する場合、外部キーもインデックスとして実装するでしょ。
今は更地(データベースそのものの構築、onupgradeneeded でバージョン1)から始めて9000ファイル書いている。
全舐めの問題なら1000個目のファイルと9000個目のファイルで9倍速度が落ちるはずだけど、それは全くない。
先にも言ったがインデックス検索はCPU時間(usオーダー)の話だ。
実際にそこも遅いのかも知れないが、今はそこが遅くても見えないほど他が遅い。

なおリードと勘違いしているのなら、今問題になっているのはライトだけ。
後述するが、リードはとりあえず十分な速度が出ている。
ちなみにIDBCursor.update()は使っていない。俺が使っているのはIDBObjectStore.put()。

454
デフォルトの名無しさん[sage]   投稿日:2016/11/22 23:34:52  ID:bRc12BV/.net(4)
一応パラメータ振ってみたが、
トランザクションの数を絞る(40->2)と目に見えて遅くなるので、並列はしているっぽい。
ただし増やしても速度は上がらない。
一つのトランザクション内のput数を増やしても明確な速度変化は見られない。(20->20-200)

問題点を整理すると、
・I/O律速ならファイルと同等程度になるはずだが、5-10倍遅い。(ライトだけ)
・CPU律速ではないように見える。CPUは空きまくり、スレッドもほぼ全てアイドル時間。
で、何が引っかかってこんなに遅いの?という話。
ちなみに読み出しは十分速く、IndexedDBの中身を丸ごとtarファイルにして出力するのに10秒程度。
格納に20分かかるのに、読み出しには10秒しかかからない。
(読み出しに10秒=中身を読みだしてtarファイルをblobとして作成するまでに10秒、
その後ダウンロードする時にさらに10秒かかる)
このtarファイルを7-Zipで更地に展開するには25秒。
cygwinで既にあるファイルシステムに上書き展開するのには2-3分かかった。(これが前の話)
格納だけ異常に遅いんだが、これって何?
単純比較するとリードと比べてライトが45-120倍遅い。

ただまあwriteが遅いのは事実のようだが、ここにあるように50k records for 10 sec ならいいんだが。
http://stackoverflow.com/questions/22577199/indexeddb-access-speed-and...

記事は古いがここ見る限り駄目なことはやってなさそう。
http://blog.nparashuram.com/2013/04/indexeddb-performance-comparisons-par...

既に書いたとおり、コードはここと似たようなものだが、oncompleteを使っている。
http://nparashuram.com/IndexedDB/perf/#Transaction based on Write

とはいえライトだけ50倍遅いのは俺の使い方に問題があるのだろう。
実装が如何にボロくてもここまでにはならないし。
というわけで高速書き込みのサンプルコードがあればURLよろしく。

455
デフォルトの名無しさん[sage]   投稿日:2016/11/23 00:39:24  ID:Bkme+Kby.net
もう出来てる、だがなんだか知らんが、それ捨てたほうが良いとおもうわ。
普通はこう言うのオフラインモード持ったプロキシとして作る。

456
デフォルトの名無しさん[sage]   投稿日:2016/11/23 23:07:06  ID:V62ycJbx.net
とりあえず自力で辿り着けそうな雰囲気になってきた。
速いコードを見つけた、というかMDNのそのままをコピペしてコンソールで試したら十分速かった。
確実にこちらのコードに何か原因があるのだろう。
もし調べてくれてたらありがとう。

457
デフォルトの名無しさん[sage]   投稿日:2016/11/24 15:10:21  ID:Mx4OpUDM.net
健全でない言葉が含まれているため表示しません 内容を確認する

458
デフォルトの名無しさん[sage]   投稿日:2016/11/24 16:54:40  ID:HdRBGkCM.net
なんともならんよなぁ。
何故クローム拡張を作らんか(jsで書けるし、妥当な保存方法だし、クロスドメインで苦労しなくても良いし、もし配布を気にしてるならzipでも蒔ける)
色んな疑問が湧く。

要は、ロスカット出来ない類の奴なんだと思うよ。
今まで掛けた工数が惜しいとか、自分が未熟だと認めるのが悔しい、とか、
自分は一番良い方法を考えてて、その中で「ちょっとだけドキュメントが未熟だから」実現方法が分からない事を聞いてるだけなのになんだこいつら、とか。
ベンチャーか中小企業の社長に居そうな奴。
5年目か10年目に破産する類の。
コメント1件

459
デフォルトの名無しさん[sage]   投稿日:2016/11/25 00:21:37  ID:9S7zID8/.net(7)
こちらは解決しつつある。今はテスト中だ。前と同様にとちっているかもしれないが。
とはいえ、俺はお前らが何でそこまで自信過剰なのかさっぱり分からない。

5-10年目に破産したベンチャーの社長を笑えるのは、
ベンチャーを起こして10年以上持たせた奴だけだぞ。
お前らがそうだとは到底思えない。
そんなんだからゆとりは意識高い系()とか言われるんだよ。
意識高いだけで中身がないからウザイだけ。
まあお前らに付ける薬もないのも事実だが。
俺に付ける薬もないのと同様にね。

お前ら、OSSに参加もしてないだろ。
よくもまあそれで、としか思えないけどね。
コメント3件

460
デフォルトの名無しさん[sage]   投稿日:2016/11/25 00:52:34  ID:SsHeBd9H.net
>459
メンテナしてるけどそれが何か、って話な位で、得意になるもんでも無いんじゃ?
参加とやらの程度にもよるけど、ある程度やってりゃ、プルリクくらい普通に出せるだろ。
コミッタって関わるにあたって特別な事なんもしてないと思うけど。
リポジトリ晒せと言われたら色んなものが傷つくからやらんが。

「お前らがそうとは到底思えない」
「してないだろ」
「よくもまあそれで」
ってまぁ意識たけえなぁ。
ベンチャー起こして10年も持たさんで良いだろ。
まともな会社でそれなりに勤めて、何度か転職して、それなりの立場にいる方が余程視野が広がるよ。
少なくとも金の算段を必要以上にせんで良いからな。

大→中堅→ベンチャー→大と転職して色んな良いところ悪いところ見てきたからわかるが、お前は悪いところの総和みたいな姿しとるよ。
コメント1件

461
デフォルトの名無しさん[sage]   投稿日:2016/11/25 01:07:59  ID:bE83eHTG.net
一人が自信満々なのを否定するのと大多数が自信満々なのを否定するのは意味が違うからな

462
デフォルトの名無しさん[sage]   投稿日:2016/11/25 01:21:08  ID:9S7zID8/.net(7)
>460
お前がそれならそれでいいよとしか言いようがない。
それがWeb系といわれる所以だろうし。
別に俺はお前に評価される必要なんてないし。

OSS云々ってのは、明らかにお前らは距離感がおかしいからだ。
OSSやってる連中は、限られたリソース(時間と金)の中でやりくりしている。
各自が今現在の状況で最大の効果が出るように考えている。
もちろん制約条件がそれぞれ異なるので、
君にとっての今の最適解が俺にとっての今の最適解でないこともよくある。逆も然り。
だけどそれはそういうものだから、いちいち文句は言わないし、言われない。
文句があるならお前がやれ、方針が違うならフォークしろ、の世界であるし。

だからお前らみたいな「俺の提案が神だからそれ以外は認めない」はないんだよ。
君は参加しているつもりになっているだけで、実際は観戦しているだけだよ。
参戦していない。
コメント1件

463
デフォルトの名無しさん[sage]   投稿日:2016/11/25 01:22:21  ID:9S7zID8/.net(7)
ただまあそれ以前に俺はお前らの提案がいいとも思わないけどね。
いちいち反論した方がいいのか?ならば言ってみてもいいが、
余りこんなのをやってもお互いに意味はないんだよ。
どうにもお前らはこういうのが好きなようだが。

>458
CacheStorageはhttps縛りだから使えない。
クローム拡張にしない理由は、FireFoxもサポート対象だから。
並行して2つのソースを管理するほどリソースはない。GreaseMonkeyなら一つのソースで済む。
ここら辺は要するに楽な方をとっているだけ。
クロスドメインについてはGreaseMonkeyは独自拡張を持っていてスルー出来る。
配布なら苦労してない。
GreaseMonkey導入後の環境ならuser.jsリンクをクリックすればインストールされる。
zipすら要らない。リンク一つで済む。
掛けた工数云々は関係ない。
未来の工数も踏まえた上で、今現在の最善手を選んでいるだけ。
これは俺以外のOSSに関わる連中全員そのはずだが。
上記の通り、今現在何も問題ないし、移行のメリットもないのにするわけないだろ。
IndexedDBと同様、chrome拡張にもどんな落とし穴があるかも分からないわけだし。

これで満足か?
何でお前らがこんな点ばかりににこだわるのか俺はよく分からないが。
コメント1件

464
デフォルトの名無しさん[sage]   投稿日:2016/11/25 08:31:00  ID:QZ3DaKSR.net(3)
>462
評価される必要はないのに、相手を下げて自分を高めようとえらく必死だな。

限られたリソースは現実であって、目指すべきものはそのリソースに縛られたものにすべきじゃない。
俺には手一杯だからとか、この部分俺あんまり強くないから、とかは、放置するんじゃなくて、明言する。
どんどんマサカリ投げて、どんどんプルリク投げて欲しくて、画像貼らせてほしい。
誰かのリソースが足りないのなら、そう書いて、他の誰かのリソースの援助を求めるべきなんよ。
リソースが足りてないから制約条件になります、はおかしいし、ここまで物言いがついたら、最適条件がなぜ最適条件なのか、くらいからもう一回ゆっくり考えるべき。
ソクラテスのいじめまがいの問答をもってでもやるべき。

「俺の提案が神だからそれ以外は認めない」?
俺はそんな事は言ってないが。
むしろ、お前がずーっと言ってる事じゃねえの?

>463
httpsなんかなんとでもなるだろ。letsencryptもあるし、イントラなら証明書配れば良い。
並行して管理するのは画面周りで良いので、実際の管理工数は1.3倍程度になる。きっちり画面とロジックの設計をしてれば。
なら、むしろグリモン縛りなら、グリモンでプロキシ書いたらいかんのか?
あと、データは普通に、indexedDB使わんと、ファイルに書けんじゃん。
そのアーカイブとやらをBase64にして、前後にvar tmp=""つけてjsとして書き出して、選んで@requireで読み込むだけで良いんだが、なんかindexedDBの出番ある?
それこそインデックスだと思うけどね。
コメント2件

465
デフォルトの名無しさん[sage]   投稿日:2016/11/25 08:34:29  ID:PtU3UTK5.net
いつも思うが、ここの質問者は複雑な背景がある質問をソースコードを出さずに質問するのは何故だ?
代替案が提案されるのは情報が出そろってないから
初めから全ての情報を出せばこんなことにはならない
アドバイスした人や否定意見を「お前等は分かってない」で一蹴してさんざん馬鹿にした上で去るのが常
お前が情報を出さないのが全ての原因
コメント2件

466
デフォルトの名無しさん[sage]   投稿日:2016/11/25 08:47:16  ID:QZ3DaKSR.net(3)
>465
賢いつもりで、文句言ってくるやつは愚鈍だと言いたいんだろう。
そもそも相手を愚鈍にしておきたいから、ソース出さないんだと思うけどね。
俺なら早めに自分のリポジトリの上げて、声出して、便利そうだけどここで使い物にならんので、置いとく、とかやる。
個人の持ち物なら。
仕事や金儲けでやってたら、人の話聞かないと大怪我するのはわかってるしな。

467
デフォルトの名無しさん[sage]   投稿日:2016/11/25 09:05:01  ID:cmXQyT89.net
いいんだよもう。
本当に心底困ってて、礼儀正しく質問してくる奴なんて幻なのだから。
俺すげーしたいやつ、ただここでアピールすることで興奮し、
不安を取り除いてやる気を出そうとするやつの話を聞いてやるのもこのスレの役目。

468
デフォルトの名無しさん[sage]   投稿日:2016/11/25 12:43:41  ID:QZ3DaKSR.net(3)
まぁ、拡張もクリック一つなんだけどね。
それが現状ベスト、ではなくて、それしか使えない、って白状すりゃいいのに、プライドの高いやつだなぁ。

469
デフォルトの名無しさん[sage]   投稿日:2016/11/25 13:19:56  ID:1PQbLaAu.net
自分は万全に良く知ってて良く考えてると思ってるけど、
技術が圧倒的に足りないのもあってうまいこと行かず、
もやもやしたフラストレーションが溜まってるんでしょう。

要するに何か具体的に解決したいのではなくスッキリしたいだけ。
まあそれは結局自らの問題だから他人に言っても仕方ないんだけどね。

470
デフォルトの名無しさん[sage]   投稿日:2016/11/25 22:05:14  ID:9S7zID8/.net(7)
お前らがそういうことにしたいのならそれでいいけども、
お前らのレベルの低さは他言語スレ見たらすぐ分かると思うんだが。

とはいえWeb系()に付ける薬はないのは分かった。
そしてこの言葉が広まっているのはつまり皆が同感するからであり、
それを俺が何とかしようとしても、所詮俺如きではどうにもならないのも分かった。

まあせいぜいポストゆとりに殺されてくれ。

471
デフォルトの名無しさん[sage]   投稿日:2016/11/25 22:06:17  ID:9S7zID8/.net(7)
>465
ここでのこういうやりとりは無駄であって、
その時間をソースコード開発に回すべきだと思っているから。
ここに晒したらいちいち反応しなければならなくなるだろ。
それは時間の無駄だ。結局今回も自力で辿り着いてしまったし。

俺も結局は最善手を選んでいるだけ。
ここでコードを晒して時間を浪費するよりは、
何か情報があればラッキー程度として、基本的に自力で解決することに賭けた。
これまでのやりとりを見る限り、君達には俺のコードは読めないし、解決する能力もない。
だからせいぜいサンプルコード発掘くらいだと思ってそうした。
書き込み速度のオーダーを知っていればその点の即答もあるかと思ったが、それもないし。
おそらく君らは俺がやっているほど負荷掛けた使い方をしていない。だから何も知らない。
オススメのCacheStorageのスループットも知らないだろ?要するに君らはその程度なんだよ。
それで何でそこまで自信過剰なのか俺には分からないのだが。
(俺もそれを知らないから俺が大したこと無いのももちろん事実だが、
君らも大したことはないんだよ、それを自覚しないといけない)

そもそも代替案なんて必要なかった。
もう対策は出来ていて、十分な速度は出ている。(以前と比べて50倍速以上)
本来あるべき回答は「その書き込み速度は明らかに遅すぎるから、お前のコードに問題がある」だった。
ただ君らは本来の書き込み速度自体を知らないから、これに答えられず、
「遅いのなら違う方法を試せ」という間違った回答をよこし、それを正解にしようとしている。
色々明らかにずれているんだよ。
コメント3件

472
デフォルトの名無しさん[sage]   投稿日:2016/11/25 22:07:04  ID:9S7zID8/.net(7)
とはいえここら辺のずれもこれまでどおりだから、
俺は君らからでも有効回答が得られる可能性を残しつつ、
無駄に巻き込まれないように出す情報も絞ってある。
それだけ。
ただ、やっぱり難癖付けられて巻き込まれてはいるが。
前も言ったが、こっちもどこまで出せばどれくらいの精度が期待出来るかは分かるから、
こちらが出していない部分については当然回答がないということで全く問題ないんだよ。
出している範囲で明らかにおかしければ指摘して欲しいし、問題ないならスルーでいい。
ただ今回は出している範囲でも明らかにおかしいのに誰も指摘出来てないだろ。
そしてさらにおかしな回答をよこしてそれを正しいと主張している。
お前らがそれで仕事しているらしいからWeb系()って怖いわ。

なお君は465=444か?
だったら俺は君の回答には不満はない。知っている範囲で答えた良い回答だ。
知らない奴が間違った主張をするからおかしな事になるわけであってね。
ただなんか知らんがJavaScriptの連中はこういうのが多いが。

473
デフォルトの名無しさん[sage]   投稿日:2016/11/25 22:36:44  ID:TwCdHdIi.net
うーん、やっぱり、何かおかしいわ。

開発って長くやってりゃわかるけど、コード睨んでるより、飯食って風呂入って嫁とゴロゴロしてる時くらいに謎の天啓で解けるようなもんで、
ソースコード自体は「こう書く」と決めてから、ガーッと書いて半日位で終わるんだよなぁ。

ゴリラの知恵の輪見て、「お、解けてる、ゴールに辿り着いたな」と思うのは仏くらいだろ。

そのスループット、は背景がわからないと答えられないんよね。
グリモンでもバージョンによって違うし。
遅いなら違う方法試せ、は要は、「情報が足りなすぎてわからん。自分でやってみろよ」の糖衣文だろ。

やってるほど負荷をかけてない、って当たり前よ。
密航船の奴隷でもあるまいし。
普通は人数と航路に対して適切な船を選ぶか、船に対して適切な航路と人数を選ぶもんだ。

絞ったものには、絞ったなりの答えしか来ないよ。

WebはWeb屋、俺はイントラ屋と思ってるおっさんでも思うんだから、お前が馬鹿にしてる新進気鋭のWeb屋さんならもっとキツめに思うと思うよ。

少なくとも俺はそれはブラウザではやらん。
コメント1件

474
デフォルトの名無しさん[sage]   投稿日:2016/11/25 23:59:05  ID:9S7zID8/.net(7)
お前も話をすり替えるのな。それもWeb系()の悪い癖だわ。
多分すぐに「ポストゆとりの新進気鋭のWeb屋」に駆逐されるよ。
俺の知ったことではないが。

475
デフォルトの名無しさん[sage]   投稿日:2016/11/26 00:52:43  ID:9lTBiZ7O.net(3)
すり替えられた、何か攻撃されてる、それはWeb系()だからだ、と保身で揶揄してるままだと、それこそ新進気鋭に駆逐されるよ。
合理的だからね、彼らは。
最後から二つ目の段落に書いてあることも読めないくらいだから仕方ないけど。

476
デフォルトの名無しさん[sage]   投稿日:2016/11/26 01:30:19  ID:S6y++TVv.net
もしかして理解できない事はどれだけ喩えて言われてもすり替えられてると思ってるのかな

477
デフォルトの名無しさん[sage]   投稿日:2016/11/26 02:26:09  ID:bM77xh/N.net
>471
お前が自分の都合しか考えない自己中な奴だという事が分かっただけだな
お前が情報を開示しない事で、他人がお前の状況を正確に把握できず、お前の求める答えが無ければ情報を後出しして非難するわけだ

お前と同じ環境を揃えなければ再現する事は不可能だ
仮に俺の環境で検証したとしても後出しでいろいろと情報を付け足して否定するのは目に見えている
再現性が限りなく低いと分かっている問題に時間をかける奴はいない
「君達には俺のコードは読めないし、解決する能力もない」といってるが、実際にはお前の説明能力の問題

478
デフォルトの名無しさん[sage]   投稿日:2016/11/26 05:01:06  ID:RLAnsqoN.net(2)
そもそも解決して頂こう、その努力をしようと思っていないしな。
こいつは人様を一体何だと思ってるんだ?
技術者として以前に人間として下手くそな奴だな。

479
デフォルトの名無しさん[sage]   投稿日:2016/11/26 11:38:59  ID:EHtLgt8W.net(3)
相変わらずゆとりの言い訳ばかり。本当にお前らどうしようもないな。
そうやって自己正当化ばかりしているからゆとりのままなんだよ。
まあそれをやり続けて数年後に死ねばいいと思うよ。

情報は後出ししてない。
最初の投稿>441の時点で異常に遅いと分かるし、指摘出来る。
もちろん俺も異常に遅いと感じたから色々確かめていた。
とはいえコード自体は特に問題なさそうだったし、
そもそも俺はIndexedDBを初めて使うから速度のオーダーが分かってなかった。
だから聞いた。結果、誰も知らず、50倍遅いのを誰も見抜けなかっただけ。

結局お前らの実力ってその程度って事だよ。これは事実だよ。
他言語で50倍も遅いのに気づかないようだと殺される。
もちろん初心者ならいいけど、お前ら初心者じゃないつもりなんでしょ。
俺はそこら辺の勘違いを直せと言ってるんだよ。

とはいえ全く聞く耳持たないようだし、多分Web系()と言われる理由はそこなのだろう。
おそらく俺も他言語の技術者が既にやってきた指摘を繰り返しているだけ。
お前らがムキになって俺を悪者に仕立てるのもよく分からんが、そうしたければそうすればいい。
そんなことをしてもお前らの実力があることにはならない。

数年後にポストゆとりに殺されるか、
JavaScriptがもっとメジャーになって他言語の上級者が流入してきてお前らのゴミっぷりがばれて殺されるか。
あるいはWeb系()は今のままで低空飛行を続けられるか。
まあ俺の知ったことではないが。

480
デフォルトの名無しさん[sage]   投稿日:2016/11/26 19:29:29  ID:RLAnsqoN.net(2)
言ってることが無茶苦茶
ユーザースクリプトがワンクリックなんちゃらとか
拡張機能でもワンクリックで更新できますが?
そういった事が山ほどある
もう働きたくないでござる!働きたくないでござる!と言ってるようにしか見えない。

それとなんか、自分の正当性をペラペラ喋りまくることが正義だと思ってみたいだけど大間違い。
この世の正義とは、可愛げ・真摯さ・悪どさであって、
本当にひたむきに取り組むかは別にして、相手の意見を組んだことを示さなきゃ、
あれも嫌、これも嫌、じゃ最悪

お母ちゃんに駄々をこねる思春期少年のような態度を示されても困る
情報の後出し云々以前の問題
人間としてまともにコミュニケーション取れるようになってから来いよな
ほんと

481
デフォルトの名無しさん[sage]   投稿日:2016/11/26 20:26:02  ID:9lTBiZ7O.net(3)
説明力0だしな。
でかいファイルの更新、は、遅いよ。
levelDBの実装見りゃわかる。

482
デフォルトの名無しさん[sage]   投稿日:2016/11/26 22:27:36  ID:EHtLgt8W.net(3)
JavaScriptの環境にも色々問題があるのだけど、
お前らが上達してない最大の原因はお前らの人格だよ。
しかもそれを認めないと来てる。ゆとりは嫌われて当然だよ。
技術的なことは技術的に判断しないといけない。

>473
一応言っておくけどお前もWeb系()以外の何者でもないよ。
50倍遅いコードを擁護するなんて他言語ではあり得ないから。
それを見抜けない奴を擁護することもね。

いや、正確に言えば、Web系ではサーバーサイドの連中も含まれてしまうので申し訳ない。
駄目なのは「ゆとりJavaScripter」と「その取り巻き」だね。

サーバーサイドでは処理性能が鯖コストに直結する為、50倍なんて当然認められない。
俺が遭遇したケースだと、Goの奴に「そんなところでString.replace使ってんじゃねーよ。
forで回して変換しろ」と言われたことがある。まあ正直、勘弁してくれよと思ったが。
フルスタック()とか言っているらしいけど、
俺が見る限りPHPの連中はお前らよりマシっぽいし、上記の通り環境もキツいので鍛えられる。
ポストゆとりを待つまでもなく、PHPerがフルスタック化すればお前らは殺されるよ。
まあPHPerには別の問題があるのかもしれないし、それも含めて俺の知ったことではないが。
コメント1件

483
デフォルトの名無しさん[sage]   投稿日:2016/11/26 23:21:05  ID:9lTBiZ7O.net(3)
>482
なんだそりゃ。
鯖とかフルスタックの話するとなると、はっきり言って、

「使うべきでないものは最初から使わない」
に行き着くべきなんだが。

そんな事をするぐらいなら、札束でAWSのインスタンスをガンガン起こすSIerの発想の方がまだ正しいよ。
万能ナイフでビーフシチューは、作れないことも無いけど、作るべきじゃない。
その程度の次元の話。
あと、これはすり替えではなくて、無能に説明してる比喩表現だからね。
コメント1件

484
デフォルトの名無しさん[sage]   投稿日:2016/11/26 23:42:25  ID:EHtLgt8W.net(3)
>483
お前は文脈が読めてないな。
JavaScriptの前に日本語を勉強した方がいい。

それと、
> 「使うべきでないものは最初から使わない」
に関しては俺も同意だが、そんなに議論したいのなら、>464の馬鹿を何とかしろ。
CacheStorageを無理に使いたいからletesencryptを使ってサーバ絡ませて@require?
GreaseMonkeyでIndexedDBを直接扱えばそれで終わる話で、何でそんなことになるわけよ?
としか思えなかったが、人格に至らない点があるらしい俺からでは説得は無理だ。
素晴らしい人格と説明能力の持ち主である君から是非彼を説得してくれ。
コメント1件

485
デフォルトの名無しさん[sage]   投稿日:2016/11/27 01:20:07  ID:bBkWJjxZ.net(7)
>484
あのさぁ。抗う言葉が無くなってきたからといって、それはなかろう。
全然同意してないじゃん。
してるならそのソース捨てなよ…。

文脈を読ませるのはお前の仕事だ。
逆に、書いてあることを書いてある通りに読み、書いてない事を読まないのもお前の仕事だ。

IndexedDBなんか使うな、と言っとろうが。464でも。CacheStroageを使えとも言ってない。

適当にファイルに落とせば?って言ってんの。
それしたいなら、拡張で書くか、プロキシとして実装しろ、と。

何で相手がお前以下だと、お前の発想を単に否定しているだけだと思いこむの?
モヒカンなの?
コメント1件

486
デフォルトの名無しさん[sage]   投稿日:2016/11/27 01:52:00  ID:sEFEgE7T.net(3)
>485
ファイルに落とす機能はもう既にあって、動いていると>443で言ってるだろ。
お前は本当に日本語が不自由な奴だな。

大体IndexedDBなんてただのストレージなんだし、どう使おうが問題ないだろ。
お前ら何で駄目だと思いこんでるんだ?
コメント1件

487
デフォルトの名無しさん[sage]   投稿日:2016/11/27 02:10:05  ID:F1aOp1KR.net
ID:EHtLgt8W
この人、「お前ら」と一括りにして反論する癖があるのね
選民意識の強い人と言うべきか
この人の場合は「自分」と「自分以外」で選民している感が強い
全能感も強くてコミュニケーション能力に問題がある感じ
コメント1件

488
デフォルトの名無しさん[sage]   投稿日:2016/11/27 02:17:18  ID:bBkWJjxZ.net(7)
>486
日本語が不自由とか自己紹介良いよほんと。

外部スクリプトで展開、とかアホな事言ってんじゃん。
なんでそれ直接読めるような鯖かかんの?って疑問。
そうすりゃ解決すんのに。

ただのストレージではないし、どう使っても問題ないものでは無い。
indexでアクセス出来る、indexが昇順で並んでいる、サブインデックスも張れる、本来はバイナリを入れるためのものでは無いものだよ。
だから、万能ナイフとかそういう喩えで話してんじゃん。
やろうと思ったら出来るけど、それやるくらいなら別のやり方するって言ってんの。

>487
きれいな言葉で包んでやらんでも良かろう。
ただの自己愛性人格障害でしょ。
コメント1件

489
デフォルトの名無しさん[sage]   投稿日:2016/11/27 02:53:05  ID:fRnX9irD.net
誇大性(空想または行動における)、賛美されたい欲求、共感の欠如の広範な様式で、成人期早期までに始まり、種々の状況で明らかになる。以下のうち5つ(またはそれ以上)によって示される。

自分が重要であるという誇大な感覚(例:業績や才能を誇張する、十分な業績がないにもかかわらず優れていると認められることを期待する)
>>全レス
限りない成功、権力、才気、美しさ、あるいは理想的な愛の空想にとらわれている。
>>概ね全レス
自分が “特別” であり、独特であり、他の特別なまたは地位の高い人達(または団体)だけが理解しうる、または関係があるべきだ、と信じている。
>459 OSS発言、
過剰な賛美を求める。

特権意識(つまり、特別有利な取り計らい、または自分が期待すれば相手が自動的に従うことを理由もなく期待する)
>471-472
対人関係で相手を不当に利用する(すなわち、自分自身の目的を達成するために他人を利用する)。
>471-472
共感の欠如:他人の気持ちおよび欲求を認識しようとしない、またはそれに気としない。
>>全レス
しばしば他人に嫉妬する、または他人が自分に嫉妬していると思い込む。
>459 意識高いだけ云々
尊大で傲慢な行動、または態度
>>全レス

フルビットで通院案件

490
デフォルトの名無しさん[sage]   投稿日:2016/11/27 05:35:11  ID:mveO+vV3.net
人にケチ付ける前に自分のレスを見直した方がいい。
「IDBで一般的にこういうコードのケースで思ったようにパフォーマンスが出ないんだが」
この一言で済む話。
他は全て、私は怠惰です、短気です、プライドが高いです、とアピールしているようなもの。

もし一生懸命自分の中でやり尽くしたと思うのなら、
尚更一般的な話に落とし込んで問題提起しなくちゃ。

自尊心は、そういう前向きな回転を生み出すことで保つべきで、
自己肯定や他者否定に縋っちゃ駄目。
もっと頑張らなくちゃ。

491
デフォルトの名無しさん[sage]   投稿日:2016/11/27 10:33:33  ID:sEFEgE7T.net(3)
>488
いやただのストレージだよ。
FireFoxは「FileSystemAPIなんて要らない。だってIndexedDBで事足りる」という立場だ。
当たり前だがこれは「FileSystemAPIの代わりにIndexedDBを使うことに何の問題もない」という意味だよ。
少なくとも彼等はそう思っている。
(俺はOSから透過のFileSystemAPIがあった方がいいと思っている)
Blobの格納も出来るようになってるだろ。
もっとも、駄目ならBase64使う奴もいただろうし、それも選択肢だよ。
インデックスも貼れるけど、使わなくても何も問題ない。
とはいえこれらには合意する必要はない。
俺のプロジェクトは俺が方針を決めるし、君のプロジェクトでは君が方針を決めるだけのことだ。

次の質問に移ろう。
何故君はそんなに教科書的使い方にこだわるのか?

IndexedDBはインデックスを使ってアスキーを入れないといけない?何故?
俺は装備を見比べて使えそうな物を使っているだけ。具体的には
IndexedDB, CacheStorage, FileSystemAPIの中で一番マシなIndexedDBを使おうとしているだけ。

> なんでそれ直接読めるような鯖かかんの?って疑問。
サーバに関しては完全に俺の管轄外だ。
ガチの勝手スクリプトだから、こちらの要求は基本的に通らない。
コメント1件

492
デフォルトの名無しさん[sage]   投稿日:2016/11/27 12:34:58  ID:bBkWJjxZ.net(7)
>491
彼らって誰?
Blobが格納できるようになったのは、中期以降。
しかも、そんな一つあたりが大きいデータの為じゃない。
これは、LevelDB見てくりゃわかること。

貼らなくても問題ないことはないよ。キーっていうインデックスは出てくるわけだし、sortedなので、そのキーに長くてソートが不要なものは使うべきじゃない。

俺のプロジェクトだから、俺が決める、なんて言っちゃうなら、OSS発言は取り消しといてね。
対極の発想だから。それ。

教科書的な使い方にこだわってるんじゃないよ。
実装見て、それは遣い方が悪いってものに対して、おかしいよって言ってる。

管轄外ってなんだそりゃ。フルスタックじゃねえの?(笑)
は、置いといて。

単純に、Clientで動かすプロキシ書けばいいんだよ。
特定のURLの場合、ネットワークで取得せずファイルから見るような。

493
デフォルトの名無しさん[sage]   投稿日:2016/11/27 12:45:45  ID:bBkWJjxZ.net(7)
もしかして、鯖って書いたらサーバー側で動かすもの想像してたのかな。
こいつのフルスタックって何なんだ。

494
デフォルトの名無しさん[sage]   投稿日:2016/11/27 12:54:03  ID:x2gPA/Jh.net
無知と怠慢。救いようがない

495
デフォルトの名無しさん[sage]   投稿日:2016/11/27 12:54:44  ID:bBkWJjxZ.net(7)
なんでこんな事言ってるかと言うと、テレホの時代に、同じような物沢山観たんだよね。
metagetaしかり、Vectorにいっぱいあるレベル。
自分が一番イケてると思ってるんだろうが、単に轍に乗ってるだけ。

496
デフォルトの名無しさん[sage]   投稿日:2016/11/27 13:12:59  ID:bBkWJjxZ.net(7)
ちなみに、IndexedDBで事足りる、とは言ってないんよね、Mozillaは。
ローカルファイルを使いたいなら今API策定してる、とも言ってるし。

割りと無難なブラウザオンリーな対応何は、ダウンロードしたそのアーカイブをドラッグアンドドロップやなんかでjsで受けてjsで開く事だと思うけど。すでにファイルとして出せるなら。

怠慢の方がマシ。
馬鹿な働き者は撃ち殺すしかないという典型例。
コメント1件

497
デフォルトの名無しさん[sage]   投稿日:2016/11/27 13:18:28  ID:HGJqeK8l.net
もういいからROMって?

498
デフォルトの名無しさん[sage]   投稿日:2016/11/27 13:31:22  ID:sEFEgE7T.net(3)
>496
お前はやはり日本語にどうにも問題がある。議論は無理だ。
とはいえお前にも分かる範囲の所は答えておく。

> 割りと無難なブラウザオンリーな対応何は、ダウンロードしたそのアーカイブをドラッグアンドドロップやなんかでjsで受けてjsで開く事だと思うけど。すでにファイルとして出せるなら。
その通りだ。そしてこれはもう実装出来ている。
そして別オプションとしてIndexedDBにも格納出来るようにしようとしている。

> 俺のプロジェクトだから、俺が決める、なんて言っちゃうなら、OSS発言は取り消しといてね。
> 対極の発想だから。それ。
違うんだな。お前はOSSに「参戦」していないからそれが分からない。
>464なんて典型的な勘違いだぞ。
ただまあとにかく「参戦」してみろ。それだけでいろいろ分かるはずだから。
コメント1件

499
デフォルトの名無しさん[sage]   投稿日:2016/11/27 13:35:35  ID:bBkWJjxZ.net(7)
ムダそうだからROMるわ。すまんな。

>498
メンテナじゃアホ。

500
デフォルトの名無しさん[sage]   投稿日:2016/11/28 05:41:09  ID:sKwraRFT.net
一つ言えることは、この件についてやってみる価値がありそうなこと沢山あるのに、
めんどくさがって手を動かさないで口だけで反論するのでは前に進みようがないということだね

501
デフォルトの名無しさん[sage]   投稿日:2016/11/29 03:20:41  ID:MuupHWfc.net
別オプションとしてindexedDBに…保存する意味がわからん

502
デフォルトの名無しさん[sage]   投稿日:2016/11/29 23:05:21  ID:BntnGE9d.net
「FileSystemAPI が不要」なのは、ファイルの書き込み機能は
blob URL リンクにしてダウンロードで事足りるから、ではないのかな?

503
デフォルトの名無しさん[sage]   投稿日:2016/11/30 10:48:28  ID:Sk/SQjO5.net(2)
超初心者です。
PHPとJavaScriptでホームページ作っていますがJavaScriptの変数名の使い方で質問です

phpの場合
変数名 hoge1fuga hoge2fuga ……を使用する時変数iを使って
 → if(hoge'.$i.'fuga == 'abcd')

→ $h = 'hoge'
$f = 'fuga'
if($h$i$f == 'abcd')
のような書き方ができますがjavascriptの場合どう書けば良いのでしょうか。

var hoge = fuga1.checked
の時に var hoge = fuga + i + .checked の記述にするとエラーになってしいまい、変数名の使い方そのものに疑問が湧きました。
コメント1件

504
デフォルトの名無しさん[sage]   投稿日:2016/11/30 10:49:26  ID:Sk/SQjO5.net(2)
>1読んでませんでした
上の質問無視してください
失礼しました

505
デフォルトの名無しさん[sage]   投稿日:2016/11/30 16:00:04  ID:1swyBgvf.net
>503
できないことはないが、行儀が極めて悪いことだとされるのでしない。
そういうときは、配列を使う。 つまり、
var fuga1, fuga2 ではなく、
var fuga = [] とする。 利用するときは、
var hoge = fuga[i].checked となる。

506
デフォルトの名無しさん[sage]   投稿日:2016/12/31 15:44:33  ID:nUjD4DbZ.net
JavaScript死亡www

「WebAssembly」がITの未来に変革もたらす|Google、Apple、Microsoft、Mozillaが共同で開発した新概念

「WebAssembly」がWebブラウザに変革をもたらします。
Webブラウザは、もともとただテキストを表示するだけのところから始まりました。その出発点から、現在ではコミュニケーションやゲームまで幅広い表現を可能にしています。
そして今回、「Webブラウザ」に新しい概念が加わわることになりました。
それをもたらしたのが、ブラウザに関わりの深い世界規模の4社「Google」「Apple」「Microsoft」「Mozilla」が共同開発した、Webのためのバイナリーフォーマット「WebAssembly」です。
今回はその「WebAssembly」について、「スゴイところって何?」「何が起きるの?」をご紹介していきます。
WebAssemblyは「JS不要。コンパイラ言語だけで動的アプリが作れる」「どの言語でもWebブラウザ上にアプリを作ることができる」

WebAssemblyによってもたらされるスゴイところは次の4つ。
コンパイラ言語だけで、Webブラウザ上に動的なアプリが作れる
ほぼ機械言語にコンパイルされるからヌルヌル動く
OSを一切気にする必要がなくなる。気にするのはブラウザのみ
C,C 以外の言語でもWebAssemblyにコンパイルされる「クロスコンパイラ」の可能性が高まった

これまでWebブラウザで、ユーザからの入力情報を元に、動的なアプリケーションを実現するためには「JavaScript」が必須でした。

「インタプリター言語」であるJavaScriptは、その都度ソースコードを機械語に翻訳する必要があるため、予め機械語に近くコンパイルされる「コンパイラ言語」と比較すると動作が遅いという特徴があります(※)。

もしコンパイル後の機械語に近い形で、Webブラウザ上でコードが実行されたら。
JavaScript以上にヌルヌルに動き、しかもJavaScriptを気にする必要がなくなります。

それを実現したのがこの「WebAssembly」です。

https://mayonez.jp/1690

507
デフォルトの名無しさん[sage]   投稿日:2017/01/01 00:42:27  ID:k8/wNRO9.net(5)
あちこちに落としているようだが、誰一人として肯定して無くてワロタw
つかマジでJavaScript界隈の馬鹿共はこんなデタラメ記事書くのをいい加減止めた方がいいと思うのだが。
自浄作用が無いのは、お前らが叩かないからでもあるんだぜ。
嘘は叩かれるべき。

Cに関しては昔は間違い叩きがすごかったと聞くが、
結果的にWeb上での間違いは皆無となり、お互いの利益になってる。
JavaScriptに間違い記事が氾濫しているのは、第一義には書く奴が悪いんだが、放置されていることも問題だよ。
とはいえ、この記事には投稿欄が無いため、#mayonez編集部=馬鹿と覚えておくしかないが。
この点はQiitaのほうがかなりマシだな。
コメント1件

508
デフォルトの名無しさん[sage]   投稿日:2017/01/01 08:00:47  ID:FrNRDqOE.net
>507
素晴らしい指摘をしているであろうあなたの投稿を見たいからQiitaで使っているアカウントを教えてくれ
コメント1件

509
デフォルトの名無しさん[sage]   投稿日:2017/01/01 08:49:58  ID:k8/wNRO9.net(5)
>508
ゆとり死ね

ツーかお前ら本当に池沼なのな。俺は「ゆとりBot」作れそうな気がしてきたよ。

510
デフォルトの名無しさん[sage]   投稿日:2017/01/01 08:55:22  ID:2Xf0vibn.net
ID:k8/wNRO9 のような他人のダメ出ししか出来ない奴がまともな指摘をするとは思えないのでどうでもいい
コメント2件

511
デフォルトの名無しさん[sage]   投稿日:2017/01/01 08:59:00  ID:k8/wNRO9.net(5)
>510
その通りだ。お前は正しい。
それが分からないからゆとりは池沼なのだし、嫌われる。

512
デフォルトの名無しさん[sage]   投稿日:2017/01/01 13:57:14  ID:fINgyq7S.net
何かと理由を付けてQiitaアカウントを隠すとは思っていたが、意外とあっさり自分の非を認めるんだな
コメント1件

513
デフォルトの名無しさん[sage]   投稿日:2017/01/01 16:36:12  ID:30cN+tVf.net
HTML+JavaScript+WebAPIの構成で認証処理したい場合ってこれでいいの?

ログイン画面
-- ユーザー名/パスワードを送信
-- パスワードが合ってればデータベースにユーザー名と認証トークンを保存
-- レスポンスヘッダーに認証トークンを書き込み

他の画面
-- リクエストヘッダーに認証トークンを書き込み
-- データベースの認証トークンを照会して合ってれば更新
-- レスポンスヘッダーに新しい認証トークンを書き込み

WebAPI
-- ajaxヘッダーに認証トークンを書き込み
-- データベースの認証トークンを照会して合ってたらapiを実行
コメント2件

514
デフォルトの名無しさん[sage]   投稿日:2017/01/01 17:38:52  ID:QliWG2cV.net(4)
>513
トークンって何?
JWTみたいな署名したものの類?
であれば、ログイン画面以外はサーバ側の何も更新する必要無いのでは?
新しいものを発行しまくる必要が無いと言うか、どこでもそんな事すべきでは無い。
ログイン画面に当たるものと、トークン更新のAPIがあればそれで良い。

セッションキーならまた話は別だけど。
トークンの定義が適当すぎて答えられん。

515
デフォルトの名無しさん[sage]   投稿日:2017/01/01 17:39:50  ID:k8/wNRO9.net(5)
>512
違うぞ。

> 何かと理由を付けてQiitaアカウントを隠す
隠してねえ。そもそも持ってねえ。
> 意外とあっさり自分の非を認めるんだな
そもそも俺に非はない。

506がデタラメだと分からない馬鹿はこのスレにはお呼びじゃない。
理由が分からないのなら、必死チェッカーで調べてみろ。
JavaScript/Java/C#(Xamarin)のいずれのスレでもそれぞれ別の理由で駄目出しされてる。
もちろんそれ以外にも駄目出し出来る。

508はコミュ症過ぎて受けようがない。それを咎めている。
もっともお前もコミュ症過ぎて分からないようだが。

508は反射レスだ。俺のレスが気に入らないから定型的に返してみただけ。
だけどそういうのがお前らの状況をより悪くしている。そのことにいい加減気づけ。

516
デフォルトの名無しさん[sage]   投稿日:2017/01/01 17:40:34  ID:k8/wNRO9.net(5)
506は明確に間違いを含んでいる。それが分からないような馬鹿とは俺は話したいとは思わない。
そして真面目に話したいのなら、いちいち無駄に煽る意味は無い。
あれでは他の誰かがQiitaアカウント持ってても、508みたいなゴミに教えようとは思わないだろ。
つまり、508は俺を叩くためだけの作用しかない。プラス作用は期待できないレスだ。

では俺が叩かれる理由があるか?それはお前らが考えるべきことだが、
俺は意図的に、

#mayonez編集部=馬鹿、つまり、
#mayonezはゴミサイトだ

と言っている。これは再度強調しておく。
俺はゴミ潰しをしているんだよ。俺が507で言ったとおりにね。

506の意図は不明だが、通常はこれだけ投下するのなら関係者が宣伝しているとかだ。
あんなデタラメを宣伝されても迷惑でしかないだろ。
だから俺は奴らが書き込む度に叩くことにより、書き込みを防ぐことを期待している。
分かるか?
書き込みを強制的に止めさせることはできない。
でも、「宣伝したい」のなら、カウンター「だって#mayonezって嘘ばかりのゴミじゃん」を合わせることによって、
相手に書き込みを止めさせることを期待している。

これを理解したうえで批判するのはお前の自由。
理解できずに反射レスしているような奴は馬鹿で、かつ加害者でもあることを自覚しろ。
お前らみたいな奴がいるから平気で506みたいな奴が沸くんだよ。
俺みたいな奴しかいなければ奴らはすぐ死滅する。他言語スレがそうだ。
JavaScriptのスレが糞なのは、お前らみたいなゆとりが馬鹿丸出しで口出ししてるからだよ。
スレの流れが読めないのなら自重しろ。

517
デフォルトの名無しさん[sage]   投稿日:2017/01/01 18:08:54  ID:QliWG2cV.net(4)
クソ長い説明はだいたいが間違ってる。
どっかのトランスパイル馬鹿と同じ。

518
デフォルトの名無しさん[sage]   投稿日:2017/01/01 18:42:12  ID:8rzMeR7x.net
ID:k8/wNRO9 は自分の書き込みが参考にならない事を正しいと認めたのだからスルーしてあげるのが優しさだよ

519
デフォルトの名無しさん[sage]   投稿日:2017/01/01 18:49:08  ID:QliWG2cV.net(4)
なるほど、役には立たんことを逆説的に役に立つと言ってるから、
これが訳に立てば役に立たなくて、役に立てば役に立っていないのか。
難しい書き込みするなぁ。
コメント1件

520
デフォルトの名無しさん[sage]   投稿日:2017/01/01 18:50:49  ID:QliWG2cV.net(4)
>519
二段落目が、表現上意味が繋がらんな。
書き込みが役に立てばスレの役に立たなくて、スレの役に立てば役に立たない書き込み、だな。

521
デフォルトの名無しさん[sage]   投稿日:2017/01/01 19:00:23  ID:UZp8Mxmv.net
>510を認めておいて何を小難しい解釈してるんだ?
読解力が足りない文盲はこれだから…
コメント1件

522
デフォルトの名無しさん[sage]   投稿日:2017/01/02 00:16:58  ID:OVlW98VI.net
>521
いや、お前が馬鹿すぎるから、矛盾する2つ以上の状況が出てくるだけ。
それに気づいていない時点でちょっと引くレベルでバカじゃん。
さらに指摘されても気づいてないとか。
頭の中のおがくず一回入れ替えてきたら?クワガタの幼虫程度の知能にはなれるんじゃない?

523
デフォルトの名無しさん[sage]   投稿日:2017/01/03 08:27:03  ID:m68UQ04g.net
>513
WebAPIじゃなくてRESTと言って。
WebAPIはJSから触れるAPIを指す言葉。

524
デフォルトの名無しさん[sage]   投稿日:2017/01/19 22:43:27  ID:OV8X1StJ.net
クエリパラメータでURLを受けとってクエリパラメータを追加してそこの遷移するって危険?
画面Aで検索ボタン押す→画面Aのアドレスをクエリパラメータに追加して画面Bに遷移する
画面Bで検索を行い1つ選択して戻るボタンを押す→検索結果をパラメータにして画面Aに遷移する
こういう感じの入力支援機能を作りたいんだけど

525
デフォルトの名無しさん[sage]   投稿日:2017/01/20 00:35:32  ID:H+FrkUCG.net
一つのページで上手く完結させたほうがきっと良い

526
デフォルトの名無しさん[sage]   投稿日:2017/01/20 01:04:21  ID:vNxVJ868.net
俺もそう思う。
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

プログラム板 タイトル検索

このスレッドが人気です(実況系)
大相撲初場所 十三日 ☆2 (416)NHK実況
実況 ◆ テレビ朝日 46587 スーパーJちゃん (241)テレ朝実況
[再]銭の戦争 #03 (353)フジ実況
実況 ◆ TBSテレビ 26977 ブルーベリーアイアイ江藤愛♪ (949)TBS実況
情報ライブ ミヤネ屋★4 修正 (716)NTV実況
実況 ◆ 日本テレビ 54031 (761)NTV実況
スタジオパークからこんにちは 真木よう子 (432)NHK実況
国会中継「政府演説」★1 (639)NHK実況
このスレッドが人気です(ニュース系)
【国際】韓国軍が数千人ベトナム女性を強姦し、慰安婦にしていた…米国メディア「日本より先に謝罪すべきだ」★5 (782)ニュー速+
【国際】韓国軍が数千人ベトナム女性を強姦し、慰安婦にしていた…米国メディア「日本より先に謝罪すべきだ」★4 (1000)ニュー速+
【食】赤ワイン、ヨーグルト…実は日本人の体質に合わない食べ物 欧米人とは、体のつくりが違うんです (781)ニュー速+
【芸能】現役女子高生と淫行疑惑の狩野英孝 21日会見「本人から直接ご報告」  ★2 (789)音楽・芸能ニュース
【国際】韓国軍が数千人ベトナム女性を強姦し、慰安婦にしていた…米国メディア「日本より先に謝罪すべきだ」★3 (1000)ニュー速+
【FRIDAY】狩野英孝 「17歳現役女子高生と淫行疑惑!」★12 (635)音楽・芸能ニュース
【観光客】訪日韓国人、前年比27.2%増の509万300人で過去最高に…韓国ネット「反日を叫んでる人も裏では日本旅行に行っている」 (551)ニュー速+
【海外芸能】下の毛 刈り込み…マドンナが下腹部をさらけ出した写真を投稿してトランプ大統領就任に反対表明! (268)音楽・芸能ニュース
プログラム板の人気スレ
【統計分析】機械学習・データマイニング11 (940)
C++相談室 part129 (182)
Excel VBA 質問スレ Part45 (243)
C言語なら俺に聞け 138 (576)
Xamarin Part3 (249)
ふらっと C#,C♯,C#(初心者用) Part126 (263)
Visual Studio 2015 Part7 (1000)
Androidプログラミング質問スレ revision52 (560)
くだすれPython(超初心者用) その31 (873)
【PHP】下らねぇ質問はここに書き込みやがれ 7 (637)
スレ立てるまでもない質問はここで 145匹目 (107)
クラス名・変数名に迷ったら書き込むスレ。Part27 (740)
次世代言語議論スレ【Go Rust Haskell Scala Erlang Elixir】 (468)
推薦図書/必読書のためのスレッド 80 (950)
+ JavaScript(ECMAScript)質問用スレッド vol.122 + (978)
☆★Java質問・相談スレッド179★★ (589)
Swift part9 (586)
Ruby 初心者スレッド Part 59 (555)
人工知能ディープラーニング機械学習のための数学 (105)
プログラミング言語 Rust 2 (311)
Java入門・初心者質問スレ Part.2 (297)
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus Rift/その他VR】 (347)
【JavaScript】スクリプト バトルロワイヤル55【php,py,pl,rb】 (459)
+ JavaScript の質問用スレッド vol.122 + (628)
ディープラーニング (965)
Swift part7 (1026)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
Amazon


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 正常取得 - 5件 - 取得完了