作者归档:贝贝爸

秀才遇到兵

转贴一篇著名文硕美女同事写的文章,看来说话要注意点,这次就伤害了这个幼小美丽的心灵了。:S
以下为转贴内容,原贴见这里

昨天和程序员灰灰同学讨论短信投票程序的问题。
(P.S.“灰灰”的版权属于老D。)
我:你那个投票程序,我只要给每篇文章编号就行了,让人家用短信发个编号过来就行了,对不?
灰灰:是啊。对了,建议你如果投稿不超过26篇,可以用英文字母A到Z,用不着数字。
我(气愤,心想,凭什么你就断定不会超过26篇?先埋个伏笔准备后面反击他):如此说来,如果不超过10篇或12篇,我只要用天干地支就行了?
灰灰:没错。
我(开始反击了,好歹咱也对电脑这东西有相~当~的了解):可是你那程序认识方块字吗?分得清甲乙丙丁吗?
灰灰(骄傲地):当然认识!
我(继续显摆,不能让他小瞧了我):可是电脑不是只认识0和2吗?
灰灰(愣了1秒,爆发):那是0和1好不好?!!!真受不了……
我(落荒而逃):……

—————————
再更正一下
你要把第一句话改成:转贴一下美女同事写的文章,看来说话要注意点,这次就伤害了一个美丽的心灵了
blog地址是:http://y2kjanexx.spaces.live.com/

一个时间同步的服务器

有时候系统的时间会有误差,windows可以从互联网的时间服务器(internet time server)上来同步时间,但是windows自带的服务器列表经常会出错,同步失败,今天看到ccf有一个同学提供了一个,时间同步的服务器,试用了一下,效果不错,有图为证。
ip是:210.72.145.44
internet time server
从ip地址上查是陕西省西安市 科技网的ip,有可能是真的哦。
在列表里的其他三个同步的服务器是:
time.windows.com
time.nist.gov
time-a.nist.gov
linux上和时间服务器同步时间的方法,参看这里

jquery选择满足条件,排除指定条件

jQuery的选择器是CSS 1-3,XPath的结合物。现在有个需求,连接到外部网站的链接都在新窗口打开,以前的方法很简单就是在链接的地方写上target=”_blank”,但是这样有2个不好的地方。
1.target=”_blank”,不符合严格的DOCTYPE(xhtml1-strict.dtd),参见这里
2.如果自己写blog,代码里面如果有其他网站的链接,都要自己手工加,可能会忘。

现在想用jquery来完成这个工作,思路是,找到所有有链接的节点,如果里面的href是以”http”开始的,并且里面没有本站的域名juyimeng.com的,就给他加一个value为”_blank”的target(如果原来有,就修改成”_blank”)。
第一个很简单,就是
a[@href^=http]
现在是要过滤掉里面含有指定关键字的,找了半天手册,google,发现其实很简单,用一个not就可以了
not(“[@href*=juyimeng.com]
意思是,去除掉href属性里面含有juyimeng.com的节点。
其他的一些用法如下:

E[@foo] 拥有foo属性的E元素
E[@foo=bar] foo属性的值为bar的E元素
E[@foo^=bar] foo属性的值以字符串”bar”开始的E元素
E[@foo$=bar] foo属性的值以字符串”bar”结尾的E元素
E[@foo*=bar] foo属性的值包含有字符串”bar”结尾的E元素

实现整个功能的代码如下:

$("a[@href^=http]").not("[@href*=juyimeng.com]").click(function() {
	 this.target="blank";
});

测试通过,可能写的不是十分严密,但是已经能解决目前的问题了,不知道这里面能不能用正则表达式,或者大小写不敏感,如果可以,就能更精确地实现功能。
有错请提出.:D

python常用的时间方法

我们先导入必须用到的一个module
>>> import time
设置一个时间的格式,下面会用到
>>>ISOTIMEFORMAT=’%Y-%m-%d %X’
看一下当前的时间,和其他很多语言相似这是从epoch(1970 年 1 月 1 日 00:00:00)开始到当前的秒数。
>>> time.time()
1180759620.859
上面的看不懂,换个格式来看看
>>> time.localtime()
(2007, 6, 2, 12, 47, 7, 5, 153, 0)
localtime返回tuple格式的时间,有一个和它类似的函数叫gmtime(),2个函数的差别是时区,gmtime()返回的是0时区的值,localtime返回的是当前时区的值。
>>> time.strftime( ISOTIMEFORMAT, time.localtime() )
‘2007-06-02 12:54:29’
用上我们的时间格式定义了,使用strftime对时间做一个转换,如果取现在的时间,time.localtime() 可以不用。

>>> time.strftime( ISOTIMEFORMAT, time.localtime( time.time() ) )
‘2007-06-02 12:54:31’
>>> time.strftime( ISOTIMEFORMAT, time.gmtime( time.time() ) )
‘2007-06-02 04:55:02’
上面展示了gmtime和localtime的区别。
查看时区用
>>> time.timezone
-28800
上面的值是一个秒值,是当前时区和0时区相差的描述,-28800=-8*3600,即为东八区。

帖几个简单的函数

def ISOString2Time( s ):
    '''
    convert a ISO format time to second
    from:2006-04-12 16:46:40 to:23123123
    把一个时间转化为秒
    '''
    return time.strptime( s, ISOTIMEFORMAT )
def Time2ISOString( s ):
    '''
    convert second to a ISO format time
    from: 23123123 to: 2006-04-12 16:46:40
    把给定的秒转化为定义的格式
    '''
    return time.strftime( ISOTIMEFORMAT, time.localtime( float( s ) ) )
def dateplustime( d, t ):
    '''
    d=2006-04-12 16:46:40
    t=2小时
   return  2006-04-12 18:46:40
   计算一个日期相差多少秒的日期,time2sec是另外一个函数,可以处理,3天,13分钟,10小时等字符串,回头再来写这个,需要结合正则表达式。
    '''
    return Time2ISOString( time.mktime( ISOString2Time( d ) )+time2sec( t ) )
def dateMinDate( d1, d2 ):
    '''
    minus to iso format date,return seconds
    计算2个时间相差多少秒
    '''
    d1=ISOString2Time( d1 )
    d2=ISOString2Time( d2 )
    return time.mktime( d1 )-time.mktime( d2 )

在linux下安装activepython2.5 setuptools ClientCookie

activepython
http://www.activestate.com/products/activepython/
是ActiveState Software的一个python的分发包,带了一些python的扩展.
setuptools
http://cheeseshop.python.org/pypi/setuptools
是一个python的包,它可以简化python包的下载,build,安装升级和卸载
ClientCookie
http://wwwsearch.sourceforge.net/ClientCookie/
是一个python对cookie功能的扩展,从HTTP::Cookies而来。作者说以后不会再发布单独的模块,已经集成到了mechanize里面。

下载上述软件
wget http://downloads.activestate.com/ActivePython/linux/2.5/ActivePython-2.5.1.1-linux-x86.tar.gz
wget http://wwwsearch.sourceforge.net/ClientCookie/src/ClientCookie-1.3.0.tar.gz
wget http://cheeseshop.python.org/packages/2.5/s/setuptools/setuptools-0.6c6-py2.5.egg

先安装ActivePython
tar zxvf ActivePython-2.5.1.1-linux-x86.tar.gz
cd ActivePython-2.5.1.1-linux-x86
./install.sh
输入安装的目录,我输入了/usr/local/python25/
装好后看一下

[[email protected] jym]$ /usr/local/python25/bin/python
ActivePython 2.5.1.1 (ActiveState Software Inc.) based on
Python 2.5.1 (r251:54863, May  1 2007, 17:48:28) 
[GCC 2.95.3 20010315 (SuSE)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
%3E%3E%3E%20

本来应该直接安装ClientCookie的,安装过程中要使用setuptools,它应该自动下载,安装的,但是由于ClientCookie用的url不对,用的是
http://cheeseshop.python.org/packages/2.5/s/setuptools/setuptools-0.6a11-py2.5.egg
所以不能自动下载,只好手工下载,安装
安装
setuptools
在setuptools-0.6c6-py2.5.egg所在的目录运行

ln -s  /usr/local/python25/bin/python2.5 python2.5
PATH=.:$PATH  
sh setuptools-0.6c6-py2.5.egg
rm python2.5

安装ClientCookie

tar zxvf ClientCookie-1.3.0.tar.gz
cd ClientCookie-1.3.0
/usr/local/python25/bin/python setup.py build
/usr/local/python25/bin/python setup.py install
 

至此,activepython2.5+setuptools+ClientCookie在linux的安装已经完成,ClientCookie的简单使用等俺下一篇再说:D
BTW:祝大家6.1快乐!

黑色星期四

明天是6.1,贝贝的第一个六一,贝贝妈决定去给贝贝购置一些节日礼物,中午找我来吃饭,然后去买东西。
中午一起去来德坊吃了面,一起去银行还款,时间快到了,我就回去上班了,没过多久,贝贝妈打来电话,声音低沉的说,你忙不忙啊,我说什么事儿啊,贝贝妈说,我钱包丢了。
真倒霉哦,贝妈轻易不出门,一出门就来这一出,贝妈钱包里可是有无数的打折卡,优惠卡,积分卡,信用卡,银行卡,美容卡,餐饮卡,交通卡,会员卡和身份证阿。
我赶紧下楼,原来从淮海公园那个浦发银行往淮海路太平洋走的时候,过了马路发现包是开的,钱包没了。路边的交通协管让打110,速度倒挺快,来了问了一下情况,确认钱包是带出来了,没有忘家里,就做了记录,最后安慰一下说能找到就通知你们,但是99%的可能是找不到的,这年头,咳,都知道怎么回事。尽人事,看天命了。
紧接着就是挂失卡,银行卡有密码问题倒不大,挂失了招行的信用卡和浦发的信用卡,还有美发卡,餐饮卡不能挂失,郁闷之极。
后来想了想,也挺幸运的

  • 中午刚用餐饮卡吃了一顿,吃了不到200¥,还剩710¥,阿Q一下,心里舒服点。
  • 手机没丢,也比较幸运。
  • 还有几百块的美发卡可以挂失,减少了损失。

为数不多有钱的浦发卡借记卡挂失了,补办要等新身份证办好了再说了。
心存侥幸,打电话挂失索迪斯卡,告知不行,说只能挂失,但是不能补,我想了想,不能补,挂啥?小偷也不容易,偷了还不能消费,就算了,只当交学费了。:S

最后总结2点:
1,外出上街一定要注意自己的包,贝妈就是一时疏忽没有注意,给小偷下手的机会。
2,如果有碰到小偷行窃别人,在没有危险的情况下,还是帮人一下,如果不帮,下一个会是谁没人知道。

再来付一个原来的老帖子
要注意防盗啊(附小偷上海出没地图)
看来还要新增一个地点,就是淮海路太平洋边上的十字路口哦。
破财消灾,再Q一把,大家晚安哦。

innerHTML outerHTML innerText和outerText的区别和用法

innerHTML 设置或获取位于对象起始和结束标签内的 HTML
outerHTML 设置或获取对象及其内容的 HTML 形式
innerText 设置或获取位于对象起始和结束标签内的文本
outerText 设置(包括标签)或获取(不包括标签)对象的文本
innerText 和outerText 在读取得时候是一样的,只是在设置的时候outerText 会连带标签一起替换成目标文本
firefox不支持innerText ,但是可以用textContent作为替代方案。
代码如下:

if(document.all){
     document.getElementById('myid').innerText = "text";
} else{
    document.getElementById('myid').textContent = "text";
}

做一个有职业操守的人

今天看到有个an9的朋友来留言,于是去他的网站看了一下,有篇文章还不错,不知道是原创,还是转贴。
题目叫《打动老板的20个必杀技》,其实名字起得有点狭隘,换成我起的这个名字应该更好点:D。每人对照一下自己,如果自己都能做到,肯定是对自己的职场发展百利而无一害的。原文链接点击这里,原文用斜体表示,只是分条说一下:
1、带个公文包
如果你每天夹个公文包来上下班,那一定能让同事们认为你专注于工作,可能你的公文包一到办公室就被扔到一边。或许你的公文包每天仅仅出现在你去吃午餐的时候,但你的信息已经被传达到了。

争取带个包上班,虽然没啥要带的,夏天了手机,钱包啥的放身上不爽

2、坐直了
站的直,坐的直可以让你看上去一直精神饱满,充满自信。你肯定不希望同事们看到你无精打采的缩在自己电脑前吧,除非你昨天熬了一夜要完成一个报告。

精神饱满一些,更自信一些,给人一个好的精神面貌。

3、务必准时
没有人希望等待别人,你也不希望。我常说的“不要指望我能早到,但我从不迟到。”务必要准时。

这点有时候做的不好,要改进,从每天提前到开始

4、把个人问题留在家里
一个好的员工的重要标志就是公私分明,这意味着在工作时就是工作,不要在上班时间为和女朋友晚上看什么电影煲半天电话粥!

不光是这样,应该能做到一件事情是一件事情,一件事情不受其他事情的干扰,不只是心情。

5、不要担心,开心一点
微笑是会传染的,这还能让别人的悲伤也不那么容易就传染给你。

多微笑,没什么大不了的,做到胆大心细。

6、注意容貌和气味
随身带点香口胶可能让你高喊感谢上帝。无论别人是怎么说,人们还是从他们所看到的来评价一个人。所以在周五你可以穿的随便一些,其他时候,请保持严谨。

要尊重别人,注意自己的着装,和对他人的影响,不要妨碍到他人。

7、让你的工作区域保持清洁
让你的办公桌时刻保持清洁,文件都放在抽屉内,样样东西都井井有条。你的老板一定会认为你在其他方面也一样是有条理的。

不只是办公区域,还有电脑文件的管理等,做个有条理,思路清晰的人。

8、清楚你到底该说什么
浏览当天的报纸,看看在你的行业有什么新的动态。你应该在微观和宏观两个方面和你的行业保持接触。如果你有打算进入更大的公司,这也有好处。

别跟世界脱节,要留意行业内外的动态。说该说的,在该说的时候说,说要说的恰到好处。

9、和你的助手交谈
不要害怕和你的助手表达你的意见,一切都应该是很自然的,没有人喜欢僵硬分子。

没有助手,理解为多和其他同事交谈,多沟通。

10、随时准备个笑话
你当然不希望别人叫你办公室小丑,但你还是应该准备个笑话,以备不时之需。还有什么比在同事聚会时说个让人笑破肚皮的笑话更好的方法呢?

有时候会有出奇的效果,多给别人带来欢乐。

11、远离闲谈
无论谈的是多么有趣,办公室闲谈都是终结你的职业生涯的致命武器,比打119来消防车还快。什么是有用的,什么是没有的,你应该要分清楚。

节约时间,多学习,珍惜生命,少瞎扯。

12、学会闭嘴
让人觉得你很聪明最好的办法就是知道什么时候该闭嘴。参与讨论当然是个好事,但如果你总是在说些过时或者被提过的东西,那你就应该什么都不说。你应该看上去象是在分析别人说的话。无论何时,都不要对别人大声吼叫。

要冷静,能忍,跟第8条有点像。

13、不要吹牛
没有人喜欢损失自己的时间,金钱来听别人吹牛。时刻注意自己在说些什么,不要说满了。如果你非要吹,也要小心谨慎。

吹也别吹破了:D,当然午饭的时候吹吹牛还是可以调节气氛,增进友谊的:D。

14、给我,给我,给我
我不是在说你的薪水或者红利,而是工作量。如果你能养成做些额外工作的习惯,你老板一定会注意到的,特别是当下一个工作来临的时候。不用担心,钱总是会自己来的。

多干点活儿,亏不了,吃亏是福。

15、不要和同事恋爱
我不会在意新秘书的身材是如何火辣,你的新助手是如何性感。这能减少未来几个月内你头痛的可能。如果你非要和一个同事恋爱也请注意,她一定是在完全不同的部门。除此以外,千万不要。

这条可以忽略了-_-凸。

16、掌握所有事
我当然不是说你要把最后一分钟都排的干干净净,但是,你应该让同事和属下相信你是在控制一切,他们会因此对你尊敬。而且你的上司也会对你留下好影象。

不打无把握之仗,锻炼自己的能力,不能什么都没把握,那就不要玩儿了。

17、小心你浏览的站点
记住,工作场所是个庄严的地方,你在休息时间浏览的站点应该要注意。不要去那些你钟爱的三级站点!千万不要。

一些细节要注意,跟8类似,在正确的时间,场合说该说的,干该干的。

18、和蔼对待同事
你没必要看上去要巴结谁,但是记住同事的生日,知道助手得了感冒应该让他休息是绝对必要的。

和蔼,亲切的对待他人,人家也会这么对待你的,良好的氛围,要大家一起来营造。

19、做个领导者
不要害怕在必要的时候做的领导者。比如一个好员工退休了,组织一个告别派对;有同事被提升,开个祝贺会。自告奋勇,别人马上会喜欢上你。

该出头的时候要出头,做事要有信心,全当是对自己的锻炼。

20、尊重公司文化和制度
这条规则无论你在什么地方上班都必须遵守。比如你可能要保持咖啡机的清洁,添满复印机的托纸盒等等。

都一样,要做一个遵纪守法的好同学:D。

apache child pid exit signal File size limit exceeded error

一个正常使用的网站,LAMP架构,突然打不开了,但是另外一个二级域名的网站,在同一台服务器上可以打开,静态文件也可以打开,因为出故障前有段时间程序没有更新,程序错误的可能性不大。
telnet 到网站的80端口,也可以打开,现象很奇怪。
重起了apache,没用,mysql用命令行也可以使用,没问题,一时没了方向。
于是tail了apache的log,一个是正常的web log,一个是error_log。
观察之后,发现了异常现象,apache的error_log一直输出错误信息如下:

[Thu May 24 23:11:27 2007] [notice] child pid 23406 exit signal File size limit exceeded (25)
[Thu May 24 23:12:01 2007] [notice] child pid 23544 exit signal File size limit exceeded (25)
[Thu May 24 23:12:47 2007] [notice] child pid 23633 exit signal File size limit exceeded (25)
[Thu May 24 23:12:53 2007] [notice] child pid 22799 exit signal File size limit exceeded (25)

说有文件大小超过了限制。
google了一下,说是超过了apache 2G的文件限制,试用find命令在系统里面查找超大的文件

find / -size +1000000k

查找到2个文件,一个是

/xxx/xxx/page_parse_time.log
/xxx/yyy/support-popbytes_log

第一个文件page_parse_time.log的大小在2G左右,压缩备份后,

> /xxx/xxx/page_parse_time.log

,问题解决。
page_parse_time.log的文件内容是程序记录sql query的log以及执行时间的log,每个页面请求都会写上一些数据,这么超过2G也不奇怪了。

上次还遇到过一次mysql数据条数过多,的问题
报错信息如下:

LOGSQL Insert Failed: insert into adodb_logsql (created,sql0,sql1,params,tracer,timer) values( NOW(),?,?,?,?,?) The table 'adodb_logsql' is full 

经查

mysql> select count(*) from adodb_logsql ;
 +----------+ 
| count(*) |
 +----------+ 
| 33127244 | 
+----------+

3千万,,,可能是有点大了,最后truncate了这个表,问题解决
可是最后查mysql的文档,关于Scalability and Limits部分没有说mysql最多可以存多少条记录,估计跟表的类型也相关。原文说的是
Handles large databases. We use MySQL Server with databases that contain 50 million records. We also know of users who use MySQL Server with 60,000 tables and about 5,000,000,000 rows.
只是不知道它说的50 million是一个database里面的所有记录还是所有表的记录加起来。后边的应该是所有60,000个表加起来的数据量。
————————
结论,必要的日志是需要的,但是要控制大小,有循环机制,或者有监控机制,切记,切记。

给Landing sites 2.2增加关键字加粗功能

用的上一个landing site的版本是1.3,现在使用的是2.2版。
为了增强改善用户体验,改进了landing site,为dlp功能做了关键字加粗,关键代码如下:

function ls_terms_filter($content){
  // Did we come from a search engine? 
  $referer = ls_get_refer();//取来源域名
  $output = '';
  $delimiter = ls_get_delim($referer);//看是否在list里面
  if($delimiter) 
  {
    $terms = ls_get_terms($delimiter);//取关键字串
  $terms= array_unique(preg_split("/[\s,]+/", $terms));//转换为数组
  $contentarr = preg_split("/(<.*>)/U", $content, -1, PREG_SPLIT_DELIM_CAPTURE); // capture the tags as well as in between
  $stop = count($contentarr);// loop stuff 
  for ($i = 0; $i < $stop; $i++) {
  	$content = $contentarr&#91;$i&#93;; 
  	if ((strlen($content) > 0) && ('<' != $content{0})) { // If it's not a tag
   foreach ($terms as $term) {
   	if (strlen($term)>1)//避免关键字太短的情况
   	$content=eregi_replace("($term)","<b>\\1</b>", $content);
   } 
  	} 
  	$output .= $content; 
  }
   	return $output;
  } else{
  	return $content;
  }
}

增加了上述的function,对内容里面的关键字进行加粗处理
增加了2个filter

add_filter('the_content', 'ls_terms_filter');
add_filter('comment_text', 'ls_terms_filter');

效果请点击下面链接
点击
然后点击本站的链接进来看,搜索的关键字”贝贝 游泳 静观其变”都会做加粗处理。
修改一下上述程序,可以改成整个site的关键字加粗,加链接等效果。
附上修改过的landingsite 2.2的源代码下载。
下载landingsites2.2