Moin升级札记 二月 25th, 2012

 

使用Moin作为个人知识库的工具,主要是经个人整理后的资料。原是使用Moin1.8.1,升级到moin-1.9.4主要的好处是支持python2.7版本。另在本次升级时,将data目录从安装程序迁移到自己的数据目录。

升级完成后发现原来有中文关键字的页面都不能使用,出现字符编码错误。刚开始以为是编码问题,最终确定是cache原因。

升级过程:

  1. 下载moin-1.9.4的安装包并解压
  2. 修改 `wikiconfig.py` 文件将数据目录变更
instance_dir = 'e:/Data/wiki/'
  1. 使用Moinmoin/script/下的moin文件对缓存进行清理
>./moin.py maint cleancache
>./moin.py migration data
  1. 手动删除data/cache目录
Posted in IT技术 | Comments(9)»

Git进行项目导出 二月 2nd, 2012

SVN有直观的export命令,转移到Git后因少了export指令,变得有些无所适从。Git理应比SVN先进,怎么会没有export呢。其实Git提供了更为先进的操作方法,集成源码导出和压缩,使用 `git archive` 指令。 (..更多内容)

按歌手创建目录整理mp3 十二月 18th, 2011

下载的MP3原是全堆在一个目录下,感觉按歌手名而不是流派进行分类是比较可行的。首先是用total commander在audioinfo插件配合,使用批量命名方法,将全部的mp3从ID3标签中提取歌手和歌名的信息,按artist - title进行命名。 (..更多内容)

 

将reStructuredText转换为pdf,一般解决方法是转换为tex的中间格式,再使用类似于texlive2009.iso之类的工具再转换为pdf,这其中就不免涉及到tex巨大的套装了,安装文件非常大。rst2pdf可以直接进行转换,它是借助于 reportlab 完成。

安装

涉及到包依赖,推荐使用 >easy_install rst2pdf 进行,我在使用时碰到与docutil版本对应的问题,应是参数个数不一致,在 rst2pdf 最新版本解决了。可以在 rst2pdf 源码中将 createpdf.py 将安装文件里进行替换就可以解决。

中文支持

对于中文主要存在两个问题,一是字体,二是中文换行。之前对于此解决方法是修改源程序直接用硬编码字体替换,见这 简单使用 Reportlab 生成中文 PDF 文档UsageRstReportlabExPdf 。现在rst2pdf版本对这两大问题都有所支持,使用style的样式表。在字体方面,对于windows系统,脚本会自动查找 windows/fonts 目录,字体可以自己定义。下面创建一个 gbk.style 样式:

{
"styles":
{
  "base":
  {
        "wordWrap": "CJK"
  }

},
"embeddedFonts" : [ ["simfang.ttf","simhei.ttf","simkai.ttf","simsun.ttc"]],

"fontsAlias" : {

"stdFont": "simfang",

"stdBold": "simhei",

"stdItalic": "simkai"

}
}

将style放在与源rst文件同目录,然后运行 >rst2pdf -s gbk.style test.txt -o test.pdf 即可生pdf。对于pdf样式有更多要求,可以查看rst2pdf的style章节。

xlwt对于行格式操作问题 十一月 12th, 2011

Python对于excel读取的包有 xlrd ,写操作的包有 xlwt 。使用这两个包一般就能完成常见的xls文件导入导出功能。

xlwt可以对于单元格格式进行控制,使用XFStyle对象,可以改变字体,颜色,边框等。xlwt源文件随带的文档不详细,对于单元格操作,可以使用 sheet.write(rowx, colx, value, style) 完成。但examples里有个 row_styles.py 文件示例:

fnt = Font()
fnt.height = i*20
style = XFStyle()
style.font = fnt
ws.row(i).set_style(style)
ws.write(i, 1, 'Test')

直接运行该文件报错,导入Row()模块失败,自己按其代码示例测试下,发现不能更改行样式。后从 python-excel 找到一点线索,大致意思是用set_style对空单格有效,不会对己写值的单元格起作用。对于行操作,还是应当老老实实用 sheet.write(rowx, colx, value, style) 完成。

对于软件文档的编写,选择一种通用合适的格式值得考虑一下。我曾用过的文档格式有docbook,txt,html等等,先简要谈下我对几种格式的感受:

  • docbook:功能强大,它可以转换输出各种格式(PDF,html等),属于xml的定义集,写大块头的书籍受用,但源文件的编写使用普通文件工具非常难用,需要一套工具集,相应的环境配置麻烦。
  • txt:简单,像一些软件项目中的todo,readme都是txt格式,像rfc等也此类,不用相应的工具支持,打开就能看。但缺点很明显,没有带元数据,这样格式和转换自然无从谈起了。
  • html: 有段时间主要用于写blog,我只使用基本标签,主要是烦一些编辑器额外添加class,自己写能更好控制格式,写完后,再使用html源码发布blog。
  • tex:看过它的文档,当时写论文时准备用它,被他的工具集的大小和配置的繁琐给吓到了,没有真正用过。

reStructuredText

reStructuredText是所想即所得的样式,跟python有脱不开的关系,属于python docutils项目。它的语法简单,有点儿像wiki,即使不用工具解析,也很容易被人阅读,它是纯文本再加了少许标志罢了,具体看 Docutils 。它的 qucik-start 是讲它的解析工具的配置,就是安装个python包就可以,就能用 rst2html.py 将rst格式转换为html格式。

reStructuredText的语法详细可看 A ReStructuredText Primer 或者 reStructuredText 简明教程 ,上述用来查有哪些语法更佳,下面我常用的:

  • 标题:一级标题,二级标题等,可以“=,_,~"等字符加在标题文本下方,这些字符长度要大于标题文本
一级标题
========

二级标题
________
  • 段落文本:纯文本怎么写,res也是怎么写,顶格,不要缩进,转换为html就是<p>样式。
  • 列表: 无序列表就在段落前面加"*",或者用"1."等做有序列表
  • 段内元素:粗体,斜体之类的,看下面表格:
原始内容 显示效果
*强调* 强调
**特别强调** 特别强调
`原文` 原文
  • 超链接,下面的代码就会创建一个类似 文本 的超链接,需要注意两个`之间要留有空格。
`文本 <http://link/>`_

Sphinx使用

Docutils 工具能处理单个rst源文件或生成简单样式的html。如果需要将多个不同的源文件进行组织,交叉索引,输出pdf,opendoc等等常见文档格式,就需要 Sphinx 。Sphinx以我的理解,就是增强了res格式,多了一些文档关系的指令,然后配置一套工具集进行解析这些指令,因此会出现一些res格式中没有的标记。不要从源码安装sphinx,因为会涉及到一些包的依赖关系,使用python的包安装工具,命令行下 $easy_install -U Sphinx ,就能网上下载安装。

安装完后,使用 $sphinx-quickstart 会问答式的命令输入,按其提示选择后就会创建一个工程目录结构,需要关注的是 conf.py ,它是python源码,为整个Sphinx的配置文件。 类似 index.txt 为主控文本,如下格式:

.. toctree::
   :maxdepth: 2

   intro
   tutorial
   ...

上述代码是定义了文档目录树,目录层级为2,下空一行,就是其他同一目录下的rst文件名,然后组成一个文档。 $ make html 可以编译源文件,在``build``目录下找下输出的文件吧。

Sphinx的配置文件

conf.py 用于控制项目属性和样式,一些常见配置见下,不清楚整个看下就OK:

#内置输出样式为中文
language = 'zh_CN'

#rst源代码文件的后缀名,可以改为rst
source_suffix = '.txt'

# 项目名称与版本说明
project = u'使用说明'
copyright = u'2011, len.kong'

#html主题,有几个可选的,选个自己喜欢就行,具体可查看手册
html_theme = 'sphinxdoc'

#类似几个选项,就是关闭或打开一些样式
html_show_copyright = False

Django在开发环境下用manage.py runserver 作为调试服务器很方便.但是不能将自带的manage.py runserver作为生产服务器,根据django文档是因为它缺乏安全审记和必要的性能测试,主要的因素还是单线程的因素,有可能造成多个用户同时访问的未知因素.

根据Django Book 主要有:Apache + mod_python,Fastcgi等.

  • Apache + mod_python
  • 不推荐使用.mod_python己不再开发维护了,而且模块化对于内存开销也大.我现运行的一程序布署在这一组合,当初花了很长时间才将里面的依赖库搞定.

  • Apache + mod_wsgi
  • 如果要用Apache,就使用mod_wsgi搭配,这也是官方目前推荐的方法

  • nginx+flup(fastcgi)
  • 现在讲的windows下Djaongo生产环境简易布署,就是指用nginx+flup ,非常简单,性能也有保证

下面是操作:

  1. 安装nginx,下载nginx 对应的windows包解压,运行目录下的nginx.exe,打开浏览器输入localhost,就可测试nginx是否配置安装好了.
  2. 下载flup解压,在相应版本的python版本下进行 pyhton setup.py install安装.
  3. 修改 nginx 的conf目录下nginx.conf相应位置增加
     location / {
                fastcgi_pass 127.0.0.1:8081;
                fastcgi_param PATH_INFO $fastcgi_script_name;
                fastcgi_param REQUEST_METHOD $request_method;
                fastcgi_param QUERY_STRING $query_string;
                fastcgi_param SERVER_NAME $server_name;
                fastcgi_param SERVER_PORT $server_port;
                fastcgi_param SERVER_PROTOCOL $server_protocol;
                fastcgi_param CONTENT_TYPE $content_type;
                fastcgi_param CONTENT_LENGTH $content_length;
                fastcgi_pass_header Authorization;
                fastcgi_intercept_errors off;
                index  index.html index.htm;
            }
  4. 最后一步,在django应用程序目录下,python manage.py runfcgi method=threaded host=127.0.0.1 port=8081, 端口需与nginx里配置的一致,OK完毕

 

参考:

https://docs.djangoproject.com/en/1.3/ref/django-admin/

 

应用场景是在某些jQuery插件初始化会用到option,但这些选项在应用时有很大一部分是相同的,在自己使用时进行二次封装,需要在初始类时将自己额外的选项合并至原先的option.

javascript原生态写法如下:

for (name in obj2) {obj1[name] = obj2[name];}

在jQuery框架下有简便的extend()函数可用,类似于:

JQuery.extend(obj1,obj2);

 

在Sqlserver2008 R2版本用了nvarchar(max)字段后,迁移到sqlserver2000出现类型错误,这主要是sqlserver2000不支持nvarchar(max)列。解决方法是使用nvarchar(8000)代替,如果感觉需要字段内容很大,也可以使用ntext。

使用ntext有局限性,不能很方便地做聚集或相等比较.

顺便谈下sqlserver里的字符串表示字段.总体上有char,varchar,text,nchar,nvarchar,ntext.我们知道字符的计算机内部表示跟编码有关,前三种是用ansi表示,后三种是用unicode表示,这决定后三种能更好地支持国际化表示,当然在支持中文上有更大的灵活.带了var的说明字段长度是可变的,而char类型的固定长度的.选择标准是列数据项大小可能相同,用nchar,大小差异很大用nchar.

对于text,ntext的态度是,如果你使用sqlserver2005以后的版本,请用nchar(max)和nvarchar(max)代替,因为在sqlserver2008的后续版本中,微软有可能将这两种类型删除掉.

参考:stackoverflow上的解答

TTT内训师培训 六月 2nd, 2011

参加了内训师培训,稍有所得,自己说话的形体语言,说话时如何顺畅,不要老着拖着”嗯“字,需要自己注意。课堂里的一点儿笔记,学会从学员口中说出你想说的话。课堂里的口头禅是“很好的分享”,“这个问题问得很专业”,“很多学员问过同样的问题”。

五步提问法

  1. 停顿、环视
  2. 思考、时间
  3. 举手、带动
  4. 鼓励、认同
  5. 归纳、答案

加涅九大教学事件

  1. 引起学生注意
  2. 提示教学目标
  3. 唤起先前经验
  4. 呈现教学内容
  5. 提供学习指导
  6. 展现学习行动
  7. 适时给予反馈
  8. 评定学习成果
  9. 加强记忆与迁移