2023-08-29

QStandardPaths を利用する ~ PySide6 ~

PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。配布ライセンスは LGPL で公開されています(商用ライセンスも有り)。最新のバージョンは Qt6 に対応した PySide6(記事執筆時点で 6.5.2)です。

PySide6 で GUI アプリを作る時に、まずは使い慣れた Linux 上で開発をはじめて、他の人にも使ってもらえる段階になったら、Windows 上で動作確認をしてから PyInstaller でパッケージにする、というようなやりかたをよくしています。

PySide6 を利用した GUI は、異なるプラットフォーム間で問題なく動作させられますが、ファイル構造は OS によって違いがあります。そのため、アプリが必要とする設定ファイルや一時ファイルなどの保存先を決めるときには、なんとなく無難に OS に依存しない場所にするか、python の platform モジュールを利用して OS を判定して、判定に応じて保存場所を決めたりしていました。

PySide6 では QStandardPaths [1] という便利なクラスを利用できることを知りました。このクラスには、ユーザー固有のディレクトリやシステム全体の設定ディレクトリといった一般的なタスクのために、ローカル・ファイルシステム上の標準的な場所を問い合わせる関数が用意されています。

早速内容を確認するために QStandardPaths.StandardLocation という列挙型がメンバーとして保持している定数の一覧を表示するサンプルを作ってみました。

qt_standard_location.py

Fedora Workstation 39(プレリリース版)+ Python 3.11 で実行した例を示しました。

qt_standard_location.py の実行例 (1)

以下は Windows 11 上で実行した例です。

qt_standard_location.py の実行例 (2)

これらの情報を参照するだけで十分であれば、プログラムは、稼働しているプラットフォームを意識する必要がなくなります。

参考サイト

  1. QStandardPaths - Qt for Python

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2023-08-15

ローソク足チャート ~ PySide6, mplfinance

PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。配布ライセンスは LGPL で公開されています(商用ライセンスも有り)。最新のバージョンは Qt6 に対応した PySide6(記事執筆時点で 6.5.2)です。

ローソク足チャート (Candlestick chart) は、株価などの相場の値動きを時系列に沿って図表として表す手法の一つです。単位期間を定め、単位期間中に初めに付いた値段を始値(はじめね)、最後に付いた値段を終値(おわりね)、最も高い値段を高値(たかね)、最も安い値段を安値(やすね)とし、この四種の値段(四本値=よんほんね)を「ローソク」と呼ばれる一本の棒状の図形に作図し、時系列に沿って並べて値段の変動をグラフとして表したものです。

mplfinance ライブラリを使ってローソク足チャートをプロットできます。mplfinance は金融データの視覚化および分析のための matplotlib ユーティリティーです。

以前、PySide2 に mplfinance で出力したチャートを埋め込んだサンプルを示しましたが [1]、今回は PySide6 を使ったサンプル(改良版)を紹介します。

データファイル candlestick_sample_data.csv

上記サンプル CSV ファイルを読み込んでローソク足プロットを作成するスクリプトを下記に示しました。

qt_mpl_finance.py

Fedora 38 の GNOME デスクトップ環境で実行した例を示しました。

qt_mpl_finance.py の実行例

参考サイト

  1. bitWalk's: ローソク足チャート ~ python/mplfinance [2021-05-02]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2023-08-12

QRubberBand を使いこなしたい 〜 PySide6 〜

PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。配布ライセンスは LGPL で公開されています(商用ライセンスも有り)。最新のバージョンは Qt6 に対応した PySide6(記事執筆時点で 6.5.2)です。

ちゃちゃっとプロットする GUI アプリを PySide6 で作りたい場合、使い慣れている Matplotlib を利用することができます。しかし、PySide6 でも QtCharts モジュールを利用すれば一通りのチャートを扱えるので、簡単なチャートであれば Qt だけでアプリケーションを完結させたいと考えてしまいます。

ただ、Matplotlib でできて PySide6 でできないことがいくつかあります。いや、できないこと、と言うよりも、やり方を知らない、と表現するべきですね。

今回は、そんな「やり方を知らなかった」ことの一つ、チャート上でマウスをドラックして(矩形)領域を指定し、そのデータを選択できるようにすることができるようになりましたので、サンプルを紹介します。

下記の OS 環境で動作確認をしました。

Fedora Linux 38 (Workstation Edition) x86_64
python3.11 python3-3.11.4-1.fc38.x86_64
PySide6 6.5.2

チャートのズームに利用していた QRubberBand を [3]、今回は矩形領域の選択に利用しています。rubber band とは輪ゴムのことですが、マニュアルを読んでもピンとこなかったので、ウィジェットとして使いこなせていませんでした。今回いろいろ調べたので、少しは使えるようになりました。👍

機能を紹介するサンプルとしては、冗長になっていて判りにくいかもしれません。

qtcharts_scatterchart_rubberband.py

今回やりたかったことは、マウスのクリックやドラッグの操作で、チャート上で矩形領域を指定することです。

実行例 (1) : マウスでドラッグして矩形領域を指定

現実的な用途としては、矩形領域を選択したあとに、下記のように色を変えるなどの視覚化をしたりします。この例では赤色の点を重ね書きしているだけです。

実行例 (2) : Select ボタンをクリックして選択を確定

今回紹介したサンプルコードは、はっきり言って長すぎます。もっとすっきりと簡潔なサンプルになるように gist のサンプルを改良していきます。

参考サイト

  1. PySide6.QtCharts - Qt for Python
  2. QRubberBand - Qt for Python
  3. bitWalk's: Qt for Python によるチャート (7) [2021-07-25]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2023-08-06

RHEL のソースコードの公開リポジトリが…

Red Hat Enterprise Linux, RHEL は、Red Hat 社が開発しているエンタープライズ市場向けの Linux ディストリビューションです。最近の RHEL のライフサイクルは 10 年で、延長が必要であれば追加サブスクリプション (Extended Lifecycle Support Add-On) も提供されています。

6月末に Red Hat 社のブログに RHEL の開発責任者である Mike McGrath 氏が投稿した記事(下記)が、オープンソースに関わるプロジェクトに波紋を呼んでいます [1]

このブログ記事によると、今後 CentOS Stream のリポジトリが、公開される RHEL 関連のソースコードの唯一の公開リポジトリになる、ということです。

さらに氏は、下記の記事を投稿しています。

投稿した Mike McGrath 氏は、

The CentOS Stream gitlab source is where we build RHEL releases, in the open for all to see. To call RHEL “closed source” is categorically untrue and inaccurate. CentOS Stream moves faster than RHEL, so it might not be on HEAD, but the code is there. If you can’t find it, it’s a bug – please let us know.

[参考訳]

CentOS Stream の gitlab ソースは、私たちが RHEL のリリースをビルドする場所であり、誰もが見ることができるオープンな場所です。RHEL を "クローズド・ソース" と呼ぶのは断じて事実ではないし不正確です。CentOS Stream は RHEL よりも速く変化するので、HEAD にはならないかもしれませんが、コードはそこにあります。仮に見つからないのであれば、それはバグです。

と述べています。

ちなみに、CentOS Stream 9 の gitlab ソースは下記のサイトです。

CentOS Stream 9 は、安定版の RHEL 9 の次のアップデートをリリースする、ちょっと先を行く開発者向けディストロですから [2]、たしかにソースコードは入手できますが、製品版の RHEL と(バグを含めて)1対1になっていることを標榜するクローンプロジェクトが、この CentOS Stream 9 のソースコードを頼るだけでは、いろいろ面倒な確認作業が出てくることになりそうです。

なお、上記ブログ記事の最後の方で、Mike McGrath 氏は強調文字で下記のように述べています。

Simply rebuilding code, without adding value or changing it in any way, represents a real threat to open source companies everywhere. This is a real threat to open source, and one that has the potential to revert open source back into a hobbyist- and hackers-only activity.

[参考訳]

付加価値や何の変更を加えずに単にコードを再構築することは、あらゆるオープンソース企業にとって現実的な脅威となります。本当にこれはオープンソースにとって脅威であり、趣味やハッカーだけの活動にオープンソースを逆戻りさせる可能性を秘めています。

これでは議論に火が点いてしまいますよね。

ともかく、RHEL のクローンを開発しているプロジェクトの対応を見てみましょう。

Rocky Linux

Rocky Linux プロジェクトは、下記のサイトで今回の Red Hat 社の決定への対応と批判をしています。

一部を抜粋します。

Previously, we obtained the source code for Rocky Linux exclusively from the CentOS Git repository as they recommended. However, this repository no longer hosts all of the versions corresponding to RHEL. Consequently, we now have to gather the source code from multiple sources, including CentOS Stream, pristine upstream packages, and RHEL SRPMs.

[参考訳]

以前は、Rocky Linux のソースコードは、(Red Hat 社から)推奨されていた CentOS の Git リポジトリのみから入手していました。しかしこのリポジトリは、もはやすべての RHEL バージョンに対応しているわけではなくなりました。そのため、現在は CentOS Stream など複数のソースからソースコードを集めてくる必要があります。

Moreover, Red Hat’s Terms of Service (TOS) and End User License Agreements (EULA) impose conditions that attempt to hinder legitimate customers from exercising their rights as guaranteed by the GPL. While the community debates whether this violates the GPL, we firmly believe that such agreements violate the spirit and purpose of open source. As a result, we refuse to agree with them, which means we must obtain the SRPMs through channels that adhere to our principles and uphold our rights.

[参考訳]

さらに、Red Hat 社のサービス利用規約 (TOS) とソフトウェア利用許諾契約 (EULA) は、正当な顧客が GPL によって保証された権利を行使することを妨げようとする条件を課しています。コミュニティでは、これらが GPL に違反するかどうかを議論していますが、わたしたちは、このような契約はオープンソースの精神と目的に反すると固く信じています。そのため、わたしたちはそのような規約や契約に同意することを拒否します。つまり、わたしたちは、わたしたちの原則を遵守し、わたしたちの権利を支持するルートを通じて SRPM を入手するのです。

Rocky Linux のプロジェクトは、プロジェクトが信じるオープンソースの精神に従って、手段を講じてでも RHEL のソース (SRPM) を入手して、いままでどおりクローンプロジェクトの活動を維持していくことを宣言しています。上の記事ではソースの入手方法についても触れていましたがここでは割愛します。

なお Red Hat 社の TOS / EULA にご興味のある方は、TOS は参考サイト [3]、EURA は [4] を確認してください。

AlmaLinux

AlmaLinux は Rocky Linux とは異なった対応を取っています。

一部を抜粋します。

After much discussion, the AlmaLinux OS Foundation board today has decided to drop the aim to be 1:1 with RHEL. AlmaLinux OS will instead aim to be Application Binary Interface (ABI) compatible.

We will continue to aim to produce an enterprise-grade, long-term distribution of Linux that is aligned and ABI compatible with RHEL in response to our community’s needs, to the extent it is possible to do, and such that software that runs on RHEL will run the same on AlmaLinux.

[参考訳]

多くの議論の末、AlmaLinux OS Foundation の理事会は本日、RHEL と 1:1 の対応を目指すことを取りやめることを決定しました。その代わりに AlmaLinux OS は、RHEL と ABI (Application Binary Interface) 互換であることを目指すことにします。

コミュニティのニーズに応えるため、RHEL 上で動作するソフトウェアが同じように動作するように、AlmaLinux に可能な限り RHEL との ABI 互換性をもたせ、エンタープライズグレードの長期サポートを有する Linux ディストリビューションとして作り続けることを目指しています。

RHEL と(バグを含めて)1対1に対応させたクローンであることを止め、ABI 互換を目指すことが、今後の AlmaLinux が進む方向ということです。

Oracle Linux

Oracle Linux は RHEL に1対1に対応させたクローンとは言えません。しかし、この機に乗じて(?)Red Hat 社の親会社である IBM 社を思いっきり批判した記事を公開しています。

下記の ITmedia の記事に詳しく紹介されています。

この記事では RHEL のリポジトリ公開のやり方が変わったことで Oracle Linux にどのような影響があるのかは判りません。

SUSE Linux

SUSE が RHEL のフォークすることを発表しました。なぜ SUSE が?

下記 GIGAZINE の記事の最後の方で、なぜ SUSE が?の問いに答えています。

クローンプロジェクトの存在

クローンが蔓延るということは、それだけ世間で利用していることの証である、なんて単純に思っていました。

RHEL が発売されてから、現在に至るまで、RHEL のクローンは存在し続けています。なぜか?

それは、バイナリパッケージを入手するためにはサブスクリプション契約が必要になるからです。有償のサポートは不要で、コストを掛けずにオープンソースプロジェクトの成果を利用したい、というユーザーのニーズに応えるべく、クローンを開発するプロジェクトが存在するのです。

※ ただ、小規模な利用であれば Red Hat Enterprise Linux Developer Program に参加して、無料で RHEL を使えば十分だと、個人的には思っています。

ZDNet Japan で古い記事を見つけました。

当時は、クローンリビルダーと呼ばれていたようです。Red Hat 社はクローンのリビルドに対して寛容だと感じていました。オープンソースを使ってビジネスをする以上仕方がないことなのかもしれません。

Red Hat 社が IBM 傘下になって(買収完了:2019-07-09)、やっぱり社風も変わってきたのでしょうか。

そうかもしれません。

しかし、巷ではブランド品のコピーを無断で作って販売すれば刑罰の対象になり得るのに、オープンソースの世界では(Rocky Linux のように)クローンを配布するのは、あたかも正義であるかのように堂々とその正当性を主張しています。なんだろう、漠然とですが、しっくりこない部分です。🤔

かつて、RHEL のクローンプロジェクトであった CentOS が、財政難から存続の危機に陥った時に、あろうことか RHEL 本家本元の Red Hat 社が救済の手を差し伸べ、CentOS プロジェクトのメンバーを Red Hat 社の社員に雇い入れることまでしました。しかし CentOS を救済してしまったために、いろいろ面倒なことを引きずることになっています。

振り返れば、Red Hat 社が、CentOS のようなクローンプロジェクトを救済する必要や意義はなかったのではないでしょうか。本当に必要があれば、救済しなくとも別のクローンプロジェクトが立ち上がった可能性があるからです。

誰でもプログラムソースを入手する自由を確保することと、オープンソースをビジネスに持ち込んで企業活動にあまねく貢献しようとする活動の両方を、なんとかバランスを取ってうまく進められないものでしょうか。

参考サイト

  1. Red Hat、今後はCentOS StreamがRHEL関連のパブリックなソースコードの唯一のリポジトリになると発表 - Publickey [2023-06-22]
  2. FAQ/CentOSStream - CentOS Wiki
  3. Production Support Terms of Service - Red Hat Customer Portal
  4. Red Hat End User License Agreements

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加