一周Python小记

上个星期以来忙里偷闲一直在写一系列小型的代码生成器,完成一些从需求到结构化代码生成和验证作业。这个小东西是用Python写的,我简单分享一下中间所得。

一、配置文件

1、YAML格式

数据库连接信息和作业相关信息是存放在数据库中的,配置文件形式可以有很多种选择:XML / ini / txt,我这里选择YAML作为存放。

YAML使用起来相当方便,能够自动解析成对应语言中的变量,比如列表解析为列表,数字文字分别解析成对应的格式变量。

之所以选择YAML,是看中它对语言的亲和性和可读性,GAE的配置文件就是YAML格式。YAML的语法相当简单,用:来分隔key: value,用 - 来分隔列表,注意点是缩进需要用空格,关键符号和内容之间要加上一个空格。我的配置文件如下:

taskId: PQMI06
taskName: 测试建制作业
author: alswl
confirmId: 20101025xxx

headFiles:

  • head1.txt
  • head2.txt
  • head3.txt
    bodyFiles:

  • body1.txt

  • body2 ...
more ...

Python读写剪贴板

最近在写一个CodeGenX代码生成器,说是生成器,其实是目前只完成一堆零散的脚本。这些脚本的调用方式一般是从某个txt中读取数据,再写到另外一个txt中。

由于某些数据变动频繁,导致我操作txt次数大增,我怒了,就找了一个脚本自动读写剪贴板。

#coding=utf-8
'''
读写剪贴板
'''
import win32clipboard as w
import win32con

def getText():
  w.OpenClipboard()
  d = w.GetClipboardData(win32con.CF_TEXT)
  w.CloseClipboard()
  return d

def setText(aString):
  w.OpenClipboard()
  w.EmptyClipboard()
  w.SetClipboardData(win32con.CF_TEXT, aString)
  w.CloseClipboard()

别说有了这个脚本用起来还是蛮方便的,建议丢到Python的lib下面,然后可以方便调用。

如果双击 .py ...

more ...

小脚本mm->html

我同时在使用两套信息记录工具,知识收集记录工具BooguNote + KMS Wiz,关于这两套系统具体介绍请见桌面记录神器- BooguNote & 我所使用的知识管理系统

我的使用习惯是在BooguNote中收集日常的琐碎知识点,包括我所想的和工作记录。每个小知识节点的长度大概在200-300字左右。这些被我称为的知识碎片显然 不能直接放入KMS。

BooguNote可以将里面的文字直接复制出来,会在父亲节点上加入+,子节点加入-,这种简单的txt不能满足我的要求。于是我花了点时间写了一个mm文件到ht ml的转换脚本。

BooguNote的文件格式是boo,可以转换成FreeMind的思维导图格式.mm,我认为用mm作为源数据格式适用范围更大。

#coding=utf-8
from xml.dom import minidom
import sys
import os

class MM2Html:

'转换MM->Html类'

def init(self):

self.html = '''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...

more ...

AzaAjaxChat笔记-实现

唔,继续整理笔记,这些是在代码编写中遇到的问题和解决办法的总结,不是Turtial,问题有针对性,内容枯燥,路人可以直接忽略~

一、Comet服务器推技术

Comet推技术,一句话概括,就是形成一个不断开的连接,使得服务器能主动向客户端发送信息。这种技术在交互性强的Web产品中应用的非常多,比如GMail。Co met的实现方式有两种:基于 AJAX 的长轮询(long-polling)方式和基于 Iframe 及 htmlfile 的流(streaming)方式,具体两种实现方式可以参考Comet:基于 HTTP 长连接的"服务器推"技术

我计划把这个技术引入,成为一个亮点,第二种Comet实现方式过于复杂(GMail使用的就是这种),我就尝试第一种。我在测试环境测试了基于 AJAX 的长轮询 (long-polling)方式。这种方式说白了就是在Ajax获取返回数据时候,在状态吗为4(数据传输完成)情况随后进行下次查询。进行循环的查询 ...

more ...

AzaAjaxChat笔记-框架

1个月没有动PHP了,新装的系统甚至还没有配置PHP环境,今天看到BooguNote上有一个boo是专门记录AzaAjaxChat开发时候遇到的问题和解决办 法。于是把一些东西整理记录一下。

1. 从ThinkPHP开始

最早的AzaAjaxChat是基于ThinkPHP的,我当时在OpenSouce上看到ThinkPHP的介绍,有很多优点,看的我很心动:MVC模型,Ajax 支持,详细的文档和案例,国人开发的框架。我作为一个PHP新人一下子就被他吸引住了,决定用ThinkPHP做框架。

image

随着系统开发的推进,我却感觉到一些不自在,遇到一些问题却找不好太好的解决办法。比如ThinkPHP的模块和分组两个概念,让我比较疑惑,花费了大量时间重组目录 结构,两种方法各有优劣,让我很难选择(有选择了反而难办了 ^_^)。

最让我恼火的是相对目录带来的路径混乱,在JSP开发中,静态内容习惯性放在webcontent文件夹中,而ThinkPHP的CSS、图片、JS引用让我很疑惑, 要区分App的和Model的静态文件。

在开发过程中,我也遇到过框架本身的Bug,让我对这个框架失去信心。在这里我没有贬低ThinkPHP或者ThinkPHP开发者的意思,他们的"大道至简、开发由 我"的理念很值得欣赏。只是作为初学者因为遇到的一些问题,带来了一定的开发难度,不得已放弃。

2. 选择CakePHP ...

more ...

获取每日Bing图片

在使用公司一个Redirect开发工具页面时候,想个性化一下,就想添加一个背景,最好每天能自动变化,我第一个想到的就是Bing。

放狗搜索,发现一篇文章 抓取每天必应bing背景图片 - huangct的专栏 - CSDN博客,文中提供了抓取程式的Python代码,我摘录如下。

import urllib
import time

def main():
    url = 'http://www.bing.com'
    f = urllib.urlopen(url)
    html = f.read()
    f.close()
    a = html[html.index('/fd/hpk2'):]
    data = a[:a.index('',id:')]
    url = data.replace('\', '')
    url = 'http://www.bing ...
more ...

7条大型网站设计和维护的关键技巧[译文]

原文出处:7 Crucial Tips for Designing and Maintaining a Large Site | Nettuts+

译者:alswl

以下为译文


项目范围和规模各不相同,他们带来的挑战各不相同一样。作为一个独立的网页设计师,我最大的职责就是负责FlashDen。随着成千上万的活动用户聊天,上传和购物, 网站处理着大额的金钱和巨大的流量。

设计,重构,维护和开发团队的工作给了我一些能使事情变得更容易的用用的见解和技巧。而且,就在昨天,我们开始了对网站最大的一次重构,着看上去是一次很好的机会来记 录我最有用的7个秘诀。

1. 可维护的设计和代码

image

我给的第一条也是最条一条秘诀是设计站点保证可以轻松维护。很多时候,当你设计一个站点,你可能为了美学牺牲一些东西。例如,你可能使用一个图片而文字或者样式就可以 应付。或者你可能故意使用一个没有空间缩放的菜单结构 ...

more ...

char nchar varchar nvarchar 区别

在开发时候,发现数据库的一个字段用的是nchar(16),让我感觉很奇怪,我知道nvarchar可以变长,nchar会用空格填充,这在存取时候需要Trim( )操作,所以我一直不用nchar。而现在在产品中发现nchar的使用,不由觉得很奇怪。

私底下认为是效率的问题,一番Google之后发现一段文章详述了几种数据库文字类型存储的差异。

原文出处:char nchar varchar nvarchar 区别 - Rainbow - 博客园

联机帮助上的:

char(n)

定长

索引效率高 程序里面使用trim去除多余的空白

n 必须是一个介于 1 和 8,000 之间的数值,存储大小为 n 个字节

varchar(n)

变长

效率没char高 灵活

n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度 ...

more ...

Cakephp的国际化和poEdit的使用

原文出处:在Cakephp中使用i18n本地化程序,并使用poedit编辑语言文件 | 程序如此灵动!

alswl: 官方的帮助手册都没有这篇文章来的详细,太赞了。这篇文章不仅介绍了CakePHP的使用,更多的介绍了PoEdit的使用,图文并茂,着实详细,感谢原作者苏南。

----- 以下为原文 -----

Cakephp的很强大的i18n功能就是用来实现本地化和国际化的。他通过使用语言配置文件使得程序能够很好的适应变化进行本地化。通过新建locale/chi/ LC_MESSAGES/default.po文件,并指定语言选项为"chi"实现。本文中说的就是如何实现这个本地化过程,当然本文中的poedit并不是必须的 ,但是他可以使得工作效率更高。

一、关于i18n和L10n

这2个东东其实头一次我看到的时候也是一头雾水,但是经过百度的一通搜索,得出的结论就是,不管是几个n,最终的目的就是实现程序本地化就好了,说白了,就是由很多的 语言配置文件,反正我是这么理解的。大家也可以去看看,http://baike.baidu.com/view/372835.htm 这里有很详细的说明。

二、在Cakephp里面,实现本地化的方法

目前为止 ...

more ...

IE XML 缓存问题

明天开始上交毕业设计初稿,其中有一节是遇到的问题和解决办法。我把平时在BooguNote 中的琐碎片段整理出来,便有了此文。

PS:之前已经有过3篇相关毕设的文章:

[CakePHP的全局变量

](http://log4d.com/2010/05/cakephp-global-variables)

[FMS的80端口占用

](http://log4d.com/2010/05/fms-80-port-used)

[SWFObject 一款JavaScript的Flash检测与插入模块

](http://log4d.com/2010/05/swfobject)

---- 正文开始 ----

问题背景

系统要实现一个操作,即每次向同一个url 请求一个GET方法获取一个xml文件,这个xml文件记录着聊天数据并且是即时生成的。当用FireFox或者Chro me请求时候都能获得正确的数据,而IE则常常出现无法获取实时的XML数据。

而如果在地址栏中填入 http://localhost/AzaAjaxChat/src/Chat/getXml?messageId=41 这个原始的XML文件地址,就可以获取正确的XML文件。并且在下次IE ...

more ...