基于curl的并行请求,实现php中的伪多线程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<?php

/**
* 基于 curl_multi 的并行处理
*
* 使用示例
* Helper_Multicurl::add_curl('url1', Helper_Multicurl::mk_curl('get', $url1));
* Helper_Multicurl::add_curl('url2', Helper_Multicurl::mk_curl('get', $url2));
* $ret = Helper_Multicurl::multi_exec();
*
* @author 肖武 <tsxw24@gmail.com>
* @version 2012-9-14 15:06 #multicurl.php
*/
class Helper_Multicurl {
static private $mh = null;
static private $arr_ch = array();//curl句柄列表

/**
* 创建curl会话,返回curl句柄
*
* @param string $type 请求方式,取值:get,post
* @param string $url url地址,可包含问号
* @param array $data key-value对,post或get的参数
* @param array $ex_arg 扩展参数,常用参数如下:
* array(
* CURLOPT_COOKIE => string 设定HTTP请求中"Cookie: "部分的内容。多个cookie用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")。
* CURLOPT_REFERER => string 请求头中"Referer: "的内容
* CURLOPT_USERAGENT => string "User-Agent: "头的字符串。如:“Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)”
* CURLOPT_HTTPHEADER => array header头列表,如:array('host:http://abc.com','Content-type: text/plain')
* CURLOPT_TIMEOUT => int 超时时间,秒
* )
*
* @return resource
*/
static public function mk_curl($type, $url, array $data=array(), array $ex_arg=array()) {
//初始化curl会话
$ch = curl_init();

//curl参数
$option = array(
CURLOPT_RETURNTRANSFER => 1,//返回请求结果
);

//get 参数处理(url处理)
if ($type=='get' && $data) {
$url .= (strpos($url, '?') ? '&' : '?').http_build_query($data);
}
$option[CURLOPT_URL] = $url;

//post 参数处理
if ($type=='post' && $data) {
$option[CURLOPT_POSTFIELDS] = $data;
}

//其它参数合并
$option += $ex_arg;

//批量设置会话参数
curl_setopt_array($ch, $option);

return $ch;
}

/**
* 初始化批量curl会话
*/
static private function _multi_init() {
if (is_null(self::$mh)) {
self::$mh = curl_multi_init();
}
}

/**
* 清理数据,恢复初始状态
*/
static private function _clear() {
self::$mh = null;
self::$arr_ch = array();
}

/**
* 添加curl句柄到批量处理中
*
* @param string $k 用于区分不同请求的key,最终的返回结果会和key对应。若有重复后面的覆盖前面
* @param resource $ch curl会话的句柄
*
* @return boolean
*/
static public function add_curl($k, $ch) {
self::_multi_init();

//添加curl句柄
$ret = curl_multi_add_handle(self::$mh, $ch);
if ($ret != 0) {//添加失败
return false;
}

//若原来有相同$k,则删除,以便覆盖之
if (isset(self::$arr_ch[$k])) {
curl_multi_remove_handle(self::$mh, self::$arr_ch[$k]);//移除原curl句柄
curl_close(self::$arr_ch[$k]);//关闭原curl会话
unset(self::$arr_ch[$k]);//删除原$k
}
self::$arr_ch[$k] = $ch;

return true;
}

/**
* 执行批量请求,返回批量数据。原设置的k与其结果一一对应
*
* @param array $arr_ch 可选参数。key-curl句柄相对应的列表,用于批量设置curl句柄
*
* @return array
*/
static public function multi_exec(array $arr_ch = array()) {
$data = array();

//批量添加curl会话句柄
foreach ($arr_ch as $k => $ch) {
self::add_curl($k, $ch);
}

//无批量执行句柄,返回空数组
if (is_null(self::$mh)) {
return $data;
}

//执行
do {
$mrc = curl_multi_exec(self::$mh,$active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK)
{
if (curl_multi_select(self::$mh) != -1)
{
do {
$mrc = curl_multi_exec(self::$mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
//获取返回结果
foreach (self::$arr_ch as $k => $ch) {
$data[$k] = curl_multi_getcontent($ch);
curl_multi_remove_handle(self::$mh, $ch);//移除句柄
curl_close($ch);//关闭会话
}
curl_multi_close(self::$mh);//关闭批量会话

//清理数据,恢复初始状态,为下一次使用做好准备
self::_clear();

return $data;
}
}

这工具本质是发起并行请求,但若请求的自己定义的特殊接口,完全可以实现php伪多线程,进行某些数据的并行处理。
如自定义一个db查询接口,参数是sql(当然还有一下其它安全验证的参数等),返回值是查询结果。然后使用这个curl并行请求这个接口,那实现多条sql语句同时查询的功能。
并行查询数据库只是一个简单的例子,原则上所有不相互依赖的业务逻辑,都可以使用这种方法转为并行处理。

转载自 http://blog.csdn.net/tsxw24/article/details/7979172

鲜为人知的中国计数——知道3,892,179,868,480,350,000,000这个数怎么念吗?

 「不可说」是「不可以说出来」的意思,在佛经中,“不可说”的意思并不一定是这样。
 《华严经》「不可言说不可说,充满一切不可说,不可言说诸劫中,说不可说不可尽,……於一微细毛端处,有不可说诸普贤,……一毛端处所有刹,其数无量不可说……」在第四十五卷中,有将近四百个不可说。
 《地藏菩萨本愿经》「尔时,十方无量世界不可说不可说一切诸佛,及大菩萨摩诃萨,皆来集会,赞叹释迦牟尼佛……」这里用了两个不可说。
 《小般若经》「一切法不可说,须菩提,一切法空相不可说……」
 「不可说」倒底有多大,我们试着找找看:
    
 《华严经》世尊为心王菩萨详细解说了佛所使用的计量单位。经上说∶「尔时,心王菩萨白佛言∶『世尊,诸佛如来,演说、无量、无边、无等、不可数、不可称、不可思、不可量、不可说、不可说不可说。』
 『世尊,云何阿僧祇乃至不可说不可说耶?』心王菩萨问世尊,您常说诸佛如来的数目,所用的各种单位如「阿僧祇、演说」……一直到「不可说不可说」倒底是什麽意思?
 世尊回答「善男子,一百洛叉为一俱胝,俱胝俱胝为一阿庾多,阿庾多阿庾多为一那由他……」从这里开始,世尊便详细的说明了佛所用的计量单位。一个洛叉是十万,也就是 10^5 (10的 5次方)。
  
    1、俱 胝 =100洛叉=100×100000=10000000=10^7 (1千万)
    2、阿庾多 =俱胝×俱胝 = 10^14 =1的后面接 14个 0
    3、那由他 =阿庾多×阿庾多=10^28 =1的后面接 28个 0
    4、频婆罗 =那由他×那由他 =10^56=1的后面接 56个 0。
    
    列出来就是:100000000000000000000000000000000000000000000000000000000.
    
    5、矜罗羯 =频婆罗×频婆罗 =10^112
    6、阿伽罗 =矜罗羯×矜罗羯 =10^224
    7、最胜 =阿伽罗×阿伽罗 =10^448 (如此一级一级的推,下一级就是:
    8、摩罗婆 = 10^896 =1的后面接 896 个 0
    9、阿婆罗 = 10^1792 =1的后面接 1792个 0
    10、多婆罗 = 10^3584 =1的后面接 3584个 0
    11、界 分 = 10^7168 =1的后面接 7168个 0
    12、普 摩 = 10^14336
    13、祢 摩 = 10^28672
    14、阿婆钤 = 10^57344
    15、弥伽婆 = 10^114688
    16、毗罗伽 = 10^229376
    17、毗伽婆 = 10^458752
    18、僧羯逻摩= 10^917504
    19、毗萨罗 = 10^1835008
    20、毗赡婆 = 10^3670016 这里离“不可说”还有 100级呢
    21、毗盛伽 = 10^7340032 = 1 的后面接7340032 个 0
    22、毗素陀 = 10^14680064
    23、毗婆诃 = 10^29360128
    24、毗薄底 = 10^58720256
    25、毗 担 = 10^117440512
    26、称 量 = 10^234881024
    27、一 持 = 10^469762048
    28、异 路 = 10^939524096
    29、颠 倒 = 10^1879048192 = 1 的後面接 1879048192个 0
    
 原来「颠倒」也是计量单位。《心经》上说「远离颠倒梦想」,看很合理,如果说众生的想法都是「颠倒」的话,就说不太通了,例如一个人很饿,他想要有一点食物,这不能说是颠倒梦想;但是如果用於表示众生的梦想太多,则对了。一个人一生能有多少梦想?假设一个人一秒内可以有10个梦想,一生可活 100年,那麽其数是:
 100(年)x365(天)x24(小时)x60(分)x60(秒)x10(个)
 总数是 =31,536,000,000个梦想。再给多一点化成十数的话就是 100,000,000,000个梦想,1 的後面接 11 个 0. 这个数字别说是「颠倒」,就连「阿庾多」的等级都够不上。不过众生轮回不已,因此累加的梦想是有可能达到颠倒级的。倒底要多少世才能累积到那样的数量梦呢?我们可以算算 看: 颠倒除以一生 = 颠倒 / 一生
    = log 1879048192 - log 11
    = log 1879048181
 也就是说要有 1 後面接 1879048181 个 0 的一生,才能累积到那个梦想数量。该注意到,上面的一生是原来一生是 100岁的 3倍多,也就是设定人有 300岁时才「只」需要那轮回1879048181 的世就可达到「颠倒」的梦想数的。
    
    30、三末那 =颠倒×颠倒 = 10^3758096384
    31、毗睹罗 = 10^7516192768
    32、奚婆罗 = 10^15032385536
    33、何 察 = 10^30064771072
    34、周 广 = 10^60129542144
    35、高 出 = 10^120259084288
    36、最 妙 = 10^240518168576
    37、泥婆罗 = 10^481036337152
    38、诃里婆 = 10^962072674304
    39、一 勋 = 10^1924145348608
    40、诃理蒲 = 10^3848290697216
    41、诃理三 = 10^7696581394432
    42、奚鲁伽 = 10^15393162788864
    43、达罗步陀= 10^30786325577728
    44、诃鲁那 = 10^61572651155456
    45、摩鲁陀 = 10^123145302310912
    46、忏慕陀 = 10^246290604621824
    
 数字已进入天文数字了,我们必需要改用另外的表示法。10^(2.4629060462182410^14)= 1的後面接上(2. 62906046218244×10的14次方)个 0。这个事实上已无法想像有多大了。
    47、瑿攞陀 = 10^(4.9×10^14)
    48、摩鲁摩 = 10^(9.8×10^14)
    49、调 伏 = 10^(1.9×10^15)
    50、离 慢 = 10^(3.9×10^15)
    51、不 动 = 10^(7.8×10^15)
    52、极 量 = 10^(1.5×10^16)
    53、阿摩怛罗= 10^(3.1×10^16)
    54、勃摩怛罗= 10^(6.3×10^16)
    55、伽摩怛罗= 10^(1.2×10^17)
    56、那摩怛罗= 10^(2.5×10^17)
    57、奚摩怛罗= 10^(5.0×10^17)
    58、鞞么怛罗= 10^(1.0×10^18)
    59、钵罗摩怛罗= 10^(2.0×10^18)
    60、尸婆摩怛罗= 10^(4.0×10^18)
    61、翳 罗 = 10^(8.0×10^18)
    62、薛 罗 = 10^(1.6×10^19)
    63、谛 罗 = 10^(3.2×10^19)
    64、偈 罗 = 10^(6.4×10^19)
    65、窣步罗 = 10^(1.3×10^20)
    66、泥 罗 = 10^(2.6×10^20)
    67、计 罗 = 10^(5.2×10^20)
    68、细 罗 = 10^(1.0×10^21) 到目前为止,这些都不是常用单位,佛经上常谈的许多计量单位还未出现。
    69、睥 罗 = 10^(2.0×10^21)
    70、谜 罗 = 10^(4.0×10^21)
    71、娑罗荼 = 10^(8.2×10^21)
    72、谜鲁陀 = 10^(1.6×10^22)
    73、契鲁陀 = 10^(3.3×10^22)
    74、摩睹罗 = 10^(6.6×10^22)
    75、娑母罗 = 10^(1.3×10^23)
    76、阿野娑 = 10^(2.6×10^23)
    77、迦麽罗 = 10^(5.2×10^23)
    78、摩伽婆 = 10^(1.1×10^24)
    79、阿怛罗 = 10^(2.1×10^24)
    80、醯鲁耶 = 10^(4.2×10^24)
    81、薛鲁婆 = 10^(8.4×10^24)
    82、羯罗波 = 10^(1.7×10^25)
    83、诃婆婆 = 10^(3.3×10^25)
    84、毗婆罗 = 10^(6.7×10^25)
    85、那婆罗 = 10^(1.3×10^26)
    86、摩罗摩 = 10^(2.7×10^26)
    87、娑婆罗 = 10^(5.4×10^26)
    88、迷罗普 = 10^(1.0×10^27)
    89、者麽罗 = 10^(2.1×10^27)
    90、驮摩罗 = 10^(4.2×10^27)
    91、钵罗麽 = 10^(8.6×10^27)
    92、毗伽摩 = 10^(1.7×10^28)
    93、乌波跋多 = 10^(3.4×10^28)
    94、演 说 = 10^(6.9×10^28)
 终于『《华严经》【阿僧祇品】第三十∶「尔时,心王菩萨白佛言∶『世尊,诸佛如来,演说、无量、无边、无等、不可数、不可称、不可思、不可量、不可说、不可说不可说。』『世尊,云何阿僧祇乃至不可说不可说耶?』其中的「演说」这时有了明确的意义了,诸佛如来的数量由这个单位起算,一直到“不可说不可说”的单位都有。
    
    95、无 尽 = 10^(1.3×10^29)
    96、出 生 = 10^(2.7×10^29)也作「生」「一生」
    97、无 我 = 10^(5.5×10^29)
    98、阿畔多 = 10^(1.1×10^30)
    99、青莲华 = 10^(2.2×10^30)
    100、钵头摩 = 10^(4.4×10^30)
    101、僧 祗 = 10^(8.8×10^30)
    102、趣 = 10^(1.7×10^31)
    103、至 = 10^(3.5×10^31)也称作「喻」 (参见华严经)
    104、阿僧祇 = 10^(7.1×10^31)也称作「无数」
    105、阿僧祇转= 10^(1.4×10^32)「无数转」「大阿僧祇」
    106、无 量 = 10^(2.8×10^32)
    107、无量转 = 10^(5.6×10^32)
    108、无 边 = 10^(1.1×10^33)
    109、无边转 = 10^(2.3×10^33)
    110、无 等 = 10^(4.5×10^33)
    111、无等转 = 10^(9.0×10^33)
    112、不可数 = 10^(1.8×10^34)
    113、不可数转= 10^(3.6×10^34)
    114、不可称 = 10^(7.2×10^34)
    115、不可称转= 10^(1.4×10^35)
    116、不可思 = 10^(2.9×10^35)
    117、不可思转= 10^(5.8×10^35)「不可议」
    118、不可量 = 10^(1.1×10^36)
    119、不可量转= 10^(2.2×10^36)
    120、不可说 = 10 的[ 46522979840000…(一共接 36个 0 )] 次方。
    
 到了这里,总算我们要的计量单位都有了着落。《华严经》所说的「不可言说不可说,充满一切不可说,不可言说诸劫中,说不可说不可尽,……於一微细毛端处,有不可说诸普贤,……一毛端处所有刹,其数无量不可说……」这一段我们所提出的「不可说」才算有了真正的意义,对於「介子纳须弥」的说法也才有了真正的描述。而「不可说」并不是最大的数,因为後面还有:
    
    121、不可说转 = 10^(9.3×10^36)
    122、不可说不可说 = 10^(1.8×10^37)
    123、不可说不可说转 = 10^(3.721838387×10^37)
    
 “不可说不可说转”这个数有多大?
 假使有人将“不可说不可说转” 这一数字用纸写下来,装订成书,这个数字将有3.721838379×10^37个0,普通A4纸每页4克计,每页纸上写1000个0,那么写完这些0将用的纸将重达1.488735352
10^35克,而太阳的质量也不过是1.989*10^33克,这本书的质量是74.8个太阳质量的总和!
     74.8个太阳质量约等于2500万个地球质量。如果每秒钟写一个零,则要写1200亿亿亿年。

转载自 http://bbs.tianya.cn/m/post-free-1570746-1.shtml

另注: 博客成立整整一周年了哈哈哈

童鞋下午拍的 s5,真机

电信定制机
20140411_204841
锁屏界面,有一部机子真被别人锁上了,不知道能不能用 wipe 解锁
20140411_205355
20140411_205139
后盖
20140411_205121
关于手机
20140411_205329
20140411_205336
存储
20140411_204922
任务管理器
20140411_205040
相机
20140411_205438
后置摄像头设置
20140411_205446
前置摄像头设置(前置摄像头已挡)
20140411_205643
指纹识别!!!压轴
20140411_205719

图传完了。。。不建议买定制机,等一个礼拜以后的公开版吧。。。

别“听说”什么都信

我爸最近在化疗,开始有人谴责我们为什么不去医院陪着他,还有心情上班,还有心情上网,还有心情在家过日子。这周回家,我跟我爸聊天说起这事,我爸给我讲了一个他这礼拜去上班,在班上遇到我妈同学(这位阿姨在我爸工作地方打扫卫生)的事。我妈的同学说“你家**(我妈名字)怎么不上班呀?”我爸说“不上,我养得起。”我妈同学又说“不上班连保险钱都挣不来。”我问我爸她怎么会这么想呢?我妈在家挣的比她打扫卫生挣的多呀?!我爸说“你知道你妈上班比她打扫卫生挣的多,她不知道呀!她不知道听谁说你妈不上班,就觉得跟她一样不上班就不挣钱。同样的,那些人一听化疗,就觉得这病指不定得多严重呢!可能就是听说了,都没细想想,细问问什么毛病呀?但凡能多想点儿的也会觉得一边化疗,一边还上班呢,肯定是不严重。”

其实很多时候,我们都靠听说来判断。读《重新理解媒介》的时候里面有一节专门讲传播中的“信息完整度”。一个撰稿人说“错别字不影响约稿频率。谁谁就是错别字满篇,照样被各杂志约稿。”这可能就是个“信息完整度”不够的例子,谁谁的妈妈是某机构负责刊号审核的,他的文章有错别字杂志也会被约稿的原因会不会跟他妈妈有关呢?!可能啊!不知道是不是真的有关。片面的信息实际上会造成误解和分析的偏差。而大多数情况下“听说”恰恰是片面的,有偏差的,友邻“天人合一”提醒我“探究真理,而非人云亦云。避免因轻信、想当然而致不了解。经济学里的“信息不对称”的通感。”

再比如,我运营来往扎堆,好几个人跟我说,听说阿里竞争不过腾讯要倒闭了,听说来往没什么人用,听说阿里要放弃来往了。其实只要他们加入我的扎堆,就会发现半个多月,我的扎堆已经有两万四千多成员了。

很多事情瞎打听半天,“听说”什么都信,知道真相之后,是非常可笑的。比如有位编辑A问我写书评要多少稿费,我告诉他“5000”,他就到处打听,其他编辑都说不花钱呀!他就又到处打听为什么那些编辑不花钱,我也会写书评。于是我又被听说“跟某几位男编辑关系密切!”证据他们约稿我都会答应而且免费。可是我之所以告诉编辑A我收钱的原因是因为他在我线上活动发赠书帖从来不跟打招呼,就自己发,发完了还就完了,就不理了,不开奖也不维护。最关键的是,我把每天的工作都集中在下午的一个多小时里,他偏要在这一小时里不断的发QQ信息“土豆姐帮我推荐一下这个!”“求土豆推荐!”“土豆帮个忙!”看完这条信息,怎么都想不起自己想干嘛了。在这种时刻就仿佛孙悟空看到了白骨精,别说帮他,不发火都需要很大的忍耐力!而其他那几位编辑也不全是男的,大多数都是已经有孩子的大姐,只是名字比较像男生,他们跟我约稿,总是先问忙不忙,而且在得知我怀孕之后,还主动不再约恐怖、激烈的书,而尽量选择平和的书约稿。

什么事屡屡碰壁的时候,我们习惯抱怨外在的因素,其实很多时候可能是内在的原因,向内找解决方法更快。读书群里,总是有个人抱怨其他人读书快,造成编辑要求收到书之后三周内交书评,而他根本没看完,写不出来。群里很多人教他怎么读书,如何能读的又快,又记的好。可是他就是不在意,只是一味的抱怨。其实只有冷静的想一下,就能想明白,这事不是他抱怨别人,要求其他几百人读书慢下来就能解决的。他如果能学习点读书方法,提高一下自己的读书速度。

之前看乐嘉的书有这么一段“在微博的世界中,感性的人们可以遇事多点理性和思考,少点冲动和口号。在避免永远做围观的看客,让这个社会越来越冷漠的同时,也要避免我们自己怀善人心做恶人事。与此同时,对于那些内心有着强烈愿望和使命感,希望通过网络发声从而影响社会变革的朋友而言,学会说话,说的有效有理有利有节是重要的功课。任何变革难免要有牺牲,但盲目的牺牲绝对不是变革。如果我们暂时无法改变社会,至少我们每个人可从改变自己开始。”

不是说听什么都不信,但是也别“听说”什么都信。对你没影响的事,听过就过了。对你有影响的事,好好想想,分析分析,真的去考证一下。刚才有个人问我,是不是因为我怀孕了,他骂我,我才不回应。是不是觉得怀孕了,全世界都该让着孕妇。其实我没怀孕的时候,别人骂我,我也不回应。之前有个人写了好几百字“爆黑幕”,分析出我是一写鸡汤文的屌丝男,有诸多缺点,精神分裂。后面这好几百人回复,唰唰每天都掉好几百粉,很多人就说你解释解释。我说我这经常写我肚子大了,我公公的事,我婆婆的事,这些解除关注的人,只要看看日记,广播就知道我是女的。很多解释和争论,完全没有意义,而且会让自己被负能量所影响。每次别人发给我链接说,你看他骂你,你看他说你,我都会发给他们我自我介绍里的一句话“解释和争论,只在两种情况下有意义,一种是这个人很重要,一种是这件事很重要。”

如何面对别人对自己的评价

领导要写论文了,这几天他一直研究社交的一些书,我也跟着看了一些书。在豆瓣上总有一些陌生人给我发邮件,希望我给他们建议。可是我根本不认识他们,他们说的问题,我也都没有接触过,大多数情况下我都会说“我没有类似经验,真没法回答这问题。”前天跟领导讨论的时候说到类似的问题,如何面对别人对自己的评价。领导有个观点:当一个人精神足够强大、阅历、知识都成熟之后,更应该自己反思,而非注重别人的评论。除非这个人的意见很重要会影响,比如对事情有决定权。或者找个人你很在意,在你生活中有很高地位。否则别人的意见就没什么用。原因有三点:第一,别人可能自己都没活明白呢!不一定是明白人。第二,别人不一定真的了解你。第三,别人的评论有自己的动机。

既然深入了这个话题,我们俩决定做个实验。有个人经常说我写作水平差、文笔不好、都是鸡汤文,没什么用。最好别写了,女人不用有什么事业,安心生孩子带孩子得了。然后我们就选取了他为实验对象,研究他的评论。老奸巨猾的领导去试探了他,发现他其实没怎么看过我写的东西,他一直劝我不要写了,是因为我的专栏稿费比他的贵,他希望我别写了,他来写那几个稿费高的专栏。

我们身边总有这样的聪明人。昨天下班接到某杂志编辑大姐约稿电话,看完资料开始写,1个小时后写完,种花,睡觉。早上起来开始改,改完交稿。我问编辑大姐为什么不夸我效率高,她在电话里沉默一会儿说“你一年也就几次有这效率,他(指我爱人)是不是出差了?!你一个人无聊的没事干呀?!”这个睿智的中年女人只是从我的交稿时间和一通电话就分析出我爱人出差,我很无聊的状态。在社交中,我们需要辨别出什么样的评论对自己是有益的,什么样评论不用去在意。

有些评论非常有价值,是必须听取的,重点思考的。比如我第一次在编辑部改稿的时候,领导让三位老师给我改稿(三对、三校),一位老师拿过来没看完就暴躁的说,这没法要,简直太差了,根本不符合逻辑。一位老师认真的看,逐段的看写出批注、修改意见、思路。最后一位老师找前面那位老师讨论了半天之后,写了自己的总结。领导把没经过思考就说出来的评论叫“语言暴力”,把经过思考的评论叫做“建设性意见”。而建设性意见大多数时候充满了经验和智慧,是我们需要重视和学习的。

我经常看某微信分享的案例故事,昨天的文章里有一句“未来感性的人才,会讲故事来打动人心的人,相较于理性思考的人才,可能会更加被企业和社会需要。”其实我倒是觉得,感性和理性是互补的,需要达到一种平衡,两样少了那一样,都会减弱自己的实力。

《状元媒》里有句话:“大羹必有淡味,大巧必有小拙,白璧必有微瑕。物件和人一样,人尚无完人,更何况是物。”这与《成功这件小事》里迦尼萨说的“就像这个世界如果没有黑暗,就没有光明一样,缺点和优点也是自己拥有的同一个特质的表里两面。譬如说,喜欢独立作业的家伙,一见到人就会觉得累;相反,喜欢和别人打交道的家伙,就无法完全集中精神与独立作业。”两本书是不同国家的,不同类型的书,在人的优点和缺点上有类似的观点。

那些没有任何建设性的批评,就像是破坏性地震,除了留下一堆废墟,没有什么意义。宁可跟明白人打顿架,不能跟混蛋说句话!价值观不一样,很多事情虽然浪费很多时间还是说不通!北京有句老话:我说玻璃球子,你听胯骨肘子。大家不在一个频率上,对一件事的评价是不一样的。有时候把事情想明白了,就算别人误解,也不会在意,人也更豁达。我公公有次出门扔垃圾,有个拿相机的小伙子问”大爷这是谁的家?”我公公说”我的家。”对方不屑的说”谁信呀?!”我公公无所谓的回答”你不信,我骗别人去。”扔了垃圾,顺手就把门关上了。我说“您怎么不跟他解释解释。”我公公说“一辈子可能就见这一次,他又不是玉皇大帝,甭管他有什么想法,房本也是我名字呀!”要学会控制情绪。解释和争论,只在两种情况下有意义,一种是这个人很重要,一种是这件事很重要。都不重要就算了,把时间放在自己喜欢的事上面吧!

有个朋友说,其实你把时间和精力重点放在什么地方,你得到的收获就在什么地方多。大家同样混豆瓣,之前问一个每月在豆瓣上收入大概两万的友邻,挣这么多钱有什么技巧。他说把重点放在运营自己的账号上,而不是放在跟人家吵架上。

读彼得·德鲁克的《旁观者》时,作者反复的强调人是多变的、多元以及独特的,而管理别人,管理自己都要顺应这些特质。实际上在我们生活、工作的社交过程中,无论别人的评价怎么样,我们都是有优点的,也肯定是有缺点的。通过别人或者自己的评价更好的认识自己,更好的发现自己的兴趣和特长,扬长避短发挥出自己的优势比人云亦云的评论更重要。每次我看成功学的书,我领导就重复一句话“大多数时候,别人的成功经验在你身上没什么用,你只需要把你擅长的发挥到极致。”《幸好还有,爱和梦想》的题记里有句话“人生教会我们的从来不是那些我们已经得到的,而是我们怎么得到的。”自我认知的过程,也是成长和收获的过程。

WordPress 复制时自动添加文章版权

这个我在许多博客也看到有,我这个版本的好像是 WP 大学流出来的。用法很简单,如下:

将如下的代码加入到 functions.php 就可以了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//自动添加文章版权
function add_copyright_text() { ?>
<script type='text/javascript'>
function addLink() {
var body_element = document.getElementsByTagName('body')[0];
var selection;
selection = window.getSelection();
var pagelink = "<br /><br />本文来源:<a href='"+document.location.href+"'>"+document.location.href+"</a>";
var copy_text = selection + pagelink;
var new_div = document.createElement('div');
new_div.style.left='-99999px';
new_div.style.position='absolute';
body_element.appendChild(new_div );
new_div.innerHTML = copy_text ;
selection.selectAllChildren(new_div );
window.setTimeout(function() {
body_element.removeChild(new_div );
},0);
}
document.oncopy = addLink;
</script>
<?php
}
add_action( 'wp_footer', 'add_copyright_text');

加完你再复制就会出现类似如下的:

1
2
3
这只是一个例子

本文来源:http://www.zntec.cn/?p=7664&preview=true

转载自 http://www.zntec.cn/archives/wordpress-auto-copyright.html

另注: 该方法在 Android UC 浏览器上实测无效

无情一点并没错

早上起床,猛的一照镜子,发现自己和几年前完全不一样了
抛开长相上的细微变化,我说的不一样是神态上面的不一样,我对着镜子暗自想到:妈的,竟然变成了这幅冷酷嘴脸。
后来我花了5分钟时间细细像了一下为什么我会有这么大的变化,想到了几件事:

上小学的时候,体育测验。同班姑娘让我帮她拿着她头上的发卡,她去做仰卧起坐。于是我就那么紧紧的把发卡握在手里,一秒钟都不敢走神。后来她考完了,连一句谢谢都没说,就和别人去玩了。
第二节体育课,轮到我考试了,我让这个姑娘帮我拿着发卡,她没拒绝。可是等我考完以后,我问她我的发卡呢?她轻描淡写的说:丢了。我问怎么丢了?她说:刚才你考试的时候XX她们叫我过去玩,我跑着跑着就丢了。
于是我只得在下午的班主任的课堂上披头散发的上课,然后被正好过来检查“仪容仪表”的教导主任批评,被恼羞成怒的班主任请了家长。而那个姑娘,和别人一起在一脸兴奋的看我挨批评。

还是上小学,5年级。我们班组织出去春游,需要自己组成小组。于是我和班里的另外两个姑娘组成了3人的小组。我们分配好谁带薯片,谁带水果什么的。
然后到了春游那天,我抱着精心准备的三人份的零食和她们两个上了大巴车,其中一个姑娘才告诉我。她俩已经加入别的组了,现在“好心”的提醒我一下。我抱着零食开始掉眼泪,没人知道那天我是如何默默吃掉三份零食的。

上高中的时候,不知道是谁说看见有司机接我,于是别人开始推测我零花钱比别人多。后来发展到,开始有人管我借钱不还。我成了债主,确要赔着笑脸管别人要钱。最后钱当然是一分没要回来。我还背上了“小肚鸡肠,不乐于助人”的坏形象。

上了大学,我看同宿舍的一个女生经常为了省钱不吃饭,我那可耻的善良就又钻出来了。。。我经常请她吃饭,还把自己不用的化妆品送给她。几个月后,我听到了关于我的负面新闻,就是这个舍友编造的。当我得知真相的时候,她正安心的坐在床上吃我买的苹果,穿着我的衣服。

后来到了美国,我的大学教授每次都把中国学生和其他学生区别对待。同班的中国学生拿他一点办法没有。直到那次他再一次触及了我的底线。他无视离他最近的那个白人大胖子一直在刷facebook,却指着我的笔记本电脑说:close that fucking thing!然后我听到了旁边几个白人的笑声。为此我难受了好长时间。
等到再上课的时候,教授正在吹嘘他的光辉事迹,我突然对着一个刷facebook的白人说:Hey. you! Close that fucking thing! Listen to the professor! 说完我用手指了指自己的耳朵,全班人都像看疯子一样看着我,我已经做好了被赶出去的准备,可是教授竟然没说什么。下课以后,教授走过来默默地拍了拍我的肩膀,我知道从此往后我再不用遭受种族歧视了。

于是我开始渐渐不再善良。
在我变得没那么善良以后,命运之神开始向我微笑。
在我变得没那么善良以后,我开始变得轻松,少了很多累赘的人际关系。
在我变得没那么善良以后,我拉黑了曾经不敢拉黑的人,我当着其他学生的面说一个教授“涉嫌威胁,欺诈,并且put me into that deep shit”,收获的是其他人的掌声和教授的退让。
在我变得没那么善良以后,我不会顾忌和别人的“友谊”就放弃自己的话语权,我争取到了比原先多得多的机会。
在我变得没那么善良以后,我再也不用熬夜做完整个小组8个人的作业,然后没有拿到A还要是自己认错。

有时候,那种过分的“善良”会伤害到自己,会让一些没有底线,没有良知的人得寸进尺。这个社会上并不是所有人都有着“善”的本质,有些人伤害过别人以后,丝毫不会内疚,不会不安,他们只会笑话你是傻逼,说一切都是你自找的。
而当你学会了拒绝别人,学会了以牙还牙,学会了冷酷无情的时候,那些傻逼们反而会尊重你,甚至敬畏你。

于是,我终于相信了那句话:无情一点没有错。

===========================================================================

因为另外一篇日记火了,所以这篇也有不少人来看,然后就有人说我写的是假的。说我写的假的不能再假。说这么明显的种族歧视怎么能公然出现。
首先,他不是公然出现的,而且让你感受到的(这你要还不信我就没办法了)。这个让我“close that fucking thing”的老头,曾经在我拿着作业问他为什么得了C的时候给我讲明白了原因,让我多写一份。
我一开始没多想,觉得他让我再写一份可能是他想让我写的更好,拿更高的成绩。事实是我太幼稚了,等我把写好的作业email给他的时候,他没有看,是的,看都没看。然后我不甘心,又拿着打印出来的作业,在他office hour去他办公室找他,他才给我看的。但是很敷衍,而且很潦草的给了我一个B。并且这门课是国际关系课(当然我住修的不只是门,别又有人开始瞎推断我学什么,我还修了八竿子打不着的音乐史呢)。按理说,作业的题目应该是学生自己选择(这是教授说的,他说题目自己选择,但是要能概括一个国际上的矛盾冲突,并且用levels of analysis解释清楚)。然后我的第一次作业写的是【法国应不应该干涉利比亚内政】,得了是C,如我刚才提到。后来第二次作业,这个教授一边要求我重新写,一边让我改变题目(他说的是看问题角度,后来通过暗示我明白是改变题目,因为他总是三句话不离东亚的事情),他给我引导了半天,我才明白他想让我写中国大陆和台湾的问题。。。次奥!!!!!!而且他真的是原话这么问我的:should China recover Taiwan?
容我咆哮一下。。。。。。。。。。。。。。。。。。。。。
好了我咆哮完了。从那以后我就知道我不应该改选他的课。。。如果大家还是觉得这个过程太假,那我真的无力了。
然后就是我文章中提到的,他无视白人刷facebook反而来教育我的事情。可能是我一直表现的比较软弱好欺负吧。。。他让我多写一份我就多写一份,上课到座率也比别的SAC学生高,所以他就以为我比较软柿子。。。然后上课他对我那么说,真是吓我一大跳,因为声音特别大。我为什么又说这不公平呢?因为第一,我说了他无视白人犯错误。第二,在之后的那节课又有一个女孩上课看电脑没看他,然后教授用截然不同的语气对她说:would you close that and listen to me?虽然表情还是很严肃,然是语气明显轻多了。这也是为什么我突然觉得极度憋屈,然后对着白人说出来那句话的。

最后,针对有人说我光有托福,没有SAT之类成绩的,从而推论出我上的学校是野鸡大学的人,我能对你竖中指么?我在国内上了一年,然后是以转学生的身份到的美国。转学生有很多学校是不需要SAT成绩的,我又不是从高中直接上大学,没常识就瞎揣测的人是你吧???当然了,也会有人出来说他也是转学但是也需要其他成绩了,对此我只能说咱们申请的学校不一样,要求不一样。这个回答不满意我也没办法。我申请学习需要的成绩就只有——托福,和国内上大学的GPA。没了。其余的都是相关手续了。你要学方舟子打假,首先学精髓,别学一堆糟粕然后出来丢人。

对于我说涉嫌威胁的教授,那是另外一个教授。怎么区分呢?第一个教授是黑人,这个威胁我的教授是白人。这样就好分别了。

转载自 http://www.douban.com/note/274529279/

不争,也有属于你的世界

我大二的时候找了一份在杂志发行部的实习工作,主要负责杂志征订。其实就是销售杂志,给已经到期或者快到期的客户打电话,让他们续订。争抢读者名单成了办公室的主要矛盾,作为新人,我能抢到的读者名单少,可是业绩标准却和别人一样。于是我参与到无止境的读者名单争夺“大战”,并且在这种“战斗”中精疲力尽。

后来跟我妈聊这事,我妈说:“当你的能力不足以支撑你的目标的时候,你要慢下来,甚至停下来学习。”在那学期选课的时候,我选修了营销学。跟营销课老师学习了之后,根据营销老师的建议,我开始在网上发我们杂志外籍顾问的文章,通过这个方法收集了大量的邮箱。我每周更新一篇电子邮件发给到这些邮箱。在外籍顾问的文章下面,写上外籍顾问文章在杂志的更新频率及杂志其他栏目。开始了不要读者名单也能轻松完成业绩标准的实习工作。

前一阵跟前辈们聚会,讨论的主题是“为什么现在培训班这么火,而出版业在衰落。”一位做培训的前辈说,一本书50块钱够贵的了吧!卖一万册才多少钱。一场培训,把整本书的大纲讲一讲而已,定价至少1000元吧!有2000人参加就赚的不少了。现在的人都踏实不下来读书,看书得一页页的看,培训班听一天多省事。现在大家的生活节奏越来越快,大家越来越忙,吃饭要求快餐,睡觉要求高效睡眠,上课要上速成班,很少有慢下来思考的机会,别人争什么,抢什么,我们也跟着随大流。很少有机会想,我是不是把基础的做好了,是不是应该做基础的。

读《五星级服务》的时候,作者很实在的指出“在没有掌握这方面的基本概念之前,学习更专业的高级课程毫无用处。同样地,你要先满足一定的前提条件才能提供卓越的、以建立客户忠诚度为目的的服务。”很多时候,我们就怕比别人差了,就怕输在起跑线上。遗憾的事,人生不是一场比赛,没有所谓的起跑线。很多人看别人创业,自己也创业,别人干的挺好的,他自己却不行。实际上行动之前,评估出自己做了多少准备,是不是把基础的东西,把前提条件做好了,才是后面是否成功的根本。罗曼·罗兰说“人们常觉得准备的阶段是在浪费时间,只有当真正的机会来临,而自己没有能力把握的时候,才能觉悟到自己平时没有准备才是浪费了时间。”

跟我爸一起看电影《蛋炒饭》的时候,王大卫的父亲教王大卫做菜时候说“要慢,别人越快的时候,你越要慢。”我爸特别喜欢这句话,聊天的时候几次提起。他说我做什么事都着急,都手快,他很担心我把握不住自己。其实做事三个关键“稳、准、狠”。稳排第一,准排第二。快固然重要,但是那得是你想明白了,把该下手的地方看明白了以后才能快。把事情琢磨到了火候,知道“硍节”在那儿,才能事半功倍。别着急,尤其是年轻的时候,做什么都别着急,先把自己想明白了,把自己要什么想明白了,想明白了再动。很多事情按部就班的做,不争,也有属于你的世界。而当你着急的生怕比别人慢了一步的时候,反而可能走错了方向。

关于 jquery 分页的实现原理及源码

最近做了个用来查课本词汇表的站 http://lab.imjs.work/cihui/ ,为了增强用户体验,于是用了 jquery 的 ajax 实现分页功能。随后在某个 web 技术交流群中和别人交流了下,有位童鞋认为这个功能不错,并希望我能提供下源码。正好有段时间没发自己原创的文章了,我就发在这里并摘部分的源码吧解释一下吧。现在数据库有点不完整,缺了三十几页的数据,希望各位如果有这书的童鞋能把数据库补充完整,在此先感谢一下。

不想看解释的直接拉到最后下载吧。

为了数据传输方便使用了 json,但由于默认的 json_encode 函数会将中文重新编码,为了调试方便,我写了一个函数用来将中文先用 urlencode 编码,输出之后再解码,给出递归处理准备输出的数据的 function:

1
2
3
4
5
6
7
8
9
10
function url_encode_array($val) {
if (is_array($val)) { //判断传入的数据是否为数组
foreach ($val as $k=>$v) { //如果是数组就循环处理获取值
$val[$k]=url_encode_array($v); //调用自身继续处理
}
return $val; //返回编码好的数组
} else {
return urlencode($val); //如果传入值不是数组则直接返回经 urlencode 编码后的字符串
}
}

输出时就用

1
exit(urldecode(json_encode(url_encode_array($result_array)))); //先使用自定义的 url_encode 函数对传入值进行 urlencode 编码,之后用 json_encode 对值进行 json 编码,再然后用 urldecode 解码,最后用 exit 断绝之后可能的任何输出

输出

数据库部分就不讲了,和分页没什么关系。

现在我们已经有了查询接口了,接下来自然就要用 $.ajax 去请求数据啦,不熟悉 $.ajax 的可以去 http://w3school.com.cn/jquery/ajax_ajax.asp 看下,这部分就不详解了。接下来说说分页功能(./js/functions.js line 18-77):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
success: function(re) { //ajax 请求成功之后将得到的 json 对象 re 传入当前 function
if (re['status']=="error") { //如果返回的 status 为 error
$("#search_result").html('<div class="alert alert-info">'+re['message']+'</div>'); //输出返回的错误信息
} else {
var ta='<table class="table table-hover"><tr><th>#</th><th>单词</th><th>词性</th><th>释义</th></tr>'; //创建 ta 变量,值为将要输出表格的表头
var tmpword; //创建 tmpword 变量,判断本行的单词是否与上行相同,即判断是否为一词多义
var iii=1; //计数器
$.each(re['result_data'], function(i,v) { //类似 php 的 foreach 函数,i 为键值,v 为值
if (tmpword==v['word']) { //如果是一词多义
v['word']='&nbsp;'; //将输出值替换为空,但为了与部分浏览器兼容,将值改为 &nbsp;
tiii='&nbsp;'; //同上
} else {
tmpword=v['word']; //如果不是一词多义,将当前单词赋值给该变量
tiii=iii; //之后的表格输出序号
iii++;
}
ta=ta+'<tr><td>'+tiii+'</td><td>'+v['word']+'</td><td>'+v['speech']+'</td><td>'+v['trans']+'</td></tr>'; //输出的表格添加一行
});
ta=ta+'</table><p style="text-align: center">'; //表格结尾
var pgs=5; //显示页数选择的链接,要求为奇数,大于等于 3
if (re['max_length']>pgs) { //如果返回的总页数大于要求显示的链接数
if (page>=((pgs+1)/2+1)) { //如果当前页大于 (pgs+1)/2+1,例如当前页码为 3,pgs 为 3,将进行以下操作
if (re['max_length']-page<((pgs-1)/2)) { //如果返回的 总页数-当前页 小于 (pgs-1)/2,则执行以下操作
var ti=re['max_length']-(pgs-1); //定义循环输出初始变量
} else {
var ti=page-(pgs-1)/2; //定义循环输出初始变量,当前页-(pgs-1)/2
}
var tmpi=ti+(pgs-1); //定义循环输出结束变量
} else {
var ti=1;
var tmpi=pgs;
}
} else {
var ti=1;
var tmpi=re['max_length'];
}
if (page!==1) {
ta=ta+'<a href="####" id="page_'+(page-1)+'">上一页</a>&nbsp;&nbsp;'; //如果当前页不是第一页,就输出第一页的字样
}
if (ti!==1) {
ta=ta+'<a href="####" id="page_1">1</a>&nbsp;&nbsp;...&nbsp;&nbsp;'; //如果循环初始值不是 1 则输出第一页链接
}
for (var i=ti;i<=tmpi;i++) {
if (i==page) { //如果循环到了当前页
ta=ta+i+'&nbsp;&nbsp;'; //不输出链接,直接输出页码
} else {
ta=ta+'<a href="####" id="page_'+i+'">'+i+'</a>&nbsp;&nbsp;'; //输出链接
}
}
if (tmpi!=re['max_length']) {
ta=ta+'...&nbsp;&nbsp;<a href="####" id="page_'+re['max_length']+'">'+re['max_length']+'</a>&nbsp;&nbsp;'; //如果循环结束的页码不等于总页码将显示最后一页的页码
}
if (page!=re['max_length']) {
ta=ta+'<a href="####" id="page_'+(page+1)+'">下一页</a>'; //如果当前页不是最后一页则显示下一页的链接
}
ta=ta+'</p><p style="text-align: right">每页显示<select name="limit" id="limit"><option value="10">10</option><option value="20">20</option><option value="50">50</option><option value="100">100</option></select>个</p>'; //输出选择显示数量的 select
$("#search_result").html(ta); //最终的输出
$("#limit").val(limit); //赋值给 select,确保当前页显示数量与 select 的值相等
}
}

另外还有一段,为了防止用户使用 enter 提交的:

1
2
3
4
5
6
7
$('#search_input').keypress(function(e){
var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
if(keyCode === 13){
submit_search($("#search_input").val());
return false;
}
});

但 UC 浏览器上无效,只能再加一段对 get 值的判断:

1
2
3
4
5
getr=GetQueryString("search_input");
if (getr!==null) {
$("#search_input").val(getr);
submit_search(getr);
}

如果还有别的什么问题欢迎评论本文,源码下载(需要修改 ./php/config.php): cihui
相应的数据库下载(需要解压然后导入数据): vocabulary.sql_.zip