Xperia tablet Z (SGP312) をカスタムROMでOSアップデート
Xperia Tablet Z は古い Android タブレットなのですが、防水仕様なのでお風呂での読書や動画視聴に使ったり、専用クレードルに置いて常時ONの時計・天気表示なフォトフレームっぽい使い方などをしています。とはいえ、さすがに古すぎて、OSの更新が何年も前に終了していますし、OSが古いせいで多くのアプリが最新版に更新できない状態になっています。たとえば chrome は昨年末の chrome 96 以降は Android 6.0 以降にしかインストールできなくなっています。流石にその状態で使い続けるのはセキュリティ的にあまりにもなので、対応することにしました。
こんなときに便利なのが、サードパーティで作成されているカスタムROMです。
Xperia はデフォルトでは bootloader (OS を起動させるためのプログラム)がロックされていて、ソニーが配布している ROM 以外は動かないようになっていますが、ソニーは公式にロックを解除する方法を提供してくれています。ただし、ロックを解除した場合、セキュリティ上一部の機能(赤外線リモコンとか、DLNAでTV見るときの著作権保護とか、その手の話)が使えなくなるなど、リスクも多数あります。詳しくはこちらをご参照ください。
https://developer.sony.com/develop/open-devices/get-started/unlock-bootloader/
このブートローダーのロック解除をすることで、カスタム ROM をインストールすることができるようになります。なお、純粋なオープンソース版 Android OS を自前ビルドするための、コンフィグレーション(ソースコードや設定ファイル)もソニーは提供してくれていいますが、こんなに古いデバイスのサポートは既に切られていますので、各カスタムROM制作チームがメンテナンスしているものを使わせてもらうのが近道かと思います。
以下は、カスタムROMの選定からインストールまでの手順の詳細になります。
- インストールするカスタムROMの選定とZipファイルの用意
- 方法1: XDA で誰かがビルドしてくれた非公式バイナリを使わせてもらう
- 方法2: LineageOS for microG を使う
- 方法3: LineageOS を自前でビルドする
- ブートローダのロック解除コードの取得
- USB接続の準備
- ブートローダのロック解除
- TWRP のインストール
- TWRP を使ったカスタムROMのインストール
- (おまけ) Root権限が使える環境では動作しないアプリの対応
Ubuntu では PlayStation 3 のコントローラ(DualShock 3)を簡単に無線接続できる
今どき持ってる人いないだろ&PCで使いたい人いないだろと言われるかもしれないですが、我が家にある一番使いやすいコントローラがDualShock3で、私がゲームをする頻度も多くは無いので未だに壊れず現役だったりします。
PS3のコントローラはUSB接続ではありましたが、仕様が公開されておらず、当初はPCにつなげることは困難だったのですが、有志の解析により使えるようになっています。
上記のページでは、専用daemonを使用する手法が書かれていますが、Ubuntu 20.04 LTS 現在では、ドライバが整備され標準で組み込まれているので、無線接続も追加のソフトインストールなしに簡単に使用することが可能です。
以下は、その具体的な操作方法です。
続きを読むRust nightly で rls 等がインストールできないときの対策
Rust は将来導入が検討されている機能も nightly チャンネルとしてリリースされているので、簡単に試せるのは良いのですが、コンパイラ本体である rustc 以外の周辺ツールが壊れてしまうような変更もちょくちょく入ったりするので、タイミングによっては visual studio code のプラグインがまともに動けなくて辛いことがあります。
例えば、昨年末は rls が壊されていたので、VScode のプラグインはこんなエラーを吐いていました。
> Executing task: rustup component add rls --toolchain nightly-x86_64-unknown-linux-gnu < error: component 'rls' for target 'x86_64-unknown-linux-gnu' is unavailable for download for channel 'nightly' Sometimes not all components are available in any given nightly. If you don't need the component, you can remove it with: rustup component remove --toolchain nightly --target x86_64-unknown-linux-gnu rls
そんなときは、壊れていない少し過去のバージョンを明示的に指定して使うように設定すれば回避が可能です。
- 壊れていないバージョンを見つける
- 固定バージョンを使用するように指定する
- 指定方法1:rust-toolchain.toml ファイルを作成
- 指定方法2:rustup override を使用する
- 指定方法3: VScode で設定する
- 指定方法4: デフォルトのツールチェインを変更
- 結局どの方法で指定すれば良い?
- 参考
- 近況
SciPyとその仲間たち(NumPy, IPython など)の違いと関係
python でちょっとした信号処理をしたくて、存在だけは以前から知っていた numpy に手を出したので、関連パッケージなどをまともに調べてまとめました。(ある程度素人の主観が入っているので、鵜呑みにしないように)
SciPy
語源は Science + Python で、発音は "Sigh Pie(サイパイ)"。
今日の記事で挙げる各種ソフトの組み合わせによって実現されている、Python ベースの数学・科学技術計算用ソフトウェアエコシステムの名称。つまり、個別のソフトではなく、その集合体による計算環境のこと。乱暴にざっくり言ってしまえば、「Mathmatica や Matlab に代わる環境を Python でつくろうプロジェクト」 が SciPy。
なお、SciPy のコアパッケージの1つに、後述の SciPy library があり、そちらを指して SciPy と言うことも多い(というか大抵そっち)ので文脈で判断を。
純 Python で C のライブラリを呼び出す(Linux inotifyを例に)
Python は Batteries included 哲学のもと、豊富なモジュールが標準で組み込まれていますので、大抵のことは標準モジュールを使えばできますし、そうでなくても、どこかの誰かが Python binding を作ってくれているはずですので、Cのライブラリを直接呼び出すような必要はほとんどありません。
ただ、今回、Cのコンパイル無しに(≒モジュールの追加インストール無しに) inotify を使いたい、という事情があり、直接 libc を呼び出す binding を作りました。コード自体はすごく簡単なのですが、概念が若干わかりにくかったので、今日の記事はその備忘録です。