何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

Python 3.6における『Effective Python』 項目33はこう変わる

項目33「サブクラスをメタクラスで検証する」はこう書き換わる

Python 3.6がリリースされた。

Python 3.6で導入された新機能の一つに__init_subclass__がある。 PEP 487 -- Simpler customisation of class creation | Python.org か石本さんのエントリを参照してほしい。

atsuoishimoto.hatenablog.com

『Effective Python』の項目33「サブクラスをメタクラスで検証する」ではメタクラスを使ってサブクラスの検証(値の整合性チェックなど)を行うテクニックが解説されている。 多角形のクラスを定義する際に、頂点数が3未満の場合はValueErrorを送出する、というサンプルがある。

class ValidatePolygon(type):

    def __new__(meta, name, bases, class_dict):
        if bases != (object,):
            if class_dict["sides"] < 3:
                raise ValueError("polygons need 3+ sides.")
        return type.__new__(meta, name, bases, class_dict)


class Polygon(object, metaclass=ValidatePolygon):
    sides = None

    @classmethod
    def interior_angles(cls):
    """内角の総和を求める"""
        return (cls.sides - 2) * 180


class Triangle(Polygon):
    sides = 3


if __name__ == '__main__':
    triangle = Triangle()
    print(triangle.interior_angles())

Python 3.6では、__init_subclass__を利用することでメタクラスを使うことなくサブクラスの検証が実現できる。

class Polygon(object):

    def __init_subclass__(cls, sides, **kwargs):
        cls.sides = sides
        if cls.sides < 3:
            raise ValueError("polygons need 3+ sides.")

    @classmethod
    def interior_angles(cls):
        return (cls.sides - 2) * 180


class Triangle(Polygon, sides=3):
    pass


if __name__ == '__main__':
    triangle = Triangle()
    print(triangle.interior_angles())

__init_subclass__がクラスメソッドである、ということを押さえておけばメタクラスを使う例よりもわかりやすくなっている。

ベストプラクティスを収めた『Effective Python』も時間がたつと変わってしまう、利用している道具の変化は常にを追わないといけない、というのを強く感じる次第である。

ブログ設立4周年

ブログ設立4周年、だそうです。

この「何かを書き留める何か」というブログも設立して4年が経過したそうである。 そうである、という伝聞調なのははてなから送られたメールによって知らされたからである。

私は何を書き留めてきたのか。

最初はProject EulerLaTeXと学生生活に関係するようなことを書いていた。 次に来たのはPythonである。 元々Project Eulerを解くためにSage Mathを使っていて、その勉強のためにPythonを始めたのであった。 今はPythonにまつわる話や読んだ本の話がメインとなっている。 プログラミングに関してはQiitaの方が書きやすいのかもしれないが、何だかんだではてなブログで書き続けている。

ブログを書き続けたことで新たなる出会いもあった。 『Effective Python』はその典型である。

最近は更新頻度が減ってしまった。 頻度を上げるために机の掃除も行った。 2017年度は積極的にアウトプットを続けたい。

2016年大反省会

今年は年内に行う大反省会

2015年大反省会を2016年に行う - 何かを書き留める何か

昨年は諸般の事情で翌年に行ったが、今年は年内に出来そうなので行う。 2016年は転職をしたりPyCon JP 2016でLTを行うなど大きなイベントもありそれなりに充実した1年であった一方で、財政や健康という面では褒められた1年ではない。思い出せる範囲で今年2016年を振り返り、来年2017年に繋げていきたい。

2016/01/23 『Effective Python』邦訳発売

この本については何度も取り上げているので殊更付け加えることなどないが、過去に何度も読み込んだ本という点でもずっと思い出に残るであろう。 自分の中で何度も読み込んだ本は『線型代数学』『Algebra Vol.1』と『Effective Python』である。FF7の攻略本やベイグラントストーリーの攻略本も読み込んだ思い出もあるが。

2016/01/下旬 自分が行っている業務に限界を感じる

自分の日記から引用する。終末論めいた締め方が面白い。

常駐・派遣の業務と並行して自社の業務を行うことが無理であると感じるようになった。 会社として並行して進めるのはよくあるが、同一リソースを割り当てるのはおかしい。 片手間にやって成果が出るのか?限界は近い。

2016/02/上旬 転職活動を開始する

以前から小規模な動きは行っていたが、2月から本格始動した。 最初は自力で行っていたが手間がかかるので転職エージェントを活用することにした。 自力で受けた1社は誤字を含むお祈り文が送られてきた。 転職エージェントは最初2社登録し、1社は紹介できる案件がないと断られた。 その会社の登録フォーム内にあったIPA系の資格の名称が旧名称のままで不安を感じていたもののちょっとショックであった。 もう1社と面談を行い、いくつか受けることにした。

2016/03/19 Effective Python読書会 #1を開く

代々木の貸会議室にて実施。最初は20人以上集まる盛況ぶりであったが、次第に減少していった。 勉強会に参加した経験は何回かあるものの、開くのは初めてであり大変であった。 場所の確保も大変であるが、自分のモチベーションを維持するのも大変であるというのは意外な発見であった。

2016/04/上旬 セカンドオピニオンを求める

細々と行っていた転職活動はことごとく失敗を重ねた。 理由は、現状のアレな会社から抜け出したいという思いが強すぎて結局自分は何がしたいのかというのが見えていなかった。 とはいえ、Pythonで実務経験を積みたいというのがやりたいことであったのだが。 セカンドオピニオンを求めて3社目へ赴き面談を行った。

2016/05/上旬 面接、面接、面接

大型連休の隙間平日は有給休暇を取りつつ面接に臨んでいた。 会社は東京にあるものの、仕事場(派遣先)は埼玉県某所にあり面接に臨むには有給を使ってでも行かなければならない。命がけである。 大型連休の隙間平日ならば有給を取っても何ら不自然ではない。 有給を取得する際は理由を一切言わず、かつ有給取得の許可を求めるのではなく 「この日、とるんで」ぐらいの態度で普段からいると何かと便利である。

2016/05/02 PyCon JP 2016のTalkセッションに申し込もうと思い立つ

高校数学総復習や線型代数、数学アート、初等整数論を考えていた。日記に面白いことが書いてあった。

数学とPython、それがXaroさんの軸であり武器であり持ち味であり特徴である。

2016/05/下旬 転職活動を終える

現在いる会社から内定通知をもらい、転職活動を終えることにした。 受けた会社の中には後に新聞沙汰になる出来事を起こす会社があったり、 ここどうですかという会社の中には現在問題になっている企業もあり、 運がよかったというか、転職市場にもアレな企業が紛れているというか。

2016/05/下旬 中間発表パーティの参加を断られる

会社を辞めます、転職しますと伝えたら直近に行われる予定であった中間発表会見パーティに参加しなくてよいと言われた。 この話をPython Mini Hack-a-thonの打ち上げの場で言ったところ、「そんな会社は辞めるべきだ」と口を揃えて言われた。痛快であった。 なお、その中間発表パーティの場で部署内で秘密裏に僕が辞めることが伝わったらしい。

2016/06/08 退職理由の分析

日記に長文が書いてあったので引用する。

何故私は***を辞めるのか。 一言で雑に言えば音楽性の違いである。 ではその不協和音が生じた原因は何か。

***は社内の仕組みとして技術を評価しない。 技術者を評価しない。 ヒラから始まりリーダー、マネジャー、係長、課長、部長とマネジメントのキャリアパスは存在し、明確であるが、 エンジニアのパスはゴールとしてのスペシャリストは存在するものの、そこに至る道が存在しない。 必要としていないのだ。 自社でエンジニアを抱えるのではなく、外注に投げて中抜きをして利益を得る構造なのである。 もちろん、仕事してはマネジャーでも技術に理解があるというケースなら問題はそれほど生じないが、 現実としては外注エンジニアの働いた時間の管理などいわゆるベンダー管理しかやっていない。 新しい技術どころか既にスタンダードになった技術すら学ぼうとしない。

本を読み、外の世界に触れて得た結論は、***は技術者として働くには最悪の環境であり、 3年とか待たずに環境を変えるべきというものである。

2016/06/26 太鼓の達人を始める

以前から数回プレイはしたことがあったが本格的に始めたのはこのタイミングであった。 つまり、バナパスポートカードというもの使い始めたことを意味する。 中学、高校、学部と吹奏楽部や吹奏楽団で吹いてきたが、現在は吹いていない。 楽器は欲しいが購入する余裕も練習する時間も場所もない。 それでも何かを演奏したくて太鼓の達人を始めた。 他の音楽ゲームはゲームをしている様であるが、太鼓の達人は和太鼓を叩いている、 つまり楽器を演奏しているように感じるのである(実際の和太鼓の譜面とは違うと思うが)。

腕前はホワイトVer.五級、レッドVer.二級であり、むずかしいがメインである。

2016/07/21 無職になる

会社は7/20に辞めて、8/1から働き始めたので10日ほど無職であった。 この10日があったせいで国民年金国民健康保険を支払う羽目になった。市役所に赴いて面倒な手続きを行った。 また、7月に遊びすぎて貯金がなくなってしまった。

2016/08/01 今の会社に入社する

今までは人月商売でかつ偶然であるがユルイ環境でもあったのでテキトーに働いても生きていけたが、 今はスクラム開発でかなりハイペースに進む。 今までなかった「お客さんにすぐに使われる」というのがあり、結構胃が痛い場面もでてくるのが辛い。 実際に胃が痛くなることはなく比喩であるが。 入社1週間後には新規事業のシステム開発に取り組み、PythonAWSのサービスを使った CRONで動かすスクリプトの作成などを行った。今でも動いているはずである。

2016/09/21 PyCon JP 2016 に参加する

参加そのものは3回目であるが、カンファレンスを通しで参加したのは初めてであった。 Talkは落選したものの、Lightning Talkに参加することにした。 内容としてはPyCon JPを定点観測して自分の成長(?)を振り返るという内容で 全く技術的な内容ではなかった。それでも、何人かの参加者を勇気づける(?)ことができたらしく、よかった。 2日目はオライリージャパンの方と久しぶりに会い、『アルゴリズムクイックリファレンス 第2版』の査読依頼を受けた。 「鈴木さんは数学がお得意なので」という言葉をうれしく感じつつも不安を覚える自分がアレである。

2016/11/上旬 『アルゴリズムクイックリファレンス 第2版』査読開始

アルゴリズムPythonで実装される、という話だったので期待してみたら第2版で新規採用されたアルゴリズムPythonで実装されているのみで続投したアルゴリズムはCやJavaのままであった。思いのほか期間も少なく土日や平日夜を利用して一気に読み進めた。ほとんどがテニヲハの指摘である。 例えばP.98の数式の整理やP.1凸形状の説明の補足などがある*1

2016/11/中旬 初めて新幹線に乗る

今まで一度も新幹線に乗ったことがなかったが、会社の出張で初めて東海道新幹線に乗った。 なお、JRの特急は登山の帰りに立川から新宿まで特急かいじに乗ったことがある。飛行機は2回ほどある。 私鉄の特急は西武新宿線のレッドアロー号で本川越から西武新宿まで乗ったことがある。

2016/12/24 『アルゴリズムクイックリファレンス 第2版』発売

無事に発売された。他にも査読者の方がいらっしゃたのかと驚いた。 『Effective Python』の時はかなりがっつり翻訳者、監修者、編集者とやりとりがあったが今回はあっさりという印象であった。 たぶん、本当はあっさり目が普通であり、前回がかなり特殊ケースであったのだろう。単に第2版だからというのもあるかもしれない。

全体的な反省

2016年は自分で何らかのプロダクトを作るのが目標である、と立てた。 そのプロダクトは8月~9月あたりに実装したCRONで動かすPythonスクリプトとして現在も動いて陰で業務を支えている。 別のプロジェクトでも成果物の一部が世間の人が触れるところで動いている(まだしょぼいので恥ずかしくてどこにあるのかは言えない)。 また、『アルゴリズムクイックリファレンス 第2版』でも査読者としてプログラマ界隈に僅かであるが貢献できた。 このように大きなことをいきなり行うのは難しいが、小さなことを重ねていずれ大きなものを作っていきたい。

*1:翻訳者、他の査読者、編集者といらっしゃるので本当に自分の意見が反映された結果なのかは知らない。