显示标签为“tips”的博文。显示所有博文
显示标签为“tips”的博文。显示所有博文

2009年3月30日星期一

用Endnote进行资源管理心得

 

Endnote是一个优秀的文献管理软件。经过一段时间的试用,我逐步建立一个用Endnote的文献资源管理流程。本文主要介绍Endnote中的一些基本类型,与我使用Endnote的一些技巧。


Endnote提供了许多的文献类型,从使用角度上,我觉得可分为如下几类:

  • 学术:这是Endnote最主要的功能,即管理科学文献。

    • Journal Article:学术期刊论文
    • Conference Proceeding:学术会议论文集中的论文
    • Conference Paper:学术会议论文:其与Conference Processin的区别在于其主要指未发表或未收入论文集中的论文
    • Book:出版的书籍
    • Thesis:学位论文
    • Report:学术报告

    学术文献主要可通过一些国内外的学术数据库进行查找,然后通过对应的Filter(过滤器)导入到Endnote中。

  • 书籍:主要是建立自己的图书馆。

    • Book:图书
    • Electronic Book:电子图书
    • Edited Book:其与Book的区别在于其是某个书系中的由多个编辑制作的书

    对于外文图书信息的录入,可利用Endnote的Remote Library Search 方式在国外图书馆中进行搜索,我常用的是Yale与MIT的图书馆,其藏书量大且连接速度快。在搜索时尽量利用搜索式缩小范围,否则会下载许多图书条目而浪费流量。对于国内图书,则只能在国家的OPAC中进行检索,或是到本地图书馆OPAC中进行检索。一般这些系统都不提供Endnote远程接口,一些有MARC条目输入。可根据MARC条目自己编写Filter,但比较麻烦。还一种方法是利用Google Scholar Search进行搜索,然后用其BibTeX输出,再导入到Endnote中。

  • 工作:建立面向工作的参考文献集。

    • Govenment Document:政府文档,也可将单位的主要文档存放其中
    • Grant:授权书
    • Encyclopedia:百科全书
    • Directory:字典,一些工程手册也放在这个类别中
    • Legal Rule/Regulation:规则条例
    • Patent:专利,有时也将项目说明书等文档放入其中
    • Catalog:目录,主要是一些汇总文件集
    • Standard:标准,以及一些常用参考手册

    这些文献应单独放在一个库中,这样利于快速浏览。

  • 网络收藏:用Endnote来管理自己浏览与下载的网络资源

    • Blog:博客文章,用PDF打印
    • Web Page:网页,用抓屏软件存储为JPG格式。
    • Computer Program:优秀的软件与源代码等。
    • Electronic Article:下载的电子文档
    • Online Multimedia:下载一些小视频或动画等,并且将下载的图片等也放入其中

    • 定期清理迅雷/FlashGet等下载目录,将有用的信息放入Endnote库。

  • 个人:建立自己个人文档的数据库

    • Personal Communication:一些个人交流信息,如Email,MSN/QQ的聊天记录等
    • Film or Broadcast:看过的电影等信息,就是将豆瓣的本地化
    • Case:项目,主要用来管理一些个人项目




Endnote的使用技巧:

  • 不要将所有的文献都放入一个Endnote库中,而要建立多个库,比如 BookLibrary,WebArticleLibrary等,这样可以设置每个库的默认文献类型,利于进行输入。而且由于库比较小,在打开时比较快。Endnote有导入Endnote库文件的功能,故可定期(如半年/一年)将文献库进行合并(注意Endnote在导入文献库时并不将文献条目上附加的文件一并导入)。

  • 应充分利用 Research Note 字段,而且利用(0-5)分来给每个文献进行打分,如"5.详细介绍了Omega函数的应用"这样的短小笔记,如果是比较长的笔记,则应存入Text文档中,然后将该文件Attach到该条目上

  • 将Keyword作为Tag来进行管理,每个关键词用分号来分隔

Posted by Picasa

2009年1月30日星期五

MonkeyGTD 3 的网络升级方法

MonkeyGTD 3 支持网络升级。其方法是:
1.先备份现有的MonkeyGTD3
2.点击页眉右上角的"backstage",打开页眉主菜单
3.点击"import"
4.将"http://monkygtd.tiddlyspot.com/upgrade.html"填入"URL or Pathname"文本框中
5.点击"open"按钮,开始网络升级
6.在下载的tiddlers列表首部,选中表格首行的选中框,这样可以选中所有的tiddlers
7.在该列表下面有两个选择框,都不要选中(很重要!)
8.点击"Ok"按钮,重新修改所有的tiddlers,这样就完成了升级
9.升级后realms会默认不选中,所以要选取realms,这样方能显示以往的GTD信息
10.保存当前的MonkeyGTD 3

2008年8月24日星期日

给MonkeyGTD初学者的信

你好:
首先,你要知道GTD的基本知识。
GTD是用来管理日常事务的一种工作方法。而MonkeyGTD则是一种帮助你实现GTD的软件。其实存在许多的GTD软件,而且许多人也采用Gmail、Outlook等常用工具来实现GTD。而我则是将MonkeyGTD与纸笔结合来使用的。GTD的宗旨在于提高工作效率,对于究竟采用某种工具并不是很重要的。最重要的是工具要能符合你目前的工作需要脱离目前的工作需求而单纯的学习GTD软件是不会成功的。毕竟它不是Word、也不是Java。
如何确定自己的工作需求呢?先准备一张大白纸和几种颜色的笔,然后将你所能想到的要做的工作写下来(用色笔标注其不同的优先等级),然后用线段将其中有关联的工作联起来。比如:"整理办公桌""将文件夹中的下载歌曲整理""刻录工作日常文件"等。当你完成这步后,你就可以开始使用MonkeyGTD了。
打开MonkeyGTD,先创建一个Project(项目),然后在项目中建立一些Action(行动)。比如"工作文档的整理"项目中就可以将上面的"刻录工作日常文件"作为一个Action。在GTD中Action是有优先次序的,如"Next(立即要做)""WaitFor(等待某人或某事发生时做""Future(暂时不急日后再做)",将不同的Action标识上不同的优先级。MonkeyGTD会自动将不同的Project中的"Next"工作组合给你看。这样你要做的事情就清晰了。
注意GTD是手段,一定要循序渐进,创建适合自己的GTD,提高生活质量是最重要的。

2008年8月3日星期日

用dot绘制有向图

Dot 是 Graphviz 套件中的一个重要工具,其可以方便地绘制有向图。
有向图是计算机科学中重要的表述手段,常见的 流程图 就是一种有向图。

Dot采用一种很简单的语言来描述有向图中的Node(节点)和Edge(边)。

在使用Dot前,应先浏览 Graphviz 安装目录下的 share/graphviz/doc/pdf/
下的 dotguide.pdf 文件,其中
P5 一个很好的样例,描述了Dot的基本使用方法,涵盖大多数 有向图 绘制
P10 Node(节点)的属性设置表
P11 Edge(边)的属性设置表
P12 Graph(图)的属性设置表,上述三张表可以打印出来作为常用参考
P26 介绍 subgraph 的使用样例,其可以更好地简化和复用
P38 Node(节点)的样式
P39 Arrow Head (边箭头)的样式
P40 Color(颜色)名称目录

在看完上述使用手册后,可以编写一个简单的样例代码试用一下 dot 命令。

dot 命令的详细手册在 dot.pdf 中

建议:
(1)在Windows平台下不要采用dot后缀,其和Word的DocumentTemplate相冲突,会自动打开Word而不是Dot命令,所以采用 dotg 后缀。
(2)如果要在图中采用中文,则要将文本存储为UTF-8格式,并且按照下面的方式来定义节点或者边中的文本字体

node[shape="box",fontname="simyou.ttf",fontsize="10"];


对于有向图,Graphviz套件中还有其它几个工具,都可以使用相同的Dot语言来描述,其生成的图按照不同的算法,呈现的形式有所不同,以适用不同的表述需求。

比如建立一个sample.dotg源代码文件后,可通过下面的批处理来生成多个有向图进行比较


dot -Tpng sample.dotg -o sample.dot.png
neato -Tpng sample.dotg -o sample.neato.png
twopi -Tpng sample.dotg -o sample.twopi.png
circo -Tpng sample.dotg -o sample.circo.png
fdp -Tpng sample.dotg -o sample.fdp.png

2008年7月29日星期二

Windows平台下gVim中的Grep工具的使用

Grep是Unix/Linux平台下重要的搜索工具,如何在Windows平台下gVim中也能使用Grep工具呢?
  • 下载Grep For Win:这是一个开源软件,可以很好的在Windows平台下实现Grep功能
  • 下载Grep.vim:这是gVim的一个插件,用来集成外部Grep工具
  • 配置Grep.vim:在vimrc文件中用命令来配置Grep For Win工具


    " 配置Grep插件
    let Grep_Path = 'D:\InstallSoft\GrepForWin\grep.exe -S'



这样在Vim中采用命令 ":Grep sample E:\CppSource\*.cpp" 就可以在Vim中直接进行Grep了

2008年7月27日星期日

欢迎来到MonkeyGTD 3.0

"GTD"是一门高效实用的工作信念,而"MonkeyGTD3"则是实现GTD的工具。
本文将基于GTD学习与实现的一些经验基础上,介绍MonkeyGTD3的基本概念与新增功能。适用对象:了解GTD,具有强烈工作优化欲望,使用Firefox作为主浏览器。

1.GTD使用经验
在讨论MonkeyGTD3之前,先对于GTD谈一些我的学习与使用经验,因为掌握正确的GTD精神,方能发挥MonkeyGTD3的真正效能。

首先,GTD不是目标、不是道路,而是信念作为GTD的学习新手,常会将GTD作为一种类似与ISO9001的工作流程规范或是CMM5的软件开发规范来看待。在学习的初期就希望能实现如《GTD》作者David Allen所述的工作方案,这是不好甚至有害于GTD学习的。绝大多数人都不可能面对David Allen所面对的工作强度,所以也没有必要照着他的方案来工作。否则就是"教条",会陷入繁文缛节中,最终损失的是时间、精力与对GTD的信心。我曾向一些朋友推荐"GTD"工作法,但他们在学习尝试一段时间后都放弃了,其中最主要的原因即在于此。要明确,GTD的精髓是:用自己的脑和手来解决问题,而不是搁置问题。所以要针对自己的特殊情况来设计工作方法,用Gmail、Palm或者纸笔,每天、每周或者不定期的进行检查,只要是有利于提高工作效率、解放大脑的都是GTD方法。没有什么"GTD规范操作手册",也没有什么"GTD标准进阶路线"。从自我做起,从小处提高,用自我的力量来解放自己,这方能从GTD中体味GTD的快乐。所以GTD是一种信念,类似于宗教中的"自我心理启示"。

其次,GTD要需求驱动,与时俱进。起先应以当前需求为主,从最小处做起,在不断修改增进自我工作方案的基础上,将GTD逐步推广到其它领域。比如我最先只是为了学习GTD,并且找寻对自己目前工作最适宜的GTD工具,所以我只限制用GTD来管理自己的计算机编程语言方面的学习事务,其它的工作仍按照既往习惯来进行。然后随着对GTD的认识深入与对于GTD软件(如MonkeyGTD)的操作熟练后,将其它的工作甚至部分生活琐事都用GTD来完成。虽然《GTD》作者本人可以用GTD来管理极其繁杂的商业事务,而且网上达人能用Gmail、BlackBerry等能实现国际化全天候的GTD,但我尚没有达到这样的境界。目前我只能在PC机前进行GTD,但这已经很不错了,而且也满足了我的需求。随着以后工作生活需求的驱动,我可能会添置一些设备(Blackberry甚至Iphone),并学习如何使用它们来构建更大的GTD系统。但目前不需要,我只要不断地完善目前的GTD系统就可以了。

最后,GTD是一种习惯。要以养成GTD习惯为目标。GTD的道路是很不容易的,其最重要的是要和既有的习惯做抗争。以往当一件事情做完时,我总想去吃点东东放松放松(这也是我肥胖的原因所在),而GTD则要求在事情完成后回顾(Review)一下工作列表,将完成事务设置为完成,并着手准备下一事务。类似这样的对个人自身习性的变更是很难的,由性急到沉稳,由拖沓到守时,都是利用GTD来进行自我修炼的过程。虽然GTD的规模不同,方法各异,但"Get Things Done"的实用目标是一致的。GTD不是用空想或文本设计的完美来衡量其实施价值,而是以所完成的事务的质量和数量为依据来衡量的。而要能坚持GTD的唯一方法,就是将GTD化作自己的习惯,用"GTD的惯性"来改造自己,提升自己的效能。

以GTD为信念,从小做起,以需求为驱动,不断将新的GTD手段内化为自己的日常习惯,是我这几年学习与实践GTD的一些心得。放在本文之前,希望在使用MonkeyGTD之前能先确立对GTD的信心,做好GTD的准备,使MonkeyGTD真正成为有效的GTD工具。

2.MonkeyGTD3简介

MonkeyGTD是一款基于单个网页文件的GTD系统。我从MonkeyGTD1.0就开始使用这个工具(当年的博文)。其小巧精致的结构,单个文件的便捷,与Firefox的完美搭配和GTD理念的精彩诠释是我当年选中这款软件的最重要的原因。自1.0,2.0到今天的3.0,MonkeyGTD正逐渐成为TiddlyWiki平台下最流行的GTD工具。而每次升级,MonkeyGTD都给人以更新的概念,更方便的操控与更美观实用的界面。

虽然MonkeyGTD使用容易,但其最重要的缺点在于文档的缺少和与《GTD》的概念不一致,对于初学者造成许多困扰。所以在本文中,我着重介绍MonkeyGTD的概念,希望能对初学者有所帮助。

3.MonkeyGTD3的组织架构

MonkeyGTD3中的组织结构与《GTD》所述有所不同,其更契合基于Web的组织与管理。就想操作系统用(硬盘、文件夹、子文件夹、文件)这样的多层次系统来组织管理文档一样,MonkeyGTD中采用多层形式来管理事务(在《GTD》中称为"行为(Action)")。
  • Realm:最高级别的组织单元,其从整体上将所属事务进行划分,如在两万高空俯瞰地球。其以标签页的形式在MonkeyGTD3的左上角显示。默认分类是"Personal(私事)"与"Work(公事)"。这个概念是从MonkeyGTD2新增的。
    请注意,虽然MonkeyGTD3提供了新增/修改/删除Realm的菜单,但本人强烈建议新手不要进行修改。MonkeyGTD3提供了足够多的低级别组织单元来进行管理。

  • Areas与Context:第二级别的组织单元。其将所属事务进行大体划分。Areas,即"工作区域",偏重于行为;而Context,即"场景",偏重于空间。Context是《GTD》的概念,而Areas是MonkeyGTD2中新增加的概念。
    举例而言,你可以新增一个 Web Publish 的Areas作为管理 博客发表、论坛发布或者个人网页修改等相关事务(Action)或项目(Project),而增加一个 OnBed 的Context作为在床上时要做的事务的管理单元。建议默认的Areas与Context不要做删除。

  • Project与Subproject:第三级别的组织单元。其是一组具有明确目标与严格时间顺序的操作事务(Action)的集合。注意Project与Subproject是有明确时间限制的,而Areas与Context则没有。Project是《GTD》的概念,而Subproject是MonkeyGTD3新增的概念。由于MonkeyGTD3是基于Javascript的系统,所以建议少用Subjective,最好不要将甘特图的多层Project方式移植到MonkeyGTD中,这样会极大地减慢系统运行速度。

  • Action与Tickler:MonkeyGTD中的最小组织单元。Action是一个具有明确目标的操作事务,而Tickler是具有时间提醒功能的Action。Action是《GTD》概念,而Tickler是MonkeyGTD3新增的概念(会在本文后面介绍)

4.MonkeyGTD3的Action多维空间
在GTD系统中,Action是最核心的基本单元,所有的管理都围绕Action而展开,从此角度来看,MonkeyGTD就是Action的管理系统。在MonkeyGTD中,Action的属性是由多个角度的不同属性来进行描述的,就像Action是一个多维度空间中的一个点一样。
  • 组织维度:Action隶属于某个Realm中的某个Project或Subproject
  • 进度维度:Action是Next、WaitFor或是Future
    • Next:马上要做的事
    • WaitFor:等待某个事件触发而要做的事。这个触发时间可能是别人,或者是某个时间,或者是其它的某个动作。其中某个时间触发是最常见的形式,如开会等。在MonkeyGTD3中,其单独成Tickler对象。
    • Future:未来不确定某个时间而要做的事。比如要看一本不是很急但很想看的书、或者学习打太极拳等。
  • 空间维度:Action是操作者在某个Context(场景)下完成的,比如Call场景就说明其是在电话机旁操作的,而Office场景说明其在办公室完成,而Errand则是在出差路上完成的
  • 区域维度:Action是在某个Areas下完成的,比如其是一个Research(科研)工作,或者是个Training(教育培训)工作
  • 关联维度:在MonkeyGTD3中新增了Contact,其可以将Action与其它的Project或者Action等相互关联起来,在同一个视图中呈现出来。
5.MonkeyGTD3新增的对象

基于前两个版本,MonkeyGTD3对程序在功能与界面上做了许多改动,其中新增了两个重要对象,即Tickler与Contact
  • Tickler应该是MonkeyGTD1.0中的Reminder的增强版。其是具有时间提醒性质的Action。其进度维度指标是"WaitingFor"。其可以很方便地解决如开会、约会等具有确切时间的操作事务,而且其具有Repeat功能,可以方便地进行周期设置。不仅如此,其还可以用来设置一些"Deadline",从而有效提高工作效率,防止过多的过时Action还放在MonkeyGTD中。
    在MonkeyGTD2中将Reminder去掉了,这给我原有的GTD操作带来不少的麻烦。在MonkeyGTD3中Tickler的出现解决了许多困扰。
  • Contact是MonkeyGTD3中新增加的功能,也是我期盼很久的好东东。随着GTD规模的增大,需要将一些在不同Project中的Action放在同一个视图中显示。原来的方式是采用TiddleWiki的Tag,但这样的显示不是GTD化的,其不能够显示Action的其它属性(如进度属性等)。而Contact的出现则(部分地)解决了这个问题。其就像一个张贴便签条的BBS面板,可以将不同的Action放在一起显示,从而提供了从自定义角度来查看整个事务多维空间的能力。由于每个Action只能关联一个Contact,所以这样的功能还是有些弱,但不好总比没有强呀。
虽然MonkeyGTD3提供了不少新特性,但其本质框架变化不大,对于学习GTD和采用MonkeyGTD的新手,我的建议是:
  • 如果每日事务<10件,或者管理action项目<100件(累积),则用monkeygtd1.0。其界面简单,速度快,概念清晰
  • 如果每日事务>20件,或者管理Action项目>300件(累积),则一定要用MonkeyGTD3.0。其优化的面板和新功能会极大提升你的GTD效率。
关于MonkeyGTD3的具体使用,可以通过Email:yankchina@gmail.com与我联系。

2008年7月23日星期三

将Txt文档也绑定到Latex-Suite上

用Latex-Suite习惯后,连Txt文档也要绑定上去,同时解决一个问题,即Vim需要检查Tex的格式来决定是否启动Latex-Suite。而我并不用ConTex和PaintTex,故将之屏蔽。修改后的$VIM/vim71/filetype.vim相关代码如下

" TeX
au BufNewFile,BufRead *.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex
"au BufNewFile,BufRead *.tex call s:FTtex()
"yankchina@gmail.com 2008-07-24
au BufNewFile,BufRead *.tex setf tex
au BufNewFile,BufRead *.txt setf tex

这样在编写Txt文件时也能用Latex-Suite快速插入Latex标签了。

2008年6月18日星期三

用Astyle批量美化C++程序代码

astyle是一款很好的C++/Java/C#代码美化工具。可采用下列代码来进行批量美化

REM yankchina@gmail.com
REM
批量将本目录中的所有C++文件用Astyle进行代码美化操作
REM
2008-06-16
REM
设置Astyle命令位置和参数
set astyle
="D://InstallSoft//astyle//astyle.exe"
set mode
=ansi
REM
循环遍历目录
for /r . %%a in (*.hpp) do %astyle% --style=%mode% "%%a"
for /r . %%a in (*.cpp) do %astyle% --style=%mode% "%%a"
for /r . %%a in (*.h) do %astyle% --style=%mode% "%%a"
REM
删除所有的astyle生成文件
for /r . %%a in (*.orig) do del "%%a"
pause

2008年4月27日星期日

VIM与Latex-Suite中的问题解决

1.在装载Template时会有自动进行缩进,从而影响了原来的格式。我给Latex-Suite的作者Email后,想到可以在template.vim中的ReadTemplate函数中在exec IMAP_PutTextWithMovement前后进行filetype indent on/off 开关Vim的indent功能;
2.在main.vim文件中修改了$$映射修改成~$<++>$~<++>,从而可以解决在CJK文件中将英文与中文隔离开。
3.增加了一个F3的映射到noh命令,清除匹配搜索结果高亮。

2008年3月20日星期四

bras的自动拨号

我原以为要像Linux系统一样建立一个l2tp的协议,所以从l2tp上下手来查找bras系统的自动拨号程序。今天突然想到bras拨号也是放在“拨号链接”中,是否可以用adsl的自动拨号脚本呢?于是Google一下,果然找到了Windows的命令,是 rasdial linkname username password。再用命令 hh netcfg.chm 可以查到 rasdial 的详细手册。于是做了一个bat脚本。格式如下:

rasdial bras /disconnect

if %1 == a goto opena
if %1 == b goto openb
goto :EOF

:opena
rasdial bras username@a pwd
goto :EOF

:openb
rasdial bras username@b pwd
goto :EOF


如果要想类似服务一样自动启动的话,可以采用VBS脚本,如:
Dim Wsh
set Wsh=wscript.createobject("wscript.shell")
Wsh.Run "RASDIAL cqcnc username password",1,flase
WScript.quit
注意在WindowsXP或Windows2003下面要对目录安全性进行设置,这样在“计划任务”中添加该脚本,就能自动拨号和断开链接了。

2008年2月21日星期四

Windows下的文本查找

原来我一直使用Editplus的“多文件搜索”功能作为Windows下文本查找工具。但现在我离开Editplus转向Vim后,就没有如此“利器”了。想在Linux下的Grep是专门用于文本搜索的工具,所以Google“Windows grep”,找到一个“Grep for Windows”的压缩包,解压并将目录填入系统“环境变量”的PATH中,就可以在Vim中调用如下命令来进行多文件查找了
:! grep -S "sampletext" C:\\samplesrc\*.cpp

另:在TotalCmd中可利用其Alt+7开启搜索框,选中查找文本即可。

2008年1月8日星期二

Cterm的自动登录

采用Cterm的默认自动登录方式,不能跳过BBS前面的“十大”等页,所以根据BBS特点,修改自动登录过滤器如下:(当遇到/则执行/说明)
1.请输入帐号 %U\n 输入帐号
2.请输入代号 %U\n 输入代号
3.请输入密码 %C\n 输入密码
4.上次连线时间 \n\n 跳过连线时间页面
5.继续 \n 当遇到继续时都默认跳过
6.好朋友列表 q%e 跳过在线好友页面
7.主菜单 %e 停止在主页面上
8.主选单 %e 停止在主页面上

这样登录就“清爽”多了。

2008年1月6日星期日

TotalCmd中F4呼唤Vim

TotalCmd中F4呼唤Vim的命令如下:
D:\Program Files\gvim.exe -p --remote-tab-silent
这样只打开一个Vim,且不同文件在不同的Tab中。

2007年10月8日星期一

PDFTK的样例

PDFTK是一款PDF的命令行工具,其可以完成许多PDF合并、分割工作。
下面是我从网络上摘得的PDFTK的样例,翻译列表如下:

Merge Two or More PDFs into a New Document
将两个或多个PDF文件合并到一个文件中
pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf

or (Using Handles):
或者采用句柄
pdftk A=1.pdf B=2.pdf cat A B output 12.pdf

or (Using Wildcards):
或者通配符
pdftk *.pdf cat output combined.pdf

Split Select Pages from Multiple PDFs into a New Document
在所选PDF文件中选择页面合并到新的文件中
pdftk A=one.pdf B=two.pdf cat A1-7 B1-5 A8 output combined.pdf

Encrypt a PDF using 128-Bit Strength (the Default) and Withhold All Permissions (the Default)
用128位密码(默认值)加密PDF并封锁所有权限(默认值)
pdftk mydoc.pdf output mydoc.128.pdf owner_pw foopass

Same as Above, Except a Password is Required to Open the PDF
与上面相同,但不需要PDF文件打开密码
pdftk mydoc.pdf output mydoc.128.pdf owner_pw foo user_pw baz

Same as Above, Except Printing is Allowed (after the PDF is Open)
与上面相同,但不允许打印(在PDF打开后)
pdftk mydoc.pdf output mydoc.128.pdf owner_pw foo user_pw baz allow printing

Decrypt a PDF
解密PDF
pdftk secured.pdf input_pw foopass output unsecured.pdf

Join Two Files, One of Which is Encrypted (the Output is Not Encrypted)
合并两个文件,其中一个是加密的(输出文件不是加密的)
pdftk A=secured.pdf mydoc.pdf input_pw A=foopass cat output combined.pdf

Uncompress PDF Page Streams for Editing the PDF Code in a Text Editor
解压PDF页面流以便于在文本编辑器中编辑PDF代码
pdftk mydoc.pdf output mydoc.clear.pdf uncompress

Repair a PDF's Corrupted XREF Table and Stream Lengths (If Possible)
修理PDF损坏的XREF表格和流长度(如果可能的话)
pdftk broken.pdf output fixed.pdf

Burst a Single PDF Document into Single Pages and Report its Data to doc_data.txt
将单个PDF文件各页拆开,并将数据汇报到文本文件中
pdftk mydoc.pdf burst

Report on PDF Document Metadata, Bookmarks and Page Labels
将PDF文件的元数据、书签和页码标号输出到文本文件
pdftk mydoc.pdf dump_data output report.txt

2007年9月4日星期二

Latex-Suite 4步安装(根据官方稿翻译)

1.下载并解压缩文件
到 http://vim-latex.sourceforge.net/ 下载压缩包,并解压到你的~/vimfiles目录(Windows)或者~/.vim目录(*nix)中。如果你已经很久没有升级了,最好应先移除~/vimfiles/ftplugin/latex-suite目录再安装
注意:如果你已经安装一些Latex文件拓展,则应阅读 高级安装 以避免覆盖某些你既有文件。
2.在.vimrc配置中增加特定内容

" REQUIRED. This makes vim invoke Latex-Suite when you open a tex file.
filetype plugin on

" IMPORTANT: win32 users will need to have 'shellslash' set so that latex
" can be called correctly.
set shellslash

" IMPORTANT: grep will sometimes skip displaying the file name if you
" search in a singe file. This will confuse Latex-Suite. Set your grep
" program to alway generate a file-name.
set grepprg=grep\ -nH\ $*

" OPTIONAL: This enables automatic indentation as you type.
filetype indent on

3.安装帮助文件
要安装帮助到Vim中,应启动Vim并:
helptags ~/.vim/doc (*nix)或 helptags ../vimfiles/doc(windows)
4.完成!
安装完成,现在Latex-Suite可以自动启动,你可
:help latex-suite.txt 来阅读在线帮助

2007年9月2日星期日

用Python来分析《新东方背单词》的录入格式

我想使用《新东方背单词》来背一些自己浏览文章时遇到的生词。该软件提供了一个建立自己图书并从文本格式文件批量录入的功能,但在帮助中没有提供详细的格式说明。于是我用Python编写了一个简单程序来生成测试文本,找到其中规则。代码如下:


# Recite words
sl = []
sll = []
for i in range(26):
sl.append( chr( ord('a') + i ) )
for i in sl:
for j in sl:
sll.append( i + j )
f = open('recite.txt','w+')
f.write('w \n')
for i in sl :
if i <> 'w' :
f.write( '<' + i + '>' + i + '\n' )
f.close()
f = open('recite1.txt','w+')
f.write('ww \n')
for i in sll:
f.write('<' + i + '>' + i + '\n' )
f.close()



生成的文件录入《新东方背单词》后显示对应的格式,从而得到格式定义符如下:

w--单词
c--中文解释
e--英文解释
d--短语
p--音标
f--词频
k--考点
h--助记法
s--同义词
a--反义词
o--其它
ee--例句

2007年8月28日星期二

GNU Make学习(1)

1.Make是一个“古董级”的工具,其像橡树年轮,记录了近三十年计算机科学进步的痕迹。或许在学习Make中你会如考古般发现新奇的过往智慧,但更多的时候你将迷失于旧与新的迷雾之中,这也正是Make对于Windows平台下成长的一代程序员来说难懂的原因。但在每个IDE的F5或F9的背后,都能找到Make的身影。要进阶编程功力,当从了解Make开始。

2.Make是一个工具,它完成两个任务:一是建立一个多个文件的关系图,其用来描述文件间的依赖关系;二是检测文件的新旧,并按照关系图来进行命令执行以完成局部或整体的更新工作。所以在Make中存在两类语言,一为建立关系图,一为进行文本处理。

3.在学习Make前,应了解本机上的Make环境。在Windows系统中,由于安装BCB、VC2005等都会自带Make工具。而本文所用的Make是GNUMake 3.8,在Cygwin和DevCPP中都有。不同的Make对应不同的语法,故在BCB中由bpr文件导出的Make文件不能在GNUMake下编译。我就是犯了一次这样的错误。

4.Make中最简单的方式就是通过显性说明来建立关系图。对于小项目这还是很不错的方案,但对于大项目则不行。原因有三:一是重复声明过多,代码冗余,不利于维护;二是声明过细,移植性差;但最重要的是往往文件关系复杂到无法通过人脑来进行关系声明,这就必须用一种计算机辅助方式来进行关系推衍,这在Make中称为“Rule(规则)“。

5.Makefile难于阅读与调试的原因在于其自上而下的书写格式与”(关系图)自底而顶“的执行顺序往往是不一致的,也是人难于掌握的。所以Makefile采用Target(目标)与Rule(规则)这两种机制来分割问题。要注意的是这两种机制是双刃剑,其使用不当往往会造成Makefile的更晦涩难懂。

6.Phony Target用于结构化Makefile,将问题分割,并可优化用户界面。而其中的Empty Target则用来控制命令执行范围,避免非更新区域的反复执行。而对于大项目,制定一个Help Phony是常用技巧。但Phony Target也会破坏一些自然逻辑结构,从而给阅读带来一些障碍。要适当应用Phony Target,不要采用特殊技巧,在欺骗Make工具的同时也会欺骗阅读者,可能包含未来的你。

7.Rule则屏蔽了关系图的细节,让计算机来自动铺砌关键帧间的空隙。所以良好的Rule即能提高阅读性,又能提高执行效率。

8.Make诞生于Unix,其带有很强的*nix家族的色彩。比如其支持的通配符(WildCards)与Bourne Shell相同,包括~,*,?,[...]和[^...]。其有着古旧的键缩进惯例。

9.在Makefile中要注意变量展开、宏展开和函数展开的顺序。要充分理解Automatic Variables(自动变量)的作用;要用VPATH来指定被搜索文件的目录;要善于利用正则表达式来处理文本变量问题,特别是在gcc -M问题上。要小心地分割项目,善于利用eval函数来达到特定要求。

10.注意递归变量的声明与使用,这些变量与C中指针相似。

11.变量用$()来取值,摈弃过时的${}方式。

12.注意Command的Comment(前面有)与Makefile的Comment间的差异

13.正是有了简洁而强有力的函数支持,GnuMake具有很强的文本处理能力;而定义良好的自定义函数或宏,可提高Makefile的通用性和移植性。

14.inline函数是最常见的形式。

15.命令修改符 @-消音;- 消噪音(埋头工作) + 无论如何都要工作(即便是--just print模式)

2007年6月25日星期一

批量下载后的文件名过滤

用FlashGet批量下载文件后面临一个文件名更改过滤的问题。我的解决方案是:
1.在批量下载时,同时下载该网页的HTML文件;
2.用Python来过滤出对应的HTML文件;
3.将过滤文件修补成Bat文件,运行后则可批量更改名称;
=====================================================================
Python过滤源代码
# -*- coding: cp936 -*-
# yankchina@gmail.com
# 2007-06-26 pass

from sgmllib import SGMLParser
class MyHtmlFilter(SGMLParser):
def reset(self):
SGMLParser.reset(self)
self.inValid = False
self.fileHrefs = []
self.fileNames = []

def start_a(self,attrs):
#idText = [ v for k, v in attrs if k == 'class' ]
fileHref = [ v for k, v in attrs if k == 'href' ]
#if idText == 'a01' :
self.inValid = True
self.fileHrefs.append( fileHref )
def end_a(self):
self.inValid = False


def handle_data(self, text ):
if self.inValid:
self.fileNames.append( text )


def FilteHtmlFile( inFileName,outFile ):
''' Filte Html File

'''
import os
if os.path.exists( inFileName ):
inFile = open( inFileName, "r")
parser = MyHtmlFilter()
parser.feed( inFile.read() )
inFile.close()
parser.close()
print len( parser.fileNames )
for i in range( len( parser.fileNames) ):
outFile.write( parser.fileHrefs[i][0] + " " + parser.fileNames[i]+ ".doc \n " )
print parser.fileNames[i]
print parser.fileHrefs[i]
print inFileName, len( parser.fileHrefs )

if __name__ == "__main__" :
outFileName = 'output.txt'
outFile = open( outFileName, "w" )
htmlFileName = "1.htm"
FilteHtmlFile(htmlFileName, outFile )
outFile.close()