Archive for 常用工具

写的dht协议搜索的程序,这几天优化了一下发现速度确实快了好多。但是出现了一个新的问题,内存直接飙升,我开了十个爬虫占用内存800m。开始我以为是节点太多了,找了几个小问题修改一下,发现没用。后来就到网上查找python内存分析的工具,查了一点资料发现python有个meliae库操作非常方便,就使用分析了一下,发现不是节点太多的原因0 0,是保存发送的t_id,用来标示返回的消息是那个发出的一个字典过大了。 从分析的结果非常容易的定位了某个对象的数量和大小,非常容易分析。我开始以为是因为好多发送查询信息以后,对面没返回造成这个字典里的元素没有释放造成的,我就用过期时间判断了一下,进行过期删除。发现是小了,但是不是非常显著,好像少了几十不到100M。后来又减少了查找一个随机hash的时间,以前是1分钟查一次,我改成了就第一次查!,发现没减少0 0.不知道是啥的原因。应该就是查找hash,询问节点,然后返回然后询问里边的节点,最后数量越来越多,但是我不明白的是,怎么会这么多运行一分钟就有60万条。也就是说当时内存没释放的对象就有这么多。达到这个内存占用后,基本就不再变化,有很小很慢的提升,因为还开的其他程序,不确定是不是这些程序其他对象的增加造成的。等分阶段dump测试一下。 安装直接pip install meliae 就ok了,我看好久没更新的项目了,不知道还有没有好的替代品不过用着还不错。 将内存dump到文件

	from meliae import scanner
	scanner.dump_all_objects('/tmp/dump%s.txt' % time.time())
分析文件:
	from meliae import loader
	#加载dump文件
	om = loader.load('/opt/log/dump.txt')
	#计算各Objects的引用关系
	om.compute_parents()
	#去掉各对象Instance的_dict_属性
	om.collapse_instance_dicts()
	#分析内存占用情况
	om.summarize()
字段意义如下: Index : 行索引号 Count : 该类型的对象总数 %(Count) : 该类型的对象总数 占 所有类型的对象总数 的百分比 Size : 该类型的对象总字节数 %(Size) : 该类型的对象总字节数 占 所有类型的对象总字节数 的百分比 Cum : 累积行索引后的%(Size) Max : 该类型的对象中,最大者的字节数 Kind : 类型 分析某个对象,找出它的引用关系
	#得到所有的POP3ClientProtocol对象
	p = om.get_all('POP3ClientProtocol')
	#查看第一个对象
	p[0]
	#可以查看该对象的所有引用
	p[0].c
	#查看谁引用了这个对象
	p[0].p

Continue

sbcl的终端交互模式,不支持方向键,终端的快捷键也不支持,输入程序简直但疼的要命,然后想找一个好点的。下午玩玩学学,搞了一下午。 最终敲定的方案:vim+slimv.vim。http://www.vim.org/scripts/script.php?script_id=2531装一个小插件就行了。这个是仿的emacs+slime的。 这个也是一个方案,但是对emacs的快捷键不熟悉,也不想学。话说写lisp代码好像要用emacs。。。觉得还是小小的研究一下 还有一个是rlwrap,开始也是想找一个类似ipython一样的。找到:http://stackoverflow.com/questions/11109249/how-to-customize-the-sbcl-repl rlwrap sbcl就行了。 网速不给力,也没有下载成功。 基本的命令 配置什么的可以找安装的文档。这里有教程:http://kovisoft.bitbucket.org/tutorial.html 还是很好的一个插件!

Continue

今天在master下改了代码,又想新建一个分支。git flow init命令的时候提示:fatal: Working tree contains unstaged changes. Aborting. 然后搜索找到好的解决方法。 git stash命令 先git stash 将修改的代码备份,然后创建分支,切换到新分支,然后 git stash pop 就可以了 一下内容来自http://www.cppblog.com/deercoder/archive/2011/11/13/160007.html git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。 git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。 git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。 git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。 关于Git Stash的详细解释,适用场合,这里做一个说明: 使用git的时候,我们往往使用branch解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码 commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用'git stash'就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修 Bug,等到修完Bug,提交到服务器上后,再使用'git stash apply'将以前一半的工作应用回来。也许有的人会说,那我可不可以多次将未提交的代码压入到栈中?答案是可以的。当你多次使用'git stash'命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑,'git stash list'命令可以将当前的Git栈信息打印出来,你只需要将找到对应的版本号,例如使用'git stash apply stash@{1}'就可以将你指定版本号为stash@{1}的工作取出来,当你将所有的栈都应用回来的时候,可以使用'git stash clear'来将栈清空。 在这里顺便提下git format-patch -n , n是具体某个数字, 例如 'git format-patch -1' 这时便会根据log生成一个对应的补丁,如果 'git format-patch -2' 那么便会生成2个补丁,当然前提是你的log上有至少有两个记录。

Continue

查看基本配置信息:git config --list 初始化:git flow init 创建了两个分支,查看: git branch 创建开发分支:git flow feature start agents_test 查看:git branch push 一个 feature branch 到远端:


git flow feature publish agents_test
或 git push origin feature/agents_test

更新
git pull origin feature/agents_test
从远端 branch: git flow feature track agents_test 或 git checkout -b agents_test -t origin/feature/agents_test 合并到 git flow feature finish agents_test

参考:
http://ihower.tw/blog/archives/5140
以下来自:
http://www.starming.com/index.php?action=plugin&v=wave&tpl=union&ac=viewgrouppost&gid=33263&tid=19584
开始使用git-flow

$ git flow init

新建过程中会为你的各种branch类型起一个名字,推荐使用默认。

master branch

该branch永远处于 production-ready的状态,用于发布,并作为长期分支一直保留,所有产品正式发布出去的内容都来源于该分支,对于每次发布还应有其相对应的tag。

develop branch

一直存在于branch中。

feature-* branch

当有一个新的功能进行开发时,推荐将开发过程放在一个新建的feature分支里。该分支从develop中建立,开发过程中可以共享给团队其它成员,也可以从服务器取到其它成员的feature branch。在功能完成时,将其合并回develop分支并册除该分支。
  • git flow feature [list] [-v] 列出所有的features
  • git flow feature start [-F] <name> [<base>] # 开始一个新的特性分支
    • -F fetch from $ORIGIN before performing local operation
  • git flow feature finish [-rFk] <name|nameprefix> # 结束分支
    • -F fetch from $ORIGIN before performing finish # 在新建之前,先从$ORIGIN获取最新代码。
    • -r rebase instead of merge #使用 rebase 代替默认的 merge,只生成一次commit 记录。
    • -k keep branch after performing finish # 在完成之后仍保留该分支,默认会删除。
  • git flow feature publish <name> # 将该branch发布到origin上与其他人共享。
  • git flow feature track <name> # 从$ORIGIN上获取一个他人共享过的branch,并在本地创建。
  • git flow feature diff [<name|nameprefix>] # feature branch和develop之间所有的差异。
  • git flow feature rebase [-i] [<name|nameprefix>] ?
  • git flow feature checkout [<name|nameprefix>] # 从任一branch切换到指定feature分支
  • git flow feature pull <remote> [<name>] # 获取服务器其它成员的该分支提交。
release branch 在做产品发布时创建的分支类型,在这个分支上做一些配置管理的工作,比如说更改软件版本号之类的。需要注意的是release分支应该从develop分支出来,并且发布结束需要合并回develop和master分支。
  • git flow release [list] [-v] # 列出所有的release分支信息
  • git flow release start [-F] <version> # 新建一个名为<version>的release分支(这里建议使用版本号作为branch名,结束时使用该名字为代码打上tag),新的分支名为release/version.
    • -F fetch from $ORIGIN before performing local operation Start new release named <version>
  • git flow release finish [-Fsumpkn] <version> # 完成该version 的release branch
    • -F fetch from $ORIGIN before performing finish # 在新建之前,先从$ORIGIN获取最新代码。
    • -s sign the release tag cryptographically
    • -u use the given GPG-key for the digital signature (implies -s)
    • -m use the given tag message
    • -p push to $ORIGIN after performing finish # 结束后将代码push到 $ORIGIN
    • -k keep branch after performing finish
    • -n don’t tag this release # 结束时不用给代码打上version的tag
  • git flow release publish <name> # 在$ORIGIN上共享该release 分支
  • git flow release track <name> # 从$ORIGIN上获取一个已被共享的release 分支。
hotfix-* branch 当发布出去的版本有继续fix的问题时,使用hotfix分支类型进行问题修复。需要注意的是hotfix分支应该从master分支出来,并且fix结束需要合并回develop和master分支。
  • git flow hotfix [list] [-v] # 列出所有的hotfix分支
  • git flow hotfix start [-F] <version> [<base>] # 新建一个名为<version>的hotfix分支,分支全名为hotfix/version,可通过参数来选择是基于base而非默认的master。
    • -F fetch from $ORIGIN before performing local operation
  • git flow hotfix finish [-Fsumpkn] <version> # 完成一个hotfix分支
    • -F fetch from $ORIGIN before performing finish
    • -s sign the release tag cryptographically
    • -u use the given GPG-key for the digital signature (implies -s)
    • -m use the given tag message
    • -p push to $ORIGIN after performing finish
    • -k keep branch after performing finish
    • -n don’t tag this release # 不为该branch打上tag

Continue

1.配置文件从windows\下复制换行不一致,报错:E492: 不是编辑器的命令: ^M解决 用vim打开配置文件 :set ff=unix :w 搞定 2.** (gvim:20320): WARNING **: Unable to create Ubuntu Menu Proxy: Timeout was reached 编辑~/.bashrc,添加

function gvim () { (/usr/bin/gvim -f "$@" &) },重启终端。

Continue

又装了一个vim小插件,发现以前装过好多,很多也不用。所以把一切装过的都删掉了,重新安装vim,准备写下来传到github上。 1.先装管理插件的vundle。 以前用的pathogen,没有vundle方便。需要安装git,并添加"安装目录/bin"到path环境变量里。用到git里带的curl。 在目录~/.vim (linux) ~\vimfiles(Windows)下创建文件夹\bundle\vundle,复制vundle到该文件夹下。配置文件添加内容来自官网教程。写插件名称的时候注意大小写,不然安装会失败。 2.pydiction。把python_pydiction.vim放到 vim\vimfiles\ftplugin目录下,其他文件放到Vim/vimfiles/ftplugin/pydiction/目录下。 3.ctags。以前好像放到system目录下了,我直接在命令行输出ctags有提示,环境变量也没有修改。 4.taglist,tagbar。启动命令:TlistToggle,tagbar从网上看到介绍,不是太习惯。 5.bufexplorerwinmanager。在BufExplorer窗口中使用”CTRL-N“可以切换到FileExplorer窗口。 6.flake8, vim-flake8,syntastic。语法检测的,以前没有用过。把Python27\Scripts目录添加到环境变量path里了,这样方便一些脚本的调用。 整整折腾了一上午,在Windows下配置的,还缺少一个调试的功能。先把_vimrc文件传到博客。linux版vimrc。  

http://vim.sourceforge.net/scripts/script.php?script_id=850pydic

Continue

参与gopkg项目中去,准备学习一下xml包。 1、先到这个项目中,点击fork按钮。地址:https://github.com/astaxie/gopkg 2、代码下载到本地:$ git clone https://github.com/0x55aa/gopkg.git 3、给项目命名:cd gopkg $ git remote add upstream https://github.com/astaxie/gopkg 4、从原项目更新:$ git fetch upstream 5、提交修改到项目:git push origin master 6、手动点击pull request,查看修改是否正确,填写内容,提交。 很小心,提交通过成功。顺便熟悉了markdown语法。  

Continue

回家在Windows下又装上vim,打开以前用Sublime Text写的代码中 中文注释都乱码了。群里问是编码问题,网上找到修改方法: 在_vimrc的最前面加入下面二行。

let &termencoding=&encoding set fileencodings=utf-8,gbk,ucs-bom,cp936
记的保存哦,然后在用Vim打开看看,UTF8和GB2312都没有问题。

Continue

官网:http://www.sublimetext.com/,文档:http://www.sublimetext.com/docs/2/index.html。早就听说的编辑器,今天心血来潮下载看看。win下的界面比win下的vim界面满意很多,非常好看,也不需要配置字体啥的,默认的就不错。还没有看文档,看了首页介绍的编辑器特色。 1.跳转。 Ctrl+P,可以文档直接跳转,也可以文档内跳转。Ctrl+P打开输入框,输入文件名就会跳转文档,可以自动识别文件明,比如符号,大小写的间隔。可以上下选择。 @可以跳转类、函数名啥的,可以直接ctrl+r;#搜索单词的,:是跳转到行ctrl+g。(这些在菜单栏都有提示) 符号和文档的选择可以结合使用,比如:tp:100。 2.命令选择 Ctrl+Shift+P,官方首页有个动态图片的例子,改变现实语法的,变成python的,只需要sspy回车就好了,有提示只要输入第一个字母就行了。 3.分屏 alt+shift+1,2,3,4, 4.多选择 Ctrl+D选择光标所在的下一个单词,接着按会选择下一个出现的这个单词。 ctrl+L选择一行 Alt + Shift + <arrow>选择 Ctrl + Alt + Up Ctrl + Alt + Down 你可以直接打开一个文件夹,将搜索整个文件夹里的文档。  

Continue

firefox更新通道分为:release ,beta, aurora,三个版本可以分别看作是正式版、测试版、内部不稳定版本。 今天firefox刚更新,就关注了一下版本。想用测试版体验新感觉(汗~)。 修改方法: c:\Program Files (x86)\Mozilla Firefox\defaults\pref\ ,找到channel-prefs.js文件,修改为pref(“app.update.channel”, “beta”);。 不知道为什么下面的方法不行。。。 输入:about:config,然后在搜索地方输入:app.update.channel,双击修改release为beta,就搞定了。

Continue