QClub大连9月22日技术聚会

某次QClub大连聚会以后,与侯伯薇http://weibo.com/houbowei 微博上通气,问能不能有一个专门的聚会讨论编程语言,伯薇也正有此意,于是我就选了Lua作为题目。侯伯薇联系到七牛的许式伟http://weibo.com/xushiweizh ,专程从上海飞到大连介绍Go语言。

周六这天大连天公不作美下起了阵雨,我在微博上稍稍担心了一下,到了中荷人寿,发现许式伟已经在那里和侯伯薇聊天,还有liteIDE的作者也在。许式伟和微博照片基本没差别,但是感觉更瘦一些,另外也不不是很善言谈。稍稍聊了一阵我们就开始分享环节了,观察了一下到场的大概有20多人吧,不算很多。

开始先由我介绍Lua编程语言,做了一个调查,发现到场的C++、C#、Java基本上差不多比例,听说过Lua编程语言的也有几个,后来聊天知道某位兄弟是欧兰辉老师公司里面做pascal连接Lua的。首先介绍了为什么选择Lua,最主要一点是用来玩,比如弱引用,基于原型面向对象这些概念都是用Lua学起。由于担心我讲的时间太长影响许式伟,稍稍把速度提前了一些,有些内容简单提一下就略过了,后来发现还是讲快了。

许式伟关于Go语言的分享主要是两部分,一个是为什么选择Go,因为他喜欢Go语言的哲学,并且坚信Go会成为云计算最重要的编程语言,互联网时代的汇编(这个倒是觉得JS已经是了,没法争)。然后许式伟主要针对Go语言一些让人眼前一亮的地方着重介绍,比如接口机制,defer等等。本来我期望许老师介绍一下goroutine和channel,但这方面没有提。

由于许式伟提了某些Go有趣的地方,我也想补充一下,首先Lua也支持多返回值,这是CLU的特色。另外Lua也没有try catch,但是有pcall和xpcall调用机制,另外对于接口这个机制,完全可以用table模拟出来。

由于家里有事情,我在openspace环节听了一阵就离开了,非常不好意思,本来打算多聊一阵,和伯薇小聚一下,也只能等下次了。

最后大力感谢许式伟到大连做了如此精彩的分享,这是大连本地技术圈很难得的好事。也感谢侯伯薇一直坚持组织QClub大连的活动,给我们这些喜欢技术、喜欢一起聊天的开发者这么好的一个活动,十分不容易,再次感谢!

一些PPT截屏,完整的可以到这里下载: “Lua 编程语言0921.pptx” http://vdisk.weibo.com/s/d7vUZ

微博上的程序员

不写神马头衔,排名没有前后,也不管是VP,CIO,CTO,还是创始人,大家都是程序员。这里面的名单,大多数是我关注的。

大连IT圈子的:

ouland 欧老师 http://weibo.com/oulan

侯伯薇侯老师 http://weibo.com/houbowei

天行者-阿纳金 天老师 http://weibo.com/thinkinginlife (其实是孙老师,吼吼)

张卫滨 张老师 http://weibo.com/zhangweibin1981

gamtin 刘老师 http://weibo.com/gamtin

原数据 http://weibo.com/fangchuxuan

 

微博上的程序员:

老赵 http://weibo.com/jeffz

图灵刘江 http://weibo.com/turingbook

蔡学镛 http://weibo.com/rebol

淘宝褚霸 http://weibo.com/tchuba

放翁_文初 http://weibo.com/fangweng

庄表伟 http://weibo.com/zhuangbiaowei

韩磊 http://weibo.com/grhunter

此处空无一人 http://weibo.com/kunfirst

陈庆吉 http://weibo.com/chenqingji

淘叔度 http://weibo.com/tshudu

TimYang http://weibo.com/timyang

孟岩怪力乱神 http://weibo.com/smoothmonk

邓草原 http://weibo.com/dcaoyuan

计算机之子 寒冬 http://weibo.com/wintercn

yongsun http://weibo.com/yongsun

陈晓鸣在百度 http://weibo.com/acumon

shiningray http://weibo.com/shiningray

lordhong http://weibo.com/lordhong

wenzhong http://weibo.com/21376388

阿北 http://weibo.com/ahbei

西祠响马 http://weibo.com/xicilion

郭安定 http://weibo.com/oiionet

陈硕 http://weibo.com/giantchen

淘宝叔同 http://weibo.com/jlusdy

AKaras http://weibo.com/akaras

华君 http://weibo.com/fenghuajun

rednaxelafx http://weibo.com/rednaxelafx

miloyip http://weibo.com/miloyip

赖勇浩 http://weibo.com/gzlaiyonghao

TreapDB http://weibo.com/treapdb

大城小胖  http://weibo.com/finscn

anytao http://weibo.com/anytao

徐宥 http://weibo.com/u/1722092710

装配脑袋 http://weibo.com/ninputer

lidaobing http://weibo.com/lidaobing

章亦春 http://weibo.com/agentzh

左耳朵耗子 http://weibo.com/haoel

田春冰河 http://weibo.com/tianchunbinghe

http://weibo.com/pythoncn

潘爱民 http://weibo.com/panaimin

韩祝鹏 http://weibo.com/functional

程序员老高 http://weibo.com/laogaome

egmkang http://weibo.com/egmkang

limodou http://weibo.com/u/1689940061

chaoslawful http://weibo.com/u/1919389283

韦恩卑鄙 http://weibo.com/waynebabywang

delphij http://weibo.com/delphij

乐呵呵DE黄药师 http://weibo.com/ohuang

Livid http://weibo.com/livid

拜康神 http://weibo.com/u/2365338532

摇摆巴赫 http://weibo.com/bachmozart

徐冬齐baidu http://weibo.com/pkuxdq

珣新 http://weibo.com/liseen

刘未鹏pongba http://weibo.com/pongba

简悦云风 http://weibo.com/deepcold

Lance http://weibo.com/lance

时蝇喜箭 http://weibo.com/timeflieslikeanarrow

网易汪源 http://weibo.com/breezes

王咏刚 http://weibo.com/ygwang

程序员邹欣 http://weibo.com/sdxinz

帝归 http://weibo.com/unionx

PeakJi http://weibo.com/peakji

温谦 http://weibo.com/u/1906984307

猛禽 http://weibo.com/raptorz

bluedavy http://weibo.com/bluedavy

徐珂铭 http://weibo.com/xukevim

二宝真好记 http://weibo.com/paul1978

网路冷眼 http://weibo.com/lewhwa

董诣 http://weibo.com/dongyi1110

朴灵 http://weibo.com/shyvo

唐福林 http://weibo.com/tangfl

我是aleafs http://weibo.com/ialeafs

程显峰-Mars http://weibo.com/marscheng

翁翊成 http://weibo.com/173989958

GeniusVczh http://weibo.com/vczh

larrycaiyu http://weibo.com/124565421

袁红岗 http://weibo.com/ivatar

周惟迪 http://weibo.com/zwd33

suavesu http://weibo.com/suavesu

爱的马斯特 http://weibo.com/chokyxie

caoxg http://weibo.com/caoxg

sunli1223 http://weibo.com/sunli1223

observer http://weibo.com/u/1924448180

zoomquiet http://weibo.com/zoomquiet

老黄 http://weibo.com/huangdong

徐明明 http://weibo.com/64398966

耿新跃 http://weibo.com/flycondor

Jserv http://weibo.com/microjserv

横刀天笑 http://weibo.com/yuyijq

dreamhead http://weibo.com/dreamhead

敲代码的张洋 http://weibo.com/ericzhangbuaa

但以理_高博 http://weibo.com/gaodaniel

郭昂9 http://weibo.com/guoang323

Iam周志明 http://weibo.com/icyfenix

编程子(复姓编程) http://weibo.com/solrex

Sword-Breaker http://weibo.com/u/2148262504

飞龙非龙 http://weibo.com/felinx

程辉 http://weibo.com/freedomhui

纳米咖啡 http://weibo.com/zengnami

那谁 http://weibo.com/lichuang

johnhax http://weibo.com/haxy

常新居士 http://weibo.com/renfake

tonybai http://weibo.com/bigwhite20xx

mikespook http://weibo.com/mikespook

猫叔shironeko http://weibo.com/weidagang

洪强宁 http://weibo.com/hongqn

思考和计算的大狗 http://weibo.com/haoxilong

遊戲設計愛飛翔 http://weibo.com/eastarlee

冠城 http://weibo.com/parallellabs

拔赤 http://weibo.com/jayli

李先静 http://weibo.com/u/2352470455

刘鑫-MarchLiu http://weibo.com/marchliu

池建强 http://weibo.com/idreamland

ghosTM55 http://weibo.com/ghostm55

LeoXing http://weibo.com/3177850

淘李福 http://weibo.com/fsword

玉伯也叫射雕 http://weibo.com/lifesinger

王洪超 http://weibo.com/joycode

剃刀阿远熊 http://weibo.com/artyyouth

骆逸 http://weibo.com/royshan

lzprgmr http://weibo.com/lzprgmr

codeplayer http://weibo.com/yiprogrammer

凌坤_编译点滴 http://weibo.com/u/1092530881

BYVoid http://weibo.com/byvoid

熊力 http://weibo.com/grapef

xlvector_Hulu http://weibo.com/xlvector

杜威Dewey http://weibo.com/imduwei

王哲Walzer http://weibo.com/walzer

wangbin579 http://weibo.com/tcpcopy

风中叶的思考 http://weibo.com/fengzhongye

冻顶冻顶 http://weibo.com/taotaotw

林仕鼎 http://weibo.com/linshiding

蒋晟VC http://weibo.com/jiangshengvc

kaneboy http://weibo.com/kaneboy

单挑王子davidx http://weibo.com/kingheaven

易度-潘俊勇 http://weibo.com/panjunyong

吴军 (不确定是否算程序员)http://weibo.com/langchaozhidian

jeff_kit  http://weibo.com/jeffjie

Python发烧友 http://weibo.com/81715239

Laruence http://weibo.com/laruence

衣明志 http://weibo.com/qihangnet

周爱民 http://weibo.com/aimingoo

陈小玉 http://weibo.com/pp94

压力很大同志 http://weibo.com/alexislm

宝玉XP http://weibo.com/dotey

xdite (不确定是不是真的叉带)http://weibo.com/xdite

付超群 http://weibo.com/fuchaoqun

许式伟 http://weibo.com/xushiweizh

珧麒麟 http://weibo.com/kirinyao

oneoo http://weibo.com/oneoo

郑晖_冒号  http://weibo.com/xyz98

Sir阿怪 http://weibo.com/aguaithefreak

QLeeLuLu http://weibo.com/qleelulu

郑昀 http://weibo.com/yunzheng

飞林沙 http://weibo.com/lovekym

廖雪峰 http://weibo.com/liaoxuefeng

 

Python使用Outlook发送邮件

In my testing, it could work with Outlook2013.

# http://mail.python.org/pipermail//python-win32/2011-August/011754.html
# http://www.java2s.com/Tutorial/Python/0460__Windows/OutlookExample.htm
# http://www.outlookcode.com/

import win32com.client

outlook = win32com.client.Dispatch(“Outlook.Application”)
outlook2 = win32com.client.Dispatch(“Outlook.Application”).GetNamespace(“MAPI”)

# Count the number of messages in the inbox
#inbox = outlook2.GetDefaultFolder(win32com.client.constants.olFolderInbox)
#messages = inbox.Items
#print “number of messages in inbox:”, messages.Count

mail = outlook.CreateItem(win32com.client.constants.olMailItem)

recip = mail.Recipients.Add(‘[email protected]’)
recip = mail.Recipients.Add(‘[email protected]’)
subj = mail.Subject = ‘Python-to-Outlook Demo’

body = [“This is email from Python script”]
body.append(“\r\nTh-th-th-that’s all folks!”)

mail.Body = ‘\r\n’.join(body)
mail.Send()

界面自动测试工具UI auto test tool

与unit test不同,我们项目特点决定了,一个可以录制回放键盘鼠标动作的自动化界面测试工具更为有用。基于这种想法,我们组里某个新人的training项目就是完成这个小工具。

C#可以使用这个工程打底 http://www.codeproject.com/Articles/28064/Global-Mouse-and-Keyboard-Library 加入一些定制代码,就可以录制键盘和鼠标了,我还要求加入定时抓屏,重复回放的功能,在我们最近的项目开发中非常有用,比如测试某个动作300次,看内存消耗,不用这个工具就崩溃了。

Python也可以达到类似效果,比如这个项目autopy https://github.com/msanders/autopy/ 或者是Pywinauto http://code.google.com/p/pywinauto/  也可以通过PyWin32直接访问windows api达到效果。还有一种办法就是 http://sikuli.org/ 这个sikuli的问题是录制起来稍微麻烦了些,不是那么直接。

大连开发组开发流程及注意事项说明

1,开发过程中注意要遵守以下流程:

需求分析(邮件或者文档);设计(设计文档,小组设计评审,任务分派,截止时间确认);编码(daily report, daily check in, daily code review);收尾阶段小组代码评审;需求验证;测试完成(测试计划及结果);签收;项目总结。

2,如果感觉任务比较复杂,问题比较棘手,自己研究了一会没有很好的解决方案。请马上联系我或者咨询组里其他同事;如果组内同事也解决不了,再求助国外同事。先发邮件说明问题,紧急的任务马上搭建电话会议保证及时沟通。

3,尽量避免同时做三个及三个以上的任务。确保自己有足够的时间完成任务。

4,项目流程方面,如果觉得需要有例外,比如不写什么文档,不做什么评审,请事先与我讨论。

5,在开始阶段对最后整体实现效果有大致理解,可以预估技术难点所在,并且实现进行研究和求助(这一点我们做得很不好)。对于项目可能有的需求变化有一定的预估和计划。

6,细致,仔细,认真;多思考,多学习,多沟通。

7,允许犯错,但是要确保同样错误不要再次出现,从问题中吸取经验教训。

8,及时回复邮件。到办公室后第一时间检查邮件和calendar当天会议安排。对于重要邮件,应该记录在本上作为TODO

9,离开公司前,检查当天TODO任务,是否有邮件没有回复,是否有重要任务没有完成。

10,对我或者任务负责人的具体分派有疑问,可以讨论提出。如果已经拍板决定,就必须遵守决定,而不是按照自己想法我行我素。

11,随身带一个笔记本,随时记录问题,心得体会,TODO,解决方案等等。

12,每天的工作都应该有结果产出。学习应该有文档总结汇报,项目应该有流程设计文档/代码/测试文档,项目进度有每日进度报告。

 

避免以下情况发生:

1)  将就,马马虎虎,不求完美。

2)  需求不清楚,也不与onshore沟通澄清。

3)  任务不清楚,就开始动手编码;时间管理不好,没有缓冲,截止时间定于最后一秒。

4)  没有设计讨论,自己觉得没有问题,直接开发。

5)  有问题,不做优先级分派,先开发了再说。

6)  代码一直没有check in,累积三五天再提交;需要check in的时候,一次加入大量的代码修改。代码check in没有评审,也不做说明。

7)  代码不注释,命名不规范,不关注静态分析/debug exception。

8)  “我觉得没问题,但是没有check”

9)  代码写完了,就认为是项目完成了;也只写了代码,没有设计没有文档没有测试

10) 只有最后阶段才有问题,在开始时不考虑如何技术实现或者觉得不会有问题,不做风险评估

11) “代码为什么好用?不知道;出问题的root cause?不知道”

12) “这段代码干什么用?别人就这么写,我不知道,没研究过”

13) “这个问题好像是,也许是,我猜”

14) (讨论决定使用方案A,开发一段时间后)“我觉得这样更好,所以我就用自己这个方案,方案A有问题,如何如何”

Lua编程学习及资源

1,Lua学习用什么书?

推荐《Lua程序设计》(简称PIL),译者@周惟迪 (搜Weibo),可以在淘宝上搜到卖家。比如 http://item.taobao.com/item.htm?id=13569912375

也可以在网上搜到中文版文档,另外可以看手册http://www.lua.org/manual/5.1/ 如果新学Lua,可以直接看Lua5.2的手册 http://www.lua.org/manual/5.2/

2,Lua编程相关博客和网络链接?

国内一直推Lua的高手只有云风 http://blog.codingnow.com/ 我这里也写了一些Lua相关的普及性内容 http://sunxiunan.com/?cat=21

推荐Lua学习者必看的网站,http://www.lua.org 是首选,可以下载源代码,书籍;还有邮件列表的链接 http://www.lua.org/lua-l.html 建议大家加入讨论,其中有[ANN]标记的是项目发布通告,另外技术讨论也非常深入;Lua的wiki也值得经常光顾 http://lua-users.org/wiki/ 比如这个FAQ就很有价值 http://lua-users.org/wiki/LuaFaq ,还有一个比较完整版本的FAQ在这里 http://www.luafaq.org/ ,我也有一个中文版的LuaFAQ在这里 http://sunxiunan.com/?p=1515;最后建议大家经常看的网站是github.com,搜索Lua关键字就可以找到很多开源项目。

3,Lua安装程序?

Ubuntu以及Debian下安装 http://sunxiunan.com/?p=1529 ,也可以直接用apt-get安装。

Windows下的安装可以安装http://code.google.com/p/luaforwindows/这个集成安装包,里面的第三方库有些旧,但是一般使用也足够了。

4,我博客中关于Lua编程的部分文字推荐

http://sunxiunan.com/?p=2044 Lua的优点以及与Javascript不同之处

http://sunxiunan.com/?p=1949 Lua和Python协程相关资料

http://sunxiunan.com/?p=1919 Lua非官方FAQ翻译

http://sunxiunan.com/?p=1681 Lua Unicode(wiki翻译)

http://sunxiunan.com/?p=1680 static link luasocket into lua with VC2010 under windows,静态链接Luasocket到Lua可执行程序中

http://sunxiunan.com/?p=1654 【译文】比较Lua协程与Python生成器

http://sunxiunan.com/?p=1597 谈新技术学习方法-如何学习一门新技术新编程语言

http://sunxiunan.com/?p=1503 Lua Wiki 部分翻译 — Lua源代码

http://sunxiunan.com/?p=1498 How to create c extension for lua and pass complex structure step by step

http://sunxiunan.com/?p=1447 勿用屠龙来杀猪-论如何正确整合Lua与C++

http://sunxiunan.com/?p=1358 Lua代码阅读(1),可惜烂尾了

http://sunxiunan.com/?p=1258 Lua通过COM调用外部程序excel及调用windows api

5,有趣的Lua开源项目推荐

第一名当然是LuaJit http://luajit.org/ 最新版本Luajit2.00 beta10,有人把其中的FFI抽取出来做成了单独项目,可以在github上搜到。

http://openresty.org/ 这是@agentzh 的项目,基于Nginx和lua-module做的一个整合包,如果是新的大并发系统,很大力推荐使用openresty。

https://github.com/keplerproject/ Lua web开发相关的一个项目,包含不少子项目。其中Luafilesystem和Luarocks很知名!

https://github.com/stevedonovan/Penlight Penlight是一个对Lua标准库的扩展,有点类似Jquery对于Javascript的作用。

https://github.com/fab13n/metalua metalua,给Lua加上了强大的元编程能力(metaprogramming),0.5版使用Lua实现,不需要修改Lua代码了!

https://github.com/antirez/redis redis的2.6版本包含了Lua脚本能力

https://github.com/kripken/emscripten 可以将Python,Lua通过llvm编译成javascript

https://github.com/leafo/moonscript 就相当于coffeescript和javascript的关系一样,一种新的语言,可以编译成Lua代码。

另外有个项目Lua2c可以把lua编译成c,这个比较简单,一搜便有。

https://github.com/LuaDist/Repository 最新出现的Lua安装器,下载后编译一条龙服务,类似nuget,gem,easy_install这些程序,Windows下也可以使用(mingw)。

https://github.com/luvit/luvit 仿造node.js,用Lua代码进行高并发编程

https://github.com/jmckaskill/luaffi 前面说的从luajit抽取的ffi项目

https://github.com/LuaLanes/lanes Lanes is a lightweight, native, lazy evaluating multithreading library for Lua 5.1

http://www.lua.inf.puc-rio.br/luagravity/ Lua下的async,await,这个项目应该很好玩,但是我没仔细看过。LuaGravity is a reactive language that implements the synchronous approach for concurrency. It is roughly based on Esterel and FrTime, two synchronous reactive languages, the former having an imperative style, the latter being functional.

https://github.com/chaoslawful/lua-nginx-module Nginx的Lua模块,openresty的核心部分,其中cosocket是利用协程实现的socket,好处是什么,我也不知道啊(因为服务器端编程实在很少接触)

总之,

大家可以到 https://github.com/saga/following 看我watch的项目,其中很大一部分是跟Lua相关的。