26 四月, 2006

Socket编程中发送接收缓冲大小设置

对于TCP,因为是可靠连接,所以,一个包被抛弃(发送方或者接受方),底层协议会要求再发送一次,或者阻塞在应用层。

而如果使用UDP,那么必须由应用层自己作逻辑判断,保证数据的完整性。否则阻塞时,包会被简单地丢弃。

Linxu 2.4中,

应用层,使用setsockopt(sock, SOL_SOCKET, SO_RCVBUF/SO_SNDBUF, &bufsize, (socklen_t)len)来设置send/receive buffer的最大值,此值不能超过sysctl中设置的最大对应值。所以,如果想增加缓冲大小,必须先修改系统配置,可以使用sysctl命令(reboot不保留),或者修改/etc/sysctl.conf(sysctl -p或者reboot后有效)

缓冲区增大,无疑会加重系统开销,要根据实际需求进行调节,不是大了就好。

对于UDP,写缓冲区和TCP不一样,UDP其实没有所谓的写缓冲区,SO_SNDBUF只是设置了当前发送包的最大尺寸


22 四月, 2006

中国工商银行电子银行业务资费公告

资费公告

电子银行收费标准 银行卡收费标准 人民币基本结算业务收费标准 理财金帐户优惠标准

首页没有入口。我是在他们的网站地图页上找到的。公告后的注释提到他们的告知方式:遇新增或调整收费标准时,中国工商银行将于执行前10个工作日通过本栏目予以公告。为了“维护”您的权益,请您自个儿经常有事没事就打开这个页面瞅瞅吧。

电子银行收费标准》中(个人业务员)规定,1. 网上银行年服务费:每户12元(理财金账户客户免收)

我打95588问了工作人员,网上银行目前免费。

可以肯定,将来是要收费的。

现在工行大力推广网上银行业务,就和当初大力推广银行卡业务一样,等客户足够多了,就要变脸,开始收费了。

下面摘抄此公告的“个人业务”部分,立此存照。

 查看全文

21 四月, 2006

GNU C/C++中,sizeof (struct xys) 与struct成员size之和不一致

X86Linux Redhat 8.0gcc/g++ v3.2

struct xyzstruct{

char a;

double b;

} xyz;

32位的编译器下,因为性能的考虑,对于struct(也包含union等其它数据结构)的大小和每个成员变量的位置都根据寄存器/内存访问值的边界要求做了align。这就使得sizeof(xyz) = 16 而不是实际成员所占空间之和 sizeof(char) + sizeof(double) = 9


一般来说,这不成问题,不过,对于那些空间紧张,或者有特殊要求的应用,就需要考虑struct的紧凑实现了。

譬如,将服务器端传入的固定格式的数据包直接映射到一个结构上去,便于访问:

union {

char bytes[9];

struct xyzstruct data;

} uvw;

如果这里的struct/union是紧凑实现的,那么我们可以通过uvw.data来直接访问bytes中的数据,不用再另外编写代码了。

解决办法:

1. gcc的编译选项“-fpack-struct

可以去除struct结构中额外的hole,缺点是,影响应用中所有的struct,包括从其它库中引入的struct结构

2. __attribute__ ((packed)) 声明

struct {char a; double b;} xyz __attribute__ ((packed));

不过这种简单格式的声明只对C有效,在C++中,你必须对struct中的每个成员(size>1)进行这样的声明:

struct {

char a;

double b __attribute__ ((packed));

int c __attribute__ ((packed));

} xyz;

3. 预编译选项 #pragma pack(n)

这里的n是通知编译器对此“pragma”行后出现的所有数据结构(包括stuct/union)采用n字节方式对齐(align)。如果n=1,那么表示全紧凑,struct中不会出现任何占位的hole。如果n是空,表示回复到编译器缺省的设置(一般=8

#pragma pack(1)

//此段内所有数据结构全紧凑

#pragma pack()


17 四月, 2006

Aqua dock的一个bug: not release file handle in time

一直使用Aqua Dock作为Windows XP桌面的应用程序launcher。(In short, Aqua Dock is a task bar and a Windows program launcher that does it with Apple's style)。上面大多数items使用应用程序自带的icon("use system icon", 可以通过icon extractor从.exe文件中获取这些图标),指向Firefox的快捷项亦然。

今天,在Firefox自动升级到1.5.0.2版的过程中,碰到这个“升级失败”的提示:至少有一个文件无法更新。请确定关闭了所有其它应用程序并有修改文件的权限,然后重新启动Firefox。

登录用户是系统管理员,权限肯定是有的。那么应该是某个应用程序锁住了Firefox的某个文件,使得更新无法成功。

这个应用就是Aqua Dock。道理很简单,我逐个关闭其它应用,同时测试Firefox是否能够更新所有文件。直到我关闭了Aqua Dock后,升级才顺利完成。

我做了个简单的覆盖尝试,证实Aqua Dock确实会锁住那些配置为“use system icon”的item指向的执行文件。我猜想,Aqua Dock打开这些应用程序文件(.exe)以获得其中包含的图标,但是却没有及时关闭被打开的文件句柄,造成其它应用无法删除或者覆盖同一个exe文件。

曾经向不少人推荐Aqua Dock,这里特别提醒一句,如果你在安装后者升级某软件或应用的时候碰到类似问题,不妨关闭正在运行的Aqua Dock再试试。


17 四月, 2006

HP Pavilion ze2000的触摸板驱动

不安装这个驱动,就无法禁止此型号笔记本上的触摸板。使用键盘的时候,一不小心碰到它,常常会造成不必要的麻烦。

Synaptics Touchpad for windows 2000/XP 驱动,版本 7.13.0.1

点击此处下载,下载后,直接运行即可


15 四月, 2006

使用Gmail来过滤垃圾邮件

邮箱,也是越大越美?

这里再次赞一下Gmail的垃圾邮件过滤功能。

我将etang上的邮件自动转发到Gmail,同时在Gmail上建立一个Filter,自动标记这部分邮件是来自etang信箱的。

下面是几天下来GMail过滤的来自etang邮箱的垃圾邮件列表(我手工擦除了tag标记)。

gmail spam folder


12 四月, 2006

Request (web2.0) Product Review by TechCrunch

How To Submit Your Company To TechCrunch

Posted by Michael Arrington


11 四月, 2006

Linux中关闭扬声器

turn off the speaker (小喇叭,和声卡无关)

shell: setterm -blength 0

or setterm -bfreq 0

xfree: xset b off


5 四月, 2006

RIA,在浏览器上动态显示Chart

应该区分浏览器上的两种页面,一种是网站显示,一种是web Application

作为一个网站,当然要照顾到bookmark 功能,要考虑back功能,要关心是否能被搜索引擎找到,还要尽量保证普通用户对网页浏览的一贯体验。而webApplicaton是原来的c/s结构的应用的B/S版,更注重桌面程序的用户体验。 基于这样的认识,我认为,做网站开发,UI的设计,还是应该以XHTML+CSS为主,Ajax用来部分改善UE,不宜过度使用,FlashXUL等其它RIA技术更是如此。

最近公司要开发一个高压侧变压器在线监测和诊断系统,初步决定采用B/S结构,而动态显示图表功能必不可少。譬如分析或者统计的结果曲线,饼图,2维或多维柱图,温度计,仪表盘等。这就是一个典型的桌面应用程序模块。要保证能够在IE6上运行,争取兼容Firefox。采用哪种技术实现呢?

优点:界面够漂亮,够“动态”

问题:除了学习曲线过长外,Flash在图文/列表处理方面的表现,也让人担忧。

参考:展望2006年,Flash來未有來

Ajax动态读取后台数据,通过JSFlash object进行交互。

要求:图表Flash要做得比较通用,设计Flash的人最好能了解一些ActionScript

问题:还是需要学习ActionScript

参考:Flash+Javascript framework Open Source Flash - flashjs ActionScript 2.0入門系列教學文章

W3C的标准是SVG,这个VML肯定是没戏了。IE5开始支持,不过在稍后版本,包括IE6的典型安装中,就已经不再包含VML控件了。当然,现在的IE6还支持,但是要手工打开“允许二进制脚本”安全选项。不过,至少在IE里还能用,看了几个例子,都还不错。

参考:

VML实现国际钟表,VML Clock

Chart Widget Mozilla或者Opera上直接用<canvas>,在IE上利用VML封装成IECanvas,不过,我的IE6上显示始终有问题,脚本出错

还需要等待,等IE开始支持了再说。在这之前,还不如使用VML

使用JS+div,在浏览器上直接绘图。学软件专业的人一定倍感亲切吧。一个椭圆可能包含数百个div,数量是多了点,不过绘制和clear的速度都不慢。

优点:纯粹。这里只有JSXHTML

参考:JavaScript VectorGraphics library

问题:过多的对象生成和释放,不知道会不会引起浏览器内存泄漏

MozillaXUL,微软的XAML,还在研究,一时半会儿恐怕用不起来。而且,几个例子,只看到一些常用控件的实现,对于Chart,尤其是vector chart,并未涉及。从发展上看,矢量图的方向还应该是SVGXUL/XAML,关注的应该是客户端RIA的整体实现方案

参考:XUL ZK Engine, ZK demo