安装盘一: suse/i586/rzsz-0.12.20-853.2.i586.rpm
树莓派rz sz apt-get包:
sudo apt-get install lrzsz
CentOS6.5:
sudo yum install lrzsz
树莓派rz sz apt-get包:
sudo apt-get install lrzsz
CentOS6.5:
sudo yum install lrzsz
公司编号 404109
公司名称 重庆石柱公司
所在省市 重庆市,重庆市
联系电话 023-73344888,18996912225
负责人 焦伟
地址 重庆市石柱县二环路国税局斜对面
派送范围 石柱县:县城内。
不派送范围 乡镇、村组及其它不派送
所开通的增值业务 预付款; 网上支付;
公司编号 400013
公司名称 重庆丰都公司
所在省市 重庆市,重庆市
联系电话 023-70638886
负责人 彭洪峰
地址 重庆丰都县三合镇平都大道东段91号广电局正对面
派送范围 丰都县:县城内(三合镇城区范围内),南天湖东路,东升路,龙河路,沙湾路,雪玉路,庙坡路,商业一路,商业二路,南天湖中路。河北中路,秀才路,延生路,世坪路,南天湖西路,新凯路,双桂路,峡南溪路,平都大道,平都大道东段,中段,西段,滨江东路,中路,西路,名山大道,四环路。
【更新时间:2009-10-28 16:13_j】
不派送范围 丰都新城,湛普镇,双路镇,兴义镇,名山镇,包鸾镇,龙河镇,社坛镇,崇兴镇,高家镇,十直镇,长江大桥,看守所和其他乡镇村组不派送。
【更新时间:2009-10-28 16:13_j】
所开通的增值业务 预付款; 到付业务; 网上支付;
公司名称 重庆石柱公司
所在省市 重庆市,重庆市
联系电话 023-73344888,18996912225
负责人 焦伟
地址 重庆市石柱县二环路国税局斜对面
派送范围 石柱县:县城内。
不派送范围 乡镇、村组及其它不派送
所开通的增值业务 预付款; 网上支付;
公司编号 400013
公司名称 重庆丰都公司
所在省市 重庆市,重庆市
联系电话 023-70638886
负责人 彭洪峰
地址 重庆丰都县三合镇平都大道东段91号广电局正对面
派送范围 丰都县:县城内(三合镇城区范围内),南天湖东路,东升路,龙河路,沙湾路,雪玉路,庙坡路,商业一路,商业二路,南天湖中路。河北中路,秀才路,延生路,世坪路,南天湖西路,新凯路,双桂路,峡南溪路,平都大道,平都大道东段,中段,西段,滨江东路,中路,西路,名山大道,四环路。
【更新时间:2009-10-28 16:13_j】
不派送范围 丰都新城,湛普镇,双路镇,兴义镇,名山镇,包鸾镇,龙河镇,社坛镇,崇兴镇,高家镇,十直镇,长江大桥,看守所和其他乡镇村组不派送。
【更新时间:2009-10-28 16:13_j】
所开通的增值业务 预付款; 到付业务; 网上支付;
php /data/www/GatewayWorker-Zhuanye/start.php status
Workerman[/data/www/GatewayWorker-Zhuanye/start.php] status
----------------------------------------------GLOBAL STATUS----------------------------------------------------
Workerman version:3.5.3 PHP version:7.0.5
start time:2019-04-25 11:34:13 run 34 days 21 hours
load average: 0.01, 0, 0 event-loop:\Workerman\Events\Event
1 workers 8 processes
worker_name exit_status exit_count
zhuanye 64000 149
----------------------------------------------PROCESS STATUS---------------------------------------------------
pid memory listening worker_name connections send_fail timers total_request qps status
42782 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633711 0 [idle]
42820 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633708 0 [idle]
42822 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633710 0 [idle]
42824 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633757 0 [idle]
42837 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633684 0 [idle]
42897 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633637 0 [idle]
42910 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633703 0 [idle]
42914 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633644 0 [idle]
root:~#cat cao
total 3164
-rw-r--r-- 1 root root 115 2010-03-13 01:24 awk
-rw-rw-rw- 1 root root 182870 2004-01-29 19:07 mp.xml
-rw-r--r-- 1 root root 210668 2010-03-03 14:49 6.zip
drwxr-xr-x 3 root root 4096 2009-11-22 13:35 arch
-rwxr-xr-x 1 root root 93 2010-03-09 16:49 co.sh
-rw-r--r-- 1 root root 0 2010-03-11 18:30 direct
-rwxr-xr-x 1 root root 73 2010-03-10 10:31 gesid.sh
-rwxr-xr-x 1 root root 1049 2010-03-10 14:06 getsh
-rw-r--r-- 1 root root 364 2010-03-13 02:27 hosts
-rw-r--r-- 1 root root 125 2010-03-13 01:33 kv
-rw-r--r-- 1 root root 76 2010-03-12 11:31 message
:~# awk 'BEGIN{print "sum"}NR==3{if($2<$5){$9=$2+$5;print $9}}' cao
sum
182871
~# awk 'BEGIN{print "sum"}NR==3{if($2<$5){$9=$2+$5}}END{print $9}' cao
sum
###还有一个空行,注意###
注意下面第三条的解释。
1.首先AWK处理文本的时候 是一行一行的读,一行一行的处理
2.你加了NR==3这个条件,只有这个条件成立的时候才执行后面的action
3.END 是在所有文件读入完以后 再执行的action原因在于$9与sum不同。$9是字段引用,而sum是自定义变量。字段是随着记录而变化的,sum不会。
Workerman[/data/www/GatewayWorker-Zhuanye/start.php] status
----------------------------------------------GLOBAL STATUS----------------------------------------------------
Workerman version:3.5.3 PHP version:7.0.5
start time:2019-04-25 11:34:13 run 34 days 21 hours
load average: 0.01, 0, 0 event-loop:\Workerman\Events\Event
1 workers 8 processes
worker_name exit_status exit_count
zhuanye 64000 149
----------------------------------------------PROCESS STATUS---------------------------------------------------
pid memory listening worker_name connections send_fail timers total_request qps status
42782 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633711 0 [idle]
42820 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633708 0 [idle]
42822 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633710 0 [idle]
42824 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633757 0 [idle]
42837 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633684 0 [idle]
42897 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633637 0 [idle]
42910 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633703 0 [idle]
42914 2M websocket://127.0.0.1:943 zhuanye 49 0 3 2633644 0 [idle]
root:~#cat cao
total 3164
-rw-r--r-- 1 root root 115 2010-03-13 01:24 awk
-rw-rw-rw- 1 root root 182870 2004-01-29 19:07 mp.xml
-rw-r--r-- 1 root root 210668 2010-03-03 14:49 6.zip
drwxr-xr-x 3 root root 4096 2009-11-22 13:35 arch
-rwxr-xr-x 1 root root 93 2010-03-09 16:49 co.sh
-rw-r--r-- 1 root root 0 2010-03-11 18:30 direct
-rwxr-xr-x 1 root root 73 2010-03-10 10:31 gesid.sh
-rwxr-xr-x 1 root root 1049 2010-03-10 14:06 getsh
-rw-r--r-- 1 root root 364 2010-03-13 02:27 hosts
-rw-r--r-- 1 root root 125 2010-03-13 01:33 kv
-rw-r--r-- 1 root root 76 2010-03-12 11:31 message
:~# awk 'BEGIN{print "sum"}NR==3{if($2<$5){$9=$2+$5;print $9}}' cao
sum
182871
~# awk 'BEGIN{print "sum"}NR==3{if($2<$5){$9=$2+$5}}END{print $9}' cao
sum
###还有一个空行,注意###
注意下面第三条的解释。
1.首先AWK处理文本的时候 是一行一行的读,一行一行的处理
2.你加了NR==3这个条件,只有这个条件成立的时候才执行后面的action
3.END 是在所有文件读入完以后 再执行的action原因在于$9与sum不同。$9是字段引用,而sum是自定义变量。字段是随着记录而变化的,sum不会。
[~/bc]# vim baidu4
90525+92610+91521+92438+90379+92213+93073+91301+93514+92292
command:
变为:
90525
92610
91521
92438
90379
92213
93073
91301
93514
92292
Linux下的vi换行符是 \r
特别注意:在完全用vi操作在linux下还是 \n
awk列求和:
多列求和相除:
[~/add]# awk '{a+=$1;b+=$2} END{print a/1024,b/1024}' add.txt
0.0820312 0.0751953
换行符‘\n’和回车符‘\r’的区别:
答案:
是的,顾名思义,换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符
---------------------------------------------------------------
在控制台程序里,回车的本意是将光标移动到屏幕最左边(此时光标的横坐标没有变),换行就是将光标移动到下一行(此时光标的纵坐标没有变),两者结合起来就实现了回车(省略说法)效果。
---------------------------------------------------------------
这是DOS的吧。在UNIX中就有点不同了。
在UNIX中,用一个'\n'就可以做DOS中'\n''\r'做的事了。
---------------------------------------------------------------
起源是打字机啦,回车是将打字头复位,换行是将打字纸上卷一行。
90525+92610+91521+92438+90379+92213+93073+91301+93514+92292
command:
:%s/+/\r/g
变为:
90525
92610
91521
92438
90379
92213
93073
91301
93514
92292
Linux下的vi换行符是 \r
特别注意:在完全用vi操作在linux下还是 \n
如替换: :%s/\n/,/g
//换行替换为逗号,来拼装sql等等。。。awk列求和:
cat baidu4 |awk '{total+=$1};END{print total}'
awk 'BEGIN{total=0}{total+=$1}END{print total}' add.txt
多列求和相除:
[~/add]# awk '{a+=$1;b+=$2} END{print a/1024,b/1024}' add.txt
0.0820312 0.0751953
换行符‘\n’和回车符‘\r’的区别:
答案:
是的,顾名思义,换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符
---------------------------------------------------------------
在控制台程序里,回车的本意是将光标移动到屏幕最左边(此时光标的横坐标没有变),换行就是将光标移动到下一行(此时光标的纵坐标没有变),两者结合起来就实现了回车(省略说法)效果。
---------------------------------------------------------------
这是DOS的吧。在UNIX中就有点不同了。
在UNIX中,用一个'\n'就可以做DOS中'\n''\r'做的事了。
---------------------------------------------------------------
起源是打字机啦,回车是将打字头复位,换行是将打字纸上卷一行。
。。。。
有些事情我们不光想了也做,开发了版本一直都没有上线。有一个很重要的原因是,我们发现顺序好像错了。就是当你想要去做这样一件事情的时候,你首先要有一个平台有很多用户,它有信息枢纽的作用,你才有可能去做后面的事情。如果你先做的是后面的事情,前面的事情没办法在后端的积累之后完全形成出来!
有些事情我们不光想了也做,开发了版本一直都没有上线。有一个很重要的原因是,我们发现顺序好像错了。就是当你想要去做这样一件事情的时候,你首先要有一个平台有很多用户,它有信息枢纽的作用,你才有可能去做后面的事情。如果你先做的是后面的事情,前面的事情没办法在后端的积累之后完全形成出来!
对一些大流量的web服务器来说,比较常见的问题就是time_wait会很多,起因大多都是apache里 keepalive 没开的原因,将这个开启,相对会少一些,但大流量时还是比较多,这里还有另外一个参数设置
如果不想time_wait不要太多,只要把这个值调低,就肯定不会超过了
但会出现一个新问题,就是在系统日志里,会很多类似这样的警告
Nov 27 15:50:01 localhost kernel: printk: 9498 messages suppressed.
Nov 27 15:50:01 localhost kernel: TCP: time wait bucket table overflow
Nov 27 15:50:06 localhost kernel: printk: 9562 messages suppressed.
Nov 27 15:50:06 localhost kernel: TCP: time wait bucket table overflow
Nov 27 15:50:11 localhost kernel: printk: 10120 messages suppressed.
Nov 27 15:50:11 localhost kernel: TCP: time wait bucket table overflow
Nov 27 15:50:16 localhost kernel: printk: 9182 messages suppressed.
Nov 27 15:50:16 localhost kernel: TCP: time wait bucket table overflow
Nov 27 15:50:21 localhost kernel: printk: 9626 messages suppressed.
这个警告其实不影响使用和性能,只是烦而已。我曾为避免这个提示,就将 net.ipv4.tcp_max_tw_buckets 调得很大,接着 time_wait 也就很大了。这也是上面这个问题,在网上搜索到的解决办法了。不想这个警告出现,重新编译内核,可以避免。
还有另一外问题,就是 fin_wait1 过多的问题,这个情况,一般的服务器上不会有。至少我的情况是这样
但在用了集群/负载均衡(LVS)中,下面的机器,就有这种情况,也曾为解决这个问题苦恼了挺久,经过今天的测试,也可以解决了。
只要在/etc/sysctl.conf 中加入
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_reordering = 5
net.ipv4.tcp_retrans_collapse = 0
就会减少很多了,关键的是 net.ipv4.tcp_orphan_retries 这个
来源:http://meisw.51099.com/show-234-1.html
net.ipv4.tcp_max_tw_buckets = 5000
如果不想time_wait不要太多,只要把这个值调低,就肯定不会超过了
但会出现一个新问题,就是在系统日志里,会很多类似这样的警告
Nov 27 15:50:01 localhost kernel: printk: 9498 messages suppressed.
Nov 27 15:50:01 localhost kernel: TCP: time wait bucket table overflow
Nov 27 15:50:06 localhost kernel: printk: 9562 messages suppressed.
Nov 27 15:50:06 localhost kernel: TCP: time wait bucket table overflow
Nov 27 15:50:11 localhost kernel: printk: 10120 messages suppressed.
Nov 27 15:50:11 localhost kernel: TCP: time wait bucket table overflow
Nov 27 15:50:16 localhost kernel: printk: 9182 messages suppressed.
Nov 27 15:50:16 localhost kernel: TCP: time wait bucket table overflow
Nov 27 15:50:21 localhost kernel: printk: 9626 messages suppressed.
这个警告其实不影响使用和性能,只是烦而已。我曾为避免这个提示,就将 net.ipv4.tcp_max_tw_buckets 调得很大,接着 time_wait 也就很大了。这也是上面这个问题,在网上搜索到的解决办法了。不想这个警告出现,重新编译内核,可以避免。
还有另一外问题,就是 fin_wait1 过多的问题,这个情况,一般的服务器上不会有。至少我的情况是这样
但在用了集群/负载均衡(LVS)中,下面的机器,就有这种情况,也曾为解决这个问题苦恼了挺久,经过今天的测试,也可以解决了。
只要在/etc/sysctl.conf 中加入
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_reordering = 5
net.ipv4.tcp_retrans_collapse = 0
就会减少很多了,关键的是 net.ipv4.tcp_orphan_retries 这个
来源:http://meisw.51099.com/show-234-1.html
Linux shell 中FTP自动登录批量下载文件
从ftp服务器192.168.1.171上的/home/data 到本地的/home/databackup
!/bin/bash
ftp -v -n 192.168.1.171
user guest 123456
binary
cd /home/data
lcd /home/databackup
prompt
mget *
close
bye
FTP自动登录批量上传文件
从ftp服务器192.168.1.171上的/home/data 到本地的/home/databackup
#!/bin/bash
ftp -v -n 192.168.1.171 << END
user guest 123456
binary
hash
cd /home/data
lcd /home/databackup
prompt
mput *
bye
END
来源:http://user.qzone.qq.com/165162897/blog/1282641785?ptlang=2052
从ftp服务器192.168.1.171上的/home/data 到本地的/home/databackup
!/bin/bash
ftp -v -n 192.168.1.171
user guest 123456
binary
cd /home/data
lcd /home/databackup
prompt
mget *
close
bye
FTP自动登录批量上传文件
从ftp服务器192.168.1.171上的/home/data 到本地的/home/databackup
#!/bin/bash
ftp -v -n 192.168.1.171 << END
user guest 123456
binary
hash
cd /home/data
lcd /home/databackup
prompt
mput *
bye
END
来源:http://user.qzone.qq.com/165162897/blog/1282641785?ptlang=2052
中文词条名:椽子
英文词条名:jack timber rafter spar
椽(chuán)子:它是屋面基层的最底层构件,垂直安放在檩木之上。
屋面基层是承接屋面瓦作的木基础层,它由椽子、望板、飞椽、连檐、瓦口等构件所组成。
房屋的木构架由柱、梁、檩、构架连接件和屋面基层等五部á分组成.
现代混凝土坡屋面中多用洋瓦,即水泥瓦,椽子已不用。仅现于传统的木构建筑中。
椽子的本义,是承屋瓦的圆木放在檩上架着屋顶的木条。它是屋面基层的最底层构件,垂直安放在檩木之上,是屋面基层不可或缺的构件之一。我们常听说的笔大如椽,也足以证明椽子对于房子的重要性了。
椽子所处的位置,所承担的责任,都决定了它必然得有一部分要裸露到房檐下,因而,也就有了出头的椽子。
出头的椽子抛头露面,缺乏保护层,很易受风吹雨淋!日久经化学及物理作用则会逐渐地变烂。也就是说,房子上的椽子只要露出头,就容易遭到风雨的侵蚀,因此先烂掉也就不可避免。
也许是受了杜甫有名诗句“射人先射马,擒贼先擒王”的启发吧,后来也不知是哪个聪明人就演绎出一个推论:“出头的椽子先烂”。毋庸讳言,这句话生动地反映了客观世界中的一个客观事实,更折射出了一些道理。对此常伸手涉足屋檐下的大雨小雨们,可能理解感受得更深刻。君不见,一年四季,风吹雨淋,年复一年,日久天长,出头的椽子先烂是自然而然的了。在客观世界中,类似的事情很多,人们已经司空见惯。
出头的椽子先烂,字面上是自然现象的反映,其所含的哲理意义则是告诫人们先出头的人先遭受挫折,不可贪一时痛快而贸然地强出风头,去遭受风险,要夹着尾巴做人。这句话,似乎无时无刻不在提醒我们要压抑自己、小看自己。所以,尽管对椽子的价值心知肚明,对做椽子向往日久,但出头的椽子,通常没人敢轻易去做。
在社会生活中出头的椽子先烂这类事情也是屡见不鲜。一些人在工作、学习中或多或少地都会尝到“出头的椽子先烂”的滋味儿,恐怕也都是受害者。我们只要观察下自己的周围,就会很容易地发觉,某些人因做事出色而受到上司的肯定和表扬奖励,这原本是一件旨意在引导发扬光大的好事,但事实上,却极其容易事与愿违,即这种表扬奖励常搞得那些人很尴尬,真是“小荷才露尖尖角,早有蜻蜓立上头”啊。本来蜻蜓是该站在荷上欣赏的,可是,那些别有用心的人却成了来践踏的蜻蜓。出头的椽子不但会被看成格格不入的怪异另类,风言风语、冷嘲热讽也必然会随之而来,甚至还会有人在嫉妒心的火攻下,肆意地颠倒黑白,不择手段地向受表扬的人施放冷枪毒箭、泼脏水儿等。结果导致为房子发挥自己应有作用的椽子们,奉献和付出得不到公正的待遇不算,还会被孤立甚至会被折断,然后再被咬牙切齿地抛弃扔掉。
都说杀鸡给猴儿看,既然出头的椽子先烂,木秀于林风必摧之,枪打出头鸟,早起的鸟儿没有虫吃,出力不讨好,那么,大家就都不去做出头的椽子好了,不争先更不争第一吧。耳闻目睹过的人,谁也不愿意再出头,谁也不敢再出头,而只能是随大流得过且过了。可,建房子,就离不开椽子,而,是椽子就得出头,至少得有一部分下地狱的椽子,不管愿意与否,这是房子对椽子的根本要求。除非我们不去做那有风险的椽子,而事实上,椽子再有危险也得有人去承当,毕竟如无梁殿那样不需要椽子的建筑方式难以普及推广和延续。
既然如此,那么出头椽子先烂这既不美观房子也不利于椽子延年益寿的现象,是否就不可救药地永远不能避免了呢?我看不是,其实,出头的椽子也不见得必然先烂,比方说,如果房子的管理者能从全局着眼,照顾到局部利益,采取相应保护措施,同时,椽子也能不断增强免疫力,做到打铁先得自身硬,那么,实现椽子的完好无损的目的,就绝对不是一个天方夜谭了。也就是说,管理者一定要看清楚这种出头椽子先烂背后的原因,在制度和机制上为出头椽子撑把伞,给出了头的优秀椽子涂上必要的防腐油漆,理直气壮地阻止和打击暴风骤雨的歪风邪气,全力真诚地支持和保护在一向积极履行职责的作风端正的椽子们。有了这些真诚强力的支持和保护,只要不是故意弄景的歪斜椽子,就肯定能挺直脊梁,继续与栋梁合力擎举一片片离不开它们支撑的屋顶。
如果能够这样,绝对不会令椽子们抱着“为了房屋千万间,使我不得开心颜”的哀怨,最后伤心地腐烂了。
用椽子之道如斯,用人之道有时也如斯。
英文词条名:jack timber rafter spar
椽(chuán)子:它是屋面基层的最底层构件,垂直安放在檩木之上。
屋面基层是承接屋面瓦作的木基础层,它由椽子、望板、飞椽、连檐、瓦口等构件所组成。
房屋的木构架由柱、梁、檩、构架连接件和屋面基层等五部á分组成.
现代混凝土坡屋面中多用洋瓦,即水泥瓦,椽子已不用。仅现于传统的木构建筑中。
椽子的本义,是承屋瓦的圆木放在檩上架着屋顶的木条。它是屋面基层的最底层构件,垂直安放在檩木之上,是屋面基层不可或缺的构件之一。我们常听说的笔大如椽,也足以证明椽子对于房子的重要性了。
椽子所处的位置,所承担的责任,都决定了它必然得有一部分要裸露到房檐下,因而,也就有了出头的椽子。
出头的椽子抛头露面,缺乏保护层,很易受风吹雨淋!日久经化学及物理作用则会逐渐地变烂。也就是说,房子上的椽子只要露出头,就容易遭到风雨的侵蚀,因此先烂掉也就不可避免。
也许是受了杜甫有名诗句“射人先射马,擒贼先擒王”的启发吧,后来也不知是哪个聪明人就演绎出一个推论:“出头的椽子先烂”。毋庸讳言,这句话生动地反映了客观世界中的一个客观事实,更折射出了一些道理。对此常伸手涉足屋檐下的大雨小雨们,可能理解感受得更深刻。君不见,一年四季,风吹雨淋,年复一年,日久天长,出头的椽子先烂是自然而然的了。在客观世界中,类似的事情很多,人们已经司空见惯。
出头的椽子先烂,字面上是自然现象的反映,其所含的哲理意义则是告诫人们先出头的人先遭受挫折,不可贪一时痛快而贸然地强出风头,去遭受风险,要夹着尾巴做人。这句话,似乎无时无刻不在提醒我们要压抑自己、小看自己。所以,尽管对椽子的价值心知肚明,对做椽子向往日久,但出头的椽子,通常没人敢轻易去做。
在社会生活中出头的椽子先烂这类事情也是屡见不鲜。一些人在工作、学习中或多或少地都会尝到“出头的椽子先烂”的滋味儿,恐怕也都是受害者。我们只要观察下自己的周围,就会很容易地发觉,某些人因做事出色而受到上司的肯定和表扬奖励,这原本是一件旨意在引导发扬光大的好事,但事实上,却极其容易事与愿违,即这种表扬奖励常搞得那些人很尴尬,真是“小荷才露尖尖角,早有蜻蜓立上头”啊。本来蜻蜓是该站在荷上欣赏的,可是,那些别有用心的人却成了来践踏的蜻蜓。出头的椽子不但会被看成格格不入的怪异另类,风言风语、冷嘲热讽也必然会随之而来,甚至还会有人在嫉妒心的火攻下,肆意地颠倒黑白,不择手段地向受表扬的人施放冷枪毒箭、泼脏水儿等。结果导致为房子发挥自己应有作用的椽子们,奉献和付出得不到公正的待遇不算,还会被孤立甚至会被折断,然后再被咬牙切齿地抛弃扔掉。
都说杀鸡给猴儿看,既然出头的椽子先烂,木秀于林风必摧之,枪打出头鸟,早起的鸟儿没有虫吃,出力不讨好,那么,大家就都不去做出头的椽子好了,不争先更不争第一吧。耳闻目睹过的人,谁也不愿意再出头,谁也不敢再出头,而只能是随大流得过且过了。可,建房子,就离不开椽子,而,是椽子就得出头,至少得有一部分下地狱的椽子,不管愿意与否,这是房子对椽子的根本要求。除非我们不去做那有风险的椽子,而事实上,椽子再有危险也得有人去承当,毕竟如无梁殿那样不需要椽子的建筑方式难以普及推广和延续。
既然如此,那么出头椽子先烂这既不美观房子也不利于椽子延年益寿的现象,是否就不可救药地永远不能避免了呢?我看不是,其实,出头的椽子也不见得必然先烂,比方说,如果房子的管理者能从全局着眼,照顾到局部利益,采取相应保护措施,同时,椽子也能不断增强免疫力,做到打铁先得自身硬,那么,实现椽子的完好无损的目的,就绝对不是一个天方夜谭了。也就是说,管理者一定要看清楚这种出头椽子先烂背后的原因,在制度和机制上为出头椽子撑把伞,给出了头的优秀椽子涂上必要的防腐油漆,理直气壮地阻止和打击暴风骤雨的歪风邪气,全力真诚地支持和保护在一向积极履行职责的作风端正的椽子们。有了这些真诚强力的支持和保护,只要不是故意弄景的歪斜椽子,就肯定能挺直脊梁,继续与栋梁合力擎举一片片离不开它们支撑的屋顶。
如果能够这样,绝对不会令椽子们抱着“为了房屋千万间,使我不得开心颜”的哀怨,最后伤心地腐烂了。
用椽子之道如斯,用人之道有时也如斯。
SUN RPC是对socket的封装,其底层适用TCP或是UDP协议来传输数据,本文讨论SUN RPC使用的超时和重传策略。
1. 总超时值:一个客户端等待其服务器的应答的总时间量。TCP和UDP都是用该值;
2. 重试超时:只用于UDP, 是一个客户等待其服务器的应答期间每次重传请求的间隔时间;
注:因TCP是可靠的面向连接的协议,有自己的一套机制来保证端到端的传输可靠性,故使用TCP建立的应用不需要考虑超时重传等问题。
默认的超时时间可以通过clnt_control函数获取,
printf("timeout = %d : timeout = %d\n", tv.tv_sec, tv.tv_usec);
其中,UDP的默认总超时值为-1,重传超时值为5s(unp书上说是15s);
TCP的默认总超时值为0(unp书上说是30s);
跟书上不同的地方应该是由于RPC的版本不同吧。
为了对这些数据进行验证,以square程序为例,通过改变clnt_call传递的TIMEOUT值及服务器端处理请求前的睡眠时间值,我做了几个实验:(超时值还可以通过clnt_control来指定,此时rpc_call忽略参数timeout)
1. TIMEOUT = {2,0},服务器端睡眠10s,使用tcp协议;
现象:客户端2s后提示call failed: rpc: time out,服务器接收到一次请求。
分析: 与期望相吻合,应用请求超过总的超时值时返回。
2. TIMEOUT = {2, 0}, 服务器端睡眠10s,使用udp协议;
现象:客户端5s后提示call failed: rpc: time out,服务器接收到一次请求。
分析:不明白,不是2s就提示超时么。
于是,我猜测是不是使用udp时,总的超时值不能小于重传时间呢?
做如下试验:通过clnt_control将UDP的重试时间改成10s,TIMEOUT值不变,仍为2s。
现象:客户端10s后提示call failed: rpc: time out,服务器接收到一次请求。
分析:我的猜测可能是正确的,RPC在实现时将总的超时值设为重传值和TIMEOUT中的较大值,不过这仅仅是猜测,没有看过SUN RPC实现的代码,不敢往下断言。
3. TIMEOUT = {25, 0}, 服务器睡眠10s,使用tcp协议;
现象:客户端10s后收到应答,服务器收到一次请求。
分析:与期望相符合,整个请求没有超出总的超时值。
4. TIMEOUT = {25, 0}, 服务器睡眠10s,使用udp协议;
现象:客户端在快到11s时收到一个回复,而服务器收到三次请求。
分析:
l 0s时,客户端启动后发送请求,服务器端接受该请求,处理时睡眠10s;
l 5s时,客户端重发请求,服务器端接受该请求,等待第一个请求处理完后。
l 10s时,客户端再次发送请求,服务器端接受该请求,等待前两次请求处理完.
不到1s后,客户端收到回复,这是服务器对第一个请求的应答,程序结束。
l 20s后,服务器端处理完第二个请求;
l 20s后,服务器端处理完第三个请求;
服务器睡眠10s就返回结果,为什么客户端会发出第三次请求?
因为网络延时,服务器从收到第一个请求,到睡眠10s,处理数据,返回结果时已经是10s之后的事情了,而客户端在10s时就发送了第三次请求,并马上收到了服务器对第一次请求的应答数据。
以上是我对SUN RPC超时和重传机制的一点理解,望不吝赐教!
来源:http://blog.chinaunix.net/u2/87570/showart_2201021.html
1. 总超时值:一个客户端等待其服务器的应答的总时间量。TCP和UDP都是用该值;
2. 重试超时:只用于UDP, 是一个客户等待其服务器的应答期间每次重传请求的间隔时间;
注:因TCP是可靠的面向连接的协议,有自己的一套机制来保证端到端的传输可靠性,故使用TCP建立的应用不需要考虑超时重传等问题。
默认的超时时间可以通过clnt_control函数获取,
clnt = clnt_create (host, square_prog, square_vers, "udp");
struct timeval tv;
clnt_control(clnt, CLGET_TIMEOUT, (char *)&tv);
printf("timeout = %d : timout = %d\n", tv.tv_sec, tv.tv_usec);
clnt_control(clnt, CLGET_RETRY_TIMEOUT, (char *)&tv);
struct timeval tv;
clnt_control(clnt, CLGET_TIMEOUT, (char *)&tv);
printf("timeout = %d : timout = %d\n", tv.tv_sec, tv.tv_usec);
clnt_control(clnt, CLGET_RETRY_TIMEOUT, (char *)&tv);
printf("timeout = %d : timeout = %d\n", tv.tv_sec, tv.tv_usec);
其中,UDP的默认总超时值为-1,重传超时值为5s(unp书上说是15s);
TCP的默认总超时值为0(unp书上说是30s);
跟书上不同的地方应该是由于RPC的版本不同吧。
为了对这些数据进行验证,以square程序为例,通过改变clnt_call传递的TIMEOUT值及服务器端处理请求前的睡眠时间值,我做了几个实验:(超时值还可以通过clnt_control来指定,此时rpc_call忽略参数timeout)
1. TIMEOUT = {2,0},服务器端睡眠10s,使用tcp协议;
现象:客户端2s后提示call failed: rpc: time out,服务器接收到一次请求。
分析: 与期望相吻合,应用请求超过总的超时值时返回。
2. TIMEOUT = {2, 0}, 服务器端睡眠10s,使用udp协议;
现象:客户端5s后提示call failed: rpc: time out,服务器接收到一次请求。
分析:不明白,不是2s就提示超时么。
于是,我猜测是不是使用udp时,总的超时值不能小于重传时间呢?
做如下试验:通过clnt_control将UDP的重试时间改成10s,TIMEOUT值不变,仍为2s。
现象:客户端10s后提示call failed: rpc: time out,服务器接收到一次请求。
分析:我的猜测可能是正确的,RPC在实现时将总的超时值设为重传值和TIMEOUT中的较大值,不过这仅仅是猜测,没有看过SUN RPC实现的代码,不敢往下断言。
3. TIMEOUT = {25, 0}, 服务器睡眠10s,使用tcp协议;
现象:客户端10s后收到应答,服务器收到一次请求。
分析:与期望相符合,整个请求没有超出总的超时值。
4. TIMEOUT = {25, 0}, 服务器睡眠10s,使用udp协议;
现象:客户端在快到11s时收到一个回复,而服务器收到三次请求。
分析:
l 0s时,客户端启动后发送请求,服务器端接受该请求,处理时睡眠10s;
l 5s时,客户端重发请求,服务器端接受该请求,等待第一个请求处理完后。
l 10s时,客户端再次发送请求,服务器端接受该请求,等待前两次请求处理完.
不到1s后,客户端收到回复,这是服务器对第一个请求的应答,程序结束。
l 20s后,服务器端处理完第二个请求;
l 20s后,服务器端处理完第三个请求;
服务器睡眠10s就返回结果,为什么客户端会发出第三次请求?
因为网络延时,服务器从收到第一个请求,到睡眠10s,处理数据,返回结果时已经是10s之后的事情了,而客户端在10s时就发送了第三次请求,并马上收到了服务器对第一次请求的应答数据。
以上是我对SUN RPC超时和重传机制的一点理解,望不吝赐教!
来源:http://blog.chinaunix.net/u2/87570/showart_2201021.html
串行通信的传送速率用于说明数据传送的快慢,波特率表示串行通信时每秒钟传送“位” 的数目,比如1秒钟传送1位,就是1波特。即1波特=1bps (位/秒)
串行通信常用的标准波特率在RS-232C标准中已有规定,如波特率为600、1200、2400、4800、9600、19200等等。 假若数据传送速率为120字符/秒,而每一个字符帧已规定为10个数据位,则传输速率为120×10=1200位/秒,即波特率为1200,每一位数据传送的时间为波特率的倒数:
T=1÷1200=0.833ms
串行通信常用的标准波特率在RS-232C标准中已有规定,如波特率为600、1200、2400、4800、9600、19200等等。 假若数据传送速率为120字符/秒,而每一个字符帧已规定为10个数据位,则传输速率为120×10=1200位/秒,即波特率为1200,每一位数据传送的时间为波特率的倒数:
T=1÷1200=0.833ms
asctime(将时间和日期以字符串格式表示)阅读全文
bogon:/home/jackxiang # man fd_set 看到了select的用法,贴了下代码如下:
select.cpp
g++ select.c
select.cpp
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int
main(void)
{
fd_set rfds;
struct timeval tv;
int retval;
/* Watch stdin (fd 0) to see when it has input. */
FD_ZERO(&rfds);
FD_SET(0, &rfds);
/* Wait up to five seconds. */
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(1, &rfds, NULL, NULL, &tv);
/* Don't rely on the value of tv now! */
if (retval == -1)
perror("select()");
else if (retval)
printf("Data is available now.\n");
/* FD_ISSET(0, &rfds) will be true. */
else
printf("No data within five seconds.\n");
exit(EXIT_SUCCESS);
}
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int
main(void)
{
fd_set rfds;
struct timeval tv;
int retval;
/* Watch stdin (fd 0) to see when it has input. */
FD_ZERO(&rfds);
FD_SET(0, &rfds);
/* Wait up to five seconds. */
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(1, &rfds, NULL, NULL, &tv);
/* Don't rely on the value of tv now! */
if (retval == -1)
perror("select()");
else if (retval)
printf("Data is available now.\n");
/* FD_ISSET(0, &rfds) will be true. */
else
printf("No data within five seconds.\n");
exit(EXIT_SUCCESS);
}
g++ select.c
bogon:/home/jackxiang/com/com118 # ./a.out
dir
Data is available now.
bogon:/home/jackxiang/com/com118 # dir
total 24
-rwxr-xr-x 1 root root 7534 Aug 28 13:42 a.out
-rw-r--r-- 1 root root 4980 Aug 28 13:30 com118.c
-rw-r--r-- 1 root root 4056 Aug 27 23:05 com118.c.bak.jackxiang
-rw-r--r-- 1 root root 890 Aug 28 13:42 selectexample.cpp
dir
Data is available now.
bogon:/home/jackxiang/com/com118 # dir
total 24
-rwxr-xr-x 1 root root 7534 Aug 28 13:42 a.out
-rw-r--r-- 1 root root 4980 Aug 28 13:30 com118.c
-rw-r--r-- 1 root root 4056 Aug 27 23:05 com118.c.bak.jackxiang
-rw-r--r-- 1 root root 890 Aug 28 13:42 selectexample.cpp
前面介绍了串口的简单读写阅读全文
今天在修改 Blog Mover 上面那块菜单的时候我把 <a href="#" title="Step 1: 从源 Blog 读取日志" onclick="return selectTab('step1)" ... 中的href属性删除了,然后鼠标指针就不是手形了,于是我加上style="cursor:hand;",
在Firefox下查看发现鼠标指针没有变成手形,而是I形,而且报错了,说
”警告: 分析属性 'cursor' 值时出错。 声明被丢弃。
源文件:http://localhost:8080/blog-mover/styles/nicetabs.css
行:46“
后来查了一下发现:
在firefox下设置 cursor:hand;会报错,要用cursor:pointer 才可以。
style="cursor:hand;" 在IE中能正常显示成手;在firefox中却不能正常显示。
如果改用 style="cursor:pointer;" 则在两个浏览器下都能正常显示。
Bond哥说:
所有浏览器兼容!!!
在Firefox下查看发现鼠标指针没有变成手形,而是I形,而且报错了,说
”警告: 分析属性 'cursor' 值时出错。 声明被丢弃。
源文件:http://localhost:8080/blog-mover/styles/nicetabs.css
行:46“
后来查了一下发现:
在firefox下设置 cursor:hand;会报错,要用cursor:pointer 才可以。
style="cursor:hand;" 在IE中能正常显示成手;在firefox中却不能正常显示。
如果改用 style="cursor:pointer;" 则在两个浏览器下都能正常显示。
Bond哥说:
所有浏览器兼容!!!
<a href="javascript:document.getElementById('q_form').submit();">
<form action="question3.php" method="post" name="q_form" id="q_form">
<div class="right_div_2">
<div class="radio1"><input type="radio" name="3" value="yes" /><input type="radio" name="3" value="no"/></div>
<div class="radio2"><input type="radio" name="4" value="yes" /><input type="radio" name="4" value="no" /></div>
<div class="reset_next"><a href="javascript:document.getElementById('q_form').submit();">下一题</a></div>
</div>
</form>
<div class="right_div_2">
<div class="radio1"><input type="radio" name="3" value="yes" /><input type="radio" name="3" value="no"/></div>
<div class="radio2"><input type="radio" name="4" value="yes" /><input type="radio" name="4" value="no" /></div>
<div class="reset_next"><a href="javascript:document.getElementById('q_form').submit();">下一题</a></div>
</div>
</form>
写给应用(PHP)开发工程师,如果这些迹象(不良习惯)仍能在你身上找到,那么看来你还有很多必要的东西要学习,Live and learn。
阅读全文
阅读全文