PyConJP
, 2020
, Sprint
https://pyconjp.blogspot.com/2020/07/pycon-jp-2020-sprint.html
日付 時間 ツール 内容
2020/08/22(土) 13:00開始 Zoom/Discord キックオフイベント
2020/08/23(日)〜8/29(土) ー Discord スプリント
2020/08/28(金)〜8/29(土) ー - PyCon JP 2020 カンファレンス
2020/08/30(日) 15:00開始 Zoom/Discord 成果報告会
Date(JST) Time(JST) Tools Content
Aug-22(Sat.), 2020 13:00 Zoom/Discord Kick-off
Aug-23(Sun.)〜Aug-29(Sat.) ー Discord Sprint Week
Aug-28(Fri.)〜Aug-29(Sat.) ー ー PyCon JP 2020 Conference day
Aug-30(Sun.) 15:00 Zoom/Discord Result Presentation
py7zr は、Pure pythonによる7zipライブラリです。現在、ベータレベルであり、圧縮、解凍、暗号化、復号化に対応しております。
圧縮にあたっては、新規作成にのみ対応していて、ファイル追加やファイル更新の実装は、まだされていません。
解凍にあたっては、マルチスレッドによる高速化に対応しています。
利用可能なアルゴリズムは、Python の標準ライブラリがサポートする LZMA1, LZMA2, Delta, BCJに加え、BZip2, Deflate, COPY, 7zAES(AES256+SHA256)に対応しています。
7-zip のオリジナルがサポートするアルゴリズムのうち、PPMd, BCJ2, Deflate64には対応しません。
オリジナルの7-zipはプラグインに対応しており、Facebookが開発公開している最新の圧縮アルゴリズムのZStandardなどのプラグインが公開されています。
また、p7zipにも、ZStandardなどを実装したfork版が公開されています。
2020.8.9 現在、v0.9.4 および v0.10.0a1 が公開されており、これらには実験的なZStdのコードがふくまれています。
Project https://github.com/miurhr/py7zr
Internal description https://py7zr.readthedocs.io/en/latest/contribution.html
7zipフォーマットspecificaiton 7zip archive format specification
7-zip originalはWindows上のPublic Domain http://7-zip.org/
Portable 7-Zip(p7zip) は、POSIX環境への移植
PiCastは、WiFiに対応したRaspberry Piを、ワイヤレスモニターアダプターとして動作させるためのアプリケーションです。
開発ステータスは、早期アルファであり、動作しないケースが多々あります。
picast is a simple wifi display receiver written by Python3 on Raspberry Pi. Current status is early alpha.
Project https://github.com/miurahr/picast
py7zrにZStandardアルゴリズムのサポートを追加いただきます。
Compiler
IDE:
相互運用性確認
Py7zrの導入でpip install py7zr[zstd]
とすることで、必要なライブラリが導入されるように設定されています。
https://github.com/miurahr/py7zr/blob/master/py7zr/compressor.py#L249-L285
https://github.com/miurahr/py7zr/blob/master/tests/test_extra_codecs.py#L84-L108
https://github.com/miurahr/py7zr/blob/master/tests/test_extra_codecs.py#L198-L210
https://github.com/miurahr/py7zr/blob/master/tests/test_archive.py#L758-L781
一見、圧縮は正常動作しているようにみえる
解凍は、内部エラーになる。
ZStdCompressor classの問題点
ZStdDecompressor classの問題点
参考: 各種compressorを、io.BufferedReaderないしは、io.BufferedWriterに変換する実験コードである。生成された結果は確認されていない。
https://gist.github.com/miurahr/b12b8a9f88365e113bf532ccb870fe60
解凍のデバッグでは、PyCharmなどでPython codeにブレークポイントを設定してデバッグ可能である。
圧縮のデバッグでは、生成されるファイルが互換性のある状態になっていることを確認する必要がある。もし、fork版p7zipでエラーになる場合に、p7zipは有益な情報を出力しないので、gdbなどのCPPのデバッガか、CLionなどのCPPのIDEでp7zipにブレークポイントを設定し、どこの処理でエラーと判別しているか、確認する必要がある。
ターゲットとなるソースコード
CPP/7zip/Archive/ZStdHandler.cpp
CPP/7zip/Compress/ZstdEncoder.cpp
CPP/7zip/Compress/ZstdDecoder.cpp
CPP/7zip/Archive/7z/7zIn.cpp
Zstandardの圧縮パラメータについては、前者の3つが対象となろう。
エラーについては、7zIn.cpp
のThrowIncorrect()
などの例外がどこで送出されるかをブレークポイントをおいて おいかけることになろう。
7zipには、マルチボリュームサポートがある。現在は、ライブラリ外での対応が必要である。
例: example.7z.001, example.7z.002 があったとき、
とする必要があるが、シームレスにあつかればすばらしい。
機能要望チケット: https://github.com/miurahr/py7zr/issues/197
py7zrで未実装のファイル更新や追加の機能を追加するチャレンジ
圧縮ファイルの作成は、writeメソッドを一通り実施したあと、最後によびだされるclose()時に実施するように実装されている。
解凍をおこなう'r'モードのときは、コンストラクタ内で、アーカイブのヘッダをよみこみ、圧縮アルゴリズムのパラメータやフィアル一覧を取得している。
更新や追加の場合、解凍と同様、ヘッダーをよみこんで、各種パラメータやファイル一覧をオジェクト内で保持したうえで、write()やwriteall()されたときに、ファイル一覧を更新するなどして、close()時にペイロードに追加するかたちで圧縮して格納するとよい。
7zipのペイロードでは、Folder classで実装されているFolder単位で処理されるように仕様が既定されている。追加の場合は、二つ目以降のFolderを定義し、ペイロードの一つ目のfolderのデータの後ろにかきこむとよい。
Folderの定義 https://py7zr.readthedocs.io/en/latest/archive_format.html#folders
7zipアーカイブの全体構成 (Signature header + payload + headerのつづき) https://py7zr.readthedocs.io/en/latest/archive_format.html#file-format
Folder Class https://github.com/miurahr/py7zr/blob/master/py7zr/archiveinfo.py#L276
Create時のFolder object生成 https://github.com/miurahr/py7zr/blob/master/py7zr/py7zr.py#L326-L336
PiCastは、RaPi Zero/W をターゲットに開発されており、それ以外での動作確認ができていません。
現在、VLCをもちいて表示させていますが、Raspberry Piのハードウエアアクセラレーションを利用できていません。omxdecoderを使用できるGstPlayer classを完成させることが目標です。
https://github.com/miurahr/picast/blob/master/src/picast/player.py
Android OSが動作する特定のスマートフォンからの接続のみ可能であり、汎用性や実用性はありません。Windows10からの接続や、最近のGNOMEに搭載されたことでLinuxでの接続ができるようになると、実用性がたかまります。
つぎのいずれかのWifi対応 Raspberry Pi
Raspberry Piに対応したFullHD以上のモニター
Raspberry Piに対応したHDMIケーブル
ワイヤレスディスプレー(MiraCast)に対応するクライアントPC/スマートフォン
リファレンスとして、Microsoft社製の Wireless Display アダプタや、
シャープなどのTVセットのうち、Miracastに対応しているものを利用するといいでしょう。
README参照のこと
https://github.com/miurahr/picast/blob/master/README.rst
MiracleCast project https://github.com/albfan/miraclecast
LazyCast project https://github.com/homeworkc/lazycast
Gnome network displays https://gitlab.gnome.org/GNOME/gnome-network-displays
piracast https://github.com/codemonkeyricky/piracast
通信規格について、インターネットで公開されている情報を読んで、ご理解ください。
公式な規格は、WiFiの業界団体WiFi Allianceに参加している企業、団体、個人が閲覧可能になっています。
WiFi関連規格の入手
WifiアライアンスのTERMに合意のうえ、氏名連絡先をフォームに入力することで、ダウンロード可能
WiFi Display 規格(Miracast)
WiFi Dirct(P2P)規格
HDMI関連技術
MonitorやHDMIに関連する規格の一部について理解が必要です。
画面サイズやリフレッシュレートの規格
Raspberry Pi tvservice command
OMX Decoder
https://www.raspberrypi.org/translate/
https://projects.raspberrypi.org/en/projects/translating-for-raspberry-pi
https://www.raspberrypi.org/forms/volunteer-translator-form/
Jiraにログインして、チケットをひらいて、作業をおこなう。
対象プロジェクトたち
https://projects.raspberrypi.org/ja-JP/projects?software[]=python
以上