何かを書き留める何か

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

Curriculum Vitae of XaroCydeykn

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

技術書査読

2016年

2017年

2018年

2019年

外部発表

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

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

  • SymPyによる数式処理」PyCon JP 2018

SymPyで学んだことを整理するために発表した。

2019年

  • Django QuerySet アレパターン」DjangoCongress JP 2019 Lightning Talk

正しくはQuerySetではなくDjango ORMの失敗談。

ピタゴラス数と無限降下法について勉強して話した。

『Effective Python 2nd ed.』項目5:複雑な式の代わりにヘルパー関数を書く

不変でも進化する

Effective Python 2nd ed.』の続き

effectivepython.com

項目5は初版の項目4の続投であり、主張もそのままである。 Python特有の主張ではなく、どの言語でも大事にするべき項目である。

それでは何も変わっていないのか、というと、実は2版の項目4を受けて、文字列フォーマットの形式がC言語形式からフォーマット済み文字列になっている。 こういう部分にニヤリとしてしまうのである。

『Effective Python 2nd ed.』項目4:C言語形式の書式化やstr.formatではなくフォーマット済み文字列を使おう

フォーマット済み文字列は単なる糖衣構文、そう思っていた時期が僕にもありました。

Effective Python 2nd ed.』の続き

effectivepython.com

項目4は2版で新規に追加された項目で、文字列のフォーマットに関する指針について説明している。 Pythonで文字列フォーマットを行う方法として

があり、筆者は3.6で追加されたフォーマット済み文字列を推奨している。 もちろん、新しいからフォーマット済み文字列を使おうなどという安直な理由ではなく、それぞれ理由を述べているので議論できる。 printf 形式(C言語形式)は公式ドキュメントでも使わないほうがよいという旨の説明があるが、str.format() ではなくフォーマット済み文字列を使おうと踏み込んだのが筆者の主張である。

Python 3.6が登場した当時は、str.format() があるし、フォーマット済み文字列は便利だけとそんなに使わないだろうな、と思っていた。 つまり、最初は糖衣構文として捉えていた。 ところが、今ではフォーマット済み文字列しか使わないようになってしまった。 あまり手の込んだ書式化をやってこなかったので、筆者が論証しているようなケースにはまったことがそれほどないのであるが、それもフォーマット済み文字列の簡明さに助けられた結果なのかもしれない。

『Effective Python 2nd ed.』項目3:bytesとstrの違いを知ろう

Unicodeだがunicodeはない

Effective Python 2nd ed.』の続き

effectivepython.com

実質的に初版のItem 3の続投であるが、初版はPython 2の文字列であるstrunicodePython 3のbytesstrの違いを含めて説明があったが、 2版ではPython 3向けの説明に特化して更新された。 単純にPython 2向けの説明を削ったのではなく、システムのエンコーディングに関する注意が追加されている。

自分の手元のPC(Windows 10)の環境でエンコーディングを調べてみた。

> python -c "import locale; print(locale.getpreferredencoding())"
cp932

日本語圏のWindows OSのPCなのでcp932であった。

localeのドキュメントを読んで、getdefaultlocale()も試してみた。

>>> import locale
>>> locale.getpreferredencoding()
'cp932'
>>> locale.getdefaultlocale()
('ja_JP', 'cp932')

業務でも、お客さんの環境はWindowsExcelCSVファイル開くというシチュエーションは(日本だと)頻出どころか必ず遭遇する問題である。 しかもcp932にあってShift_JISにはない文字を使われるなど日常茶飯事である。 必ずしもUTF-8エンコーディングではないという現実を受け入れつつ、『Effective Python 2nd ed.』に書かれているアドバイスを実行していこう。