mysql-python for python2.7 on windows 32bit & 64bit

不容易呀,终于找到了 适合 python 2.7 的 mysql-python 的 32位和64位版本 看这里 http://www.codegood.com/archives/129/comment-page-2#comment-24971 保险起见,我还备份了一份下载: MySQL-python-1.2.3.win-amd64-py2.7.exe MySQL-python-1.2.3.win32-py2.7.exe

Archlinux下安装onering-desktop

onering 是一个以开发 web 应用的方式开发桌面应用的框架,使用 html5 和 css 构造UI,使用python或者其它语言实现软件功能,使用一个封闭的js来操作 web 页与操作系统间的通信,豆瓣FM桌面版就是使用 onering 开发的。 官方的安装手册中没有 archlinux 的,只有 ubuntu (wiki1, wiki2)的,不过大同小异。 安装 onering 1. 安装 qt 和 qtwebkit $ sudo pacman -S qt qtwebkit 2. 下载 onering 源代码 (没有 hg 的自行下载) $ hg clone https://code.google.com/p/onering-desktop/ 3. 安装 onering $ cd onering-desktop $ mkdir build $ cd build $ [...]

python批量转换文件编码

今天在 eclipse 中导入了个之前的 swing 项目,结果跑起来后乱码,检查代码发现竟然一部分 java 文件是 utf-8 编码,一部分却是 gb2312 的,而文件又比较多,一个一个去看显示太麻烦了,于是又该 python 出手了。 这里需要用到一个 python 的库 chardet 1.0.1 ,用于自动检测文件的编码,使用起来非常方便。 >>> import chardet >>> chardet.detect(open(r’E:\Workspaces\java\GCHMCreator\main\g2w\app\gchm\gui\ContentElement.java’).read()) {‘confidence’: 0.99, ‘encoding’: ‘GB2312′} detect文件返回的是一个字典,其中 encoding 的值为检测到的编码类型,confidence 为该编码的符合度, 我需要做这样的事: 遍历项目中所有的 .java 文件,并检测其编码 备份每个 .java 文件中 .java.bak 以便于恢复 将 .java 文件从检测到的编码格式转换成 utf-8 格式 提供一个恢复工具,在转换错误后能够恢复到原来的文件 提供一个清理工具,在确保文件转换正确后,可以清除备份的文件 其中最关键的部分在第二条,利用 chardet 检测出文件的编码 source_encoding,将文本内容通过 source_encoding decode 成 unicode [...]

python发送文件夹内容到邮箱

由于我经常需要备份文件夹下的内容到邮件里面,每个打开邮件,上传文件,发送,太过麻烦,其实每次发送的文件都是放在固定位置的,只是邮件标题不同而已,于是用 python 为自己写了个发送文件到邮箱的小工具,在任意目录下执行该脚本,并指定邮件标题,就将指定文件夹下的文件发送到邮箱中备份起来 。 #!/usr/bin/env python # coding: utf-8 from smtplib import SMTP, quotedata, CRLF, SMTPDataError from email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText from email import Encoders from sys import stderr, stdout import os import sys class ExtendedSMTP(SMTP): def data(self, msg): self.putcmd(“data”) (code,repl)=self.getreply() if self.debuglevel >0 : print>>stderr, “data:”, (code,repl) [...]

SAE中Flask Blueprint指定template_folder无效问题分析

之前的 解决SAE中Flask Blueprint指定template_folder无效问题 的方案中,是使用 render_template_string() 间接实现 render_template() ,但是这一方案有一个很大的缺陷,就是会丢失 jinja 模板的一些特性, 比如继承, include 等一些相关路径的操作,而且还要手动处理编码问题. 在 flask 的邮件列表中,有一个比较细致的讨论: Templates for blueprints. 以及 so 中的规避的方案: Two options come to mind. Rename each of the index.html files to be unique (e.g. admin.html and main.html). In each of the template folders, put each of the templates in a subdirectory of the blueprint [...]

解决SAE中Flask Blueprint指定template_folder无效问题

收到 SAEPython 的邀请后,便开始折腾起 Flask 了,不过在使用 Blueprint 时,发现一个非常诡异的问题 我在 /greatghoul/1/gmailgadgets/music1g/__init__.py 中定义了名为 music1g 的 Blueprint,并指定其 template_folder=’templates’ 不过当在在 Blueprint 中使用 render_template(‘index.html’) 时, 在本地测试时可以正确的解析到 /greatghoul/1/gmailgadgets/music1g/templates/index.html 但当我提交代码到 SAE 后,访问应用实际取到的结果是 /greatghoul/1/templates/index.html 我查看了本地和 SAEPython 上的 Flask 版本,都是 0.7.2,在列表和小组中提问均未得到解决 于是只好硬着头皮看了看 Flask 的源码,采用了一个临时替代的方案:使用 render_template_string() 实现 render_template() 来修正这个模板路径的问题. music1g = Blueprint(‘music1g’, __name__, url_prefix=’/gmailgadgets/music1g’, static_folder=’static’, template_folder=’templates’) def render_template(template_name, **context): template_file = os.path.join(music1g.template_folder, template_name) with music1g.open_resource(template_file) as f: [...]

wxPython布局GridBagSizer的应用

wxpython 的布局管理器,除了 BoxSizer ,大概就 GridBagSizer 比较常用了,相比于 java 的 GridBagLayout,那不是方便的一点半点(事实上我到现在仍然不会用 java 的 GridBagLayout)。 GridBagSizer 和 html 的 TABLE 元素比较像,你可以把组件添加到指定行列的位置,并且可以指定行列合并,以及可以自动撑大尺寸的填充块。 构造器 wx.GridBagSizer(integer vgap, integer hgap) vgap 和 hgap 分别用于指定组件的垂直和水平间距,可以理解为 table 的 cellspacing 属性。 添加组件 Add(self, item, tuple pos, tuple span=wx.DefaultSpan, integer flag=0, integer border=0, userData=None) pos 为组件添加到的位置 (row, col),从0开始索引的整形值。 span 为行列合并 (rows, cols),分别表示合并的行数和列数,可以理解为 table 的 rowspan 和 [...]

python-mutagen操作MP3的ID3信息

python 的 mutagen 库提供了便捷的 mp3 处理功能,操作 ID3 就像操作 dict 一样方便。 值得一提的是,mutagen 的信息都是采用的 unicode,这样在处理不同语言的 ID3信息就很方便了。同事每个字段都是支持多值的。 官方对于两个特性的描述: Unicode Mutagen has full Unicode support for all formats. When you assign text strings, we strongly recommend using Python unicode objects rather than str objects. If you use str objects, Mutagen will assume they are in UTF-8. (This does not [...]

Python发送简单电子邮件

尝试了 python 的 smtplib ,才发现发送邮件可以这么简单,行云流水,畅快自然。 # coding: utf-8 import smtplib from email.mime.text import MIMEText if __name__ == ‘__main__’: MAIL_FROM = ‘greatghoul@163.com’ MAIL_TO = ['greatghoul@gmail.com'] msg = MIMEText(‘Hello smtplib!’) msg['Subject'] = ‘Hello smtplib!’ msg['From'] = MAIL_FROM try: smtp = smtplib.SMTP() smtp.connect(‘smtp.163.com’) smtp.login(‘greatghoul’, ‘****’) smtp.sendmail(MAIL_FROM, MAIL_TO, msg.as_string()) print ‘email sent.’ smtp.close() except Exception, e: print e  

对现在的工作厌烦了

来博彦这边已经有大半年了,当时满怀对 python 的喜爱进入了这家公司,想着终于可以去搞 python 的开发,谁想竟然没有什么项目可以做,糊糊涂涂进入了一个 java 的项目组,还是做报表开发,使用的是 IBM Cognos,个人觉得这个号称三大 BI 之一的东西真的不怎么样,开发周期长,学习曲线较陡,报表缓存很失败,定制性太弱,除了它的web设计器和国际化做的比较出色外,很多方面只是在炫耀技术,当技术用的过了,就成了一种悲剧。 在这边的工作可谓枯燥乏味,作为一个心高气傲的开发人员,整天做这种谁都能做的报表工作,真的觉得很掉价,出去你都不好意思和人家打招呼。起初是纯的报表开发,后来零零散散接触到点前台工作,也都是些很二的设计,有谁把业务逻辑全用 javascript 来写呀,坑爹呀,用 java 处理会死呀,从来没有见过这么二的开发呀,化为还管他们的方式叫迭代呢,迭你妹呀,难道迭代就是后面的工作量是前面的N倍,而时间只是1/N吗?没有单元测试,走形式的代码Review(还只在前期有),二逼的测试人员。 半年来,积累了很多不爽: 测试 华为的测试人员经常把自己摆在设计人员的位置,对设计指指点点,自己认为不合理的地方,就给你提个 bug,而且很多人很浮躁,经常一个电话把你叫过去愤怒的说你的哪个哪个功能有严重问题,去一看,经常是他 sql 拼错或者他们的测试数据不符合业务逻辑。女孩子可能更适合做测试吧,那几个爷们儿们侧板天才测出一个牵强的问题,还死咬不放,动不动就是“这个不是问题还有什么是问题,请领导关注!”,大有古代准备死谏的言官的嘴脸,女孩子就不同了,说话和气,而且侧的东西真的很多时候都让你心悦诚服。 开发 我虽然很喜欢 javascript 这个脚本语言,但是用它来代替 java 来处理业务逻辑我却很不适应,因为它很不容易测试和维护,本来项目组对 javascript 精通的人就寥寥无几,出现了诡异的问题就很不容易解决(对于 javascript ,这种情况很常出现)。51js 的版主月影在《JavaScript王者归来》一术中对于何时使用 javascript 的建议是“在任何不得不用的场合使用,除此之外,不要在任何场合使用”,抵制脚本诱惑,不要放出盒子里面的魔鬼。 管理 这边的项目管理是混乱的,对工作的调度也是混乱的,经常会出现这样的场景,一段时间闲的发慌,一段时间忙的蛋疼。为了照顾华为的情绪,我们很多时候不得不在晚上甚至半夜 VT,有的时候还是周末,事实上没有一次迭代不是这样,不占用点你的私人时间,华为就感觉不舒服。华为的项目组有一个神秘的组织叫 MR,说是负责给我们做测试数据的,不过很少有及时做出过数据,即便做出来了,也没有一次做出的数据是可测试的。所以只能自己做,这里我所学的 python 知识倒是有了比较大的作用。项目做到后面,我身上压了六章报表,其中四张比较重量级的,一天一个报表提一个问题单,就是七个,任你改死也改不完,很多问题前面就给他们提过,他们不给时间,现在要改起来,需要很多工作量,他们不批,我也索性不改。 沟通 和本项目组的人沟通还好,大家都一团和气,像兄弟姐妹一样,不过和华为的人沟通,就想打仗一样,他们似乎习惯了对人颐指气使,总把自己处于一种高位者的状态,似乎自己什么都是队的一样。经我观察,华为里面的牛人分为两种,一种叫 NB,一种叫 SB,后者居于多数。我这人性子比较直,对于可交的朋友,我会掏心窝子的对待,对于看我不顺眼的人(事实上很多人看我不顺眼,我也看很多人不顺眼),和我看不顺眼的人,爷不伺候。 总的来说,已经有离开的打算了,最近在谈一个创业型的公司,做 iphone 上的线下社交的,很感兴趣。 对于华为,我曾有一句戏言:华为不实,无所作为。