1,事业永远第一
虽然金钱不是万能的,但没有钱是万万不能的,虽然这句话很俗,但绝对有道理,所以30岁之前,请把你大部分精力放在你的事业上.
2,别把钱看得太重
不要抱怨自己现在工资低,银行存款4位数以下,看不到前途,现在要做的就是努力学习,即使你文凭再高,怎么把理论运用到实践还是需要一个很长的锻炼过程,社会永远是一所最博大的大学,它让你学到的知识远比你在学校学到的重要得多,所以同样,你也别太介意学历低.30岁之前靠自己能力买车买房的人还是极少.
3,学会体谅父母
别嫌他们唠叨,等你为人父了你就知道可怜天下父母心,在他们眼里你还是个孩子,但他们真的老了,现在得你哄他们开心了,也许只要你的一个电话,一点小礼物,就可以让他们安心,很容易做到.
4,交上好朋友
朋友对你一生都影响重大,不要去结识太多酒肉朋友,至少得有一个能在关键时刻帮助你的朋友,如果遇到这么一个人,就好好把握,日后必定有用,不管他现在是富还是穷.
5,别太相信爱情
心中要有爱,但请别说也别相信那些琼瑶阿姨小说里面的山盟海誓,世上本无永恒,重要的是责任,但女人心海底针,心变了,一切都成枉然,你要做的就是该出手时就出手,该放手时别犹豫.30岁之前的爱情不是假的,但只是大多数人都没有能真正把握好的能力,所以学会量力而行.
6,别担心至今还保留初吻
爱情不在多而在精,别以为自己20多岁还没碰过女孩子就害怕自己永远找不到老婆.以后你会有很多机会认识女孩子,要知道这个社会虽然男人多于女人,但现实是女人其实比男人更担心这个问题.男人30一枝花,你在升值而不是贬值,成熟的爱情往往更美丽更长久,所以不要像疯狗一样看到女孩就想追,学会品味寂寞.
7,不要沉迷于任何东西
所谓玩物而丧志,网络游戏是你在出校门之前玩的,你现在没有多余的时间和精力花费到这上面,否则你透支的东西以后都得偿还.一个人要有兴趣,爱好,但请分清楚轻重.
8,年轻没有失败
不要遇到挫折就灰心,年轻人要时刻保持积极向上的态度.失败了,重来过;失去了,再争取别的。错过了,要分析,下次来,要把握;幼稚了,下次,成熟点。不要紧,会好的,哪怕到了极点,也不要放弃,相信一定可以挺过去。不要消极,会好的。曾经的错,过去了,总不能回味在过去。现在的,很好,累完了,很舒服。不要伤,总会有人在支撑你。
9,不要轻易崇拜或者鄙视一个人
人都有偶像,但请拥有你自己的个性.不要刻意去模仿一个人,因为你就是你,是唯一的,独一无二的,要有自信.也不要全盘否定一个人,每个人是有价值的,如果你不能理解他,也请学会接受.
10,要有责任心.
不管你曾经怎样,但请从现在开始做一个正直的人.男人要有责任心,无论是工作还是生活上,一个有责任心的人才能让别人有安全感,才能让别人觉得你是一个值得信赖的人.我们不要懦弱,但请不要伤害爱你的人和你爱的人,尤其是善良的女孩,因为这个世界善良的女孩不多了,即使不想拥有,但也请让她保持她美丽的心.
11,男人的外貌并不重要.
不要为自己的长相身高而过分担心,一个心地善良,为人正直的男人远比那些空有英俊相貌,挺拔身材但内心龌龊的男人要帅得多.如果有人以貌取人,请不要太在意,因为你不用去为一个低级趣味的人而难过.
12,学会保护身体
不要以为现在抽烟喝酒,熬夜通宵也没什么事.那是因为你的身体正处于你一生的黄金时段.30岁以后你就能明白力不从心这个词的意义了,身体是革命的本钱,没有好的身体什么也做不了,所以要尽量让自己过有规律的健康生活.
13,别觉得一事无成.
你现在还没有资格谈成功,当然如果你有千万资产的除外.一开始太固定的职业并不一定是好事,或许在不断的改行当中,你会学到更丰富的知识,而且可以挖掘出自己的潜能,找到最适合你的工作.
14,请认真工作
即使你现在的工作再怎么无聊再怎么低级,也请你认真去对待,要知道任何成功人士都是从最小的事做起,或许你现在学不到多么了不起的知识,但起码你要学会良好的工作态度和工作方法,这对以后很重要.
15,请认真对待感情.
不要羡慕那些换女人像换鞋一样的花花公子,逢场作戏的爱情只是让你浪费时间浪费精力,一个人最痛苦的不是找不到爱人,而是心中没有了爱,当你把我爱你3个字变成你最容易说的一句话时,那么你在爱情的世界里已经很难找到真正的幸福了.爱情没有公平,总有一个人比对方付出得多,即使没有结果,也别觉得不值,因为你的付出不光是为了她,也是为了你自己的爱,为爱付出是很可贵的,赞自己一下.
16.请留一点童心
在内心深处,哪怕只是一个很小的角落里,请保持一份童心,不是幼稚,但有的时候单纯一点会让你很快乐.所以不要太计较得失,生活本无完美.
源于网络
让file_get_contents() 函数也做post
原来一直以为file_get_contents() 函数大概只能在请求一个url时做get操作,其实还有下面用法,可以让file_get_contents() 函数也做post:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php // 1. 通过设置context来是file_get_contents()函数完成post操作,其实还可以设置很多的东西 // 设置方法1 ================================================================ $opts = array( 'http'=>array( 'method'=>'POST', 'content'=>'a=b&c=d' ) ); $context = stream_context_create($opts); // 设置方法2 ================================================================ /** $context = stream_context_create(array()); // 参数必须是一个数组,允许是空数组 stream_context_set_option ($context,'http','method','POST'); // 第一个参数必须是一个stream或由stream_context_create产生的一个stream的上下文 stream_context_set_option ($context,'http','content','a=b&c=d&e=f'); */ // ================================================================================= echo file_get_contents('http://ljj.cn/test.php',false,$context); |
注意:这里设置了使用post方法,却没有设置Content-Type: application/x-www-form-urlencoded ;因为PHP给自动添加了该http头,如果没有该http头,则server端的PHP不会将post数据解析到$_POST数组中。
arptable and routetable
arptable和routetable比较类似的是都是存在内存中的一个表格
arptable: /proc/net/arp
routetable: /proc/net/route
下面对两个文件做简单的介绍:
[junjie2@ljj ~]$ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
10.218.19.91 0x1 0x0 00:00:00:00:00:00 * eth0
10.218.19.1 0x1 0x2 00:1D:A1:A7:13:CC * eth0
10.218.19.23 0x1 0x0 00:00:00:00:00:00 * eth0
10.218.19.172 0x1 0x2 00:11:43:47:25:FE * eth0
10.218.19.81 0x1 0x0 00:00:00:00:00:00 * eth0
10.218.19.71 0x1 0x0 00:00:00:00:00:00 * eth0
IP address : 这个就不说了
HW type : 硬件类型 ,0x1 代表以太网卡
Flags : 0x0 表示未完成(imcomplete),看紧挨着的HW address发现硬件地址都是0,那是因为想找这台机器没有找到,所以Flags为0x0
HW address: 硬件地址了
Mask : IP地址的掩码
Device: 路由中对应的网卡
[junjie2@ljj ~]$ cat /proc/net/route
Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
eth0 0013DA0A 00000000 0001 0 0 0 00FFFFFF 0 0 0
eth0 0000FEA9 00000000 0001 0 0 0 0000FFFF 0 0 0
eth0 00000000 0113DA0A 0003 0 0 0 00000000 0 0 0
[junjie2@ljj ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.218.19.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 10.218.19.1 0.0.0.0 UG 0 0 0 eth0
[junjie2@ljj ~]$
Ref Number of references to this route. (Not used in the Linux kernel.)
Use Count of lookups for the route. Depending on the use of -F and -C this will be either route cache misses
(-F) or hits (-C).
Iface Interface to which packets for this route will be sent.
风中的承诺
音频:http://www.whx.gov.cn/ForumImages/20071212134157540.mp3
视频:http://union.bokecc.com/flash/pocle/player.swf?siteid=BAE881EF590B10D9&vid=A5CCA179D6941DB8&autoStart=false
歌词:
昨夜的雨
惊醒我沉睡中的梦
迷惑的心
沾满着昨日的伤痛
冷冷的风
不再有往日的温柔
失去的爱
是否还能够再拥有
漫漫长路
谁能告诉我
究竟会有多少错
何处是我最终的居留
曾经在雨中对我说
今生今世相守
曾经在风中对我说
永远不离开我
多少缠绵编织成的梦
多少爱恨刻划的镜头
为何一切到了终究还是空
跟美女上床和次贷危机
付款时,男士掏出支票本,十分潇洒地签了一张支票。店员有些为难,因为这对夫妇是第一次来店购物。
男士看穿了店员的心思,十分冷静地对店员说: "我感觉到,您担心这是一张是空头支票,对吗?今天是周六,银行关门。我建议您把支票和handbag都留下。等到星期一支票兑现之后,再请你们把 handbag 送到这位小姐的府上。您看这样行不行?"
店员放了下心来,欣然地接受了这个建议,并且大方的承诺,递送handbag的费用由该店承担,他本人将会亲自把这件事情给办妥。
星期一,店员拿着支票去银行入账,支票果真是张空头支票!愤怒的店员打电话给那位顾客,客户对他说: "这没有什么要紧啊!你和我都没有损失。上星期六的晚上我已经同那个女孩上床了!哦,多谢您的合作。"
密码复杂度检查代码
function CharMode(iN){
if (iN>=65 && iN <=90) //大写字母
return 2;
if (iN>=97 && iN <=122) //小写
return 4;
else
return 1; //数字
}
//计算出当前密码当中一共有多少种模式
function bitTotal(num){
modes=0;
for (i=0;i<3;i++){
if (num & 1) modes++;
num>>>=1;
}
return modes;
}
//checkStrong函数 返回密码的强度级别
function checkStrong(sPW){
Modes=0;
for (i=0;i<sPW.length;i++){
//测试每一个字符的类别并统计一共有多少种模式.
Modes|=CharMode(sPW.charCodeAt(i));
}
var btotal = bitTotal(Modes);
if (sPW.length >= 10) btotal++;
switch(btotal) {
case 1:
return "<table width=’130′ class=’pswstrong’><tr><td bgcolor=’#FE707E’><strong>弱</strong></td><td><span style=’color:#666;’>中</span></td><td><span style=’color:#666;’>强</span></td></tr></table>";
break;
case 2:
return "<table width=’130′ class=’pswstrong’><tr><td bgcolor=’#FCFA93′><span style=’color:#666;’>弱</span></td><td bgcolor=’#FCFA93′><strong>中</strong></td><td><span style=’color:#666;’>强</span></td></tr></table>";
break;
case 3:
return "<table width=’130′ class=’pswstrong’><tr><td bgcolor=’#BDFEA6′><span style=’color:#666;’>弱</span></td><td bgcolor=’#BDFEA6′><span style=’color:#666;’>中</span></td><td bgcolor=’#BDFEA6′><strong>强</strong></td></tr></table>";
break;
default:
return "<font color=’#33CC00′>强</font>";
}
}
function ShowStrong(obj,oMsg,status){
var obj = oo(obj);
if(status==1){
obj.innerHTML = oMsg
}else{
obj.innerHTML = ""
}
}
Memcached 之 hash算法
Memcache 客户端有对多个server的hash算法,Memcached服务器端有对key的hash算法,都是非常精辟的东西,下面给出一些hash相关的资料:
如何撰写pod
简介
pod(Plain Old Documentation), 是一种简单而易用的标记型语言(置标语言),它经常用于在perl程序和模块中的文档书写。
在pod中,用段类型可分为三种,普通段落,字面段落(Verbatim Paragraph)和命令段落。
三者的区分非常简单,以=pod|head1|cut|over等指示字开始的段落为命令段落,以空格或制表符(\t)等缩进字符开始的段落为字面段落,其余的就是普通段落。
pod中有其独特的格式代码来表现粗体,斜体,超链接等。
在pod中,对于字面段落的文本,是从来都不进行格式代码转义的。pod2html时用<pre >将其包围。所以字面段落非常适合在引用语言与代码块时运用。
当然,值得注意的是,对于pod2xxx脚本来说,段落意味着前后各有一个空行。
下面我们要介绍的pod,都是用于pod2html这项功能的。
命令指示字
=head1
=head2
=head3
=head4
上面的四个指示字产生指定级别的标题。在pod2html时,用他们各自对应的
..
来包围此段落,并且自动生成a的命名/name和索引/index.
一个简单的例子:
1 |
=head1 NAMEpod2html - convert .pod files to .html files |
pod2html后NAME的标签为h1, 而后面的那段为p。
=pod
=cut
=pod 只告诉编译器pod文档开始了,而=cut则是pod文档的结束。
一个简单的例子:
1 |
return;}=podHere we start our pod=cutsub _ { |
=over NUMBER
=item SYMBOL
=back
上面三个标签是连在一起的。=over后面必须要跟一个=back,而这两者之间最少要有一个=item,同时不能有=head1至head4。
pod2html时依据item后面的SYMBOL不同将其转化为<dl><ol><ul>中的一种。
当SYMBOL为数字时使用ol, SYBMOL为*时使用ul, 其余的使用dl.
而=over后面的NUMBER只是用来确定缩进中的空格。不同的格式器(pod2xxxx)对于NUMBER有着不同地处理,另外有些格式器对此则进行忽略。默认的NUMBER为4。
=item 能自动生成a的命名,但不参加索引/index(与head不同)。
一个简单的例子:
1 |
=over 4=item L<http://www.perl.com/>Perl 的首页 (由欧莱礼公司维护)=item L<http://www.cpan.org/>Perl 综合典藏网 (Comprehensive Perl Archive Network)=item L<http://lists.perl.org/>Perl 邮递论坛一览=back |
此例子摘自perlcn.pod
=for format text =begin format =end format 此指示字的作用是对此段落使用特殊的格式/format(如html, text等)。 =for与=begin+=end作用相同。区别在于=for只处理一个段落,而=begin+=end却能处理它们中间的多个段落。 format为html时,可以用于增加“命令指示字和格式代码”都不能实现的特殊格式。如<img或其它html标签。
一个简单的例子:
1 |
=begin html<hr> <img src="thang.png"><p> This is a raw HTML paragraph </p>=end html |
pod2html时会原文拷贝此段代码。
=encoding
用于制定文档的编码,默认为不指定。
格式代码
格式代码可以用于除字面段落外的所有段落,包括命令段落。
- I<text> 用斜体表示text, 效果如text
- B<text> 用粗体表示text, 效果如text
- C<code> pod2html时用<code>包围。
- L<text|name/sec> 超链接。 其中name可以为模块名,也可以为一个网址。pod2html时,当name为模块名时,转化为module/name.html.name为a里href参数的内容其中text为连接所显示的内容,若没有text,name为模块名时,显示 the module::name manpage;name为网址时,不允许存在text。pod2html时转化为<a>和</a>之间的东西。
sec参数当name为模块名时指向该模块名的sec部分,没有name时指向当前页的sec部分。这些sec部分一般被=head或=item所定义。pod2html时转化为href里的#部分。
1下面是一个正确的例子:L<Net::Ping> – <a href="/Net/Ping.html">the Net::Ping manpage</a>L<http://www.1313s.com> – <a href='http://www.1313s.com'>http://www.1313s.com/</a>L<Perl Error Messages|perldiag> - <a href='perldiag.html'>Perl Error Message</a>L<perlsyn/"For Loops"> - <a href='perlsyn.html#for_loops'>the perlsyn manpage</a>而下面的一个例子就是一个典型的错误:L<fayland|http://www.1313s.com> - name为网址时不允许存在text - E<escape> 字符转义。
- E<lt> – <
- E<gt> – >
- E<verbar> – |
- E<sol> – /
- 更多的请参考perldoc perlpod
- 更多的如F<filename>, S<text>等请参考perldoc perlpod
实例
最后给出一个简单的例子,用以使大家加深对pod的印象。
1 |
=pod=head1 Examplesit's just a examples for pod newcomer.=head1 how to write a pod?=over 4=item 1know all pod command's meanings such as "head1, over, item, begin".=item 2try to write a example by yourself.=item 3use 'pod2html' utility convert pod to html format.=item 4modify and pod2html again until u a satisfied.=back=head1 FAQ=head2 want to add a B<img>?use code as follows: =begin html <img src='http://edu.itbulo.com/UploadFiles_1485/200604/20060426152037798.png' /> =end html=head2 how to add E<lt>bE<gt> etc. E<lt>bE<gt>=head1 link I<this> pageL<http://www.1313s.com/f/POD.html>=cut |
perldoc & pod2html
pod可以转化为n多种格式。在bin目录下以pod2开头的工具有很多,也有2pod的工具。但最常用的是perldoc和pod2html.
perldoc用于在命令控制台下查看pod文档,而pod2html则把pod转化为html格式。
pod2html
你可以通过pod2html—help来查看pod2html的所有参数。因为所有的参数都是很容易看懂的,也就不多加解释了。
将上面的例子保存为examples.pod, 然后进入控制台/console:
1 |
pod2html examples.pod >examples.html -css=Active.css |
All is Done.
参考
1 |
=over 4=item *perldoc L<perlpod>=item *perldoc L<perlpodspec>=item *<Programming Perl> Chapter 26 大骆驼书第26章=back |
🙂 have fun.
相关链接:http://search.cpan.org/~rgarcia/perl-5.10.0/pod/perlpodspec.pod
libmemcache 与 libmemcached
libmemcache 是C语言的操作memcached的客户端的库
libmemcached 好像应该是服务器端需要的库,实际上不是,ldd memcached :发现和libmemcached并没有关系,下面是libmemcached的README:
Hi!
So what is this? It is a library in C for connectinng to memcached servers
(http://danga.com/memcached/). It is also a collection of utilities designed
to work with memcached.
memcat – Copy the value of a key to standard output
memflush – Flush the contents of your servers.
memrm – Remove a key(s) from the server.
memstat – Dump the stats of your servers to standard output
memslap – Load generation utility (benchmark!)
The utilities are beta quality at this point. The library is in production
in many locations (upwards to 600 nodes). For networks of more then 512
hosts using consistent hashing, you must update the target WHEEL size for
number of hosts * 4 in libmemcached/memcached_constants.h.
Want to contribute? If you write more then three good patches, then I will
just ask you to commit directly to the tree. I am happy to have additional
people work on this project. Please checkout README.FIRST.
You will need a C99 compiler in order to compile this library. Currently we
actively support Linux, MacOSX, FreeBSD, and Solaris. A Windows port is
currently not supported.
If you are looking for answers to your questions please check out the
mailing list at:
http://lists.tangent.org/
Subscribe to the libmemcached mailing list found there.
Cheers,
-Brian Aker
Seattle, WA.
另外,PHP还有一个自己的操作memcache的模块,它是自己实现的,并不依赖C的那个客户端模块
PHP实现多个异步的http请求
摘自: PHP手册
以前感觉PHP里没法同时执行多个http请求,这次看手册不小心发现了这种用法,就是通过设置非阻塞模式来实现异步的http请求,对于单个脚本中要尽快执行完大量的http请求的应用来讲是非常适合的。
<?php
function multiHTTP ($urlArr) {
$sockets = Array(); // socket array!
$urlInfo = Array(); // info arr
$sumDone = 0;
$ret = Array();
$errno = Array();
$errstr = Array();
foreach ($urlArr as $key=>$url) {
$urlInfo[$key] = parse_url($urlArr[$key]);
$urlInfo[$key][port] = ($urlInfo[$key][port]) ? $urlInfo[$key][port] : 80;
$urlInfo[$key][path] = ($urlInfo[$key][path]) ? $urlInfo[$key][path] : "/";
$sockets[$key] = @fsockopen($urlInfo[$key][host], $urlInfo[$key][port], $errno[$key], $errstr[$key], 30);
if(!$sockets[$key]){
$ret[$key][‘result’] = false;
$ret[$key][‘error’] = $errstr[$key];
$ret[$key][‘done’] = 1;
$sumDone++;
continue;
}
$ret[$key][‘result’] = true;
socket_set_blocking($sockets[$key],false);
$query = ($urlInfo[$key][query]) ? "?" . $urlInfo[$key][query] : "";
fputs($sockets[$key],"GET " . $urlInfo[$key][path] . "$query HTTP/1.0\r\nHost: " .
$urlInfo[$key][host] . "\r\n\r\n");
}
// ok read the data from each one
$done = false;
while (!$done) {
foreach ($urlArr as $key=>$url) {
if($ret[$key][‘done’] == 1) continue;
if (!feof($sockets[$key])) {
if ($ret[$key][‘data’]) {
$ret[$key][‘data’] .= fgets($sockets[$key],1024);
} else {
$ret[$key][‘data’] = fgets($sockets[$key],1024);
}
} else {
$ret[$key][‘done’] = 1;
$sumDone++;
fclose($sockets[$key]);
}
}
$done = ($sumDone == count($urlArr));
}
foreach($ret as $key=>$item){
$ret[$key][‘data’] = substr($item[‘data’],strpos($item[‘data’],"\r\n\r\n") + 4);
}
return $ret;
}
?>