Hi there 👋

Welcome to my blog

Echo Budsの充電問題

TL;DR Amazon Echo Budsはケースのバッテリーがなくなると操作不可。ケースのバッテリーはケースを開けた状態のLEDで判別 経緯 Amazon Echo Budsを利用して、すぐにバッテリーがなくなると思うことが多かった。前回使った際に接続先のスマホでは十分なバッテリー残量が表示されていた気がするのに、いざ使おうとケースから取り出すと、バッテリー切れのためかケースもイヤホンも反応しない。 さすがにおかしいと思い、スマホのAlexaアプリに接続したところ、イヤホンのバッテリーは十分だがケースのバッテリーがわずかだとわかった。おそらく、以下のような話と思われる。 イヤホンとは別にケースにもバッテリーがある ケースのバッテリーが切れると、イヤホンも操作できない 充電時には、まずイヤホン、次にケースが充電される 充電時にケースを閉じていると(普通そうだと思うが…)、イヤホンの充電ができた時点で(充電OKを示す)緑色のランプが点灯する 2点目はあまりに残念。フォーラムで回答されていることから仕様なのだと思われる。他社のイヤホンをそれほど使ったことはないのだが、そういうものなのだろうか? https://jp.amazonforum.com/s/question/0D56Q0000AKLLhdSQH またそれと相まって4点目が罠。ケースも充電されたら緑になればよいと思うのだが、仕様としては蓋を閉じているときはイヤホン、開けたときはケースのバッテリーを示すということのよう。

December 2, 2022 Â· 1 min Â· tack41

Windows 11 22H2更新後にHyper-Vゲストがネットワーク接続不可

TL;DR Windows 11 22H2更新後にHyper-Vの外部ネットワークへの接続が不通に。仮想スイッチを新規作成して物理NICを新しい方に付け替えてVMに割り当てると解決した 経緯 Windows 11 22H2に更新しました。Windows Updateでは出てこなかったので、アップグレードアシスタントをダウンロードして手動で適用しました。 再起動せずに使用していたその日は問題なかったのですが、翌日、Hyper-Vのゲストがネットワークにつながらない…ネットワークにつながっていると認識はしているが、他と一切通信できないのかDHCPでのIP取得ができない ひとまず、ゲストOS上でNICの無効→有効、OSの再起動をしても状況変わらず。原因はOSの更新以外に思い当たらないため、「windows 22H2 Hyper-V Guest cannot connect」あたりでGoogle検索したところ、以下の記事を発見。 https://learn.microsoft.com/en-us/answers/questions/881974/windows-11-22h2-broke-custom-virtual-switches-in-h.html 6月の記事なのでもう解消している可能性はあるが、仮想スイッチが壊れて同様の症状が発生したとのことで、該当のゲストを別の仮想スイッチに割り当てて解消したとのこと。 問題のゲストは、External設定でホストの物理NICを割り当てた仮想スイッチを割り当てていました。新規にExternal仮想スイッチを作成して、問題の仮想スイッチはInternalに変更。ホストの物理NICを新規仮想スイッチに割り当ててゲストに割り当てたところ、ネットワークに接続できるようになりました。 まだまだ不具合があるのかもしれませんので、この辺のトラブルシューティングを楽しむぐらいでないと22H2はまだ早いのかも。

October 21, 2022 Â· 1 min Â· tack41

FortigateのDNSは配下のサーバに設定しちゃダメ

TL;DR FortigateのDNSに配下のサーバを設定しちゃダメ。Fortigate標準がよい。 経緯 Fortigateのファームウェアを6.2.xから6.4.xにバージョンアップしました。直後にインターネットに繋がらなくなってしまいました。 Fortigateはtransparenteモードで使っており、Fortigateを外すと解消するので原因がFortigateであることは特定できました。 調査すると、まず名前解決に失敗しているように見えました。ルータ配下にFortigateを経由してPCやサーバにつながる構成になっています。PPPoEでプロバイダに接続しているルータでは名前解決はできてました。YAMAHA RTXシリーズを利用しており、SSHでログインしてnslookupで確認できます。 ですが、社内に設置したWindowsのAD兼DNSサーバでは名前解決に失敗しています。FortigateのDNSはこのWindowsサーバを指定していたため同様に名前解決ができず、FortiCloudが参照できないと警告が出ていました。 そこで、DNS設定をFortigate標準のものに変えたところ、警告が解消され、他のPCでもインターネットに接続できるようになりました。 今回の現象に対する推測ですが、Fortigateのバージョンアップにより、FortiCloudから最新のデータを取得できるまで通信をブロックする動きだったのではないかと。FortiCloudと通信するためにDNSで名前解決しようとしたところ、参照するDNSサーバ(AD兼DNSのWindowsサーバ)がFortigateの配下にあるため通信出来なかったと思われます。 その後、FortigateのDNSをForigate標準にしたことで、事前設定されたForitigateのDNSサーバに通信する形となってブロックされずに通信でき、FortiCloudの設定が完了してブロックが解除されたのではないかとおもわれる。 Fortigateが参照するDNSを配下のサーバにすると、今回のように通信ブロックをきっかけにFortigate自身が動作不能となる恐れがあることがわかった。Fortigate標準の設定やGoogleの8.8.8.8など、インターネット側の信頼できるサーバを指定すべきということだろう。

October 13, 2022 Â· 1 min Â· tack41

PlantUMLからMermaidに乗り換えられなかった

TL;DR Mermaidは動作環境が多くて使いやすそうだが、まだまだPlantUMLでしかできないことも多い 経緯 開発資料の作成の際、クラス図をPlantUMLで書いている。正確には、PlantUMLのコードをgit管理しつつ、PlantUMLのサイトで画像に変換してからMarkdownで参照している。VScodeでライブプレビューしようとするとJavaのインストールが必要で面倒だし、GitHubで参照する際には画像にしないとだめ。 Mermaid形式だと、GitHubがMarkdown内での記述に対する表示に公式に対応していて、VSCodeでも拡張機能をインストールすればプレビューできる。 移行してみたが、断念。理由はクラス図におけるpackage/namespaceに対応していないため。開発はDDDを意識していて、Domain,Presentation,UseCase,Infrastructureといった層を開発言語(主にC#)のnamespace/packageに対応させている。 まあそれは管理のしやすさからだけだが、少なくともクラス図上ではそれぞれの層を含めて記述し、Presentation層からInfrastructure層を呼ぶようなルール違反がないことを確認できるようにしたい。だが、Mermaidではまだ対応していないよう。GitHubのmermaid-jsのIssuesを見ると、要望自体はあがっているようだが… https://github.com/mermaid-js/mermaid/issues/1052 開発文書は、Markdownで書いてGitHubで直接閲覧することが多くなってきているので、GitHubが対応してくれればローカルにJava入れるのもよいのだが、まだ時期尚早か。 Draw.io でも書けるが、お絵かきソフトなのでクラスの情報が見た目にしか残らず、抵抗感がある。

October 7, 2022 Â· 1 min Â· tack41

Ansible変数未定義、または空の場合にfailさせる

TL;DR Ansibleで複数の変数の存在チェック、文字列の場合は空のチェックをしたい場合は ansible.builtin.fail: msg: Varialbe '{{ item }}' is not defined or empty. when: > item is not defined or item is none or ( item is string and item | length == 0 ) loop: - '{{ var1 }}' - '{{ var2 }}' #nolog: true # Hide credencials, but suppress message. 経緯 Ansibleで引数が定義されていて、空でないかどうかチェックしたい。1個ずつやるのもだるいのでloopでまとめて。 以下でできるかと思ったのだが… ansible.builtin.fail: msg: Varialbe '{{ item }}' is not defined or empty. when: > item is not defined or item is none or item | length == 0 loop: - '{{ var1 }}' - '{{ var2 }}' これだと、変数に数字が設定されていると型がstringにはならず、lengthの実行でlen()メソッドがないと言われてこけてしまう。このため、以下のように型がstringかチェックしたうえでlengthチェックさせる。また、内容がパスワードなどを含む場合はno_log: trueとするとよい。ただしその場合エラー時のメッセージも簡略化されてどの変数でこけたのか、別途調査が必要となる。...

September 30, 2022 Â· 1 min Â· tack41