Monthly Archives: April 2012

C中的移位和undefined behavior

前一阵写一个程序,需要malloc 2G的buffer,于是第一次就这么写了

long size = 1 << 31;

结果malloc返回总是失败,把size打印出来发现是个负数。如果改成以下的写法就没问题了

long size = 1u << 31;

今天正好看到内部邮件列表里有人也在讨论这个问题,贴出了C99对移位操作的规定,也为我解决了这个疑问

ISO C99 6.5.7 Bitwise shift operators, paragraph 4:

 The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated
 bits are filled with zeros. If E1 has an unsigned type, the value of
 the result is E1 × 2^E2 , reduced modulo one more than the maximum
 value representable in the result type. If E1 has a signed type and
 nonnegative value, and E1 × 2^E2 is representable in the result
 type, then that is the resulting value; otherwise, the behavior is
 undefined.

也就是说 1 << 31 这种表达式是个未定义行为,因为1是一个signed type,并且 1 x 2^31已经超出了signed int的表达范围,所以gcc中得到负数只是gcc的一个实现。而 1u << 31 能够得到正确的2G数值,是因为1u是一个unsigned type,1u x 2^31 的结果正好能在unsigned int里表示,再赋值给long之后也就没问题了。

公司羽毛球活动 2012-04-24

今天打球偶遇一个中科院计算所的学生来蹭球,由于今天公司来打球的人少,蹭球也就成为了可能。

这小伙子打的很不错,高远很给力,小球也相当彪悍,经常对角勾的我只能看着球落地,吊网前也很好,很多球我都没反映过来就已经落地了。虽然感觉还没有孙同学那么厉害,但我还是赢不了他。

这次打球充分暴露了我对小球的无感,如论是接小球还是主动放网。再加上对方时不时的假动作,我就只能回质量及其恶劣的球了。除此之外,反手依旧很弱,这一方面是步法没跟上导致被动只能用反手,另一方面就是反手本身的弱了。对方的反手球也都能回到接近双打发球线附近。

还要对更多球路进行熟悉,比如这个小伙子就很喜欢压几次后场之后放短、勾对角,我就要对各个方位的来球都要有思想准备。同时还要增加自己的球路,但这个受限于基本功不牢、技术不全面。

发现如果能有一个人来指出我的不足并给出改进方法是目前最好的提高方式。记得之前孙同学说我在网前基本都是挑后场,太单一,还可以放小球,位置好的话还可以推球,自己注意了这方面之后就能有所提高。现在完全处在自己摸索阶段,很多缺陷自己发现不了,错误动作/思想一直重复,直到有一天固化到身体里就糟了。

打球路漫漫,继续努力。

Debian下使用HTTPS访问WordPress

由于未知原因,VPS最近总是被reset, 经过一番探索,发现ssh能连,dig域名解析正确,但只要访问http就会reset, 直接ip访问没有问题,那么只能是域名被干了。按说我就是自己写写博客,顶多发发生活上的牢骚,不知道怎么就触到校长大人的G点了。

忍了几天终于不能忍了,决定设法解决。首先想到换个域名,但上name.com一搜,稍微看上眼的基本都在10刀左右,为了校长已经花了不少钱了,再花钱不值得。然后想到了HTTPS, 实用还安全,就它了。

那么要想强制Wordpress使用HTTPS访问,要经过两个步骤,一是启用HTTPS访问,二是让Wordpress走HTTPS.

第一步是配置Apache2使用HTTPS. 因为我只是想绕过gfw, 就用自签名的SSL吧。主要参考了这篇文章。原文的步骤很清晰,我这里只罗列一下步骤

openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -in server.csr -signkey server.key -out server.crt

以上步骤对应文章里的Step1-Step4, 也就是生成了自签名的key. 接下来要配置debian的Apache2

a2enmod ssl
a2ensite default-ssl
mkdir -p /etc/apache2/ssl
cp server.key /etc/apache2/ssl/ssl.key
cp server.crt /etc/apache2/ssl/ssl.crt
chmod 400 /etc/apache2/ssl/*

a2enmod ssl之后debian会给你一个提示,告诉你去读一下/usr/share/doc/apache2/README.Debian.gz, 建议看一下,那里用的make-ssl-cert命令进行自签名的。

接下来编辑 /etc/apache2/sites-enabled/default-ssl 找到SSLCertificateFile和SSLCertificateKeyFile字段,修改为自己的路径 /etc/apache2/ssl/ssl.xxx, 然后

/etc/init.d/apache2 restart

重启apache就好了。

第二步是让Wordpress使用HTTPS访问。这里用到一个Wordpress插件,WordPress HTTPS ms这个插件没什么好说的,安装后会出现一个HTTPS配置选项,根据自己的需求配置一下,再用https访问就好了……

现在VPS只能全局默认https了,输入http也会自动转为https访问输入http ms还不能自动转到https上来,这个需要再看一下。目前只有两个问题,一个因为是自签名,第一次访问会有警告,据说chrome下问题更大;第二个问题是访问明显变慢,不过没办法了,总比被墙了的好。

Red Hatter 两周年的礼物

今天是清明节后上班第一天,4月1号过去之后我在红帽就满两周年了。今天公司算是给了我一个很好的礼物,给我“首届红帽北京融科办公室季度最佳员工奖”……得了一个奖杯一个机械键盘。算是对我这两年工作的一个肯定吧,很高兴,给自己呱叽呱叽。(幸亏清明节没请假回家,幸亏今天没在家办公,幸亏……)

Red Hatter of the Q

Monthly Pic 2012 03

三月下了一场雪,也算是北京这几年的惯例了,三月雪。月末的时候跟着公司同事又骑了一次十三陵,这次到顶了,并绕水库一周,回来依旧累惨了

教四前小路上看教三

十三陵水库风光

公司羽毛球活动 2012-04-03

清明节的出游活动由于诸多原因没能成行,那只好自娱自乐了。公司订的长期羽毛球场,每周二都可以,无论节假日,所以跟同事约好,又叫上孙同学,周二又好好打了一次球。

记得上次跟孙同学打球的时候被他调动的很惨,放网质量不好,然后被推到后场,我根本来不及后退,甚至来不及举拍球就已经落地了。后来孙同学告诉我,我在网前打法单一,基本都是挑到后场,其实可以挑可以放网,机会好还可以推。这次打球就感觉有些进步。主要体现在两个地方:一是后场球基本都能打到对方底线,无论是正手区击球还是头顶区击球,这主要得益于平时在家里没事练习挥拍,逐渐找到甩动鞭打的击球感觉;二是步法有些提高,感觉启动快了一点,有些球之前是够不到的,现在能勉强挑回去,尤其是头顶击球之后马上跑去接近网的球。还有一点提高就是网前小球和推球的结合多了起来,打法不再单一,现在也能时不时调动一下孙同学跑动。

不过不足依旧明显。反手球打过去基本就再也接不到了。之前一直很奇怪,练习反手击球的力量应该是够的,为什么打球的时候反手总是用不上力量,回来之后一琢磨发现问题不在击球动作上,而在击球点上。反手区跑动不到位,抓不到好的击球点,击球点基本都在身体前方,这个位置当然发不上力量,看来要练习的是后场反手步法。另外失误太多,很多机会很好的球都失误了,比如杀半场球下网,回高远球出边线,扑球下网,基本功还不够扎实。

不过总的来说这次跟孙同学打单还是比较满意的,虽然五局都输了,但比分比之前要接近了,而且孙同学基本也用全力打球了(之前都不全力跟我打……)
第一局:18:21
第二 三局都是不到15分落败,因为实在没体力了
第四局17:21,我16的时候首次反超比分,但没能坚持住,失误过多输掉。
最后一局最有希望赢球,开场一度13:7领先,16 17分的时候被赶上,最后还是以18:21输掉了

晚上回来想想自己打球的线路,基本都是后场压对方反手底线,75%的球是回到了那个区域,有一些接发球直接吊到对方正手网前得分,比较少回到对方正手底线(有一个球突然回到对方很深的正手底线,效果很不错),基本没有对方反手网前。球路还是太单一了,不过业余打球果然压住对方反手底线就很容易取得主动了。

每次跟孙同学打球回来都很累,今天又开始浑身酸疼了。要开始锻炼上肢力量了,上身太单薄,衣服都撑不起来……