EarPods(USB-C)はAndroidやWindowsで使用出来るのか

USB Type-C接続になったEarPods(USB-C)をApple製以外の機器に繋いで使用出来るのか、実際に試してみた。

Androidスマートフォン(Pixel 7a)

繋ぐだけで普通に使用出来る。
音量調節ボタン、再生/停止ボタンが機能する。

Windows PC(Windows 11)

繋ぐだけで普通に使用出来る。
音量調節ボタン、再生/停止ボタンが機能する。
規格違反のType-C/Type-A変換アダプタで接続したが、特に問題なく使用出来た。
これはEarPodsに限った話ではないのだが、音量は100段階中1~10程度で丁度良いくらい。手を滑らせて50とかにしてしまうと大変な事になるので注意。

PlayStation 5

前面のType-C、Type-A、ダメ元でコントローラーのType-C端子にも繋いでみたが、全く反応無し。
音声出力先に表示される事は無かった。

Nintendo Switch

本体のType-Cポートに繋いだが、まったく反応なし。

結論

USB DACが普通に使える環境なら動くようだ。
PS5やSwitchも一部のDACは対応しているらしいが、EarPodsは非対応のようなので注意されたし。

改行に関する適切なCSS指定の検証及びBudouXの試用

BudouXをご存じだろうか。

極力短い言葉で説明すると「機械学習を用いて日本語や中国語の文章に自動でWBR要素を挿入するプログラム」だ。 *1

筆者は先日Google Developers Japanのブログに掲載された紹介記事を見て知った。

これは試さずにはいられなかったのだが、そもそも筆者は文章の改行について「何も指定しないとURLが要素をはみ出てしまう場合があるのでword-break: break-all;を指定する」程度の雑な認識しかしていなかった。
そのため適切な指定について一度しっかり確認する必要が有ると思い、簡単な検証用のページ(https://crabspider.pages.dev/line-break-test/)を作成した。

普通にHTMLを書いた場合

何も指定しないとURL中に含まれる長いID等が長大な単語と認識されてしまい、自動改行の対象外となり文字列が要素からはみ出てしまう場合が有る。そのため何らかの対策は必須。

word-break: break-all;、line-break: anywhere;、overflow-wrap: anywhere; のいずれか一つでも指定すればこれは回避出来るが、どの指定にも短所が有る。

word-break: break-all;かline-break: anywhere;を指定するとURLが綺麗に改行されるようになるが、「CSS」のような短い単語の途中でも改行が入ってしまうようになるため読みづらくなってしまう。

overflow-wrap: anywhere;では「CSS」のような単語の途中で改行が入る事が無くなるが、それがURL内にも適用されてしまうので妙な余白を残した改行になり見栄えが悪い。

しかし、実際はこのような問題を起こす文字列はURLや何らかのコード等以外ではほぼ無いと考えられるため、文全体とは無関係に個別の要素で対応する事が可能だと思う。
例えばリンクの場合、https://で始まる文字列の場合のみ、a要素にword-break: break-all;等が指定されるようにすれば済む話だ。

言ってみれば、普通の文章自体には特に何も指定しなくても大きな問題は無さそうだ。
強いて言うなら念のためにoverflow-wrapは指定した方が良いかも知れない。

BudouXを使用した場合

BudouXのCLIをHTML出力モードで実行すると次のようなHTMLが返って来る。

budoux -H 改行のテスト
<span style="word-break: keep-all; overflow-wrap: anywhere;">改行の<wbr>テスト</span>

今回はこのspanについては削って張り付けてあるため、これと同様の表示を検証したければフォームでword-break: keep-all; overflow-wrap: anywhere;を指定する必要が有る。

実際にその指定にしてみると、日本語の文章も単語の途中で改行されなくなる事が確認できた。 URLについては不自然な改行になるが、これは普通のHTML同様、リンクは別途対応するようにすれば解決するだろう。

結論

個人的な印象としては、本気で文章の読みやすいサイトを作りたい場合、BudouXを使用した上で文章全体にword-break: keep-all; overflow-wrap: anywhere;、お好みでtext-align: justify;を指定。URLがリンク文字列として指定されているリンクにはword-break: break-all;なりを付与しておくのが良いのではないかと感じた。

Chrome119以降、word-break: auto-phrase;を指定するとBudouXを用いた処理が行われるようになるとの話だが、Cloudflareによると日本ではSafariのシェアが30%前後有るため、これを考慮すると自前でBudouXを通す必要が有るだろう。

日本の過去4週間のブラウザシェア推移グラフ Cloudflare Raderより

*1:ウェブブラウザ以外でも使えるので、この説明はかなり端折っている

WindowsでOneDriveが自動起動しなくて困っていた話

筆者のWindows11機ではOneDriveが自動起動しない現象が生じている。

以前はOneDriveを使用していなかったので自動起動しないように設定していて、最近使用し始めたので再度有効化したいが、それが出来なくて困っているという話だ。

最近のWindows版OneDriveでは、かつて存在した自動起動の設定項目が消されてしまっているし、Windowsのスタートアップ設定やサービス設定にも該当する項目が見当たらない。
MSが設定UIを削除したため有効化出来なくなったという単純な話なのか、それとも筆者が何かしらの変な事をしたせいなのかは定かでは無いが、とにかく普通には自動起動を設定出来ない状態になってしまっている。

結局レジストリを編集して解決した。

場所

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

手順

右クリック→新規→文字列値

名前

OneDrive

"C:\Program Files\Microsoft OneDrive\OneDrive.exe" /background

Logicool Brio 300レビュー

Logicoolのウェブカメラ、Brio 300を購入したのでレビューする。

筐体

外観については見ての通りなので割愛する。

プライバシーシャッターは滑らかに動き、真上と真下でパチっと固定される。

固定用クリップの作りはしっかりしているが、強く挟む訳では無いのでノートPCで使用する場合は注意が要るかも知れない。

接続

Brio 300はType-Cケーブル一体型であるため、PC側にType-Cポートが必要となる。

筆者のメインPC(自作)にもType-Cポートが一つ有るのだが、組み立て時にI/Oパネルがズレていることに気付かず嵌め込んでしまったために物理的に損傷してしまい、使用不可能になっている。
仕方が無いので規格違反の変換アダプタを購入してType-Aポートに接続した。

Windowsから問題なく認識され、プライバシー設定でカメラへのアクセスを許可すればLogi Tuneからも認識され、映像の確認や設定変更、ファームウェアアップデートが行えた。

画質

筆者の部屋はどちらかというと暗めなのだが、ノイズが乗ったり不自然に暗かったりするような所もなく、バッチリと写った。

しかし、映像を一目見て「白っぽい」と言う印象を受けた。
MacBook Air(M2)のカメラやPixel 7aのインカメラの方が、より鮮やかで暖かみがあり、自然な画になると感じた。

このカメラについて画質が良いというレビューと画質が悪いというレビューが混在する原因はおそらくこれではないだろうか。
ちゃんと映りはするのだが、画が古臭い。

思えばLogicoolの1万円以下で買えるウェブカメラがAppleGoogleの最新ハードに搭載されているカメラに勝てないのも当然かも知れない。
他のウェブカメラと比較したら別の印象になるのかも知れないが、筆者が参加して来たオンライン会議は音声メインの物が多かったため、その視点での比較は出来ない。

ちなみにLogi Tuneには明度や彩度などの基本的なスライダーの他にフィルタ機能が有るが、フィルタ機能については変な色にしたりモノクロにしたりと使い所のよく解らない物しか無く、画の雰囲気を調整するような用途で使用出来る物ではない。
スライダーの方を頑張って調整すれば画の雰囲気も変えられるのかもしれないが、標準では現代人が慣れ親しんだスマートフォン等の映像と比べると魅力で劣る画で有ると感じた。

結論

1万を切る価格、画作りはともかくバッチリ映る事、ハード自体もよく出来ている事を考慮すると納得感の有る完成度だと思う。
魅力的な映像を期待している場合、他の製品/手段を検討した方が良いと思う。

ちなみにマイクの性能については興味が無いため確認していない。元々所持しているマイクと組み合わせて使う予定だ。

ExcelのA1形式座標とR1C1形式座標の相互変換処理(JavaScript)

ExcelのA1形式座標とR1C1形式座標を変換する処理をJSで書いた。
あまり必要になる事は無いと思うが、何となく気になったので。

フォームまで組み上げた物: A1・R1C1相互変換

以下変換部のコード

const A1ToR1C1 = (address) => {
  address = address.trim().toLowerCase();

  const match = /^\$?(?<col>[a-z]+)\$?(?<row>\d+)$/.exec(address);

  if (!match) {
    return "";
  }

  let colNum = 0;
  let digits = 0;
  for (let c of match.groups.col.split("").reverse()) {
    colNum += (c.charCodeAt(0) - "a".charCodeAt(0) + 1) * Math.pow(26, digits);
    digits++;
  }

  return `R${match.groups.row}C${colNum}`;
};

const R1C1ToA1 = (address) => {
  address = address.trim();

  const match = /^R(?<row>\d+)C(?<col>\d+)$/i.exec(address);

  if (!match) {
    return "";
  }

  let colStr = "";
  let colNum = +match.groups.col;

  for (let digit = 0; colNum > 0; digit++) {
    let thisDigit = colNum % Math.pow(26, digit + 1) / Math.pow(26, digit);
    if (thisDigit === 0) {
      thisDigit = 26; // 1スタートだから0にはならない
    }
    colNum -= thisDigit * Math.pow(26, digit);
    colStr = String.fromCharCode("a".charCodeAt(0) + thisDigit - 1).toUpperCase() + colStr;
  }

  return `${colStr}${match.groups.row}`;
};

通常のN進数表記と異なる点があり、若干釈然としない所も有るのだが、一通りのテストは通るので良しとした。

モンティホール問題.xlsx

モンティホール問題はExcelでも計算出来るのではないかと思い試してみた所、思いの他学びが有った。
ちなみに以前JavaScriptで計算した事もある

選択を変更しないパターン

「選択する扉を変更しない」パターンの計算は簡単だ。最初の選択の時点で全てが決まっているため、以降のステップは考慮する必要が無い。
当選の扉を RANDBETWEEN(0, 2) で算出、選択する扉も RANDBETWEEN(0, 2) で算出、それが一致するかどうかの判定で事足りる。

選択を変更するパターン

「選択する扉を変更する」パターンについても正解と1度目の選択については変わらず RANDBETWEEN(0, 2) で良い。

「モンティが開く扉」については話は複雑になるが、幸いにして近年Excelに追加されたLETやFILTER関数を使用して比較的楽に書く事が出来た。

=LET(
    all, SEQUENCE(3, 1, 0),
    kouho, FILTER(all, (all<>[@選択])*(all<>[@当選])),
    randkey, RANDBETWEEN(1, COUNT(kouho)),
    INDEX(kouho, randkey)
)

LET内各行で行っている事は次の通り。

  1. 0, 1, 2の配列を用意
  2. 「当選」と「選択」に合致する要素を削除し、モンティが開く扉の候補を算出
  3. 2行目で出来たリストからどの要素を取得するのかランダムに決定
  4. 実際に開くドアの番号を取り出す

「変更後の選択」も同様にFILTERを使用し、「選択」とも「モンティが開く扉」とも一致しない扉を選択すれば良い。

=LET(
    all, SEQUENCE(3, 1, 0),
    FILTER(all, (all<>[@選択])*(all<>[@モンティが開く扉]))
)

SafariでPicture in Pictureを発動させるブックマークレット(Prime Video対応)

Prime Videoは動画プレイヤーの実装の都合上、コンテキストメニューからPicture in Pictureを呼び出す事が出来ない。*1
Chromeならメディアコントロール機能からPicture in Pictureを実行出来るが、Safariにはそれも無い。

ただしChromeで簡単に実行出来る事からも判る通り、Picture in Pictureが意図的にブロックされている訳では無いので、次のような簡単なブックマークレットで対処出来る。

javascript:document.querySelector("video:playing").requestPictureInPicture();

*1:2023-07時点