Posted by Kai on 24th October 2008
上周五在卓越买了两本书,一本是《小猪虾米夫妻日记》,一本是《大便书》。
小猪虾米日记,看看就很羡慕。不说了。
大 便书,挺有意思的,看到一个很有趣的观点,解释了为什么我每次在图书馆呆了没多久就会想便便的问题。因为树木为了获得更多的养分,在进化中获得了一种能 力,它们会释放一种化学物质在空气中,在树木附近的动物闻到了会促进排泄。因为书本是树木制造的,所以也具有释放这种化学物质的能力,在图书馆里这种化学 物质的浓度会比较高。
这也解释了为什么有人便便的时候或者喜欢拿着本书,或者看报纸,有人干脆在厕所的水箱上放几本书,以备不时之需。

Posted in personal | No Comments »
Posted by Kai on 12th October 2008
周五,晚,20:30,田子坊,公社,我进去过的第一个酒吧,还是蛮有新鲜感的。
露天的小四合院,一席人围着坐,大部分人选择啤酒,女士和小部分男士选择果汁。啤酒是小瓶装,直接用瓶子喝,味道和普通的啤酒一样,苦的。
店不大,我们人多,差点连凳子都不够用。
Posted in Uncategorized | No Comments »
Posted by Kai on 9th October 2008
我今天才明白字节中的位的顺序,低位的地址在高位前面。这个看起来很容易的结论,我混淆了很久。
因为我们平时的微操作中,右移是变大,左移是变小,并且在用十六进制或者二进制表示一个数字的时候,都是高位在左边,低位在右边,所以我一直以为在一个字节里面,最低地址的位,是低7位,最高的是0.
比 如一个字节的大小是1,那么我以前的理解是在这个字节里面位的排列是(p)00000001(p+1)00000000,与二进制表示方法 B00000001一样。因为我平时画内存模型的时候,都是左边用小地址,右边是大地址,比如一个数组,4个元素,我会用||p|| p+1||p+2||p+3||。
今天看了一个MSDN上关于DTX5的编码格式的说明,里面提到了一个block里面的alpha数据的保存,
| Byte |
Alpha |
| 0 |
Alpha_0 |
| 1 |
Alpha_1 |
| 2 |
[0][2] (2 MSBs), [0][1], [0][0] |
| 3 |
[1][1] (1 MSB), [1][0], [0][3], [0][2] (1 LSB) |
| 4 |
[1][3], [1][2], [1][1] (2 LSBs) |
| 5 |
[2][2] (2 MSBs), [2][1], [2][0] |
| 6 |
[3][1] (1 MSB), [3][0], [2][3], [2][2] (1 LSB) |
| 7 |
[3][3], [3][2], [3][1] (2 LSBs) |
顿时很奇怪,因为按照第[0][2]个像素的alpha数据有两个位是在第2个字节的高位,有1个位是在第3个字节的最低位。但是如果高位在左边的话,这两个存储就不是连续的。
为了确定高位到底是在哪边,于是我做了1个实验。
unsigned char B[2];
B[0] = (unsigned char)(0×80);
B[1] = (unsigned char)(0×01);
unsigned short S = *((unsigned short*)(B));
cout<<S<<endl;
低字节是B1000 0000, 高字节是B0000 0001, 合成的双字节如果是B0000 0001 1000 000那就说明低字节的高位和高字节的低位是连续的, 否则,如果合成的双字节是B0000 0001 0000 0001就表示不是连续的。
结果表明,低字节的高位和高字节的低位是连续的。
好像我自己说着说着有点乱了。。。。
Posted in Uncategorized | No Comments »
Posted by Kai on 9th October 2008
我有一个程序,是非控台程序,我需要看到程序运行过程中的一些变量的值,但是我不想用断点停下程序。因为程序是有窗口的不断运行的,所以我需要在程序运行过程中看到某些变量的值,根据看到的结果我可以做出一些操作,之后再看到结果。
今天碰巧想到了一个小方法,用起来还挺方便。实践了一下,也不麻烦。
首先,在代码里面,把要监视的数据用文件流输出到一个文件,比如watch.txt。
第二,写一个相应的bash脚本,不停的检测watch.txt的大小有没有改变,如果有改变,输出watch.txt的最后几行,行数看需要。
这个bash脚本很容易,寥寥几行。
PRE=”"
NOW=”"
FILE=”output.txt”
NO=0
echo “Watch $FILE”
while [[ 1 ]];
do
PRE=$NOW
NOW=`stat $FILE | grep -i size`
if [[ "$PRE" != "$NOW" ]];
then
clear
echo ——————- $NO ——————–
cat $FILE
let NO=$NO+1
echo
else
sleep 0.2#停顿一会,避免繁忙等待占用过多的cpu资源
fi
done
接下来,需要使用Cygwin,启动一个bash shell,调用那个bash脚本就可以了。
实验了一下,效果非常的好,就仿佛在运行中把visual studio的watch窗口拿出来一样,这样我可以同时在桌面上显示调试程序的窗口和cygwin shell窗口,用鼠标操作调试程序,同时看到某些变量的值的变化。
不一定用bash,用python,perl等等其他脚本语言也能做到,而且还可以做的更加强大。我用bash只是因为bash在linux上是比较通用的脚本语言。
Posted in tech | No Comments »