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

 

歌词:

昨夜的雨
惊醒我沉睡中的梦
迷惑的心
沾满着昨日的伤痛
冷冷的风
不再有往日的温柔
失去的爱
是否还能够再拥有
漫漫长路
谁能告诉我
究竟会有多少错
何处是我最终的居留
曾经在雨中对我说
今生今世相守
曾经在风中对我说
永远不离开我
多少缠绵编织成的梦
多少爱恨刻划的镜头
为何一切到了终究还是空

跟美女上床和次贷危机

有一天,一位其貌不扬的男士,带着一位十分艳丽的OL,来到Causeway Bay一家LV店。他为OL选了一价值6万5元的LV handbag。
  付款时,男士掏出支票本,十分潇洒地签了一张支票。店员有些为难,因为这对夫妇是第一次来店购物。
  男士看穿了店员的心思,十分冷静地对店员说: "我感觉到,您担心这是一张是空头支票,对吗?今天是周六,银行关门。我建议您把支票和handbag都留下。等到星期一支票兑现之后,再请你们把 handbag 送到这位小姐的府上。您看这样行不行?"
  店员放了下心来,欣然地接受了这个建议,并且大方的承诺,递送handbag的费用由该店承担,他本人将会亲自把这件事情给办妥。
  星期一,店员拿着支票去银行入账,支票果真是张空头支票!愤怒的店员打电话给那位顾客,客户对他说: "这没有什么要紧啊!你和我都没有损失。上星期六的晚上我已经同那个女孩上床了!哦,多谢您的合作。"
 
这个故事揭示了次贷危机的本质。人们在对未来收益充满良好预期的时候,对于可能加大风险缺乏防范意识。美女认为周一六万多LV就到家了,自然也就放松了警惕,认为ONS的投资是值得的,对于投入产出的预期是建立在一个具有巨大不确定风险的情况下的。而对未来收益预期的包装则是这些投资机构最擅长的事情。中国的股民大多跟这个美女一样,所以亏钱基本上是活该,没有这些人,股市赚谁的钱呢。而媒体和分析家们,往往在其中扮演了LV店员的配合角色。

密码复杂度检查代码

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 1modes
++;
    
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 >= 10btotal
++;
  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 
""
  
}
}

如何撰写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.

一个简单的例子:

pod2html后NAME的标签为h1, 而后面的那段为p。

=pod

=cut

=pod 只告诉编译器pod文档开始了,而=cut则是pod文档的结束。

一个简单的例子:

=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不同)。

一个简单的例子:

此例子摘自perlcn.pod

=for format text =begin format =end format 此指示字的作用是对此段落使用特殊的格式/format(如html, text等)。 =for与=begin+=end作用相同。区别在于=for只处理一个段落,而=begin+=end却能处理它们中间的多个段落。 format为html时,可以用于增加“命令指示字和格式代码”都不能实现的特殊格式。如<img或其它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里的#部分。

        

        

  •     

  • E<escape> 字符转义。    
              

    • E<lt> – <
    •         

    • E<gt> – >
    •         

    • E<verbar> – |
    •         

    • E<sol> – /
    •         

    • 更多的请参考perldoc perlpod
    •     

        

  •     

  • 更多的如F<filename>, S<text>等请参考perldoc perlpod

实例

最后给出一个简单的例子,用以使大家加深对pod的印象。

perldoc & pod2html

pod可以转化为n多种格式。在bin目录下以pod2开头的工具有很多,也有2pod的工具。但最常用的是perldoc和pod2html.

perldoc用于在命令控制台下查看pod文档,而pod2html则把pod转化为html格式。

pod2html

你可以通过pod2html—help来查看pod2html的所有参数。因为所有的参数都是很容易看懂的,也就不多加解释了。

将上面的例子保存为examples.pod, 然后进入控制台/console:

All is Done.

参考

🙂 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;
}
?>

PHP 小知识 [ int floor round]

对于正数来讲,(int) 和floor()没有太大区别,都取不大于输入的整数,但是int的正数是强制类型转换出来的,返回值的类型是整型,floor是取整出来的,如果输入是float型,你们返回值还是float型。我们还发现round(1.1) == (int)1.1==floor(1.1);但是round四舍五入的,对于负数来讲,int还是取整数部分,而floor则是小于输入的那个整数;

PHP 加速器eaccelerator 之control.php

PHP 加速器Eaccelerator有一些管理自己的函数,源码中也给我们提供了一个简单的管理脚本control.php,下面就该文件做一下说明:

eAccelerator 0.9.5 control panel

Information

    

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

    

Caching enabled yes // 启用了cache
Optimizer enabled yes //启用了优化
Memory usage 0.28% (0.09MB/ 32.00MB) // 显示已用内存的大小(0.09MB)及总大小(32MB)
Free memory 31.91MB // 可用内存的大小
Cached scripts 4 // 已cache的脚本数量
Removed scripts 0 // ?????
Cached keys 0 // ?????

Actions // eAccelerator 的选项不是只能在php.ini中设置的,还可以通过函数来控制,下面就是通过提供的api来动态控制的

    

        

            

                

                

            

            

                

                

            

            

                

                

            

            

                

                

            

            

                

                

            

        

    

Caching // 可以在这里禁用cache
Optimizer // 可以在这里禁用优化
Clear cache // 清掉所有的cache
Clean cache // 清理cache,清理那些已经过期或已被删除但还被cache的脚本
Purge cache // ?????

Cached scripts // 这是已cache的所有脚本

    

        

            

            

            

            

            

        

        

            

            

            

            

            

        

        

            

            

            

            

            

        

        

            

            

            

            

            

        

        

            

            

            

            

            

        

    

Filename MTime Size Reloads Hits
/data1/apache/newbsso/htdocs/junjie2/functions.php 2008-10-12 18:50 8.32 KB 1 (0) 0
/data1/apache/newbsso/htdocs/junjie2/mc.php 2008-10-12 18:49 6.37 KB 1 (0) 0
/data1/apache/newbsso/htdocs/tools/control.php 2008-10-12 20:16 43.62 KB 1 (0) 0
/usr/home/junjie2/smalltools/mc_img.php 2008-10-12 19:15 30.16 KB 1 (0) 0

Removed scripts // ?????

    

        

            

            

            

            

            

        

    

Filename MTime Size Reloads Hits

下面说一下该脚本的使用,下面这个变量需要在php.ini 里设置:

eaccelerator.allowed_admin_path = "/data1/apache/newbsso/htdocs/tools/"

如果control.php 不是在该目录被访问,你们一些api函数不允许被调用,至于设置好了,还需要用户名和密码,最简单的办法是把control.php 的下面代码注释掉:

if (!isset($_SERVER[‘PHP_AUTH_USER’]) || !isset($_SERVER[‘PHP_AUTH_USER’]) ||
$_SERVER[‘PHP_AUTH_USER’] != $user || $_SERVER[‘PHP_AUTH_PW’] != $pw
) {
header(‘WWW-Authenticate: Basic realm="eAccelerator control panel"’
);
header(‘HTTP/1.0 401 Unauthorized’
);
exit;
}

或者在control.php 中把user 和pw设置成自己的用户名、密码就行了