- blogs:
- cles::blog
Google が AI によるファイル判別ツールをリリース
google
cli
python Google が AI によってファイルを判別するプログラム Magika*1*2を公開していました*3。
通常、Linux で拡張子がない不明なファイルの詳細を知りたい場合には、ほとんどの人はfile*4 コマンドを使うことが多いと思います。ただし、ファイルがどのアプリケーションによって作成されたものなのかを判定するための一般的な方法はないため、file コマンドを使ったとしても内容が正しく判別されるとは限りません。file コマンドの場合には、ファイルの判定はファイルシステムテスト(ファイルが空か?特殊ファイルか?)、マジックナンバーテスト(ファイルの先頭にマジックナンバーが記載されているか?)、言語テスト(ファイルがテキストである場合には、どのような文字コードで書かれているか)の 3 つの判定が順に行われるとされています。つまり基本的にはヒューリスティックなルールを一定の順序で試してみて、該当するものがあるかどうかを判定していることになります。
これに対して、Magika は人間が作ったルールではなく、これをディープラーニングによるモデルで代替しようという試みです。
Googleが高精度かつ高速にファイル形式を判別するツール「Magika」公開 - PC Watch
Magikaはディープラーニングの力を活用し、平均精度99%以上を実現しつつ、1つのCPUで実行しても1秒間に120種類以上/数百万ファイルのファイル形式を判別できるツール。判別時間はわずか数ミリ秒で、モデル自体も比較的小さく、コアモデルは1MB未満だ。
† インストールは pip で
イントールは Python 環境があれば pip で一撃なので簡単に試してみることができます。
- *1: Magika
- *2: GitHub - google/magika: Detect file content types with deep learning
- *3: Magika: AI powered fast and efficient file type identification | Google Open Source Blog
- *4: Ubuntu Manpage: file - ファイルタイプを判定する
EU のサイバーレジリエンス法について Pyton が懸念を表明
python
europe EU のサイバーレジリエンス法 (Cyber Resilience Act)*1について、Python Software Foundation や Eclipse Foundation が懸念を表明していたのでメモ。
- Python Software Foundation News: The EU's Proposed CRA Law May Have Unintended Consequences for the Python Ecosystem
- Open Letter to the European Commission on the Cyber Resilience Act | Eclipse News, Eclipse in the News, Eclipse Announcement
この EU のサイバーレジリエンス法というのはソフトウェアに対して製造物責任を負わせることになるものですが、これが営利企業であるかどうかに関わらず対象になることが議論の中心になっているようです。これまでソフトウェアは製造物責任の枠外に置かれていましたが、これが OSS やフリーソフトにまで及ぶことになると現状のエコシステムが壊れてしまうというのはあるので、なんとか妥協点を見つけて欲しいと思います。
「営利企業でなくボランティアに製造物責任負わす」Python 責任者異議 | ScanNetSecurity
欧州議会議員らは昨年、ソフトウェアのセキュリティおよび責任について定めた 2 つの法案を提出した。そしてその後、テック系のコミュニティは、これらの法案の規定が幅広すぎるとして反対の声を上げてきた。
そのうちの 1 つであるサイバーレジリエンス法案(CRA)は、デジタル製品のセキュリティ向上を目的として、製品を作る側に対して「製品のセキュリティの確認」「脆弱性回避策の実装」および「顧客へのセキュリティ関連情報の開示」を義務付けるものだ。
Pytyon で「OSError: [WinError 1314] クライアントは要求された特権を保有していません」が出るときは
python Python で書かれたプログラムを Windows で動かしていたら Symbolic Link を作成する部分で以下のエラーがでて困ってしまいました。
こんな感じの非常に単純なコードでもエラーになります。
Windows の 1314 というエラー*1を調べてみると ERROR_PRIVILEGE_NOT_HELD と書かれているので、とりあえず管理者権限で起動してやると問題なく動作することは確認できました
とはいえ、python の作業を何でも管理者権限でやらないといけないのは危ないので、なんとか方法がないかと思ったら設定アプリから開発者モードを有効にするという非常に裏技的なものを発見。
いろいろと警告が出ますが一時的に ON にするだけであれば、常に管理者画面であれこれ動かすよりも安全かもしれません。
Think Python 第2版 の日本語版はフリーで手に入る
courseware
python
oreilly Python の入門書である Think Python: How to Think Like a Computer Scientist 第2版 の日本語版がフリーで手に入ることが分かったのでメモ。
原著はオライリーなので内容は折り紙付きなので、適当な Python の入門書を探している場合にはこれはアリだと思います。
ちなみにライセンスは 表示 3.0 非移植 (CC BY 3.0) です。
翻訳された方の情報は検索してもハッキリと出てこないのですが、東北学院大教養学部教授だった相川利樹先生でしょうかね。
東工大の Python 教材
titech
python
courseware GitHub に東工大情報理工学院の機械学習の講義で使われていると思われる Python の教材*1を見つけたのでメモ。
Python早見帳は、Pythonのプログラムと実行例をさっと確認(早見)できるJupyter Notebook(帳)です。
こういう公開されている良質なプログラミング教材が簡単に手に入る時代になったというのは良いことですね。
ますます学ぶ人のやる気が試される世の中になってきていると思います。
Python 用のプロファイラ Memray
python
profier Bloomberg が Python 向けのプロファイラである Memray を公開していたのでメモ。
この Bloomberg は経済ニュースで有名な Bloomberg です。
† install は pip で
インストールは pip を使うと簡単にできます。
† 実際にプロファイルを取ってみる
基本的には run で実行して .bin を生成し、それを flamegraph で HTML のレポートに変換します。
† 参考
Python で正規表現の構文木を得るには
python
regex Python で正規表現を構文解析だけした結果(内部表現)を得る方法がないかと思って調べてみたところ、sre_parseを使えばできることが分かったのでメモ。
例えば、メールアドレスにマッチする正規表現(^[a-zA-Z0-9_+-]+(.[a-zA-Z0-9_+-]+)*@([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\.)+[a-zA-Z]{2,}$)を parse すると [(AT, AT_BEGINNING), (MAX_REPEAT, (1, MAXREPEAT, [(IN, [(RANGE, (97, 122)), (RANGE, (65, 90)), (RANGE, (48, 57)), (LITERAL, 95), (LITERAL, 43), (LITERAL, 45)])])), (MAX_REPEAT, (0, MAXREPEAT, [(SUBPATTERN, (1, 0, 0, [(ANY, None), (MAX_REPEAT, (1, MAXREPEAT, [(IN, [(RANGE, (97, 122)), (RANGE, (65, 90)), (RANGE, (48, 57)), (LITERAL, 95), (LITERAL, 43), (LITERAL, 45)])]))]))])), (LITERAL, 64), (MAX_REPEAT, (1, MAXREPEAT, [(SUBPATTERN, (2, 0, 0, [(IN, [(RANGE, (97, 122)), (RANGE, (65, 90)), (RANGE, (48, 57))]), (MAX_REPEAT, (0, MAXREPEAT, [(IN, [(RANGE, (97, 122)), (RANGE, (65, 90)), (RANGE, (48, 57)), (LITERAL, 45)])])), (MAX_REPEAT, (0, MAXREPEAT, [(IN, [(RANGE, (97, 122)), (RANGE, (65, 90)), (RANGE, (48, 57))])])), (LITERAL, 46)]))])), (MAX_REPEAT, (2, MAXREPEAT, [(IN, [(RANGE, (97, 122)), (RANGE, (65, 90))])])), (AT, AT_END)] という表現を得ることができます。
この表現を sre_compile でコンパイルすると実際に正規表現として利用できるようになるようです。
これを上手く使えば正規表現同士を自動的に合成するようなライブラリを作ったりすることができそうです。
Python で一定時間経つと内容が勝手に消えるハッシュ
python Python で一定時間が経つと自動的に内容が消えるキャッシュとして使えるハッシュがないか探してみたら expiringdict というライブラリがありました。
† サンプルコード
試しに以下のようなサンプルコードを書いてみました。
expiringdict_example.py
max_age_seconds を1秒に設定しているので、ちゃんと 5 秒後には key が見えなくなっています。
Python でシンタックスチェックのみを行う
python スクリプト言語のシンタックスチェックは、例えば PHP は php -l, Ruby と Perl は ruby -cw, perl -cw という感じで実行できますが、考えたら Python のやり方を知らなかったので調べてみました。
結論から述べると以下のようなコマンドで実行できます。
コマンドラインオプション*1にあると思っていたのですが、Python は py_compile*2 というモジュールを呼出す必要があるようです。
ちょっと面倒ですね。
.eml ファイルから URL だけを抽出する
antispam
phishing
python 最近、HTML で書かれたによるフィッシングメールが良く届くので、そのたびにフィッシング対策協議会やGoogle にフィッシング詐欺の URL を報告するようにしています。
ただ、フィッシング詐欺の URL は HTML にしか書かれていないことが多く、僕は普段メールをプレーンテキストで読んでいる関係で、いちいちメールの表示形式を切り替えなければフィッシング詐欺の URL を取り出すことができないので、その作業がちょっと面倒でした。
† .eml の URL を自動抽出してみる
というわけで、.eml ファイルに含まれる HTML パートから URL を抽出するスクリプトを Python で書いてみました。
Beautiful Soup を使っているので pip install beautifulsoup4 という感じでインストールしておく必要があります。これ以外は OS 標準のモジュールで動作します。
distil_url.py
これを python distil_url.py path/to/maildir/*.eml のような感じで実行してやれば URL の一覧が出力されます。
今回はサーバ上の spam が入った Maildir を cron で1日1回なめて、メール通知するようにしてみました。
- sadpkv
- CACHEMANAGER.phpというのはどうだろうかと
- pairb1m
- Lightning のToDoリストを複数のPCで共有できるアドオン
- majodca
- 九州旅行から帰ってきました
- majodca
- 九州旅行から帰ってきました
- hot534
- yum を使って OpenVPN をインストールする
- dresssu3
- NP_Trackbackを騙るトラックバックspamについて
- zippern7o
- NP_SpamBayesJP jp1b
- park81o
- Google Docs をメールフォームとして使う
- fogmpl
- なんで官庁の文章はPDFなんだろうか
- cutjw9
- 即席スライドショーを作る
- frightenlho
- 添付ファイルの容量を表示する「Attachment Sizes」
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(5019)
3 . GitHub が全ての公開リポジトリへのシークレットスキャンを有効に(4162)
4 . 年次の人間ドックへ(4089)
5 . 2023 年分の確定申告完了!(1つめ)(3945)
Academic[574]
Book[155]
Diary[522]
Disaster[101]
Foodlogue[1425]
Game[284]
Goods[805]
Healthcare[341]
Hobby[32]
IT[1195]
Military[343]
misc.[1570]
Mobile[510]
Music[38]
Neta[106]
News[95]
Photo[391]
RealEstate[120]
Security[1178]
SEO Contest[36]
Software[634]
Tips[1886]
Travelogue[1238]
Web[675]
Work[193]
![開発者モード - Pytyon で「OSError: [WinError 1314] クライアントは要求された特権を保有していません」が出るときは 開発者モード - Pytyon で「OSError: [WinError 1314] クライアントは要求された特権を保有していません」が出るときは](/media/t/1_20230331-developer_mode.png)


