Moin升级札记 二月 25th, 2012
使用Moin作为个人知识库的工具,主要是经个人整理后的资料。原是使用Moin1.8.1,升级到moin-1.9.4主要的好处是支持python2.7版本。另在本次升级时,将data目录从安装程序迁移到自己的数据目录。
升级完成后发现原来有中文关键字的页面都不能使用,出现字符编码错误。刚开始以为是编码问题,最终确定是cache原因。
升级过程:
- 下载moin-1.9.4的安装包并解压
- 修改 `wikiconfig.py` 文件将数据目录变更
instance_dir = 'e:/Data/wiki/'
- 使用Moinmoin/script/下的moin文件对缓存进行清理
>./moin.py maint cleancache >./moin.py migration data
- 手动删除data/cache目录
按歌手创建目录整理mp3 十二月 18th, 2011
用rst2pdf从reStructuredText生成中文pdf 十一月 15th, 2011
将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) 完成。
reStructuredText和sphinx使用 十一月 8th, 2011
对于软件文档的编写,选择一种通用合适的格式值得考虑一下。我曾用过的文档格式有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
Windows下Django生产环境简易布署 七月 5th, 2011
Django在开发环境下用manage.py runserver 作为调试服务器很方便.但是不能将自带的manage.py runserver作为生产服务器,根据django文档是因为它缺乏安全审记和必要的性能测试,主要的因素还是单线程的因素,有可能造成多个用户同时访问的未知因素.
根据Django Book 主要有:Apache + mod_python,Fastcgi等.
- Apache + mod_python
- Apache + mod_wsgi
- nginx+flup(fastcgi)
不推荐使用.mod_python己不再开发维护了,而且模块化对于内存开销也大.我现运行的一程序布署在这一组合,当初花了很长时间才将里面的依赖库搞定.
如果要用Apache,就使用mod_wsgi搭配,这也是官方目前推荐的方法
现在讲的windows下Djaongo生产环境简易布署,就是指用nginx+flup ,非常简单,性能也有保证
下面是操作:
- 安装nginx,下载nginx 对应的windows包解压,运行目录下的nginx.exe,打开浏览器输入localhost,就可测试nginx是否配置安装好了.
- 下载flup解压,在相应版本的python版本下进行 pyhton setup.py install安装.
- 修改 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; } - 最后一步,在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/
合并两个JavaScript对象属性动态 七月 5th, 2011
应用场景是在某些jQuery插件初始化会用到option,但这些选项在应用时有很大一部分是相同的,在自己使用时进行二次封装,需要在初始类时将自己额外的选项合并至原先的option.
javascript原生态写法如下:
for (name in obj2) {obj1[name] = obj2[name];}
在jQuery框架下有简便的extend()函数可用,类似于:
JQuery.extend(obj1,obj2);
Sqlserver2000的nvarchar(max)问题 六月 25th, 2011
在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的后续版本中,微软有可能将这两种类型删除掉.
TTT内训师培训 六月 2nd, 2011
参加了内训师培训,稍有所得,自己说话的形体语言,说话时如何顺畅,不要老着拖着”嗯“字,需要自己注意。课堂里的一点儿笔记,学会从学员口中说出你想说的话。课堂里的口头禅是“很好的分享”,“这个问题问得很专业”,“很多学员问过同样的问题”。
五步提问法
- 停顿、环视
- 思考、时间
- 举手、带动
- 鼓励、认同
- 归纳、答案
加涅九大教学事件
- 引起学生注意
- 提示教学目标
- 唤起先前经验
- 呈现教学内容
- 提供学习指导
- 展现学习行动
- 适时给予反馈
- 评定学习成果
- 加强记忆与迁移