Survivalモードに対応したMineCraft Piのパッケージがdeb形式からAppImage形式に変更

先日、子供の科学2022年4月号を購入してきました。

普段はあまり購入しない方面なのですが、久しぶりに購入。気になった記事としてはMinecraft Pi(マインクラフトのRaspberry Piバージョン、以下MCPIと呼ぶことにします。)でもサバイバルモードが使えるという内容の記事があったからです、MCPIはクリエイティブモードしかできないため、一般に販売しているMinecraft(Java版や統合版)に比べてゲームというよりもクリエーション的な側面を持っていました。ただ、それだけではつまらないということもあるので、手をいれることでサバイバルモードにも対応することができるという話は聞いていましが、結構たいへんだという話も聞いていました。

そこで今回購入した大人の科学ではMCPIでサバイバルモードができるというような内容だったのでちょっと買ってみようかなと思ったのでした。サバイバルモードができるパッケージはminecraft-pi-rebornという名前になります。

github.com

面倒なことを排除したパッケージなので、比較的おすすめなのかも。

書籍・雑誌媒体の宿命

購入して内容をみるとdebパッケージがあるのでそれをdpkgコマンドでインストールする内容だったので、簡単じゃんと思っていたのですが、実際にサイトにいってみると…書面で示されているバージョン以降でMCPIのパッケージがdeb形式ではなくなっていました。

さすがにちょっとこれは厳しいというか、書いた方もここまで変わると思っていなかったんだろうなと思います。

パッケージ形態が変わるときは徐々に変わっていくのかなと思ってはいたのですが、ここまで急に変わると結構びっくりさせられます。書籍、雑誌といった媒体の記事はクラウドサービスとかなり相性が良くないですよね。更新時期を教えてもらえるわけでもないので、最新の情報を掲載しても発売した時期によって、陳腐化みための違いなどが発生し、下手をすると使用できない情報になっていることすらありえます。寄稿されたかたも気の毒です。サポートページがあるといいのでしょうか、それもどこまでメンテナンスするかも結構大変かと思います。

インストール手順が変更になったのでメモっておく

上記しましたが、MCPIでサバイバルモードを行うことができるようになったminecraft-pi-reborndeb形式のパッケージからAppImage形式というパッケージに変更されたようです。AppImageは自分も今回初めてみた形式でした。

AppImageとは?

AppImage形式のパッケージに関してどんなものかを調べてみると…Wikipediaにありました。

en.wikipedia.org

AppImage is a format for distributing portable software on Linux without needing superuser permissions to install the application.[1] It tries also to allow Linux distribution-agnostic binary software deployment for application developers,[2] also called upstream packaging. Released first in 2004 under the name klik, it was continuously developed, then renamed in 2011 to PortableLinuxApps and later in 2013 to AppImage.(Wikipediaより)

要約すると 「AppImageはスーパーユーザー権限を必要としないアプリケーションの配布するためのフォーマットで、 Linuxディストリビューションに依存しないバイナリの配布をできるように目指したもの」とのことでした。

ディストリビューションごとのライブラリ依存に合わせるのは大変なので、この思想はいいですね。

公式ページは以下になります。

github.com

AppImageパッケージのインストール(導入)のやり方

ではAppImage形式のパッケージのバイナリはどのようにインストールするかというと。インストール作業は不要で、ダウンロードされたバイナリ(拡張子AppImage)に実行権限を与えて、実行するだけでアプリケーションを動作させる事ができます。

例えば、Subsurface*.AppImageという名前のバイナリパッケージがあった場合には以下の様に実行権限を与えて、そのまま実行すれば動作します。

$ chmod a+x Subsurface*.AppImage
$ ./Subsurface*.AppImage

インストールという作業がなく直感的かもしれません。(実行権限を付与操作の部分もラッピングされるともってお手軽なんですけど)

minecraft-pi-rebornをインストール

AppImageについてはおおよそ理解できたので、では早速実行できるように作業をしていきましょう。

インストール方法は以下のページを参照してもらうことになるかと思いますが、前述したとおり、基本的にはパッケージをダウンロードして実行権限を与えることになります。

インストールドキュメント github.com

ドキュメントの冒頭にあるダウンロードページへのリンクをたどると、最新のビルドパッケージに遷移します。 ここから以下のような形式のファイルとダウンロードします。※2022/03/20現在の情報

jenkins.thebrokenrail.com

minecraft-pi-reborn-client-2.3.1-armhf.AppImage

数字がバージョン(上記の場合は2.3.1)、armhfがCPUのアーキテクチャになります。

(注意)RaspberryPiのアーキテクチャarmhfとなっているものを選択してダウンロードしてください。

f:id:ueponx:20220320204040p:plain

Raspberry Piのブラウザなどでダウンロードして、保存場所を決めておきましょう。今回の作業はインストールではないため、動作させるユーザで操作できるパスであればどこでも大丈夫です。今回はブラウザなどのデフォルトの保存先である、~/Downloadにしました。

CLIであれば、chmodコマンドを使用しますが、今回はGUI(XWindow)を使用して実行権限を与えてみます。

ファイルが保存されているパスをウインドウで開き、

f:id:ueponx:20220320200615p:plain

マウスの右ボタンをクリックして、

f:id:ueponx:20220320200711p:plain

プロパティを開きます。

f:id:ueponx:20220320201217p:plain

【File Properties】ダイアログが表示されるので、

f:id:ueponx:20220320201219p:plain

【Permissions】タブをクリックして、【Access Control】の【Excecute(実行権限)】のプルダウンボックスをクリックして

f:id:ueponx:20220320201222p:plain

【Nobody】から【Anyone】に変更して

f:id:ueponx:20220320201224p:plain

【OK】ボタンをクリックします。

f:id:ueponx:20220320201227p:plain

これでパッケージを動作させる事ができるようになりました。

パッケージの実行

ここまできたら、あとはパッケージファイルをダブルクリックをするだけで動作できます。

MCPI Rebornは実行時に設定を訪ねてくるので、それに答えて操作を勧めていくと無事にMCPIが起動します。あとは一般的なMinecraftと同じ操作ですが、ちゃんとSurvivalモードの選択もできるようになっています。

実行確認のダイアログが表示されたら【Execute】ボタンをクリックしていきます。

f:id:ueponx:20220320203712p:plain

有効化する機能の選択がでるので、必要な物があれば…チェックをつけて

f:id:ueponx:20220320203823p:plain

レンダリングの範囲(奥行き)を設定後

f:id:ueponx:20220320203850p:plain

ユーザー名を入力すると

f:id:ueponx:20220320203918p:plain

Minecraft Piが無事に起動しました。あとは通常通り操作していきますが、【Start Game】をクリックして

f:id:ueponx:20220320123102p:plain

【Create new】ボタンをクリックすると

f:id:ueponx:20220320123112p:plain

【クリエイティブモード】と【サバイバルモード】の選択ボタンが表示されます。

f:id:ueponx:20220320123115p:plain

モードの選択でワールドの作成が行われて

f:id:ueponx:20220320123118p:plain

無事にサバイバルモードが開始されました。

f:id:ueponx:20220320204004p:plain

おわりに

今回はdeb形式で配布されていたMCPI Rebornがパッケージ形式が変更となりAppImage形式に変更され、 その対応について書いてみました。今回はパッケージ形式が初めてみた形式だったのでかなり焦ってしまいましたが、 作業的にはスーパーユーザ権限も不要で、ごく一般的な基本的な操作で実行できるようになるというのが非常にいいなと感じました。WindowsでもPortableアプリ形式といった管理権限不要のアプリ配布の形態もあるので、こちらも同じものだと思って問題ないかと思います。Linuxでもこのような動きがあるとは知りませんでした。

個人的にはディストリビューションごとのライブラリのバージョンの依存性の対応は大変なので、この動きは進んでいくといいなと思いました(特にGUIを使用するアプリなど)

激安で購入したICカードリーダーACR122U-A9をRaspberryPiで使用

前回のエントリでは激安で購入してきたICカードリーダーACR122U-A9Windowsから使用してみる実験を行ってみました。

f:id:ueponx:20220312000242p:plain

uepon.hatenadiary.com

結果的には公式ドライバを使用して無事に認識して、SuicaなどのICカードも無事に認識できたというものでした。実はこのICカードリーダーは公式でLinuxにも対応をうたっている珍しいデバイスで、公式サイトからLinuxドライバが公開されています。更にLinuxといってもRaspberryPiでも使用できるという稀有な特徴があります。

f:id:ueponx:20220317234602p:plain

今回はこのICカードリーダーがRaspberryPi OSでも使用できるかということを検証してみたいと思います。 ただし、公式ドライバはRaspberryPi OSBusterベースより古いものに対応しているということなので、現在公開されているRaspberryPi OSLegacyバージョンを使用することになるのであしからず。

今回使用したRaspberryPi OSは以下のようなシステムバージョンとなっていました。

f:id:ueponx:20220317002741p:plain

続きを読む

非接触のICカードリーダーACR122U-A9を激安で購入

今回も自分定番の名古屋大須にある佐古前装備さんで変わったジャンク(ほぼ新品なのでジャンクというか微妙)を購入してきました。 非接触ICカードリーダーで型番はACR122U-A9です。いわゆるSuicaに代表されるFeliCaリーダーになります。

f:id:ueponx:20220312000228p:plain

どんなデバイス

パッケージの内容はこんな感じです。ドライバー用のCDROMが入っていますが、自分の使用しているPCに光学ドライブが存在していないので困る。

f:id:ueponx:20220312000242p:plain

昔に発売された商品だと思ったので、商品ホームページはどうなっているのだろかと思って検索したところ…ちゃんと存在していました。

www.acs-japan.jp

続きを読む

Node-REDのfunctionノードだけで解決が難しいときにフロー内にPythonの処理を導入する

Node-REDを使用していると、偶にこのPythonの処理をそのまま埋め込めればいいのになと思うことがあります。

自分も以前のエントリでwordcloudの画像生成に関して拡張ノードがなかったのでexecノードを使用して回避したことがありました。

参考

uepon.hatenadiary.com

このときには、モジュールがコマンドラインCLI)で実行できるようになっていたので、その方法が良かったのかもしれないなと思ったのですが、いろいろ調べてみるとpythonのコード記述ができるpython-functionノードというものがあるとわかりました。今回はそれの使い方について見てみようと思います。

拡張ノードのインストール

今回使用する拡張ノードはnode-red-contrib-python-functionという名前です。

flows.nodered.org

このノードのドキュメントにもありますが以下の注意点があるようです。

(注意)保証されるものではないのでプロダクトでは使用しないのは前提となります。

In any case, this quick hacked node will let you write functions using Python instead of Javascript! How cool is that? Too cool to be used in production, that is for sure.

(注意)非同期的なプロセスに関しても保証はされません(スレッドなど)

Python is by default a synchronous runtime. The function is run in a dedicated child process, therefore it won't block the NodeJS main process, but in any case only 1 message is processed at a time. That is, of course, unless you use any of the concurrency features available in Python, like multithreading, multiprocessing, Tornado, Twisted...

なんとなくわかるような内容です。このモジュールですが、Pythonの2系3系どちらにも対応しているようなのですが、現状3系を使用したほうがいいかなと思います(どうやってバージョンを判別しているのだろうか?)

では、いつもどおりメニューから拡張ノードのインストールを行いましょう。メニューの【パレットの管理】からインストール作業を行いますが、特にトラブルなく処理は終わると思います。

f:id:ueponx:20220228224934p:plain

f:id:ueponx:20220228224937p:plain

f:id:ueponx:20220228224939p:plain

パレットの【機能】のカテゴリの中にpython-functionノードが追加されていればOKです。

f:id:ueponx:20220228225036p:plain

python-functionノードをつかってみる

基本ノードに含まれるfunctionノードとそれほど大きな差異はないようです。入力エリアにPythonのコードを入力していくだけです。importも動作可能なので必要なモジュールがあれば、使用することもできそうです。(venv系の動作はやめておいたほうがいいかも?)

簡単な実験を行うためのフローを作成します。以下のノードを配置して行きます。

  • injectノード
  • python-functionノード
  • debugノード

f:id:ueponx:20220228225348p:plain

python-functionノードをダブルクリック処理を記述していきます。

f:id:ueponx:20220228225402p:plain

例えば下記のようなコードを動作させることができます。

import os

k = 0
for x in range(10**6):
    k += x

# 作業フォルダを取得
folder_name = os.getcwd()

# msgオブジェクトに格納(文字列でないとエラーがでるようです)
msg["folder_name"] = folder_name
msg["payload"] = str(k)

return msg

今回はdebugノードで【対象】をmsgオブジェクト全体を表示するように変更しておきます。

f:id:ueponx:20220228225634p:plain

作成したフロー

f:id:ueponx:20220228225537p:plain

このノードの処理の結果がある場合には、msgオブジェクト(dictionary)として返す必要があるので、結果などを文字列として格納する必要がありそうです。msg.payload以外にも値を格納できますが値をString型に変更しておきます。

実行結果

f:id:ueponx:20220228225823p:plain

python-functionノードを使用することでNode-RED上にPythonのコードを内包することは可能となりますが、デバッグなどの容易さを考えるのであればPythonCLIのプログラムを作成したほうが楽なのではないかと思います。execノードからそのプログラムを呼び出し、標準出力やエラー出力をうまく調整しても似た処理はできるかなと思います。もしメリットがあるとするならばフローで出てきたパラメータ使用するのが楽?かも。changeノードexecノードを使えばそれも解決しますが。

おわりに

今回はNode-RED側からPythonのコードを記述して処理を行うpython-functionノードを使用してみました。

基本的にはあまりおすすめできる感じではないのですが、ちょっとしたPythonの動きを確認するのであればこちらを拡張ノードをつかうのもありかもしれません。

最近はPythonのモジュールがNode.js側に移植されている処理も多くなってきているので、そこまでの需要はあるのかなと思いますが、何かあったときには実験的につかってみるのもありかもしれません。

Node-REDのフロー上に画像を表示する方法

先日のエントリでNode-REDで生成した画像をデバッグ用途でフロー上に表示するという処理を使用しました。 今回はその部分を取り出して説明するとともに、もう一つの表示方法についても取り上げてみたいと思います。

uepon.hatenadiary.com

生成した画像をフロー上に表示していた箇所

f:id:ueponx:20220221231845p:plain

フロー上に画像を表示する方法?

Node-REDのデフォルト情報ではフロー上に画像を表示する機能(ノード)はありません。その機能を持つものは以下の2つが代表的だと思います。

  • node-red-contrib-image-output

flows.nodered.org

こちらの拡張ノードは前述のエントリでも使用したものになります。msg.payloadに与えられた画像データ表示処理を持ったシンプルなノードになります。

  • node-red-contrib-image-tools

flows.nodered.org

こちらは画像を表示する以外にも、与えられたデータにフィルタ機能など画像処理が行える、多機能なノードになっています。表示するだけならオーバースペックかもしれません。

上記の2つを使ってみます。

続きを読む
/* -----codeの行番号----- */