今年に読んだ記事とかだいたい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

f:id:lan496:20201209014116p:plain

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()

gist.github.com

pythonスクリプト内からcommit hashを取得する

自作のパッケージを使っているとバージョニングが疎かになりがちなので、gitのcommit hashをパッケージのAPIから取得したい。 いめーじとしては、pandasのpandas.show_versionsみたいな感じ。 pandas.pydata.org

↓のポストだとgit rev-parse HEADgit 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にすればかなり速くなるようだ。

numpy.org

実際に以下のnotebookで試すと、optimizeをつけるだけでかなり速くなる(使用メモリが増えているので計算途中の配列を保存している?)。

gist.github.com

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://