先日ちょっと書いた、ブログにボットが良く来る件でアクセスログを見ていたら、不正ログイン試行や悪質なアクセス※が結構多くて気になってしまった。

※例: シェルのコマンドを実行しようとするもの、大量のバイナリデータを送って来るもの。

以前にも何度か、目に付いた時に そのアクセス元近辺のIPアドレスをブロックするように設定したのだが、設定するスクリプトを変更するのは面倒だし失敗する可能性があるので、ブラックリストのファイルにIPアドレスを書いて、適宜追加できるようにしてみた。動作確認した時は うまく動いたのだが、たまたま翌日にカーネルの更新で再起動になった あとは繋がらなくなってしまった・・・

それでサーバ(VPS)のコンソールで調べたら、起動はしているもののNWが全然使えない状態になっていた。: ホスト名の検索(DNS)は駄目だし、プロバイダのDNSサーバにすらpingが通らなかった。

ログを調べると、networkd-dispatcherが"Unknown state for interface NetworkctlListState"という訳の分からないエラーを出していた。更新されたカーネルの問題・相性を疑っていたのだが、検索しても ほとんど出て来ないので、僕の環境の問題だと思った。

結局、(上のエラーの前に出ていたのだが、)systemd-networkdが起動しなくなっていたためにNWが使えなくなっていた。その原因は、上に書いたブラックリストのために追加した処理にバグがあり、必須のNWアクセスも遮断するようになっていたためだった。

そのバグというのが しょうもなくて、たった一個の余計な空白(下の $var のあと)が原因だった。シェルスクリプトに

if [ -n "$var " ]; then

のように書いてしまったのを気付かなかった(近眼+老眼+白内障(進行中)のコンボに加え、そもそも眼が不調だ)。$varが空の場合に以降を実行するのに、これでは 全く実行されない。その処理が重要で、実行されないとNWが全部遮断されてしまうのだ。。。

そもそも、空かどうか調べるのに"$var"のように " で挟んで書くのが良くなく(しかも面倒)、もっと間違い にくい書き方がある気はするが、今まで見たことがない。少し考えたい。

そこを直してサーバは回復し、ファイルに入れたブラックリストも ちゃんと動いた。

 

そして更にもう一個、隠れた問題が見付かった。Linuxの仕様なのか、NW-IFを有効にする前のスクリプト(/etc/network/if-pre-up.d/*)が何度も実行されるのだ。僕は そこに上述の悪質アドレスのブロックを設定するスクリプトを入れたのだが、今回初めて、それが何度(4回)も実行されていることに気付いた。

内訳は、実際のNW-IFに対するIPv4, IPv6が各1回、全体に対するもの?(IFACE="--all")、loopback(IFACE="lo")だった。

もちろん使う前に調べれば分かる・調べるべきことだが、余りにも おかしな・杜撰な仕様だ。今まで問題なかったので、スクリプトは何度実行されても問題ないようだが、念のため、一度だけ実行されるように修正した。

スクリプトに渡される環境変数のMETHODが"none", IFACEが"--all"の時だけ実行するようにした。ただ、これはどういう契機なのか分からず、将来は なくなるかも知れないので、実行されなかったら警告が出るようにした。

 

起きてから延々と作業して午後遅くまで掛かったが、そもそも、こんなIPアドレスのブラックリストなんて意味ないことに気付いた。

まず、不正・悪質なアクセスをするサイト(のIPアドレス)は無限にある。※ 良いブラックリストを手軽に入手できないかと検索したら、山のようにブラックリストが出て来たが、それらの いくつかと僕のブラックリストに共通のアドレスはなかった。

※今はまだIPv4がメインだが、v6なら本当に無限だ。それに、v6のアドレスは(プライバシー処理のため)基本的に「日替わり」だから、アクセス時のアドレスに永続性・再現性はない・・・

仮に 良いブラックリストを合わせて使うにしても、無限に多くのアドレスでフィルタリングできる訳はなく、段々重くなり、最後は破綻するだろう。

そして、悪質サイトはブラックリストに載ったらアドレスを変えるだろう。載らなくても随時変えるのではないか?※ 実際、以前アクセスして来たアドレスは、(ログを見る限り、)何度か失敗したあとはアクセスして来ない。それに対応するために余分な幅(例: v4なら256-65536個?、v6なら264個??)を持たせてブロックするとしたら、そのプロバイダの他の人までアクセスできなくなる。

※日本ではそうだが、固定IPアドレスの人が少ないこともありそうだ。そもそも固定にする意味がない。更に、上述のようにv6は基本的に固定でない。

そうやっているうちに、誰もアクセスできなくなりそうだ。

だから、IPアドレスでブロックする仕組みを作りは したし、定期的に不正・悪質なアクセスを調べようと思っては いるが、無意味だと思う。どこかで見たが、リアルタイムに挙動で判定するのが良さそうだ。それがWAFなのだろう。

手軽に使えるものがあるか、気になるところだ。

(23:30) 少し探したら、手軽(無料・簡単)なWAFは なさそうだが、無料のものは いくつか見付かった(例: NAXSI, ModSecurity)。

が、インストールや設定は容易では なさそうなので今後の課題とし、まずは現状の脆弱性などの問題をチェックしようとした。: Nikto2というツールとオンラインのスキャナ(例: InnuniWeb, Mozilla Observatory (HTTP), SSLTrust Free Website Safety & Security Check, WordPress Security Scan)を使った。その結果、軽微な問題は見付かったものの、概ね大丈夫そうだった。

ただ、脆弱性に関して余りチェックをしないもの(HTTPヘッダ辺りが中心の感じ → クライアントに被害を及ぼさないかがメイン?)が多かったので、もっとサーバにキツそうなもの(例: w3af, OWASPのいろいろなツール)でチェックする必要がある。

とりあえず、チェックで見付かったHTTPヘッダ周りの問題を修正した(できないものもあった)。

  • WebサーバとWPのセキュリティプラグインAll In One WP Securityが同じヘッダ(X-Frame-Options: SAMEORIGIN)を出していたため、設定値がおかしい(重複している)という警告が出たので、プラグイン側(Misc. → Frames → Enable iFrame Protection)を解除した。
    • 最初は どうして重複するのか分からず、苦労した。
  • (サーバ・OS依存のようだが、)ETagはリスクがあるとのことなので削除した。
  • httpsでのgzip圧縮にはリスクがある(BREACH攻撃)とのことだが、問題の起こらないタイプだけに制限しているので問題ない。
  • 一番の問題は、Content Security Policy(CSP)に対応していないことだ。: ページの修正が要りそうなので、容易には対応できない。

その他に、TLSの問題・互換性をチェックするものもあったので(例: Observatory (TLS), TLS Checklist inspector)、チェックして修正した。

  • 今はTLS 1.3に移行しつつあるようなので、(obsoleteらしい)1.1を止めて1.2と1.3に対応させた。
    • AEADというものに対応していなかったので、対応させた。
    • 1.3に対応させる時、Mozillaの、サーバの設定例を作るページが役に立った。
      • が、その設定と他のチェックが競合・矛盾する場合があって、(細かい問題ではあるが、)どうするか悩ましい。

あと、SQLインジェクションについても いくつかツールが見付かった(例: sqlmap, jSQL Injection)ものの、そもそもSQLインジェクションを良く理解していないので、正しくチェックできる方法を考える必要がある。

良く考えると、(考えなくても、)SQLインジェクションどころか、サーバのセキュリティ向上は2年以上前からTODOに入っており、今回も少ししたら忘れた振りをして放置する気がする・・・

 

PS. 全くの脇道だが、HTTPヘッダ関連を修正している時、Mozillaの設定サンプルにHTTP/2の設定もあって、調べたらサーバは対応しているので(もちろん、パフォーマンスが劇的に向上するなんて期待は しておらず、興味本位で)ちょっと試したくなった。

が、この「ちょっと」が いつもトラブルを招くのだ・・・w (9/24 8:31)

(9/24 14:39) やっぱり、ちょっとHTTP/2にしてみたw 今度は大きな問題は起こらず、webサーバの設定にHTTP/2を追加しただけで すんなり動いた。ただ、予想どおり、HTTP/2にしても速くならないどころか、わずかに遅くなった(例: このブログは約3%(約11ms)遅くなった)。ページの生成は並列に できないので、基本的には仕方ない。とりあえず試したかったのと、世の中の流れに追従するのが目的なので、まあいい。

このサーバをHTTP/2に対応させた。: Vivaldiの開発者ツールでプロトコル(中央辺りの"Protocol")がHTTP/2を示す"h2"と出ている(最後の"http/1.1"は外部サーバのもの)。

HTTP/2にしても速くない(遅い)原因を考えてみたら、当たり前の気がする。: そもそもHTTP/1.1では複数の接続で同時に転送していたのを、わざわざ1本(想像)にまとめて その中で多重化しているのだから、スケジューリング・多重化・非多重化処理が増えて遅くなりこそすれ速くなる訳がない。

HTTP/1.1の複数の接続では両端の機器や経路へのリソース的な負荷が重くなるが、それが問題なければ、1本にまとめるより ずっと効率が良いと思う。

あと、ヘッダをバイナリにするとデータ量は減るだろうが、元々ものすごく大きいものではないし、エンコード・デコードの処理が増えるから やっぱり少し遅くなるだろうし、ボディ(本体)は もともとバイナリ可なので、何も変わらない。

結局、接続を減らして処理が多くなるのに速くなるという理屈が不思議だ。HTTP/2はリソース面でエコだとは思うが、速度は期待できない。

不思議なのは、JoplinのデスクトップアプリがHTTP/2を使わない(なぜかモバイルアプリは使う)ことで、最新版に更新しても同じだった。良く分からないが、Joplinには構わないことにしているので良い。

他のアプリでは、PC(Linux)ではEvolutionは1.1だったが、意外にもSeamonkeyは2だった。Thuderbirdの新しいコードを取り込んでいるのか。スマフォ(Android)ではDAVx5は2だった。

作業に付随して起こった ちょっとした問題(これで疲れた)は、CLI版を更新したら なぜか起動しなくなり(以前もそうだったので、頭に来て更新しないことにした気がする)、ちょっと調べたらnodeのモジュール@aws-sdk/middleware-endpoint※が不足していたので、自分でダウンロードして追加したら動いた。

※パス: ~/.joplin-bin/lib/node_modules/joplin/node_modules/@aws-sdk/middleware-endpoint

構成ファイルが駄目なのか、nodeのバージョンの関係か。誰も指摘しないのが不思議だが、Joplinには構わないことにしているので、ここまでとした。

(9/24 18:12) 下のPS2にも書いたが、正直言ってHTTP/2はイマイチなので(実際、すぐにHTTP/3が出た)、対応したばかりだが止めた。処理が複雑な割に効果がないし、余計な機能はバグなどを生んでセキュリティ上のリスクになるから、ないほうがいい。

PS2. ようやくHTTP/2に追い付いたと思ったら、HTTP/3が出て居た。開発者ツールでGoogleのサイトを見ていたら"h3"というのがあって気付いた。今度はQUIC/UDPベースだそうで、応答は速そうだ。となると、結局HTTP/2はイマイチだったようだwww でも、HTTP/3も目論見ほど いいのか疑問はある。 (9/24 17:31)

  • キヤノンホームページ

    キヤノンホームページ

    キヤノンの日本国内ポータルサイトです。キヤノン商品情報の他、サポート情報、会社情報、採用情報、投資家…

  •  0
  •  0

先月くらいから左眼が少し調子悪くなった。外に出たりして明るい光を受けたあとに、左下に もやつくような違和感が出る。あと、暗いところで時々白い光が見える。後者は網膜剥離になった時の症状なので、再発したかと心配になったのだが、いつもの眼科の医師は(以前にも書いたように)ひどいので、だらだら延ばして居たものの、背に腹は かえられず、行った。

以前と全く同じ ひどい態度だった。

一通り診たあと、「前回より少し白内障が進んでいる」、「いいです」(= 診察終わり。出ていけ)だけだった。前回と同じ態度だった。※ もやもやの原因や どうすればいいかなどは何も説明してくれなかった。白内障のために もやもやするのか、それ以外なのか全く分からない。

※前回は混んでいたせいで説明などを省いたのかと思ったが、今回は空いていたので、とにかく常に患者対応が嫌いとか面倒なのだろう。

さすがにそれでは何も分からないので、特に問題ないということか聞いたら、「視力は それほど落ちてないから、まだ手術は要らない」とか言った。全然回答になってない。本人としては、白内障のために もやもやすると言ったつもりだったのだろうか?

網膜剥離が再発していないかも不安だが、さすがにそういう兆候があれば放置しないだろうけど、散瞳せず軽く診ただけなので見落としがあるかも知れないと、不安にさせる。

だから、以前は、白内障の手術をするなら近いほうがいいから あそこかと思って居たが、絶対に嫌になった。腕はともかく、その前後に碌なケアをされないことが分かり切っているからだ。検診も もう嫌だ。

とりあえずは様子を見るが、悪化したり心配が昂じるなら、遠いし多少不満はあるけど あそこよりは まともな眼科(これも以前書いた)に行きたい。

 

それにしても、病院・医院は こういう医師ばかりで嫌になる。※ 思い出すだけで、この眼科、手脚の不調で行った整形外科、そのあとの神経内科(それほど ひどくない)、歯科(近頃不満が出て来た)、皮膚科(2院。一つは腕も悪い)、嫌になって行くのを止めた内科と数多い。

※一方、看護師や技師や受付などのスタッフの方で ここまで酷い人は ほとんど見たことがないから、感心するし助かる面はある。が、その落差が結構痛いことも多い。例えば、診察前に看護師さんに仔細に症状を話しても医師には伝わらないとか・・・

↑ 伝わらないのは医師が悪いことがほとんどだが、たまに伝えないスタッフなどが居てムカつく。

なぜ そんなに多くのところで嫌になるか考えてみたら、普通の店などと違い、こっちは病気かも知れず不安で行くのに、ちゃんと説明なりケアしてくれなかったら、不安が解消されるどころか増大するからだ。

それを考えると、既にあるのか ないのか分からないが、医学部ではコミュニケーションの授業にも力を入れて欲しいものだ。国家試験にも、そういう力を測る面接を導入して欲しい。全く重要だ。

とは言え、最初は能力不足が原因かと思ったものの、怠慢とか面倒とか馴れとか疲れでテキトーな対応しかしない輩も居るだろうから、口コミとかで指摘したり、それを参考にするしかないのか。 (かといって、口コミや点数は どこもひどくて、参考にならないことも多い。)

  •  0
  •  0

先日書いたが、このブログで使っているセキュリティプラグインAll In One WP Security(以下、All-in-one)の更新に伴う不具合らしきもののために管理画面にログインできなくなって、慌てた。その後調べたら、似たような問題が起こっている方が結構居て(→ )、やっぱりAll-in-oneに問題がある可能性が高く、別の もっといい(まともな)ものに換えたくなって居た。

必要な機能をリストアップしたものの、探したり試すのが面倒で放置して居た。が、昨日、ちょっとやる気が出たので試してみたら、元のものより良いものは ないうえに、プラグインには関係のない問題(REST APIが動かない)も見付かり(最後に書く)、そこでも苦労して いつものように「骨折り損の くたびれ儲け」となり、疲れた。

結局、(僕には だろうが、)All-in-oneが一番良かった。確かに どうしようもない問題が起こって信頼度や安心感は落ちたが、バージョンが大きく上がって、(人も替わって?)「たまたま」充分な動作確認ができないまま出しちゃったんだろうと想像・期待する。

まあ、某 窓に比べれば可愛いものかも知れないねw

でも、もしまた同じようなことがあったら使い続けるかは分からない。とは言え、今回の比較で、現状では いいものがないことが分かった(そもそも、All-in-oneにした時も そうだった!)ので、どうしようもないが・・・

それに、もしログインできないとかの誤動作が起こっても、緊急的にプラグインを解除して復旧させる方法が分かったので、それくらいなら大丈夫だw

 

以下、条件、候補・試したものと評価・感想を書く。

要求条件 (ALl-in-oneで使っている主な機能を重要な順に)

  • ログインページURLの変更
  • XML-RPCのブロック
    • 忘れて居たが、webサーバでブロックしているので実際には なくても良かった。
  • 非ログイン状態でのREST APIのブロック
  • 連続スパムでIPアドレスをブロック
  • ユーザーリストの禁止
  • 繰り返しのログイン失敗でIPアドレスをブロック
  • 特定ユーザー名(adminなど)でのログイン試行でIPアドレスをブロック

試さなかったもの (予選落ち)

  • Jetpack – WP Security, Backup, Speed, & Growth: 高速化がメインのようだし、関係ないものが詰め込まれているので止めた。
    • 以前、高速化で試したが、うまく動かなかったこともある。

試したもの (概ね試した順に)

  • SiteGround Security
    • 使用データの収集を許可しないと、それを促すメッセージが出続けるので止めた。
    • また、REST APIが動いて居ないというエラーも出続けた。 → あとでWP自体(またはサーバ設定)に問題があることが分かり、対処した。
  • Security & Malware scan by CleanTalk
    • 使うにはAPIキーが要る(自動的に取得できる)。
    • しばらく使うまで気付かなかったが、そのキーは有料サービス(クラウドの「ダッシュボード」, 確かUSD 6/年)の試用用(2週間しか有効でない)で、そのあともプラグイン自体は使えるが、機能としては今一つになること(例: ログが最新のものしか見られなくなる)や、最初に有料サービスであることが明示されなかったので騙された気分がしたので止めた。
    • ただ、クラウドも含めた機能としては悪くなかった。
  • iThemes Security
    • 多くのレビューのとおりで、設定画面が変(デモ版みたいな感じで、細かい設定がない)で、ちゃんと動く気がしなかったので止めた。
      • これを ちゃんと使える人は居るのだろうか??
  • Wordfence Security
    • ログインページのURLが変えられないので止めた。
      • 確かに、インストール前に見た説明にも書いてなかった。
      • 随分有名なようだが、こういう基本的なことができないのは不思議だ。
  • Hide My WP Ghost
    • ログインページのURLを変えるにはwebサーバの設定変更が要るようなことが表示されたので、止めた。
      • あと、変更先のURLが変えられない感じだった。
  • Anti-Malware Security and Brute-Force Firewall
    • 有料版でないと機能が貧弱なので止めた。
  • WPS Hide Login
    • 名前のとおり、単体ではログインページのURLを変えるだけしかできないので、面倒で止めた。
  • Defender Security
    • XML-RPCとREST APIのブロック機能がないので止めた。
    • 他の機能的は悪くなかったものの、無料版はいろいろ惜しい一方で、有料版は かなり高い(USD 7.5/月)。
    • アメコミ的な絵(スーパーマンとかMr. インクレディブル風)は好みが分かれるw、というか要らない。

最後に残った候補 (決断する ちょっと前に良さそうだと思った順に)

  1. Security & Malware scan by CleanTalk
  2. All In One WP Security
  3. Defender Security

ひとまずCleanTalkを試すことにしたのだが、良く考えてみると、機能面ではCleanTalkが断然いいということはなく、総合的にはAll-in-oneのほうが良さそうだと気付き、(耐え難いものを耐えて)All-in-oneに戻った。

そして、最後の判断材料とした2つの比較を示す。

  • All-in-one
    • 長所
      • 必要な一通りの機能が揃っている。
        • 実際には ものすごく多くの機能がある。
      • 設定が細かくできる。
      • スパムコメントのブロックもできる。
      • 本当に無料で使える。
        • 有料版も あるはずだが、無料版で物足りないと思ったことがない。
    • 短所
      • WebサーバがApacheでないと使えない機能が結構ある。
      • マルウェアのスキャンは ない。
      • 近頃の信頼性(主に開発体制的なもの)に不安がある。
  • CleanTalk
    • 長所
      • ファイアウォールにSQLインジェクションのチェック機能がある。
        • これだけは欲しい。別のもので できないかと思う。
      • マルウェアのスキャンが ある。(ただ、インストールされたあと(= 既に実行されたかもしれない)にスキャンするので、ほとんど意味がない。)
      • ボットのブロックができる。(本当に悪意のあるボットは正直にUAを出す訳がないから、あまり意味がない。単なる気休め。)※
        • あとで気付いたが、この機能はAll-in-oneにもある。
    • 短所
      • 「無料詐欺」的。
      • いろいろな通知メールが鬱陶しい。(設定が なくて停められない)

※興味があって、先月の このサーバへのアクセス中のボットかららしきもの(要求ヘッダに"bot"か"crawl"が入っているもの)を調べたら、2割未満だった。少なくはないが、中には悪性でない(とされる)もの(例: Google)も多いだろうから、ムキになってブロックするほどでもないと感じた。

 

最後に、頭に少し書いたREST APIの問題について。

SiteGroundでREST APIがエラーになったのが気になって調べた。: セキュリティプラグインのREST APIのブロックを解除してもエラーになった。最初はwebサーバの設定が悪いのかと思って試行錯誤したが、そうではなく、WordPressの既知の問題のようだった。

どういうことかというと、WordPressは ある時勝手にREST APIを追加したが(そもそも、これが何のためかも分からないし、普通に動かしているとセキュリティ上の問題になるのがおかしい)、普通の設定だと使えないことが多いのだ。

そのため、ちゃんと動かないので、特別ブロック・対処していないサイトでも 瓢箪から駒的に安全になっている・・・

そういう点ではWPは大変良くない感じで脱却したい気はするが、プラグインどころの騒ぎじゃないし、いろいろ手を加えて便利に使って居るので簡単ではない。

動かないのはセキュリティ面でいいものの、意図せず(何かの問題で)動かないのは気に入らないので、調べて動くようにした。結局、以下のいずれかをすればいいようだったが、このサーバでは最後のものしかうまく行かなかった。

  • WPのパーマリンク設定をpost nameにする。 (→ 参照)
  • REST APIのURL: /wp-json/*を/index.php/wp-json/*に換える。 (→ 参照)
    • /index.php?wp-json/* という情報もあった。
    • Webサーバなどの設定で行う。
  • REST APIのURL: /wp-json/*を/?rest_route=/*に換える。 (→ 参照1 → 参照2)
    • Webサーバなどの設定で行う。

それで、Webサーバの設定を変えるのは大ごと(いつも苦労している)なので、手軽に、WPのURL書き換えプラグインRewrite※にルールを追加して対処した。以下のようにした。

最後に追加:

    • Pattern(元): wp-json(/.*)$
    • Match(書き換え後): rest_route=$matches[1]
    • 動作: 元のURLの"wp-json"以降("/"も含む)を"rest_route="のあとに付ける。
      • 上のページでは、書き換え後には/?が先頭にあるが、なくても動作した。おそらく、ここに来る前に付いている(相当な)のだろう。

※このRewriteは便利なのだが、WPの元々のルールに場当たり的に追加して来ているので、なくてもいいものや良くない動きをしているものがありそうだし、何かあったら回復できないので、なかなか爆弾的なものだ。

まあ、そもそも「これ、何に使ってんの?」、「何か いいこと あるん??」って聞きたいくらいだから、直しても何もいいことはないが、(いつものように)気分の問題で直した。

 

まあ、これで一個でもTODOが消化できたのは良かった。しかも、気付いていなかった問題も直せた。

終わってみると、全部、(ちょっと我慢すれば)やらなくても良かったことのような気がしないでもないが・・・w

 

PS. 全く関係ない話。ブラームスを茶化したツイートがあった。: もし彼が今生きていてSNSでメッセージを送ったら、受け取った相手が「あなただけ なんでそんなに長いのよ」と嘆く場面で笑った。彼は何か 言い訳してた気がするが覚えてない。: ブラームス(の曲)は好きじゃないが、僕も同じ類だwww

  •  0
  •  0

(他にも書きたいことはあるが、眠いので軽く。)

近頃、ちょっとしたことが いつの間にか良くなっていた、あるいは、わずかな手間で良くなった。

一番はVivaldi(Linux版)+日本語入力(Fcitx+Mozc)とツイッターの相性問題で、以前は日本語が まともに入らなかった※のが、ちゃんと入れられるようになった。ただ、元々他のサイトでは起こっていなかったので、ツイッター側の問題だったのかも知れない。

※入れている途中で消えたり、文字が抜けたり、消した文字が残って居たり・・・

少し前は、DM(チャット)は まだ今一つな感じもしたが、今は大丈夫かも知れない。

何だか分からないが、とりあえず直って良かった。

次もVivaldiとツイッターだが、ツイート中のビデオの再生開始直後と終わってから少しの間、ブラウザが動かなくなっていたのが解消できた。これは何かが直った訳でなくVivaldiの設定の問題だった(Tabs→"Mute Tab Audio"を"Prioritize Active Tab"から"All Tabs"にした)。本当は元の設定が いいが、無理なものは仕方ない。

最後は、このブログで使っているWordPressが、いつの間にか画像のlazy loading(遅延読み込み)をサポートしていたことだ。僕は、結構前にそのためのプラグイン(Lazy Load - Optimize Images)を入れていたのだが、挙動が ちょっと気に入らなかった(画像の出方が もったいぶっている、それで遅く感じる)ので、早速無効にした。

WPのlazy loadingは そうなっているのが全然分からないので、本当に働いているのか疑って開発者ツールで調べたら、ちゃんとページのスクロールに合わせて画像のアクセスが起こって居たからOKだ。 (→ 画像: 上半分あるいは下の右半分の右側にポツポツとある点のところで、画像を遅延読み込みしている。) きっと、画像が表示される直前に読むのだろう。賢い。某プラグインのように、画像が出てから変に凝ってフェードさせて出すなんて愚の骨頂だ。

WPのlazy loadingでのネットワークアクセス (Vivaldiの開発者ツール)

  •  0
  •  1

最初に断ると、正確には「(Linuxなどの)疑似乱数生成器(PRNG)の一様性の問題」だ。乱数自体の話は いろいろあるだろうけど、それではない。

前の稿に書いたように、乱数で画像の表示順序をランダムにしようとしたら、全然一様でなくて、偏りが大きくて  ばっさり棄てた。頻度の最多と最少の比が2以上もあるのでは、全く使えない。 (実験結果を最後に書く)

単に試行回数が少ないせいなのかと思ったが、階級(分類)数約30に対して1000回実施しても偏りは解消しなかった(約1.8)ので、永久に解消しないように思う。

ある掲示板で見たのだが、僕と類似の質問に対して、統計あるいは数学のプロらしき人が、「そんな試行回数じゃ全然足りない。文句を言う前に統計を勉強しろ」みたいな偉そうなことを書いていた。そういう連中は10万回とかが最低レベルで、基本は「無限の回数」なのだろうが、そんな前提では全く実用にならない!

そもそも、一様な乱数なら、なぜ試行開始から しばらく または ずっと 偏りが生ずるのだろうか? 階級数は少ない(= 狭い)ので偏る理由がない。確かに確率論的には ばらつくこともあり得るが、階級の数より充分大きい(例: 30倍)回数でも依然として偏ったままなのはおかしい。確率論での「充分大きい」は1000倍とか1万倍なのだろうか?

不思議なのは、それを使っているであろう多くのアプリケーションが問題ないことだ。僕の使い方が悪いのか、偶然問題が起こらないのか、そういうものなのか、実際には問題があるけど隠れているのかのどれかは分からない。

 

以下、細かい話である。

上に書いた、乱数のバラつき(階級数29の場合、最多と最少頻度の比が大きい)が気になったので、Linux、特にPHPで使える乱数機能を いろいろ試してみた。

なお、試行回数は階級数(29)の20倍の580回とした。また、頻度の集計には、Stack overflowの"How to generate a random number from a uniform distribution in php?"の回答1に書かれていたものを使った。

以下に、試した方法ごとの最多と最少頻度の比を示す。なお、実行するたびに比は変動するので、2回実施した。

1回目

  • PHP: rand: 5.6※
  • PHP: mt_rand:2.7※
  • PHP: random_int: 2.4
  • PHP: statsパッケージのstats_rand_gen_iuniform: 2.8
  • /dev/urandom (4バイト読み出し): 4.7 (処理に誤りがあったので取り消し。やり直した値はPSを参照のこと。)
  • opensslコマンド(openssl rand 4)*: 3.0 (処理に誤りがあったので取り消し。やり直した値はPSを参照のこと。)
  • shufコマンド(shuf -rn 1 -i 0-MAX): 2.5
  • Python: numpy.random.uniform*: 6.7
  • rand+僕の改良案2@: 2.3

2回目

  • PHP: rand: 2.6
  • PHP: mt_rand: 2.6
  • PHP: random_int: 2.7
  • PHP: statsパッケージのstats_rand_gen_iuniform: 2.8
  • /dev/urandom: 3.1 (処理に誤りがあったので取り消し。やり直した値はPSを参照のこと。)
  • opensslコマンド: rand: 2.8 (処理に誤りがあったので取り消し。やり直した値はPSを参照のこと。)
  • shufコマンド: 2.6
  • Python: numpy.random.uniform: 4
  • rand+僕の改良案2: 4.1

メモ

  • ※ ドキュメントではrandとmt_randは同じものなので、差が出るのはおかしい。mt_randをrandのあとに実行した関係があるのだろうか。実際、2回目はrandとmt_randの比は近かった。
  • * Pythonのnumpy.random.uniformは/dev/randomを使っているのか、随分時間が掛かった。opensslのrandも遅かった。
  • @ randの出す値の密度や間隔と実際の値域のそれが異なることが悪いのかと思い、階級数より充分大きな範囲の乱数から縮小するようにしてみた。要するに、浮動小数点の乱数(0〜1)を任意の範囲の整数にする手順にしてみた。また、結果の整数の乱数を出すのに、以下の2とおりを試した。
    • 案1: mod(剰余)
    • 案2: 除算

 

結局、比較的少ない試行回数ではPHPのrandom_intとshufコマンドが一番一様そう(2.6付近)で、その次はstats_rand_gen_iuniform(2.8)となった。stats_rand_gen_iuniformは安定しているところが良さそうだ。

randやmt_randは悪くないが、変動が大きそうだ。opensslのrandは良くはないが、比較的安定している。なお、Pythonのnumpy.random.uniformや/dev/urandomは今一つだった(後者は使い方が悪いのかも知れない → opensslとともに整数化の処理に誤りがあったので値を取り消した。: 9/15 10:26)。

(9/15 9:03) numpy.random.uniformについては、参考にしたページにある分布のグラフは ほぼ平坦で、これなら許せる(と期待して試した)。その試行回数は10000回(個)なので、階級数(そこでは10)の1000倍くらい試行しないと一様にならないのかも知れない。この、どれだけ繰り返せば充分かというのは、どうすれば分かるのだろうか? また、本質的に そうできない用途では どうするのだろうか?

(9/15 9:12) と書いたあとにグラフを良く見たら、上の例で生成している乱数(グラフの横軸)は整数でなく浮動小数点数だった! 僕は整数に丸めて評価したので、その辺りに問題があるのかも知れない。丸めについては僕も気になっていて、上述の改善案で試行錯誤したけどうまく行かなかった。

グラフを目で見た時と同様に、積分して整数にすればうまく行くだろうか? 面倒なことだ・・・ ← 丸めるのは積分(個数を求める場合)でなく単なる整数化(例: 四捨五入)で良いから、問題なかったはず。

いずれにしても、僕にはまったく許容できない偏りである。

そういう問題または仕様あるいは注意事項があるなら、ドキュメントに書くべきだと思うが、まったく見たことがない。せいぜい"cryptographically secure"かどうかだけだ。

僕に言わせれば、こんなに偏るものがsecureとは思えない。まあ、見るところが違うのだろうけど。

 

(9/16 13:59) 元々の用途(このブログの「時替わりギャラリー」)に対する うまい対処方法(workaround)を思い付いた。: 画像を替えるのに乱数(PHPのrand)を使うが、それで次に表示する画像の番号を直接決めるのでなく、乱数と現在の画像の番号を加えたもの(と画像数の剰余(mod))を次の画像の番号にするのだ。現在の画像番号をn、全画像数をNとすると、次の画像番号n'は以下の式で得られる。

n'= (n + rand(1, N-2)) % N

rand: 整数の乱数: 引数: 最小値, 最大値
%: 剰余

これなら、仮に乱数に出やすい値xがあっても、今の画像からx枚目の画像が出やすくなるだけで、いつも同じ数種類の値(しかも、それらが画像数と「いい関係」にある)が出るのでない限り、特定の画像が出やすくなることは起こりにくいと考えられる。

が、実は そうでもないというオチはないか?: 少なくともrandは今の画像の番号は分からないので、特定の画像が出やすくなるような値は出せないはずだ。あるとすれば、周期的に同じような値が出ること(上の「いい関係」)だろうか? 考えると難しい(面倒だ)。

(9/17 16:28) ところが、そうは問屋が卸さなかった。表示される画像をチェックしていたら、やっぱり良く出るものがあった。想像だが、上のように乱数に何かを加えたものも元の乱数と同じ性質であり、その元の乱数に良く出る値があるなら良く出るスキップ数となり、そのスキップ数と全画像数の関係(割り切れるか)にも よるだろうが、結局同じ画像が良く出るのではないだろうか。

結局、ギャラリー内の画像の順序のとおりに表示するように戻した。

(9/18 12:22) その後、擬似的な乱数としてページのアクセス時刻(正確には この処理を開始する時の時刻, μs単位)を使ってみたが、不思議なことに やっぱり一様でなく、良く出る値(→ 良く出る画像)と全然出ない値が生じた。

例えば、(回数は多くないが、)71回(約4時間分)のアクセスでは、最高に出た値の頻度は最小(1回)の5倍だった。出ない値は2個で、全体の平均は2.6回だった。

アクセス時刻(の階級数での剰余)がある時刻に集中するとは考えられないので この原因も謎だが、出ない3個(各1回と想像)が出やすいところに回って、平均の2.6+2 → 5回になったのかも知れない。

画像数(= 階級数)が29個と、10の倍数でないなのが関係していることも疑った。: アクセスはランダムな時刻に来るが、その時刻を階級(各画像)に振り分ける時に偏りが生ずるのではないか? ただ、時刻は100μs単位(0-99)のように区切っては いないので、剰余が偏りを生むとは思えない。

が、頻度分布を見ると、後半の12から25までの頻度が比較的多いのが気になる。その幅は13で、100と29の剰余に合う。また、頻度の高い区間が始まる12は13-1だ。単なる偶然とは思うが不思議だ。

だから、これは たまたまアクセス時刻が偏ったためで、回数を多くすれ(長時間、数日?見れ)ば均等になるのだろう。が、僕には、起動後数時間経っても偏りが直らないのは許容できないので、この方法もボツにした。

 

PS. Pythonのページに関する追記から、試行回数を増やして一様性を比較してみたら、どうやら、階級数x500回以上試行すれば、僕が満足できる一様性(最多/最少が概ね1.2 → ばらつき20%以内)に できそうなことが分かった。 (9/15 10:37)

試行回数と各方式での最多と最少頻度の比を示す。

29階級x20回= 580回: 2.5辺り (Pythonは3辺り、opensslは5辺り)

  • PHP: rand: 2.38
  • PHP: random_int: 2.64
  • /dev/urandom: 2.42
  • shuf: 2.31
  • openssl rand: 4.5
  • Python numpy.random.uniform: 4.83 2.9

29階級x500回= 14500回: 1.3辺り (random_intとshufとPythonは1.2辺り)

  • PHP: rand: 1.26
  • PHP: random_int: 1.19
  • /dev/urandom: 1.26
  • shuf: 1.21
  • openssl rand: 1.31
  • Python numpy.random.uniform: 2.07 1.2

29階級x1000回= 29000回: 1.1辺り (random_intとshufは1.15辺り、Pythonは1.2辺り)

  • PHP: rand: 1.11
  • PHP: random_int: 1.15
  • /dev/urandom: 1.11
  • shuf: 1.24
  • openssl rand: 1.11
  • Python: numpy.random.uniform: 2.26 1.19

本文で懸念したように、/dev/urandomとopenssl randの使い方(整数化の方法)に誤りがあったので修正した。

また、Pythonの一様性が悪いのは、使い方が良くないせいかも知れない。 ← (9/15 13:42) Pythonのnumpy.random.uniformの出力に想定外の問題があった。: 生成する乱数の最小, 最大値での頻度が他のものの半分くらいになっていた(乱数を表示する時の丸めの問題かも知れない)。 → 仮対処として、生成する範囲を広く取って数を多目に生成して範囲内のものだけを使うようにしたら、一様性は改善された。 → 上を更新した。

それから、Pythonの1回の実行でその系統全部の乱数を生成するようにしたら、実行速度は速くなった。

結局、試行(繰り返し)回数を随分増やせば一様になることが確認できた。実際に使う時にはそうできないことがあるが、その場合は「シャフル」のように あらかじめ一様な分布を作っておくとか、分布が一様になるように調整(取捨選択)するのだろうか?

あと、この問題は「システムの起動後しばらくは(乱数が今一つなので)安全でない」ということには ならないのだろうか? (この辺りは全くの素人なので、単なる思いつきである。)

 

(9/15 10:37 若干修正, 10:37 PSを追加, 16:22 題を明確化; 9/16 13:59 対処方法を追記, 22:42 題を変更; 9/17 16:28, 9/18 12:22 乱数を諦めた件とその後の試行を追記)

  •  1
  •  0

前々回のPSに書いた、このブログのロゴ画像を「時替わり」で いろいろ出すのが意外に気に入ったので(+そこでも書いたように、ERNIE-ViLG Demoで描いた画像が気に入ったのも大きい)、それを改良した。

例によって やることは難しくないのだが、実装には結構手こずった。欲張るせいもあるが、老化で頭が回らなくなっているのだろうか?

以下のようにしたかった。

  • ロゴとして特別に選んだ・作った画像でなく、ブログの投稿に使った画像全体(あるいは新規も)から、気に入ったものを随時選んで出し、あるいは「引っ込め」たい。
    • → 表示する画像を特別なディレクトリにアップロードするとか、それ用の名前にするとか、注釈(キャプション)を特別なファイルに入れるとかせず、WPの仕組みだけで実現して操作を楽にしたい。
    • かといって、前に書いたように、複数画像の対象への一括設定/解除やキャプションの一括更新ができないとかの馬鹿らしい・面倒なこともしたくない。

一方、表示候補の画像を検索するために対象に「マーク」を付けたいのだが、標準のWPだと画像にはタグなどが付けられないという問題がある。

それらが付けられるのは、投稿などだけ。

WPのカスタムフィールドを使えば実装できそうだが、使い勝手が良くない。そこで、プラグインで何とかできないか探したところ、Media Library Assistant(以下、MLA)というものが見付かった。※ 本来は、WPのギャラリー(複数画像をまとめて出す部品: この投稿の一番下にあるもの)を高機能にするものだが、上記のような、画像など(attachment)にタグなどを付ける機能を持っている。

※これは ものすごく高機能で、僕の用途には もったいないくらいで、とても使いこなせない。今回も、本来の用法でないために却って苦労したw

なお、単にランダムに画像を出すだけなら いろいろあるのだが、特に、タグなどで出す候補を指定できるものは なかった。

次のような処理にした。

  • ギャラリーに表示する候補画像(画像以外、動画なども可能なはず)一覧を抽出できるように、MLAのattachment tag(Att. tag(画像: 右端の列))にギャラリー名(今回は"my_gallery"とした)を設定する。
    • こうすることで、ギャラリーに登録された画像を一覧することができる。
  • 画像のキャプションはWPのTitle(画像: サムネイルの右の列)に設定する。
    • カスタムフィールドなどでも可能だが、使い勝手(特に一括更新)を考慮して そうした。
  • ページの表示時は以下の処理を行う。 (注: 変更あり。最後に書く。: 9/14 8:42)
    1. 表示する画像情報がキャッシュされているか調べる。
    2. キャッシュされている場合、
      1. キャッシュから取得した画像情報からURLとキャプションを取得する。
    3. キャッシュされていない場合、
      1. ギャラリーの全画像数を取得する。
      2. 乱数で その中の1枚を選ぶ。
      3. 選んだ画像のURLとキャプションを取得する。
      4. そのURLとキャプションをキャッシュに格納する(今回は生存時間(TTL)は20分とした)。
    4. 画像のURLとキャプションをページの右上に表示する。

なお、前の版では、表示する画像をページ表示部とは別のプログラムで検索・選択していたが、今回はページ表示部だけで完結している。一長一短だが、こちらのほうが保守性は良い。

それから、やはり前に書いたが、表示する画像をページを表示するたびに検索するのは重そうなので、画像の生存時間(TTL)分キャッシュしておいて、その間は検索しないようにした。

キャッシュにはPHPのAPCuを使った。最初はファイルを使ったが、排他制御が厄介なのでAPCuにした。APCuにはTTL経過後にエントリがなくなる機能があるので、生存時間の実装がとても容易だった。

が、APCuにも排他制御の問題(複数のプロセスが同時にキャッシュを更新する場合)はあって、(この用途では必要ではないが、)一応実装した。apcu_entry()という関数を使った。

複数プロセスで同時に※キャッシュに書き込もうとした場合は、(当然ながら)先の情報を採用し、後から書き込むプロセスは、それまでに選んだものを破棄して先に書き込まれた情報を使う(すげ替える)ようにした。破棄した分の処理が無駄になって効率が悪いが、正しい方法は すぐには分からないので、とりあえず こうした。

※実際には同時でなく、どちらかが先になる。マルチプロセッサ/コアの場合は難しいが、OSが ちゃんと処理しているのだろう。

いろいろ苦労して(また疲れて)、動くようになった。結果は このページの右上のとおり(見るたびに変わっているはず)。

と、一言で終わってしまうが、いくら苦労したって、ちゃんと動けば それで終わりだw

 

(9/13 20:31, 9/14 8:42) 表示する画像の選択方法について

上述のように、当初は乱数で選ぶようにしていたが、様子を見ていたら、(PSにも書いたように、)ばらつき・偏りが大きいことが分かった。具体的には、頻繁に出る画像と なかなか出ないものがあった。気になって調べてみたら、最高/最低頻度の比が10前後と随分大きかった。

乱数の作り方・使い方に問題があるかと思って改良してみたが、余り改善できなかった。それから、通常の生成関数方法(PHPのrand())以外に いろいろ試したら※頻度比は2-3程度になったが、全く気に入らなかった。

僕としては全部の画像を平等に出したいので、特定のものが頻繁に出るのは全く許容できない。もし、特別気に入っているものを頻繁に出したいなら、そういう処理にする。

そういう用途では、音楽プレーヤーのような「シャフル」がいいのだろう。(処理が複雑になるのを別とすれば、)画像数が少なければ問題ないが、多くなった場合には一覧を作るのに時間が掛かりそうだ。

※試した内容や結果などの詳細は別の稿に書きたい。(→ 書いた) ただ、どの方法も「元」は同じ処理のようなのか、(下にも書いたが、)何万回も試行(実行)しないとだめなのか、頻度比に大きな違いはなかった。= 「効果なし」だった。

どうやら試行(実行)回数が少ないとばらつきが出るようだが、1000回以上でも頻度比が2では使い物にならないと感じた。

それで、実際の使い方に立ち戻って考えてみた。: ページを見る方にとっては、ページの変わる順番がどうであろうと、(一定時間経過後に)見るたびに変わればいいので、ライブラリ(ギャラリー)に格納された順番に表示するようにした。 → 最初はギャラリーの最初の画像を、切り替わりの時間になったら次に、最後まで行ったら最初に戻るようにした。

切り替わり時間(20分)ごとにリロードして表示されている画像の内容またはURLを記録するのを数十回も続けるのを2周以上※するような奇特熱心な読者にはバレるが、さすがにそういう方は居ないので大丈夫だ。

※計算したら、一周で約10時間掛かる・・・ → 実際にやるなら、スクリプトなどが良さそうだw

なんて余計なことを書かなければ いいのに、技術者なので つい書くw

変更後の処理は以下である。

  1. 現在表示されている画像の情報がキャッシュされているか調べる。
  2. キャッシュされている場合、
    1. キャッシュに格納した時刻から、現在表示されている画像の表示(経過)時間を求める。
    2. 画像の表示時間が切り替え時間(今回は20分)を超えている場合、
      1. キャッシュから取得した画像情報から現在表示されている画像の番号を取得する。
      2. 取得した番号+1の画像を選択する。
        • ただし、ギャラリー中の画像数以上になったら0(最初)にする。
    3. そうでない場合は、以降は実行しないで終わる。
  3. キャッシュされていない場合、
    1. ギャラリー中の最初の画像(番号= 0)を選択する。
  4. 選択した画像のURLとキャプションを取得する。
    • 画像の番号を指定してギャラリーから取り出す。
  5. そのURLとキャプションと画像番号をキャッシュに格納する(生存時間(TTL)は無限)。
  6. 画像のURLとキャプションをページの右上に表示する。

この変更のため、最後に表示した(現在表示されている)画像の番号も画像情報のキャッシュに保存するようにした。また、最後に表示した画像が分からなくなっては困るので、そのキャッシュの生存時間(TTL)を無限にし、画像を切り替えるタイミングは自分で計算するようにした。

この場合も複数プロセスでのキャッシュに対する同時アクセスは起こるが、どのプロセスの次の画像も同じ番号になるはずなので、構わず上書きするようにした。

 

PS. 本題には関係ないが、前の版もそうだったが、乱数が一様でないような感じがする。前の版は中央辺りに頻度の高いものがあり、その隣は頻度が他の1/2くらいと低かった。

今回は、まだサンプル数が少ないものの、全く出ない値(≒ 画像)がある。特に、最小と最大が出ていないのは、プログラムに誤りがあるのかも知れない。。。

(9/14 9:05) その後、やっぱり我慢ならないので、本文に追記したとおり、乱数は止めた。

  •  0
  •  0

昨夜、寝る前に突然やって来た。どうにか対処したものの、大変な寝不足になってしまった。

以下、簡単に流れを書く。

  1. なぜか、ブログの管理画面にログインできなくなった。2要素認証(以下、2FA)が失敗する。
    • 一瞬、サーバが(一種のランサムウェアに)攻撃されて、絶対に入れない状態になったのかとも思った。
      • ただ、sshは問題なく、別のシステムの2FAは成功したので、ブログだけの問題なことが分かってホッとした。
    • あとで分かったが、セキュリティのプラグインAll In One WP Security(以下、All-in-one)の2FAが設定していないにも関わらずonになったようだ。
      • 近頃の更新で、All-in-oneに2FA機能が追加されたけど全然気付いていなかったのが、そもそもの敗因だった。
      • 自分では その2FAをonにした記憶がないので、勝手にonになったか、元々の2FAのプラグインと勘違いしてonにしたのかも知れない。
      • ただ、何も設定していないのに有効になる(できる)のは、とんでもなく ひどい!
        • 間違えて2FAの機能をonにするだけなら有り得るが、どのユーザーを2FAにするか、どんな方式(例: OTP, ハードキー)にするか、OTPなら確認のコード入力など いろいろあるのに、間違えて そこまで設定することは全くない。
      • 元々の2FAのプラグインの設定を流用して勝手に設定されたのだろうか?
        • 書いたあとで分かったが、All-in-oneの2FAをonにすると、管理者などの権限を持っているユーザーは2FAが有効になってしまう。罠だ。
          • そこで、All-in-oneの設定で、2FAを有効にする対象(権限・役割)を なし(全部チェックせず)にしたら、2FAの設定タブがなくなったので、もう間違うことはなさそうだ。
  2. (元々の)2FAのプラグインが変な状態になったと考えて一旦無効にしようとしたが、管理画面に入れないからできない。
    • それで、コマンドラインでプラグインのファイルを削除したが、なぜか2FAを無効にできなかった。
      • その前に、元々の2FAのプラグインのサイトを参考に、設定ファイルで無効にする方法を試したが、効かなかった。
    • 良く調べたら、(上記のように、)元々の2FAのプラグインとは別の、All-in-oneが2FAのOTP入力画面を出していた。
      • 最後は、認証エラーで出ているエラーメッセージを、インストールしているプラグインのプログラムから検索して特定した。。。
      • 似たような画面なので全く気付かず、どうしてもログインできないのが不思議だった。
    • それで、コマンドラインでAll-in-oneのファイルを一時的に削除して どうにかログインし、All-in-oneの2FAを無効にして、今までどおりログインできるようになった。
  3. PHPがダウングレードできない。
    • All-in-oneが悪いと分かる前、近頃更新されたPHPの互換性の問題で元々の2FAのプラグインが うまく動かなくなったかと思い、ダウングレードして試そうとしたものの、いろいろな依存関係のために諦めた。
  4. メールがGmailに送れない。
    • ログイン画面のパスワードリセット機能を使おうとしたが、その案内メールが届かなかった。
      • 届くこともあるのが謎だったが、どうも後述のDNSの逆引きがうまく動いていないためのようだった。
      • 更に、そのメールはパスワードをリセットするだけで、2FAには何もしないので無駄だった。
        • そもそも、元々の2FAのプラグインにはバックアップコードがあるのだが、All-in-one(バックアップコードは有料)とは違うので使えなかった。
    • 調べたら、Googleがスパムと判定するためのようだった。
    • メールの送信元認証システムのSPFやDKIMなるものを設定しないとGoogleはスパム扱いするようなので、(深夜なので止めておけばいいものの・・・)「ちょっと」SPFを設定してみた。
  5. SPFの設定がうまく行かない。
    • 自分のドメイン名を管理するDNSサーバにSPFを設定しても、チェッカーでは「SPFの設定なし」と出た。
      • 原因が良く分かっていないが、DNSの逆引き設定の不良(未設定?: 後述)とDNS情報の伝達遅延のせいだったようだ。
      • 書いたあとで調べたら、原因が分かった。 (9/9 13:56)
        • DNSサーバにSPFを設定する場合、TXTレコードとして書くのが一般的なようだが、以前はSPFレコードとして書く方式もあったけど廃れたようだ(→ 参照)。
        • 一方、僕は良く分からずに、(DNS設定画面のプルダウンメニューに出て来たから)SPFレコードで設定したので、チェッカーが「設定なし」としていたことが分かった。
        • SPFレコードからTXTレコードに設定し直したら、チェッカーもGmailへのメール送信も成功した。
          • 想像だが、未だにSPFレコードをサポートするのはGoogleくらいなのではないか??
  6. DNSの逆引き(IPアドレス→ドメイン名)がおかしい(未設定?)。
    • このサーバの設定項目に逆引きがあるが、ドメイン名のDNSサーバに登録すれば不要だと誤解していて、設定していないのが駄目だったようだ。
    • ただ、今まで、ちゃんと逆引きできていたこともあるので、それは どこのを参照していたかが謎。
      • 記憶が定かでないが、一時設定していたけど止めたのが どこかに残って居たのかも知れない。
    • あと、不勉強なため、逆引きは どこが標準(権威を持つ)サーバなのか分からなかった。このサーバのプロバイダなのだろうか?
      • サーバのプロバイダに問い合わせたら、想像どおり、このサーバのプロバイダにしか逆引き情報は設定できないとのことだ。

 

悪戦苦闘して何とかなったが、All In One WP Securityの ずさんさに呆れたしムカついたので使うのを止めたい。が、代わりの いいものを探すのが面倒だ。あと、DNSの逆引きの件は もう少し調べて勉強したい。

それにしても疲れた。。。

 

PS. 今朝、どうにか片付いて力尽きた頃に、UKの女王が亡くなられたようだ。その頃のツイートに、「BBCの出演者が みんな黒い服になった」というようなものがあった。

頭の中で、時々、(Queenの)"God save the Queen"(1975)が流れ、メイのちょっと寂しげなギターや最後の余韻のようなドラムに浸る。

  •  1
  •  0

近頃はAIが手軽に使えるようになり、描画システムがいくつか出て来た。最初に記事を見たのはMidjourneyというものだが、生成された絵が陰鬱とかゴチャ付いているとか大げさな印象で気乗りがしなかった。あと、Discordで操作するらしいのも面倒そうだった。

次は名前を思い出せないシステムだが、自分のPCで動かすには ものすごいリソースが要るとあったので「関係ないな」になって印象が薄い(もちろん、クラウドで動いているものを使えばいいのだろうが、パスした)。

その次にMimicが出て来たが、そもそも上の2つと同様な手順で描画するものではないので、放置していたら終わってしまった。

3番目は、良く読んでいるまとめサイトに「Mimicは潰されたけど、中国から これが出て来た」※みたいに書かれていた、ERNIE-ViLGである。生成された画像が(Midjourneyと違って)明るくて悪くなかったので興味を持って調べたら、デモサイト(ERNIE-ViLG Demo)で手軽に描画できるようなので、試してみた。

※実際にはMimicとERNIE-ViLGは全然違う種類なので同列にするのは正しくないが、どちらもイラストを描く人に脅威になるという点で並べられていたようだ。

が、それにしても、詳しくは分からないけど、仮にMimicを潰したって同様なものは いくらでも できちゃうんだから全く無意味だ。自分の作品を真似されるのが嫌なのは分かるが、その防ぎ方が間違っている。今だって「トレパク」があるんだから、同じことではないか?

まだ開発中のようだしデモシステムなので いろいろ不具合はあるし、結構時間が掛かることがある(終わらないことも多い)が、描画させるのは楽しく、いじっているうちに数時間経つことも多かった。

「あれは(どうすれば)描ける?」のように、思い付いた題材を描かせて試して気付いたことを、以下に列挙する。

  • 固有名詞には弱い(実は知ってるのに知らん顔する、「いけず」w)。 → 描きたいものを明示的に文字で表現・指定する必要がある。
    • 有名な固有名詞(例: The Beatles(の中国語訳))を指定しても、ストレートに出ることはない。
    • 概ね字面どおりに生成する。
    • ただ、実際には学習しているようで、雰囲気が近かったり近いものが出ることもある(中国で有名で、中国語での表記がぴったりの指示をした場合?)。
      • The Beatlesは、ちゃんと4人くらいのバンドが出て来た。
  • 描画の指示は中国語が良い。
    • 一時、英語や日本語などでも可能だったが、その後、中国語だけになったようだ。
    • 今でも外国語が可能かもしれないが、おそらく機械翻訳しているだけなので、的確な中国語での指示のほうが良い。
      • 実際、 芸能人の名前を日本語で指示するより中国で使われている綴りで指定したほうが似ている度合いが高くなった。 (下の女性芸能人を参照)
      • とはいえ、僕は中国語はできないので、DeepL翻訳やGoogle翻訳を交互に使って試行錯誤している。
      • あと、英語のほうが中国語に伝わりやすい感じなので、日本語だと伝わりにくいものは英語から訳した場合もある。
  • 描画技法(水彩, 油彩など)によって、結果が かなり違う。以下、好きな順。
    • 水彩: 芸術的(風)なことが多い。
    • クレヨン: 子どもっぽいこともある(それも味があっていい)が、暖かい いい感じのこともある。
    • 油彩: リアル、写実的。
      • 油絵の具の盛り上がりなどはないから、名前が良くない気がする。
    • チョーク: 線画が主。意外に いい場合もある。人物の写真が混じることがある。
    • Cartoon: 文字通り漫画・アニメ調。楽しい・ふざけた感じになることが多い。
    • 児童画: (余り試していない)子どもっぽいが、場合によっては いい感じになる。クレヨンに近そう。
  • 描いた絵は(僕から見れば)かなり「うまい」、「芸術的」。: 本当に僕には描けないものばかり。
  • 細部が「怖い」ことがある。: 例: 腕が3本、指が6本、腕や脚がぐにゃぐにゃ・・・ (→ : 指が ちょっと多いかも?)
    • でも、パッと見ただけでは分からないことがあるし、そういう表現と考えれば受け入れられることもある。
    • 描画のあとで自分で修正するのも、いいかもしれない。
  • 一期一会: おそらく、一度描いたものを再度描かせることは不可能だろう。
    • AIの処理的に そうなっている気がするし、AI自体が随時学習しているので、同じ結果は二度と出ない気がする。
    • しかも、処理の内容を示すようなIDもないから、あとで指定することもできない。
    • そういう意味で、本当に「一品もの」、あるいは、音楽の演奏みたいなものなので、気に入ったもの(そうでないものも)は保存しておくほうが良い。

次に、今までに描かせたもののうち、気に入ったものなどを載せる。今回は まさにギャラリーだw

以下、イラストのキャプションには描画指示の元となる日本語または英語 (→ 翻案・調整したもの) → 翻訳した中国語(= 描画指示), 描画技法を示す。

手始め(お遊び): 「ショートボブの女の子」, 「ポニーテールの子」, "Larry for leader" (「(UKの猫)Larryを首相に」という動き → 残念ながらTrussになったようだ), ある女性芸能人(恥ずかしいので名前は伏せる)

「ショートボブの女の子」は随分良い感じだ。catoonが合っていたのかもしれない。「ポニーテールの子」は(ショートボブで結構期待したのに)間違っては居ないけど今一つだった。が、左上がリキテンスタインぽくて好きだ。

“Larry for leader”は指示が悪かった。固有名詞のLarryでは本物のイメージが伝わらない。ただ、「リーダーに」という指示で、どうにかそれらしいものが出た。なお、猫のイラストとしては いいものが多い。

ちなみに、指示として「Larryを首相に」のように書いたら、禁止文言でエラーになって描画できなかった。そこは中国だ。

女性芸能人を日本語で指定では ほとんど似ていないけど別の人に似ているもの(例: 右上: 卓球の元選手, 右下: 昔のアイドル歌手)があったし、左下の人間離れした顔には妙にひかれる。女性芸能人を中国語で指定は、半分くらい本人に似ている、あるいは、イメージが合っている気がする。

誰か分かっちゃった方は こっそり連絡して下さいw

歌シリーズ: 「微笑がえし」, 「半分少女」, 「真っ赤な女の子」, 「私がオバさんになっても」

「微笑がえし」は水彩が良かった。水彩のロングヘアのものは今まで描画したものの中で一番気に入っている。※ そして、微笑んでいるけど微妙に困ったような寂しいような表情が歌に合っていてすごい。その隣のペコちゃん風なのも可愛くて好きだ。これは余白の取り方が うまいと思う。他に、チョークの素朴な感じにちょっとグッと来るものがあった。例えば、左上や中央下である。

※書く必要は全くないのだが、僕はショートボブやポニーテールの人が好きなのに、これが一番いいというのは自分でも おかしい・矛盾も いいところな気がした。が、良く考えると、これは僕が描きたかったもの(「微笑がえし」)に すごくマッチしているからいい・参ったのであって、必ずしも「僕の嗜好全体を通して最高」という訳ではないというところで納得(大人的な決着)した感じだ。

「半分少女」は いかにも可愛い少女になり、昔気に入って居たアナウンサーに似ているものもあった。なお、文字通り半分だけ描画されているものがあった。さすがに歌詞の内容までは理解(学習)されていないため、題の指定では歌に近いものは なかなか出ない。「真っ赤な女の子」も同様で、文字通り赤い服の子が多かった。これは指示が悪かったので仕方ない。歌の意味やイメージを伝えるべきだった。それでも、何となく近そうなものがあったので載せた。

「私がオバさんになっても」では上の曲での経験を踏まえ、歌詞の一部を翻案して指定した。が、それでも描く対象(若い女性)やその内面を想像して描いてもらうのは難しく(それはそうだ。書いてないものは分かりようがない)、全部却下だったが、あとから見返したら何となくそれらしいものが少しあったので、載せた。「で、どうなのよ?」と すごんでそうな感じのはおもしろいし、いろいろ喋っている(ちょっと慌てて問い詰めている?)感じのは何となく宇多田ヒカルに似ているのも気に入った。

黒猫 優作

Larry the catや歌と同様に、「優作」と指示しても全く無意味なので、僕の持つイメージを指示して いくつかいいものが出来た。一番気に入ったものを加工してツイッターのアイコンにした。

優作で感心したのは、僕なんかが黒猫を描くと真っ黒になってしまいがちだが、描かれたものの多くは明るさや色を加減して ちゃんと表現していることだ。あと、どれにも言えるが、背景の色遣いが好きだ。派手だけど やり過ぎでないところが うまい。

「時をかける少女」

(映画・アニメ風)

映画に英語の題"Girl Who Leapt Through Time"があったので、最初はその中国語を指定したが、人物が子どもになってしまった。そこで、映画の主人公は高校生なので そのように指定したら、映画やアニメのイメージに近いものが描けた。

なお、"highschool"は正しくは"high school"だったが、翻訳は大丈夫そうだったw 下の中学も同様。

(原作風)

が、その後、原作では主人公は中学生であることが分かった(すっかり忘れて居たが、「そういえば」と思って調べた)ので、中学生としても描いた。この作品は、どうしても原作よりも映画(あるいはアニメ)の印象が強いが、ジュブナイルとして書かれた原作に忠実に描くとしたら最初のものが一番近い気がする。

自分

自画像的なものを描きたくて、かなり試行錯誤した。自分の属性や好みを文章にして指示した。さすがに こだわりが強く、載せた以外にもボツ稿は かなりある。が、結局、自分を人間として描くことにこだわらないもの()でもいい気がしている。もう少し試したい気がするが、キリがない。

最初の頃は「モーツァルトが好き」を指示に入れていたために、その頃の雰囲気(例: 髪型や服装)になってしまった。同様に、僕とAIで言葉のイメージが違うため、「若くない」とか「50代」とかを入れたらお爺さんになったので、「中年」にした。また、「ピアノが好き」だと演奏の光景になることが多かったし、「眼鏡を掛けた」は猫まで眼鏡になることが多かった。そもそも、「技術者」を指示すると眼鏡になることが多いようだ。

自分で見て、一番雰囲気が近そうなものや気に入ったもの4つを先頭に示した。以降は、雰囲気はいいけど近くないとか全然違うけど気に入ったものである。

「モーツァルト」を入れたものにマイケル・J・フォックスに似ているものがあったのがおもしろい。他に有名人に似ているのは、松尾貴史タモリがある。そこら辺は、本人の画像を学習して生成している気がする。

バンドシリーズ: Yellow magic orchestra, Electric light orchestra

今までに書いたように、"YMO"や"ELO"では分かってくれない。それでも、YMOは少し分かっているのか、結構3人のものがあった。やっぱりクレヨンのは可愛いので、新しいYMOにならないか(強いて言えばBABYMETAL風?)。あと、いかにも女子向けのアニメ的なのもおもしろい。

ELOも、なぜか初期のロゴ的な電球は出た。まあ字面から想像できるものではある。クレヨンのは可愛いので、新しいロゴにして欲しいが、グループ(今はムサ苦しいオジさんだけ・・・)のイメージと全然違うので無理だ。

 

終わりに

使ってみて、(いろいろ欠点はあるものの、)僕には こういうので充分だと感じた。大げさだが、このシステムにより、絵が描けない僕が描けるようになったのだ。実体はAIがいろいろな画像を合成しているのだろうが、描く内容や描き方を指示できて、気が済むまで繰り返せて、最終的に自分が「これだ」と思ったものができる(しかも、他に同じものがない(はず))なら、自分で描くのに近いと思う。

実際、ERNIE-ViLGで描いた優作をツイッターのアイコン(アバター?)に使ったし、「自分」として描いたものを このブログのロゴ画像(右上)にも使いたいと思っている。ただ、どれがいいか迷うのと今の優作の写真も捨てがたいので、ランダムに切り替え表示するようにしたいと思っている。 → とりあえず、作ってテスト中。: 右列一番下の"Random logo test": 10-20分ごとにランダムに切り替わるようにした。 (9/6 13:14) → 良さそうなので、今までの優作のロゴ画像と交換した(今までのものも出る)。 (9/6 21:11) → 処理の概要をPSに書いた。 (9/7 19:36)

それから、よくニュースの記事に ありきたりなストックフォトを載せているが、なまじ写真なので誤解することが多くて意味がない(むしろ逆効果)。※ そういうのは止めて、こういうシステムで内容にマッチしたイラストを描いて載せるべきだと思う。

※だから、写真の下に「イメージです」とか「本文とは関係ありません」とか書いてあって、すごく馬鹿らしい。

あと、記事が対象としている本人の写真だって、その時に撮影したものでないものを載せるのは誤解を生むから良くない。例えば、深刻なニュースなのに(過去の)笑っている写真を載せたら、「不謹慎だ」とか不要な反感を かうこともあるだろう。

 

そして、以前も書いたと思うが、僕には今回試したイラストの描画のように音楽を演奏できるシステムができると うれしい。以下のようなイメージだ。

AI音楽演奏システムの操作のイメージ

  1. 曲名を指定するか、楽譜を入れる。: 例: K. 488
    • フリーのものは自動で楽譜を取得する。
  2. 演奏表現の仕方や、参照する・倣う演奏者・演奏があれば指定する。: 例: 「現代的かつダイナミックかつパワフルに」、「アンスネス(2022)風」
  3. 演奏を生成する。
  4. 全体の感じやパートや部分の感じ・表現を修正・調整
    • 例: 気になるパート・箇所を、再生しながら指定、文章や声で指示、楽譜や波形をマウスなどで指定して、「もっと滑らかに」。
  5. 気に入るまで3-4を繰り返す。

修正・調整は難しそう(音楽的才能や知識が要りそう)だが、そこもAIで補助できるだろうか?

 

PS. ランダムロゴ画像の処理の概要 (9/7 19:36)

機能: このブログのロゴ画像(ページ右上)を、設定した時間ごとにランダムに変更・表示する。

構成: ロゴファイル更新プログラムとブログのロゴ表示ウィジェットからなる。

動作

  • ブログのロゴ表示ウィジェット (phpで記述)
    • ロゴ画像格納ディレクトリ内にある、仮ロゴファイル(logo.sl: 実体の画像ファイルへのsym-link)を表示する。
    • 仮ロゴファイルのsym-linkの実体のファイル名を取得して、ブログのページのHTMLで表示する。
      • 実体でないと、suffixからファイルのタイプを判別できず、表示できない場合があるため。
    • 仮ロゴファイルや実体のファイルがない場合にはデフォルトの画像を表示する。
    • 画像の注釈をファイルから読み込んで、画像の下に表示するようにした。 (なければ出さない。)
      • 注釈は、画像個別かファイル名のパターンで指定することができる。
      • [個別] 画像ファイルのbasename + ".desc"
        • 例: test.desc: test.jpg(など)の注釈になる。
      • [パターン] 画像ファイル名の先頭の文字列 + "@.desc"
        • 例: EVD@.desc: "EVD@"で始まる画像ファイル(例: EVD@Screenshot_2022-09-06_05-26-56.jpg)全部の注釈になる。
  • ロゴファイル更新プログラム: update_logo.sh: crontabで定期的(20分ごと)に実行する。
    • 仮ロゴファイル(logo.sl)の最終更新時刻から10分以内なら処理しない。
    • ロゴ画像格納ディレクトリ内にある画像をランダムに選んで、仮ロゴファイルにsym-linkする。
      • 一般的な画像(JPEG, PNG, GIF)の一般的なsuffixを持つファイルを検索する。
      • 乱数はbashの変数$RANDOMを使った。
        • どうも偏りがある気がするが、平均は中央付近なので気のせいだろうか?
          • 乱数をファイル数に丸める処理(mod)が悪いのだろうか?
          • /dev/randomなどを使っても、同様な感じだった。
      • 前回と同じファイルになった場合は再度選ぶ。

備考

ブログのロゴ表示ウィジェットで全部処理させることもできるが、表示のたびにファイル一覧取得などを行うので、多少処理が重くなりそうなので止めた。一方、そうすれば、表示のたびに異なるロゴ画像を出すことができる。が、そこまでする必要はなさそうだと思った。

画像の注釈は、画像ファイル中のEXIF, XMPなどに格納して取得することも可能だが、それを表示のたびに実行するのは無駄だし重そうなので止めた。キャッシュすることもできるが、そこまでのものではない。

なお、表示時でなく更新時に抽出すれば重くならないが、抽出したファイルの管理が増えて、ちょっと煩雑である。

また、そもそもPNGでは そういう情報を格納できないので不都合がある。また、パターンでの指定ができないので、多くのファイルに同じ注釈を設定する時には設定だけでなく変更時も煩雑になる。

  •  0
  •  0

昨日、非常用品の点検をしていて気付いたのだが、部屋の懐中電灯の電池の期限が2007/10と、おそろしく古かった。これは製造年月ではないと思うが、どっちにしても古い。それでも全く液漏れしていないどころか、明るく点くのに感心した。さすがパナだ。

とは言え、いつ液漏れするか分からないので「ちゃんと」しようと思った。乾電池は寿命や交換が煩雑なので、単3→単1アダプタで充電池(いわゆるエネループ)を使おうと思ったのだが、手元にアダプタは1個しかない(同様に充電池にしたランタンが3本使うので、半端に余って居る)ので買わなくてはならない。

100円ショップにありそうなので、散歩がてら買いに行こうと思ったが、どうも面倒だった。しかも、もし2個1組だったら また余ってしまうではないか(無限ループ・・・)。それで、ちょっと思い付いてテキトーにアダプタを作ってみた。

要するに、単3電池を太くして少し長くすればいいので、とりあえず、ちょっと厚手(5mmくらい?)の発泡スチロールのシートを巻いてみた太さは合った。※ 長さが足りない分は金属の何かを詰めようと思ったが、実際には懐中電灯の底の蓋に付いている-極用のバネを少し伸ばせば良い(実際には、そのままでも点いた)。が、ちょっと暗かった。充電池で電圧が低いせいだと思って諦めたのだが、もう少し何とかなりそうな気がして挑戦したら、結構明るくなった。

※シートが厚いため、中心が少しズレている。が、上を本物のアダプタ(-極が広い)にしたら問題はなかった。また、シートはダクトテープで留めた。黒で目立って綺麗でないが、白のテープより余っていたので使った。

最初は、長さが足りない分をネジ(ボルト)やワッシャを重ねて補ってみたが、接触抵抗が大きいらしく、それほど明るくならなかった。それで、柔らかく抵抗が少なく、厚みが出せる金属を探したら、シールド線の網線(写真: 上部の銀色)が目に付いた。それを直径1cmくらいに丸めて(写真: 下部)蓋のバネの先に付けてみたら、まあまあだった。更に接触を良くしようと、網線の端をバネと蓋の間に挟んだら、単1電池には及ばないものの、随分明るくなった

これなら、もし本物の単1電池を使う時でも簡単に外せる(外さなくても、バネの隙間に押し込めば良い)から便利だ。

他愛のない工作ではあるが、非常時には こういう感じに電池の流用が できることが分かったし、懐中電灯の明るさを向上させるツボの一つが分かった。

 

PS. 本題とは関係ないが、手元に単2電池が余っているのを見るにつけ、なぜか今は彼らの立つ瀬がなくなってしまったのが可哀想だ(そもそも、その単2電池をなぜ買ったかすら思い出せない)。昔は小さめのラジカセや大き目のラジオなどで使われていたと思うが、今は単3かバッテリーパックになってしまったからか。

  •  0
  •  0

延々と続く部屋の改造改良・異臭への対処: 今回は ちょっと失敗だった。改良作業自体は うまく行ったのだが、事前検討・確認不足でボツにしたので作業が無駄になった。それでも、異臭については改善できた。

近頃、トイレの換気扇を掃除したあとだったと思うが、トイレで鼻がムズムズすることに気付いた。その後、居間でもムズムズするようになった。 (← 下記のとおり、掃除の前からトイレでしていた。)

掃除する前はムズムズしなかった気がするが、確かではない。もしそうなら、なぜ以前は臭わなかったかは謎だ。もしかすると、掃除前はもっと臭いがひどくて、今はしない薬品臭や農薬臭(や煙草臭: これは汚れとは無関係にある)が起こっていたのかも知れない。 ← 記録を調べたら、トイレの換気扇(エアコンも)の掃除の前、6月頃にトイレでムズムズしていたので、どちらも関係なさそうだ。 (9/1 8:58)

それは、(居間については)エアコンの(ファンの)汚れ(カビ?)によるものか、風呂の換気扇による負圧や外からの風でトイレの換気扇※から臭い空気が出て来て(逆流して)、トイレだけでなく居間にまで達するためだと推測した。

※なぜか、風呂の換気扇からは臭いは出て来ない。ダクトが長いため抵抗が大きくて外から風が入りにくいのと、間欠運転で頻繁に排気しているためだと推測している。

エアコンのファンの汚れについては、数回掃除したが完全には綺麗にできていない。いずれファンを外して丸洗いしたいと思っている。

換気扇については、最初は臭いの元はダクト内部に付いた汚れ※だと考えていたが、逆流して風が吹き出ていても臭わないこともあるので、外の臭いが主なようだ。*

※ダクトは蛇腹状になっているので(→ : これは外に通じていないので綺麗)、その溝に汚れが溜まっていると想像した。

*それであれば、換気扇だけでなく、通常の空気取り入れ口から入った空気でもムズムズするはずだが、なぜか余りひどくない。ムズムズする成分が換気扇の排気口付近に溜まるのだろうか? 天井の影響?

一方、エアコンを掛けた車でもムズムズすることがあるし しないこともあるので、エアコンよりは外の臭いが主因だと思う。

あと、部屋で洗濯物を干している時にもそうなるので、水道水に含まれる成分(塩素? カルシウム?)が関係しているのかも知れない。ただ、車の排気ガスの成分のような気はする。

いずれにしても、ムズムズを防ぐにはトイレの換気扇から風が入らないように(逆流しないように)すれば良い。そのために、風呂の換気扇を回している時にトイレの換気扇から逆流しないようにすることを考えた。

この時は外の風での逆流を防ぐことは考えていなかった。というのは、部屋の換気扇の反対側の開口は閉じているので、論理的には風での逆流は ほとんど起こらないはずだと考えていたからだ。ただ、微妙な漏れがあるのかトイレの換気扇のダクトが短いせいか、実際には起こるようだ。

そうするには、トイレの換気扇に逆止シャッターを付けるか風呂の換気扇と同時にトイレの換気扇も回せば良い。前者は以前行った時には若干の漏れがあって完全には逆流を防げなかったので、より確実そうな後者にした。簡単に書くと、風呂とトイレの換気扇のスイッチと間欠運転用のリレーを並列に接続した。そうすれば、いずれかのスイッチかリレーをonすれば、両方の換気扇が回る。

必要な材料を揃えて、換気扇制御タイマーの変更や配線などを行い、うまく動作しムズムズも ほとんど収まって一件落着と思ったのだが、寝ていて目が覚めた時に、トイレの換気扇が結構うるさい(主に低音)ことが分かった。

どういう訳か、風呂のは静かだがトイレのは寝室に響くようだ。また、なぜか居間では うるさくないので、部屋の構造が関係しているようだ。

結局、うるさいと睡眠に悪影響がありそうなので、トイレの換気扇は頻繁に動かしたくなくなり、風呂のと連動させるのを止め、グリルに逆止シャッター※を付けて逆流を防ぐようにした。

※以前、風呂の換気扇用にクリアフォルダーで作ったものを少し変更して作った。

なお、元々換気扇のダクト側にシャッターは付いているが、密閉性が悪いせいか(強風が対象のようだ)結構漏れるので、僕には不充分だ。

ただ、シャッターには微妙な漏れがあるし、(上にも書いたように、)そもそも換気で外からの空気が入って来るため、まだムズムズすることはある。それでも、ないよりはずっと良くなった。

 

良くあることだが、何かをする前に問題がないか充分に考え・確かめることは重要だ。とは言え、考えてばかりだと結局何もしないで終わることもあるから、事前検討段階で素早く問題を見抜く(結構苦手だ)力が重要そうだ。

あと、いくら苦労したって、「駄目なものは駄目」で さっさと損切するのも重要だ。

その点では、どこかの国のように、(下らないプライドのために)一旦決めたら いくら不都合・不合理があっても やり抜き、そのあとで延々と不都合を我慢するほどの馬鹿でないのは ちょっとした誇りだ。

 

以下、作業にまつわる話を書く。: 作業が無駄だったので無意味なこともあるが、新たな知見・経験も得られた。

  • 当然ながら、2つの換気扇を連動させる(同時に回す)とCO2減少速度が向上した(換気能力が高まった)。: 約1.4倍になった。
    • 2つの換気扇が同様な能力なのに2倍近くならないのは、トイレの換気扇が吸気口(玄関)に近いのと、CO2を測定している居間から遠いせいだと推測している。
  • 秋月のXHコネクタの互換品(中国製)は全く駄目。信頼性・耐久性がない。
    • ピンに半田付けすると穴が緩くなってレセプタクル(ジャック)に挿すと抜けてしまうので、ピンごとに瞬間接着剤での固定が必要で、とても実用にならない。。。
      • それに懲りて、2回目の半田付けでは、ピンに即席の放熱板(お酒のアルミのキャップカバーを加工したもの)を付けたが、それでも不充分で、挿す時に後ろにズレた。
    • 「互換性を充分に検証した」のように書かれていたけど、駄目だった。サイズは合っていても、材質や耐久性まではチェックしなかったのかも知れない。
  • コードの容量(許容電流)について、今まで誤解していた(良く考えていなかった)。
    • 物理的に、コードの導体(線)が細ければ細いほど、大電流を流した時に発熱量が増える。 (→ 参照)
    • だから、コードの容量は、主に被覆の耐熱性(溶ける温度)で決まると考えられる。
      • 「細いけど なぜか許容電流が大きい」コードは、発熱するけど被覆が耐えるというだけで、特別な魔術はない。
        • 上は どのコードも導体が同じ(銅)とした場合である。金や銀のように抵抗の小さい導体なら発熱量は小さくなるし、超伝導のコードなら発熱しない(想像)。
      • だから、例えば、被覆が数百度に耐えるために許容電流が大きい細いコードに大電流(許容範囲内)を流すと、周囲は かなりの高温になって、(そのコードは問題ないけど)周囲は想定外の事態になりそうだ。
    • そういう訳で、電力用途では、(表示の許容電流を盲信せず)なるべく導体が太いコードを選ぶほうが良いことが分かった。
  • 今回は、コードを壁に留めるのに ひっつき虫(コクヨ)を使った。
    • 以前使ったブルタックは色(薄い水色)が付いていて(若干)目立つのと、柔らかいため、暑いと弱い(コードの力で浮いて来る)ので、その前に使ったハリ玉を買ったが、硬くて付きにくかったので ひっつき虫にした。
    • ただ、ひっつき虫もブルタックと同じくらい柔らかいので、暑いと弱そうだ。もう少し丁度良いものがあるか、気になるところだ。
      • 以前見送った ウフ ペタフィックスというのに興味はあるが、ブルタックもハリ玉もひっつき虫も随分残って居るので、まだ先だ。
    • いずれにしても、とりあえず、以前のブルタックは ひっつき虫に換えたい。
  • 換気扇には関係ないが、エアコンのファンを外さずに完全に清掃するのは難しい。
    • 前回の清掃のあとに、再度ボロ布を割り箸に巻いて清掃したが、余り綺麗にならなかった。
    • 次に、100円ショップの筒用ブラシ(ダイソー 注ぎ口洗いブラシ, 太いほう, 径約1.5-2cm)で擦ってからセスキ水と水を噴霧したが、上の写真のようにやっぱり茶色い汚れが残った。
      • ただ、擦ると黒い煤状の汚れの塊が落ち、セスキ水では黒い水が垂れたが以前ほど汚くなかったので、それなりに落ちては居るようだ。
      • また、ファンの全部の隙間を掃除してもブラシは問題なかったので、意外に耐久性があるようだ。
    • なお、少し毛羽の付いた布を棒に被せるクリーナー(ダイソー おそうじ棒)も試したが、すぐに汚れるため、掃除する箇所が多いとクリーナー自体の掃除が頻繁になるのと、ファンの羽根は微妙に湾曲していて布ではそこまで綺麗にできないので、使わなかった。
      • ファンの羽根の隙間は狭いので、割り箸を削って作った棒に被せた。
    • いずれにしても、分解してファン単体を丸洗いしたいところだが、難度は高い。

 

(9/1 7:40 文章と写真を追加; 9/1 8:58, 10:16, 10:34, 15:54 加筆・修正)

  •  0
  •  0