今年に読んだ記事とかだいたい2020
年末だしPocketでクリップした記事の中で面白かったものを見返した。あと今年聴いた曲も振り返った。
invenia.github.io scheme手習いを読んでいてYコンビネータで詰まったので読んだ。
arxiv.org JAXを使った分子動力学法のナウい実装。JAXを使うために粒子の隣接リストも関数型っぽく書かなきゃいけないのがしんどそうだった。
www.youtube.com www.youtube.com Lex Fridmanのポッドキャストは胡散臭い回もあるけど↑の2つは面白かった。
yksn25.hatenablog.com nomolk.hatenablog.com dtdwtd.hatenablog.com xcloche.hateblo.jp baku89.com Titans of Tech Testify in Their Trust-Me Suits - The New York Timeswww.nytimes.com
Myd
open.spotify.com Washed out のmixで知った。曲は好きだけどアートワークは下品で好みでない
電気グルーヴ
open.spotify.com 配信再開おめでとう。ハロー! ミスターモンキーマジックオーケストラが多分サンプリング元の版権の関係で聴けないのが残念。
What Kinda Music - Tom Misch
open.spotify.com Tom Misch といえばお気楽なイメージがあったが印象が変わった。Yussef Dayes という好きなドラマーが参加している。
Vulfpeck
www.youtube.com www.youtube.com
Cory Henry
www.youtube.com open.spotify.com 今年は聴く曲がファンクに寄っていった。
High Heart - Ben Wendel
open.spotify.com 前のアルバムのThe Seasonsも好きだった。散歩しながら聴くのに丁度いい。
NGLViewで結晶構造をJupyterLab上で表示する
nglviewを使うとASEのAtoms(とpymatgenのStructure)をjupyterlab上で可視化できるのだが、nglviewはドキュメントが少なくてどうやればユニットセルを表示できるのか謎だった。
pyironで同じことをしようとしているコードをさっき見つけたので、それを参考にいい感じにpymatgenのStructureオブジェクトを表示するスクリプト↓を書いてみた。 構造が変になっていないかサクッと確認できるようになったのでとりあえず満足。
Visualize pymatgen's structure with NGLView · GitHub
numbaでscipy.specialの関数をつかう
numbaでscipy.special
の関数を使うには、現状自分で拡張を書く必要がある。
support for scipy.special functions : feature request · Issue #3086 · numba/numba · GitHub
↓のノートブックでは球面調和関数用のAPIを作っている。 球面調和関数の返り値は複素数で、関数の返り値がcomplexの場合は実装がnumbaだけで閉じなくて難しいらしい。 ただ今の場合、陪ルジャンドル多項式(これは実)さえ求まればそこから球面調和関数も出せるので、上のissueで示されている方法に従えばよい。
pymatgenでDOSとCOHPをプロット
さくっとプロットするには便利だがmatplotlib.pyploy.Axes
を使ってくれないので細かい調整をするのは難しそう。
細かい調整をしたかったらplt.gcf()
からaxesを取得すればいい。
# plotter: DosPlotter
plotter.get_plot()
fig = plt.gcf()
axes = fig.get_axes()
pythonスクリプト内からcommit hashを取得する
自作のパッケージを使っているとバージョニングが疎かになりがちなので、gitのcommit hashをパッケージのAPIから取得したい。
いめーじとしては、pandasのpandas.show_versions
みたいな感じ。
pandas.pydata.org
↓のポストだとgit rev-parse HEAD
かgit describe --always
を使えばいいようだ。
stackoverflow.com
とりあえず以下のようなコードを書いて使ってみる。
__version__ = "0.3.2" import os import subprocess # e.g. return 'b3a73ed' def get_git_commit_hash() -> str: cwd = os.path.dirname(os.path.abspath(__file__)) out = subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD'], cwd=cwd) return out.strip().decode('ascii') # e.g. return '0.3.2+b3a73ed' def get_version() -> str: out = __version__ + '+' + get_git_commit_hash() return out
numpy.einsumはそこそこ速い
np.einsum
は配列の次元が大きくなるとnp.dotとかnp.tensordotよりかなり遅くなるような気がしていた。
しかし、公式ドキュメントによるとoptimize
フラグをgreedyかoptimalにすればかなり速くなるようだ。
実際に以下のnotebookで試すと、optimizeをつけるだけでかなり速くなる(使用メモリが増えているので計算途中の配列を保存している?)。
git protocolがタイムアウトする
forkしてきたレポジトリのpre-commitを走らせようとすると以下のようなエラーでてタイムアウトした。
$ pre-commit run [INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks. [INFO] Initializing environment for git://github.com/pre-commit/mirrors-yapf. An unexpected error has occurred: CalledProcessError: Command: ('/usr/bin/git', 'fetch', 'origin', '--tags') Return code: 128 Expected return code: 0 Output: (none) Errors: fatal: unable to connect to github.com: github.com[0: 13.114.40.48]: errno=Connection timed out
↓の解答に従って調べると、git protocolのポートが開いていなかった。 stackoverflow.com
$ nmap github.com -p http,git Starting Nmap 7.60 ( https://nmap.org ) at 2020-04-29 01:10 UTC Nmap scan report for github.com (52.192.72.89) Host is up (0.011s latency). rDNS record for 52.192.72.89: ec2-52-192-72-89.ap-northeast-1.compute.amazonaws.com PORT STATE SERVICE 80/tcp open http 8008/tcp filtered http 9418/tcp filtered git Nmap done: 1 IP address (1 host up) scanned in 1.33 seconds
git config をいじってhttp protocolを使うようにして解決
git config --global url."https://".insteadOf git://