关于由 BCS 收费之后带来的替代应用

前两日收到百度开发者中心发来的邮件,通知百度云存储开始进入收费时代。一晃眼,还以为是PCS收费,但定睛一瞧,才知道是兄弟服务BCS不能幸免。
b7dad1160924ab187318c07b37fae6cd7a890ba8
曾经,百度的BAE和BCS成为开发者非常喜爱的服务,我也将数个应用搭建在BAE上。一项服务一旦开始进入收费时代,就不可能走回头路。对于曾经把自己的网站资料都存放在BCS上的朋友,怎么应对这一变化呢?我们找到了几个可以替代(部分替代)BCS的应用。

  1. 七牛云存储

七牛云存储为新用户免费赠送10G 的使用空间+10G/月的流量,可以说是大手笔。谈到七牛,我们不得不谈又拍,和又拍相比,七牛更加人性化,提供了更多的可自定义选项。在同等条件下,七牛更便捷。七牛还提供云镜像,配合使用七牛镜像存储 WordPress 插件一键实现 WordPress 博客静态文件 CDN 加速。

  1. DropBox、AWS等国外云存储

即使国外的服务我们使用起来显得不那么顺手,但这确实是一个不错的选择。诸如DropBox和AWS提供的云存储服务,可以方便、高效的解决网站的存储问题。

  1. WP2PCS插件

如果你的网站是使用WordPress搭建,不妨使用WP2PCS插件,它将个人网盘转换为网站的后备存储箱。WP2PCS本身不是云存储服务,但却把WordPress网站和网盘联系在一起,就像一个中间的桥梁,让你可以自由的使用网盘存储你的网站资料。WP2PCS还提供自动备份功能,即使你的网站遇到突然的灾难,也不用担心网站资料突然丢失。

无论你怎么选择,其实更重要的是让你的网站资料不至于受到服务商的绑架,BCS的突然收费,让很多开发者突然手足无措。不过,上述的一些途径帮我们暂时缓解了转移网站资料的时间。

(转载)

筒子们情人节快乐

额,过不了情人节的童鞋就祝你们元宵节快乐吧哈哈,我呢继续在这里扯扯淡权当过节了吧。
一眨眼的功夫,就迎来了正月十五,过了今天,也就算是过完了今年的春节了吧,相信大部分的童鞋在这个星期一就已经开学了,之所以说大部分,是因为我还没有,哈哈哈。好吧,这样有点不厚道,不过晚一个礼拜开学也没什么意思,前段时间还能叫几个童鞋出来玩玩,而现在呢,只能闷闷的待家里玩手机。
昨天四点,在情人节的来临以及一个人的无聊再加上半夜的情绪波动三重影响下,我又想到了那个不可能的人,呵呵,但我能做到的只有想办法去忘记你,可这样我自己又不舍得啊唉,哭 Q_Q。想着离你的生日也没几个月了,而且我也不知道在这几个月里我究竟会有多少变化,于是我提前在博客里写下了一篇给你的文章,也是为了将那在我脑海中兜兜转转挥之不去的记忆抽一点出来扔进博客的数据库,我怀疑我如果不这样做早晚会被自己折磨疯的啊。。。话说我这样说是不是有点像邓布利多的冥想盆咳咳 →_→
不知道为什么从这个学期结束开始,我的心理承受能力莫名就变差了,我会因为别人的几句话而生气好久,然后又会将自己的负面情绪影响给别人,别人再在自己的圈子里传播,最终还是一个恶性循环。嗯,其实我整个寒假都不怎么开心,结果正巧有位可怜的娃撞我枪口上了。。。以前在这里说过,详见 你又不是人民币
嗯再过几天我也要开学了,总之应该也和各位一样吧,该背的背,该默的默,该做卷子的做卷子,只是希望能用这些冲淡我的那些固执的思绪 = = 筒子们求安慰啊。。。

规划生活

假期的时候朋友们一起聚会,A大姐说她把定投了好几年的钱赎回,加上丈夫(领证没办事)之前攒的钱,两口子买了套房子,用这些钱付了首付。大家纷纷对A大姐表示祝贺,聚会结束以后,我和大姐B同路回家。B大姐上了车就哭了,我只好带她找了个咖啡馆坐。
B大姐说她跟A大姐同岁,都已经32岁了。大家认识这么多年,她一直很有优越感,觉得自己比她漂亮。她一直怕自己比大姐A过的差,A大姐有的杂志,她也订阅。A大姐看的书,她也买。A大姐出去旅行,她也去。A大姐租好房子,她也租。甚至别人给她介绍男朋友,她都不见比A大姐男朋友挣的少的。没想到现在A大姐,已经有了丈夫,有了房子,而她还在飘着,孑然一身。打拼多年没有积蓄,没有房子,欠一万多信用卡,甚至在春节都不敢回家面对父母。
我想劝劝B大姐,B大姐却说“凭什么她有的,我没有?!”我话到嘴边没说,其实A大姐的杂志很多都是跟其他杂志置换的,不需要她自己花钱。我和A大姐给同一家杂志的书评版写稿,很多书都是出版社送的,图书馆借的,就算是自己买的,也是杂志的稿费买的。A大姐虽然一直过有品质的生活,出去旅行,租好房子,但是她也有打算,该定投的定投,该攒钱的攒钱,没有因为这些物质生活错过她自己的目标,她始终知道自己要的是什么。而伴侣这件事,更是跟别人没关系,适合自己的最好。
目标不明确,或者对自己想要什么不明确的人,很容易受外界影响,会和别人攀比。攀比很可怕,它会让人失去自己方向,被动的跟随别人的脚步。当出现力不能及的情况,就容易迷茫,失措。就会觉得生活不幸福,有很负面的情绪出现。我想了好几天,想写一下这件事,一直没有想好,早上看梁晓声的新书看到书里有这样一段话“不幸福的人生感觉人人都会常有,是生存竞争压力对人的心理造成的负面感觉,不同的人面临不同的生存竞争压力。但有时候,也与我们对人生的思想方法有关。如果能提前对人生多几种考虑、打算、选择,也许人生的回旋余地会大一些,压力会小一些,瞻望前途,会相对的乐观一些;那么,不幸福的感觉,自然会相对少一些·····”
谈到规划生活,设立目标,很多人觉得一旦设立了目标,努力了又达不到,会很失望,会受打击。其实只要实实在在,踏踏实实的做了,那些前面的准备,努力,都不会白费。等回过头,你会发现其实这些过程也是你的收获,达到目标与否不是那么重要。而一旦你没有目标,得过且过,失去了自己的方向,不幸福的感觉会被无限放大。我们在年轻的时候早点思考一下自己的未来,打算一下,让自己压力小一点或许会过的轻松一点儿。

注: 转载

我们都会死很久,别活太着急

有些人,总是活得很累,并非生活过于艰难,而是太容易被周围的环境所感染,被别人的情绪所影响。其实我们都是活给自己的,很少有人真的在意你,把你放在心上。很多时候,我们会不自觉的随大流,然后把自己弄的很忙、很累,然后我们自己很感动。觉得我付出这么多,却得到这么少,甚至什么都没得到,太不公平了。
前几天领导接了一电话,他高中同学,卖了奥运前拆迁的三套房子,全职在家炒股票,6年了,无论感冒发烧,刮风下雨,孩子生病,老婆离婚他都义无反顾的准时坐在电脑前面看大盘。可是这么多年了,他在股市上没有一分钱的收获,反而赔了40多万。领导安慰着他,问他对股票有什么心得!结果没听一会儿,领导就把电话挂了。我问领导“怎么了?”领导说“这就不是明白人,投资这个事,就好比种土豆(领导老家盛产土豆),你给土豆地施肥浇水、除虫锄草是为了让土豆长好,有好收成。你住的土豆地里,结果你什么都不干,连野猪来糟践土豆你都不管(他持有了一大堆连年亏损,且技术上下降趋势明显的股票),你还埋怨老天爷对你不公平,你都住土豆地里了,也不给你好收成。这太可笑了。”
是不是觉得似曾相识,无独有偶,很多姑娘跟我抱怨他们遇人不淑的时候,也是这个逻辑,她付出多少,牺牲多少,奉献多少,可是老天爷却给她一个“渣男”。让她伤心流泪,让她饱受伤害,让她生不如死。可是她们却忽视了,相伴终生这件事,重点是人,你得先把人找对了,再说付出、牺牲、奉献的事。
我的朋友A,两口子结婚,房子、家具、家电、酒席花光了所有积蓄,除了六个月的生活费,两个人什么都没有了。新婚三个月以后A算账,这三个月存了多少钱,花了多少钱,选了什么品种的理财,收益了多少,然后得出结论,三个月两个攒了四万多块钱。A老公听完了,看着A笑着说,没事,下周发了项目奖金就有五万多了,再下周发了工资就有六万多了。这就是好男人,他不会依靠你去解决问题,他会和你一起去解决问题,为你们的未来负责,踏踏实实跟你过日子。那些还没怎么着,先要求你付出这个,付出那个,让你帮他解决问题的男人,不能说对你没真心,至少证明他还没学会承担责任。
在众多的读书友邻里,我喜欢和Sofia聊天,我们是截然不同的女人,她会好几国语言,我除了北京话,方言都听着困难。她很温柔,对什么事都不生气,我情绪化。她年纪比我大,孩子大,而我的家庭生活刚刚开始没几年。我习惯每天做很多事,她倡导精简生活。可是我们很聊得来,我们在读书上有很大的相同之处,我们都习惯梳理框架,抓住重点阅读,把值得学习的地方都记下来。这让我们有最大的共同点,我们俩读书都很快,当所有人质疑我们俩读书为什么这么快,怎么写出书评的时候,只有我们俩能够理解对方,知道总结能给阅读带来多大的好处。
总结不光给阅读带来好处,也给写作带来好处。我们部门有个同事,他负责的栏目是行业,总是抱怨公司平台制约他,让他不能专心研究一个行业,耽误了他的青春,限制了他的发展。很多次他抱怨的时候,我都想说话,后来想想我大着肚子,别惹闲事儿,况且我说了他也听不懂。其实只要他踏实一下,总结一下之前写这个栏目同事的文章就能找到把这个栏目写好又提高自己的方法。之前写那个栏目的同事,跟他面对的资源,环境都一样,人家却可以用一周时间分五期,把一个行业写的透透的。让其他研究所的行业研究员托其他同事说“抽空我做东,你能不能把你们写**的研究员叫上,给我引见一下。”
做事情之前不妨好好的想想,把事情琢磨明白了再行动。行动之前的思考怎么才能达到目标,怎么才能把事做成了,这些都是行动之前重要的准备。抓住重点、梳理出框架、总结好行动的步骤。其实只要你自己梳理明白了,找到方向,就能把自己想做的事做成了。之所以说选择大于努力,很大程度上,是方向对了,才能到达目标;方向不对,你走的时间越长,离目标越远。我们都会死很久,别活太着急,停下来好好想想再干活,瞎忙只是感动了自己。不要急于攀附,所有的攀附都不能代表你自己的价值,你的价值在于做了什么,怎么做。

博主评:
挺喜欢开头的那一段话的,”其实我们都是活给自己的,很少有人真的在意你,把你放在心上”,如果太在乎不必在乎的人了,自己会很累,最终”被别人的情绪所影响”。就像原文的评论里有一条,”
Sofia 2014-01-29 10:01:56
你想想,你现在怀着孕,要是被他们气到了,你多亏啊,还便宜了他们得了乐子。不理就最好。姐写了,你爱看就看,不爱看,右上角有X。
“哈哈,干嘛要去管某些人怎么想呢。
话说我熬夜熬多了。。貌似睡不着了。。晚安亲们。

关于 jquery 里 on 的用法

突发奇想想给前一篇文章里说的那个播放器加个换一首的功能,结果发现了个很奇怪的问题。因为换一首的链接我是用在页面被加载的时候用 jquery 动态加载到小工具栏里的,所以直接导致了无法绑定我指定的 function,也就是单击链接以后没办法刷新获取下一首音乐。后来百度了下,发现需要使用 .live 事件来绑定。坑爹的是用了 .live 以后前台播放器直接罢工了,之后查了下在 jquery 1.9 里已经删除了 .live 事件,好吧,删除就删除了吧,又百度了一会,发现别人说道可以用 .on 事件替代 .live。可是,保存以后发现,点链接依旧无响应。问题是我找了好多的资料发现都是说可以用 .on 代替。。。之后换了个关键字,仔细看了下别人贴上来的源码,才发现 .on 不是这样用的。在看他的源码之前,我一直以为 .on 和 .live 一样只需要两个参数,即 $(被绑定元素).on(事件, function); 就可以搞定了,但是,现在根据我的理解发现,应该是 $(被绑定元素的父级元素).on(事件, 被绑定元素, function)。。。悲催。。。在这里记一笔以免以后忘记 = =

无聊给博客加了个背景音乐

如题。。顺手写了个管理中心。。这是我第一个用到 json 的玩意儿。。不过别说 json 还是挺方便的。。附源码及安装说明。。

2014-01-31 重要更新,因在编写前一个版本时不熟悉 php 的 cookies 机制,导致 随机播放时避免重复播放 的功能未实现,后准备使用 jquery 将播放列表存到本地 cookies 然后随机调用,又发现 cookies 有大小限制。之后只能放弃了这个功能,现在只使用 cookies 记录当前播放的曲目以及服务器传回的播放列表中总计的曲目数量,以便进行顺序播放。

一、先创建数据表

1
2
3
4
5
6
7
8
9
create table `music_list` (
`id` int not null auto_increment,
`name` text not null default "",
`url` text not null default "",
`singer` text not null default "",
`lrc` int not null default 0,
`lrc_data` text not null default "",
primary key(`id`)
);

表示偷了个小懒全用的 text

二、上传文件至根目录,命名无所谓,必须 .php 结尾,本站的是 music_list.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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<?php
session_start();
header("Content-type:text/html;charset=utf-8");
date_default_timezone_set('Asia/Shanghai');
$pass='经 md5 加密后的密码';
$link = @mysql_connect("数据库服务器",'数据库用户名','数据库密码',true);
if(!$link) {
die("Connect Server Failed: " . mysql_error());
}
if(!mysql_select_db('数据库名',$link)) {
die("Select Database Failed: " . mysql_error($link));
}
mysql_query('set names utf8');

function get_music($id=null) {
$return_value=array();
$select_query=mysql_query('select * from `music_list`');
while (($value=mysql_fetch_array($select_query))!==false) {
$return_tmp=array();
$return_tmp['name']=$value['name'];
$return_tmp['url']=$value['url'];
$return_tmp['singer']=$value['singer'];
$return_tmp['id']=$value['id'];
$return_tmp['lrc']=htmlspecialchars($value['lrc']);
$return_tmp['lrc_data']=str_replace(array("\r","\n"),array("","<br />"),$value['lrc_data']);
$return_value[]=$return_tmp;
}
if ($id==null) {
return $return_value;
} else {
$return_values=$return_value[$id];
$return_values['length']=count($return_value);
return $return_values;
}
}

function chkid($id) {
if (!empty($id) && is_numeric($id)) {
$select_query=mysql_query('select * from `music_list` where `id`=\''.$id.'\'');
if (mysql_num_rows($select_query)==0) {
msg('找不到数据');
}
return true;
}
msg('找不到数据');
}
function get_post_data() {
if (!get_magic_quotes_gpc()) {
$return_value=array();
foreach ($_POST as $key=>$value) {
$return_value[$key]=addslashes($value);
}
} else {
$return_value=$_POST;
}
return $return_value;
}
function msg($msg) {
echo '<p>'.$msg.'</p><p><a href="'.$_SERVER['PHP_SELF'].'">返回首页</a></p>';
echo_footer();
exit();
}
function echo_header() {
echo '<html><head><meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0"/><title>博客背景音乐管理中心</title></head><body>';
return true;
}
function echo_footer() {
echo '</body></html>';
return true;
}
if ($_GET['action']=='get_music') {
if ($_GET['id']!=='' && is_numeric($_GET['id'])) {
$output=get_music($_GET['id']);
preg_match_all("/^(http:\/\/.*\/)(.*?)$/",$output['url'],$outputtmp);
$output['url']=$outputtmp[1][0].rawurlencode($outputtmp[2][0]);
foreach ($output as $k=>$v) {
$output[$k]=urlencode($v);
}
echo urldecode(json_encode($output));
}
exit();
} elseif ($_GET['action']=='get_music_list') {
echo json_encode(get_music());
exit();
} elseif ($_GET['action']=='login') {
if ($_SESSION['admin']=='admin') {
header('Location: '.$_SERVER['PHP_SELF']);
exit();
}
echo_header();
if ($_POST) {
if (md5($_POST['password'])==$pass) {
$_SESSION['admin']='admin';
header('Location: '.$_SERVER['PHP_SELF']);
exit();
} else {
echo '<p>密码错误</p>';
}
}
echo '<form action="" method="post"><p><label>请输入密码:<input type="password" name="password" /></label></p><p><input type="submit" name="submit" value="提交" /></p></form>';
echo_footer();
} else {
if ($_SESSION['admin']!=='admin') {
header('Location: '.$_SERVER['PHP_SELF'].'?action=login');
exit();
}
echo_header();
if ($_GET['action']=='del') {
chkid($_GET['id']);
if ($_POST) {
$del_query=mysql_query('delete from `music_list` where `id`=\''.$_GET['id'].'\'');
if ($del_query) {
msg('删除成功');
} else {
msg('删除失败');
}
} else {
$select_query=mysql_fetch_array(mysql_query('select * from `music_list` where `id`=\''.$_GET['id'].'\''));
echo '<form action="" method="post"><p>您确定要删除 '.$select_query['name'].' - '.$select_query['singer'].'么?</p><p><input type="submit" name="submit" value="确定" /><a href="'.$_SERVER['PHP_SELF'].'">取消</a></p></form>';
}
} elseif ($_GET['action']=='edit') {
chkid($_GET['id']);
if ($_POST) {
$post_data=get_post_data();
$update_query=mysql_query('update `music_list` set `name`=\''.$post_data['name'].'\', `url`=\''.$post_data['url'].'\', `singer`=\''.$post_data['singer'].'\', `lrc`=\''.$post_data['lrc'].'\', `lrc_data`=\''.$post_data['lrc_data'].'\' where `id`=\''.$_GET['id'].'\'');
if ($update_query) {
msg('数据插入成功');
} else {
msg('数据插入失败');
}
} else {
$select_query=mysql_fetch_array(mysql_query('select * from `music_list` where `id`=\''.$_GET['id'].'\''));
echo '<form action="" method="post"><p><label>歌名:<input type="text" name="name" value="'.$select_query['name'].'" /></p><p><label>歌手:<input type="text" name="singer" value="'.$select_query['singer'].'" /></p><p><label>下载地址:<input type="text" name="url" value="'.$select_query['url'].'" /></p><p>显示 lrc 歌词: <label><input type="radio" name="lrc" value="1" '.($select_query['lrc']?'checked="checked" ':'').'/>是</label>&nbsp;&nbsp;<label><input type="radio" name="lrc" value="0" '.(!$select_query['lrc']?'checked="checked" ':'').'/>否</label></p><p>lrc 歌词(可选):<br /><textarea name="lrc_data">'.htmlspecialchars($select_query['lrc_data']).'</textarea></p><p><input type="submit" name="submit" value="确定" /><a href="'.$_SERVER['PHP_SELF'].'">取消</a></p></form>';
}
} elseif ($_GET['action']=='search') {
$post_data=get_post_data();
echo '<form action="?action=search" method="post"><p><input name="search" type="text" value="'.$post_data['search'].'"/></p><p><input type="submit" value="搜索" /></p></form>';
if ($_POST) {
$search_query=mysql_query('select * from `music_list` where `name` like \'%'.$post_data['search'].'%\' or `singer` like \'%'.$post_data['search'].'%\' or `url` like \'%'.$post_data['search'].'%\'');
if (mysql_num_rows($search_query)>0) {
echo '<ol>';
while (($value=mysql_fetch_array($search_query))!==false) {
echo '<li>'.$value['name'].' - '.$value['singer'].'&nbsp;<a href="'.$_SERVER['PHP_SELF'].'?action=edit&id='.$value['id'].'">编辑</a>&nbsp;<a href="'.$_SERVER['PHP_SELF'].'?action=del&id='.$value['id'].'">删除</a></li>';
}
echo '</ol><a href="'.$_SERVER['PHP_SELF'].'">返回首页</a>';
} else {
echo '<p>无搜索结果</p>';
}
}
} elseif ($_GET['action']=='add') {
if ($_POST) {
$post_data=get_post_data();
$insert_query=mysql_query('insert into `music_list`(`name`,`url`,`singer`,`lrc`,`lrc_data`) values(\''.$post_data['name'].'\',\''.$post_data['url'].'\',\''.$post_data['singer'].'\',\''.$post_data['lrc'].'\',\''.$post_data['lrc_data'].'\')');
if ($insert_query) {
msg('数据插入成功');
} else {
msg('数据插入失败');
}
} else {
echo '<form action="" method="post"><p><label>歌名:<input type="text" name="name" /></p><p><label>歌手:<input type="text" name="singer" /></p><p><label>下载地址:<input type="text" name="url" value="http://" /></p><p>显示 lrc 歌词: <label><input type="radio" name="lrc" value="1" />是</label>&nbsp;&nbsp;<label><input type="radio" name="lrc" value="0" checked="checked" />否</label></p><p>lrc 歌词(可选):<br /><textarea name="lrc_data">'.htmlspecialchars($select_query['lrc_data']).'</textarea></p><p><input type="submit" name="submit" value="确定" /><a href="'.$_SERVER['PHP_SELF'].'">取消</a></p></form>';
}
} else {
echo '<form action="?action=search" method="post"><p><input name="search" type="text" /></p><p><input type="submit" value="搜索" /></p></form>';
$all_list=get_music();
echo '<ol>';
foreach ($all_list as $value) {
echo '<li>'.$value['name'].' - '.$value['singer'].'&nbsp;<a href="'.$_SERVER['PHP_SELF'].'?action=edit&id='.$value['id'].'">编辑</a>&nbsp;<a href="'.$_SERVER['PHP_SELF'].'?action=del&id='.$value['id'].'">删除</a></li>';
}
echo '</ol>';
echo '<a href="'.$_SERVER['PHP_SELF'].'?action=add">添加新曲目</a>';
}
echo_footer();
}
?>

注意不要忘记修改数据库信息和登录密码

三、前台创建小工具

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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
<script type="text/javascript" src="/json2.js"></script>
<script type="text/javascript" src="/jquery.cookie.js"></script>
<style>
/*
* Lyric support by kookxiang(http://ikk.me)
*/
.kk_player { width: 100%; max-height: 40px; }
.kk_lrc { height: 125px; overflow: auto; padding: 0; margin: 0; }
.kk_lrc li { display: block; text-align: center; color: gray; line-height: 20px; margin: 2px 0 3px 0 !important; min-height: 20px; }
.kk_lrc .current { color: black; font-weight: bold; }
.kk_lrc, .kk_lrc * { -webkit-transition-duration: 1s; -moz-transition-duration: 1s; transition-duration: 1s; }
.kk_lrc ::selection { background: transparent; background: rgba(127, 127, 127, 0.1); }
.kk_lrc_box { position: relative; }
.kk_lrc_box:before { content: '.'; overflow: hidden; text-indent: -9999px; width: 100%; height: 30px; z-index: 1; display: block; position: absolute; background: url(http://lab.imjs.work/getlrc/cover.png) repeat-x 0 0; top: 0; pointer-events: none; }
.kk_lrc_box:after { content: '.'; overflow: hidden; text-indent: -9999px; width: 100%; height: 30px; z-index: 1; display: block; position: absolute; background: url(http://lab.imjs.work/getlrc/cover.png) repeat-x 0 100%; bottom: 0; pointer-events: none; }

::-webkit-scrollbar { width: 8px; height: 8px;}
::-webkit-scrollbar-track { -webkit-border-radius: 10px; border-radius: 10px; }
::-webkit-scrollbar-thumb { -webkit-border-radius: 10px; border-radius: 10px; background: rgba(96, 96, 96, 0.8); -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5); }
::-webkit-scrollbar-thumb:window-inactive { background: rgba(96, 96, 96, 0.4); }
</style>
<script>
var ael=false;
var tmp_interval=[0,0];
function get_lrc(name,singer) {
var script = document.createElement('script');
script.setAttribute('src', "http://lab.liujiantao.me/lrc/?name="+encodeURIComponent(name)+"&singer="+encodeURIComponent(singer)+"&callback=con_lrc");
//load javascript
document.getElementsByTagName('head')[0].appendChild(script);
return true;
}

function con_lrc(lrc_data) {
var err_msg={"-1":"服务器没有接收到完整数据","-2":"无法正常获取 xml 文件","-3":"找不到该曲目","-4":"未收录 lrc 歌词","-5":"无法正常获取 lrc 歌词"};
if (lrc_data.status=="error") {
console.error(err_msg[lrc_data.errcode]);
$("#kk_lrc_box").css("display","none");
return false;
}
$("#player_lrc").html("<li></li><li></li><li></li>");
var kk_lrc = load_kk_lrc();
for (j=0;j<lrc_data.result.length;j++) {
var lrcArray=lrc_data.result[j].split("<br />");
var timeKey=new Object();
var strArray=new Array();
var _offset=lrc_data.result[j].match(/\[offset.*?(\d*?)\]/);
_offset=(typeof _offset=="undefined" || _offset===null)?0:_offset[1]/1000;
for (var i = 0,l = lrcArray.length;i < l;i++) {
clause = decodeURIComponent(lrcArray[i]).replace(/\[\d*?:\d*?([\.:]\d*?)?\]/g,'');
timeRegExpArr = decodeURIComponent(lrcArray[i]).match(/\[(\d*?):(\d*?)([\.:](\d*?))?\]/g);
if (timeRegExpArr!=null) {
for (var k = 0,h = timeRegExpArr.length;k < h;k++) { //第一遍循环,JSON存储歌词,数组存储时间
_timeRegExpArr = timeRegExpArr[k].match(/^\[(\d*?):(\d*?)([\.:](\d*?))?\]$/);
min = parseFloat(_timeRegExpArr[1]);
sec = parseFloat(_timeRegExpArr[2]);
msec = parseFloat(typeof _timeRegExpArr[4]=="undefined"?0:_timeRegExpArr[4]);
time=min * 60 + sec + msec/100 - _offset;
time=(time<0)?0:time;
if (!timeKey[time]) {
strArray.push(time);
timeKey[time] = clause + '<br />';
} else {
timeKey[time] += clause + '<br />';
}
}
}
}
strArray.sort(function(a,b) {
return a - b;
});
for (var i = 0,l = strArray.length;i < l;i++) { //第二遍循环,JSON存储时间,数组存储歌词
var tempIndex = strArray[i],
tempClause = timeKey[tempIndex];
kk_lrc.add_lrc(tempIndex,tempClause);
}
}
kk_lrc.init();
ael=true;
return true;
}

function add_lrc(lrc_data) {
con_lrc({'status':'success','errcode':'0','result':[lrc_data.replace("\n","<br />")]});
return true;
}

/*
* Lyric support by kookxiang(http://ikk.me)
*/
function load_kk_lrc(){
var kk_lrc = new Object();
kk_lrc.extra_top = 1;
kk_lrc.current = -1;
kk_lrc.current_obj;
kk_lrc.offset = 0;
kk_lrc.current_start = -1;
kk_lrc.next_update_time = -1;
kk_lrc.showtime = -1;
kk_lrc.lrc_offset = -1;
kk_lrc.lrc_height = -1;
kk_lrc.lrc = [];
kk_lrc.lrcobj = null;
kk_lrc.target = 0;
kk_lrc._target = 0;
kk_lrc.player_obj = document.getElementById('player_player');
kk_lrc.lrc_obj = document.getElementById('player_lrc');

kk_lrc.scroll_lrc = function () {
if(typeof kk_lrc.lrc[kk_lrc.current+2] != "undefined"){
for(id in kk_lrc.lrcobj) kk_lrc.lrcobj[id].className = '';
kk_lrc.lrcobj[kk_lrc.current+3].className = 'current';
}
kk_lrc.current_start = kk_lrc.lrc[kk_lrc.current];
kk_lrc.current++;
kk_lrc.current_obj = kk_lrc.lrcobj[kk_lrc.current+2];
kk_lrc.next_update_time = kk_lrc.lrc[kk_lrc.current];
kk_lrc.showtime = kk_lrc.next_update_time - kk_lrc.current_start;
kk_lrc.lrc_offset = kk_lrc.current_obj.offsetTop;
kk_lrc.lrc_height = kk_lrc.current_obj.offsetHeight;
};
kk_lrc.check_lrc_update = function () {
var curTime = kk_lrc.player_obj.currentTime;
if(curTime >= kk_lrc.next_update_time - 0.2){
kk_lrc.scroll_lrc();
kk_lrc.check_lrc_update();
}
if(typeof kk_lrc.lrc[kk_lrc.current-1] != "undefined"){
kk_lrc.extra_top = (kk_lrc.next_update_time - curTime) / kk_lrc.showtime;
}
kk_lrc.target = Math.round(kk_lrc.lrc_offset - (125 - kk_lrc.lrc_height) / 2);
if(kk_lrc.target < 0) kk_lrc.target = 0;
};
kk_lrc.init = function () {
kk_lrc.add_lrc('999999', '');
kk_lrc.add_lrc('999999', '');
kk_lrc.add_lrc('999999', '');
kk_lrc.current = -1;
kk_lrc.lrcobj = kk_lrc.lrc_obj.getElementsByTagName('li');
kk_lrc.current_obj = kk_lrc.lrcobj[0];
kk_lrc.scroll_lrc();
kk_lrc.check_lrc_update();
if (ael==false) {
kk_lrc.player_obj.addEventListener("seeked" ,function(){
kk_lrc.current = -1;
kk_lrc.scroll_lrc();
kk_lrc.check_lrc_update();
});
kk_lrc.player_obj.addEventListener("durationchange" ,function(){
kk_lrc.current = -1;
kk_lrc.scroll_lrc();
kk_lrc.check_lrc_update();
});
} else {
clearInterval(tmp_interval[0]);
clearInterval(tmp_interval[1]);
}
tmp_interval[0]=setInterval(function(){
if(kk_lrc.player_obj.paused) return;
if(kk_lrc.current_start > kk_lrc.player_obj.currentTime){
kk_lrc.current = -1;
kk_lrc.scroll_lrc();
kk_lrc.check_lrc_update();
}else{
kk_lrc.check_lrc_update();
}
}, 100);
tmp_interval[1]=setInterval(function(){
if(kk_lrc._target == kk_lrc.target) return;
if(Math.abs(kk_lrc.lrc_obj.scrollTop - kk_lrc._target) > kk_lrc.lrc_height){
kk_lrc._target = kk_lrc.lrc_obj.scrollTop;
}
if(kk_lrc.player_obj.paused){
kk_lrc._target = kk_lrc.fixFloat(kk_lrc._target * 0.8 + kk_lrc.target * 0.2);
}else{
kk_lrc._target = kk_lrc.fixFloat(kk_lrc._target * 0.98 + kk_lrc.target * 0.02);
}
kk_lrc.lrc_obj.scrollTop = kk_lrc._target;
}, 5);
};
kk_lrc.add_lrc = function (time, lrc) {
kk_lrc.lrc.push(parseFloat(time) + kk_lrc.offset);
var lrc_line = document.createElement("li");
lrc_line.innerHTML = lrc;
kk_lrc.lrc_obj.appendChild(lrc_line);
};
kk_lrc.get_lrc = function (num) {
if(typeof kk_lrc.lrc[num] != "undefined"){
return kk_lrc.lrc[num][1];
}else{
return '';
}
}
kk_lrc.setoffset = function (num) {
kk_lrc.offset = num / 1000;
}
kk_lrc.fixFloat = function (num) {
return Math.ceil(num * 10) / 10;
}
return kk_lrc;
}
function get_music() {
$("#audio_player").html('<p>正在加载播放器,请稍候</p>');
if ("undefined"==typeof $.cookie("music_list") || $.cookie("music_list")==null) {
var music_id=0;
} else {
var cookie_music=JSON.parse($.cookie("music_list"));
if ((cookie_music['id']+1)==cookie_music['length']) {
var music_id=0;
} else {
var music_id=cookie_music['id']+1;
}
}
var music_id=("undefined"!==typeof arguments[0])?arguments[0]:music_id;
$.ajax({
type: 'get',
url: '/music_list.php',
dataType: 'json',
timeout: 3000,
data: {"action":"get_music","id":music_id},
success: function(music) {
$("#audio_player").html('<p>当前<span id="audio_player_status">正在缓冲准备播放</span>的是:<br /><span id="music_name">' + music['name'] + ' - ' + music['singer'] + '</span>&nbsp;<a href="####" id="reload_audio_player">换一首</a></p>');
if (typeof $("#audio_list").html()!=='undefined') $("#audio_list").html($("#audio_list").html().replace(/<\/?span.*?>/g,'').replace($("#music_name").html(),'<span style="font-weight: bold; color: red">'+$("#music_name").html()+'</span>'));
if ($(document).width()>=768 && (new Date().getHours()>=8 && new Date().getHours()<23)) {
$("#player_player").attr("autoplay","autoplay");
}
$("#player_player").attr("src",music['url']);
if (music['lrc']=="0") {
$("#kk_lrc_box").css("display","none");
} else {
$("#kk_lrc_box").css("display","block");
if (music['lrc_data']!=="") {
add_lrc(music['lrc_data']);
} else {
get_lrc(music['name'],music['singer']);
}
}
$("#audio_player2").html('<!-- id=' + music_id + ' mysql_id=' + music['id'] + ' -->' + (($(document).width()<768 || new Date().getHours()<8 || new Date().getHours()>=23)?"<p><small>已为您关闭了自动播放</small></p>":""));
$.cookie("music_list",'{"id":'+ music_id + ',"length":' + music['length'] + '}',{expires: 7, path: '/'});
},
error: function(XMLHttpRequest,status) {
if (status == 'timeout') {
$("#audio_player").html('<p>请求超时,<a href="####" id="reload_audio_player">重新加载</a></p>');
return true;
} else {
$("#audio_player").html('<p>无法请求播放数据</p>');
return true;
}
}
});
}
function change_audio_player_status() {
$("#audio_player_status").html("正在播放")
}
$(function() {
get_music();
$("#audio_player").on('click', "#reload_audio_player", function() {
get_music();
});
});
</script>
<span id="audio_player"></span>
<audio src="" controls="controls" onended="get_music()" onplaying="change_audio_player_status()" style="width: 100%" id="player_player">您的浏览器不支持 HTML5</audio>
<span id="audio_player2"></span>
<div class="kk_lrc_box" id="kk_lrc_box"><ul id="player_lrc" class="kk_lrc">

</ul></div>

四、将下面这个文件解压上传至根目录,里面分别是 jQuery 的 JSON 插件和 Cookies 插件
jq.zip

效果如本页所示。有段时间没写 php 了,如果有什么 bug 或者建议请评论,谢谢

生活就像心电图,一帆风顺除非你死了

突然发现我有篇文章被很多地方转载,没有署名,没有通知过我,还有的人说是自己写的,或者被断章取义的误会。想了一会儿以后,决定玩会儿睡觉了。
好友邻们提醒我解释一下,要不老掉粉。其实说不生气,不委屈,是假的。但是怎么说呢!生活总有意外,当你不能掌握的时候,只能随遇而安。我爱人常说“生活就像心电图,一帆风顺除非你死了。”我妈常说“真能万事如意,基本离死不远了。”我的自我介绍里有句话:解释和争论,只在两种情况下有意义,一种是这个人很重要,一种是这件事很重要。丹妮尔•拉波特说“优秀的人都精神强大,是因为他们都将精力集中于自己清晰的目标上,这使他们能够掌控自己的生活,而不是被生活推着走,被生活所累。”
我现在大着肚子,在怀孕最重要的时期。我为这事解释一顿,挨个找这些人给我稿费,删除,道歉,解释,然后呢?我惹一肚子气,影响胎教,影响身体。虽然每天都掉粉,但是真的理解我,认可我的友邻,还是会关注我,对于他们来说,这就是件小事。而对于现在的我来说,没有人比我肚子里的这个更重要。有一次看失恋的文章,有过这么一个小故事,我觉得也适合这件事。
小猴从树枝上掉下来,肚皮划破了一道小口子。它指着伤口让同伴们看,大家轮流察看伤口,对小猴子的不幸给予了极大的同情。而伤口每经过一次察看,便被撕开一点,最后小猴子因伤口太大、流血过多而死去了。原本无关紧要的小伤小痛,却因为自己和他人的过分惦记和关注,最终导致小痛变剧痛,小伤成大伤。
露易丝·海的《生命的重建》有这样一段话:“我们必须选择释怀过去,并原谅每一个人,包括我们自己。我们可能不知道该怎样原谅,也可能不想原谅,但我们说出心甘情愿地原谅这句话时,就开始了疗伤过程。如果要自我疗伤,释怀过去并原谅每一个人就成了必须遵守的诫命。”人们总说时间会改变一切,但是实际上你需要自己去改变。在这个世界上什么都可能不是你的,所以千万别多想。

博主来扯个淡:
  话说我也是转了不少的”鼹鼠的土豆”所写的文章了,但也只是因为觉得内容不错,拿来分享分享。记得以前第一次听说”鼹鼠的土豆”的时候还是在好几年前的一档广播节目里,是中央台经济之声的,经常会读点好文章、好故事,以前夜里无聊时也经常听。当时讲的主要的内容也不怎么记得了,不过自此以后我上网搜了下,发现作者写的文章。。。嗯,更确切的说是日记吧,挺符合我的口味的,同时也是让我受益匪浅啊。而在开了这个博客以后,我就经常转些她写的文章,就像前文所说的,”分享分享”,并且,把这些文章都放在了同一个分类里,以便日后翻看。不过也有部分朋友误以为这些文章是我写的,这个。。见笑了,我的文笔还没那么好,况且,我的生活经验也没那么丰富,又怎能理解这么多道理 = = 倒是记得以前建这个分类时发过一篇声明,不过倒也是挺久远的事情了。。。关于本分类
  聊聊本文内容,作为标题的这句话,想必各位都听说过。是啊,要是什么事都一帆风顺,你又能从中吸取到什么呢?胜败乃兵家常事,为何要去为了一次失败而去气馁?甚至放弃?不过可怕的是失败仍不自知,相信各位也听说过一句话,”失败是成功之母”,有人只看出了字面是意思,认为不去努力,这次失败了,下次就自然而然的会成功。可不是这样的啊,但是,还有更可怕的事,有些人失败后不去努力也就罢了,不去从自己身上找问题,反而去 YY 成功者怎么样怎么样。我为什么会突然想到这些呢?记得前几天的《爱情公寓》里有说到一个”富二代”只会打高尔夫,原因是其父亲担心其进行其他运动时受到伤害,而不让他参加其他的运动项目。相信看过的各位应该对其中的集体用高尔夫球杆站在桌球台上打母球的事很有印象吧?当然这是恶搞 = = 但我却因此想到有人可能会嘲笑这位”富二代”只会打高尔夫,嗯。。在这之前你有没有想过,你并不会打高尔夫,甚至,其他的运动也不去怎么参加?(好吧,这似乎有点夸大了,但这只是举个例子。)你有什么资格去评论别人?当然,如果你说言论自由,OK。更有甚者,认为这位”富二代”自己过得并不开心。我倒是又想说说,人家过得开心不开心关你什么事,反正过得比你开心就是了。引申出来,说个比较常见的事儿,也是各位”学渣”公认的事儿。相信各位”学渣”一定知道大部分的”学霸”会在各种各样的假期去参加各种各样的兴趣班、补习班、提高班,然后就会觉得人家过得并不开心。是,就算不开心,人家好歹还是可以拿自己的成绩和自己的”兴趣”证书来炫耀的,你呢?比如这位”学霸”,初三女儿爱学习不让补课就绝食,例子可能有些极端,但人家可以拿得出成绩。你呢?又有什么?其实,即使是”学渣”,即使对学习没有兴趣,即使无论如何在学习上都拼不过别人,那还是可以发展一下其他的特长的嘛,毕竟,你要是没有被利用的价值,早晚会被淘汰,无论是被朋友,被学校,被社会。
  咳咳,扯远了,只是想到了一些以前的事情,希望能在这里吐个槽,如果可能的话,也能和各位交流交流。最后提一点,这位”鼹鼠的土豆”是豆瓣上的,写的东西相当值得推荐,为了提高自身的”正能量”去看看也是不错的。

php计算24点游戏

修改了下,加了个表单。原文转载自 http://www.alixixi.com/program/a/2008050731708.shtml

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
<?php
set_time_limit(0);
?>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<meta http-equiv="pragram" content="no-cache">
<meta http-equiv="cache-control" content="no-cache, must-revalidate">
<meta http-equiv="expires" content="0">
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8">
<title>24 点计算器</title>
</head>
<body>
<?php
$values = explode(' ',$_POST['num']);
$result = 24;

$list = array();

if ($_POST) {
makeValue($values);
echo '<pre>';
print_r($list);
echo '</pre>';
}

function makeValue($values, $set=array())
{
$words = array("+", "-", "*", "/");
if(sizeof($values)==1)
{
$set[] = array_shift($values);
return makeSpecial($set);
}

foreach($values as $key=>$value)
{
$tmpValues = $values;
unset($tmpValues[$key]);
foreach($words as $word)
{
makeValue($tmpValues, array_merge($set, array($value, $word)));
}
}
}

function makeSpecial($set)
{
$size = sizeof($set);

if($size<=3 || !in_array("/", $set) && !in_array("*", $set))
{
return makeResult($set);
}

for($len=3; $len<$size-1; $len+=2)
{
for($start=0; $start<$size-1; $start+=2)
{
if(!($set[$start-1]=="*" || $set[$start-1]=="/" || $set[$start+$len]=="*" || $set[$start+$len]=="/"))
continue;
$subSet = array_slice($set, $start, $len);
if(!in_array("+", $subSet) && !in_array("-", $subSet))
continue;
$tmpSet = $set;
array_splice($tmpSet, $start, $len-1);
$tmpSet[$start] = "(".implode("", $subSet).")";
makeSpecial($tmpSet);
}
}
}

function makeResult($set)
{
global $result, $list;
$str = implode("", $set);
@eval("\$num=$str;");
if($num==$result && !in_array($str, $list))
$list[] = $str;
}

?>
<center>
<form action="" method="post">
<p><label>请输入四个数字,空格分割:<br /><input type="text" name="num" /></label></p>
<p><input type="submit" name="submit" value="提交" /></p>
</form>
</center>
</body>
</html>

作死的长城宽带

具体看图,顺便奉劝一下各位最好不要用长宽了
Screenshot_2014-01-17-00-05-20
Screenshot_2014-01-17-01-36-45
Screenshot_2014-01-16-23-57-59
Screenshot_2014-01-17-01-41-15
Screenshot_2014-01-16-23-59-45
终于等到回复了,结果居然叫我改 DNS,问他们自动获取到的是不是有问题,却避而不谈。难道改个 DNS 就能解决问题?难道自动获取到的不是长宽自己的 DNS?
Screenshot_2014-01-17-10-53-31

附百度到的几个同样投诉长城宽带劫持网页的证据(如果现在不存在这些问题了,那就证明长城宽带取消了对这些网站的劫持,但是证据依旧存在):
360导航被hao123劫持!锁定主页与组策略禁改主页也不管用!
如何彻底屏蔽长城宽带HTTP劫持?

Linux VPS上使用kingate搭建socks代理服务器

kingate是一位国人开发的代理服务器,支持http,socks,ftp等多种协议。支持多线程、tcp端口映射、规则控制、时间控制、用户认证、http管理等功能。

kingate官网:http://sourceforge.net/projects/kingate/

安装所需的依赖包
Debian:

1
apt-get install build-essential automake make gcc g++

CentOS:

1
yum install make automake gcc gcc-c++ gcc-g77

安装kingate

1
2
3
4
5
wget http://softlayer.dl.sourceforge.net/project/kingate/kingate/2.0/kingate-2.0.tar.gz
tar xzf kingate-2.0.tar.gz
cd kingate-2.0/
./configure --prefix=/usr/local/kingate
make && make install

配置kingate
修改/usr/local/kingate/etc/kingate.conf 为以下内容:

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
http off
ftp off
pop3 off
smtp off
telnet off
socks on
mms off
rtsp off
manage on
max 2000
max_per_ip 0
min_free_thread 3
http_port 8082
http_accelerate off
x_forwarded_for on
http_time_out 30
ftp_port 2121
ftp_time_out 300
pop3_port 1100
pop3_time_out 300
smtp_port 2525
smtp_time_out 300
telnet_port 2323
telnet_time_out 300
socks_port 20120
socks_time_out 300
socks5_user off
mms_port 1755
mms_time_out 300
rtsp_port 5540
rtsp_time_out 300
manage_port 8822
manage_time_out 300
log_model user
log_level 0
log_rotate {0 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * * }
log_close_msg on
mem_min_cache 50m
mem_max_cache 12m
disk_min_cache 20m
disk_max_cache 30m
use_disk_cache off
refresh never
refresh_time 300
user_time_out 0
mem_cache 50m
disk_cache 100m
max_deny_per_ip 0
max_queue_thread 15
min_limit_speed_size 1m
limit_speed 20k
max_request 50
total_seconds 10
bind_addr
run_user
insert_via off

以上配置中,socks on 表示启用socks代理(也可以根据你自己的需求开启其他类型的代理),socks_port 20120 表示socks代理的端口。manage on 为启用http管理,manage_port 8822 为http管理的端口。强烈建议修改端口号!

kingate启动及管理
下载启动脚本及添加权限

1
2
3
wget http://soft.vpser.net/proxy/kingate/kingate.init.d
mv kingate.init.d /etc/init.d/kingate
chmod +x /etc/init.d/kingate

kingate管理
启动kingate:

1
/etc/init.d/kingate start

关闭kingate:

1
/etc/init.d/kingate stop

重启kingate:

1
/etc/init.d/kingate restart

http管理
管理地址:http://ip:8822 ,如果修改过配置,8822端口修改为你设置的端口号,默认用户名为root,密码为kingate。

加入开机启动
Debian执行:

1
update-rc.d -f kingate defaults

CentOS执行:

1
chkconfig --level 345 kingate on

客户端设置
这里以dropbox为例:
dropbox-poxies

转载自:http://www.vpser.net/build/linux-vps-use-kingate-install-proxy-server.html