Python3.4(win64)用の_curses.pydをビルド
https://github.com/shive/python_curses_for_windows
ちゃんと日本語が使える _curses.pyd が欲しかったんですが、ネット上に見つけられなかったので自分でビルドしてみた。
これで tui 作り放題ですね!
昔のN88BASICを叩いてたころが懐かしくなってきたのでテキストベースのゲームが作りたい衝動にかられる。。
git gcの限度設定
リポジトリが太ってくると git gc --aggressive をやるんですがそうすると.packがかなり大きくなるので設定を入れてみた。
$ git config --global pack.windowMemory 1g $ git config --global pack.packSizeLimit 1g
この状態でgit gcやってみる。
$ du -sh .git; find .git -type f | wc -l 2.9G .git 77858 $ git gc --aggressive --prune=now ... (コーヒーブレイクしながら待つ) ... $ du -sh .git; find .git -type f | wc -l 2.0G .git 15 $ find .git -type f | xargs ls -lh | fgrep .pack -rw-rw-rw- 1 *** *** 916M 7月 6 **:** .git/objects/pack/pack-6430d4f13f444f3b1e001169af98fccaf7f02154.pack -rw-rw-rw- 1 *** *** 1022M 7月 6 **:** .git/objects/pack/pack-f05baf59a54e65675a29e58b675dc63cf2e551b9.pack
小分けにされました。
gnupack-13.00に更新したときのメモ
gnupackが更新されたので追従してみた。いつもありがとうございます。
http://d.hatena.ne.jp/ksugita0510/20150502/p1
gnupack-13.00の準備
いつものようにcygwinのpythonを削除。普段はwindowsのpythonを使っている。
$ apt-cyg remove python
curl,git-svnがデフォルトだと入っていないのでinstall
$ apt-cyg install curl git-svn
elpy導入
事前にpythonにelpy,jedi,rope-py3kを導入。emacsにelpyパッケージをインストール。
init.elに下記を追記。
(setq elpy-modules '(elpy-module-company elpy-module-eldoc elpy-module-pyvenv elpy-module-yasnippet elpy-module-sane-defaults)) (setq elpy-rpc-backend "jedi") (setq elpy-rpc-python-command "/home/bin/python") ;; 俺のpython.exe (elpy-enable)
elpy-modulesはflymakeとhighlight-indentationは別のを使ってるのでそれ以外に絞る。
elpy-rpc-backendは明示的に"jedi"にした。デフォルトでもjediになってるような気がした。
elpy入れたらpython-modeあんまり意味無いように思えたので前まで使っていたpython-modeは削除。
python-modeでinternal-shellが起動してしまうとディレクトリが開けなくなる
謎。そもそもデフォルトのpython.elだけだとinternal-shellは起動されないので調べていくと、
semanticをrequireしただけで自動的にsetupで混入される模様。setupを無効な関数に置き換え。
(defun wisent-python-default-setup () nil)
相変わらずauto-revert-modeを有効にすると起動後1回だけ異常に待たされる。
1分近く完全に固まる。emacs24.5でも同じでした。前のgnupack-12.03はemacs24.4。これはローカルの問題なのだろうか…。
追記 cygwin/emacs と windows-python/elpy はパス形式が違うため正常に動作しない
site-packages/elpy-1.8.0-py3.4.egg/elpy/rpc.pyを下記のように書き換え。
@@ -10,6 +10,7 @@ import json import sys import traceback +import subprocess class JSONRPCServer(object): @@ -77,6 +78,14 @@ self.stdout.write(json.dumps(kwargs) + "\n") self.stdout.flush() + # >>> for cygwin >>> + @classmethod + def convert_filename(cls, filename): + if filename.startswith('/') and ('\n' not in filename): + filename = subprocess.getoutput(['cygpath', '-wa', filename]) + return filename + # <<< for cygwin <<< + def handle_request(self): """Handle a single JSON-RPC request. @@ -94,6 +103,23 @@ method_name = request['method'] request_id = request.get('id', None) params = request.get('params') or [] + + # >>> for cygwin >>> + for pos, value in enumerate(params): + if isinstance(value, dict): + if 'filename' in value: + value['filename'] = self.convert_filename(value['filename']) + if 'project_root' in value: + value['project_root'] = self.convert_filename(value['project_root']) + elif isinstance(value, str): + params[pos] = self.convert_filename(value) + # <<< for cygwin <<< + try: method = getattr(self, "rpc_" + method_name, None) if method is not None:
かなり適当ですが、これでelpy-refactorも呼べる。
前からemacs側でwindows-path.elを導入してあるので、もしかしたらどこかでそれも必要かも?
http://www.emacswiki.org/emacs/windows-path.el
WindowsでOpenEXR-2.2.0をビルド
cmake-3.2.2
VisualStudio2013
# Makefile DEST_DIR := $(shell cygpath -ma libs) DEVENV := "$(shell cygpath -ua "$(VS120COMNTOOLS)/../IDE/devenv.exe")" CMAKE := "$(shell cygpath -ua "$(PROGRAMFILES)/CMake/bin/cmake.exe")" CMAKE_TARGET := 'Visual Studio 12 Win64' all: $(MAKE) zlib $(MAKE) ilmbase $(MAKE) openexr download: curl -L \ -O http://zlib.net/zlib-1.2.8.tar.gz \ -O http://download.savannah.nongnu.org/releases/openexr/ilmbase-2.2.0.tar.gz \ -O http://download.savannah.nongnu.org/releases/openexr/openexr-2.2.0.tar.gz clean: $(RM) -fr */ zlib: $(RM) -fr zlib-1.2.8/ /bin/tar xvf zlib-1.2.8.tar.gz /bin/mkdir -p build $(RM) -f build/CMakeCache.txt cd build; $(CMAKE) -G $(CMAKE_TARGET) '-DCMAKE_INSTALL_PREFIX=$(DEST_DIR)' ../zlib-1.2.8 $(DEVENV) build/zlib.sln /out build/zlib_build.log /build "Release" /project "INSTALL" ilmbase: $(RM) -fr ilmbase-2.2.0/ /bin/tar xvf ilmbase-2.2.0.tar.gz /bin/mkdir -p build $(RM) -f build/CMakeCache.txt cd build; $(CMAKE) -G $(CMAKE_TARGET) '-DCMAKE_INSTALL_PREFIX=$(DEST_DIR)' ../ilmbase-2.2.0 $(DEVENV) build/ilmbase.sln /out build/ilmbase_build.log /build "Release" /project "INSTALL" /bin/cp -f $(DEST_DIR)/lib/*.dll $(DEST_DIR)/bin/ openexr: $(RM) -fr openexr-2.2.0/ /bin/tar xvf openexr-2.2.0.tar.gz /bin/mkdir -p build $(RM) -f build/CMakeCache.txt cd build; $(CMAKE) -G $(CMAKE_TARGET) '-DCMAKE_INSTALL_PREFIX=$(DEST_DIR)' \ '-DZLIB_ROOT=$(DEST_DIR)' '-DILMBASE_PACKAGE_PREFIX=$(DEST_DIR)' \ ../openexr-2.2.0 PATH="$$(cygpath -ua libs/bin):$$PATH" \ $(DEVENV) build/openexr.sln /out build/openexr_build.log /build "Release" /project "INSTALL" /bin/cp -f $(DEST_DIR)/lib/*.dll $(DEST_DIR)/bin/
$ make download $ make
これでmakeすればlibsフォルダ以下にzlib/ilmbase/openexrが出来上がる。
Windowsの資格マネージャからパスワードを拾う
以下のコードで取れた。あとはTargetNameでマッチングしてやれば目的のパスワードが拾えそう。
# Python3.4.2(x64) import sys from ctypes import * class CREDENTIAL(Structure): _fields_ = [('Flags', c_uint), ('Type', c_uint), ('TargetName', c_wchar_p), ('Comment', c_wchar_p), ('LastWritten', c_ulonglong), ('CredentialBlobSize', c_uint), ('CredentialBlob', c_wchar_p), ('Persist', c_uint), ('AttributeCount', c_uint), ('Attributes', c_void_p), ('TargetAlias', c_wchar_p), ('UserName', c_wchar_p)] count = c_uint() creds = POINTER(POINTER(CREDENTIAL))() if not windll.advapi32.CredEnumerateW(None, 0, byref(count), byref(creds)): sys.exit(-1) for Li in range(count.value): cred = creds[Li].contents print('CREDENTIAL[{}]:'.format(Li)) print(' TargetName:', cred.TargetName) print(' Comment:', cred.Comment) print(' UserName:', cred.UserName) print(' Password:', cred.CredentialBlob) windll.advapi32.CredFree(creds)
参考
- git-credential-wincredの実装 https://github.com/msysgit/git/blob/master/contrib/credential/wincred/git-credential-wincred.c
git filter-branch
履歴からファイルを消してリポジトリを軽量化する。
まず関係者全員にpushしてローカルのリポジトリを削除してもらう。
$ git filter-branch -f --prune-empty --index-filter 'git rm -fr --ignore-unmatch data/backup/' -- 51ee5a93ac..HEAD $ git show-ref (orignalなんたらってrefが出来ているはず) $ git update-ref -d original/なんたら $ git push -f origin master
後は全員でリポジトリをクローンしなおす。
そうしないとpullでマージされてpushしたら折角消したものが復活してしまう。
cygwinでwincred
http://d.hatena.ne.jp/shive/20141024/1414112031
最近gitをcygwin版に変更しました。そしたらwincredが使えなくなってしまった。
msysgitからlibexec/git-core/git-credential-wincred.exeをcygwin側の同じところにコピーしたら使えました。
快適 git-2.1 生活。msysgit-1.9よりcygwinの方が速いような気がする。
先日TortoiseGITも試験的にcygwin/git対応を始めたようです。
https://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html
概ね良好ですが、うっかりmsysgitでgit stするとインデクスが書き換わる?ようで全ファイル変更行なしなのに変更扱いになってしまうので、やるなら完全移行が必要かもしれません。
cygwin→msysの問題なのかgit-1.9→git-2.1の問題なのかわかりませんが…。
追記
TortoiseGIT、ブランチ一覧を取るのに失敗する…。ログウィンドウからブランチが切り替えられない。