ブックマーク / atsuoishimoto.hatenablog.com (10)

  • さようなら、はてな(4年ぶり2回目) - atsuoishimoto's diary

    あたらしく自前のBlog https://aish.dev をつくりましたので、こちらはもう更新しないつもりです。 https://aish.dev は、自作のMiyadaiku というSSGを使い、Github actionを使ってGithub pagesで公開しています。 編集環境としては専用のJupyterLab環境を用意して、テキストを編集して保存すると自動的に確認用のページがビルドされ、編集が終わったらgit commit して git push すると公開される、というプログラマにはとてもフレンドリな環境になっています。giはJupyterLabの拡張モジュールから操作できますし、ブラウザ上のターミナルからも扱えます。 リモート環境ながらレスポンスは良好だし、Jupyter NotebookでBlogを書けるのがほんとに便利です。「fotolife記法」なんかの独自記法に悩まさ

    さようなら、はてな(4年ぶり2回目) - atsuoishimoto's diary
    nwpct1
    nwpct1 2020/07/03
    自分もVM立てて同じ環境用意しようかな
  • Python 3.8 の概要 (その3) - Pickle protocol 5 with out-of-band data - atsuoishimoto's diary

    Pythonでは、複雑なデータの交換や保管する場合、よく Pickleモジュール が使われます。Pickleはデータを外部に出力可能な形式に変換してファイルに変換したり、サーバと通信して送信したりします。 Pythonのconcurrent.futures や multiprocessing を使って並列処理を行う場合も、プロセス間のデータ交換に Pickle が使われています。 PEP-574 Pickle protocol 5 with out-of-band data Pickleは汎用的なデータフォーマットを定義していて、データを作成したハードウェアと異なるアーキテクチャのハード上で読み込んでも、ただしく元のデータを再現できるようになっています。 しかし、現在ではPickleの使い方は多様化しており、そういった汎用的なデータフォーマットだけでは効率的にデータの転送や保管を行えないこ

    Python 3.8 の概要 (その3) - Pickle protocol 5 with out-of-band data - atsuoishimoto's diary
    nwpct1
    nwpct1 2019/09/22
    なるほど。PEP 574 あとでちゃんと読んでおく
  • Python 3.8 の概要 (その1) - Assignment expressions - atsuoishimoto's diary

    古来、Pythonでは「代入は文であるべき!」と一貫して主張してきました。 C言語などでは、代入は足し算や掛け算と同じ、値を計算する「式」で、たとえば a = (b=100) / 2; と書くと、b には 100 を代入し、a に 100/2=50 を代入します。1+1 は 2 という値になる 式 ですが、b=100 も同様に値が 100 となる 式 なのです。 Pythonでは、代入は式ではないので、こういう書き方はできません。 Pythonの代入は、足し算などの演算子の仲間ではなく、if や for のような制御文の仲間で、あまり自由な書き方は出来ないのです。 Python FAQ では、その理由として Python の式中での代入を許さない理由は、この構造によって起こる、他の言語ではありがちで見つけづらいバグです: if (x = 0) { // error handling } e

    Python 3.8 の概要 (その1) - Assignment expressions - atsuoishimoto's diary
    nwpct1
    nwpct1 2019/09/03
  • docs.python.jpでのドキュメント公開終了 - atsuoishimoto's diary

    これまで、python.jpではPythonの日語ドキュメントを公開してきたが、この度、ドキュメントのホスティングを終了し、docs.python.org へのリダイレクトのみをおこなうようになった。 www.python.jp 実に喜ばしいことである。これまで、日語ドキュメントは python.jp においてある私家版でしかなかったが、python.orgで公開されることで、一定の公式っぽさを得ることができる。 また、python.jpは私が一人でほそぼそと、さくらインターネットの一番安いVPSで管理運用してきた。しかし、これからはPython家の運用チームできっちり運用していただけるのである。 別に難しいことをしていたわけではないが、python.jp運営のプレッシャーはちょっとしたものだった。ここ近年のPythonブームも、私がちょっとしくじってドキュメントを参照できなくなる、

    docs.python.jpでのドキュメント公開終了 - atsuoishimoto's diary
    nwpct1
    nwpct1 2019/02/27
    ありがとうございました!
  • リスト内包のひみつ - atsuoishimoto's diary

    こちらのTweetが Python.jp slack でちょっと話題になっていた。 どういうこと? pic.twitter.com/BxyyWbyvQo— ahuglajbclajep (@ahuglajbclajep) 2018年1月24日 次のようなコードだ >>> a = [lambda: print(i) for i in range(3)] >>> for i in a: i() 2 2 2 結論としては cocoatomo さんの書かれているように、変数の評価タイミングの問題で、 初めまして. そこは Python のループでよくハマるポイントで, i の値の評価が後で行われるのが混乱の原因です. ループの体の中で一度 i を別の変数に入れるなどして, 評価を走らせると回避できます. FAQ → https://t.co/5iCqdIIhUZ— tomo🐧 (@cocoat

    リスト内包のひみつ - atsuoishimoto's diary
    nwpct1
    nwpct1 2018/01/28
  • Pythonのfor文は遅い? - atsuoishimoto's diary

    bicycle1885.hatenablog.com こちらの記事を拝見していて、ちょっと気になったので注釈。 PythonやRを使っている人で、ある程度重い計算をする人達には半ば常識になっていることとして、いわゆる「for文を使ってはいけない。ベクトル化*1しろ。」という助言があります。 これは、PythonやRのようなインタープリター方式の処理系をもつ言語では、極めてfor文が遅いため、C言語やFortranで実装されたベクトル化計算を使うほうが速いという意味です。 昔からよくこういう言い方がよくされるが、当にPythonのfor文は遅いのだろうか。 聞くところによるとRのfor文はガチで遅いそうだが、Pythonの計算が遅いのはインタープリタ方式だからでも、for文が遅いからでもない。もちろん、Pythonはインタープリタなので遅いし、for文だって極めて遅い。しかし、これはPyt

    Pythonのfor文は遅い? - atsuoishimoto's diary
    nwpct1
    nwpct1 2018/01/06
    なるほど...
  • Pythonのガベージコレクタは「マーク&スイープ」? - atsuoishimoto's diary

    昨日公開した Pythonのガベージコレクション にこんな突っ込みをいただいた。 マークアンドスイープGCじゃないそうです PythonのGarbageCollection http://www.narihiro.info/translate/garbage_collection_for_python_jp.html 確かに、Pythonで使用しているのは教科書で言うマーク&スイープとは異なるアルゴリズムである。上記のページにあるように、いわゆるマーク&スイープは、ルートオブジェクトと呼ばれる生きていることが確実なオブジェクトを見つけ出し、そこから参照されているオブジェクトをどんどん探り出して、最終的に誰からも参照されていないオブジェクトをあぶり出すというものだ。Pythonではルートからオブジェクトを探すというアプローチを取っておらず、私も会場の説明では「マークアンドスイープの一種」のよ

    Pythonのガベージコレクタは「マーク&スイープ」? - atsuoishimoto's diary
    nwpct1
    nwpct1 2017/10/15
    なるほどー 少し古い記事だけど面白かった
  • 静的サイトジェネレータ Miyadaiku - atsuoishimoto's diary

    ここ数年、www.python.jp は、 Pelican を使って構築していた。 Pelican は実績のある静的サイトジェネレータで使いやすくはあるが、基的にはBlogサイトの構築ツールであり、あまり柔軟性や拡張性には重点を置かれていないように感じていた。www.python.jp 以外でもいくつかのサイト構築に使用したが、以下のような不満を感じていた。 アーティクルに Jinjaテンプレートを書きたい reStructuredTextやMarkdown には、定型文などを記述するため手段として、エクステンションやディレクティブなどを開発して組み込む仕組みがあるが、開発・管理はそれなりに面倒で、そう気軽には作れない。Jinjaのマクロ機能などを使って、手軽に拡張できる仕組みがほしい。 アーティクル全体を検索するAPIがない。このため、Blogサイトなどでよくある、サイドバーに「最近の

    静的サイトジェネレータ Miyadaiku - atsuoishimoto's diary
    nwpct1
    nwpct1 2017/08/09
  • Python 3.6の概要 (その4 - クラス定義) - atsuoishimoto's diary

    クラス定義のカスタマイズ これまで、Pythonのクラス定義をカスタマイズする手段として、メタクラスが使われてきた。しかし、メタクラスを利用したカスタマイズは、Pythonのオブジェクトモデルや型システムの知識が必要で実装が難しく、また複数のメタクラスを同時に使用するのが難しい、などの問題点があった。そこで、PEP 487 -- Simpler customisation of class creation では、メタクラスを使わずにクラスをカスタマイズする手段を提供している init_subclass() メソッド クラスのサブクラスが作成されたときに呼び出され、引数として、派生クラスと、クラス定義の引数が渡される。__init_subclass__()メソッドは、自動的にクラスメソッドとなる。 class Spam: def __init_subclass__(cls, **kwarg

    Python 3.6の概要 (その4 - クラス定義) - atsuoishimoto's diary
    nwpct1
    nwpct1 2016/12/25
    おぉたしかに “クラスの名前空間辞書 __dict__ の要素を取得すると、常に属性が登録された順番で返される。”
  • 仮想継承とsingledispatch - atsuoishimoto's diary

    以前、emitjson というパッケージを公開した。使い方は簡単に こちらに 書いたが、要はfunctools.singledispatch() をちょっと使いやすくしたものにすぎない。 singledispatch() は、Python3の抽象基底クラスと組み合わせると、非常に面白い使い方ができる。emitjson を例にして、使い方を紹介してみたい。 emitjson 簡単に emitjson の使い方を說明しておこう emitjson は、emitjson という名前だが、JSON を出力するためのモジュールではなく、いろいろなオブジェクトを json として出力可能なオブジェクトに変換するためのリポジトリを作成するモジュールだ。特にJSON専用ということもなく、たとえばCSVファイルを作成する場合などでも利用できる。 例として、datatime.date 型の日付と、PIL.Ima

    仮想継承とsingledispatch - atsuoishimoto's diary
    nwpct1
    nwpct1 2016/08/04
    なるほど abc.ABCMetaってそうやって使うんですね
  • 1