何かを書き留める何か

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

Curriculum Vitae of XaroCydeykn

Curriculum Vitaeと呼ぶには何かが欠けている気がするが気にしない。

各種アカウント

  • Twitter 何だかんだ学生時代から続けている。ある意味20代の歴史である。
  • Mastodon 流行りだしたので作って放置していたが、一応生きている。
  • misskey.io にわかに流行りだしていたので作ってみた。

Twitterに限らず、複数アカウントを同時に使ったことがないので、どうやって使い分けたらいいのかがわからない。

翻訳

監訳

技術書査読

2016年

2017年

2018年

2019年

2020年

2021年

2022年

2023年

外部発表

2016年

  • PyConJP で感じる私の成長」PyCon JP 2016 Day1 Lightning Talk

受付後にLTの募集枠が空いていたので深く考えずに登録した。 卒論・修論発表で培った(?)勢い重視の発表で中身の薄さを乗り越えた。 最初のPyCon JPは怖い、という話はある程度共感を得たようである。

2017年

当初は話を聞くだけのつもりであったが、Python 3.6の新機能を調べるうちにメタクラスの部分の置き換えができることに気づいたので発表した。

中身のない概要から如何に内容を絞り出すか、と苦戦した発表。 技術書に書かれていることだけでは難しく、実践を伴わないと意味のある発表にするのが難しい。

  • Respect the Built-in Names」PyCon JP 2017 Day1 Lightning Talk

Reject Conから評判の良かった内容を抽出して膨らませたLT。 意外と琴線に触れる内容だったらしく、アンサーLTまで登場した。

  • 技術書査読・校正の現場から」BPStudy #123 Lightning Talk

間違い探しLT。 筆者も意外といい加減なことを書いているのでそれを検証しつつなんとかするのが査読や校正の役割である。

2018年

  • レガシーDjangoアプリケーションの現代化」DjangoCongress JP 2018 Talk

2017年8月から参画したプロジェクトの経験を元に架空のプロジェクトという見立てを用いて話を作った。

SymPyで学んだことを整理するために発表した。 題材として学部1,2年でやるような数学を選んだつもりだったが、気付いたら整数論も入っていた。

2019年

正しくはQuerySetではなくDjango ORMの失敗談。 PCを持たないのにその場で登壇を決めてしまったので会社の同僚にPCを借りて急ごしらえでスライドを作成した。

ピタゴラス数と無限降下法について勉強して話した。 無限降下法の実装は手探りで証明を理解しつつやったので中々に面白かったのだが、それが発表者に伝わったのかは神のみぞ知る。

2020年

  • 君はcmathを知っているか」PyCon mini Shizuoka 2020 Talk

cmathモジュールの可能性を模索した。 当初の予定はマンデルブロ集合が到達点であったが、冷静に考えてcmathである必要性を感じなかったので、離散Fourier変換と信号処理という電通大の学部3年でやる基本的なテーマを引っ張り出した。

ioモジュールのインメモリーストリーム(StringIo, BytesIO)の実用例を発表した。 BytesIOの中でさらにZipfileを開くという込み入った実装がちょっと気に入っている。

2021年

完全なる一発ネタ。 気軽にPythonを使っていいんだよ、とか気軽にLTやっていいんだよ、というのがテーマであった。 PyCon JP 2021のTwitterでこのLTを元にしたツイートがあって感動した。

  • 組み込み関数powの知られざる進化」PyCon JP 2021 Talk

pow関数に突然追加された機能について数学的な背景を説明した。 数学科でも、情報系でも扱うようなテーマなので、案外みんな知っているのかもしれない。

2022年

  • 残念ながら、1回も登壇せず。書籍作業を優先していたので発表にまで手が回らない状況であった。

2023年

  • 堅牢なPythonコードを書く方法」 BPStudy#189

監訳した『ロバストPython』の概略を説明した。 Pythonの良さと静的型付け言語の良さを良いとこどりして文字通り良いコードを書いていきたい。 「型が形無し」は邦訳にあるジョークだが、それに合わせたか「継承に警鐘を鳴らす」という言い回しが咄嗟に出た。

役に立たないオブジェクトを作る発表。 英語資料を作るのはよいのだが、英語発表は非常に大変だった。

2024年に読んだ本

雑な読書記録

買っても読まず、読んでも特に記録を残さずに思い出に残らないので、年単位で読んだ本と簡単な感想を残しておくことにしよう。 いつも、書評を書こうと思い立つもすぐに断念してしまうので「簡単な感想」にとどめてそのハードルを下げるのが目的である、と言っておきながら5年目である。 過去のリストは以下の通り。

自分が読み返して「こんなの読んだのか」と感慨に耽るのが目的なので、気楽に読み流してほしい。

犯罪学教室のかなえ先生 『世の中の8割はどうでもいい。』

www.shogakukan.co.jp

人生をバランスよく生きてくための「テキトー術」を、『人生がクソゲーだと思ったら読む本』で話題を呼んだ自称・日本一テキトーなVTuberが説きます!

大学の同級生が編集を担当した、ということで購入。 筆者はVTuverで、学生時代や法務教官時代の経験を元に「テキトー」に生きる方法を描いたエッセイ。 8割はどうでもいいとかテキトーという言葉から投げやりな生き方をなんとなく想起してしまうがそうではなく、自分でどうしようもない部分に悩む必要はない、というのは面白い視点であった。 語りかける文体ではありつつも読みやすいというも面白い。語りかける文体は得てして読みづらい代物になるのだが、読みやすかった。 エッセイという体歳上、個人の経験がベースであり、何らかの論文や研究がベースになっている主張ではないことは一応気にしておいてもいいかもしれない。 なお、肩書に「日本初の元国家公務員の男性VTuber」とあるが、あまくだり氏の方が早い気がする。 もっとも、現在のあまくだり氏はVTuberではなくYouTuberかつカードショップオーナーである。

マウンティングポリス『人生が整うマウンティング大全』(技術評論社

gihyo.jp

人間関係あるところにマウントあり,マウンティングを制する者こそが人生を制する。

全体の三分の二はカタログ的にマウンティングの事例を集めたもの、残りは人生に基づく人生訓、といった構成である。 人はマウントしたがるものである、自分に秘めるマウント欲も否定せず、相手のマウント欲を尊重しつつコミュニケーションするとうまくいきますよ、というのが主題だろうか。 とはいえ、かなり穿ちすぎな本である。 「マウンティング枕詞」も、無意識にマウントする人には有効かもしれないが、意識して、つまりメタメッセージにマウントを織り込んで話す人々には逆にそれを見透かされる気がしてならない。 「マウンティングエクスペリエンス(MX)」の考察も雑で楽しい読み物の域を超えない。

もっとも、こういう書評めいた感想を書く行為こそ筆者からすればマウンティングである、と言われるのだろう。

岡奈津子『新版 〈賄賂〉のある暮らし』(白水社

www.hakusuisha.co.jp

ソ連崩壊後、独立して計画経済から市場経済に移行したカザフスタン。国のありかたや人びとの生活はどのような変化を遂げたのか。

市場経済化したカザフスタンの生活実態に迫った研究書。 JETROの『アジ研ワールド・トレンド』の記事をまとめ、一般の人にも読みやすくしたものである。 〈賄賂〉と括弧つきなのは、賄賂とお礼の区別が厳密に定義できないという故である。

カザフスタンという国をあまり知らなくても、そこまで興味が無くてもものすごく面白く読める本である。 何をするにも賄賂、賄賂と日本では考えにくい状況が展開される。 賄賂が横行するのは給与が低いせいだ、という言説もカザフスタンの実態の前には不十分である。 まず、仕事を得るにも賄賂が必要であり、しかもその職を維持するにも上司に上納金を送るなど、構造と賄賂が一体化しているため、単に給与を上げても解決しない。 また、仕事を得る際に賄賂を払っても、市民からわいろを受け取ればペイできる、つまりある種の投資でもある、という主張にもびっくりした。 なお、新版で追加された解説によるとカザフスタン全国民が賄賂を使っているわけではなく、旧ソ連の国々と比較するとそこまでひどい国ではないらしい。

一度絶版になった本だが、やはりちゃんとした本は復刊するのである。 手に入りやすくなったので、カザフスタン中央アジアにそこまで興味が無くても読んでみてほしい。

ループや再帰なしで100万回Hello, World!するには?Python篇

ループとイテレートの違いとは

Twitterで「ループや再帰なしで100万回Hello, World!するには?」というネタ?が少しだけ流行っていた。 Pythonの場合、forwhileを使わない、という条件となる。 とはいえ、Pythonのアンパックを使えばそこまで難しくない。

docs.python.org

今回はBillion laughs攻撃の手法を使ってほんの少しだけいい感じに書く。

ja.wikipedia.org

Pythonコード

a = "Hello World!"
b = [a, a, a, a, a, a, a, a, a, a]
c = [*b, *b, *b, *b, *b, *b, *b, *b, *b, *b]
d = [*c, *c, *c, *c, *c, *c, *c, *c, *c, *c]
e = [*d, *d, *d, *d, *d, *d, *d, *d, *d, *d]
f = [*e, *e, *e, *e, *e, *e, *e, *e, *e, *e]
g = [*f, *f, *f, *f, *f, *f, *f, *f, *f, *f]
xx = tuple(map(lambda x: print(x), g))
print(len(xx))

考察

確かに、for文やwhile文は使っていない。 また、再帰も使っていない。 しかし、アンパックする際に内部的にイテレータを使っているので、「ループを使わない」という条件を満たしているのかどうかは疑問が残る。

イテラブルオブジェクトのアンパックは注意が必要である。 今回は(10倍ずつ増える、つまり指数函数的に増大する)有限のリストだが、これを無限に続くジェネレータに対して行うと途端に破綻する。 自分が何をアンパックしているのかを気にしながら使うようにすべきである。

『Pythonプロフェッショナルプログラミング 第4版』の1章を書きました

5年振りの改訂

2024年2月16日に秀和システムから『Pythonプロフェッショナルプログラミング 第4版』が発売される。

www.shuwasystem.co.jp

今回、第1章「Pythonをはじめよう」を書いた。 書いた、と書いたものの、「Pythonをはじめよう」は初版から存在する章であり、書いたというより改訂したの方が適切である。 しかし、5年という月日の経過を感じる改訂になっている。 せっかくなので、初版から第4版までの第1章「Pythonをはじめよう」を比較してみる。

目次の変遷

初版の「Pythonをはじめよう」

www.shuwasystem.co.jp

Chapter 01 Pythonをはじめよう
01-01 Pythonのセットアップ
01-01-01 aptパッケージのインストール
01-01-02 easy_installとpip
01-01-03 virtualenvのインストール
01-01-04 複数バージョンのPythonの使用
01-02 Mercurialのセットアップ
01-02-01 Mercurialの概要
01-02-02 Mercurialのインストール
01-02-03 リポジトリの作成
01-02-04 ファイルの操作
01-03 エディタと開発に便利なツール
01-03-01 エディタ
01-03-02 Python開発Tips
01-04 まとめ

第2版の「Pythonをはじめよう」

www.shuwasystem.co.jp

Chapter 01 Pythonをはじめよう
01-01 Pythonのセットアップ
01-01-01 debパッケージのインストール
01-01-02 サードパーティ製パッケージのインストール
01-01-03 virtualenvの使い方
01-01-04 複数バージョンのPythonの使用
01-02 Mercurialのセットアップ
01-02-01 Mercurialの概要
01-02-02 Mercurialのインストール
01-02-03 リポジトリの作成
01-02-04 ファイルの操作
01-03 エディタと開発に便利なツール
01-03-01 エディタ
01-03-02 開発に便利なツール
01-04 まとめ

第3版の「Pythonをはじめよう」

www.shuwasystem.co.jp

Chapter 01 Pythonをはじめよう
01-01 Pythonのセットアップ
01-01-01 debパッケージの更新
01-01-02 Python 3.6のインストール
01-01-03 パッケージ管理ツール(pip)
01-01-04 Python仮想環境の作成(venv)
01-01-05 複数バージョンのPythonの使用
01-02 Gitのセットアップ
01-02-01 Gitの概要
01-02-02 Gitの確認
01-02-03 リポジトリーの作成
01-02-04 ファイルの操作
01-03 エディターと開発に便利なツール
01-03-01 エディター
01-03-02 開発に便利なツール
01-04 まとめ

第4版の「Pythonをはじめよう」

www.shuwasystem.co.jp

 Chapter 01 Pythonをはじめよう
  01-01 Pythonのセットアップ
   01-01-01 Dockerイメージの選択
   01-01-02 Dockerコンテナの起動
   01-01-03 パッケージ管理ツール(pip)
  01-02 Gitのセットアップ
   01-02-01 Gitの概要
   01-02-02 Gitのインストール
   01-02-03 Gitの動作確認
   01-02-04 Gitの環境設定
   01-02-05 リポジトリの作成
   01-02-06 ファイルの操作
  01-03 エディターと開発ツールのセットアップ
   01-03-01 エディター
   01-03-02 開発に便利なツール
  01-04 まとめ

変遷その1:仮想マシンからDockerへ

過去の「Pythonをはじめよう」ではVirtualBox上の仮想マシンDebianまたはUbuntuを立てて、その内部でapt乃至debPythonを導入している。 今回の第4版ではDockerイメージをベースにPythonを導入する流れを取った。 ただ単にPythonを導入するだけならばやや大げさというか、Dockerというレイヤーを加える必然性はないのだが、 この本はプログラミング言語Pythonの本ではなく、Pythonを使ってチームで開発するための本である。 Dockerで統一した開発環境を揃えるのは非常に有効である。

変遷その2:パッケージインストーラおよび仮想環境の変遷

初版ではまだeasy_installが現役であった。 僕もPythonを始めたころには既にeasy_installはpipを入れるためのツールとなっていた。 第2版まではvirtualenvを使い、第3版では標準であるvenvで仮想環境を切る流れである。 今回の第4版はDocker環境なのでvenvは使わず、コンテナ単位で環境を切っている。

変遷その3:バージョン管理

以前、僕はバージョン管理がない地獄で働いたことがあり、自分だけでGitを使っていた。 勝手な想像だが、PythonコミュニティだとMercurialを使っていた人が多く、現在でもプロジェクトによってはMercurialを使っているケースもあると思う。 第3版以降、MercurialからGitになった。 第4版も引き続きGitである。 注意深く読まないと第3版との違いがわからないが、コマンド例は最新のコマンドを使うように更新されている。

変遷その4:ツール周り

第3版ではエディタについて細かく書かれていたが、第4版では個人で好きなエディタを使えばいいでしょう、という考えから記述を削った。 お金をかけずに手早く始めるならVSCodeが一番良い選択だと思われる。 僕はPyCharmの有料版を使っているが、どこまで使いこなしているかは謎である。 ツールもBlackとRuffという組み合わせは思い切った記述であると感じている。 個人的にはRuffは時期尚早ではないか、と考えていたがそうではなかったらしい。 mypyをはじめとする型ヒント系のツールも一般化しつつある。 ツール周りの個別記事は浅めであるが、これはポインタであると理解していただきたい。 こういう便利なツールがありますよ、ということを知ってもらう程度でまずは十分である。

そして変遷は続く

Dockerの初期設定周りは「Docker init」を使うと便利になるかもしれない。

www.publickey1.jp

パッケージ管理ツールもRust製のツールが増え、その内いずれかがデファクトになるのかもしれない。

github.com

astral.sh

我々に必要なのはCargoのような言語標準のパッケージツールなのだろう。

最後に

なるべくコンパクトになるように改訂したつもりである。 『Pythonプロフェッショナルプログラミング 第4版』はPythonを使ってチームで開発するために読む本であり、Python言語そのものにはそこまで触れていない。 つまり、Python言語そのものはある程度分かっている、またはキャッチアップできる前提で書いてあるため、以下のような本で補う必要がある。 なお、いずれも僕が翻訳・監訳した本である。

www.oreilly.co.jp

www.oreilly.co.jp

www.oreilly.co.jp

Pythonプロフェッショナルプログラミング 第4版』はこれらの先に位置する本である。 チームでソフトウェアを開発する方は是非とも手に取って読んで欲しい。 少なくとも、どのように開発を進めるのかの議論のベースとなるだろう。

www.shuwasystem.co.jp