MicroK8s で kustomization.yaml を apply すると error: accumulating resources になる問題

MicroK8s で kustomization.yaml を apply した際に、 error: accumulating resources が発生する問題についてのメモ。

端的に言うと、snap でインストールした MicroK8s で、内部的に git コマンドが実行される操作をすると、おかしくなる模様。

発生する問題

snap で MicroK8s をインストールし、 kubectl apply -k する。
このとき、Kustomize に指定する kustomization.yaml には、直接的または間接的に remote directory 方式のリソースを参照する。

$ sudo snap install microk8s --classic --channel=latest/stable
$ cat << EOF > ./kustomization.yaml
resources:
- https://github.com/kubernetes-sigs/kustomize//examples/helloWorld/?timeout=120&ref=v3.3.1
EOF
$ microk8s kubectl apply -k .

すると、以下のようなエラーが発生する。

ホストOS に git がインストールされている場合:

error: accumulating resources: accumulation err='accumulating resources from 'https://github.com/kubernetes-sigs/kustomize//examples/helloWorld/?timeout=120&ref=v3.3.1': URL is a git repository': failed to run '/snap/microk8s/6364/usr/bin/git fetch --depth=1 https://github.com/kubernetes-sigs/kustomize v3.3.1': /usr/lib/git-core/git-remote-https: symbol lookup error: /snap/core20/current/lib/x86_64-linux-gnu/libpthread.so.0: undefined symbol: __libc_pthread_init, version GLIBC_PRIVATE
: exit status 128

ホストOS に git がインストールされていない場合:

error: accumulating resources: accumulation err='accumulating resources from 'https://github.com/kubernetes-sigs/kustomize//examples/helloWorld/?timeout=120&ref=v3.3.1': URL is a git repository': failed to run '/snap/microk8s/6364/usr/bin/git fetch --depth=1 https://github.com/kubernetes-sigs/kustomize v3.3.1': fatal: unable to find remote helper for 'https'
: exit status 128

ワークアラウンド

続きを読む

GoPro を Webカメラ化:車載動画を Discord へリアルタイムで配信する ①

極めて限定的なシチュエーションなので、参考になる人が他にいるのか謎だが、

  • GoPro (Hero 8 以上) で映した
  • バイクの車載動画を
  • Raspberry Pi を使って
  • リアルタイムで Discord に流す

という環境を作る事があったので、そのときのメモ。

なお、タイトルでは "Discord" としているが、ブラウザから Webカメラを扱うものであれば YouTube Live, Zoom, Slack, Google Meet, Teams, Skype, Twitch などでも同様に使える。

また、バイクの車載動画を念頭に置いて構築したが、バイク固有の事情はないので、ライブ配信 VLOG 的な用途にも参考になるかもしれない。

背景

続きを読む

楽天をサブ回線にして Rakuten Link (Office) で発信すると非通知になる問題を解消する

楽天の株主優待制度の eSIM が届いたので、 Rakuten UN-LIMIT VI 廃止以来久々に楽天回線を利用した。
MNP できないため、サブ回線としてデータ通信のみで使っている。

以前と比べると、楽天回線 (2024年現在 Band 3 のみ) に繋がる場所も増えてきているし、パートナー回線(au)との切り替えもスムーズで、確かに進化を感じる。

さて、 Rakuten 回線のメリットの一つに、 Rakuten Link (株主優待回線の場合は Rakuten Link Office) を使うと、通話料が無料となる点がある。

特に発信元の電話番号にこだわりの無いところに電話する場合は、主回線ではなく Rakuten Link で電話することで通話料金を節約できる訳だ。

ところが、どうも Rakuten Link で電話をかけたとき、主回線の時と比べて電話に出てもらえないことが多い気がする。
もしやと思って自分自身に電話をかけてみたところ……


ああ、非通知設定で発信されているでは無いか。

この問題を解消しよう。

Rakuten 回線にしても非通知のまま

続きを読む

HP Pavilion 15-eh3000 : タッチ対応で32GBメモリに増設可能な格安PCのメモリ交換記

以前使っていた DELL Inspiron の 2-in-1 の PC のバッテリーが、2時間程度しか持たず実用的ではなくなってきたので、買い換えたい。

予算もあまりないので安く済ませたいのだが、どうしてもタッチ対応は外せないし、PCを更新するなら RAM は 32GB にしたい。

しかし選択肢は意外となく、最終的に HP Pavilion 15-eh3000 を購入し、メモリを 32GB に増設(換装)する方法に行き着いたので、そのメモ。

購入 PC の条件

条件を決めないことには PC を選べないので、とりあえず以下の条件で探すことにした。

  • ノート PC
  • タッチ対応
  • メモリ (RAM) は 32GB
  • 予算は 8~9万 程度
  • CPU は Core i5 / Ryzen 5 程度ならなんでも
  • 内蔵グラフィックで OK
  • DELL 以外

本当は筆圧対応ペン入力対応な 2-in-1 の方がよかったのだが、価格やメモリサイズ的に条件を合わせるのが難しいのがわかっていたので、泣く泣く妥協している。

タッチパネルやペン入力載せるようなモデルは、実装スペースの関係かオンボードメモリのものばかりで、BTO のカスタマイズで 32GB の選択肢すら存在しないものが大半である。

価格.com では、メモリの空きスロットや、メモリ交換の可否で絞り込むことができない。
価格.com のキーワードに「メモリスロット」と入れ、 PCビューで詳細表示すれば、絞り込めはせずともSO-DIMMスロットがあるモデルが多少探しやすくはなるが、そんなに選択肢がない(価格.comに載っていないだけかもだが)ことがわかる。

この方法で、SODIMM スロットが2つ存在するモデルを検索し、自分で 32GB メモリに換装する方針で絞り込んでいった。

Lenovo あたりだと、1枚オンボードで 1枚 SODIMM スロットという変態構成の端末がある。
しかし1枚だけメモリを増量させても、デュアルチャンネルにならないことや、相性問題が起きやすいリスクがあるので避けている。

DELL を除外しているのは、以前私用で使っていた Inspiron も、会社で使っていた Latitude も、どちらもスリープ処理が下手くそで非常に困ったからだ。
ちゃんとスリープされず、電源につないでいれば24時間ファンをぶん回してうるさいし、バッテリー状態にしておくと勝手に5%まで残量減らしてるし、どれもどうも調子が悪かった。
毎日そんな不要な充放電が繰り返された結果、あっという間にバッテリーが劣化してしまったのが、若干トラウマになっている。

結局、 HP Pavilion 15-eh3000 の Ryzen 5 7530U + 16GB RAM モデルに...

続きを読む

Raspberry Pi 5 に Ubuntu 24.04 LTS を入れて SSH するまで

ついに日本でも、 Raspberry Pi 5 の技適対応モデルが発売された。

Raspberry Pi にインストールする OS と言えば、まずは Raspberry Pi OS (旧 Raspbian) だが、同じ Debian ベースの Ubuntu も Raspberry Pi 向けの公式イメージを出している。

但し、 Raspberry Pi 5 に対応しているのは、 Ubuntu 23.10 (コードネーム: mantic) 以降のみとなる。

Ubuntu 23.10 自体は「非LTS」バージョンとなり、サポートが 9ヶ月 (2024年6月まで) と短い。
常用するなら、サポートが 5年 (ESM なら 10年) と長い LTS バージョンが望ましい。

そこで今回は 2024年4月25日 にリリースされたばかりの、 24.04 LTS (コードネーム: noble) を使って、 ディスプレイやキーボードが無い状態でインストールから SSH 接続までやってみよう。

Raspberry Pi 5 をターゲットに書いているが、 Raspberry Pi 3, 4, Raspberry Pi Zero 2 W でも同じ手順でできるはずだ。

TL;DR

準備するもの

  • Raspberry Pi 5
    • Raspberry Pi 3, 4 でも同じ手順でいけるはず
  • 4GB 以上の micorSD カード
    • IOPS が高い、「アプリケーションパフォーマンスクラス」が A2 のものが良いだろう。値段や速度を考えると、実用上は 64GB 以上になるだろうか。
    • 私は、ARCANITE 64GB microSDXCカード 【A2】、UHS-I U3、V30、4K、C10 値段の割にパフォーマンスが良かったため、これを使った。
    • 後述するが、最終的には NVMe SSD にした方が断然良い
  • microSD を書き込める PC (Win, Linux, mac)
  • インターネットに繋がる Wi-Fi または イーサネットケーブル

以下もあると便利だが、今回の手順では無くても問題ない。

  • micro-HDMI で繋がるディスプレイ 又は 変換コネクタ
  • RasPi に繋げる USB キーボード

イメージファイルの取得

続きを読む

JavaScript で TOTP を計算する

TOTP: Time-Based One-Time Password Algorithm とは、二要素認証でよく見る Google Authenticator 等で QRコード を読み込ませたりして、一定時間毎に替わる 6桁 くらいの数字を入力するアレだ。

RFC 6238 に詳しい仕様が書かれている。
コイツを TOTP をブラウザ上で生成したい。

幸い近年の Web API には、バイナリ操作やクリプトまわりの機能が出揃っているので、わりかし簡単に実装できそうだ。
…とまぁ、そんな愚生が思いつくような話など既に、偉大なる先人たちによる多くのサンプルが残されている。

せっかく自分で実装するなら、最新の ES 仕様や Web API を活用して簡潔に、それでいて汎用的な仕様で書いてみよう。

実装

続きを読む

D&DしたQRコード画像をブラウザ上でデコードする

ブラウザ上にドラッグ&ドロップ (D&D) されたQRコードの画像を、読み込んでデコードするUIを作りたい。

Pure JavaScript で動作する、QR コードデコーダー(パーサー) cozmo/jsQR が有名なので、これを使ってみよう。

jsQR は、 png や jpg といった画像コンテナの解凍機能も、 HTML や DOM, Web 周りに特化した機能も一切無いため、読み込ませた画像は何らかの方法で Uint8ClampedArray な RAW 画像に変換して渡す必要がある。

ちょっと遠回りにはなるが、

  1. D&D されたファイルの File API を読み取る
  2. FileReader API を使って、ファイルを DataURI として読み込ませ、 img タグに表示させる
  3. OffscreenCanvasOffscreenCanvasRenderingContext2D を経由して ImageData を作成する
  4. jsQR に処理を投げる

といった処理になるだろうか。

早速実装してみよう。

実装

続きを読む

ブラウザのタイトルや URL をコピーするブックマークレット【スマホ&阿部寛対応】

ブラウザで表示しているページのタイトルと URL を一括でコピーしたり、 markdown などのマークアップ言語でフォーマットされたものを、クリップボードにコピーしたくなることは無いだろうか?

意外にも、主要なブラウザには表示ページのタイトル名すら簡単にコピーする方法がない。

いくつかのブラウザ拡張機能(アドオン)には、上述の機能を提供しているものがいくつもある。
しかし、これだけのために拡張機能を入れるのもなんだかなと。
場合によっては、ポリシー等様々な理由で拡張機能を入れることを制限されている場合もあるだろうし。

そこで、表示中ページのタイトルと URL を任意の種類にフォーマットしてクリップボードへコピーしてくれるブックマークレットを作ってみた。

ブックマークレットとした事により、拡張機能の使えないスマートフォンの Chrome や Safari といった、とても不便なブラウザでも利用できる。

使い方

ブラウザのタイトルや URL をコピーするブックマークレット

続きを読む

VSCode + MinGW-w64 via MSYS2 で WIN32API の Unicode ビルド

VSCode + MinGW-w64 via MSYS2 で WIN32API の Unicode ビルド
本記事は C++ Advent Calendar 2023 の6日目の記事だ。

5日目は @uyamae 氏の C++ をclang で解析するときに情報をvcxproj から取得する方法 だった。


Windows 上でサクッと C++ ビルド環境を用意したい

さて、Win32API のコードをビルドしたいけど Visual Studio を入れるまでもない場合、 MinGW の GCC C++ コンパイラ (g++) と Visual Studio Code (VSCode) の組み合わせでも割と快適にビルドできる。

しかし、 VSCode のドキュメントの手順 そのままでは マルチバイト・Unicode周りでハマったので、非ASCII 圏で問題ないように設定する方法を紹介する。

先に解決方法だけ示しておくと、

  1. tasks.json の g++ ビルド時の引数を書き加えてやりつつ

                 "command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
                 "args": [
                     "-fdiagnostics-color=always",
    +                "-DUNICODE",
    +                "-D_UNICODE",
    +                "-municode",
    +                "-std=c++23",
                     "-g",
                     "${file}",
                     "-o",
                     "${fileDirname}\\${fileBasenameNoExtension}.exe"
                 ],
  2. C/C++ extension for VS Code の設定から、 以下の IntelliSense 設定も変えればよい

    • 定義:

      _DEBUG
      UNICODE
      _UNICODE
    • C 標準: c23

    • C++ 標準: C++23

VSCode + MSYS2 上の MinGW-w64 の組み合わせでの設定

続きを読む

Power Automate で少ないステップ数でコレクションを操作するコツ

本記事は、 Microsoft Power Automate Advent Calendar 2023 - シリーズ2 の5日目の記事だ。

"シリーズ1" の4日目は、 @inaho3517 氏の 本でPower Automateを勉強してみた だ。
ちょっとAmazonで検索しただけでも、 めっちゃ本が出てる のね…
知らなかった。
シリーズ2はまだまだ空きがあるので、ぜひご参加を。


実行ステップ数を節約したい

さて、 Power Automate を含め Microsoft Power Platform には、プラン毎に最大要求数の制限がある。
例えば、多くの人が使っているだろう Office 365, Microsoft 365 F3/E3/E5 に含まれる Power Automate の場合、 24時間ごとの 6,000 要求数が上限だ。

Power Automate では、実行されたトリガー・アクションひとつひとつが、結果の成否にかかわらずこの「要求数」を消費する。
大きな数のループや、2重ループなどを行うと、意外と簡単に 6,000 要求数に達してしまう。

時々妥当な範囲で上限を超える程度なら、即時実行をブロックされることはない ものの、設計の段階では超えない事に越したことはない。

唐突だが、アルゴリズムなどの計算量の効率を示す指標として、オーダー表記というものがある。

雑に説明すると、N件のデータを処理するのにどれくらいの勢いで計算コストが増えていくかと言ったもので、例えば単純なループ処理なら O(N), 2重ループとかになると O(N2) といった書き方をするのを、一度は目にしたことがあるのではないだろうか?

ということで、ループによってアクション要求数(ステップ数)が増えがちな Power Automate のコレクションの処理を例に、ループ処理を排除し O(1)定数時間で処理する方法を紹介する。

とりあえず Office Script?

続きを読む