2019年5月17日金曜日

X11 connection uses different authentication protocol

ssh -X でログインしてXを手元に飛ばそうとしたら、どうにもうまくいかない。認証周りの問題らしいのだけど、全然わからない。 いろいろ試しているうちに、ssh に -vvvをつけたらリッチなデバッグ情報がでて、一気に解決した。
X11 connection uses different authentication protocol
これでググったところ、サーバ側に.ssh/rc があると、xauthがサーバ側で動かない、というのが 問題だったらしい。。うーんなるほどわからん。

教訓はデバッグレベルは最高にするといい、ということだな。-v とかケチケチしてはいけない。

2019年5月11日土曜日

itertools product

複数のリストの直積集合(cartesian product)を作りたい場合がある。 例えば複数の項目に対してそれぞれ選択肢がいくつかある場合に、それらを虱潰しに探索したい、というケース。 個の要な場合Pythonではitertools の product を使う。簡単。 うーん簡単。自分で実装しちゃったよ。結構面倒だったのに。
In [5]: for a, b, c in itertools.product([1,2,3], ['a', 'b', 'c'], ['x', 'y', 'z']):
   ...:     print(a, b,c)
1 a x
1 a y
1 a z
1 b x
1 b y
1 b z
1 c x
1 c y
1 c z
2 a x
2 a y
2 a z
2 b x
2 b y
2 b z
2 c x
2 c y
2 c z
3 a x
3 a y
3 a z
3 b x
3 b y
3 b z
3 c x
3 c y
3 c z

2019年5月10日金曜日

Python のClosure

Python では入れ子になった関数では外側の変数が見えるのだけど、そのままだと更新はできない。でもPython3ではnonlocalとして宣言することで更新可能になる。
>>> def genCounter():
...     c = 0
...     def inc():
...         nonlocal c
...         c += 1
...         return c
...     return inc
... 
>>> c = genCounter()
>>> c
<function genCounter.<locals>.inc at 0x10fa58598>
>>> c()
1
>>> c()
2
面倒くさい。。