Hatena::Groupptech

ぷちてく RSSフィード

Archive
 
ProfileProfile

2017-03-01

ネストした同イベントハンドラ代入式

05:15

単純に外側のハンドラ内で再度イベントが発生、内側のハンドラが呼ばれる、という構造だった。

記事あげてから、id:a-kuma3 さんがコメントしてくれて気付いた。

2017/03/02 08:51 by a-kuma3

ありがたい。

ハマりどころ

外側のハンドラの最後で readAsText() 呼んでるところで load 発生するの見落としてた。

FileReaderreadAs*() 完了時全般で load 発生するの、自分でMDNのリンク貼ったのに。

  • 眠気を感じる時や疲労時はコードの運転を控えましょう
  • 余裕を持ってコードの「かもしれない運転」を行いましょう

というのがぼくからの言葉です。長いので謎解きは新しい記事にした。

ではハマってる様子をどうぞ。


混乱避け・拡張性とか考えて普段 receiver.addEventListener() しか使わないのだけど、receiver.onload = ... が理解超えた挙動する。詳しい人教えて欲しい。JavaScriptの話です。

via

readerFileReader

現在のドキュメントを文字コード自動判定で読み直す - Hatena::Let

これ outer -> inner 走るんだけどマジか…

reader.onload = function() {
  // outer ...
  reader.onload = function() {
    // inner ...
  };
};
これ outer -> inner 走るんだけどマジか… reader.... - http://let.hatelabo.jp/unarist/let/hLHWv4uKv-of - のろまんば - はてなハイク

上みたいな感じで onload = function(){} がネストしてて両方順番に走る。

id:unarist さんが書いたこのリビジョン。

console.log 入れて確かめた。

  reader.onload = function() {
    console.log('outer');
    //  ...
    reader.onload = function() {
      console.log('inner');
      //  ...
    };
  };
// -> outer
// -> inner

アイエエエ!?」「ネスト!?ネストナンデ!?」

うーん、+= みたいになるの? C#delegate w/ 演算子オーバーライドみたいな。

再現失敗

手っ取り早くXHRでテスト書いたところ、理解は出来るけど再現出来なかった。

xhr = new XMHttpRequest();
xhr.open('GET', location.href);
xhr.onload = () => {
  console.log('outer');
  xhr.onload = () => { console.log('inner'); };
};
xhr.send();
// -> outer

これはこれで一瞬ビックリだけど、 onload 入った時に発火終わってるって考えると普通に見える。

xhr = new XMLHttpRequest();
xhr.open('GET', location.href);
xhr.addEventListener('load', () => {
  console.log('outer');
  xhr.addEventListener('load', () => { console.log('inner'); });
});
xhr.send();
// -> outer

addEventListener() も同じ。

FileReader が特別なようには見えないんだけどなー。

「オメーのコードが間違ってんだよハゲ!」とか、「テメーの目はフシアナか?どう読んでんだよアアン!?」とか、「コンコンコン、もしもーし?脳みそ入ってますかー?」みたいなのも助かります。


APPENDIX

環境
$ apt-cache policy chromium-browser
chromium-browser:                             
  Installed: 56.0.2924.76-0ubuntu0.16.04.1268 
  Candidate: 56.0.2924.76-0ubuntu0.16.04.1268 
Chromium56.0.2924.76 (Developer Build) Built on Ubuntu , running on Ubuntu 16.04 (32-bit)
Revision314da7cc1e56fc9fa9271bac2b029922feb4b6f2
OSLinux
JavaScriptV8 5.6.326.42
Flash24.0.0.221 /usr/lib/adobe-flashplugin/libpepflashplayer.so
User AgentMozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/56.0.2924.76 Chrome/56.0.2924.76 Safari/537.36
Command Line/usr/lib/chromium-browser/chromium-browser --ppapi-flash-path=/usr/lib/adobe-flashplugin/libpepflashplayer.so --ppapi-flash-version=24.0.0.221 --enable-pinch --flag-switches-begin --overscroll-history-navigation=0 --disable-smooth-scrolling --disable-features=CredentialManagementAPI,MaterialDesignHistory --flag-switches-end
Executable Path/usr/lib/chromium-browser/chromium-browser
Profile Path/home/noro/.config/chromium/Default

> chrome://version/

フラットな時

普通のやつの挙動です。

xhr = new XMLHttpRequest();
xhr.open('GET', location.href);
xhr.onload = () => console.log('#1');
xhr.onload = () => console.log('#2');
xhr.send();
// -> #2

最後に代入したやつが出る。そりゃそうですね。

xhr = new XMLHttpRequest();
xhr.open('GET', location.href);
xhr.addEventListener('load', () => console.log('#1'));
xhr.addEventListener('load', () => console.log('#2'));
xhr.send();
// -> #1
// -> #2

くっつけただけ全部出る。そりゃそうですね。

a-kuma3a-kuma32017/03/02 08:51ハンドラの中で、もう一度 発火しているから。

const reader = new FileReader();
reader.onload = function() { <-- (*1)
...
reader.onload = function() { <-- (*2)
...
};
reader.readAsText(xhr.response, enc); (*2)
};
reader.readAsArrayBuffer(xhr.response); (*1)

noromanbanoromanba2017/03/03 03:45なるほど!

トラックバック - http://ptech.g.hatena.ne.jp/noromanba/20170301

2017-02-10

Re: id:pacochi

06:54

最近 Hatena::Let に人が戻ってきたり、新規参加の人も増えたりしてうれしい。pacochi さんは昔から Let で見かけてて面白いの書くなーと思ってた人で、最近ブログに気付いて面白そうな記事が沢山あった。

ぼくは読みたいブログは古い順に消化する習性があるのだけど、大体今日の他の記事内容見てもらえばわかる通りの体たらくなので、まだ全然ちゃんと読めてない。仕方ないのでナナメ読んで気になった直近のやつ、急ぎ足で殴り返信としたい。

はてなスターは宇宙である

特性js 読める人だけわかって欲しいのでコードだけ。こういうのがあってそれでやってます。SHA-1廃止で止まらなかったのは意外。

どこでも存在するし、時間経つとエントロピー増大して消せなくなる。宇宙。

実際手元のコード違うけど、オンライン上に置いてない。

ここではない場所で js わかんない人にはてなスター系でうるさく言われた経験あって、多分面倒になったのが理由です。Beautify して下さい。

javascript:(()=>{const%20canonical=()=>{return(document.querySelector('head%20meta[property=%22og:url%22][content]')||{}).content||(document.querySelector('head%20link[rel=%22canonical%22][href]')||{}).href||location.href;};const%20canon=canonical();window.open('http://s.hatena.ne.jp/mobile/entry?uri='+encodeURIComponent(canon));})();

js、同じく MIT License です。

このブログでも過去に仕様を調べたので検索すると暇つぶしになるかもしれません。仕様も良くわからない感じになってたりするけど宇宙なので仕方ない。

検索出ないの

なんかスターの奴も出なかったんで嫌われてるんですかね。

Captcha・No CAPTCHA Recaptcha 出まくるしbot扱いされてそうです。

マトモな検索エンジンご利用下さい。

こっちなら出ます。


ぼくはエゴサーチしないので、ブログ読んでて自分のid出てきた時死ぬほどびっくりしました。光栄です。

「コミュニケーションなんかしたくない」

06:54

大体字面通りで、良いコミュニケーションと考えてるのが多分世間乖離してる。

  • コードだけでやり取り済めば最高
  • 記事だけでやり取りするのも良い
  • リアクションコストは低いのがいい
  • 文字コメントは最高にダサい方法
    • 返信コストがダルい

「push通知」という言葉が出来る前から通知は最悪の方法だと思っていて、相手が見たい時に初めて気づく、みたいな能動スタイルが良いと感じてる。

上に書いた理由が SNS をやらない一因になってるし、メールがここまで残ったのもWebメール主体になって、割り込み阻害する事が少なくなったからだと勝手に思ってる。

idコール/コメント殴り

とは言うものの、困ったことに世間トラックバック(TB)のないはてなブログを使う人か脱出した人が多勢になってしまって、TB で記事返信する事が難しいので仕方なくidコールするか、コメントしなければ気付いてもらえない。

「殴り」というのは別にマサカリを振り回したいわけでなく、人に割り込むのが嫌と言ってるやつがそういう事をせざるを得ないので自嘲言葉として使ってる。

id:jkondo は当初「トラックバックを必要とする人はいませんでした」的な発言をしていたけど、結局言及通知が付いた。そりゃそうだ。そんな世界はてなじゃないし。困ったことにはてなブログ間でしか通用しないのと、ぼくに使う予定が無いので殴るしか無い。

重い上にはてなダイアリーの要件も満たしてないもの再発明してるのは完全に無駄と思っている。そろそろ拡張はてな記法実装されましたか。まだですか。そうですね。


正確な意図覚えてないけど、元々有名なロックスターエンジニアが言ってた気がするので「」付きにした。

2016 - Early 2017 近況

06:54

色々あって、時間が取れない・喫緊のタスクが溜まっていて、モバイルからハイクにゴミをまき散らす位しか出来ないでいる。知性が低下してるのを感じる。コードじっくり読む時間も余裕もない。

元々ゴミみたいなコメントか闇を投げるかやむを得ずidコールする用なのでいきなりすさんだ、とかではない。つぶやきは元来下らないものなので正しい使い方ではあるけど、気分を害す人はいそう。

今日の記事も雑な感じで書くしか無いので、どうしてもと言う人は上述のゴミ溜めTL覗くと何考えてるか少し把握出来るかもしれない。

文書くべきか

元々ブログは自分のワーキングセットを出して後で見返す用に使うことが多い。今は記事出す時間が無いので手元にURL溜めてるのだけど、

$ ls *.session | wc -l
44
$ cat *.session | wc -l
1427

溜まりすぎ。そもそもここが、しっかり書いた記事だけ置く場所、みたいになってきてしまっていて、そういう期待があるのが若干つらい。昔みたいに短いポエム書いた方がゴミTL出すよりマシかなと思ってる。

トラックバック - http://ptech.g.hatena.ne.jp/noromanba/20170210

2016-12-31

2016

23:37

  • HDDの故障率が400%を超えています!」
    • 現在進行形、落ちついたら顛末書きたい
  • 32bitマシンのコアOSUbuntuからLubuntuに移行した
    • Screen内Bash9枚で色々とインジケータ込みでも250-280MBとメモリ消費半分位に
    • 日本語情報少ないので固有バグ対処とか書きたい
  • 日本語を積極的に捨てた
    • 英語UI・en-US・検索も英語へ
    • 質の高い情報がすぐ得られて便利
  • mpv依存性が進行した
    • かなり使い込んでるけどこれも具体情報がないので記事にしたい
  • Windows 10/Windows 7 のセットアップは地獄

ディスクが前述の感じなので一年の2/3位がUSBペンドライブでOS動かしてる感じだった。I/O遅いデバイスとかディスク周りのノウハウが大分溜まったので放出していきたい。


from mail

トラックバック - http://ptech.g.hatena.ne.jp/noromanba/20161231

2016-11-11

Firefox使うだけでMozilla関係者か番記者になれる

06:56

知らない間にMozillaメディア関係者になってた。恐縮です。

f:id:noromanba:20161111055828p:image

あなたは Firefoxプレスリリース版をお使いです。

Firefox をダウンロード ? 自由なウェブブラウザー ? Mozilla

「プレリリース版」 という新エディションを授かる。めでたい。

日本語限定

f:id:noromanba:20161111055916p:image

You’re using a pre-release version of Firefox.

Download Firefox ? Free Web Browser ? Mozilla

そりゃそうだ。言語設定 en-US, en しか指定してないのに日本語出してくるし完全にMozillaが悪い。詐欺!

悲しくなるのでフィードバックフォームくらい置いて下さい。


official latest stable: 49.0.2

Environment

Name Firefox
Version 50.0
Build ID 20161107155450
User Agent Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:50.0) Gecko/20100101 Firefox/50.0

> about:support

トラックバック - http://ptech.g.hatena.ne.jp/noromanba/20161111

2016-10-08

トラックバック - http://ptech.g.hatena.ne.jp/noromanba/20161008

Copylight (c) noromanba 2012-2017