使用Lua编写Utility的一些小贴士

string trim功能

 1: function string_trim(s)

 2: if s == nil then

 3: return

 4: end

 5:  

 6: return (string.gsub(s, "^%s*(.-)%s*$", "%1"))

 7: end

检查某个字符串是不是指向合法目录。

 1: function check_directory(s)

 2: s = string_trim(s)

 3: if not s or s == "" then

 4: return false

 5: end

 6:  

 7: if string.sub(s, -1, -1) == [[\]]then

 8: s = string.sub(s, 1, -2)

 9: end

 10:  

 11: local attr = lfs.attributes (s)

 12: if (attr and attr.mode == "directory") then

 13: return true

 14: end

 15:  

 16: return false

 17: end

对于文件操作,最好先备份一下原来文件:

 1: local str = "copy \"" .. Folder .. '\\log.db' .. "\" \"" .. Folder .. '\\log.db' .. "." .. os.time() .. "\" /v /y"

 2:  

 3: os.execute(str)

对于sqlite的操作,注意使用了一个自增myid作为key。

 1: Db1 = sqlitelua.open(upFolder .. '\\mainlog.db')

 2:  

 3: Db1:exec('CREATE TABLE newfiles(myid INTEGER PRIMARY KEY AUTOINCREMENT, myname, myfolder)')

 4:  

 5: local stmt1 = Db1:prepare[[ INSERT INTO newfiles VALUES (:myid, :myname, :myfolded) ]]

 6:  

 7: stmt1:bind_names{myname = new_name, myfolder = currentFolder}

 8:  

 9: stmt1:step()

 10: stmt1:reset()

 11: stmt1:finalize()

《犯罪心理第五季》16 观后感

1,当你外出的时候,时时抓住孩子的手。

2,生在美国很幸福。如果这事情发生在中国,自求多福吧。

3,要有信念。要有枪。

4,斯德哥尔摩综合症是一种非常可怕的症状。实际上,你我现在都有这种症状。病人忘记了自己也有力量,也可以反抗。

这一集没有什么血腥的场面,但是却让我毛骨悚然,比看前面剧集要印象深刻的多。因为看完了真的感觉害怕。

Hope is the thing with feathers that perches in the soul

and sings the tune without words and never stops at all.

想看《犯罪心理》的朋友可以在pps或者风行上找到,很好看,强烈推荐。

最近一些照片

陆陆续续拍了两个卷,终于洗出来了,show出来看看。

28950014 

28950022

这张不怎么清晰,但是感觉很温馨。

28950023

28950024

28950030

28950034

28950036

姐妹花。

     28930013

28930014

小姐妹。

28930020

28930023

28930032

最近的小辫子都是萌萌自己扎的。

28930033

一些有用的关于memory leak检查的文字

问题起源来自这个帖子:

继续阅读 »

Windows桌面开发者的必备软件

如果你新安装好了一台WindowsXP或者Windows7的机器,作为一个开发人员,我建议安装下面这些软件:

1,WinMerge.

http://winmerge.org/

2, Lua for windows,或者Python或者Ruby,选择一个你喜欢的脚本语言。LuaForWindows还自带了一个Scite编辑器,节省了找一个程序员相关编辑器的步骤。

http://luaforwindows.luaforge.net/

3,7-zip,不需要安装winzip或者winrar了

http://www.7-zip.org/

4,Sysinternals套件,windows开发必备。

http://technet.microsoft.com/en-us/sysinternals/default.aspx

5,Windbg,windows调试必备。

http://www.microsoft.com/whdc/Devtools/Debugging/default.mspx

6,FileZilla,开源的ftp软件。

http://filezilla-project.org/

7,Visual Studio2008 express,微软系的同学必须要的。当然,你应该很容易搞到更高级的版本。如果不玩dotnet那些,可以下载个VC++6.0,足够用了。

http://www.microsoft.com/express/Downloads/#webInstall

Java系的朋友,自有选择,不多废话。

8,Debug Diagnostic Tool,检查memory leak很好用。

http://www.microsoft.com/downloadS/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&displaylang=en

9,bitnami stacks,如果你搞什么php,ruby,python,mysql之类的web开发,这里面的集成安装包必有一款适合你。不想安装的还可以下载vmware镜像文件。

http://bitnami.org/stacks

10,daemon-tools,虚拟光驱软件。

11,文本编辑器,notepad++或者gVim都不错。

http://portableapps.com/apps

12,SSH软件推荐putty,破墙必备。

http://portableapps.com/apps/internet/putty_portable

13,VNC类的软件可以用这个

http://portableapps.com/apps/utilities/teamviewer_portable

也可以用QQ或者netmeeting之类的,也是必备。

14,Picpick,抓屏软件,非常推荐。

http://picpick.wiziple.net/

15,版本管理工具,可以用subversion或者git。github算是个不错的选择。我经常把小代码片段贴到gist中。其中visualsvn有免费服务器程序下载。

http://www.visualsvn.com/

http://subversion.tigris.org/

http://github.com/guides/using-git-and-github-for-the-windows-for-newbies

16,如果搞网络相关开发,可以下载抓包工具wireshark(原名ethereal)。

http://www.wireshark.org/

http也可以试试这个软件

http://www.fiddler2.com/fiddler2/ 

17,VMWare虚拟机,最好搞一个,里面装上Debian,玩玩Linux,另外装个干净的windowsXP,压缩起来备用,测试中经常会用到。

Lua程序设计(第二版)阅读笔记

 

很有意思的是,下面的代码是有效地,我也是看了书才知道。代码后面可以跟着,也可以不跟分号。

 1: a = 5 b = 6

 2: c = 7; d = 8;

 3: print(a, b, c, d)

Lua中,什么是字母依赖于locale的设置,也就是中文环境下,中文可以用作变量名(?这个需验证)

Lua有大小写之分。

常用的块注释方式是–[[然后以--]]结尾,这样如果想取消块注释,就把开头多加个-就行了。

LUA_INIT内容为@文件名,解释器会先执行这个文件(?需验证)。

Lua中的(以后省略)函数为第一类值,比如print = type; print(a); 这个是合法合理的,但是print就没有了,一般用于沙箱sandbox操作。

条件判断只有两种情况为假,false以及nil。其余都为真。

number是实数(通常下)。用双精度代表整数,只要这个数字不大于10的14次方就没问题(本书这里笔误为1014,shit,我对照了PIL第一版确认的)。重新编译数字类型可以方便用于其它平台luaconf.h。数字可以写作4.57e-3 0.3e12 5e+20这种科学计数法。

Lua可以存储任意二进制字符到字符串类型中。5.1支持的长括号写法[===[匹配]===],只要等号数量移植。字符串与数字运算,数字会转成字符串,可以用tonumber把字符变成数字。

 1: local str = "5e+20"

 2: local num = tonumber(str)

 3: print(num)

数字转成字符,可以用tostring或者让数字与空字符串连接。

5.1的字符串支持#。

local a = {}创建了一个table,并且让a引用这个table,通过a这个变量我们可以操作这个table,如果没有变量继续引用这个table(a = nil),Lua会负责回收内存销毁它。

a["nameX“] = 5 等价于 a.nameX = 5,注意key里面的引号。local a = {}; a[x] = 5这个代码是不合法的。local a = {}; a["x"] = 5; print(a.x);这个会打印出5。

长度操作#的常用做法,print(a[#a])打印最后一个(因为Lua的table索引从1开始),a[#a +1] = n常用与自增,a[#a] = nil删除最后一个。

注意当table中有空洞(数字索引不连续,或者某个值为nil)的时候,#操作未必得到正确值。

5.1新增%取模操作。a % b == a – floor(a / b) * b,结果符号永远与第二个参数相同。print(5 % -2)得到-1,print(-5 % 2)得到1。另外取模操作可以用于对实数取整数部分或者小数部分。x = math.pi; x – x % 0.01 是让x精确到小数点后2位。x % 1 取小数部分,x – x % 1 取到整数部分。

table,userdata以及function,比较引用。

and与or都是用短路求值。 x = x or v常用于默认值设置。

Lua中的字符串是不可变值immutable value,两个字符串链接,会返会一个新的字符串。

链表写法:

 1: list = nil

 2: for line in io.lines() do

 3: list = {next = list, value = line}

 4: end

local a = { [-1] = 3, ["3"] = 5, ["n"] = "bbb"};

print(a[-1]); print(a["3"]); print(a.n);比较有意思的是a["3"]没法写成a.3。

a = {x = 0, y = 0} 相当于a = {["x"] = 0, ["y"] = 0}的语法特例。

local a = { [-1] = 3; ["3"] = 5; ["n"] = "bbb"};这样写也是合法的,构造式可以用分号代替逗号。

第四章

x, y = y, x交互x与y的值。

可以用do-end控制局部变量的范围。

local print = print,相当于定义了一个局部变量print(函数),后面如果使用print,就是访问了这个局部变量。访问局部变量要比访问全局变量快。

while x do .. end,当x为真值时进入while;repeat .. until x,当x为真值的时候结束循环。这点我弄混过。