JavaScript を自ら学ぶ人のための質問スレッドです。
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
前スレ
+ JavaScript の質問用スレッド vol.125 +
https://mevius.5ch.net/test/read.cgi/tech/1518940081/
(ライブラリ禁止条項は、多数の意見によって廃止されました。ライブラリの質問もOKです)
探検
+ JavaScript の質問用スレッド vol.126 +
■ このスレッドは過去ログ倉庫に格納されています
2018/06/02(土) 14:31:23.04ID:B1JKBGEy
713デフォルトの名無しさん
2018/12/19(水) 08:43:58.69ID:kJYKyqgv 数学くんは虚学の悪いとこ取りしたような人だね。
714デフォルトの名無しさん
2018/12/19(水) 09:41:58.49ID:Yvire5cb >>712
wasm は、emscripten_sleep(millisecond) をサポートしてるので、もともと問題の根は浅い。
でもあなたの言ってることはSetEvent()やMutex()などの同期オブジェクトとは直接関係
ない。それに proposal 段階で、実装報告は見当たらないんじゃないの。
wasm は、emscripten_sleep(millisecond) をサポートしてるので、もともと問題の根は浅い。
でもあなたの言ってることはSetEvent()やMutex()などの同期オブジェクトとは直接関係
ない。それに proposal 段階で、実装報告は見当たらないんじゃないの。
715デフォルトの名無しさん
2018/12/19(水) 10:08:12.65ID:Yvire5cb 【数学首席のオイラが書く(言葉の美しさは知らん)】
atomic fence は、二つのスレッドが同時に読み書きすることを防ぐ目的で使うもの。
たとえば、グローバル変数 a に「1足す」場合、CPUは、それをいったん(内部)
レジスタなどに読み取ってから、1足し、最後に同じグローバル変数 a に書き戻す。
この際、二つのスレッドがほぼ同時に「読んで」しまった場合、合計で「2」を足して欲しいのに、「1」しか足されなくなってしまう。それを防ぐために、ある同時に「読む」ことすら防ぐフェンスのようなものを用意するためのもの。だから、専用APIとして、
InterlockedIncrement() があったり、CPU自体にもマシン語レベルでLOCK修飾なるもの
があったりする。
一方、SetEvent() などのイベント発生を「待つ」ことは、この仕組みだけでは不十分で、
次のような単純なやり方では CPU がフルパワー状態になり、電力の無駄使いになる。
ちなみに、このように (HLT 命令を使っていない) BUSY LOOP では、CPU の 電力消費
が何十倍にもなることがある(だから、sleep()命令は特殊な実装を行ってる)。:
ATOMIC_FENC g_fence;
BOOL g_bEvnet = 0;
void mySetEvent() // スレッドBが使うとする。
{
g_bEvent = 1;
}
void myWaitForEvent() // スレッドAが使うとする。
{
// 以下ループで、CPUがフルパワー状態になり電気の無駄使いになる:
for ( ;; ) {
BeginAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの開始。
if ( !g_bEvent ) {
g_bEvent = 0;
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
break;
}
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
}
}
atomic fence は、二つのスレッドが同時に読み書きすることを防ぐ目的で使うもの。
たとえば、グローバル変数 a に「1足す」場合、CPUは、それをいったん(内部)
レジスタなどに読み取ってから、1足し、最後に同じグローバル変数 a に書き戻す。
この際、二つのスレッドがほぼ同時に「読んで」しまった場合、合計で「2」を足して欲しいのに、「1」しか足されなくなってしまう。それを防ぐために、ある同時に「読む」ことすら防ぐフェンスのようなものを用意するためのもの。だから、専用APIとして、
InterlockedIncrement() があったり、CPU自体にもマシン語レベルでLOCK修飾なるもの
があったりする。
一方、SetEvent() などのイベント発生を「待つ」ことは、この仕組みだけでは不十分で、
次のような単純なやり方では CPU がフルパワー状態になり、電力の無駄使いになる。
ちなみに、このように (HLT 命令を使っていない) BUSY LOOP では、CPU の 電力消費
が何十倍にもなることがある(だから、sleep()命令は特殊な実装を行ってる)。:
ATOMIC_FENC g_fence;
BOOL g_bEvnet = 0;
void mySetEvent() // スレッドBが使うとする。
{
g_bEvent = 1;
}
void myWaitForEvent() // スレッドAが使うとする。
{
// 以下ループで、CPUがフルパワー状態になり電気の無駄使いになる:
for ( ;; ) {
BeginAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの開始。
if ( !g_bEvent ) {
g_bEvent = 0;
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
break;
}
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
}
}
716デフォルトの名無しさん
2018/12/19(水) 10:09:02.19ID:Yvire5cb >>715
[続き]
そこで今度は、myWaitForEvent()のループを次のように書き換えたとする:
for ( ;; ) {
BeginAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの開始。
if ( !g_bEvent ) {
g_bEvent = 0;
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
sleep(100); // 100(ms) 待つ。
break;
}
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
}
この場合は、電力消費はかなり抑制されるが、スレッドBで mySetEvent()が呼ばれて
から、スレッドAのmyWaitForEvent()がそれを知って、ループから脱出するまでに、
最悪100(ms)の遅延が発生してしまう。だから、OSは、WaitForSingleObject() API
などの専用の同期メカニズムを用意しなくてはならない。Emscriptenにはまだそれ
が整備されていない。
[続き]
そこで今度は、myWaitForEvent()のループを次のように書き換えたとする:
for ( ;; ) {
BeginAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの開始。
if ( !g_bEvent ) {
g_bEvent = 0;
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
sleep(100); // 100(ms) 待つ。
break;
}
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
}
この場合は、電力消費はかなり抑制されるが、スレッドBで mySetEvent()が呼ばれて
から、スレッドAのmyWaitForEvent()がそれを知って、ループから脱出するまでに、
最悪100(ms)の遅延が発生してしまう。だから、OSは、WaitForSingleObject() API
などの専用の同期メカニズムを用意しなくてはならない。Emscriptenにはまだそれ
が整備されていない。
717デフォルトの名無しさん
2018/12/19(水) 10:11:23.08ID:Yvire5cb >>715
【修正】
void mySetEvent() // スレッドBが使うとする。
{
BeginAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの開始。
g_bEvent = 1;
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
}
【修正】
void mySetEvent() // スレッドBが使うとする。
{
BeginAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの開始。
g_bEvent = 1;
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
}
718デフォルトの名無しさん
2018/12/19(水) 10:12:13.28ID:Yvire5cb719デフォルトの名無しさん
2018/12/19(水) 10:14:39.02ID:Yvire5cb >>715
【sleep()を使う場合の最もましなコード】
(それでもどうしても遅延が発生する。)
void mySetEvent() // スレッドBが使うとする。
{
BeginAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの開始。
g_bEvent = 1;
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
}
void myWaitForEvent() // スレッドAが使うとする。
{
// 以下ループで、CPUがフルパワー状態になり電気の無駄使いになる:
for ( ;; ) {
BeginAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの開始。
if ( g_bEvent ) {
g_bEvent = 0;
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
sleep(100); // 100(ms) 待つ。
break;
}
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
}
}
【sleep()を使う場合の最もましなコード】
(それでもどうしても遅延が発生する。)
void mySetEvent() // スレッドBが使うとする。
{
BeginAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの開始。
g_bEvent = 1;
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
}
void myWaitForEvent() // スレッドAが使うとする。
{
// 以下ループで、CPUがフルパワー状態になり電気の無駄使いになる:
for ( ;; ) {
BeginAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの開始。
if ( g_bEvent ) {
g_bEvent = 0;
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
sleep(100); // 100(ms) 待つ。
break;
}
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
}
}
720デフォルトの名無しさん
2018/12/19(水) 10:15:59.44ID:Yvire5cb721デフォルトの名無しさん
2018/12/19(水) 10:17:28.95ID:Yvire5cb >>719
【再修正】
void myWaitForEvent() // スレッドAが使うとする。
{
// 以下ループで、最悪100(ms)の遅延が発生する。
for ( ;; ) {
BeginAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの開始。
if ( g_bEvent ) {
g_bEvent = 0;
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
break;
}
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
sleep(100); // 100(ms) 待つ。
}
}
【再修正】
void myWaitForEvent() // スレッドAが使うとする。
{
// 以下ループで、最悪100(ms)の遅延が発生する。
for ( ;; ) {
BeginAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの開始。
if ( g_bEvent ) {
g_bEvent = 0;
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
break;
}
EndAtomicFence(&g_fence); // あなたが言ったAtomic Fenceの終了。
sleep(100); // 100(ms) 待つ。
}
}
722デフォルトの名無しさん
2018/12/19(水) 10:46:30.85ID:YX/OcQwS いや、もうAtomicsAPIがChromeでオリジントライアルで使えるでしょ
もう解決してる問題に対して何をイキっちゃってんの
いくら数学の理論構成や計算ができようと意味はないよ
そんなのは機械でできることだから
正しい問題と前提を認識できて初めて数学という道具は有益に使えるんだから
君がやってるのはただ思考力の無駄遣い
まあ君の頭だからどう無駄に使おうと勝手だけど、スレ汚しは勘弁してね
もう解決してる問題に対して何をイキっちゃってんの
いくら数学の理論構成や計算ができようと意味はないよ
そんなのは機械でできることだから
正しい問題と前提を認識できて初めて数学という道具は有益に使えるんだから
君がやってるのはただ思考力の無駄遣い
まあ君の頭だからどう無駄に使おうと勝手だけど、スレ汚しは勘弁してね
723デフォルトの名無しさん
2018/12/19(水) 13:13:50.30ID:Yvire5cb >>722
なるほど、Atomics の wait() と notify() の事か:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/wait
分かった、すまんかった。
しかし、海外のサイトを検索しても、この関数のことは一切発見することが出来なかったんだよ。
await や async や、その他の便利ラッパクラスみたいなものより、こっちの関数の方が重要だ。
初見だが、多分、notify() と wait() が、Win32API の SetEvent() と WaitForSingleObject() に大体
対応していて、それがあればスレッドの同期に関してはほとんどの用途では足りると思う。
効率の良い(電気もCPUパワーも無駄にしない) sleep() もこれらを使えば実装できてしまうだろう。
なるほど、Atomics の wait() と notify() の事か:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/wait
分かった、すまんかった。
しかし、海外のサイトを検索しても、この関数のことは一切発見することが出来なかったんだよ。
await や async や、その他の便利ラッパクラスみたいなものより、こっちの関数の方が重要だ。
初見だが、多分、notify() と wait() が、Win32API の SetEvent() と WaitForSingleObject() に大体
対応していて、それがあればスレッドの同期に関してはほとんどの用途では足りると思う。
効率の良い(電気もCPUパワーも無駄にしない) sleep() もこれらを使えば実装できてしまうだろう。
724デフォルトの名無しさん
2018/12/19(水) 14:57:22.19ID:kJYKyqgv またWindowsのAPIに固執してるの?
いい加減に理解しなよ。Windowsとwebは無関係だって。
いい加減に理解しなよ。Windowsとwebは無関係だって。
725デフォルトの名無しさん
2018/12/19(水) 17:02:01.51ID:Yvire5cb マルチプラットフォーム環境として、wasm や JVM や CrossBrdige(FlashCC) など
を調査してるから、Windowsアプリが移植できるかどうかに興味があるんだ。
を調査してるから、Windowsアプリが移植できるかどうかに興味があるんだ。
726デフォルトの名無しさん
2018/12/19(水) 20:13:23.94ID:kJYKyqgv Windowsアプリが移植できるかと、同じAPIを持ってる事は無関係だし、
事実同じAPIも持ってないよね。
なのに見立てる理由がわかんない。
事実同じAPIも持ってないよね。
なのに見立てる理由がわかんない。
727デフォルトの名無しさん
2018/12/19(水) 21:13:53.09ID:Ujgti5e8 基本的にLLVMに変換可能なプログラムなら移植できるけど
OS特有のAPIやライブラリ使ってちゃそりゃそのまま移植できるはずがない
OS特有のAPIやライブラリ使ってちゃそりゃそのまま移植できるはずがない
728デフォルトの名無しさん
2018/12/20(木) 01:35:15.77ID:Gok/GJGq だからそれをやっちゃおうかな、っちゅう話ですわ。
729デフォルトの名無しさん
2018/12/20(木) 08:29:03.69ID:uRkd43kp やっちゃおう、にどれだけ価値があるかわからんけどね。
そこまで言うなら、前回のIMEだって、やっぱりIMEを移植すべき問題じゃん。
同じAPI使うってのは、wasmでのWin32API互換ライブラリを作るって夢を語ってるって事なのかな?
簡単な道ではないと思うけど。
WINE何年かかってんよって話。
そこまで言うなら、前回のIMEだって、やっぱりIMEを移植すべき問題じゃん。
同じAPI使うってのは、wasmでのWin32API互換ライブラリを作るって夢を語ってるって事なのかな?
簡単な道ではないと思うけど。
WINE何年かかってんよって話。
730デフォルトの名無しさん
2018/12/20(木) 12:51:09.87ID:y+eXSBvj WasmでというよりJSででしょ
現状Web API叩くのはJSからしかできないのだから
現状Web API叩くのはJSからしかできないのだから
731デフォルトの名無しさん
2018/12/21(金) 02:52:57.38ID:7eLtsaJR foo =function(){}とか
bar = ()=>{} とか
エディタがDocコメ認識してくれないことが多くてなあ…
bar = ()=>{} とか
エディタがDocコメ認識してくれないことが多くてなあ…
732デフォルトの名無しさん
2018/12/21(金) 03:02:08.56ID:pse73zvs jsdocって言語機能が名前から想像するよりはるかに異なるjava用のjavadocの単なるメクラポーティングだしなぁ…
js用にもっと相応しいドキュメント仕様が普及してもよかっただろうに世の中うまくいかんのう…
js用にもっと相応しいドキュメント仕様が普及してもよかっただろうに世の中うまくいかんのう…
733デフォルトの名無しさん
2018/12/23(日) 03:20:59.12ID:UYmMiioW iframe要素のsrcを変更したら画像のロードが終了してからloadが発火すると思うんだけど
この間(画像のロードしてる間)にiframeのHTMLにcss挿入するのってどうしたらいい?
この間(画像のロードしてる間)にiframeのHTMLにcss挿入するのってどうしたらいい?
734デフォルトの名無しさん
2018/12/23(日) 03:32:31.98ID:yUjQiXy1 へけっ
735デフォルトの名無しさん
2018/12/23(日) 18:55:55.79ID:Wgmswpxd >>733
src を変える前に iframe の style 属性を指定しておくのでダメであれば、
別に、タイマーイベントみたいなので、少し遅れてから、イベントハンドラ
の中から iframe の style 属性を変えればいいだけではないの。
src を変える前に iframe の style 属性を指定しておくのでダメであれば、
別に、タイマーイベントみたいなので、少し遅れてから、イベントハンドラ
の中から iframe の style 属性を変えればいいだけではないの。
736デフォルトの名無しさん
2018/12/23(日) 20:07:18.83ID:yUjQiXy1 だめやろうなぁ
737デフォルトの名無しさん
2018/12/24(月) 02:47:05.59ID:oR/7w3yW エクセルのマクロとかすら使ったことがないし
数学も超苦手なのですが
プログラムを始めてみたくてウズウズしてます。
仕事で使ってる動画ソフトが
javascriptでスクリプトを追加できるので
java scriptをはじめてのプログラムとして始めてみたいのですが
何から揃えればよいのでしょうか?
数学も超苦手なのですが
プログラムを始めてみたくてウズウズしてます。
仕事で使ってる動画ソフトが
javascriptでスクリプトを追加できるので
java scriptをはじめてのプログラムとして始めてみたいのですが
何から揃えればよいのでしょうか?
738デフォルトの名無しさん
2018/12/24(月) 05:38:37.54ID:zcolqab1 ブラウザ
739デフォルトの名無しさん
2018/12/24(月) 12:33:43.31ID:67lBbMM7740デフォルトの名無しさん
2018/12/24(月) 16:16:56.97ID:Vnn2/Eqf 知識0なのに実用的なプログラムから始めるのは間違っている
HTMLを学んでてそこに動きを付けたいとかいう段階的な目的とステップがあるなら別だけど
マクロとしてのJSを学びたいのにWebに手を出すというのは無理筋
基本的に勉強用の非実用言語環境でできれば配列くらいの知識まで身につけといてから
Webとか手を出さないで直接マクロに行かないと絶対に挫折する
HTMLを学んでてそこに動きを付けたいとかいう段階的な目的とステップがあるなら別だけど
マクロとしてのJSを学びたいのにWebに手を出すというのは無理筋
基本的に勉強用の非実用言語環境でできれば配列くらいの知識まで身につけといてから
Webとか手を出さないで直接マクロに行かないと絶対に挫折する
741デフォルトの名無しさん
2018/12/24(月) 18:15:32.52ID:9l1J7bMi マクロとしてのJSって何だよ・・・・
やりたいこととしてはブラウザよりNodeの方が向いているとは思うが
やりたいこととしてはブラウザよりNodeの方が向いているとは思うが
742デフォルトの名無しさん
2018/12/24(月) 18:21:49.02ID:Vnn2/Eqf いや、もうやりたいことは決まってるでしょ
いくら比較的余計な知識が要らないとは言え
NodeでのJS入門環境が充実してるわけでもないのに
いくら比較的余計な知識が要らないとは言え
NodeでのJS入門環境が充実してるわけでもないのに
743デフォルトの名無しさん
2018/12/24(月) 20:00:11.14ID:BJHgzAj7 webpackで依存関係が数百とかなってわけがわからなくなる
744737
2018/12/24(月) 23:14:29.77ID:oR/7w3yW みなさんありがとうございます。
「なにかゲームしたい」くらいな感覚でプログラムをやってみたいと思ってました。
必要に迫られて始めたいわけではなくて
暇なときにテトリスする代わりに
クネクネ動くhello worldを作ったり
自分で使うようのアプリとか作れたら楽しそうだなと思った次第でした。
今は小さくて安い小型パソコンがたくさんあるのでそういうパソコンで
暇な時にシコシコプログラム作れたら
すごく楽しいんじゃないかと
ついでにJs覚えれば仕事の動画編集にも活かせそうだしなんか良いかなみたいな感覚でした。
htmlもかじってみようと思います。
「なにかゲームしたい」くらいな感覚でプログラムをやってみたいと思ってました。
必要に迫られて始めたいわけではなくて
暇なときにテトリスする代わりに
クネクネ動くhello worldを作ったり
自分で使うようのアプリとか作れたら楽しそうだなと思った次第でした。
今は小さくて安い小型パソコンがたくさんあるのでそういうパソコンで
暇な時にシコシコプログラム作れたら
すごく楽しいんじゃないかと
ついでにJs覚えれば仕事の動画編集にも活かせそうだしなんか良いかなみたいな感覚でした。
htmlもかじってみようと思います。
745デフォルトの名無しさん
2018/12/25(火) 06:55:27.86ID:NrxUWHxX >>738
グリフィンドールに10点!!
グリフィンドールに10点!!
746デフォルトの名無しさん
2018/12/28(金) 09:59:07.54ID:7xgXna2y MSDNからMDNにとばされるんだけど…
747デフォルトの名無しさん
2018/12/28(金) 12:22:40.64ID:CNCn0lYj 統合されたんだから当たり前じゃん
748デフォルトの名無しさん
2018/12/28(金) 22:17:34.14ID:6Xnlajxx Excelの表をGraphqlに変換することは出来ますか?
749デフォルトの名無しさん
2018/12/28(金) 22:18:40.05ID:6Xnlajxx750デフォルトの名無しさん
2018/12/28(金) 22:35:42.83ID:g72FtTfN 質問です。下記のようなプログラムで、'テスト'をhoge内に記載する場合は
どのようにすればいいでしょうか?
const hoge = {
hoge1:'hogehoge1',
hoge2:'hogehoge2'
};
console.log(hoge.hoge1 + 'テスト')
イメージ的にはこんな感じにしたいです
const hoge = {
hoge1:'hogehoge1',
hoge2:'hogehoge2'
(hoge1+テスト)
};
console.log(hoge.hoge1)
結果:hogehoge1テスト
どのようにすればいいでしょうか?
const hoge = {
hoge1:'hogehoge1',
hoge2:'hogehoge2'
};
console.log(hoge.hoge1 + 'テスト')
イメージ的にはこんな感じにしたいです
const hoge = {
hoge1:'hogehoge1',
hoge2:'hogehoge2'
(hoge1+テスト)
};
console.log(hoge.hoge1)
結果:hogehoge1テスト
751デフォルトの名無しさん
2018/12/28(金) 23:15:33.48ID:8m6KRjls const hoge = {
hoge1:'hogehoge1'
+'テスト',
hoge2:'hogehoge2'
};
hoge1:'hogehoge1'
+'テスト',
hoge2:'hogehoge2'
};
752デフォルトの名無しさん
2018/12/28(金) 23:57:17.21ID:+Hytqb0t >>748
gatsby-transformer-excelあったと思う
gatsby-transformer-excelあったと思う
753デフォルトの名無しさん
2018/12/29(土) 09:01:54.50ID:OV3vXkdP >>746-747
メソッド一覧とかプロパティ一覧、関数一覧のページはMSDNのほうが見やすかったから
索引的なページは残しておいてほしかった
エディタのマクロ書くときなんかはMSDNのほうが都合よかったので残念
メソッド一覧とかプロパティ一覧、関数一覧のページはMSDNのほうが見やすかったから
索引的なページは残しておいてほしかった
エディタのマクロ書くときなんかはMSDNのほうが都合よかったので残念
754デフォルトの名無しさん
2018/12/29(土) 10:27:57.06ID:X90mX2aj MDNに文句を言いましょう
755デフォルトの名無しさん
2018/12/31(月) 00:10:35.03ID:c5mCkIDs Electronでクロスプラットフォームのアプリ開発の出来ることを知ったプログラミング初心者ですが、一般的なElectronの開発はVue.jsやReact.jsを併用するのでしょうか?
756デフォルトの名無しさん
2018/12/31(月) 12:44:57.49ID:ub+ffh8E 好きなようにすりゃいいんだよ。なんだよ一般的て
757デフォルトの名無しさん
2019/01/01(火) 14:16:52.62ID:venw+ri0 もうElectronは古い
今からはできる限りPWAでやる風潮
今からはできる限りPWAでやる風潮
758デフォルトの名無しさん
2019/01/01(火) 17:49:09.57ID:MDjquhVw React学ぶのにオススメのチュートリアルや本ありますか?
759デフォルトの名無しさん
2019/01/01(火) 19:27:21.70ID:cA+NVdVY 本は薄い奴が今のところ比較的新しいけど、残念なことにそれでも情報が古いからGithubのreadmeとか見ないとダメ
その本に書かれているライブラリはもう開発停止していたりするから
ReactよりもReduxのほうが大変かもね
その本に書かれているライブラリはもう開発停止していたりするから
ReactよりもReduxのほうが大変かもね
760デフォルトの名無しさん
2019/01/01(火) 21:59:08.65ID:0nxjkBRM >>758
Q. ○○を学ぶのにオススメのチュートリアルや本ありますか?
A. 公式
JavaScript界隈の場合はほぼ全部これ。
公式読んで無理なら諦めた方がいいと思う。当然だが、
1. JavaScript界隈の場合は布教意識ありまくりで公式がかなり充実している。
2. 公式は対象技術レベルを想定して書かれている=読んで無理ならどうせ使いこなせない。
3. 公式以外は「ぼくががんばったきろく」を残したい馬鹿ばかりで、間違いが多すぎる。
4. そもそも普通の奴は「ぼくのさいこうのチュートリアル」なんて作らない。
公式のチュートリアルを充実させる方向に参加する。したがって当然非公式サイトはおしなべてゴミ。
5. 本を書いている奴は本で食っている=一線のプログラマではなくただのテクニカルライタであり、
売れない本は書きたくない。よってどうしても後追いになるし、技術レベルも低い。
6. JavaScriptの場合はフレームワークonフレームワークの状態だから、
はっきり言って、構想を聞いて「あ、いいね」とぱっと思えるのでなければ使う必要がない。
だから本来、対象者にはリファレンスしか必要ない。Nodeとかそんな感じでしょ。
というか、自分が知ってるフレームワーク等と比べてみたらいい。
例えばjQueryを使っている奴は公式トップの3例を見て、「素晴らしい」と思えるから使っているわけだろ。
Nodeの場合は公式トップは空で、aboutで鯖を立てる例だけ出しているが、魅力のアピールにはそれで十分なわけだろ。
同様に、reactの場合も公式トップの4例で十分だと思っているからあの構成な訳で、
それで魅力を感じないのであれば使う必要はないし、意味が分からないのなら使いこなせない。
Q. ○○を学ぶのにオススメのチュートリアルや本ありますか?
A. 公式
JavaScript界隈の場合はほぼ全部これ。
公式読んで無理なら諦めた方がいいと思う。当然だが、
1. JavaScript界隈の場合は布教意識ありまくりで公式がかなり充実している。
2. 公式は対象技術レベルを想定して書かれている=読んで無理ならどうせ使いこなせない。
3. 公式以外は「ぼくががんばったきろく」を残したい馬鹿ばかりで、間違いが多すぎる。
4. そもそも普通の奴は「ぼくのさいこうのチュートリアル」なんて作らない。
公式のチュートリアルを充実させる方向に参加する。したがって当然非公式サイトはおしなべてゴミ。
5. 本を書いている奴は本で食っている=一線のプログラマではなくただのテクニカルライタであり、
売れない本は書きたくない。よってどうしても後追いになるし、技術レベルも低い。
6. JavaScriptの場合はフレームワークonフレームワークの状態だから、
はっきり言って、構想を聞いて「あ、いいね」とぱっと思えるのでなければ使う必要がない。
だから本来、対象者にはリファレンスしか必要ない。Nodeとかそんな感じでしょ。
というか、自分が知ってるフレームワーク等と比べてみたらいい。
例えばjQueryを使っている奴は公式トップの3例を見て、「素晴らしい」と思えるから使っているわけだろ。
Nodeの場合は公式トップは空で、aboutで鯖を立てる例だけ出しているが、魅力のアピールにはそれで十分なわけだろ。
同様に、reactの場合も公式トップの4例で十分だと思っているからあの構成な訳で、
それで魅力を感じないのであれば使う必要はないし、意味が分からないのなら使いこなせない。
761デフォルトの名無しさん
2019/01/02(水) 03:56:07.95ID:2lhCREwi 「Reactを学ぶ」とかワケワカランな
スマホだってなんだって説明書見て使ってれば自分にとって十分使いこなせてるでしょ
「Reactのプロ」になる必要なんてないんだから
ただ道具の一つとして自然に使っていけばいいだけ
スマホだってなんだって説明書見て使ってれば自分にとって十分使いこなせてるでしょ
「Reactのプロ」になる必要なんてないんだから
ただ道具の一つとして自然に使っていけばいいだけ
762デフォルトの名無しさん
2019/01/02(水) 16:10:49.32ID:/JRa6BYE emscripten_sleep() の以下のソース、理解が出来ない。JSに不慣れだから余計。
誰か助けて欲しい。emscripten は、少なくとも asm.js 形式だと、JS から、
JS の emscripten_sleep() 関数を単純に呼び出している。
以下の、{{{・・・}}} の三重括弧や、callback の部分の意味が理解できない。
[x:\yyyy\emsdk\emscripten\1.38.21\src\library_async.js]
mergeInto(LibraryManager.library, {
#if ASYNCIFY
・・・
emscripten_async_resume: function() {
var callback = 0;
___async = 0;
___async_unwind = 1;
while (1) {
if (!___async_cur_frame) return;
callback = {{{ makeGetValueAsm('___async_cur_frame', 8, 'i32') }}};
// the signature of callback is always vi
// the only argument is ctx
{{{ makeDynCall('vi') }}}(callback | 0, (___async_cur_frame + 8)|0);
if (___async) return; // that was an async call
if (!___async_unwind) {
// keep the async stack
___async_unwind = 1;
continue;
}
// unwind normal stack frame
stackRestore({{{ makeGetValueAsm('___async_cur_frame', 4, 'i32') }}});
// pop the last async stack frame
___async_cur_frame = {{{ makeGetValueAsm('___async_cur_frame', 0, 'i32') }}};
}
},
誰か助けて欲しい。emscripten は、少なくとも asm.js 形式だと、JS から、
JS の emscripten_sleep() 関数を単純に呼び出している。
以下の、{{{・・・}}} の三重括弧や、callback の部分の意味が理解できない。
[x:\yyyy\emsdk\emscripten\1.38.21\src\library_async.js]
mergeInto(LibraryManager.library, {
#if ASYNCIFY
・・・
emscripten_async_resume: function() {
var callback = 0;
___async = 0;
___async_unwind = 1;
while (1) {
if (!___async_cur_frame) return;
callback = {{{ makeGetValueAsm('___async_cur_frame', 8, 'i32') }}};
// the signature of callback is always vi
// the only argument is ctx
{{{ makeDynCall('vi') }}}(callback | 0, (___async_cur_frame + 8)|0);
if (___async) return; // that was an async call
if (!___async_unwind) {
// keep the async stack
___async_unwind = 1;
continue;
}
// unwind normal stack frame
stackRestore({{{ makeGetValueAsm('___async_cur_frame', 4, 'i32') }}});
// pop the last async stack frame
___async_cur_frame = {{{ makeGetValueAsm('___async_cur_frame', 0, 'i32') }}};
}
},
763デフォルトの名無しさん
2019/01/02(水) 16:12:12.28ID:/JRa6BYE >>762
・・・
emscripten_sleep: function(ms) {
Module['setAsync'](); // tell the scheduler that we have a callback on hold
Browser.safeSetTimeout(_emscripten_async_resume, ms);
},
・・・
}
・・・
emscripten_sleep: function(ms) {
Module['setAsync'](); // tell the scheduler that we have a callback on hold
Browser.safeSetTimeout(_emscripten_async_resume, ms);
},
・・・
}
764デフォルトの名無しさん
2019/01/02(水) 16:28:37.28ID:/JRa6BYE 以下の前提がある時、
callback = {{{ makeGetValueAsm('___async_cur_frame', 8, 'i32') }}};
{{{ makeDynCall('vi') }}}(callback | 0, (___async_cur_frame + 8)|0);
の部分が、何を意味するのか分かる人いない?
---------------------------------------
var Module = {};
Module["asm"] = (function(global, env, buffer) {
"use asm";
var HEAP8 = new global.Int8Array(buffer);
var HEAP16 = new global.Int16Array(buffer);
var HEAP32 = new global.Int32Array(buffer);
var HEAPU8 = new global.Uint8Array(buffer);
・・・・
}
var dynCall_vi = Module["dynCall_vi"] = function() { return Module["asm"]["dynCall_vi"].apply(null, arguments) };
function makeDynCall(sig) {
if (!EMULATED_FUNCTION_POINTERS) {
return 'dynCall_' + sig;
} else {
return 'ftCall_' + sig;
}
}
callback = {{{ makeGetValueAsm('___async_cur_frame', 8, 'i32') }}};
{{{ makeDynCall('vi') }}}(callback | 0, (___async_cur_frame + 8)|0);
の部分が、何を意味するのか分かる人いない?
---------------------------------------
var Module = {};
Module["asm"] = (function(global, env, buffer) {
"use asm";
var HEAP8 = new global.Int8Array(buffer);
var HEAP16 = new global.Int16Array(buffer);
var HEAP32 = new global.Int32Array(buffer);
var HEAPU8 = new global.Uint8Array(buffer);
・・・・
}
var dynCall_vi = Module["dynCall_vi"] = function() { return Module["asm"]["dynCall_vi"].apply(null, arguments) };
function makeDynCall(sig) {
if (!EMULATED_FUNCTION_POINTERS) {
return 'dynCall_' + sig;
} else {
return 'ftCall_' + sig;
}
}
765デフォルトの名無しさん
2019/01/02(水) 16:46:37.75ID:+DxIoQKP 三重波括弧についてはEmscripten独自のマクロみたいだね
多分だけどビルド時に当該箇所が置換されるんだと思う
https://github.com/kripken/emscripten/blob/52479350e642453bf74ceca108fca8e1f43b30d5/src/parseTools.js#L11-L12
マクロ展開後がどうなるか分からないからこれ以上は分からない
多分だけどビルド時に当該箇所が置換されるんだと思う
https://github.com/kripken/emscripten/blob/52479350e642453bf74ceca108fca8e1f43b30d5/src/parseTools.js#L11-L12
マクロ展開後がどうなるか分からないからこれ以上は分からない
766デフォルトの名無しさん
2019/01/02(水) 18:09:44.66ID:/JRa6BYE [何をやってるかの自分なりの推定]
例えば、main() 関数の中で、emscripten_sleep(n) を使うと、setTimeout() を使って、
emscripten_async_resume() 関数を、n(ms) 後に起動するようにしておく。そして、
その段階では、main() の後の処理を全て素通りして、main() 関数から return する。
これは、if 文で、label という名称の local 変数の値で場合わけして、goto で色々な
ラベルに飛んでいるような感じ。でも、JS には、goto 文がないので、関数の処理全体を
大体 while(1) 文のブロック中に入れてしまって、必要な時に break する事で、while
ブロックの次の場所に飛ぶようにしてある。そして、そこで label 変数の値で場合分けして、
何らかの処理を行う。実は、この時、main() 関数に割り当てられた識別番号をどこかの
グローバル変数 g_k に残しておく。この識別番号は、0 から割り振られた小さな値で、
どこかの配列 g_func_s[]には、色々な関数の先頭アドレスが入っており、main もその中の
1つとして入っている。例えば、main に割り振られた識別番号が 5 なら、g_funs[5] で
main の関数アドレスが取得できるようになってるらしい。
次に、n(ms) の時間が経過すると、emscripten_async_resume() が呼び出される。この時点では、
main() 関数は実行を終えてしまっているので、何とかして、もう一度 main() 関数を起動しなおして、
上手く、emscripten_sleep() の直後の行にまで戻りたい。そこで、g_k に残された番号を頼りに、
g_func_s[g_k] の関数を起動しなおす。g_func_s[g_k] には、main 関数の先頭アドレスが入ってい
るので、main 関数を再起動することは出来ることは出来る。
で、main をもう一度起動して、なんとかして、emscripten_sleep() の直後の行にまで進む。
これは、変数「label 」に上手く値を入れることで、何とかしているんだと思う。
この時、スタック・ポインタの値も、元に戻す。
STACKTOP が、スタック・ポインタで、HEAP32[] が、CPU 全体のアドレス空間みたいなもの。
大体、HEAP32[STACKTOP] と書くことで、該当のスタックの近くにアクセスできるらしい。
例えば、main() 関数の中で、emscripten_sleep(n) を使うと、setTimeout() を使って、
emscripten_async_resume() 関数を、n(ms) 後に起動するようにしておく。そして、
その段階では、main() の後の処理を全て素通りして、main() 関数から return する。
これは、if 文で、label という名称の local 変数の値で場合わけして、goto で色々な
ラベルに飛んでいるような感じ。でも、JS には、goto 文がないので、関数の処理全体を
大体 while(1) 文のブロック中に入れてしまって、必要な時に break する事で、while
ブロックの次の場所に飛ぶようにしてある。そして、そこで label 変数の値で場合分けして、
何らかの処理を行う。実は、この時、main() 関数に割り当てられた識別番号をどこかの
グローバル変数 g_k に残しておく。この識別番号は、0 から割り振られた小さな値で、
どこかの配列 g_func_s[]には、色々な関数の先頭アドレスが入っており、main もその中の
1つとして入っている。例えば、main に割り振られた識別番号が 5 なら、g_funs[5] で
main の関数アドレスが取得できるようになってるらしい。
次に、n(ms) の時間が経過すると、emscripten_async_resume() が呼び出される。この時点では、
main() 関数は実行を終えてしまっているので、何とかして、もう一度 main() 関数を起動しなおして、
上手く、emscripten_sleep() の直後の行にまで戻りたい。そこで、g_k に残された番号を頼りに、
g_func_s[g_k] の関数を起動しなおす。g_func_s[g_k] には、main 関数の先頭アドレスが入ってい
るので、main 関数を再起動することは出来ることは出来る。
で、main をもう一度起動して、なんとかして、emscripten_sleep() の直後の行にまで進む。
これは、変数「label 」に上手く値を入れることで、何とかしているんだと思う。
この時、スタック・ポインタの値も、元に戻す。
STACKTOP が、スタック・ポインタで、HEAP32[] が、CPU 全体のアドレス空間みたいなもの。
大体、HEAP32[STACKTOP] と書くことで、該当のスタックの近くにアクセスできるらしい。
767デフォルトの名無しさん
2019/01/02(水) 18:50:37.56ID:/JRa6BYE function dynCall_vi(index,a1) {
index = index|0;
a1=a1|0;
FUNCTION_TABLE_vi[index&15](a1|0);
}
var FUNCTION_TABLE_vi = [b2,b2,b2,b2,_main__async_cb,b2,_vfprintf__async_cb,
_fflush__async_cb_2,_fflush__async_cb_1,_fflush__async_cb_3,
_fflush__async_cb,___fflush_unlocked__async_cb,___fflush_unlocked__async_cb_4,
_printf__async_cb,b2,b2];
index = index|0;
a1=a1|0;
FUNCTION_TABLE_vi[index&15](a1|0);
}
var FUNCTION_TABLE_vi = [b2,b2,b2,b2,_main__async_cb,b2,_vfprintf__async_cb,
_fflush__async_cb_2,_fflush__async_cb_1,_fflush__async_cb_3,
_fflush__async_cb,___fflush_unlocked__async_cb,___fflush_unlocked__async_cb_4,
_printf__async_cb,b2,b2];
768デフォルトの名無しさん
2019/01/02(水) 19:52:48.79ID:2lhCREwi 単純にスタックを切り替えて該当処理を再開できるようにしてるだけじゃん
769デフォルトの名無しさん
2019/01/03(木) 00:47:27.22ID:8NinKkm9770デフォルトの名無しさん
2019/01/03(木) 01:00:48.19ID:8NinKkm9 >>768
asm.js は、JSの「subset」とされる。だから、JSでサポートされてないことは、
asm.jsでも本質的には出来ない。JSは、
・sleep()関数が存在せず、wait()関数も今のところサポートされているブラウザが
かなり限定されるので、原則的には、関数の途中で無限ループ以外では停止する
ことは出来ない。
・関数callを使わずに、アセンブラの単純な(大域) jmp のようなことは
出来ない。だから、スタックポインタだけを元に戻しても、命令ポインタ(IP)
を元に戻すことが難しい。
・LLVMでも、原則的にはコードは個別の関数としてだけ作ることが出来て、
関数の外にコードを書くことはおそらく出来ない。
・ただし、LLVMの場合は、longjmp やスタックポインタなどのサポートが
色々と有るのでそのあたりを利用すれば何らかの方法があるかもしれない。
・だから、Emscriptenのemsripten_sleep()は、非常に高度なことをやっており、
「待ちたい時」は、いったんそれまでの呼び出し連鎖の全ての関数を逆に戻って、
「システム」にまで戻る。原則的には、全ての関数は、なんらかのイベント
からスタートしているので、これは、イベント・ハンドラの処理をいったん
終了して、ブラウザに制御を戻すような事になる。
・一定時間が経過すると、設定しておいたresume用のハンドラがシステムによって
起動されるので、そのタイミングで、呼び出し連鎖の全ての関数を再度、
「再起動」する。この仕組みを使わないと「EIP」を元に戻すことが出来ない
ためである。なお、スタックポインタについては、独自のグローバル変数を元に戻す
だけで済む。スタック自体は、巨大な「配列」をCPUのメモリー空間のように
して、スタックポインタに該当する変数を配列の添え字としてアクセスするような
事をしている。
asm.js は、JSの「subset」とされる。だから、JSでサポートされてないことは、
asm.jsでも本質的には出来ない。JSは、
・sleep()関数が存在せず、wait()関数も今のところサポートされているブラウザが
かなり限定されるので、原則的には、関数の途中で無限ループ以外では停止する
ことは出来ない。
・関数callを使わずに、アセンブラの単純な(大域) jmp のようなことは
出来ない。だから、スタックポインタだけを元に戻しても、命令ポインタ(IP)
を元に戻すことが難しい。
・LLVMでも、原則的にはコードは個別の関数としてだけ作ることが出来て、
関数の外にコードを書くことはおそらく出来ない。
・ただし、LLVMの場合は、longjmp やスタックポインタなどのサポートが
色々と有るのでそのあたりを利用すれば何らかの方法があるかもしれない。
・だから、Emscriptenのemsripten_sleep()は、非常に高度なことをやっており、
「待ちたい時」は、いったんそれまでの呼び出し連鎖の全ての関数を逆に戻って、
「システム」にまで戻る。原則的には、全ての関数は、なんらかのイベント
からスタートしているので、これは、イベント・ハンドラの処理をいったん
終了して、ブラウザに制御を戻すような事になる。
・一定時間が経過すると、設定しておいたresume用のハンドラがシステムによって
起動されるので、そのタイミングで、呼び出し連鎖の全ての関数を再度、
「再起動」する。この仕組みを使わないと「EIP」を元に戻すことが出来ない
ためである。なお、スタックポインタについては、独自のグローバル変数を元に戻す
だけで済む。スタック自体は、巨大な「配列」をCPUのメモリー空間のように
して、スタックポインタに該当する変数を配列の添え字としてアクセスするような
事をしている。
771デフォルトの名無しさん
2019/01/03(木) 01:14:16.10ID:8NinKkm9 >>770
[補足]
・データ用のスタックポインタは、単純にSTACKTOPという名称のJSの
グローバル変数によって模倣するとする。
・CPUの全アドレス空間は、HEAP32[] という32BIT整数の配列で
模倣するとする。
・その結果、スタック変数(local auto 変数)は、HEAP32[STACKTOP + ofs/4]
のような形式でアクセスできるようになる。
・通常のCPUでは、関数を呼び出した親のコードのアドレスが、スタック上に保存
されたあと、命令ポインタ IP の値が、呼び出し先の関数の先頭アドレスに修正される。
・JSの関数呼び出しも、ブラウザの内部的な変数に「戻りアドレス」が保存されて、
ある意味ではこれとよく似たことは行われていると考えてよい。
・しかし、このスタックは、HEAP32[] や、STACKTOP とはまったく独立した
ブラウザの内部的な領域にある。
・つまり、この「戻り値アドレス」は、HEAP32[]の中には入ってない。
・だから、STACKTOP を元に戻したところで、CPUの場合のように単純にはいかない。
・その結果、関数呼び出し連鎖を全て cancel する動作と、全て call し直して元に戻す
という動作は、STACKTOP の動作とは別に行わなくてはならない。
・ラベル名やラベル番号を指定した大域 goto 命令みたいなものが有れば話は別なのだが、
多分、JS にはそれがないためである。
[補足]
・データ用のスタックポインタは、単純にSTACKTOPという名称のJSの
グローバル変数によって模倣するとする。
・CPUの全アドレス空間は、HEAP32[] という32BIT整数の配列で
模倣するとする。
・その結果、スタック変数(local auto 変数)は、HEAP32[STACKTOP + ofs/4]
のような形式でアクセスできるようになる。
・通常のCPUでは、関数を呼び出した親のコードのアドレスが、スタック上に保存
されたあと、命令ポインタ IP の値が、呼び出し先の関数の先頭アドレスに修正される。
・JSの関数呼び出しも、ブラウザの内部的な変数に「戻りアドレス」が保存されて、
ある意味ではこれとよく似たことは行われていると考えてよい。
・しかし、このスタックは、HEAP32[] や、STACKTOP とはまったく独立した
ブラウザの内部的な領域にある。
・つまり、この「戻り値アドレス」は、HEAP32[]の中には入ってない。
・だから、STACKTOP を元に戻したところで、CPUの場合のように単純にはいかない。
・その結果、関数呼び出し連鎖を全て cancel する動作と、全て call し直して元に戻す
という動作は、STACKTOP の動作とは別に行わなくてはならない。
・ラベル名やラベル番号を指定した大域 goto 命令みたいなものが有れば話は別なのだが、
多分、JS にはそれがないためである。
772デフォルトの名無しさん
2019/01/03(木) 01:41:07.74ID:8NinKkm9 JSも、全てのコードを一つの関数の中に収めてしまって、
continue label 文や break label 文を使えば、好きなラベルに
jmp 出来る気がする。
もしそうだとすれば、関数の戻り値のラベル番号も、独自スタック
HEAP32[STACKTOP + ofs/4] に保存し、関数 call は、
JS の関数 call を使わずに、continue label / break label
を用い、関数から戻るときは、HEAP32[] から、戻り値の
ラベル番号を取得して、そのラベルに continue label または、
break label を使って jmp すれば、もっとすっきり実装してしまえる
かも知れない。
continue label 文や break label 文を使えば、好きなラベルに
jmp 出来る気がする。
もしそうだとすれば、関数の戻り値のラベル番号も、独自スタック
HEAP32[STACKTOP + ofs/4] に保存し、関数 call は、
JS の関数 call を使わずに、continue label / break label
を用い、関数から戻るときは、HEAP32[] から、戻り値の
ラベル番号を取得して、そのラベルに continue label または、
break label を使って jmp すれば、もっとすっきり実装してしまえる
かも知れない。
773デフォルトの名無しさん
2019/01/03(木) 03:01:45.80ID:fco1PFrc sleepは全然複雑じゃない
CPUを例に出すのは大間違いsleepしてもその間に別の処理が走るわけではないのだから
スタックの切り替えだなんだのは必要ないしやっていない
ただ処理ループを一旦抜けてsetTimeoutで待って再開してるだけ
CPUを例に出すのは大間違いsleepしてもその間に別の処理が走るわけではないのだから
スタックの切り替えだなんだのは必要ないしやっていない
ただ処理ループを一旦抜けてsetTimeoutで待って再開してるだけ
774デフォルトの名無しさん
2019/01/03(木) 05:08:32.78ID:Hc/0Zpss > CPUを例に出すのは大間違いsleepしてもその間に別の処理が走るわけではないのだから
JavaScriptでsleepを実装すると「その間に別の処理が走ってしまうから」
それを妨害するのが大変なんでしょ
JavaScriptでsleepを実装すると「その間に別の処理が走ってしまうから」
それを妨害するのが大変なんでしょ
775デフォルトの名無しさん
2019/01/03(木) 09:28:46.87ID:NOMEwXEr 公式のsleep(2000)の実装例
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function
てかマジでグダグダ言う前にMDNとか読めよドアホ>>770
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function
てかマジでグダグダ言う前にMDNとか読めよドアホ>>770
776デフォルトの名無しさん
2019/01/03(木) 10:15:21.62ID:Hc/0Zpss777デフォルトの名無しさん
2019/01/03(木) 10:25:31.04ID:NOMEwXEr >>776
おまえがsleepを分かってないことは分かった
おまえがsleepを分かってないことは分かった
778デフォルトの名無しさん
2019/01/03(木) 10:48:05.95ID:NOMEwXEr >>770
どうもアホがいて空回りしそうだから先に言っておく
> 原則的には、関数の途中で無限ループ以外では停止する
> ことは出来ない。
これがasync/awaitで構文的に緩和されてる。
勿論それでもシングルスレッドだから、
実行中のコンテキスト(スタック等)の切換は行わなければならないが、
async/awaitをサポートした時点でそれはJSエンジン側の仕事になってる。
emscripten自体はasync/awaitの標準化以前から存在するから、
その部分が結果的にポリフィル的になっているのは致し方ない。
どうもアホがいて空回りしそうだから先に言っておく
> 原則的には、関数の途中で無限ループ以外では停止する
> ことは出来ない。
これがasync/awaitで構文的に緩和されてる。
勿論それでもシングルスレッドだから、
実行中のコンテキスト(スタック等)の切換は行わなければならないが、
async/awaitをサポートした時点でそれはJSエンジン側の仕事になってる。
emscripten自体はasync/awaitの標準化以前から存在するから、
その部分が結果的にポリフィル的になっているのは致し方ない。
779デフォルトの名無しさん
2019/01/03(木) 10:52:03.35ID:fco1PFrc >>774
妨害してないよ
正確にはビジーループに変換されるsleepもあるけど動作には関係ない
なぜなら複数スレッドの処理が実際の1スレッドで動くよう変換されるわけではないから
むしろメインスレッドをブロックしないためにsetTimeoutが使われてる
その間に別のJSが動こうとそれは世界が違う話なので関係ない
妨害してないよ
正確にはビジーループに変換されるsleepもあるけど動作には関係ない
なぜなら複数スレッドの処理が実際の1スレッドで動くよう変換されるわけではないから
むしろメインスレッドをブロックしないためにsetTimeoutが使われてる
その間に別のJSが動こうとそれは世界が違う話なので関係ない
780デフォルトの名無しさん
2019/01/03(木) 11:20:52.45ID:NSJq2GPH >>778
async, await はダメだよ。
停止せずに素通りしてしまうから。
戻ってくることは出来るけど、async 修飾したその関数にだけしか
戻って来れないので、sleep には使えない。
async, await はダメだよ。
停止せずに素通りしてしまうから。
戻ってくることは出来るけど、async 修飾したその関数にだけしか
戻って来れないので、sleep には使えない。
781デフォルトの名無しさん
2019/01/03(木) 11:27:05.78ID:NOMEwXEr782デフォルトの名無しさん
2019/01/03(木) 11:37:39.37ID:NOMEwXEr ただそれ以前に、emscriptenは要するにC++→JS変換してくれるわけで、
sleepも当然サポートされていてそれなりに変換されてるだけだろ。
馬鹿なら馬鹿なりにそれを有り難く使えばいいだけだと思うが。
お前らのオレオレ実装よりは数段マシだと思うぜ。
sleepも当然サポートされていてそれなりに変換されてるだけだろ。
馬鹿なら馬鹿なりにそれを有り難く使えばいいだけだと思うが。
お前らのオレオレ実装よりは数段マシだと思うぜ。
783デフォルトの名無しさん
2019/01/03(木) 15:03:04.04ID:NSJq2GPH 現実世界では、天才だといわれてきたが。
784デフォルトの名無しさん
2019/01/03(木) 16:46:36.63ID:fco1PFrc いくら天才でも正しい前提知識を持ってないんじゃ仕方ない
785デフォルトの名無しさん
2019/01/03(木) 17:47:55.93ID:gRBMU2bw 10000ms指定したらUIが10秒止まるクソ関数が作れるなんて聞いた事ないし
簡単に作れちゃったら困る
簡単に作れちゃったら困る
786デフォルトの名無しさん
2019/01/03(木) 18:21:47.24ID:NOMEwXEr 簡単に作れるけどな
787デフォルトの名無しさん
2019/01/03(木) 18:56:01.52ID:NSJq2GPH788デフォルトの名無しさん
2019/01/03(木) 18:56:36.55ID:NSJq2GPH >>786
なら、作って欲しい。
なら、作って欲しい。
789デフォルトの名無しさん
2019/01/03(木) 19:11:23.28ID:NOMEwXEr ggrks
790デフォルトの名無しさん
2019/01/03(木) 19:19:13.19ID:NSJq2GPH >>789
何度ググっても出てこない。
何度ググっても出てこない。
791デフォルトの名無しさん
2019/01/03(木) 19:40:17.29ID:fco1PFrc どういうときにどう上手く行かないのかを言ってくれないとな
792デフォルトの名無しさん
2019/01/03(木) 20:06:11.56ID:NOMEwXEr そんな知能なさそうだし。
sleepなんて昔から話題としては出尽くしていて、ググレばいくらでも出てくる。
それを出てこないと言いきる辺り、つまりはコードクレクレ君で、コピペプログラマ以下だろ。
(ググったコードについても読めないからコピペすら出来ない)
sleepなんて昔から話題としては出尽くしていて、ググレばいくらでも出てくる。
それを出てこないと言いきる辺り、つまりはコードクレクレ君で、コピペプログラマ以下だろ。
(ググったコードについても読めないからコピペすら出来ない)
793デフォルトの名無しさん
2019/01/03(木) 21:50:51.86ID:eJU/mZfW また数学首席くんが妄想してんの?
いい加減自分が向いてないって気づけば良いのに。
いい加減自分が向いてないって気づけば良いのに。
794デフォルトの名無しさん
2019/01/03(木) 22:48:54.84ID:NOMEwXEr こいつはスルースキル特化型だな。
俺はスルースキル・モンスターと呼んでいるが、最近このタイプは増えてきている。
危険な兆候だよ。
俺はスルースキル・モンスターと呼んでいるが、最近このタイプは増えてきている。
危険な兆候だよ。
795デフォルトの名無しさん
2019/01/03(木) 22:52:45.12ID:Hc/0Zpss じゃあお前の職業は、スキースキル・ハンターで
>>794
「スルースキル・モンスター」を説明してください
「スルースキル・モンスター」を説明してください
797デフォルトの名無しさん
2019/01/04(金) 09:53:39.24ID:GK4v5jr/ canvas の width や、グラフィック描画時の座標指定が、ブラウザの拡大率を
100%にしても、実際の画面のピクセル座標とは違っている。
<meta name="viewport" content="width=device-width, initial-scale=1">
を指定しても駄目だった。ぴったり同じにする方法ある?
100%にしても、実際の画面のピクセル座標とは違っている。
<meta name="viewport" content="width=device-width, initial-scale=1">
を指定しても駄目だった。ぴったり同じにする方法ある?
798デフォルトの名無しさん
2019/01/04(金) 15:04:48.00ID:GK4v5jr/ Chromeで拡大率100%の時、HTML 内の JS で、
value = window.devicePixelRatio;
console.log( "window.devicePixelRatio = " + value );
とすると、1.25 と表示される。
HTML の <div> tag の style を css で width: 100px; などとしたものを
Chrome で 100% の拡大率で表示したものを、ScreenShot をとって調べてみると、
125 dot 程度になっていた。
使用OSは、Win7 で、確か、文字を大きめに表示する設定にしてある。
value = window.devicePixelRatio;
console.log( "window.devicePixelRatio = " + value );
とすると、1.25 と表示される。
HTML の <div> tag の style を css で width: 100px; などとしたものを
Chrome で 100% の拡大率で表示したものを、ScreenShot をとって調べてみると、
125 dot 程度になっていた。
使用OSは、Win7 で、確か、文字を大きめに表示する設定にしてある。
799デフォルトの名無しさん
2019/01/04(金) 15:50:35.77ID:XP0z3+7N canvasの内部的な座標とcanvasのelement的な座標の比で調整するのじゃダメなんかい
800デフォルトの名無しさん
2019/01/04(金) 16:11:48.10ID:fcxyg7i+ そもそもピクセルが正方形とも限らないわけで
デバイス、ドライバ、OSが順に抽象化したあと更にブラウザが抽象化したものが
Webアプリからは見えるのでそこをどうこうしようとするのはナンセンス
それでもどうしてもどうにかしたいというのなら
devicePixelRatioやrenderedPixelWidthを元にその文だけCanvasをCSSで縮小してみるとか
デバイス、ドライバ、OSが順に抽象化したあと更にブラウザが抽象化したものが
Webアプリからは見えるのでそこをどうこうしようとするのはナンセンス
それでもどうしてもどうにかしたいというのなら
devicePixelRatioやrenderedPixelWidthを元にその文だけCanvasをCSSで縮小してみるとか
801デフォルトの名無しさん
2019/01/04(金) 16:50:58.90ID:GK4v5jr/ 色々試して、以下のようにすると、ほぼ 1px = 物理 1 pixel になった。
こんな方法でよい?
<style>
#div0 {
transform: scale(0.8); // 1.0 / 1.25
transform-origin: top left;
}
</style>
<div id="div0">
実際に表示したいタグ達
</div>
こんな方法でよい?
<style>
#div0 {
transform: scale(0.8); // 1.0 / 1.25
transform-origin: top left;
}
</style>
<div id="div0">
実際に表示したいタグ達
</div>
802デフォルトの名無しさん
2019/01/05(土) 01:10:26.21ID:A90WoquU それでいいけど
単純にwidthを表示の1.25倍にしたらどうなるのかな
単純にwidthを表示の1.25倍にしたらどうなるのかな
803デフォルトの名無しさん
2019/01/05(土) 08:40:55.94ID:7vIhmJH5 canvas の putImageData() で、引数が7つのタイプの場合の引数の意味が分からない。
context.putImageData(imgData,x,y,dirtyX,dirtyY,dirtyWidth,dirtyHeight);
http://www.webtech360.com/detail/html5-canvas-draw-pictures-and-manipulate-pixels-3555.html
↑の図で合ってる? 日本人の感覚だと、この図では、「dirtyAaaa」という言葉
と合ってるようには思えないんだけど。
context.putImageData(imgData,x,y,dirtyX,dirtyY,dirtyWidth,dirtyHeight);
http://www.webtech360.com/detail/html5-canvas-draw-pictures-and-manipulate-pixels-3555.html
↑の図で合ってる? 日本人の感覚だと、この図では、「dirtyAaaa」という言葉
と合ってるようには思えないんだけど。
804デフォルトの名無しさん
2019/01/05(土) 09:24:30.49ID:7vIhmJH5 >>802
実験してみると、
HTML tag の width と、css(style) の width の二種類の意味が違っていて、
<canvas width=aaa style="width:bbb;">
とした場合、
aaa = 論理的な横方向のドット数;
bbb = 物理的な横方向のドット数;
の意味になるらしく、canvas の色々な描画関数で渡す x 座標を log_x とすると、
原則的には、
phys_x = canvas_phys_left + (log_x / aaa * bbb);
のように座標変換された後に画面に表示されるらしい。
JavaScript だと、
canvas = (getElementById("ID名") などで DOM 要素を取得);
canvas.width = 論理的な横方向のドット数;
canvas.style.width = 物理的な横方向のドット数;
と書けるようだ。
ただし、>>801 のやり方だと、canvas の左上の座標が(0,0)で
ない場合にも、canvas の左上の位置を自動的に調整(縮尺)してくれるが、
今回のやり方だと、それは自分で調整しなくてはならない。
実験してみると、
HTML tag の width と、css(style) の width の二種類の意味が違っていて、
<canvas width=aaa style="width:bbb;">
とした場合、
aaa = 論理的な横方向のドット数;
bbb = 物理的な横方向のドット数;
の意味になるらしく、canvas の色々な描画関数で渡す x 座標を log_x とすると、
原則的には、
phys_x = canvas_phys_left + (log_x / aaa * bbb);
のように座標変換された後に画面に表示されるらしい。
JavaScript だと、
canvas = (getElementById("ID名") などで DOM 要素を取得);
canvas.width = 論理的な横方向のドット数;
canvas.style.width = 物理的な横方向のドット数;
と書けるようだ。
ただし、>>801 のやり方だと、canvas の左上の座標が(0,0)で
ない場合にも、canvas の左上の位置を自動的に調整(縮尺)してくれるが、
今回のやり方だと、それは自分で調整しなくてはならない。
805デフォルトの名無しさん
2019/01/05(土) 09:26:31.72ID:7vIhmJH5 >>804
あ、確か逆さまだったと思う。
だから、
誤: <canvas width=aaa style="width:bbb;">
正: <canvas width=bbb style="width:aaa;">
が確か正しい。
あ、確か逆さまだったと思う。
だから、
誤: <canvas width=aaa style="width:bbb;">
正: <canvas width=bbb style="width:aaa;">
が確か正しい。
806デフォルトの名無しさん
2019/01/05(土) 09:27:38.04ID:7vIhmJH5 >>805
だから、確か、
canvas.width = 物理的な横方向のドット数;
canvas.style.width = 論理的な横方向のドット数;
だったと思う。
だから、確か、
canvas.width = 物理的な横方向のドット数;
canvas.style.width = 論理的な横方向のドット数;
だったと思う。
807デフォルトの名無しさん
2019/01/06(日) 18:47:08.41ID:RK31I1jj つ チラ裏
808デフォルトの名無しさん
2019/01/06(日) 22:56:13.91ID:EEI9V+3n webページでフォーム入力した項目を確認のために埋め込まれたような形で一旦表示させたいんですけど、こういうのはJavaScriptで実装するんですかね?
どうググったら、ここら辺の情報取得できますかね?
自分、pythonしかできなくて、フロントエンド的なところは全然わからないです。。。
どうググったら、ここら辺の情報取得できますかね?
自分、pythonしかできなくて、フロントエンド的なところは全然わからないです。。。
809デフォルトの名無しさん
2019/01/06(日) 23:16:51.05ID:QwoLvlkS javascript使う
vue.jsとか使えば楽
vue.jsとか使えば楽
810デフォルトの名無しさん
2019/01/06(日) 23:31:44.52ID:pcr+etW3811デフォルトの名無しさん
2019/01/06(日) 23:38:17.77ID:TbUKTpaD812デフォルトの名無しさん
2019/01/06(日) 23:53:49.41ID:QwoLvlkS フロントでvaildateしてユーザーに伝えたいという意味と解釈したけど違った?
■ このスレッドは過去ログ倉庫に格納されています
