美国感受:环境

来美国已经一个多月了……

==== 宿舍与安全 ====

一开始我来的时候,感觉是哪儿都不安全。现在日渐胆大,敢于晚上十二点多从学校走回宿舍了……

这宿舍设备啥是不错,地方也不小。问题是它非常贵,而且离学校也不近,走到学校20分钟。类似条件的宿舍,就算离学校更近一些,基本上也比我这个便宜…… 所以刚来的时候我和室友都意见很大。但是貌似换宿舍也不方便,特别是安定下来之后就懒得动了,于是看来还是会一直住下去…… 但是1300+$一个月的宿舍费,实在是贵了点……

关于安全问题么,其实我主要是看见路边上一群一群黑人比较毛。你在路上走过他们边上,他们就看着你,当然感觉不怎么好…… 不过这段时间下来,貌似也没啥事情…… 而且如果你回去足够晚,黑人也睡觉去了…… 于是路上一个人都没有。

不过公园里还是很危险的。我听说好几起例子了,在公园里被抢钱、敲蒙棍之类…… 中央公园白天还不错,一派祥和。但是到了晚上,天黑了,那就危险了…… Morningside Park就更加危险了,只要天稍暗就不太成。所以到现在,这俩公园都没进去过……

==== 环境与气候 ====

至于环境么,空气是很好的,基本上只要晴天,能见度就非常好。但是路上常常比较脏,原因大概是人力成本高,所以打扫的人也不是那么多?这边关于狗排泄物的罚款警告到处都是,就是如果你不自己处理,可能会有数十到数百美金的罚款,甚至还有罚一千的……

这里很多事情都可以归到人力成本高上。比如某个场所,如果在国内,肯定会有服务员之类,在这里就可能没有。

这里是海边,雨天挺像上海的,并没有北京那么干燥。但是东西干得倒是挺快。另外,这里的雷阵雨很厉害,天气能够五分钟之内从电闪雷鸣变化到一滴雨都不下…… 反正下雨时机很难预料,所以只要不是大晴天,还是要常备雨伞……

恩,今天很晚了,先说到这里……

关于#pragma interface

关于这个pragma,有某文档: http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Interface.html 里面还有它的伴生pragma: #pragma implementation

大体意思是说,比如你有个A.h,有个A.cpp。A.h里面包含了一些除了类接口以外的一些东西,例如一部分类实现之类的,比方说,里面有类A,以及A::foo()的实现。

原来假如我是B.cpp,只要我#include你这个A.h,那我编译出来的B.o里面,就会有你的那一部分实现的副本,也就会有A::foo()的副本……

然后有人觉得这样B.o会变大,于是发明了那俩pragma……

定义了#pragma interface A 的头文件,引用它的B.cpp编译出来的B.o就不会包含那一部分实现的副本,而会有undefined symbol: undefined A::foo()

而与其对应的定义了#pragma implementation A的A.cpp,它编译出来的A.o里面,就会包含那一部分实现,也就是那些undefined symbol对应的东西: defined A::foo()

这样俩.o链接起来,就啥都有了,很好

=== bug的分隔线 ===

但是有时候有别的情况…… 例如其实那个类在一个C.so里面,而引用它的B.cpp是一个用了那个C.so的程序的一部分

于是B.cpp编译出来的B.o里面,那部分实现依旧是undefined symbol。但是,那些对应的symbol,在A.o和其他.o一起变成C.so的时候,都到了C.so里面。但是大概是由于链接的过程,原来的symbol信息没有导出来……

于是C.so的导出symbol里面,并没有defined A::foo()

于是B.cpp位于的那个程序在链接的时候,就找不到那个A::foo()了,就有linker error了……

=== 结论的分割线 ===

总的来说,就是尽可能别用这个pragma…… 省那点空间没啥意义的……

它文档里也说了

Note: As of GCC 2.7.2, these #pragmas are not useful in most cases

以及

Currently (3.4) the only benefit of these #pragmas is reduced duplication of debugging information, and that should be addressed soon on DWARF 2 targets with the use of COMDAT groups.

GeManX rev 59

修了些小问题:

1. 之前有过编译的时候报CSite成员函数找不到的问题

研究了一下,貌似是#pragma interface干的好事,具体的再写一篇吧……

2. libnotify更新之后,notify_notification_new参数变化

0.7.0之后,libnotify的API变了…… notify_notification_new()原来有四个参数,现在只有三个了…… 这种API不兼容真蛋疼……

Skype 静态链接版本不能输入中文的问题

装了FreeBSD port里的skype,其实是Skype for Linux的静态链接版本。

尝试聊天的时候,发现不能输入中文……

我很怀疑这个事情是静态链接而起的,于是去搞了个动态链接的版本……

但是这个版本跑起来就卡死……

我怀疑和DBus之类有关系,反正看trace是卡在一个锁上…… 多半是BSD模拟的问题

于是尝试选项–disable-api,然后居然就不卡死了……

试了一下,也可以用输入法了…… 原来右键菜单里连输入法选项都没有,现在可以选了……

于是搞定了…… 所以其实重点就是:换动态链接的版本……

当然各位用Linux的多半直接去包管理器里装了,当然是动态链接版本……

闭源软件真是出了问题也没法调啊……

Blog基本上迁移完成了

终于搬完了…… 花了好多时间……

在新的VPS上架设东西就花了很久,这个以后再谈吧……

然后是从三个老的blog上导入数据…… 因为很多帖子在两边同步发布,还要合并…… 合并的时候,可能两个帖子都有评论,于是要合并评论,还要合并tag……

为了干这个还研究SQL,了解SELECT, DELETE, UPDATE之类的都是怎么用,以及语句里面套SELECT的办法之类……

但是,终于搞定了!所有帖子都移了过来,并且基本上合并完毕了。评论基本上也都在,合并完了的时候,我对有那么多评论也感到很吃惊……

接下来的工作主要是主页建设吧,这个慢慢来,先设计好再说……

关于WordPress:有些地方真是太弱了,比如批量编辑的时候不能删除分类,没有选中不包含某分类的帖子的功能,没有合并帖子的功能,等等…… 但是既然是免费的,就别要求太多了……