- 博客开通了,标记一个:) a new start [2007-12-29 13:53]
-
挫败感
2009-06-10 21:19:16 by deepblue最近两个月受了不少打击,产生了一些挫败感。。。
庆幸的是现在还不晚,及时让我更加清楚地认识了自己,彻底消灭了我曾经那莫名的自负感,真心感谢这两个月来给我打击的人!
现在开始,奋起直追!
-
Google Developer Day 2009
2009-06-06 17:13:05 by deepblue昨天参加了Google Developer Day 2009,形式和去年一样,主要是介绍Google的新产品和新技术,不过感觉今年组织得不如去年好,可能是因为今年的人数太多吧,近3000人,不过即使如此,参会的邀请函也不应该漏发或重发吧。。。而且食物的质量明显有所下降,包括茶歇和晚宴,不过今年除了给参会者发送了一件T-shirt外,还对填了4张分会场参会回执的朋友每人送了一个双肩电脑包,还不错。
好了,废话就不说了,上图吧。。。(手机拍的,效果不是很好)
... -
近日流水帐
2009-06-06 16:55:04 by deepblue很久没更新blog了,记点流水帐。
刚才,发现twitter的api访问有问题,导致blog首页打开非常慢,暂时中首页去掉twitter内容。
昨天去参加了Google Developer Day 2009,总体感觉和去年差不多,主要还是介绍Google的新产品和相关技术,还没正式发布的Wave是今年绝对的明星,值得期待;又得了一件Google T-shirt。
前几天参加了篮球赛,替补。。。不过命中率保持100%,1投1中:),而且是在眼镜被打掉的情况下凭感觉投进的,哈哈。
前段时间终于发了第一篇英文论文,被老板批评了英文写作还有很大问题。。。
更前段时间联系上了一个十几年没见到老朋友,聊得很高兴。
更更前段时间出了趟差,第二次去上海。为了迎接世博会,外滩在修路;金茂已经不是第一高楼了,记得上次还在金茂顶层朝着北京和家乡的方向各照了一张相。
更更更前段时间。。。记不太清楚了。。。
-
不用临时变量,交换两个数的值
2009-04-19 16:15:01 by deepblue有两个整型变量a,b,如何在不使用其他临时变量的情况下交换a,b的值?可能这个问题大家都非常熟悉了吧。
以前我用的是这个方法:
a=a+b;
b=a-b;
a=a-b;其实下面这种方法由于是用的位运算,因此效率更高:
a=a^b; (1)
b=b^a; (2)
a=a^b; (3)其中,^为位运算的异或运算。证明这个结论也很简单,为了表述得清楚,我们令原始值分别为a,b,计算过程中产生的新值为a_new,b_new。
由(1)得:a_new=a^b,即此时变量a中的值等于a_new。而(2)中,等式右边的a的值实际上已经等于a_new了,因此,由(2)得b_new=b^a_new=b^a^b。我们知道,异或运算满足交换律和结合律,因此进一步可以得到:b_new=b^a_new=b^a^b=b^b^a=0^a=a,即变量b的值变成了b_new,也就是变量a的原始值。在(3)中,等式左边变量a和b的值实际上已经等于a_new和b_new了,令等式左边的a为a_final,因此可以得到a_fianl=a_new^b_new=a^b^a=a^a^b=0^b=b,即变量a的值最终等于a_final,也就是变量b的原始值。至此,变量a,b的原始值完成了交换。
-
Catalan数
2009-04-15 13:48:31 by deepblue今天才知道Catalan数这个东西。。。汗~,赶紧在网上查了资料补补课。
令h(1)=1,catalan数满足递归式:
h(n)= h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1) (其中n>=2)
即:
Catalan数的通项公式为:
该公式的推导过程可以看参考资料[2]的内容,在此不再累述。
我还看到有人争论Catalan数的通项公式应该是这样的:
其实这两个公式本质是一样的,公式(1)是以h(1)=1为起始项,而公式(2)是以h(0)=1为起始项。
关于Catalan数的应用可以参考这里。
这里举个应用Catalan数的例子:n个节点能组成多少种形态的二叉树?(注:每个节点相同;形态不同的左右子树对调后形成的二叉树算新的形态的二叉树)
可以分析,当n=1时,只有1个根节点,则只能组成1种形态的二叉树,令n个节点可组成的二叉树数量表示为h(n),则h(1)=1;
当n=2时,1个根节点固定,还有n-1个节点,可以作为左子树,也可以作为右子树,即:h(2)=h(0)*h(1)+h(1)*h(0)=2,则能组成2种形态的二叉树。这里h(0)表示空,所以只能算一种形态,即h(0)=1;
当n=3时,1个根节点固定,还有n-1=2个节点,可以在左子树或右子树,即h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=5,则能组成5种形态的二叉树。
以此类推,当n>=2时,可组成的二叉树数量为h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)*h(0)种,即符合Catalan数的定义,可直接利用通项公式(2)得出结果。
参考资料:
1.Catalan数,http://baike.baidu.com/view/1163998.htm
2.Catalan数的分析和应用,http://blog.csdn.net/dlyme/archive/2008/06/10/2532831.aspx -
工作到现在
2009-03-28 02:43:05 by deepblue好久没熬夜了,工作到现在,记一笔。。。
-
后台无界面启动VMWare中的虚拟系统
2009-03-19 15:05:24 by deepblue我现在用的VMWare版本是Workstation 6.5,安装了一个虚拟系统Ubuntu8.04,寄主系统是WinXP SP3。由于现在的任务不需要在图像界面下工作,我每次启动后都选择关闭Workstation的图形界面,并保持虚拟系统在后台运行,然后在寄主系统上通过Putty连接到Ubuntu。尽管VMWare已经提供了使客户系统在后台运行的功能,可每次打开图形界面再关闭的过程很烦很无聊,于是想要找到一种直接在后台启动客户系统的方法。
查了查资料,发现原来VMWare Workstation6.5已经提供了一个命令行工具:VMRun,可以通过给它一定的参数实现指定虚拟系统的后台启动。
将该命令写入一个批处理文件,点击运行即可实现虚拟系统的后台启动。批处理命令如下:
"C:\Program Files\VMware\VMware VIX\vmrun.exe" start "G:\VirtualOS\Ubuntu.vmx" nogui
其中红色部分为命令行工具vmrun.exe,蓝色的start为vmrun.exe的参数,这里表示启动系统;"G:\VirtualOS\Ubuntu.vmx"则为我的虚拟系统在寄主系统上的vmx文件路径;最后的nogui表明不启动图形界面。
若希望虚拟系统在寄主系统启动后自动启动,可将该批处理文件加入寄主系统的启动选项中或添加为计划任务。
通过为vmrun.exe传递不同的参数可以实现不同的功能,如关闭系统、运行程序等。在命令行中直接输入vmrun,不带参数,即可查看其帮助文档。
-
Linux高级权限管理:ACL用法简介
2009-03-18 23:11:22 by deepblue前段时间,在Linux上设置一个目录的访问权限时,发现通过简单的chmod操作不能满足自己的需求,
问题:如果用root帐号创建了一个目录DIR,有A,B,C,D四组用户,我想给A组用户读写执行的权限(rwx),给B组用户读写的权限(rw-),给C组用户读的权限(r--),不给D任何权限(---),要如何实现?
UGO的局限性
通常大家熟悉的是UGO的权限管理方式(User, Group, Other),即对一个文件的所有者,所属组和其他用户来分别设置该文件的读写执行权限。对于简单应用来说,这种粗粒度的权限管理方式已经够用了,设置起 来也很方便。然而,当我们需要对某个文件进行较复杂详细的权限设置时,UGO方式就显示出了其局限性。
如,对于本文开始所提出的问题,需要为四组不同用户设置对目录DIR的不同访问权限,而UGO方式只能对目录的所有者,所属组,以及其他用户设置不同权限,即最多只能设置3种不同权限,还不能对多个不同用户分别设置。
ACL则很好的满足了这样的需求。
ACL简介
ACL,全称Access Control List,即文件/目录的访问控制列表,可以针对任意指定的用户/组分配rwx权限。现在主流的商业Unix系统都支持ACL。FreeBSD也提供了对 ACL的支持。Linux在这个方面也不会落后,从2.6版内核开始支持ACL[1]。顾名思义,ACL将用户对一个文件访问权限就像是放在了一个列表里,列表的每一项分别对应了一个或一组具体用户对该文件的特定访问权限。这就使任意的访问权限管理成为了可能。
下面我们来看看如何通过ACL进行详细的文件访问权限管理......





