26 四月, 2006
Socket编程中发送接收缓冲大小设置
对于TCP,因为是可靠连接,所以,一个包被抛弃(发送方或者接受方),底层协议会要求再发送一次,或者阻塞在应用层。
而如果使用UDP,那么必须由应用层自己作逻辑判断,保证数据的完整性。否则阻塞时,包会被简单地丢弃。
Linxu 2.4中,
- 发送缓存的初始大小 : sysctl.net.core.wmem_default = 65536
- 发送缓存的最大值(bytes):sysctl.net.core.wmem_max = 65535
- 接收缓存的初始大小 : sysctl.net.core.rmem_default = 65536
- 接收缓存的最大值(bytes):sysctl.net.core.rmem_max = 65535
应用层,使用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之和不一致
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的垃圾邮件过滤功能。
我将etang上的邮件自动转发到Gmail,同时在Gmail上建立一个Filter,自动标记这部分邮件是来自etang信箱的。
下面是几天下来GMail过滤的来自etang邮箱的垃圾邮件列表(我手工擦除了tag标记)。
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,不宜过度使用,Flash,XUL等其它RIA技术更是如此。
最近公司要开发一个高压侧变压器在线监测和诊断系统,初步决定采用B/S结构,而动态显示图表功能必不可少。譬如分析或者统计的结果曲线,饼图,2维或多维柱图,温度计,仪表盘等。这就是一个典型的桌面应用程序模块。要保证能够在IE6上运行,争取兼容Firefox。采用哪种技术实现呢?
- 全部采用Flash实现
优点:界面够漂亮,够“动态”
问题:除了学习曲线过长外,Flash在图文/列表处理方面的表现,也让人担忧。
- 图表部分用Flash实现,Ajax+js+flash
Ajax动态读取后台数据,通过JS与Flash object进行交互。
要求:图表Flash要做得比较通用,设计Flash的人最好能了解一些ActionScript。
问题:还是需要学习ActionScript
参考:Flash+Javascript framework Open
Source Flash - flashjs; ActionScript 2.0入門系列教學文章
- 使用微软的VML实现图表
W
参考:
VML实现国际钟表,VML Clock
Chart Widget 在Mozilla或者Opera上直接用<canvas>,在IE上利用VML封装成IECanvas,不过,我的IE6上显示始终有问题,脚本出错
- 直接使用SVG
还需要等待,等IE开始支持了再说。在这之前,还不如使用VML呢
- 全部采用JavaScript实现
使用JS+div,在浏览器上直接绘图。学软件专业的人一定倍感亲切吧。一个椭圆可能包含数百个div,数量是多了点,不过绘制和clear的速度都不慢。
优点:纯粹。这里只有JS和XHTML
参考:JavaScript
VectorGraphics library
问题:过多的对象生成和释放,不知道会不会引起浏览器内存泄漏
- XUL、XAML或其它
Mozilla的XUL,微软的XAML,还在研究,一时半会儿恐怕用不起来。而且,几个例子,只看到一些常用控件的实现,对于Chart,尤其是vector chart,并未涉及。从发展上看,矢量图的方向还应该是SVG。XUL/XAML,关注的应该是客户端RIA的整体实现方案
参考:XUL ZK Engine, ZK demo



