hgでエラーが出てbitbucketにつながらない

mercurial + bitbucket.org で開発してたんですが、気がついたらhgがエラー吐くようになってた。

びっくりしたのがmacdebian、 raspberrypi全部で同じ現象なので、bitbucket.org側を疑ったんだけど、とりあえずmacmercurial更新してみたら直った。

SSLエラーが出たので、証明期限切れなのかもしれない(よくわかってない)

$ hg version
mercurial 3.1.2

$ hg incoming
Traceback (most recent call last):
File "/usr/bin/hg", line 43, in <module>
    mercurial.dispatch.run()
File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 28, in run
    sys.exit((dispatch(request(sys.argv[1:])) or 0) & 255)
File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 69, in dispatch
    ret = _runcatch(req)
File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 227, in _runcatch
    ui.warn(_("abort: error: %s\n") % reason)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

エンコードの問題かと思い、LANG=Cや、pythonのデフォルトエンコードutf-8にしても解決せず別エラーが発生。

$ LANG=C;hg incoming
abort: error: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:581)

pythonのデフォルトエンコードを変更。

$ python
>>> import sys
>>> sys.getdefaultencoding()
'ascii'

>>> import site
>>> site.getusersitepackages()
'/home/USERNAME/.local/lib/python2.7/site-packages'

フォルダ自体がないので作成してusercustomize.pyを作成。

参考:sitecustomize.py を使わず usercustomize.py を使おうね

mkdir -p /home/USERNAME/.local/lib/python2.7/site-packages
cd /home/USERNAME/.local/lib/python2.7/site-packages
echo -e "import sys\nsys.setdefaultencoding('utf-8') > usercustomize.py

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'

これでデフォルトエンコードutf-8になった。で試すと同じ_ssl.cでエラー。

$ hg incoming
中止: エラー: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:581)

とりあえずmacmercurialを最新版にしてみる...

$ brew update
$ brew upgrade mercurial

$ hg version
mercurial 4.8.1

$ hg incoming
(正常な反応が帰ってくる)

3.1.2 => 4.8.1 に更新で解決した。

手動で最新版を入れる

次、debianとraspberrypi。両方jessieで、パッケージリストの最新版が3.1.2だったのでapt-get install update, upgradeしても解決せず。

手動で取得して入れてみる。

$ sudo apt-get install python-dev python-docutils //パッケージ不足

$ wget http://mercurial-scm.org/release/mercurial-4.8.1.tar.gz
$ tar xvzf mercurial-4.8.1.tar.gz
$ cd mercurial-4.8.1
$ sudo make install  //sudoないとpermissonエラーが起きる
....
make 成功。

上記作業終了時点でhg実行しても謎エラーがでる。

$ hg version
Traceback (most recent call last):
File "/usr/bin/hg", line 41, in <module>
    mercurial.util.setbinary(fp)
File "/usr/local/lib/python2.7/dist-packages/hgdemandimport/demandimportpy2.py", line 151, in __getattr__
    return getattr(self._module, attr)
AttributeError: 'module' object has no attribute 'setbinary'

原因がさっぱりわからんですが、とりあえずばコンソール開き直したら直った(resetコマンドでは直らなかった)

$ hg version
mercurial 4.8.1

debian, raspberrypiからでもエラーなくbitbucket.orgへ繫がるようになって良く分かってないけど解決。

python3 import class in the package

結論から書く。

やりたかったこと、mypackage.mymodule.myclassmypackage.myclassとして呼び出したかった。

見つけたのは2通りの方法。


(1) モジュールをパッケージ名にしちゃう。

/mypackage
  __init__.py (empty)
  mymodule.py
      class myclass:
          pass

main.py
  import mypackage.mymodule as mypackage
  print(mypackage.myclass)
  >>> <class 'mypackage.mymodule.myclass'>

(2) パッケージ側で予めインポートしておく。

/mypackage
  __init__.py
      from .mymodule import myclass

  mymodule.py
      class myclass:
          pass

main.py
  import mypackage
  print(mypackage.myclass)
  >>> <class 'mypackage.mymodule.myclass'>

どっちがスマートなんだろうか?

もしパッケージ内に複数のモジュールが含まれるなら、(1)の方法は使いづらい。が、(2)のパッケージ側で予めインポートした場合、不要なものまで勝手にインポートしちゃってるかもしれん。

映画「エヴェレスト 神々の山嶺」

映画「エヴェレスト 神々の山嶺
クライマー羽生、死に際のメモ

もういいか
もういいかまだか
休むのは死ぬ時だ
休むな
生きている間は休まない
休むなんて俺は許さないぞ
おれは必ず戻る
生きて戻る
死んだらゴミだ

足が動かなければ手で歩け
手が動かなれば指でゆけ
指が動かなければ歯で雪を噛みながら歩け
歯もダメになったら目でゆけ
目で睨みながら歩け
目もダメになって本当にダメになったら
思え
ありったけの心で思え
想え

力強いお言葉。
映画自体は雑なんだよね、残念ながら。

古今googletestのインストール

昔(もう取得できません)

$ wget http://googletest.googlecode.com/files/gtest-1.7.0.zip
$ unzip gtest-1.7.0.zip

今、github

$ git clone https://github.com/google/googletest.git
$ cd googletest
~/googletest $ mkdir build
~/googletest $ cd build
~/googletest/build $ cmake ..
~/googletest/build $ make

んで、ファイルのパスも変わった。

~/googletest/gtest/include/gtest/gtest.h
~/googletest/gtest/lib/libgtest.a

~/googletest $ find ./ -nmae "*.a"
./build/googlemock/libmock.a
./build/googlemock/gtest/libgtest_main.a
./build/googlemock/gtest/libgtest.a
./build/googlemock/libgmock_main.a

~/googletest $ find ./ -name "gtest.h"
./googletest/include/gtest/gtest.h
./googletest/include/gtest/internal/custom/gtest.h

というわけでパスが以下に変わってた。

~/googletest/googletest/include/gtest/gtest.h
~/googletest/build/googlemock/gtest/libgtest.a

詳しくは下記参照。

qiita.com

MacでVisual Studio CodeでPython3

1. Visual Studio Code を入れる。

Visual Studio Codeからダウンロードしてインストールする。

2. Python用の拡張機能を入れる。

メニュー>表示>拡張機能python と入力、Python(by Don Jayamanne)をインストールする。

3. 設定

⌘,で設定を呼び出し(またはメニュー>Code>基本設定>設定)

ユーザー設定で下記を追加する。

"python.pythonPath": "python3",
"python.linting.pylintEnabled": false,

実行環境の確認したい場合は、新規ファイル作成して、下記コードを書いて⌘F5で実行しようとするとVoiceOverになる1、くっそ。 メニュー>デバッグ>デバッグなしで実行すると確認できる。

import platform
print(platform.python_version())

デバッグコンソールにバージョンが表示される(設定を追加しておくと3.6.1になる)

2.7.13

linting = lint は記述の曖昧さや揺れをチェックするツール、とりあえずはいいや。

参考

インストールから実行まで、lintも下記が詳しい。

dev.classmethod.jp


  1. macシステム環境設定>キーボード>ショートカット>アクセサビリティ>VoiceOverの入/切チェックオフで実行できるようになる

Homebrew, git, mercurial, python3

開発環境を入れてみる。 ホストはmacOS Sierra 10.12.3。

パッケージマネジャーはHomebrew。 バージョン管理は都合上2種類、今はgitが主流だね。 言語はPython3、仮想環境はとりあえずいらねえや、後回し。

Homebrew

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Xcode。入ってなくても、勝手にダウンロードしてインストールまでしてくれるぜ。

動作確認。

$ brew doctor
Your system is ready to brew.

git

brewでインストールしようと思ったら既に入っていた。

$ git --version
git version 2.11.0 (Apple Git-81)

設定する。

$ git config --global user.name "First-name"
$ git config --global user.email "hoge@hoge.com"

$ git config --global core.editor 'vim -c "set fenc=utf-8"'

$ git config --global color.diff auto
$ git config --global color.status auto
$ git config --global color.branch auto

$ git config --global core.precomposeunicode true
$ git config --local core.precomposeunicode true

$ git config --global core.quotepath false

gitの設定は下記を参考にしました。

mercurial

$ brew install mercurial
$ hg --version
Mercurial Distributed SCM (version 4.2.2)
(see https://mercurial-scm.org for more information)

Copyright (C) 2005-2017 Matt Mackall and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

設定をする(かホームフォルダに設定ファイルを作る。$HOME/.hgrc

$ hg config --edit

[ui]
username = hoge<hoge@hoge.com>
editor = vim
ignore = ~/.hgignore

次に無視ファイルも作っておく。$HOME/.hgignore

# ignore file for gcc/c++, macos, use glob syntax.
syntax: glob
*~
*.o
*.out
.DS_Store

python3

$ brew install python3

$ python3 --version
Python 3.6.1

$ pip3 --version
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)

Pythonの仮想環境はそのうちでいいや、とりあえずコード書く方を優先。 でも下記が参考になる。

qiita.com

追。virtualenvというのが良いそうな。入れ方は下記。

qiita.com

接続先の有効なピアプロセスが見つかりませんでした

VMware Fusion 8.5.7 でレジューム状態のWindows7を起動しようとしたが、「接続先の有効なピアプロセスが見つかりません」と出て起動できない。

ざっくり調べたら下記のいずれかで直るっぽい。

  1. ホストOSの再起動
  2. ゲストOSのパッケージ内からレジュームファイル(.vmss)を削除
  3. ゲストOSのパッケージ内から仮想ディスクのロックファイル(.lck)を削除

1は望み薄そうだから、2から試す。がレジュームファイルが見当たらない。3はいくつかの.lckを見つけたので削除して、起動を試みたが症状変わらず… で、ダメ元でmac自体を再起動したら直るという遠回りな日々。

参考