王升的共享空间: http://wangsheng85.spaces.live.com/
自是人生长恨水长东
乌夜啼
【南唐】李煜
林花谢了春红,
太匆匆,
无奈朝来寒雨晚来风。
胭脂泪,
相留醉,
几时重,
自是人生长恨水长东。
【注释】
①此调原为唐教坊曲,又名《相见欢》、《秋夜月》、《上西楼》。三十六字,上片平韵,下片两仄韵两平韵。
②谢:凋谢。
③胭脂泪:指女子的眼泪。女子脸上搽有胭脂泪水流经脸颊时沾上胭脂的红色,故云。
④几时重:何时再度相会。
【简析】
此词将人生失意的无限怅恨寄寓在对暮春残景的描绘中,是即景抒情的典范之作。起句“ 林花谢了春红 ”,即托出作者的伤春惜花之情;而续以“太匆匆”,则使这种伤春惜花之情得以强化。狼藉残红,春去匆匆;而作者的生命之春也早已匆匆而去,只留下伤残的春心和破碎的春梦。因此,“太匆匆”的感慨,固然是为林花凋谢之速而发,但其中不也糅合了人生苦短、来日无多的喟叹,包蕴了作者对生命流程的理性思考?“无奈朝来寒雨晚来风”一句点出林花匆匆谢去的原因是风雨侵龚,而作者生命之春的早逝不也是因为过多地栉风沐雨?所以,此句同样既是叹花,亦是自叹。“无奈”云云,充满不甘听凭外力摧残而又自恨无力改变生态环境的感怆。换头“胭脂泪”三句,转以拟人化的笔墨,表现作者与林花之间的依依惜别之情。这里,一边是生逢末世,运交华盖的失意人,一边是盛时不再、红消香断的解语花,二者恍然相对,不胜缱绻。“胭脂泪”,遥按上片“林花谢了春红”句,是从杜甫《曲江对雨》诗“林花著雨胭脂湿”变化而来。林花为风侵欺,红^叟鲛肖(左应加鱼旁),状如胭脂。“胭脂泪”者,此之谓也。但花本无泪,实际上是惯于“以我观物”的作者移情于彼,使之人格化 —— 作者身历世变,泣血无泪,不亦色若胭脂?“相留醉”,一作“留人醉”,花固怜人,人亦惜花;泪眼相向之际,究竟是人留花抑或花留人,已惝恍难分。着一“醉”字,写出彼此如醉如痴、眷变难舍的情态,极为传神,而“几时重”则吁出了人与花共同的希冀和自知希冀无法实现的怅惘与迷茫。 结句“自是人生长恨水长东”, 一气呵成益见悲慨。“人生长恨”似乎不仅仅是抒写一已的失意情怀,而涵盖了整个人类所共有的生命的缺憾,是一种融汇和浓缩了无数痛苦的人生体验的浩叹。
js提交的数据的编码
js 提交的数据的编码都是utf-8的吗?
这个问题问的不太对,我们使用js的encodeURIComponent()函数或者escape()函数编码对数据进行编码,都是按照utf-8 来编码的,所以js提交后的数据才是utf-8的,和js没有必然联系。
关于url的编码?
如果url里面含有中文字符,则浏览器会按照设置对这些字符做编码。默认utf-8编码,可以设置为ansi编码。
IE中: 选项=》高级=》总是以utf-8编码发送url
Firefox: 地址栏输入“about:config”,选项“network.standard-url.encode-utf8”,即可改变发送URL的编码方式。
动态script标签加载js文件需要注意的问题
对于下面一段js代码
<?php
var excuteScript = function (id, scriptSource, charset) {
var head = document.getElementsByTagName(‘head’)[0];
var oldScript = document.getElementById(id);
if (oldScript) {
head.removeChild(oldScript);
}
var newScript = document.createElement(‘script’);
if (charset) {
newScript.charset = charset;
} else {
newScript.charset = ‘gb2312’;
}
newScript.id = id;
newScript.type = ‘text/javascript’;
scriptSource += (/?/.test(scriptSource)?"&":"?") + "_=" + (new Date()).getTime();
newScript.src = scriptSource;
head.appendChild(newScript);
};
?>
对于IE和firefox是有所不同的:
IE: 请求发起在给script标签的src属性赋值的时候,至少ie8是这样
Firefox: 请求发起于appendChild的时候,如果创建的标签没有append操作,将不会发起请求; 至少firefox 3.0.11 是这样
我们可以通过下面的脚本测试一下:
<html>
<head><title>test script </title></head>
<body>
<script>
scriptSource = "http://phpor.net/404.js";
var head = document.getElementsByTagName(‘head’)[0];
var oldScript = document.getElementById(id);
if (oldScript) {
head.removeChild(oldScript);
}
var newScript = document.createElement(‘script’);
newScript.charset = ‘gb2312’;
newScript.id = "testid";
newScript.type = ‘text/javascript’;
newScript.src = scriptSource;
newScript.src = scriptSource +"?2";
//head.appendChild(newScript);
</script>
</body>
</html>
陈奎家住陕西延安城
歌手名:曲剧
歌曲名:陈奎家住陕西延安城
专辑名:陈三两
陈奎家住陕西延安城,南门以里有他的门庭。
他是个独生子,七岁把书攻,不幸遭大火,家财被烧清;
可怜他的二爹娘,火坑丧性命,单撇下陈奎自己孤苦伶仃。
无奈何武定州去投亲朋,只可惜世态炎凉无人照应。
走投无有路,流落大街中,挨门去讨饭,谁能把他疼。
偶遇衙前班头,收他去打更。打一更钱一个,二更二文铜。
那一日正半夜,大祸从天生。衙门失了盗,窃贼无影踪,拿住了小陈奎下绝情。
这才是屋漏偏遇连阴雨,行船遇着顶头风。打更钱一文不能要,苦苦逼他招口供。
打得他死去活来险些丧命,衙内不要他再不能打更。
小陈奎万般无计奈,又只得左提棍右挎篮挨门挨户沿街讨要去操旧营生。
那一日陈奎讨饭去到富春院,我见他衣褴褛面憔悴真是可怜。
我将他唤上北楼问一遍,俺们二人身世苦都似黄连。
我赠他纹银二十两,周济他糊口把衣添。
小陈奎得银两不买衣饭,到大街买诗文只把书观。
我见他人穷志不短,就有心周济他奇儿男。
读起书来了——
我陈奎操碎我一片心肠,老鸨儿打得我周身是伤。
苦口又婆心,教他读文章,我与他又订下提铃计一桩。
大街上买来了铜铃绒线,从北楼扯到了西楼上边。陈奎在西楼把书念,我在北楼把文观。
夜半内听不到书音贯耳,就知那小陈奎昏昏入眠。
在北楼扯动红绒线,响铜铃惊醒陈奎又把书观。
日月如梭光阴似箭,西楼上读书有好几年。我教会他文章有三百篇,梅花篆字我亲手传。
北京城里开科选,陈奎进京去求官。
伸手拉住小兄弟,有几句金石良言你牢记在心间。
得中要把清官做,且莫要草菅人命做贪官。
得中后搭救姐姐出离苦海,再与我屈死二老报仇冤。
这几件大事要牢牢记下,也不枉我苦口婆心教读你几年。
陈奎好比一只虎,陈三两好比捕鼠猫。猛虎跟着猫学艺,胆大狸猫把虎教。
窜山跳涧都教会,得第把我恩忘了。大老爷你替我想一想,这样的门徒可教不可教。
我好比一只孤舟在顺水漂,船到江心失了篙。有前因无后果,有了上枝无下梢。
指河南我把陈奎骂,你的文章是谁教。得恩不报非君子,忘恩负义小儿曹。
陈三两越骂我心越恼……
apache异常分析全过程
关于apache中的异常:
现象:
1、 10.49.4.61 的httpd访问不了,但是访问却又不是立即退出,而是一直等待
2、 10.49.4.61 的httpd子进程240个,不再变化
3、 netstat 发现很多close_wait 的连接; 就是客户端已经断开,但是服务器还没有断开的情况
分析:
1. tcpdump 发现连接已建立,也发送了一些请求数据,接着就什么也没有了; 说明请求并没有被apache子进程给接走
2. netstat 查看一下,发现Recv-Q 里面确实有数据
3. strace httpd子进程发现每个子进程都如下:
write(11, "10.49.4.21 – – [12/Jul/2009:10:2"…, 101 <unfinished …>
显然,要写apache日志,而且是今天10点20多时的日志,但是被某种原因给阻塞了,下面就是要知道为什么阻塞了
4. 看一下fd = 11 是个什么东西:
[root@sso115 htdocs]# ll /proc/17151/fd/
total 0
lr-x—— 1 root root 64 Jul 12 10:53 0 -> /dev/null
l-wx—— 1 root root 64 Jul 12 10:53 1 -> /dev/null
lr-x—— 1 root root 64 Jul 12 10:53 10 -> eventpoll:[41846266]
l-wx—— 1 root root 64 Jul 12 10:53 11 -> pipe:[41551707]
lrwx—— 1 root root 64 Jul 12 10:53 12 -> socket:[41846267]
l-wx—— 1 root root 64 Jul 12 10:53 13 -> pipe:[41551708]
l-wx—— 1 root root 64 Jul 12 10:53 2 -> /data1/apache2/logs/error_log
lrwx—— 1 root root 64 Jul 12 10:53 3 -> socket:[39585452]
lrwx—— 1 root root 64 Jul 12 10:53 4 -> socket:[39585453]
lr-x—— 1 root root 64 Jul 12 10:53 5 -> pipe:[41551704]
l-wx—— 1 root root 64 Jul 12 10:53 6 -> pipe:[41551704]
l-wx—— 1 root root 64 Jul 12 10:53 7 -> /data1/apache2/logs/access_log
l-wx—— 1 root root 64 Jul 12 10:53 8 -> pipe:[41551705]
l-wx—— 1 root root 64 Jul 12 10:53 9 -> pipe:[41551706]
原来是个管道,可能是管道写满了;那么这个管道是做什么的呢?
5. 应该是和rotatelogs程序共有的pipe,验证如下:
rotatelogs 只剩下三个进程了,应该有四个呢,肯定被谁误杀了一个!!!
[root@sso115 ~]# ps aux | grep rot
root 29709 0.0 0.0 61116 736 pts/1 S+ 14:04 0:00 grep rot
root 31469 0.0 0.0 23524 696 ? S Jul10 0:00 /data1/apache2/bin/rotatelogs /data1/apache2/logs/%Y%m/online.internal.sina.com.cn-80-error_log.%Y%m%d 86400 480
root 31470 0.0 0.0 23524 692 ? S Jul10 0:00 /data1/apache2/bin/rotatelogs /data1/apache2/logs/%Y%m/online.sso.sina.com.cn-80-error_log.%Y%m%d 86400 480
root 31472 0.0 0.0 23524 692 ? S Jul10 0:00 /data1/apache2/bin/rotatelogs /data1/apache2/logs/%Y%m/online.sso.sina.com.cn-80-access_log.%Y%m%d 86400 480
[root@sso115 ~]#
每个进程里面都没有这个管道
[root@sso115 ~]# ll /proc/31469/fd
total 0
lr-x—— 1 root root 64 Jul 12 10:53 0 -> pipe:[41551705]
l-wx—— 1 root root 64 Jul 12 10:53 1 -> /dev/null
l-wx—— 1 root root 64 Jul 12 10:53 2 -> /data1/apache2/logs/error_log
[root@sso115 ~]# ll /proc/31470/fd
total 0
lr-x—— 1 root root 64 Jul 12 10:53 0 -> pipe:[41551706]
l-wx—— 1 root root 64 Jul 12 10:53 1 -> /dev/null
l-wx—— 1 root root 64 Jul 12 10:53 2 -> /data1/apache2/logs/error_log
[root@sso115 ~]#
[root@sso115 ~]# ll /proc/31472/fd
total 0
lr-x—— 1 root root 64 Jul 12 10:53 0 -> pipe:[41551708]
l-wx—— 1 root root 64 Jul 12 10:53 1 -> /dev/null
l-wx—— 1 root root 64 Jul 12 10:53 2 -> /data1/apache2/logs/error_log
[root@sso115 ~]#
显然,那个rotatelogs进程肯定是被谁给杀掉了,或者是出现意外死亡了;
查了一下系统log,有看了一下用户的.bash_history 都没有发现和rotatelogs相关的信息
6. 没法查下去了,不过可以做一个测试,就是把rotatelogs进程杀掉,是否就肯定出现这种现象
使用graceful的办法重启apache,原以为不能凑效,因为请求都是为处理完的,而且不可能处理完的;但是还是都死掉了
7. 重启apache,两个虚拟机,四个rotatelogs 进程; 试图杀死一个rotatelogs进程,但总是立即又出现了一个新的,以为该进程具有自派生机制,
就用 kill -9 来杀,结果还是立即重新启动一个;
观察了一下新的进程的ppid,发现时apache守护进程的pid,于是用strace监视一下apache的守护进程; 因为rotatelogs 进程是apache守护
进程的子进程,所以rotatelogs进程死掉的时候会给apache守护进程发送一个信号,apache守护进程就可以根据自己保存的管道在启动一个
rotatelogs进程,于是这个进程就有了杀不死的功能了。
可以用这个办法做杀不死进程。
跟踪apache守护进程的主要信息
22934 14:34:35.057195 wait4(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGKILL}], WNOHANG|WSTOPPED, NULL) = 31358
22934 14:34:35.057365 write(2, "piped log program \’/data1/apache"…, 154) = 154
22934 14:34:35.057490 dup(10) = 14
22934 14:34:35.057561 dup(11) = 15
22934 14:34:35.057619 dup(1) = 16
22934 14:34:35.057689 dup(2) = 17
22934 14:34:35.057893 access("/data1/apache2/bin/rotatelogs", X_OK) = 0
22934 14:34:35.057991 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x2aaaab123c70) = 31463
应用程序如何立即知道网络的连接状态
当网络断开时,UC可以立即知道,MSN也能立即知道;
当网络重新已连接时,UC没有立即发现,MSN能立即发现。
为什么呢?MSN是如何立即知道网络状态的变化的呢?
google了一下,发现一篇相关的文章:http://www.flextheworld.com/2009/01/adobe-air-web-status.html/comment-page-1
它使用了每3s测试一次网络状态的办法,显然这没有实现“立即”,更可恨的是,它是用别人的网页(google的首页)来测试的;可能这人脑袋被驴踢过。
继续寻找答案,感觉是系统底层提供了这样的事件通知。
看一下这篇文章:http://blog.csdn.net/luozhenyu/archive/2009/04/27/4130223.aspx
是C#写的一个例子,基本原理是调用系统的API,当然是.net Framework 里的方法,检查网络连接的状态,至少这种检查是不需要真正连网的,所以循环检查是可以接受的。
还有就是可以直接调用windows的API,可能是:InternetGetConnectedState函数
base64 测试
XUe1eiYB1QK3WjY17wor5Q5hWqUKnSO8qrqq5NBgwvTEBZH3LhIrjt0jx6xPiNILdLkIQaXeFXl6rF99k9R22Q==
daemo 初始化代码
下面是memcached中初始化一个daemo的代码,如果我们自己要写daemo的话,这个可以参考:
1. fork时使用了switch结构,而不是if … else
2. 提供了一个参数,决定是否重定向标准输入、标准输出、标准错误
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
int daemon(int nochdir, int noclose)
{
int fd;
switch (fork()) {
case –1:
return (-1);
case 0:
break;
default:
_exit(EXIT_SUCCESS);
}
if (setsid() == –1)
return (-1);
if (nochdir == 0)
(void)chdir("/");
if (noclose == 0 && (fd = open("/dev/null", O_RDWR, 0)) != –1) {
(void)dup2(fd, STDIN_FILENO);
(void)dup2(fd, STDOUT_FILENO);
(void)dup2(fd, STDERR_FILENO);
if (fd > STDERR_FILENO)
(void)close(fd);
}
return (0);
}