2 的归档页面

重新用回Twitter

首先热烈庆祝wordpress.com终于解禁了,这也意味着我的博客可以直接从国内访问。

最近更新了Pidgin,然后很有冲动想用回MSN和Google Talk等,就顺便把头像也更新了。然后还很想念Twitter,因为看了一篇报道说,Twitter具有实时信息的能力,但是Google在这方面只有Youtube,所以Google可能会收购。还有一条报道说,Google也在Twitter上发Tweets。当然,收购或合作其实我不是很关心,我只是忽然想起好久没有上Twitter,甚至在北京的时候都没有上过Twitter。登录Twitter之后,发现和以前一样的简洁,清新的Web2.0界面,我马上就忍不住要玩一下的念头了。首先follow了Google的Twitter,然后在Pidgin主页上搜索Twitter的插件,找到一款叫Microblog-purple的软件,源代码是放在Google Code上面的,http://code.google.com/p/microblog-purple/

Twitter-plugin

Twitter-plugin

在Ubuntu上安装这款Pidgin插件是很简单的,因为它有PPA源。第一步,是在源列表中加入源(我自己用的是intrepid)

deb http://ppa.launchpad.net/sugree/ppa/ubuntu intrepid main #Pidgin-Microblog

然后导入该源的key

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0CF459B8DF37ED8B

更新之后就可以安装了

sudo apt-get install pidgin-microblog

使用起来界面就如上图,然后直接在框里发Tweets就可以了,别人发的时候也能收到。下图就是今天收到的一条Google的Tweet,打开之后的图片。

Doodle

Doodle

情人节快乐

很高兴今天第一次可以二人度过这个不平凡的节日,虽然很累,但是很开心^_^

我和女友决定中午在实验室煮“第一顿”午餐,为了这个决定,这几天先是买了电磁炉,买了锅铲,买了刀具,还有油和盐等,进出了数次百佳。而今天早上,最后要买的就是菜了,先是买了油菜,还买了排骨,淮山,萝卜去煲汤,不过我真是第一次自己下菜市场买东西,结果我发现很多东西我都还没认得,惭愧。

终于好不容易,十点多回来,先是煲汤,所以我把淮山剥皮,切片,还有女友也把萝卜切片。好不容易,终于把材料准备好了,就全部放到水里,过了半小时才加油和盐,一边加一边试味道,呵呵,想不到还算可以,原来煲汤也不是很难的,只是时间长一点就好一些。然后我还要炒菜,我先是把火腿和黄瓜切粒,加上玉米粒一起炒,虽然我技术一般,不过也勉强得到女友的肯定,呵呵。本来还要炒一个青菜的,不过女友说已经太多了,就没炒了。辛苦了一顿,坐下来吃的时候,真是特别的甜^_^

情人节女生送男生巧克力,男生送女生花,我虽然早就知道,却一直没有经历过,今天是我的第一次,所以也要好好地记录下来,以后可以回味。女友是回来广州前就自己亲手做好的六个巧克力,有两颗嘴唇形状的,两颗白色,两颗黑色。吃下去融在嘴里,甜在心里,留着一颗嘴唇的可以每天亲。我也是第一次送花,所以打算提前准备,结果昨晚拿到实验室的时候竟被女友发现了,真是很糗,不过女友还是很开心。

总之一句话,谢谢女友。

Rose

Rose

Gxogle

Gxogle

Google Valentines 09

Google Valentines 09

今天还有很多开心的网上事情。Google中国先后换了两次情人节图标,第一个里面的XO表示拥抱和kiss,现在我学会了,呵呵。还有又认识多了一款代理软件,叫GAppProxy,网址是http://code.google.com/p/gappproxy/,我的这篇文章就是使用这个软件发送的。

x86下C调用风格

本文说的x86指的是32位下的x86,不过据说x86-64也是类似的。

每一种机器本来指令集就不一样,所以本身在不同机器上程序的调用风格就不完全一样。但即使在同一种机器上,如我们常用的x86,不同的高级语言它的调用风格也不一样。比如有些语言可能调用函数前,把状态寄存器压栈,或者把所有寄存器压栈,调用完之后恢复,但有些语言则不会这样做。因此,通常不同高级语言编译出来的目标文件(object file),是不能直接链接的。这种汇编级别的接口,我们有一个词,叫ABI(Application Binary Interface,应用程序二进制接口)。

本文根据《Programming Ground Up》,把C语言在x86下的调用风格作一个小结。

首先是调用者,调用者负责把函数的参数倒序压栈。比如调用者要调用函数func,它要求有N个参数,则调用者在调用函数前把参数按参数N,参数N-1…这样的顺序去压栈。这时程序的堆栈如图1所示。

Picture 1

Picture 1

然后调用者可以调用函数。被调用者则要做以下的工作,首先把%ebp寄存器压栈,然后把%esp拷贝到%ebp。这样以后,函数所有的参数和函数的局部变量,都可以通过%ebp的基址寻址方式去获得。这时程序的堆栈如图2和图3所示。

Picture 2

Picture 2

Picture 3

Picture 3

函数执行完之后,结束之前,也是很关键的一步,就是把%esp和%ebp恢复,同时把返回值放到%eax寄存器。最后调用者负责清理自己压栈的参数。

可见,C语言的调用风格是,%ebp肯定不会改变,但其他寄存器则不保证,所以如果调用函数前正在使用某个寄存器,应该先把它压栈,函数结束后才恢复该寄存器。

另外,Linux的shell在执行程序时,也是遵循同样的风格的。所以程序一开始的时候,0(%esp)就是C语言中的argc,4(%esp)就是C语言中的argv[0],以此类推。

谷歌中国牛年新春壁纸

今天在cnBeta看到报道,谷歌中国推出了牛年新春壁纸,于是正好把我Ubuntu的桌面换上新年的新装。要下载牛年新春系列的壁纸,只要访问谷歌中国的个性化主页即可。

这次一共推出了8款壁纸,而且还每一款都有名堂,确实是别具新意的。下面的截图是一款叫“金牛献宝”的壁纸,不过我自己选择使用的却是“新年到,鞭炮到”,呵呵,其实每一款都挺漂亮的。另外几款的名堂分别是“年年有余”、“团圆饭”、“大拜年”、“迎春接福”,“张灯结彩”以及“拜天公”。

Google China 09 Newyear

Google China 09 Newyear

在除夕之夜,周围不少住户在放鞭炮,寒冷的夜晚还是有不错的新年气氛,这一晚送旧迎新,首先要感谢女朋友半年以来无怨无悔的支持,同时小弟在此祝愿各位朋友在牛年事业顺利,身体健康。

汇编书籍PGUBook

《Programming Ground Up》(下面简称PGUBook)是一本使用GFDL协议发布的书。我是从TualatriX的博客上看到的关于这本书的介绍的。

PGUBook从汇编开始讲编程,但是绝不仅仅在于汇编,而是重于编程思想。书的前面大部分都是围绕汇编在讲,后面则有一部分讲C语言和其他。本来我以为这本书讲汇编一定不会勾起我的兴趣的,不料粗略浏览一看,发现PGUBook讲的比我大二的时候学的汇编要深刻很多。这本书只讨论x86和Linux,一方面使我对x86的理解深刻了不少,另外也使我有充分的环境去实现书上的例子。书的封面截图在下面,更详细的介绍可以看它的官方主页http://savannah.nongnu.org/projects/pgubook/

PGUBook

PGUBook

我看了PGUBook半个多月来,到今天整整看了五章了,感觉是越看越想看。主要原因是正如它第一章里所说的,没有把一些其他书回避的晦涩的地方一带而过,而是用比较好的章节结构使读者逐步去掌握一些x86的设计理念。而且看了PGUBook之后,对C语言的很多行为的理解有了很大提高,比如说调用函数时怎样压栈,Linux下gcc是倒序把参数压栈,所以函数中的相关参数怎样影响就可以很好理解了,比如f(a++, a++)之类的。当然其他编译器处理手段会一样,而且也不符合C语言规范,我只是想用来说明有助于理解。

接下来几周陆续写上读书笔记和小结,这次先把x86的简要架构写上。

32位的x86有6个通用寄存器和4个特殊寄存器,以前学的时候感受没这么深刻,现在倒是很容易就记下来。6个通用寄存器分别是:%eax(累加寄存器),%ebx(基本),%ecx(计数),%edx(数据),%esi(源索引),%edi(目的索引)。不过其实对于32位的x86来说,其实它们都是通用的,可以代替对方,那些括号里的含义在16位的时代才比较有意义。另外四个特殊寄存器是:%esp,栈寄存器,指向目前的栈顶;%ebp,基址寄存器,常和%edi组合使用;%eip,指向下一条指令的地址;%eflags,标志寄存器,对比较指令特有用。

寒假过一半前希望能把PGUBook看完一次。

ChmSee看不到部分图片

ChmSee是一个在Linux下看chm文件的软件,我以前在Linux下是使用一个FireFox的插件去看的,不过这次我想装ChmSee试试。

因为chm文件实际上只是一些网页的打包,所以处理的程序应该也不会很复杂。我用ChmSee看大部分chm文件都没有问题。直到最近,用ChmSee看一个chm文件,但是里面的图片总是显示不出来,就像下图所示。我一开始以为是打包的时候出了问题才会导致这样,但是当我换回到Windows的环境之下,图片又能看到了。这就让我感到很困惑了,为什么ChmSee看这么多文件没问题,偏偏这个文件却不行呢?最后,上网查到一篇博客文章写道,原来ChmSee看不到那些图片的原因是,那些文件有一些奇怪的后缀,比如abc.gif;65123之类的,所以ChmSee才无法解释。不过至于为什么有这种后缀,我不知道,我猜测可能是一些字符在URL中变成这样。

ChmSee cant see come pictures

ChmSee can't see come pictures

最近用Linux的一大改进就是发现原来Ubuntu下字体渲染可以选择“适合LCD”,这样我的笔记本上的画质马上得到质的飞跃。只可惜我的一本电子书没法用ChmSee看了。半年了,回到自己的博客。

体验IPv6

我从国庆回来后得知中大已经可以使用IPv6,就几乎每天都去试用,到现在已经快一个月了,感觉非常稳定,写一篇小结的文章。

先说说配置IPv6的方法,最简单使用IPv6的环境就是Vista。在Vista中,如果是在学生生活区(南校区),通过DHCP自动就能获取IPv6的地址或者自动就建立好ISATAP隧道,所以用户只需要用就可以了。如果是XP的话可以按照该文章(内网链接)配置隧道到isatap.sysu.edu.cn,然后也能使用IPv6。

如果是Linux的话,需要手动配置隧道(至少目前是这样)。首先添加隧道接口sit1

sudo ip tunnel add sit1 mode sit remote 202.116.64.254 local 192.168.114.31

其中202.116.64.254是ISATAP隧道接入服务器,另一个是本机地址。接下来需要启动sit1接口

sudo ifconfig sit1 up

接下来为sit1接口添加一个IPv6地址

sudo ifconfig sit1 add 2001:250:3002:7000:0:5efe:192.168.114.31/64

其中前面部分是中大的IPv6网络号,后面是在中大里的内网地址。最后添加一条IPv6的默认路由

sudo ip route add ::/0 via 2001:250:3002:7000::1

这样就大功告成了,我使用的操作系统是Ubuntu 8.10 Alpha 6。现在可以使用命令“ping6 6rank.edu.cn”测试一下IPv6连通性。当然嫌麻烦的话写一个脚本就可以了。而且今天过去信科A楼发现那里DHCP可以获取IPv6的公网地址,真不错。有了IPv6可以干什么?对我来说,最爽的莫过于看高清电视。下面是我看北邮的网络电视的截图。

IPv6

IPv6

南校区上网

在中大南校区上网,尤其是使用Linux上网,是一件比较痛苦的事,因为南校区使用的是锐捷认证。锐捷的认证不是标准的802.1X认证,因为它使用的是自己的组播地址。

在Windows XP或者Vista上,可以直接使用网络中心提供的锐捷认证上网,基本不会遇到什么问题。

 

Ruijie

Ruijie

在Linux上,网络中心提供了一个叫xrgsu的认证软件。解压缩一看,只有一个二进制可执行文件(for Linux)和readme,所以估计除了Linux和Windows以外的系统,要通过认证,就只能寻求网络中心以外的帮助了。先说回这个软件,因为直接是可执行文件,直接运行,首先报缺失libpcap 0.6版本的库,这个问题容易解决,直接使用软链接把新版的libpcap链接到旧版的就可以了。接下来报缺libstdc++ 5.5,这个缺失不能用新版的代替,可以通过安装gcc 3.4以下的版本获得,或者上网搜索一个,直接拷贝去用,我自己就是使用后面那种方法。

接下来要确保网卡处于dhcp状态,一般来说,在南校区要能上网,需要先通过DHCP获得IP地址和其他信息,然后才能使用认证软件,然后在认证过程中再次DHCP获得地址。所以在认证前,网卡需要激活DHCP。方法一,编辑/etc/network/interfaces,如针对eth0,可以加两行“auto eth0”和“iface eth0 inet dhcp”,这样每次启动Linux,网卡eth0自动通过dhcp获得地址信息。方法二,临时型,运行dhclient命令可以马上获得地址信息。

接下来就可以运行xrgsu这个软件了,可以直接运行,也可以放到/usr/bin,然后可以在任何目录下运行。接下来按照软件的提示和readme里的说明即可。

顺带一提,有时在Linux下要修改DNS服务器地址,可以通过修改/etc/resolv.conf文件去实现,当然之后要重启网络服务。

以上所说的方法在我所在的宿舍是可以的,但是据说在173,180,181这三栋宿舍是不凑效的,不过具体原因我也不清楚。

Reference Count

Reference Count在中文一般译为“引用计数”。我第一次见到这个词语是在学习《Unix Network Programming》的过程中,但是最近的学习发现这种思想用在很多地方,所以写一篇小结。

在套接字编程里面,如果使用fork函数引出来一个新的进程,则原来的descriptor(描述符)一般都能在新的进程中使用,里面包括文件描述符和套接字描述符。而且当使用close函数的时候,并不会马上就把描述符指向的东西(如TCP连接)马上关闭,必须在两个进程都close了才会关闭,或者在一个进程中close两次。原因在于,内核保存描述符的信息时有Reference Count这个东西,表示当前有多少个进程正在使用它,而close函数先把Reference Count减1,检查是否为0。如果变为0,close函数才关闭资源本身。

基于上面的说明,所以我认为每个进程应该最多只close一次,而不去更多地close,通过控制Reference Count达到难以理解的效果。

仔细想想,Reference Count其实是对资源的一种管理方法,所以它其实还可以用在很多资源管理的情况上面。比如我们有一棵二叉树或者链表,里面的节点是结构体,结构体里有指针成员。然后有些场合,比如为了节省内存,指针会指向相同的对象。问题就在于,当释放二叉树或者链表的时候,要先把其中的节点里的成员指向的内存释放掉,这样就可能会重复释放,出现严重问题。其中一种解决方法就是被指向的结构体本身带有一个Reference Count的字段,在释放二叉树或者链表的节点时,先把Reference Count减1,再判断是否应该释放。

Reference Count

Reference Count

Reference Count还用在很多地方,比如文件系统。有些文件系统支持hard link,硬连接,就是说一个文件实体在文件系统存在多个入口,通常使用ln命令实现。这时如果删除一个入口,文件实体是不会删除的,必须全部入口都删了,文件才会被删除。

然后垃圾回收系统也可以利用这种机制,比如new了之后保持记录有多少个变量指向这片内存区域,如果发现什么时候已经没有一个变量指向这片内存,就应该释放这片内存。但是这种方法也不是总是灵验,比如存在自指向的时候,比如分配的内存中的变量指向自己的这片内存,或者指向形成环就会出问题了,所以引用技术用在有环的地方就不灵了。

互联网奥运月

2008北京奥运在昨天8月8号晚上8时8分8秒开始了,这么重大的节日,互联网上的软件和服务当然也会参与其中。分享一下最近新鲜的互联网奥运月事件。

首先很值得一提的是Linux版的QQ,这个千呼万唤始出来的软件,解决了像我一样的Linux用户的长久的痛苦。因为之前腾讯封杀了第三方的QQ客户端,所以如果使用类似Pidgin这样的软件上QQ一两次,再回到Windows上使用QQ,就很有可能提示QQ号码需要重新激活。Linux QQ真是名副其实的Preview版,很多简单的功能都还没有,只有最基本的功能发送文字和表情。

Linux QQ有一个特色,就是把聊天窗口集中在一个窗口,用标签去分隔。这个特性不知道是不是只是为GTK 2开发的,还是以后QQ也有这个打算。个人认为如果可以自由选择将会更好。Linux QQ有很多简单的功能没有实现,如不能截图,不能传送文件,不能搜索自己面板的好友。不过看到8月6日的时候腾讯官方网站又有进一步的消息,对这款软件还是很有信心的。

然后说说Google中国的音乐搜索服务,使用网址http://www.google.cn/music即可访问。Google中国的音乐搜索是和巨鲸音乐网合作的,所以音乐是音质比较好的正版音乐,据说是192k/s码率的音乐。Google音乐搜索还有一个特色就是它的在线试听页面,做得很好看,发挥了google的美化功力。不过据说音乐的数量并不是很多,而且该服务不提供给中国以外的地区。

最近还有很多软件以“奥运版”面世,如腾讯QQ,百度Hi,灵格斯词霸,甚至红旗Linux也推出了奥运预览版。尤其是百度Hi,挺有创意的,在签名的地方加上[中国加油],就可以实时显示现在中国队的金牌数。最后祝贺中国第一天就拿到两面金牌。

« 上一页下一页 »