日志分类

终端下拼音补全中文名称

在 Linux 下打字飞快的朋友,遇到中文目录和文件名立马就慢下来了,有 2 种选择:

1. 切换成中文输入一两个汉字,然后按 TAB 补全
2. 动用鼠标复制

现在有第三种选择了 :)

用拼音补全命令行中的中文名称和路径

实验目录如下:

继续阅读: 终端下拼音补全中文名称

职场潜规则

人生就象一场游戏,有赢有输,有得有失,没有人会一帆风顺的走完所有的路。而任何游戏都有自己游戏规则,违背这个规则的人,虽然不一定遗臭万年,又或者被黑道、国家机器追杀,但是人言可畏、三人成虎还是会的。尤其是在中国这个孙子兵法的故乡,一贯崇尚“上兵罚谋”。

作为一个人,总是要出来“混”的,打工也好、雇工也罢,很少有人只是吃吃喝喝的过一辈子。且不说老祖宗一贯教导我们,儒家‘有为’,道家‘入世’;就是想浑浑沌沌的一辈子,也是怪吓人的。

出来,总是要有份职业,也宿有职业人生的说法。也正象游戏有游戏规则一样,职场也有职场规则,只是我们一向称之为职场潜规则。既然是‘潜规则‘,那就是说在规章制度之外的规则,也不一定是‘上纲上线’的规则。但是,一旦不注意,被人利用,就不再是那么简单。正是只有千日作贼,哪有千日防贼的啊。现在将我能想到的简单几点写出来,供大家参考参考。

继续阅读: 职场潜规则

IT白领提升收入

昨日,一口气读完了老美纳西姆·尼古拉斯·塔勒布写的畅销书《黑天鹅》,受益匪浅。其实这本书在去年的时候就已经购得,读到几页,被当作生日礼物送了出去,昨日得闲,遂再买,一口气看完。阅毕,想起前些日一朋友所写的日志“IT人如何收入500万”,手又痒痒,故得此文,与大家一起分享白领如何实现收入的黑天鹅。 什么是黑天鹅
按照纳西姆的定义,黑天鹅事件是指的不可预测的重大事件。它罕有发生,但一旦出现,就具有很大的影响力。几乎一切重要的事情都逃不过黑天鹅的影响,而现代世界正是被黑天鹅所左右。认识黑天鹅,才能更深刻地认识世界的复杂性,并从不可预知的未来中获益。

继续阅读: IT白领们提升收入

项目规划

前提规划书
明确项目要做什么,怎么做。
预测项目耗费工时及成本。
计划项目开发进度及里程碑,以及每个里程碑的产出物。

这一步主要是让自己和客户清楚,你们打算弄个什么东西出来,什么时候完成,要花多少时间多少钱。

继续阅读: 项目规划

shell脚本条件判断

UNIX Shell 编程中条件判断是极为重要的,以下是常用的条件判断:

-b file 若文件存在且是一个块特殊文件,则为真
-c file 若文件存在且是一个字符特殊文件,则为真
-d file 若文件存在且是一个目录,则为真
-e file 若文件存在,则为真
-f file 若文件存在且是一个规则文件,则为真
-g file 若文件存在且设置了SGID位的值,则为真
-h file 若文件存在且为一个符合链接,则为真
-k file 若文件存在且设置了”sticky”位的值
-p file 若文件存在且为一已命名管道,则为真
-r file 若文件存在且可读,则为真
-s file 若文件存在且其大小大于零,则为真
-u file 若文件存在且设置了SUID位,则为真
-w file 若文件存在且可写,则为真
-x file 若文件存在且可执行,则为真
-o file 若文件存在且被有效用户ID所拥有,则为真

-z string 若string长度为0,则为真
-n string 若string长度不为0,则为真
string1 = string2 若两个字符串相等,则为真
string1 != string2 若两个字符串不相等,则为真

int1 -eq int2 若int1等于int2,则为真
int1 -ne int2 若int1不等于int2,则为真
int1 -lt int2 若int1小于int2,则为真
int1 -le int2 若int1小于等于int2,则为真
int1 -gt int2 若int1大于int2,则为真
int1 -ge int2 若int1大于等于int2,则为真

!expr 若expr为假则复合表达式为真。expr可以是任何有效的测试表达式
expr1 -a expr2 若expr1和expr2都为真则整式为真
expr1 -o expr2 若expr1和expr2有一个为真则整式为真

特殊变量

$0 正在被执行命令的名字。对于shell脚本而言,这是被激活命令的路径
$n 该变量与脚本被激活时所带的参数相对应。n是正整数,与参数位置相对应($1,$2…)
$# 提供脚本的参数号
$* 所有这些参数都被双引号引住。若一个脚本接收两个参数,$*等于$1$2
$@ 所有这些参数都分别被双引号引住。若一个脚本接收到两个参数,$@等价于$1$2
$? 前一个命令执行后的退出状态
$$ 当前shell的进程号。对于shell脚本,这是其正在执行时的进程ID
$! 前一个后台命令的进程号

a new approach to china

由于google官方博客被墙了,所以转一下这篇google官方博客的文章

转自google英文官方博客:

Like many other well-known organizations, we face cyber attacks of varying degrees on a regular basis. In mid-December, we detected a highly sophisticated and targeted attack on our corporate infrastructure originating from China that resulted in the theft of intellectual property from Google. However, it soon became clear that what at first appeared to be solely a security incident–albeit a significant one–was something quite different.
继续阅读: a new approach to china

用 Javascript 操作 Cookie

Cookie 是维护客户端状态的解决方案之一,在大多数服务器端语言中都提供了对 Cookie 直接操作的函数,在客户端,我们可以用 javascript 来实现对 Cookie 的操作。本文介绍的就是用 Javascript 操作 Cookie 的方法

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
// 说明:用 Javascript 操作 Cookie 
// 整理:http://andystar.net/
function getCookie( name ) {
var start = document.cookie.indexOf( name + "=" );
var len = start + name.length + 1;
if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
return null;
}
if ( start == -1 ) return null;
var end = document.cookie.indexOf( ';', len );
if ( end == -1 ) end = document.cookie.length;
return unescape( document.cookie.substring( len, end ) );
}
 
function setCookie( name, value, expires, path, domain, secure ) {
var today = new Date();
today.setTime( today.getTime() );
if ( expires ) {
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );
document.cookie = name+'='+escape( value ) +
( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
( ( path ) ? ';path=' + path : '' ) +
( ( domain ) ? ';domain=' + domain : '' ) +
( ( secure ) ? ';secure' : '' );
}
 
function deleteCookie( name, path, domain ) {
if ( getCookie( name ) ) document.cookie = name + '=' +
( ( path ) ? ';path=' + path : '') +
( ( domain ) ? ';domain=' + domain : '' ) +
';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}

php模拟post提交

1.通过curl函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$post_data = array();
$post_data['clientname'] = "test08";
$post_data['clientpasswd'] = "test08";
$post_data['submit'] = "submit";
$url='http://xxx.xxx.xxx.xx/xx/xxx/top.php';
$o="";
foreach ($post_data as $k=&gt;$v)
{
    $o.= "$k=".urlencode($v)."&amp;";
}
$post_data=substr($o,0,-1);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL,$url);
//为了支持cookie
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$result = curl_exec($ch);
?>

2.通过fsockopen.

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
<?php
$URL=‘http://xxx.xxx.xxx.xx/xx/xxx/top.php';
$post_data['clientname'] = "test08";
 
$post_data['clientpasswd'] = "test08";
 
$post_data['submit'] = "提交";
 
$referrer="";
 
// parsing the given URL
 
$URL_Info=parse_url($URL);
 
// Building referrer
 
if($referrer=="") // if not given use this script as referrer
 
$referrer=$_SERVER["SCRIPT_URI"];
// making string from $data
 
foreach($post_data as $key=&gt;$value)
 
$values[]="$key=".urlencode($value);
$data_string=implode("&amp;",$values);
 
// Find out which port is needed - if not given use standard (=80)
 
if(!isset($URL_Info["port"]))
 
$URL_Info["port"]=80;
 
// building POST-request:
 
$request.="POST ".$URL_Info["path"]." HTTP/1.1\n";
 
$request.="Host: ".$URL_Info["host"]."\n";
 
$request.="Referer: $referrer\n";
 
$request.="Content-type: application/x-www-form-urlencoded\n";
 
$request.="Content-length: ".strlen($data_string)."\n";
 
$request.="Connection: close\n";
 
$request.="\n";
 
$request.=$data_string."\n";
 
$fp = fsockopen($URL_Info["host"],$URL_Info["port"]);
 
fputs($fp, $request);
 
while(!feof($fp)) {
 
$result .= fgets($fp, 128);
 
}
 
fclose($fp);
?>

eg:

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
<?php
/**
$url post string url
$post_data array(key,value)
$succ_info string of the return page to identify if the post is succeed
**/
 
function curl_post($url='',$post_data=array(''),$succ_info='') {
if ( empty($url) || empty($post_data) ) {
echo 'function curl_post no url input or post_data !';
return FALSE ;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,TRUE);
$result = curl_exec($ch);
if ( strpos($result , $succ_info ) === FALSE ) {
echo "Warring : post to $url error!";
return FALSE ;
}else{
return $result ;
}
curl_close($ch);
}
?>

不要做温室的鸭子

曾经看到一个故事——鸭子的逃生机会. 故事是: 一只很普通,很可爱的鸭子,它生活在无忧无虑的养殖场中,生活在父母的千般宠爱中。从小到大,没有人亏待它,没有人招惹它,也没有人欺负它,它就这么从乳臭未干到羽翼丰满。有一天主人将它从笼中带出来,说是带它去见世面,鸭子是充满喜悦和好奇地去了。 在一个人声鼎沸的集市,鸭子见到好多喜欢自己的人,指着自己向主人问这问那,最后,一位慈眉善目的新主人将它从笼中拉了出来,放在自行车上一路骑回家。鸭子并不知道大祸将降临,它甚至天真地以为,因为它的听话很温驯,会引来新主人更多的垂青,从此会过上更好的生活。

继续阅读: 不要做温室的鸭子

VIM diff用法简介

进入 diff 模式编辑的最简单方法就是用 "vimdiff" 命令。它象通常启动 Vim 一样,
不过额外地,它设定一些参数来设定查看不同之处。

        vimdiff file1 file2 [file3 [file4]]
这等同于:

        vim -d file1 file2 [file3 [file4]]
你也可以使用 "gvimdiff" 或 "vim -d -g"。GUI 就启动了。
你也可以使用 "viewdiff" 或 "gviewdiff" 。Vim 会进入只读模式。

有两条命令可用于在 diffs 之间跳转:
                                                               *[c*
       [c              向后至上一个更改的开始。当加上个数字后,便重复执行相应
                       次。
                                                               *]c*
       ]c              向前至下一个更改的开始。当加上个数字后,便重复执行相应
                       次。

如果不存在光标可以跳转到的更改,将产生错误。

有两个命令可用来在两个缓冲之间拷贝。相应的结果是,在一定的范围内两缓冲的内容
被统一。

                                                       *:diffg* *:diffget*
:[range]diffg[et] [bufspec]
               用另一个缓冲来修改当前的缓冲,消除不同之处。如果给定
               [bufspec],就使用该缓冲。否则,它仅当有另一个在 diff 模式下
               的缓冲时才起作用。
               [range] 参考下面。

                                                       *:diffpu* *:diffput*
:[range]diffpu[t] [bufspec]
               用当前缓冲来修改另一个缓冲,消除不同之处。就象 ":diffget"
               但更改的是另一个缓冲,而不是当前的。
               [range] 参考下面。

                                                       *do*
do              同 ":diffget" 但没有参数和范围。"o" 表示 "obtain" ("dg"
               是不能这样使用的。那可能是 "dgg" 的开始!)。

                                                       *dp*
dp              同 ":diffput" 但没有参数和范围。

当没有给定 [range] 时,受影响的不同之处仅是当前光标所处位置或其紧上方的文本。
当指定 [range] 时,Vim 试图仅改动所指定的行。当有被删除的行时,这并不总有效。

如果已经在VIM中打开了一个文件,需要同另一个文件进行比较的话,可以使用diffsplit命令:
:vert diffsplit FILE_RIGHT
Page 1 of 201234561020...Last »