文字コードシフト型アンチ広告ブロックを採用してみたら・・・

業績がダウンしてショック
©いらすとや.

2021年8月に書いた「広告ブロック機能を使っている閲覧者には読めない記事を送信するアンチ広告ブロック」はウェブサーバから記事本文の文字コードをシフトした状態で送信し、広告ブロックをしていない閲覧者のブラウザでは(自動で)シフトを解除して読めるようにし、広告ブロック機能を利用している閲覧者には文字化けした状態のままで表示するという恐ろしく過激で強力なアンチ広告ブロック。
ウェブサーバから送られるHTMLソースの記事部分が元から文字コードシフト(文字化け)した状態で送信されているのでページソースを見たりCSSを弄って表示しようとしても無駄。広告ブロックを警告するだけでも嫌われるのに、こんなのはもちろん広告ブロック利用者にはとんでもなく嫌われるし、なんならGoogleさんにも大いに嫌われる可能性があるので、このアンチ広告ブロックを作った「がとらぼ」の中の人自身が怖くて採用できずにいた。
ただ、実サイトで使ってみたら話のネタにはなるかもと思って、この文字コードシフト式アンチ広告ブロックを作成から半年以上経った2022年3月末からこの「がとらぼ」のブログ記事部分だけで採用してみた。

Google検索インデックス登録状態
文字コードシフト式アンチ広告ブロックを採用して1ヶ月半経ったところ、Googleの検索インデックスで「がとらぼ」のページはこんな感じに登録されてる。
記事のタイトルは正常だが、その後に続く本文部分は見事に文字化けしている。
一部の記事(閲覧者向け広告ブロック関係の記事)は、そもそも広告表示無しの記事でアンチ広告ブロック機能も働かない状態なので記事の本文部分は文字化けしていない。(画像で赤文字を付けた2つの記事)
GoogleボットはChromeブラウザでレンダリングした状態で認識できるコンテンツを取り込んでインデックスすると思っていたので文字化けした状態で取り込まれたのは少し予想外。ただし、それだけで他に影響がないのであれば面白いのでアリかもとは思う。(もちろん影響が無い筈はないのだが)


Google Search Consoleで、「がとらぼ」がgoogle検索でクリックされた数。画像の赤線は「がとらぼ」の中の人が追加した推移の目安。
問題は検索流入数の減少。
2022年2月末に文字コードシフト式アンチブロックを採用したのだが、3月中旬から突然検索流入が激減している。半分までは減らないものの1/3以上減ってるので大ダメージ。この頃にGoogleで検索アルゴリズム変更による検索結果の大変動は発生していないと認識しているので「がとらぼ」固有でコンテンツの評価が大きく下がった可能性がある。そのような評価に影響しそうな変更は文字コード式アンチ広告ブロック以外には覚えがない。


Googleさんがページの存在を認識した上でインデックスに登録しない「検出-インデックス未登録」のページ数。これまで「がとらぼ」はページ登録状況は良好で、大抵はページ公開から数時間後にはインデックス登録されていた。また、ときどき数ページがインデックス未登録になることがあるが数日以内に再登録されていた。(画像の2月下旬あたりの山などがそれ)
それが、2022年3月下旬から右肩上がりで、手動でインデックスのリクエストを行ってもなかなか登録されない状態に。このインデックス未登録は最近他のウェブオーナーからも声が上がってるので必ずしも文字コード式広告ブロックのせいだとは言い切れないが、サイト/コンテンツの価値が無いと判断されるとインデックス未登録になることがあるという点でいえば、文字化けした状態でGooglebotに取り込まれているなら意味のないコンテンツがたくさん→価値の低いサイトと判断されてもおかしくない。それはヤバい。構造化データのJSON-LD形式ではコンテンツをUnicodeの文字コードで文字化けなしでマークアップしてるのだが、Googlebotさんがインデックス用にはJSON-LDのArticleスキーマ(特にコンテンツ部分)を読んでくれないっぽいのでダメなのよね。

PageSpeed Insights
文字コード式アンチ広告ブロックは、ウェブサーバ側で文字シフトして送信し閲覧者のブラウザで文字シフトを戻すという方式なので双方で余計な処理は入るものの、「がとらぼ」の中の人はページの表示速度には結構気を使って作っているのでPageSpeed Insightsでパフォーマンスを診断すると全て100点とはいかくなてもだいたい90台後半〜100(満点)が出る程度にはなっている。つまり、このアンチ広告ブロックでGoogleに嫌われるほど表示が遅くなるということはないといえる。

この文字コードシフト式のアンチ広告ブロックは、「がとらぼ」の中の人の自己満足という点では非常に点数が高いのだが、Googleさんに嫌われそうという点では赤点。このまま継続して動かすというのは非常に不味そう。
早急にこの文字コードシフト式アンチ広告ブロックは外したい。ただし、ウェブサイトオーナーとして継続してアンチ広告ブロックについては考えていきたい。(閲覧者の立場としての広告ブロックも)

XiaomiのスマートフォンをMagiskでRoot化

魔法の
©いらすとや.

昔のAndroidはSuperuserをインストールしてRoot化することが多かったが、最近の主流はMagisk。今回はXiaomiのスマートフォンにMagiskをインストールしてRoot化する。
Magiskアプリはいきなりインストールしても良いが、インストールしただけではルート化にはならない。先ずはXiaomiのスマートフォンのファームウエアを取得しそこからboot.imgを抽出する。基本的にここ数年以内に発売されたXiaomi, Pocoのスマートフォンの多くで通用する筈。ただし、この記事作成時点では最新のAndroid 12またはMIUI 13では不具合が発生するようなのでAndroid 11且つMIUI 12.5までとする。

本来の手順としてはMagiskをインストールしようとしているスマートフォンにブートRAMディスクがあるか無いかを確認することになっている。ただし、Xiaomiのスマートフォンの場合は取り敢えずブートRAMディスクがあるものとしてパッチを当てたboot.imgををインストールしてみて、どうしてもダメそうであればブートRAMディスクが無い場合手順でパッチを当てたrecovery.imgをインストールするので良さそう。このページではブートRAMディスクが無いというパターンは割愛。

また、本来の手順としてはスマートフォンにvbmetaパーティションがあるか無いかを確認しvbmetaパーティションがあれぱvbmeta.imgにもパッチを当てるということになっている。

$ adb shell ls -l /dev/block/by-name
中略
lrwxrwxrwx 1 root root 16 1971-12-05 03:57 userdata -> /dev/block/sda18
lrwxrwxrwx 1 root root 16 1971-12-05 03:57 vbmeta -> /dev/block/sde50
lrwxrwxrwx 1 root root 16 1971-12-05 03:57 vbmeta_system -> /dev/block/sda10
lrwxrwxrwx 1 root root 16 1971-12-05 03:57 vbmeta_systembak -> /dev/block/sda11
後略

これはXiaomiのRedmi Note 9Sで確認してみた結果。vbmetaがある。

ただし、パッチを当てたboot.imgでブートループなどの問題が発生しなければvbmeta.imgのパッチ当てとそのフラッシュ(イメージ焼き)も不要で良さそう。この記事でも割愛。
つまり、MagiskでのRoot化に必要なのはboot.imgファイルだけ。

Root Explorer
とりあえずGoogle PlayからRoot Explorerをインストールしておく。Root化した端末であればほぼなんでもやりたい放題にできるファイラーアプリ。端末をRoot化してなくてもユーザー所有のファイルであれば普通に便利なファイラーとして利用できる。(Root化が必要な機能は使えない)
「がとらぼ」の中の人は10年以上愛用している。そのせいもありXiaomiのスマートフォンに標準で入っているファイラーは意味がわからないので「がとらぼ」の中の人は全く使えない。

boot.imgの抽出

ファームウエアからboot.imgの抽出 1
ファームウエアのファイルを取得するためにAndroidの設定から「デバイス情報」をタップ。

ファームウエアからboot.imgの抽出 2
「MIUIバージョン」をタップ。

ファームウエアからboot.imgの抽出 3
中央のMIUIバージョンのロゴを連打するとUpdateの拡張機能をオンにできる。一度拡張機能をオンにしてしまえば次の大きな更新或いはファームウエアの焼き直しをするまでずっとオンが維持される。
Updateの拡張機能をオンにしたら右上の「」(メニューアイコン)をタップ。

ファームウエアからboot.imgの抽出 4
「最新のパッケージをダウンロード」をタップする。

ファームウエアからboot.imgの抽出 5
使用しているファームウエアとユーザーによってはファームウエアをダウンロードできないことがある。「がとらぼ」の中の人はMiパイロットテスターなのでこの画面のようにダウンロードできないと表示される(ことがある)。あとベータテスターに登録してる人なども。
一般ユーザーは普通にダウンロードできると思う。このようにダウンロードできない場合は次。

ファームウエアからboot.imgの抽出 6
ファームウエアを焼き直した後などMiアカウントでログインし忘れていることがある(よね?)
MiパイロットテスターやベータテスターはMiアカウントにログインしましょう。一般のユーザーはMiアカウントにログインする必要は無いしそもそもMiアカウントを作る必要もないかも。
「Miアカウント」をタップ。

ファームウエアからboot.imgの抽出 7
MiアカウントにログインすればOK。電話番号以外の個人情報を登録する必要はないかと。
Android設定に戻って「デバイス情報」、「MIUIバージョン」右上の「」、「最新のパッケージをダウンロード」をタップ。

ファームウエアからboot.imgの抽出 8
Miアカウントにログインすれば、ファイルのダウンロードが行えるようになるので完了までしばらく待つ。

ファームウエアからboot.imgの抽出 9
ダウンロードが終わると「暗号化の解除」が始まる。暗号化解除の完了を待つが、その後の操作は「なるはや」で実行。(次へ)

ファームウエアからboot.imgの抽出 10
このとき、焦って「今すぐ再起動」をタップしないこと。(次へ)
ちなみに、端末はずっと再起動待ちになるが、boot.imgを抽出した後にダウンロードしたファームウエアのファイルを削除すれば「今すぐ再起動」を実行しても問題ない。(再起動待ちのアイコンがステータスバーから消える以外は何も起きない)

ファームウエアからboot.imgの抽出 11
先にインストールしたRoot Explorerアプリを起動し、内部ストレージのDownloadフォルダを開く。その中にdownloaded_romフォルダが作成されていてその下にダウンロードしたファームウエアのファイルが保存されている。miui_機種コード+SKU_バージョン_謎の文字列.zipがそれ。今回はフルサイズのRecoveryファイル。
このファイル名をダブルタップする。(急いで次へ)

ファームウエアからboot.imgの抽出 12
ZIPファイルの中身のファイル一覧が表示される。その一番上にboot.imgが表示されることを確認。(急いで次へ)
なお、暗号化解除後にのんびりしていたり他の余計な操作を行っているとファイル一覧が表示できなくなる。圧縮ファイルではないとかファイルが正常ではないような旨のエラーが出たらこのダウンロードしたファームウエアファイルを削除してダウンロードをやり直す。

ファームウエアからboot.imgの抽出 13
「boot.img」を長押しすると表示が反転する。そして右上に(抽出/ダウンロード)アイコンが表示されるのでそれをタップする。

ファームウエアからboot.imgの抽出 14
ファームウエアのファイルサイズが大きいのでboot.imgファイルの抽出にはしばらく待たされる。

ファームウエアからboot.imgの抽出 15
「抽出は正常に実行されました」が表示されれば成功。抽出されたファイルの保存場所が表示される。「展開先へ移動」をタップ。
なお、抽出が成功すれば後は急ぐ必要はない。

ファームウエアからboot.imgの抽出 16
抽出したboot.imgがある筈。
「boot.img」を長押しすると右上に幾つかアイコンが表示されるので「(カット)」アイコンをタップ。

ファームウエアからboot.imgの抽出 17
内部ストレージ直下の「Download」フォルダに移動して右下の「(ペースト)」で移動完了。

今回は正式ローンチ前の最新バージョン(Miパイロットテスト,ベータ)でもRoot化できるようにAndroid設定のソフトウエア更新からダウンロードしたファームウエアを使用したが、ローンチ済みのバージョンからboot.imgを抽出するなら、この「がとらぼ」のXiaomi + POCOファームウエア最新一覧から機種と国/地域の適切な組み合わせを検索してファームウエアをダウンロードできる。それを普通に解凍してboot.imgを取り出す方が簡単かも。

MagiskのインストールとRoot化

Magiskのダウンロード
https://github.com/topjohnwu/Magisk/releases からMagiskアプリの最新版をダウンロードする。

XiaomiスマートフォンをMagiskでのroot化 1
ダウンロードしたMagisk-v*****.apkをファイラー上でタップ。(上の画像はRoot Explorer)。インストールの許可を求められるので許可する/または単に「インストール」を選択。XioamiのMIUIだとさらに確認を求められるかも。また、インストール直前にセキュリティスキャンが実行される際にも確認を求められることも。(全部許可)

XiaomiスマートフォンをMagiskでのroot化 2
Magiskアプリのインストールが完了したらドロワー等からMagiskを起動する。
MagiskのRoot化パッチ済みboot.imgがインストール済みではないことを確認し「インストール」をタップ。

XiaomiスマートフォンをMagiskでのroot化 3
「bootイメージ中のvbmetaをパッチする」の意味は不明。vbmetaパーティションがある(Fastbootイメージにvbmeta.imgがある)場合はチェック不要なのかもしれない。反対にチェックしても何か変わった様子もない・・・
今回は、取り敢えずチェックして「次へ」をタップした。

XiaomiスマートフォンをMagiskでのroot化 4
方法のオプションはこの時点では1つだけ「パッチするファイルの選択」が表示されるのでそれをタップする。
「はじめる →」をタップする。

XiaomiスマートフォンをMagiskでのroot化 5
ファイルの選択画面が表示されるがこれがよく判らないやつ。上段の方に「他のアプリでファイルを探す」があるので左右にスクロールして使いやすいファイラーをタップする。上の画像ではRoot Explorer。

XiaomiスマートフォンをMagiskでのroot化 6
ファイラー(今回はRoot Explorer)で内部ストレージのDownloadフォルダに移動し、先に抽出した「boot.img」を選択(タップ)する。

XiaomiスマートフォンをMagiskでのroot化 7
パッチ当てが自動的に進行する。All done!が表示されれば完了。
左上の「←」をタップする。

XiaomiスマートフォンをMagiskでのroot化 8
元のboot.imgのあったフォルダ(今回は内部ストレージのDownloadフォルダ)に「magisk_patched-*****_*****.img」というファイルができている。

この「パッチの当たったboot.img」である「magisk_patched-*****_*****.img」をスマートフォンのBootパーティションにフラッシュする(焼く)ということになるが、正常に機能するかわからないものをいきなり焼くというのは怖い。 そこで「magisk_patched-*****_*****.img」をPCにコピーする。

fastbootコマンドはWindowsでもLinuxでも標準では入っていない。
Linux (debian/ubuntu系)なら

$ sudo apt install fastboot
$ sudo apt install adb    #adbも入れておくと後々便利

Windowsなら 15 seconds ADB Installer をインストールしてコマンドプロンプトで実行する。

XiaomiのスマートフォンとPCをUSBケーブルで接続する。
スマートフォンを再起動し、リブートで画面が真っ暗になったときに音量ボタンの↓を押したままにする。または、電源オフの状態で音量ボタンの↓を押しながら電源ボタンで電源オンにする。Fastbootの画面が表示されたらスマートフォンのボタンから手を離す。

PCのターミナル/コマンドプロンプトで、 magisk_patched-*****_*****.imgを置いたディレクトリに移動して

$ fastboot boot magisk_patched-*****_*****.img

これは、fastboot flash boot magisk_patched-*****_*****.imgではないので注意。これでAndroid OSが起動する筈だが正常に起動しないならboot.imgのパッチ当てで何か問題があったかもしれない。その場合は電源ボタン超長押しで電源オフか再起動で通常に戻る。(今回はパッチ当てしたboot.imgを電話機に書き込んではいなくて、PCにあるパッチ当てしたboot.imgを使って起動しただけなので)
Android OSが起動したらPCとのUSBケーブルの接続を外す。

XiaomiスマートフォンをMagiskでのroot化 9
OSが起動したらドロワーからMagiskアプリを開く。パッチの当たったboot.imgで起動しているのでMagiskがインストール済みでそのバージョンが表示された状態になっている。(これが重要)
「インストール」をタップする。

XiaomiスマートフォンをMagiskでのroot化 10
前回は、「パッチするファイルの選択」しかなかったが、今回は「直接インストール(推奨)」が表示されている。
その「直接インストール(推奨)」をタップして選択。「はじめる→」をタップする。

XiaomiスマートフォンをMagiskでのroot化 11
Root化パッチ適用済みのBootに改変される。
All done!が表示されれば書き込み完了。
右下の「再起動」をタップする。Android OSが再起動する。

XiaomiスマートフォンをMagiskでのroot化 12
ドロワーからMagiskアプリを開く。 既にBootが書き換えられてMagiskがインストール済みになっているのでそのような表示になっている。また、Ramdiskが「対応」になっている。このRamdiskの表示はどうでも良い。
右上の「 (設定)」アイコンをクリックする。

XiaomiスマートフォンをMagiskでのroot化 13
下にスクロールして、「Zygisk」のスイッチをオンにする。
Androidを再起動する。

XiaomiスマートフォンをMagiskでのroot化 14
Android OSの再起動後に再度ドロワーからMagiskアプリを開く。
Zygiskが「対応」になっていることを確認する。

MagiskによるRoot化が完了したので今回はここまで。

クルマのマップランプのT10 LEDバルブを再交換した

ダウンライト
©いらすとや.

2年ほど前にクルマのマップランプをハロゲン球からLEDに交換したところ純正ハロゲンよりは明るくなったんだけど、それでも我が家のクルマのマップランプって何か明るくない。スマホ画面を見る分には車内の照明は関係ないから問題ないんだけど夜に紙に書かれた文字を読もうとすると鳥目な「がとらぼ」の中の人は苦労する。そこで新しいLEDバルブを購入してみた。

クルマのマップランプの再交換 1
AliExpressから届いたT10 LEDバルブ2本。航空郵便でよく見る黄色い紙封筒の中に入っていたのはこれだけ。大きさは小さいが樹脂ではなくアルミ製ということもあって重め。

クルマのマップランプの再交換 2

バルブの先端はレンズになっているのだが何か汚い。レンズの中は5.6mm x 3.0mm (5630)のSMD LEDが2つ入っているっぽい。ソケットに刺さる方はハロゲンバルブのように電極の針金がビョコピョコ出てるタイプではなく基板の表面にレジストがあるタイプ。基板は厚めなので簡単にはソケットから抜け落ちなさそうで安心。厚すぎるわけではなくてハロゲン球のガラス+針金程度の厚み。

クルマのマップランプの再交換 3
このT10バルブは側面に90°毎にの5630 LEDが1枚、計4つ貼られている。つまり、このバルブは全部で6枚の5630を備える。消費電力はこの6枚が点灯して1.7Wということになっている。中華通販なのでこの手の数字は全然アテにはならないけど。銀色の円筒部分の素材は樹脂ではなくアルミ。なので重めだが、なんか細かいキズだらけで汚い感じ。以前に購入したアルミのT10バルブ(長め)より品質的には期待できそうにはない。そしてその以前の長めのT10バルブの激光ぶりを期待してたのでその点ではハズレだった。

クルマのマップランプの再交換 4
今回はクルマのマップランプ(前席中央の天井でルームミラー近辺にあるランプ)を交換する。以前に紹介した激安T10 LEDバルブが左右1つずつ刺さっている。カバーは既に外した状態。

クルマのマップランプの再交換 5
これまで使っていたT10 LEDバルブ(画像の下側のバルブ)よりは少し長いがそれでもマップランプのカバーに当たる程ではないので使用できる。ちなみにこれまで使っていたT10 LEDバルブは純正のハロゲンT10バルブより1mm長いもの。なので今回購入したT10バルブは純正ハロゲンT10バルブより2.5mmほど長い。クルマの車種によっては長すぎる可能性がないとはいえない。
旧T10 LEDバルブも製品説明が本当なら腰の辺りの銀色の帯部分はアルミらしい。放熱用?

ウェッジ球なので取り外しはひねらずにまっすぐ引き抜く。硬くて抜けないときは電球にガムテープを巻き付けてガムテープごと引き抜くと力が入れやすくて安全で簡単。はめ込む際は、ソケットの中に溝があるのでその溝にウェッジ球の板のような部分を合わせてまっすぐ押し込む。嵌めるときはそんなに硬くない筈。逆に緩いときは細いマイナスドライバなどでソケットの溝の中の電極を少しだけ起こしてやるとしっかり刺さるようになる。

クルマのマップランプの再交換 6
左側がこれまで使っていたT10 LEDで、右側だけ今回購入したバルブに替えた状態。これまで使っていたのが3030 LEDが1つだけなので新しいのはもっと明るいかと思ったがまぁ横方向を照らす分には側面に5630が計4枚あるらしい明るさだが、これまで使っていた3030が1枚のLEDの方が眩しさは上にも見える。新しい方は緑っぽい色に写っていて左の古いT10の方がマップランプ内部の照らされる色が自然な感じ。

クルマのマップランプの再交換 7
真下から覗き込んでみた。上の画像はカメラの明るさ調整により眼で見るより暗く写っている。
左の3030 LEDが1枚のバルブは光が出る方向が真下でバルブのカバーで光を散らしているだけなので横方向は光が弱く真下側が強力に照らされる。なのでマップランプのユニット内は右のランプと比べると暗め。
右の5630 LEDが2枚がレンズの中にあるバルブはレンズの効果が不明。あまり明るく感じない。緑っぽさが目立つ。家庭用の白熱電球でいう60W相当とか100W相当で中国製のクソ安いLED電球は色味が悪くて食べ物が不味そうに見えるのだが、こんな色味。

クルマのマップランプの再交換 8
マップランプのカバーを取り付けた。上と同じく右側のライトだけ新しいバルブに交換した状態。新しいバルブは横方向を照らすLEDが4つ付いていてマップランプユニット内が照らされるのでユニット内全体が明るい感じ。ただし、バルブそのものの「眩しさ」は左の旧LEDバルブには負けている気がする。(画像では色味の違い以外は同じように見えるけど)
左の旧LEDバルブはマップランプユニット内は明るくないのでバルブ1点だけが強く光って見える。マップランプのカバーを取り付けても色味は旧LEDバルブの方が好き。(個人の感想です)

クルマのマップランプの再交換 9
左右共に新LEDバルブに交換した状態。新LEDバルブの方がマップランプのカバー全体が光っているように見える点は良いんだけどなぁ。

旧LEDバルブは3030が1つだけなので黄色い蛍光体部分の面積で言えば3mm x 3mmで9mm2、新LEDバルブは5630なので5.6mm x 3.0mmでそれが6枚で16.8mm2の6倍100.8mm2。つまり単純に蛍光体の面積だけなら11倍もあることになる。(蛍光体の面積だけ比べても意味ないけど)
でも、今回の新LEDバルブは旧LEDバルブと並べて光らせても明るい感じはしなくて熱いだけ。明るくなったように見えないなら旧T10 LEDバルブのコスパの良さを再確認しただけのような。

ところで、円安と中国製品の値上がりの合わせ技でAliExpressのT10バルブの価格は2年前と比べると全体的に1.5倍に迫る勢い(ものによっては2倍超えも)。すごい割高感。それでも日本のアマゾンでボッタクリ価格で購入するよりは安いけど。

関連記事:
Up