PyCon China 2012上海站回顾

本次PyConChina2012大会在上海、北京两地举行,由各地GDG、TopGeek和CPyUG社区联合举办。大会内容丰富,涵盖Python全球发展、跨平台开发、程序加速、游戏开发、OpenERP应用等多个主题。此外,大会还邀请了外国演讲嘉宾EricCAUDAL先生介绍OpenERP7新特性。技术深度与社区活力并存,为开发者提供了丰富的学习与交流机会。

上周末,在上海、北京两地同时举行了PyCon China 2012大会,且在多地进行了直播。本次会议由各地GDGTopGeekCPyUG多个社区联合举办,上海站作为主会场,为期两天的会议内容非常丰富。

\

正式开场前,TopGeek创始人之一陈世欣介绍了赞助商、主办方以及各地的志愿者,概述了两天的会议内容,同时还向大家展示了Python在全球范围内的发展情况,以及社区情况,尤其是华蠎的订阅人数即将超过10000,这可能是Google Goups上最大的技术社区。随后,播放了两段简短的视频,一段是来自居住在日本的华人蟒友张若愚《Python科学计算》的作者)专门为大会录制的视频,另一段是Python之父Guido在今年PyCon US大会上的演讲

\

本次大会与去年的大会有很多相似之处,例如正式演讲都由Python社区中著名的“沈游侠”开场,本次沈崴为大家带来的《Python产品构建与发布指南》介绍了如何更好地用Python进行跨平台开发。有网友评价沈游侠的演讲点子很新,内容也很有料,就是难度有点大。

\

沈崴建议进行跨平台开发,可以先在Linux/Unix上进行开发,哪怕开发的是Windows上的程序,因为通常前者环境下开发的东西天然就是跨平台的。现场两位游戏方面的演讲嘉宾也分别表示自己正在使用或者知道跨平台方面的内容。他对比了Unix和Windows下一个完整的应用的目录结构,指出本次分享的内容主要关注于可执行文件和库。一般情况下,Windows并不认为Python程序是可执行的,因此就有了编译为“可执行程序”的问题,比如很常见的py2exe,还有目前非常流行的CythonPyPy

\

除了将Python程序编译为“可执行程序”,还可以使用Cython,将Python编译为库(so或dll),PyPy也有同样的功能,只是PyPy目前缺乏对多个Entry Point的支持。但是,目前不建议使用Python进行嵌入式开发。Python程序也可作为服务运行在后台,Unix下有各种方式可以将程序放到后台作为Deamon运行;Windows下可以使用pywin32,或者索性把程序放到托盘(Systray)里,PySide就能通过少量代码实现该功能。

\

在程序界面方面,Unix程序员倾向于先把东西做成库,然后变成CLI(命令行方式),最后用一个GUI通过Pipe或Socket将它封装一下。而Windows程序员通常一开始就会做一个GUI的程序。Python中有不少GUI库可供选择,比如tk、gtk、PySide(也就是QT)、wxPython和PyGame。除了这些传统的GUI库,还可以用Web的方式来开发一个GUI程序,先写一个Web服务器,再写一个GUI程序,其中嵌入WebKit,由它去访问网页。可以通过OnBeforeNavigate截取用户的URL跳转,甚至直接用AJAX进行控制,而最简单的方式是让JavaScript和Python直接互相调用。沈崴讲到了他主导的两个开源项目,仍在开发中的Liubao可以方便地实现JavaScript和Python的相互调用,而著名的Eurasia也即将发布3.2版本,比3.1增加了File IO、Pipe等方面的内容。

\

随后,土豆网李小红的演讲《让程序运行更快》也与去年大会上黄冬的演讲类似,技术含量十足,只是内容与Python关系不是很大,但还是让听众大呼过瘾。他先从Varnish比Squid快说起,详细对比了Squid和Varnish在各种命中和不命中时的工作情况。Squid在诞生之时,OS还没有VM管理功能,所以自己做了一套管理机制,与现代OS的VM管理有冲突;而Varnish则利用了现代OS自身的管理机制。Varnish更快的原因主要在于:

\
  • 多线程,有效利用多核和CPU资源\
  • 内存访问和复制次数少\
  • 处理请求系统调用次数少\
  • 有效利用操作系统虚拟内存\

有这样的效果,除了硬件的发展,很大程度上也与现代OS的进步有关:

\
  • 从poll到epoll\
  • 零内存复制的sendfile接口\
  • gather io减少系统调用——readv、writev\
  • 中断bottom half处理演进\
  • 操作系统page cache\

虽然李小红本人并不从事Python开发,但是土豆在日常工作的很多地方都用到了Python。比如土豆的用户体验分析,短时间内进行百G日志分析,就结合了Shell/Python/awk/c,每次针对半个小时的日志分析,综合了管道、临时文件等众多技术。他为大家介绍了Python的Dictionary实现,使用Open Addressing解决Hash冲突;结构体中自带8个桶的小Hash表;保持最多80个不同的Dictionary,这加快了Dictionary的生成和释放;删除元素时不会缩减桶数量,减少内存访问次数。针对Python解释器,由于存在大锁、多线程效果差的问题,可以考虑向Java VM或者Linux Kernel学习。他建议大家在优化程序时能抱着这样的想法:

\
  • 多度量,多思考\
  • 少改动\
  • 找到改动的支点(不到20%的努力能带来80%的效果)\

本次大会还出现了外国演讲嘉宾的身影,比如OpenERP专家Eric CAUDAL先生,他为大家介绍了最新的OpenERP 7中的众多特性。由于在做的听众对OpenERP的了解不多,所以他先简单介绍了一下OpenERP——一款非常专业的用Python开发的开源ERP软件。OpenERP目前的发展势头良好,且新版本带来了很多出众的功能,CAUDAL先生的演示非常吸引人。一些嘉宾表示,虽然OpenERP和以前的Plone有很多相似之处,但它让人眼前一亮,这让人们对Python开发复杂系统更有信心了。 OpenERP不仅是个ERP软件,也是一套值得学习的框架,新版本在框架方面也做了一些改动,第二天的《人人可以化半小时开发一个全功能 OpenERP 模块》也很好地体现了这点。

\

既然是Python爱好者的大会,自然少不了纯技术的话题,许智翔的《元编程在 Redis ORM 中的应用》就Hack味十足,从何为元编程入手,层层深入,最后讲到了其在redisobj ORM框架中的应用,技术深度让人折服。无独有偶,上届的演讲嘉宾潘俊勇本次也带来了一个与Redis相关的主题,可见在Python项目中使用Redis还是很普遍的。

\

游戏是每次PyCon China大会中都少不了的内容,除了老朋友林伟、赖勇浩和王健纷纷带来了自己的主题,还有很多新朋友介绍了自己在Python游戏开发方面的经验。本次的游戏主题包括:

\
  1. 《实战游戏客户端》\
  2. 《网游开发中的 Python 组件》\
  3. 《自动化即时战斗游戏解决方案》\
  4. 《Python如何帮助「逆转三国」获得成功》\
  5. 《网页游戏的跨界开发》\
下载方式:https://pan.quark.cn/s/a4b39357ea24 布线问题(分支限界算法)是计算机科学和电子工程领域中一个广为人知的议题,它主要探讨如何在印刷电路板上定位两个节点间最短的连接路径。 在这一议题中,电路板被构建为一个包含 n×m 个方格的矩阵,每个方格能够被界定为可通行或不可通行,其核心任务是定位从初始点到最终点的最短路径。 分支限界算法是处理布线问题的一种常用策略。 该算法与回溯法有相似之处,但存在差异,分支限界法仅需获取满足约束条件的一个最优路径,并按照广度优先或最小成本优先的原则来探索解空间树。 树 T 被构建为子集树或排列树,在探索过程中,每个节点仅被赋予一次成为扩展节点的机会,且会一次性生成其全部子节点。 针对布线问题的解决,队列式分支限界法可以被采用。 从起始位置 a 出发,将其设定为首个扩展节点,并将与该扩展节点相邻且可通行的方格加入至活跃节点队列中,将这些方格标记为 1,即从起始方格 a 到这些方格的距离为 1。 随后,从活跃节点队列中提取队首节点作为下一个扩展节点,并将与当前扩展节点相邻且未标记的方格标记为 2,随后将这些方格存入活跃节点队列。 这一过程将持续进行,直至算法探测到目标方格 b 或活跃节点队列为空。 在实现上述算法时,必须定义一个类 Position 来表征电路板上方格的位置,其成员 row 和 col 分别指示方格所在的行和列。 在方格位置上,布线能够沿右、下、左、上四个方向展开。 这四个方向的移动分别被记为 0、1、2、3。 下述表格中,offset[i].row 和 offset[i].col(i=0,1,2,3)分别提供了沿这四个方向前进 1 步相对于当前方格的相对位移。 在 Java 编程语言中,可以使用二维数组...
源码来自:https://pan.quark.cn/s/a4b39357ea24 在VC++开发过程中,对话框(CDialog)作为典型的用户界面组件,承担着与用户进行信息交互的重要角色。 在VS2008SP1的开发环境中,常常需要满足为对话框配置个性化背景图片的需求,以此来优化用户的操作体验。 本案例将系统性地阐述在CDialog框架下如何达成这一功能。 首先,需要在资源设计工具中构建一个新的对话框资源。 具体操作是在Visual Studio平台中,进入资源视图(Resource View)界面,定位到对话框(Dialog)分支,通过右键选择“插入对话框”(Insert Dialog)选项。 完成对话框内控件的布局设计后,对对话框资源进行保存。 随后,将着手进行背景图片的载入工作。 通常有两种主要的技术路径:1. **运用位图控件(CStatic)**:在对话框界面中嵌入一个CStatic控件,并将其属性设置为BST_OWNERDRAW,从而具备自主控制绘制过程的权限。 在对话框的类定义中,需要重写OnPaint()函数,负责调用图片资源并借助CDC对象将其渲染到对话框表面。 此外,必须合理处理WM_CTLCOLORSTATIC消息,确保背景图片的展示不会受到其他界面元素的干扰。 ```cppvoid CMyDialog::OnPaint(){ CPaintDC dc(this); // 生成设备上下文对象 CBitmap bitmap; bitmap.LoadBitmap(IDC_BITMAP_BACKGROUND); // 获取背景图片资源 CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap* pOldBitmap = m...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值