前回に引き続き、Raspberry Pi 5 の話です。
前回:Raspberry Pi 5を購入しました
Raspberry Pi 5 を購入して早2週間、サーバとして利用するうえで色々と設定したり調べたりしなければならない点が多く、書きたいトピックが複数溜まっています。今回はその第1回目、OS のインストール編です。
ざっくりいうと、Raspberry Pi 5 には PWM 制御の CPU ファン機能があり、公式ケースを購入すると付属品として CPU ファンが付いてきます。普通は CPU の温度に合わせて回転数が変化するのですが、Raspberry Pi 5 に Ubuntu 23.10 をインストールしたらファンが全力で回り続けてしまいました。
今年2月に日本で発売されたばかりの Raspberry Pi 5 を先日購入し、昨日届きました。今回はその紹介記事です。使ってみた感想と、今度の運用プランについて軽く書いていきます。
長年愛用しているキーボード「Logicool K270」ですが、最近、Enter キーを押下した時に、押下されたまま浮き出た状態に戻らなくなってしまうことが多々起こるようになりました。
恐らく一人でイキって「カタカタカタ…ターン!」なんてことを繰り返していたからこうなったのでしょう。
今回はそんな Enter キーの修理記録です。
概要
当ブログは収益化していませんし、アクセス数が増えたところで一円も収入が入らないので、普段どれだけアクセスされているかという点についてはそこまで気に留めていませんでした。
ただ、最近興味本位で Google Analytics でアクセス解析を始めて、あまりにもアクセス数が一部の記事に偏りすぎており、おかしいなと感じておりました。
これは解析を始めて2日目の様子ですが、見ての通り、アクセスされているのは「GRUBがデフォルトで起動するOSを変更する」ばかりです。他の上位記事も2021年〜2022年の古い記事ばかりです。
クリック数も記事数の増加に反してずっと横ばいです。
標準入力から文字列を受け取るコマンドラインツールを開発しているとき、場合によってはパイプラインの存在も意識しなければなりません。
基本的にパイプライン入力は標準入力として扱われますが、入力がコマンドラインへの直接入力なのか、あるいはパイプラインからの入力なのかについて判定するにはひと工夫が必要です。判別する必要がないなら問題ありませんが、判別が必要な場合これでは不便です。
例えば:
パイプラインからの入力がない場合に、標準入力の入力待ちになるようなツールを作成したい場合。
この場合、標準入力からの入力は改行コードを以て1行分の入力として扱われる。
パイプラインからの入力があった場合は、全入力内容がパイプから標準入力へと入力される。
しかし、入力の境界は改行コードで判別されるため、パイプラインから入力された文字列の末尾が改行コードで終了していない場合、Enter キーの入力待ちになってしまう。
標準入力からの入力の場合のみ、1行ずつ対話形式で処理を進めるツールを作成したい場合。
パイプラインからの入力に対しても同様に1行ずつ処理が走ってしまう。
複数行まとめて処理させたいが、入力の境界がどこまでなのかが判別できない。
これまでは標準入力への入力を async-std などを使用して1~2秒程度待機し、「起動直後に複数行入力されている & 一定期間キー入力がない」といった状況の場合に、強制的に標準入力待ちを打ち切って処理を続行する、といった荒業で対応していました。
しかし、これを簡潔に解決してくれる便利なクレートがあったので紹介したいと思います。
前回の記事では、feature を用いてバイナリクレートとライブラリクレートの dependencies を分けました。
Rustでバイナリとライブラリでdependenciesを分ける | 為せばnull
今回はもう一つの手法として、dev-dependencies を用いる方法を書き残したいと思います。
半年ほど前に開発記として記事にした自作の画像変換ツール「rusimg」ですが、以前はバイナリのアプリケーションのみ開発していました。開発が進むにつれて各機能の利便性も上がり、「ライブラリにしたらもっと便利じゃね?」と思い、最近は rusimg のライブラリ化にも着手しています。
現状、rusimg はバイナリ(アプリケーション、つまりツールそのもの)とライブラリ(他のプロジェクトから rusimg の各機能が使えるようにしたもの)が混在するプロジェクトで、Rust の様式通り、バイナリは main.rs、ライブラリは lib.rs に実装しています。
ただ、アプリケーション側は rusimg ライブラリ(以下、librusimg)の基本機能に加え、
clap による引数解析
regex による(引数に渡された)正規表現の解析
glob による正規表現に合致するファイルパスの一覧の取得
viuer によるコマンドラインでの画像表示
colored によるコマンドライン文字の色付け
…といった外部クレートを利用しています。これらのクレートはアプリケーションの実装には必要ですが、librusimg には不要です。
しかしながら、Cargo.toml に dependencies としてこれらのクレートを含めると、たとえ librusimg の利用者が cargo install でライブラリだけをインストールしようとしても、バイナリに必要な余分な外部クレートまでインストールしてしまいます。これでは容量とリソースの無駄遣いです。
よって今回は、これら外部クレートについてはバイナリをインストールしたい場合だけインストールし、ライブラリだけをインストールしたい場合はこれらのクレートを cargo のインストール対象から外すような依存関係を作っていきたいと思います。
Cloudflare Workers に Python のスクリプトをデプロイできたので、その過程をメモっておきます。
Git for Windows のデフォルトエディタが MinTTY という使い慣れてないエディタだったので変更しようと思います。
少し前に Hyper-V に Ubuntu を導入したときの手順を書き残しておきます。