Movatterモバイル変換


[0]ホーム

URL:


BLOGTIMES

cles::blog

平常心是道
»ArchiveList (Tag for "python" )
«Prev ||1 ·2 ·3 ·4 ·5 ·6 ·7 ·8 ·|Next»
2024/02/22

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 で一撃なので簡単に試してみることができます。

pip install magika

at 21:55 |
2023/04/19

EU のサイバーレジリエンス法について Pyton が懸念を表明

python  europe 

EU のサイバーレジリエンス法 (Cyber Resilience Act)*1について、Python Software Foundation や Eclipse Foundation が懸念を表明していたのでメモ。

この EU のサイバーレジリエンス法というのはソフトウェアに対して製造物責任を負わせることになるものですが、これが営利企業であるかどうかに関わらず対象になることが議論の中心になっているようです。これまでソフトウェアは製造物責任の枠外に置かれていましたが、これが OSS やフリーソフトにまで及ぶことになると現状のエコシステムが壊れてしまうというのはあるので、なんとか妥協点を見つけて欲しいと思います。

「営利企業でなくボランティアに製造物責任負わす」Python 責任者異議 | ScanNetSecurity

欧州議会議員らは昨年、ソフトウェアのセキュリティおよび責任について定めた 2 つの法案を提出した。そしてその後、テック系のコミュニティは、これらの法案の規定が幅広すぎるとして反対の声を上げてきた。
そのうちの 1 つであるサイバーレジリエンス法案(CRA)は、デジタル製品のセキュリティ向上を目的として、製品を作る側に対して「製品のセキュリティの確認」「脆弱性回避策の実装」および「顧客へのセキュリティ関連情報の開示」を義務付けるものだ。


at 23:59 |
2023/03/31

Pytyon で「OSError: [WinError 1314] クライアントは要求された特権を保有していません」が出るときは

python 
開発者モード - Pytyon で「OSError: [WinError 1314] クライアントは要求された特権を保有していません」が出るときは

Python で書かれたプログラムを Windows で動かしていたら Symbolic Link を作成する部分で以下のエラーがでて困ってしまいました。
こんな感じの非常に単純なコードでもエラーになります。

C:\>pythonPython 3.11.2 (tags/v3.11.2:878ead1, Feb 7 2023, 16:38:35) [MSC v.1934 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> import os>>> os.symlink("aaa.txt", "bbb.txt", True)Traceback (most recent call last): File "<stdin>", line 1, in <module>OSError: [WinError 1314] クライアントは要求された特権を保有していません。: 'aaa.txt' -> 'bbb.txt'

Windows の 1314 というエラー*1を調べてみるとERROR_PRIVILEGE_NOT_HELD と書かれているので、とりあえず管理者権限で起動してやると問題なく動作することは確認できました

とはいえ、python の作業を何でも管理者権限でやらないといけないのは危ないので、なんとか方法がないかと思ったら設定アプリから開発者モードを有効にするという非常に裏技的なものを発見。

いろいろと警告が出ますが一時的に ON にするだけであれば、常に管理者画面であれこれ動かすよりも安全かもしれません。


at 19:45 |
2022/12/19

Think Python 第2版 の日本語版はフリーで手に入る

courseware  python  oreilly 
Think Python: How to Think Like a Computer Scientist (English Edition)

Python の入門書であるThink Python: How to Think Like a Computer Scientist 第2版 の日本語版がフリーで手に入ることが分かったのでメモ。

原著はオライリーなので内容は折り紙付きなので、適当な Python の入門書を探している場合にはこれはアリだと思います。
ちなみにライセンスは表示 3.0 非移植 (CC BY 3.0) です。
翻訳された方の情報は検索してもハッキリと出てこないのですが、東北学院大教養学部教授だった相川利樹先生でしょうかね。


    at 20:58 |
    2022/10/09

    東工大の Python 教材

    titech  python  courseware 

    GitHub に東工大情報理工学院の機械学習の講義で使われていると思われる Python の教材*1を見つけたのでメモ。

    はじめに — Python早見帳

    Python早見帳は、Pythonのプログラムと実行例をさっと確認(早見)できるJupyter Notebook(帳)です。

    こういう公開されている良質なプログラミング教材が簡単に手に入る時代になったというのは良いことですね。
    ますます学ぶ人のやる気が試される世の中になってきていると思います。


    at 22:31 |
    2022/04/21

    Python 用のプロファイラ Memray

    python  profier 
    Memray - Python 用のプロファイラ Memray

    Bloomberg が Python 向けのプロファイラであるMemray を公開していたのでメモ。

    この Bloomberg は経済ニュースで有名な Bloomberg です。

    install は pip で

    インストールはpip を使うと簡単にできます。

    python -m pip install memray

    実際にプロファイルを取ってみる

    基本的にはrun で実行して.bin を生成し、それをflamegraph で HTML のレポートに変換します。

    python -m memray run hoge.py -o profile.binpython -m memray flamegraph profile.bin

    参考


      at 23:19 |
      2022/03/24

      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 でコンパイルすると実際に正規表現として利用できるようになるようです。

      $ pythonPython 3.9.10 (main, Feb 27 2022, 15:02:07)[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import sre_parse>>> import sre_compile>>> sre = sre_parse.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,}$")>>> sre[(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)]>>> comlied = sre_compile.compile(sre)>>> comlied.match("hoge@example.com")<re.Match object; span=(0, 16), match='hoge@example.com'>>>> comlied.match("hoge..@example.com")>>>

      これを上手く使えば正規表現同士を自動的に合成するようなライブラリを作ったりすることができそうです。


        at 23:13 |
        2022/03/20

        Python で一定時間経つと内容が勝手に消えるハッシュ

        python 

        Python で一定時間が経つと自動的に内容が消えるキャッシュとして使えるハッシュがないか探してみたらexpiringdict というライブラリがありました。

        サンプルコード

        試しに以下のようなサンプルコードを書いてみました。

        expiringdict_example.py

        import timefrom expiringdict import ExpiringDictcache = ExpiringDict(max_len=100, max_age_seconds=1)cache['A'] = 1if cache.get('A') != None: print("Key A exists")else: print("Key A not found")time.sleep(5)if cache.get('A') != None: print("Key A exists")else: print("Key A not found")

        max_age_seconds を1秒に設定しているので、ちゃんと 5 秒後には key が見えなくなっています。

        $ python expiringdict_example.pyKey A existsKey A not found

          at 20:34 |
          2022/03/03

          Python でシンタックスチェックのみを行う

          python 

          スクリプト言語のシンタックスチェックは、例えば PHP はphp -l, Ruby と Perl はruby -cw,perl -cw という感じで実行できますが、考えたらPython のやり方を知らなかったので調べてみました。

          結論から述べると以下のようなコマンドで実行できます。

          python -m py_compile hoge.py

          コマンドラインオプション*1にあると思っていたのですが、Python はpy_compile*2 というモジュールを呼出す必要があるようです。
          ちょっと面倒ですね。


          at 23:01 |
          2022/02/27

          .eml ファイルから URL だけを抽出する

          antispam  phishing  python 
          spam URL report (2022/02/27) - .eml ファイルから URL だけを抽出する

          最近、HTML で書かれたによるフィッシングメールが良く届くので、そのたびにフィッシング対策協議会Google にフィッシング詐欺の URL を報告するようにしています。

          ただ、フィッシング詐欺の URL は HTML にしか書かれていないことが多く、僕は普段メールをプレーンテキストで読んでいる関係で、いちいちメールの表示形式を切り替えなければフィッシング詐欺の URL を取り出すことができないので、その作業がちょっと面倒でした。

          .eml の URL を自動抽出してみる

          というわけで、.eml ファイルに含まれる HTML パートから URL を抽出するスクリプトを Python で書いてみました。

          Beautiful Soup を使っているのでpip install beautifulsoup4 という感じでインストールしておく必要があります。これ以外は OS 標準のモジュールで動作します。

          distil_url.py

          import emailfrom email.header import decode_headerfrom email.utils import parsedate_to_datetimefrom bs4 import BeautifulSoupimport globimport reimport osimport sysIGNORE_PAT = re.compile(r'^(#|mailto|file)')def distil_url(path, result): f = open(path, 'rb') msg = email.message_from_bytes(f.read()) f.close() for part in msg.walk(): if( part.get_content_type() != 'text/html'): continue; html_source = part.get_payload(decode=True) soup = BeautifulSoup(html_source, 'html.parser') links = soup.find_all('a') for link in links: if link.has_attr('href') and not IGNORE_PAT.match(link['href']): result.add(link['href'])result = set()for f in glob.glob(sys.argv[1]): distil_url(f, result)for l in sorted(result): print(l)

          これをpython distil_url.py path/to/maildir/*.eml のような感じで実行してやれば URL の一覧が出力されます。
          今回はサーバ上の spam が入った Maildir を cron で1日1回なめて、メール通知するようにしてみました。


            at 23:57 |
            «Prev ||1 ·2 ·3 ·4 ·5 ·6 ·7 ·8 ·|Next»
            »ArchiveList (Tag for "python" )
            Copyright © 2004-2023 by CLES All Rights Reserved.
            サイト内検索
            検索ワードランキング
            貸金庫 審査
            銀行で貸金庫を借りてみた
            Photo
            ポスチャーフィット部品検査着ポテトなど生レモン尽くしスカッシュ正常に受付が完了しました財産債務調書バレット食道2024 年度 基盤研究(C)(一般) blog.cles.jpCelestica Seastone DX010ポスチャーフィットの割れ母子健康手帳 省令様式アーロンチェアのワイヤー新型コロナワクチン接種証明書アプリ冥銭
            へぇが多いエントリ
            閲覧数が多いエントリ
            1 .アーロンチェアのポスチャーフィットを修理(99660)
            2 .年次の人間ドックへ(99077)
            3 .福岡銀がデマの投稿者への刑事告訴を検討中(99066)
            4 .三菱鉛筆がラミーを買収(98676)
            5 .2023 年分の確定申告完了!(1つめ)(98645)
            最新のエントリ
            cles::blogについて
            誰が書いてる?
            最近行った場所
            サイトポリシー
            タグ一覧
            検索ワードランキング

            カテゴリ別エントリ
            Referrers

              Powered by CLES
              Nucleus CMS v3.31SP3/w memcached
              21374354(W:4979 Y:1545 T:0173)
              cles::blogのはてなブックマーク数
              benchmark


              [8]ページ先頭

              ©2009-2025 Movatter.jp