ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

NHKの衛生契約を解除したよ

(2025-08-01 初稿)

久しぶりの投稿だが、相変わらずどうでも良い雑談。

先日、築30年で住宅会社に点検をしてもらった際に、屋根の天窓の部分(エプロン)を修理する必要があると言われた。

ついでに、最近は、ほとんどテレビを見なくなったし、ましてや衛星放送を見ることも少なくなったので、2025年7月25日にBSアンテナの撤去工事を行ってもらった。

翌7月26日に電話でNHKに契約変更の申込みを行い、本日(8月1日)に契約変更の手続きの書類が届いたので、早速書類を作成し郵送した。

NHK受信契約の受信料は、年間契約で地上+衛生で21,765円、地上のみで12,276円で、その差額は、9,489円。

1月あたりに換算すると、約790円の差額となる。

わが家では、ほぼ他の定額のサービスは利用していないが、唯一Amazon Primeに入会しており、毎月600円ほど掛かっている。

Amazon Primeは、購入した際の配送料やPrime Video、Music、Kindleなどいろいろなサービスを受けられるため、少額の物を多数購入するわが家では便利に利用させてもらっている。

今回NHKの衛生契約を解除することによって、Amazon Primeの料金が払えることになった。

定額のサービスは気づかないうちにお金が減少してしまうので、今後も各サービスの利用頻度を鑑みながら、加入、変更、脱退を検討していく。

関連ページ

最近流行りのGemini-CLIをDebian、Rasberry Pi、WSL2にインストールしてみた

(2025-7-10 初稿)

最近、巷で騒がれているGemini-CLIDebian 12、Raspberry Pi 4、WSL2にインストールして使ってみたので、インストールと簡単な使い方をアップする。

いろいろな機器にインストールしたけど、OSはほぼDebianないしはその亜種なので、インストールの方法は一括して記載する。

前提条件

インストールにあたり、前提条件として以下のソフトウェアがインストールされているか確認し、インストールされていない場合は、インストールする。

$ node -v
v18.19.0
$ npm -v
9.2.0

バージョン情報が返ってこない場合は、以下のとおりインストールする。

$ sudo apt install nodejs npm

Gemini-CLIのインストール

以下のサイトを参考に、Gemini-CLIをインストールする。

ただし、上記サイトにあるnpxを用いた一時的なインストールは、DebianRaspberry pi、WSL2のいずれも動作しなかったので、以下のように恒久的にインストールする。

$ npm install -g @google/gemini-cli

インストールが終了したら、特にnodejsやnpmを初めてインストールした場合は、再起動を行った方が無難である。

$ sudo reboot
$ wsl --shutdown
$ wsl

再起動後、以下のコマンドでGeminiを起動する。

$ gemini

起動後は、上記サイトにあるように、まずはテーマの選択を行い、続いて認証方法の選択を行う。

ちなみに、筆者は以下のとおり行った。

  1. テーマの選択: デフォルト
  2. 認証方法: Login with Google

以上で、インストールはすべて終了である。

起動したGeminiは、「/exit」または「/quit」コマンドで終了できる。

簡単な使い方

Geminiのプロンプトで、[/doc」コマンドでドキュメントを読むことができる。

より簡単なヘルプは、以下のとおり。

$ gemini --help
オプション:
  -m, --model                    Model   [文字列] [デフォルト: "gemini-2.5-pro"]
  -p, --prompt                   Prompt. Appended to input on stdin (if any).
                                                                        [文字列]
  -s, --sandbox                  Run in sandbox?                          [真偽]
      --sandbox-image            Sandbox image URI.                     [文字列]
  -d, --debug                    Run in debug mode?   [真偽] [デフォルト: false]
  -a, --all_files                Include ALL files in context?
                                                      [真偽] [デフォルト: false]
      --show_memory_usage        Show memory usage in status bar
                                                      [真偽] [デフォルト: false]
  -y, --yolo                     Automatically accept all actions (aka YOLO
                                 mode, see
                                 https://www.youtube.com/watch?v=xvFZjo5PgG0 for
                                 more details)?       [真偽] [デフォルト: false]
      --telemetry                Enable telemetry? This flag specifically
                                 controls if telemetry is sent. Other
                                 --telemetry-* flags set specific values but do
                                 not enable telemetry on their own.       [真偽]
      --telemetry-target         Set the telemetry target (local or gcp).
                                 Overrides settings files.
                                     [文字列] [選択してください: "local", "gcp"]
      --telemetry-otlp-endpoint  Set the OTLP endpoint for telemetry. Overrides
                                 environment variables and settings files.
                                                                        [文字列]
      --telemetry-log-prompts    Enable or disable logging of user prompts for
                                 telemetry. Overrides settings files.     [真偽]
  -c, --checkpointing            Enables checkpointing of file edits
                                                      [真偽] [デフォルト: false]
  -v, --version                  バージョンを表示                         [真偽]
  -h, --help                     ヘルプを表示                             [真偽]

使用例として以下の2つをあげるが、実際に使ってみた方が理解が進むと思われる。

$ gemini -p "gemini-cligoogle-generativeaiの使い方を教えてください?"
$ gemini -p "@yotei.txt 6月13日はどんな予定がありますか?"
6月13日の予定は以下の通りです。
(以下、省略)
$ echo "明日の〇〇場所の天気は晴れそうですか?" | gemini

筆者は、@で解析するファイルを指定する方法、または、パイプでGeminiに渡す方法が使いやすいと感じた。

1分当たり60個、一日当たり1,000個のリクエストを処理することができる、大盤振る舞いなので、皆さんも使ってみてはいかがでしょう。

関連ページ

Windows11でもWingetで便利に過ごす

(2025-07-09 初稿)

普段は、Linuxを使っており、aptを使って便利にソフトウェアのインストール、アップグレード、アンインストールを行っている。

ずっと知らなかったのだが、WindowsでもWingetという便利なソフトウェアがあることを知った。

ここでは、自分のメモ用にWIngetの簡単な使い方を紹介する。

冒頭で述べたように普段はDebianを使っている筆者なので、細かい点は大目に見てやってください。

以下では、例としてPDFをテキストに変換するpdftotext.exeというコマンドをインストールする手順を示す。

> winget search pdftotext
入力条件に一致するパッケージが見つかりませんでした。

あれ?、いきなり見つからない…(^^;

でネットを検索すると、pdftotext.exeはpopplerというパッケージに入っているらしい。

> winget search poppler
名前     ID                     バージョン 一致         ソース
--------------------------------------------------------------
Poppler  oschwartz10612.Poppler 24.08.0-0               winget
pympress Cimbali.pympress       1.8.6      Tag: poppler winget

今度は、2つほどヒットしたが、上のPopplerのソフトウェアをインスト―ルすることにする。

> winget install -e  oschwartz10612.Poppler

-e オプションは、大文字、小文字を区別してIDを指定する。間違いなく、パッケージをインストールすることができる。

これまでに、インストールしたパッケージのリストは、以下のようにして得る。

> winget list
名前                   ID                      バージョン       利用可能      ソース
-------------------------------------------------------------------------------------
Mozilla Thunderbird (… Mozilla.Thunderbird.ja  140.0                          winget
(以下、省略)

で、便利なのは、upgradeが必要なリストの一覧。

> winget upgrade
名前                ID                  バージョン         利用可能            ソース
-------------------------------------------------------------------------------------
Microsoft Visual C… Microsoft.VCRedist… 10.0.30319         10.0.40219          winget
Microsoft Visual C… Microsoft.VCRedist… 12.0.30501.0       12.0.40664.0       winget
(以下、省略)

全てのパッケージを一括でupgradeするには、以下のとおり。

> winget upgrade --all

これまで、いろいろなところに新しいパッケージをダウンロードしに行っていたのが、バカらしくなるくらい便利だ。

個別にアップグレードしたいときには、IDを指定してアップグレードする。

> winget upgrade --id  oschwartz10612.Poppler

wingetの詳細は、--helpオプションで確認できる。

> winget --help
v1.11.400 の Windows パッケージ マネージャー
Copyright (c) Microsoft Corporation. All rights reserved.

WinGet コマンド ライン ユーティリティを使用すると、コマンド ラインからアプリケーションやその他のパッケージをインストールできます。
使用法: winget  [<コマンド>] [<オプション>]
使用できるコマンドは次のとおりです:
  install    指定されたパッケージをインストール
  show       パッケージに関する情報を表示します
  source     パッケージのソースの管理
  search     アプリの基本情報を見つけて表示
  list       インストール済みパッケージを表示する
  upgrade    利用可能なアップグレードの表示と実行
  uninstall  指定されたパッケージをアンインストール
  hash       インストーラー ファイルをハッシュするヘルパー
  validate   マニフェスト ファイルを検証
  settings   設定を開くか、管理者設定を設定する
  features   試験的な機能の状態を表示
  export     インストールされているパッケージのリストをエクスポート
  import     ファイル中のすべてのパッケージをインストール
  pin        パッケージ ピンの管理
  configure  システムを適切な状態に構成します
  download   指定されたパッケージからインストーラをダウンロードする
  repair     選択したパッケージを修復します
  dscv3      DSC v3 リソース コマンド

特定のコマンドの詳細については、そのコマンドにヘルプ引数を渡します。 [-?]
次のオプションを使用できます。
  -v,--version                ツールのバージョンを表示
  --info                      ツールの一般情報を表示
  -?,--help                   選択したコマンドに関するヘルプを表示
  --wait                      終了する前に任意のキーを押すプロンプトをユーザーに表示します
  --logs,--open-logs          既定のログの場所を開く
  --verbose,--verbose-logs    WinGet の詳細ログを有効にする
  --nowarn,--ignore-warnings  警告出力を非表示にする
  --disable-interactivity     対話型プロンプトを無効にします
  --proxy                     この実行に使用するプロキシを設定します
  --no-proxy                  この実行に対するプロキシの使用を無効にする

その他のヘルプについては、次を参照してください: https://aka.ms/winget-command-help

便利なwingetコマンドだが、gemini-cliによると以下のメリット、デメリットがあるよう。

wingetのメリット(利点)

1. 自動化と効率化:

* 複数のアプリケーションを一つのコマンドで一度にインストールできる。新しいPCのセットアップが非常に早くなる。

* winget upgrade --all のようなコマンドで、インストール済みの対応アプリケーションを一度にすべて更新でき、非常に効率的。

2. コマンドラインでの一元管理:

* LinuxのaptやmacOSのHomebrewのように、ソフトウェア管理をコマンドラインで完結できる。

* 手動でWebサイトを探し、インストーラーをダウンロードしてクリックしていく手間が省ける。

3. 信頼性と安全性:

* Microsoftが公式に提供しているツールであり、リポジトリ(ソフトウェアの提供元)も審査されているため、怪しいサイトからマルウェアをダウンロードしてしまうリスクを低減できる。

4. スクリプト化が容易:

* インストールしたいソフトの一覧をスクリプトファイルに書いておけば、そのスクリプトを実行するだけで環境構築が完了できる。

5. Windowsへの統合:

* 最新のWindows 10およびWindows 11には標準で搭載されているため、すぐに利用を開始できる。

wingetのデメリット(欠点)

1. パッケージの網羅性:

* リポジトリは拡大しているが、まだすべてのソフトウェアが登録されているわけではない。特に、古かったりニッチだったりするソフトウェアは見つからないことがある。

2. CUIコマンドライン)操作が必須:

* グラフィカルな画面(GUI)はなく、操作はすべてコマンドで行う必要がある。コマンドラインに慣れていないユーザーには少し敷居が高い。

3. 細かいインストールオプションの指定が煩雑:

* GUIインストーラーでは簡単に選べるような「カスタムインストール」や特定のオプション指定が、winget経由だと複雑になったり、対応していなかったりする場合がある。

4. アンインストールの不完全さ:

* wingetによるアンインストールは、基本的には各ソフトウェアが持つアンインストーラーを呼び出すだけ。そのため、アンインストーラー自体の出来が悪いと、設定ファイルやレジストリが残ってしまうことがある。

とのこと。筆者はデメリットを考慮しても、メリットが上回るような気がするので、今後も使って行くことにする。

関連ページ

Google Adsence シンガポール在住でなくても、居住者証明書の提出が必要

(2025-07-07 初稿)

先日、Google Adsenceの支払い金額が8,000円を超えた記事をアップした。

で、銀行口座の登録もし直して、入金を楽しみにしていたが、一向に入金される様子がない…。

Google Adsenceのサイトの「お支払い」、「お支払い情報」を見ると、以下の画像が。

Adsenceの警告

シンガポール在住でないので放置していたが、どうもGoogle Adsenceの支払いは、シンガポールからのようで、課税情報を追加しないと振り込まれないとのこと。

ネットを検索して以下のサイトを見つけたので、そのとおりに実施した。

これから、課税情報を追加する場合は、ぜひ上記サイトを参照のこと。

「居住者証明書交付請求書」の作成

様式のダウンロード

  1. No.9210 居住者証明書の請求|国税庁

居住者証明書交付申請書のページ

上記サイトから「kyojyusya_shoumei_02_input.pdf」をダウンロードして記載。

なお、記載はUTF-8では文字化けしてしまったので、Windows11のcp932で行った。

申請書の記入方法については、「還じいブログ」を参照のこと。

記入が終わったら、2部印刷する。

「居住者証明書」の交付(発行)

筆者の場合は、近くの税務署に直接持ち込んで、発行してもらった。

請求書を提出したら、その日の午後には証明書を発行してもらえた。

なお、税務署に受取には、本人確認ができるマイナンバーカードや運転免許証が必要なので注意する。

Google Adsenceのお支払い情報への登録

発行してもらった証明書は、Google Adsenceのお支払い情報に追加する。

上記画像の「課税情報の追加」ボタンを押して、必要事項を入力する。

詳細は、「還じいのブログ」を参照のこと(超手抜き)。

筆者の場合、Google Adsenceに登録して、約1時間ほどで、以下の画像のように承認された。

居住者証明書の承認

なお、承認には、時差の関係もあるかもしれないので、気長に待ってね。

あとは、いつ振り込まれるか楽しみだ。

関連ページ

このサイトも初の入金か…

(2025-07-02 初稿)

このブログでは初めてかもしれないが、雑談。

このはてなブログを開始したのは2021年4月29日。それまでは、Google Siteでブログをやっていたが、書式のクセが馴染めずにはてなブログに移転した。

このブログで書いた記事は、226個。この記事は227個目となる。

で、この雑談記事を書いたのも、Google Adsenceを2024年1月15日に開始して、ようやく8,000円の収入となり、入金される予定となった。

その間534日、1日あたりで換算すると15円弱。

一時期は、「もしかしたらブログで副収入を」と夢見ていた時期もあったが、最近では収入の点では全く当てにしていない。(笑)

元々はLinux等の技術系とアウトドア系のブログを書こうと思っていたが、特に技術系に関しては、最近の生成AIで全くブログの価値が無くなってしまった。^^;

今後は、筆者の記録を残すという点と、失敗の掲載、アウトドア活動記として、雑談(Small Talk)中心にブログを書いて行こうと思っている。

既得にもこのブログを読んでくださる方がいるならば、今後ともご愛顧のほどよろしくお願いします。

関連ページ

多重比較のアルファベットの付け方をpythonスクリプトを作ってみた

(2025-05-31 初稿 - )

ずいぶんと長いこと放置中だったが、以下のページのスクリプトpythonで作成してみた。

というのも、上記のページに質問をしてくれた奇特な学生さんがいたので、ボケ防止で作成してみた。

最初に言っておくが、統計処理を専門で行うならば、R等の専門ソフトウェアを使う方が100倍も良い。

頭の体操のつもりで見るならば、以下をどうぞ。

統計ソフトでtukey等の多重検定を行うと、気がきいたものならば、アルファベットの符号を付けてくれるが、符号まで付けてくれないものもあるため、そんなときのためのスクリプト

ちなみに、アルファベットの符号の付け方を、英語では「Letter Grouping」や「Compact Letter Display (CLD)」というらしく、当然のことながら既にpythonライブラリがあるそうなので、統計処理を専門とする方はそちらを参照のこと。

以下のページも大変参考になった。多謝 m(__)m

試験データの前提

以下のような平均値を持つ試験区を多重検定した結果、5%水準で有意差がある組合せが以下のとおりだったとする。

(サンプルデータ)

A区 B区 C区 D区 E区 F区
50 20 60 40 10 30
※平均値はサンプルで数字を当てはめただけ
【例】 5%水準で有意差のある区

  (A, B) ,  (A, E),   (B, C),   (C, E),   (C, F)

アルファベット符号の付け方の考え方

あくまでも筆者の考えた方法であり、正式なものは上記のサイト等で学んでね。

  1. 各試験区の平均値の大きい順に並べる
  2. 有意差のある区を文字列にして、その出現数をカウントし配列に
  3. 隣の区の*数と比較し、同じならばアルファベットは同じ、違ったらアルファベットを一つ増加する(a → b)配列を作成
  4. 処理しやすいように列方向の入力用対戦表(マトリックス)を作成
  5. 処理間に有意差がある場合で、隣の処理区より*数が多い場合はアルファベットを入力、ただし、有意差の部分は*を入力
  6. 処理間に有意差のない場合は、前のアルファベットと同じものを入力
  7. 最終の結果を見やすいように、対戦表の行と列を入れ替え、'-'と'*'を削除後アルファベットの符号のうち、ユニークなもののみ表示する

作成したスクリプト

最初に適当に書き上げたが、ChatGPTさんにうかがって大分手直しをしていただいた。

スクリプトの信頼性も増したと思われる。便利な時代になったもんだ。

#!/usr/bin/python3
# 有意差のアルファベットを付ける
# ver 0.01 start 2025-05-30
# ver 0.02 2025-05-31 chatgpt による修正

# global
# 各区の平均値(辞書型)  ★ これを変更 exp_avg_dic = { "A":50, "B":20, "C":60, "D":40, "E":10, "F":30 } # 各処理区の平均値の大きい順(文字列) sorted_exp_str = "" # 有意差のある組合せ ★ これを変更 sig_list = [ ["A", "B"], ["A", "E"], ["B", "C"], ["C", "E"], ["C", "F"] ] sig_str = "" sig_dic = {} sig_alph = {} alph_list = [] # 平均値の大きい順にソート sorted_dic_avg = sorted(exp_avg_dic.items(), key=lambda x:x[1], reverse=True) #print(sorted_dic_avg) for i in range(len(sorted_dic_avg)):     sorted_exp_str += sorted_dic_avg[i][0] #print(sorted_exp_str) # sig_listを文字列(str)に sig_str = ''.join([item for pair in sig_list for item in pair]) #print(sig_str) # sig_strの文字列をカウント  for i in list(sorted_exp_str):     sig_dic[i] = sig_str.count(i) #print("sig_dic: ",sig_dic) num_list = list(sig_dic.values()) #print("num_list:", num_list) # 隣と比較し差があったらアルファベットを増やす char_num = 96           # アルファベット初期値 'a'-1 for i in range(len(num_list)):     if i == 0 or num_list[i] < num_list[i - 1] or num_list[i] == 0:         char_num += 1     alph_list.append(char_num) #print("alph_list: ",alph_list) sig_str = list(sig_dic.keys()) #print(sig_str) # 初期結果保存用対戦表 rslt_matrix = [[ '-' for j in range(len(sig_str))] for i in range(len(sig_str))] # 最終結果保存用対戦表 trans_matrix = [[ '-' for j in range(len(sig_str))] for i in range(len(sig_str))] zero_flag = 0 for i, key in enumerate(sig_str):     sig_num = sig_dic[key]     if sig_num > 0:         for j in range(i, len(sig_str)):             if len(sig_str) - j > sig_num:                 rslt_matrix[i][j] = chr(alph_list[i])  # アルファベット保存             else:                 rslt_matrix[i][j] = '*' if zero_flag == 0 else chr(alph_list[i])     else:         zero_flag = 1         for j in range(i, len(sig_str)):             rslt_matrix[i][j] = chr(alph_list[i]) #print(rslt_matrix) # 初期対戦表を最終版対戦表に変換 for i in range(len(rslt_matrix)):     for j in range(len(rslt_matrix[0])):         #print(i,j)         trans_matrix[i][j] = rslt_matrix[j][i] # Print Matrix print("     ", ',   '.join(sig_str)) for label, row in zip(sig_str, trans_matrix):     uniq = sorted(set(row) - {'-', '*'})     print(f"{label} , {row} {''.join(uniq)}")

少し長いスクリプトになってしまったが、できるだけコメントを入れたつもり。

不明な点は、ChatGPTやGemini等の生成AIに聞く方が良いかもしれない。

それでは、未来ある研究者達に幸多からんことを。(^^)/

関連ページ

Bashの組み込みコマンドのヘルプについて

(2025-05-24 初稿)

Bashを使うようになってかなり経つが、恥ずかしながら組み込みコマンドのヘルプの出し方が知らなかったので、以下にメモする。

筆者の環境
Linux hoge 6.1.0-35-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.137-1 (2025-05-07) x86_64 GNU/Linux
GNU bash, バージョン 5.2.15(1)-release-(x86_64-pc-linux-gnu)

ことの発端は、筆者が組み込みコマンドのreadのオプションを調べようとしたが、ヘルプの使い方がよくわからなかったので、改めて調べることにした。

Bashには組み込みコマンドがあり、起動が速いためShell スクリプトの高速実行等に役立っている。

組み込みコマンドの一覧を調べる方法は、以下のとおり。

$ help
$ bash -c help # 現在のshellがbashでない場合
$ help
GNU bash, バージョン 5.2.15(1)-release (x86_64-pc-linux-gnu)
これらのシェルコマンドは内部で定義されています。`help' と入力して一覧を参照してください。
`help 名前' と入力すると `名前' という関数のより詳しい説明が得られます。
'info bash' を使用するとシェル全般のより詳しい説明が得られます。
`man -k' または info を使用すると一覧にないコマンドのより詳しい説明が得られます。

名前の後にアスタリスク (*) がある場合はそのコマンドが無効になっていることを意味します。

 job_spec [&]                                                   history [-c] [-d offset] [n] または history -anrw [filename>
 (( expression ))                                               if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS;>
 (中略)
 help [-dms] [pattern ...]                                      { COMMANDS ; }

個別に組み込みコマンドか外部コマンドか調べる方法は、以下のとおりで、ここでは例としてreadを調べる。

$ type read
read はシェル組み込み関数です

最初のコメントにもあるように、例えばreadのヘルプを見る方法は、以下のとおり。

$ help read
read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
    Read a line from the standard input and split it into fields.
    (後略)

余談だが、調べていて echo コマンドは、組み込みコマンドと外部コマンドの両方があるよう。

$ type echo
echo はシェル組み込み関数です
$ which echo
/usr/bin/echo

両方ある場合は、組み込みコマンドが優先されて実行されるんだろうなぁ…

関連ページ