光クロスになった

引っ越ししてインターネット回線が光クロスになった。

ISPインターリンク(固定IP)で契約して、ルータにはRTX1300で設定は次をそのまま使っている。

www.rtpro.yamaha.co.jp

10Gbpsらしからぬ結果なのは、ルータと端末間は1Gbpsだからです。

若干レイテンシが高い(前は3~6ぐらいだった気がする)けど、体感さほど変わっていない。(逆に言えば別に10Gbpsでなくても・・・ということに) スピードテストでは安定してスループットが出ている印象。

IPv6環境を整えたり、10GbpsなスイッチングハブNICを買いたいところ。

なおインターリンクは帯域制限を掛けてくる場合があるらしいので、それなら安くなるenひかりに乗り換えようかとも考えている(月2000円以上安くなるっぽいし、VNEも選べる。ただアフィリエイト周りの宣伝が多くてその辺りが不安)

引っ越しについては色々書きたいことがあるけどまとまっていない。 おうち探し~引っ越し編とインターネット環境の確保の仕方辺りを書きたい。要約すればゆとりをもって引っ越しの計画を立てましょうという感じになるけど。

NTTとの契約と利用できるまでの罠

要約: 工事を伴う場合は工事後に即座に使えない場合がある。特にISPの契約を別で行う場合など。NTT側のシステムの都合上、工事したという反映が約1日遅れるので、ISPの連携時に満たすべき状態になっておらず契約が進められないことがあった。ちゃんとNTTに念押しするなどして確認しましょう。

配線工事が終わってインターリンクと契約しようとしたら以下の表示となった(なお配線工事前の2日前とかでも同様)

NTT側で処理中のオーダーが完了していません。 お時間を置いて再度お申し込みいただくか、NTT 116にお問い合わせください。

これの意味が全く分からないが、どうやら工事済みで利用できる状態になっていないとこの表示になるらしかった。

NTTで配線工事するケースと既に引き込み済みで工事不要なケースがある。配線工事は電柱から頑張って引き込むか、既にMDF(Main Distribution Frame)が整備されている場合はそこから各部屋までの引き込む工事の2つがある。

そして配線工事が行われた場合は、その日1日はNTTのシステム上のステータスが古いままみたいな状態らしく、その状態でインターリンクから契約しようとしても上記のような結果となり処理が進められなくなる。開通したらできると思っていたのでショックだった。

教訓としては必ず契約時にどういった工事が行われるかを教えてくれるのでちゃんと聞くこと。NTTはどのマンションではどういう工事ができるか把握されていることが多い。例えば建物の設備で電話線などの配管がちゃんとあるかどうかとか、オーナーの確認が必要かとか、NTT側の裁量で作業できる建物かどうかとか。

ともかく、立ち合いの工事が必要な時はその日1日はISPの契約はできないと思ったほうが良い。そういえばNTTとの契約時にISPAsahiネットを紹介してくれたが、ここで一緒に契約しておけば工事後からすぐ使えるのだろうか?(なおAsahiネットでは光クロスだと固定IPが使えなさそうだったことから、インターリンクにしようとしていた)

あと裏技でフレッツ光の申し込みはまだ「契約」ではないので、賃貸の契約前に色々聞きたい時には申し込んで電話で聞くという技が使える。見ての通りあまり褒められたやり方ではないのだけど。この話は物件探しの時の話としてそのうち書こうと思う。

Tampermonkeyでwindow.fetchを上書きしてリクエストヘッダやレスポンスを盗み見る

Tampermonkeyを使ってあるWebサイトがfetchでやりとりしている内容を使って色々やりたかったので。

制約は色々あって、リクエストの内容は見ないし(頑張れば何とかできそうだけど)、レスポンスデータをすべてメモリに展開するのでメモリによろしくないし、ストリームのようにデータをちょろちょろ返すやつでは使えないし、エラー周りは未検証(でも余計なことをしてないので多分同じように動く)だし完全に自分用。でもまぁ汎用的に使えそうなスニペットなのでここに貼っておく。

デモ

https://jsfiddle.net/smgj9dxr/1/

コード

やっていることはwindow.fetchを上書きしておくのと、レスポンスの結果をメモリにため込んでおき、必要なところで都度Responseを作って返すだけ。

// window.fetchを上書き。他のスクリプトに負けないように先んじて行っておく必要がある
const originalFetch = window.fetch;
window.fetch = function(...args) {
  // fetch(url, options) で渡ってくるのでurlを得る
  const url = args[0];

  // 特定のURLだけ処理したい場合はここで普通に返す
  if(!url.endsWith("/get")){
    return  originalFetch(...args);
  }

  // リクエストしてarrayBufferでメモリにため込むようにしておく
  const p = originalFetch(...args).then(res => Promise.all([
    res.arrayBuffer(),
    res.status,
    res.statusText,
    res.headers
  ]));

  // responseを複製する関数
  const dupResponse = ([ab, status, statusText, headers]) => {
    const stream = new ReadableStream({
      start(controller) {
        controller.enqueue(new Uint8Array(ab));
        controller.close();
      }
    });
    return new Response(stream, {
      status,
      statusText,
      headers,
    });
  };

  // 独自で何かしたい時はこんな感じで複製したレスポンスを処理する
  p.then(dupResponse).then(async (res) => {
     console.log(await res.text());
  });

  // 複製したレスポンスを返す
  return p.then(dupResponse);
};

// 何の変哲もないただのfetchを使ったコード(上記のコードが無くても動く)
(async function() {
  const res = await fetch("https://httpbin.org/get");
  console.log(await res.text());
})();

最初はResponseをProxyするか―とか考えてたけど、ProxyはResponseとかには使えないっぽかった。Proxyされたresに対してres.textとすると、プロキシを介して元のtextメソッドを返せるのに、実際にres.text()と呼び出すとFailed to execute 'text' on 'Response': Illegal invocationといったエラーになる(Chromeで確認。firefoxもメッセージは全然違うが同様)

Response作れるんだ、という発見があった。ReadableStreamを渡せとか、Uint8Arrayにしろとか色々面倒な感じだったけど。

XMLHttpRequestは必要になったら書く。

Realforce R3の無線モデル(R3HC23)を使った感想

2022/11/06ぐらいから使い始めてしばらく経ち、概ね使用感がわかってきたので書いていく。アフィリエイトは無いです。

  • 使用環境
  • 良いところ
    • ケーブルのわずらわしさがない
    • 接続の切り替えがキーボードでできて便利
    • キーマッピング便利
    • 電池の持ちは普通
  • 気になる
    • 入力遅延が気になる
    • Bluetooth接続のレシーバーと相性があるのか、反応が悪くなったり入力しっぱなしになる
    • スリープ時からの立ち上がりに1秒ぐらいかかる
続きを読む