2022年12月の日記です

目次

06日 iPhone の Javascript で Howler.js を使う
12日 Windows 11 の 22H2 アップデートでネットがつながらなくなる
26日 SSL 証明書期限切れ
27日 ONU 不調の顛末


iPhone の Javascript で Howler.js を使う  2022-12-06 11:14:34  コンピュータ

▲目次へ ⇒この記事のURL

仕事で作っていたプログラムで、スマホページから、Javascript で、音を出したくなった。


その仕事の中で、PC から音を出すのには Howler.js というライブラリを使用していたので、そのまま使ってみる。


…Android では動くのだが、iPhone で動かない。


まぁ、こういうことはよくある。ネットで情報収集。

最初にユーザー操作で音を出さないと音が出ないよ、と書いたページ多数。


ずっと昔は、Javascript から自由にメディア再生できた。

そうしたら、開いた瞬間に問答無用で音楽を流したり、広告動画を流したりするページが多数あり、多くの人が迷惑していた。


そんなわけで、今の Javascript では、「ユーザーの操作により起動されたプログラム」の中でメディア再生を行う必要がある。

一度再生させれば、ユーザーの許可を得たことになり、後は好きなタイミングで再生できる。


これを解説したページは、その移行期に書かれたのだろうが、今回の問題はそれではない。




2020 年頃の記事で、iPhone のアップデート時にバグがあって Audio 再生がうまく行かないよ、というのがあった。

これはのちにバグ修正されたらしい。


2022 年2月ごろの記事で、iPhone のアップデート時にバグがあって Audio再生がうまく行かないよ、というのがあった。

これはのちにバグ修正されたらしい。



…別々のバグだが、iPhone では時々こういうことが起きるようだ。


2022年8月ごろの Howler.js コミュニティ掲示板の書き込みで、iPhone でうまく音が鳴らない、というのがあった。

html5audio を有効にすると鳴る、という対処法が書かれていたが、これは目的のものとは違う。


html5audio は、本当に自由に音を鳴らせる仕組みだ。

その一方で、非常に処理が重い。単に音を再生したいだけなら、この仕組みを使うのは違う。


しかし、Howler.js は音を鳴らすライブラリなので、この仕組みに対応していて、有効にすればそちらが使われる。


試してみたら確かに音は出たが、それ以外の処理に支障が出るほど重い処理になった。




そんなこんなで苦労したが、ここらへんで答えを書こう。


近年の iOS Sagari のアップデートで、メディア再生の「許可」の方法が変わったらしい。


以前は、先に書いた通り、ユーザーの操作の際にメディア再生を行えば、それ以降の再生も許可された。


Howler.js ではこの仕組みに自動で対応していて、ライブラリを読み込んだだけで、「画面のどこかをクリックしただけで動くプログラム」を仕込んでくれる。


このプログラムの中でメディア再生を行えば、以降のメディア再生は自由になるのだ。

前提として、一度画面に触ってもらう必要はあるのだが、それはユーザーのコンテンツでうまく導いてやる必要がある



さて、この「Howler.js が自動で行うメディア再生」は、Howler.js 自体の中に「無音」の音が仕込まれていて、それで行う仕組みだった。


そして、iOS はメディア再生の許可方法を変えた。

今後は、「ユーザーが許可したメディアファイル」のみが、自由に再生可能になる。


ここで、Howler.js ライブラリを使って出したい「音」のファイルと、Howler.js が自動で行う「無音」のファイルは、当然ながら違うものなのだ。

結果として、ライブラリ使用者が鳴らしたい音は、iOS ではどう頑張っても鳴ってくれない。




回避方法。

Howler.js に鳴らすファイルの URL を指示するはずだが、それとは別に、audio タグで同じ URL のファイルを読み込もう。


そして、ユーザー操作で、この audio タグのファイルを play し、即座に pause する。

さらに、Howler.js を使い何らかの音を出す。


なんかややこしいけど、これで以降は自由に音を出すことができる。


audio タグと Howler.js の2重に「音を出す仕組み」を用意する形だが、使うのは同じファイルなので、両方に許可が出るようだ。



しかし、両方で音を出す指示をしないと、正しく音が出てくれない。片側でも良さそうなものなのに。

これはなぜかわからない。


Howler.js には「サウンドスプライト」という機能があり、複数の短い音を1つのファイルにして、その「任意の部分」だけを再生することで、短い音を再生できる。


本来は、多数のサウンドファイルを1つにまとめてロードのオーバーヘッドを減らすのが目的なのだが、全部で「一つのファイル」なので、このファイルに対して許可を得れば全部の音を鳴らすことができる。


audio タグ側を play して pause したのは、全部の音を出すのを避けるためだ。

また、audio タグを準備するのに Howler.js も使用するのは、サウンドスプライト機能が便利だからだ。



なんだか無駄が多くて不格好な解決方法なのだけど、とりあえずはこれで iPhone でも Howler.js が使える。


▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

別年同日の日記

07年 妻の誕生日

10年 誕生日に必要なもの

12年 Nexus 7 買った


申し訳ありませんが、現在意見投稿をできない状態にしています

Windows 11 の 22H2 アップデートでネットがつながらなくなる  2022-12-12 15:25:54  コンピュータ

▲目次へ ⇒この記事のURL

表題の通りの不具合の修正方法なのだけど、同じ症状で困っていて解決方法を探している人は、行の頭が ▼ で始まる部分まで読み飛ばしてください。


今回書きたいのは「解決方法」ではなくて、その過程が面白かった記録なので。




長女が、PC がネットワークに繋がらなくなったと言って助けを求めてきた。


僕の前にすでに妻に相談していたらしいのだが、妻が解決できなかったので僕に回ってきた。

妻もそれなりに PC の知識はあるのだが、そこで解決できていないのだから、初心者向けのトラブルではない。


最初は WiFi の設定が OFF になっただけでは、とか思ったのだが、そんな簡単ではなかった。

見た目の上では、「WiFi 接続はできるが、その WiFi にネットワーク接続がないと言われる」状態。



リブートしても治らないので、いろいろと情報収集。

少し前に Windows 11 のアップデートである、22H2 がインストールされていた。


しかし、話を聞くと、インストール直後は問題なくネットワーク接続できていたという。

どこかでおかしくなったのだろうが、それが何かわからない。



22H2 でネットがつながらなくなった…というキーワードで google 検索。

しかし、20H2 でネットがつながらくなった、という情報が多数見つかるが、22H2 の話はない。


また、20H2 の時の対処法を試してみようとしても、最初から違う。

20H2 の時は「ネットワークのプロパティを開き、接続をプライベートに」が初手だったようなのだけど、ネットワークが接続できていないためか、プライベートかパブリックかの設定選択肢が表示されない。



もしかしたら 22H2 でこの設定なくなった?

とまで思ったのだけど、後でわかるがそうではなかったようだ。


ネットワークがプライベートかパブリックかは、「ネットワーク」に属する設定なので、たぶんネットワークに接続できない状態では表示されないのだ。




しばらく悩んで、問題の切り分けを試みる。


WiFi にはつながらないようなので、自分の携帯電話に Bluetooth テザリングしてみる。

ちなみに、携帯電話は WiFi に繋がっているので、通信料金がかかるようなことは無い。


これは、問題なくネットワーク接続できた。

ということは、WiFi 関連がおかしくて、インターネット接続自体はおかしくないのだろう。


WiFi のドライバを一度削除すると、次の起動時に勝手に再インストールする、という情報を見つけるが、ネットにつないでいない状態でインストールができるのかよくわからないので保留する。

(多分、システムディスク内のドライバから適切なものを選ぶだけだと思うが)


Bluetooth のテザリングで、通信のどのレベルの階層が使われているのかわからない。


インターネットの通信は、いろいろなレベルで階層化されており、状況に応じて交換可能だ。

たとえば、WiFi はイーサネットケーブルの代わりを行うものだ。


では、Bluetooth テザリングも、イーサネットケーブルの変わりなのか?

それとも、もっと上の IP プロトコルの代わりくらいまで行っているのか?


問題を切り分けたいと思ったのに、その切り分けの範囲がわからず悩む。




ここで少し、ネットワーク知識のお話を。


インターネットで通信を行うとき、この通信は非常に多くの「層」を経由して行われている。


一般的には7層あることにされているが、これは後付けで整理したものだ。

本当は、もっとぐちゃぐちゃとして、混然一体として、綺麗に切り分けられるものでもない。


しかし、この切り分けをうまく使えば、層ごとに別のものに交換が可能だ。



一番下は「物理層」。昔は、ネットに接続すると言えば、イーサネットケーブルを使うものだった。

しかし、電話回線を使うこともできたし、今では WiFi もある。

携帯電話の電波を使ってネット接続するのも普通のことだ。


全然特性が違うのに、どれを使っても同じように通信できるのは、物理層が「どのようなことができればよいか」が規定されていて、その規定を守れば交換可能だからだ。


物理層の上には、どのように送受信を行うか、という規定を行っている、ネットワーク層がある。

その上には、ネットワーク層を使ってどのように「意味のあるデータのまとまり」を送受信するか、という規定を行う、トランスポート層がある。


これより上は、クライアント・サーバ間の取り決めだ。セッション層という。

例えば、Web ブラウザで Web サーバにアクセスする、というのはセッション層だ。


先に Bluetooth のテザリングで、Web アクセスできるのは確認した。

これは、セッション層より上は問題ないらしい、という問題の切り分けを行ったことになる。


しかし、その下のどこがおかしいのかは、よくわからなかった。




情報を求めて、Windows の設定画面やドライバ画面をいろいろ見て回る。


どこだったか忘れたが、「ネットに接続できていない」にもかかわらず、Windows マシン自身の IP アドレス表示が行われた。

(ネットワーク設定画面には表示されていない。ネットに接続できておらず、IP アドレスはないためだ)


この IP アドレスが、我が家のローカルネットワークのものではなかった。



IP アドレスがネットワークのものと違う場合、そのマシンはネットワークに「物理的には接続している」にもかかわらず、トランスポート層での通信を行うことができない。


通常、IP アドレスは自動設定されるのだが、うまく行っていないのか?

と考え、WiFi 接続設定の画面で、ネットワークの設定を手動で行ってみる。


マシンに仮に固定 IP アドレスを設定し、ネットマスクとデフォルトゲートウェイとプライマリ DNS サーバを設定。


今度は、無事ネットワークに接続できた。




どこに問題があるかは判明した。DHCP だ。


先ほど、ネットワーク階層のどこに問題があるかを切り分けようとしていて悩んでいたのだが、DHCP はそれらの階層とは違うところにある。


あえて言うならばトランスポート層なのかなぁ。トランスポート層の設定を自動的に行ってくれる仕組みなので。

しかし、これは「設定を行う」という仕組みで合って、トラブルが起きてもトランスポート層のトラブルというわけではないのだ。


先ほど書いたが、ネットワークは7階層から成っている。

そして、インターネットにも使用されるトランスポート層である、「インターネットプロトコル」接続では、設定がなかなかにややこしい。


もっと厳密にいえば、インターネットプロトコル ver 4 、略して IPv4 の設定がややこしい。

歴史的経緯により、後から機能が足され続けてきたからだ。


(ちなみに、IPv6 というプロトコルもある。いつかは v4 に変わる予定だったが、一長一短あって今は共存状態だ)


そして、IPv4 のややこしさを解消すべく、DHCP という仕組みが作られた。

DHCP は、ややこしい IPv4 の設定を自動で行ってくれる。



さて、今回どうやら Windows が DHCP を利用する仕組みにバグがあったようで、自動設定がうまく行っていない。

そのため、ネットワークにうまく接続できないのだ。




▼問題の解決方法


冒頭から読み飛ばしてきた人は、ここから読み始めて欲しい。


さて、問題が DHCP だと分かったところで、再度検索。


今までは「ネットワークに繋がらない」とか、ふわっとした検索語句だった。

しかし、「Win11 22H2 DHCP trouble」で検索すれば、このことを書いた英語ページが多数見つかった。


なるほど、やはり 22H2 で、DHCP の設定ができなくなるバグがあったらしい。


で、気になる修正方法は、「すでに修正アップデートがあるので、アップデートすること」。


なるほど。ネットワークにつなげないトラブルを解消するために、ネットワークアップデートが必要。



先に書いたように、DHCP による自動ネットワーク設定ができないだけなので、IP アドレスやネットマスクなどの設定を手動で行えば、ネットワークには接続できる。


恐らく、それなりのネットワーク知識がある人でないと設定できないけど。


設定方法などは、ネットワークにより異なる、としか言いようがない。

だって、「ネットワークごとに異なる」部分の設定を行うためのものだから。


今このトラブルで困っている人は…頑張ってください。

問題点と解決方法は示しましたが、解決のための「設定パラメータ」はどこかから入手する必要があります。



長女のマシントラブルの場合は、でアップデートで無事修正された。



22H2 へのアップデートの後、「数日後に」問題が出たのだけど、この数日は大丈夫だった、というのは謎。


何らかの理由による「猶予期間」があるかもしれないのは事実なので、22H2 にアップした人は、すぐに追加のアップデートがないか確認しましょう。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

別年同日の日記

01年 12/11

02年 粗大ゴミ

11年 カレンダー

12年 nexus 7 と US キーボード

14年 ロバート・ノイス 誕生日(1927)

17年 IP電話


申し訳ありませんが、現在意見投稿をできない状態にしています

SSL 証明書期限切れ  2022-12-26 19:35:10  コンピュータ

▲目次へ ⇒この記事のURL

当ページが、昨日未明から先ほどまで、うまく見られない状態になっていました。

その間に見に来てくださった方には、大変申し訳ありません。


原因は SSL 証明書切れです。

Let's Encrypt で発行してもらい、サーバに自動更新するように設定してあるのですが、9月25日の未明に更新したのを最後に、更新されていませんでした。


Let's Encrypt は無料の SSL 証明書発行サービスなのですが、有効期限は90日間と短めです。

Linux サーバに設定をおこない、毎週1回は更新プログラムを動かしていました。


と言っても、実際の更新は「残り1か月をきったら」行われるようになっています。

これが、どういうわけか10月の半ばから、更新のための接続に失敗するようになっていた模様。

原因は不明です。


で、昨日未明に期限切れを迎え、サイトのSSL接続ができなくなっていたのですが、昨日はクリスマスで家族団欒していたので、自分のサイトの不調に気づきませんでした。


今日の昼に気づいたものの、仕事があるために作業できず、先ほどやっと復旧したところです。




復旧方法は、単に新しい証明書を取りなおしただけ。

久しぶりなのでやり方を忘れていましたが、ネットを調べれば解説記事は山ほど出てくるので、ここでは特に解説しません。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

別年同日の日記

12年 クリスマス

15年 チャールズ・バベジ誕生日(1791)

16年 コラムス 97 余談


申し訳ありませんが、現在意見投稿をできない状態にしています

ONU 不調の顛末  2022-12-27 13:14:58  コンピュータ

▲目次へ ⇒この記事のURL

なんか、ネットの不調の話ばかり書いているな。


昨日は SSL 証明書が失効していた話を書いたが、実はそれよりも前の話。

NTT の光回線を使用していると、外からくる「光」を、電気信号に変換する ONU という機械までが NTT のサービス区分となる。


そのため、ONU は NTT からのレンタル品なのだけど、どうも2週間くらい前からこの ONU の調子が悪くなった。




インターネットは様々な技術の寄せ集めでできているので、いつどこで不具合が起きるかわからない。

急に回線がつながらなくなり、何もしないでも1分もすると復旧する、ということもたびたびある。


2週間くらい前のその日も、ネットワークがつながらなくなったので「自然に復旧するだろう」としばらく待っていた。


でも、復旧する兆しがない。

こういう時は、ルータにログインして様子を見る。


ネットワークが切断していた。再接続指示。

普段は再接続は勝手に行われるのだけど、明示的に指示を出してみる。


しかし、どうもうまく接続できない。


じゃぁ、ルータの調子が悪いのかな。再起動。しかしうまく行かない。


うーん、もっと上流か。

プロバイダや NTT の障害情報を調べてみるが、特に障害は出ていないようだ。


障害箇所を絞り込みつつ、すると NTT の基地局などよりは内側で、ルータよりは外側。


その日は風が強かった。風でどこかのケーブルがおかしくなった可能性もある。

そんなもの、自分の手ではどうしようもない。


でも、自分で対処可能なものが1つあった。

ONU をリセットしてみよう…とおもったが、リセットボタンも電源ボタンもない。

基本的に常時電源入れっぱなしで使うものだからだ。


仕方ないので、コンセントを抜いて、10秒くらい待ってまた入れてみた。

これで無事復旧した。




その後も、2~3日に一回同じ状態になる。ONU をリセットすれば復旧する。

ONU はレンタルだと書いたが、レンタルなので「再利用」もされる。


我が家が今の光回線を契約したのは3年前で、ONU もその時に来たものなのだが、ONU の製造年月日を見たら 2008 年だった。14年も前。


これは ONU 故障だろう。

この時点で、最初の障害から1週間ほどたっていた。修理を依頼したところ、技術者が来られるのが1週間後、という。

不便だが使えているので、1週間くらい待てる。それでお願いする。


実は、修理を待つ間にも、半日で3回のリセットが必要になった時などあったのだが、昨日修理に来た。




光回線も「接続」ポイントが緩くなったりして不調になることはあるらしい。

なので、技術者としては近所の電柱も点検して回ってくれた。


しかし、ONU も古いし、僕が細かく状況を切り分けていたので、おそらくは ONU の故障なのでしょう、ということで交換。


以前は PR-S300 という機械だった。

ネットで調べたら、PR-S300 が不調になったら、同じ PR-S300 に交換、レンタル契約がそうなっているから…という話を見かけていた。


でも、PR-600 という機械に変わった。

基本機能は変わっていないし、何が違うのかよくわからないけど。

(おそらく、14年も前の機械はすでに在庫が無くて、後継機に交換になったというだけだろう)


もともと不調は2~3日に一回だったので、これで治ったのかどうかはまだわからない。



これで、今回書いたような顛末記を書こうと思って自分のページにアクセスして、昨日の障害に気づいた、というわけ。




NTT の光回線で、電話と、テレビの電波も頼んでる。


前の機械が不調になった時に確認すると、ネットがつながらなくなった時は、電話もつながらなかった。

しかし、テレビは見られた。


新しい機械の導入時、接続してから確認したら、電話とテレビはすぐに繋がった。

しかし、ネットは繋がらない。技術者の人が LED 見て「ファームウェアアップデートが入ってしまったので、しばらくかかります」と言った。


…ファームウェアアップデート中でネットがつながらない状態でも、電話やテレビは繋がるのか。


ここらへん、どうなっているのか知らないけど謎技術。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

別年同日の日記

02年 クリスマスプレゼント

03年 飲み会

03年 日記エンジンバージョンアップ

16年 コラムス 97 サターン版


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -