豪翔天下

Change My World by Program

0%

安装

服务端安装

**CentOS**,需要注意的是,完全不需要搭配apache,因为SVN可以自己有一个tcp进程的,通过svnserve -d -r=/路径来启动,默认监听端口为3690

客户端安装

1
brew install svn

常用命令

服务端

1
2
3
4
5
6
7
svnadmin create 仓库名 # 新建仓库,该命令会在当前目录创建一个与仓库名同名的文件夹,文件夹下包含该库的所有信息,在`conf`目录下,passwd表示用户名和密码,格式为用户名=密码  
然后修改`svnserve.conf`,把下面几行的注释去掉:
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
realm = svnhome(注意)

客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
svn status	# 查看当前目录下的改动信息
svn info # 查看当前的版本信息
svn diff # 对比当前目录下的更改
svn revert file # 放弃某个文件的更改
svn revert -R ./ # 放弃本地所有的更改

svn list URL # 列出分支和tag
svn checkout URL
svn add file # 把未跟踪的文件添加进来
svn commit file1 file2 -m "commit comment" # 直接提交文件

svn update # 更新svn仓库,相当于git pull
svn log -l 10 # 列出最近10条提交记录

post-commit hook配置

1
2
3
4
5
编辑仓库配置文件里面的hook,内容如下:
REPOS="$1"
REV="$2"s

cd /var/www/directory && /usr/bin/svn update --username user --password pass

Python可以使用redis模块直接操作Redis数据库

PyPI文档:https://pypi.python.org/pypi/redis/2.10.3

可直接使用pip进行安装。

redis-py使用两个类来完成Redis的操作。

redis-py使用一个连接池来管理Redis server。每个Redis实例都默认会创建自己的连接池。

基本使用

import redis
# 数据库的连接
r = redis.StrictRedis(host='localhost', port=6379, db=0)
r.set('foo', 'bar')   # 添加一条记录
r.get('foo')          # 获取某字段的值

如果是使用连接池创建的,那么可以直接从连接池获取对象实例:

pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
r = redis.Redis(connection_pool=pool)

Pipelines

Pipelines是redis的一个子类,用于同时提交多条命令(批量执行),依次减少TCP请求,提高性能。常见使用方法:

r = redis.Redis(......)
pipe = r.pipeline()




# 这样下面的redis命令都会先被缓冲




pipe.set('foo', 'bar')
pipe.get('bing')




# 下面的命令会提交所有的命令到服务器




pipe.execute()




# 十分高级的魔术方法:




pipe.set('foo', 'bar').sadd('faz', 'baz').incr('auto_number').exectue()

Python官方文档都说自己解析XML的方式存在漏洞了,那我也只能用他推荐的了。

这里我使用的BeautifulSoup,因为其中文文档十分完整清晰,而且相比于defusedxml,它不仅可以解析XML还可以解析HTML,非常方便。文档地址

另外,如果是简单的网页解析任务,可以直接将获取到的网页进行正则表达式匹配也可以达到效果,只是可能会出现各种编码各种错误问题。

更新: 现在requests开发者新建了一个项目叫做requests-html,目的是提供比BeautifulSoup更好的性能和更好用的API。

Installation

1
2
3
4
5
6
# 直接apt安装
$ sudo apt-get install Python3-bs4 # 这将安装下面两个包

# pip方式安装
$ pip3 install beautifulsoup4 # 这样直接安装或者下载源码进行安装
$ pip3 install lxml # 如果是解析xml必须安装一个解析器,文档里说的那个解析器只有这个好安装点,需要提前安装好依赖,apt-get install libxml2-dev, libxslt1-dev, python-dev,还可以使用html.parser这个解析器,这个解析器不会自动添加body元素,CentOS用yum -y install python-devel gcc libxml2 libxml2-devel libxslt libxslt-devel
阅读全文 »

参考文章:https://phphub.org/topics/607 (以下内容基本上都摘自该文章)

IoC这个主题我已经收藏了很久了,直到今天才有空深入地理解了一遍Laravel的IoC模式。

前几天在使用LeanCloud的Python SDK,我就在想,每次连接LeanCloud的存储服务都需要先创建一个连接,如果要执行其它的操作,那又得新建那
个连接了。IoC就是为了解决每次都重复连接的一种编码模式,通过依赖注入减少耦合。

上面引用的参考文章里已经注明了为什么我们在这种情况下一定要使用依赖注入,这里我就只记录下到底该如何使用该模式。

Laravel的依赖注入是使用的“容器”这个概念,是一种全局注册表,使用容器的依赖注入作为一种桥梁来解决依赖可以使我们的代码耦合度耕地,很好的降低了组件的复
杂性。示例代码如下:

<?php




class SomeComponent\{      # 组件
    protected $_di;      # 一个私有变量





public function __construct($di)\{
    $this-&gt;_di = $di;
\}

public function someDbTask()\{
    // 通过get获取connection service总是返回一个新的连接
    $connection = $this-&gt;_di-&gt;get('db');
\}

public function someOtherDbTask()\{
    // 和上面不同,这里获取的是共享的连接
    $connection = $this-&gt;_di-&gt;getShared('db');

    //This method also requires a input filtering service
    $filter = $this-&gt;_db-&gt;get('filter');
\}

}

$di = new Phalcon\DI(); // 创建一个容器

// 在容器中注册一个名为’db’的服务,用于连接数据库,并返回该连接 $di->set(‘db’, function(){ return new
Connection(array( “host” => “localhost”, “username” => “root”, “password” =>
“secret”, “dbname” => “invo” )); });

// 在容器中注册一个名为’filter’的服务 $di->set(‘filter’, function(){ return new Filter();
});

// 在容器中注册一个名为’session’的服务 $di->set(‘session’, function(){ return new
Session(); });

// 将容器作为一个参数传递到构造函数中去 $some = new SomeComponent($di);

$some->someTask();

现在,该组件只有访问某种service的时候才需要它,如果它不需要,它甚至不会被初始化,以节约资源。Phalcon\DI是一个实现了服务的依赖注入功能的组件
,它本身就是一个容器。由于Phalcon高度解耦,Phalcon\DI是框架用来集成其他组件的必不可少的部分,开发人员也可以使用这个组件依赖注入和管理应用程
序中不同类文件的实例。

在容器中注册服务,框架本身或开发人员都可以注册服务。当一个组件A要求调用组件B(或它的类的一个实例),可以从容器中请求调用组件B,而不是创建组件B的一个实例

注入方法

服务可以通过以下几种方式注入到容器:

<?php




// 首先要创建一个依赖注入容器
$di = new Phalcon\\DI();




// 通过类名注入
$di->set("request", 'Phalcon\\Http\\Request');




// 通过匿名函数注入Using an anonymous function, the instance will lazy loaded
$di->set("request", function()\{
    return new Phalcon\\Http\\Request();
\});




// 直接用一个实例来注入
$di->set("request", new Phalcon\\Http\\Request());




// 通过数组来注入
$di->set("request", array(
    "className" => 'Phalcon\\Http\\Request',
    "parameters" => array(
            parameter" => array(
                "host" => "localhost",
            )
        )
    )
));

在容器中,通过数组,字符串等方式存储的服务都将被延迟加载,即只有在请求对象的时候才被初始化。

从容器获得服务:

<?php $request = $di->get("request");
//或者使用魔术方法
$request = $di->getRequest();

其它相关文章:

[PHP程序员如何理解IoC/DI](http://segmentfault.com/a/1190000002411255 “Link:

http://segmentfault.com/a/1190000002411255" )

之前在Github的学生计划中获得的$100 Digitalocean支付券放在那里没怎么用,由于今天碰巧登录不上1024,于是想到直接通过自己的vps来做
反向代理试试(之所以不用shadowsocks,是因为我在DO上搭建的shadowsocks一直都很慢,慢得我无法原谅。。。)

好了,这里说一下ubuntu server上通过nginx反向代理http网站的过程:

首先是一条命令安装nginxsudo apt-get install nginx

然后直接修改nginx的server配置文件_/etc/nginx/sites-enabled/default_,修改为如下:

server \{
        listen 100;  # 指定端口地址
        server_name localhost;





    access_log /var/log/nginx/access_100.log
    error_log /var/log/nginx/error_100.log;
    location / \{
            sub_filter haofly.net localhost;
            proxy_pass http://haofly.net;
            proxy_redirect http://haofly.net  /;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Referer http://$host;
    \}

}

如果有多个就写多个server,之后就可以使用服务器的IP+端口访问haofly.net网站了。

反向代理的速度和直接访问院网站的速度几乎一样,所以我想到了其它的用途,比如Ubuntu的官方镜像源的代理等。

听了很久这本书的传说,上个月终于买来读完了。读完后,我又产生了一个很大的问题:他们真的是疯子吗?还是,我们才是疯子?到底谁对谁错?他们中是不是有人并不是疯子?

好吧,以前一直以为这本书是讲天才是怎么样的,买来后刊封面,我操,“国内第一本精神病人访谈手记”,原来作者是花了那么长的时间去采访,让我们了解到疯子抑或是天才真正的内心世界。

我也曾有一位亲人不知道什么原因,后来被送去精神病院了(现在又出来了)。当时他患病的时候,看他那眼神,仿佛一直在思考什么,但是我那时候很怕,大人们更是不会去跟一个精神病患者讲太多的话。要是现在,我肯定会视图去了解他,而不是站在一旁远离他。

哲学、文学、天文地理,他们好像比真的天才更天才。这本书,让我重新开始审视身边那些与众人想法不同的人(当然,我认为我也是这样的人),开始偶尔去深入他们的内心世界。曾经的我以为只有我是有梦想、有追求的人,但到了大三,看了很多人,发现,每个人都有这样的想法,更多的人其实都在走自己的路,并不是每个人都在阿谀奉承、追名逐利。这本书教会了我用心去观察周围的人和事。

很多人觉得这本书很假,但是无论是否有虚构的部分,这本书都很真。

经典语录:

也许人就是这么讨厌的动物吧?想尽办法想知道结果,但是从来不想是否能承受这个结果

想看到真正的世界,就要用天的眼睛去看天,用云的眼睛去看云,用风的眼睛去看风,用花草树木的眼睛去看花草树木,用石头的眼睛去看石头,用大海的眼睛去看大海,用动物的眼睛去看动物,用人的眼睛去看人。

习惯只是接口,而不是理由

其实最先写这篇读后感我是拒绝的,因为关于健康的书看多了,感觉都差不多,但当我回过头来翻看的时候,发现这本书有很多的观点都是需要深深体会的。

作者Joe Kutner本就是一位运动员和健身教练出身的程序员,所以对程序员的健康问题有深入的了解,也在这方面进行了大量的实践和研究,最后以程序员的思维来写作这本书。所以在图灵教育上,这本书也是挺火的。

饮食

书中引用马克吐温的话:“保持身体健康的唯一办法,就是吃点你不想吃的,喝点你不想喝的,以及做点你不愿做的事情。”

相信很多人都和我一样,小时候很多东西不愿意吃就坚决不吃,挑食,只吃自己爱吃的,由于我父母在教育方式上存在一些瑕疵,只要我说不想吃的,基本上一次过后就再也不会做那些菜了,以致现在全家人的口味都差不多了,而且菜的种类都比较少。长大后偶尔会吃到以前讨厌的菜,虽然仍然有点儿难以下咽,但都知道了,那些东西吃了确实对自己身体比较好,然后妈妈就会问:你不是不喜欢吃这个吗,怎么现在要吃了。始终,父母是爱我们的,只是,在饮食上,前20年我们几乎不能自己做主,之后的生活一定要注意,我也喜欢尝尝不同的东西。

能让我们有饱腹感又不会产生多余能量的食物:蛋白质、全谷类食品。

运动

我的运动比较单调,我喜欢散步,喜欢慢跑,基本上每周会跑三四次,所以现在在运动上我到没有什么了,只是可能动作上有一些不符合规范,长期以往,对身体可能会造成伤害,所以需要研究一下这个。

硬件

办公桌、健身器材,我应该马上就能过上自己想要的生活(独立、经济自由),所以马上我就得为这些东西考虑了。

关于眼睛的保护,对于每天面对几个小时电脑的程序员来说,隐形眼睛完全不合适,防辐射眼睛,可能会有作用,购买没有过度炫光的显示器和减少显示屏色温(减少蓝色光)。

通过我上个月一下减10斤的经验,只有持之以恒,饮食规律,才是最好的减肥方式。

此书和刘同两年前的《谁的青春不迷茫》的风格不同,此书通过几十个身边的小人物来展现人生各个时期的孤独,以独有的价值观去从普通人不一样的角度看问题。或许是我刚开始谈恋爱,所以感觉突然忘了以前的那种孤独感,即使是有朋友也会有一个人的孤独。以前我一直想,要看自己是不是一个孤独的人,就要看自己一个人行走在安静或嘈杂的环境下能否进入自己的内心而不被外界干扰。

现在玩儿的最好的一堆朋友就是初中的那群朋友,大概有十个左右,我们每年过年都会聚餐,不只一次,如果可以,寒假每天都会一起上街吃烧烤,这样的日子每年都会有,我到不担心会失去,因为家乡那个小镇,逛过去逛过来都是这几个朋友。初识孤独的感觉大概是从高中开始,和初中朋友分开过后,我独自一人跑到隔壁县去上学,每个月只能和他们见一次,我高中的时候最喜欢一个人跑到公园的池边看往来的人群,那时候的孤独,不是没朋友,而是,能说心里话的人都不在身边。那时候很流行一句话:“越长大越孤单”。是啊,我们渐渐长大,很多朋友都因为空间的隔离而渐行渐远,曾经的朋友会因为各自新的朋友的不同而渐渐产生隔阂,虽然朋友一生一起走,那些日子不再有,但一声朋友,就绝对是一辈子的事。

今年大三,暑假就开始实习了,这是迈向未来生活重要的一步,也是以后生活的开端。一直都很憧憬,以后所有朋友都在身边的场景,正如本书所说:“在一个毫无生机的城市里,有一群朋友最大的好处就是,随时随地能够为任何一个理由团聚庆功、畅想未来。”那样的感觉肯定很好,和他们在夜市里唱歌,遥想未来,每个月拿着微薄的工资也能每天开开心心快快乐乐的,那绝对是人生最美好的时光。

其实我现在还处于“为赋新词强说愁”的状态,呵呵,人生,很精彩,未来很美好,尽力成为我能成为的人吧。很庆幸,二十几岁了,我还在为梦想奋斗。

经典语录:

也许能力不够,所以至今不能真正满足自己内心的愿望。也许足够幼稚,所以至今仍会用这一招骗骗自己。

还记得十年前那个期待见识这个世界的少年吗?你还认得出这是你十年后想成为的那个风尘仆仆的大叔吗?

当初你不愿听的歌,总有一天会为一个人而听。当初你不愿品尝的食物,总有一天会为一个人去品尝。对于你,也一定会有一个人愿意陪你看你想看的电影,去所有你想去的地方,看所有你写过的日记。你不爱人,人不爱你,不是报应,只是时间问题。

我们没有成为我们曾以为的,我们成为了我们能成为的。

在一个毫无生机的城市里,有一群朋友最大的好处就是,随时随地能够为任何一个理由团聚庆功、畅想未来。

所有因为某人而让自己生气的事情,一定要说出来。不说的话,自己越想就越生气。说出来之后,自己踏实了,对方就会变得不踏实。如果心里因人不爽,最好的办法就是说出来告诉对方。一来自己不会再纠结,二来可以让对方纠结,三来如果对方并不因此纠结,就证明对方压根儿不在意你,那你又何必要为不在意你的人影响自己的心情。有话就说的人不是直肠子,而是不会让自己辛苦的透明人。

一个男人的帅来自于他的性格,一个男人的魅力来自于他的自知,一个男人的强大来自于他对自己的苟刻。

你的过去我来不及参与,你的未来我奉陪到底。

你以为做的一切都是为了身边最亲近的人,后来你才知道最亲近的人最需要你做的只是你在身边。

大多数人不会在同一个地方工作一辈子,大多数人也不会在同一个岗位做一辈子,我们所有的累积都是为了给人生最后的那个位置打一个稳定的根基,所以每个获取经验的机会都显得尤为重要。如果所有人工作时间都一样,工作质量拼的就是纯粹的智商和情商,你看了看自己在镜子中的样子——完全没有任何一点男一号的气质啊,不在后天努力,就只能成为这出人生剧中的路人甲乙丙丁了。

这本书是我最好的一个朋友给我推荐的,在我们眼里他一直是哲学家。

之前以为,像这种书名顶多就会像某些心灵鸡汤一样,叫我们该怎么做,不该怎么做。但刚看到第一章“没有任何向导”的时候,我就震惊了,当时就意识到,这绝对是一本不可多得的好书。绝对只有到达某种境界的人才能看懂。当完全拜读完此书后我真的懵了,我不知道该怎么形容他了,好多好多,我根本看不懂,不是像看技术书籍那种看不懂,而是你一想书中蕴涵的哲理的时候你就感觉头脑发热,完全是一种“懵”的状态。

此书原名叫“Freedom From the Known”,当时看到这种翻译也是想了很久,后来发现,结合书中的内容,确实,翻译为“重新认识你自己”或许能更让人理解。它一步一步地让你从你的世界观中挣脱,获得自由,获得新生。对于我这样一个还在象牙塔里的少年郎来说,连世界都没有观过,哪儿来的世界观呢。我知道的还太少,我的人生经历还太少,所以我认为,这本书我还不适合看。

人生有三种境界,看山是山,看山不是山,看山还是山。我肯定还属于第一种。

再看王国维的人生三境界:

昨夜西风凋碧树。独上高楼,望尽天涯路。
衣带渐宽终不悔,为伊消得人憔悴。
众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。
这样看来,我还是在第一境界里游走。

总之,等等吧,等我有足够阅历了再回头看这本书,到那时,肯定会有不一样的理解。那时的我肯定是一个不一样的我。当然,我首先得认识我自己,当然不是一点一点累积与自己有关的知识,去学习那些能够让我更深刻认识自己的工具。

语录:

多少世纪以来,我们被我们的老师、尊长、书本和圣人用汤匙喂大。我们总是说:“请告诉我,那高原、深山及大地的背后是什么?”我们总是满足于他人的描绘,这表示我们其实是活在别人的言论中,活得既肤浅又空虚,因此我们充其量只是“二手货”人类。我们活在别人口中的世界,不是受制于自己的个性和倾向,便是受制于外在的情况和环境,因此我们只是环境的产物,我们不再新鲜,我们从没有为自己发现过什么东西,我们的心中没有什么东西是原创的、清新的和明澈的。

认识自己便是智慧的开端

如果你说你要慢慢地学习认识自己,一点一滴地累积,这表示你并不在认识目前的你,你只是在累积有关自己的知识罢了。

你必须由衷地想去了解一件事物,才会付出全部的心力去觉察它。

所谓“活在当下”,就是在刹那间领会其中的美及喜悦,而不是眷恋它所带来的快感。

凡是不断追逐快感的心,无可避免终将面对它的阴影及痛苦。

该为恐惧负责的就是念头,道理就是这么简单呐,你不妨亲自观察一下。当你正在专心应付某种危机时,你并没有恐惧,等到念头一起,恐惧才由心生。

你一旦认清自己就是恐惧,和恐惧无二无别,自然会停止所有的斗争,然后恐惧就会完全止息下来。

只有停止比较,才能使自性呈现,能够活在自性中,才能有真正的平安。

自由乃是一种心智状态,它不是从某种东西挣脱的自由,而是一种自由的意识,一种可以怀疑和追问一切的自由,它强烈、活跃而富有生气,因此能清除各式各样的依赖、奴役、臣服及逆来顺受的阴影。

随心所欲而不逾矩

如果你只裴阳你的孩子适应社会,那就是在训练他们如何斗争,那么他们就会被社会摘个。如果你真的爱你的孩子,怎么还会鼓励他们加入这场人间的苦战?

真正好好看过日出、日落或湖面月色的人寥寥无几

观念永远属于过去,而行动却属于现在,生活也是属于现在的。

念头跑来跑去并不是问题,让自己觉察每个念头的动向,才是关键所在。

说说本书

这本书可以说是每一个互联网爱好者的必读书籍,尤其是那些想在互联网界大显身手的人。这不是单纯的心灵鸡汤,而是一本史书,一本不仅仅陈述基本事实,还道出几十年来腥风血雨中的不变规律。它给了你一个直观的感受,让你仿佛身临其境,短短几天就体会到互联网诞生至今的那些潮起潮落,而是否能踏上下一波浪潮,还得看你自己的造化。

《浪潮之巅》点燃了很多人创业的灵感,也点燃了我奋斗的激情,每次看到这种关于互联网的鸿篇巨著,我就庆幸自己当初选择了这个行业,并热爱上这个行业。在互联网,要踏上浪潮之巅,很容易,也很不容易,这本书同样也削减了一些人的锐气,互联网的路上,一不小心,便会永世不得超生,它每天都在千变万化,我们要更加脚踏实地。

或许,正如书中所说,不是时势造英雄,恰好是英雄创造了时势。

据作者吴军介绍,这本书很多都是当年发表在谷歌黑板报上的文章,我之前没看过,但我知道,也只有吴军这样的经历才能站在那样的高度审时度势,酿造这本史诗。(另外,有不少读者说此书存在许多细节错误,这些东西我觉得没必要去计较,毕竟,我们不是学历史…)

说说互联网公司

这本书有上下两册,上册主要讲互联网大公司的兴衰,下册则主要讲互联网的本质。从AT&T、IBM、摩托罗拉、Google、Apple这些大牌公司中发现,一个企业能有发展,基因是决定性作用。我也曾一直在观察着,比如Google,我也一直找不到一个准确的词语来形容我的发现,后来发现了“基因”这个词,我才恍然顿悟,这不就是企业基因吗?它伴随着企业诞生,也是企业能否踏上浪潮之巅的关键所在。

我想,我以后所在的公司,不看它有多壮大,而更看它是否适合我,是否是我想要的公司。(这句话并不代表我有多大的选择的余地,只是,这种公司肯定会有很多的)

说说我最喜欢的Google

我接触互联网比较晚,没有见证谷歌飞速发展的年代,我刚开始使用谷歌的时候,就正好碰上它离开某国的时候,作为一个愤青,自然对它多了一份喜爱。

我看互联网公司,主要是看该公司的所作所为。Don’t be evil!这是谷歌的格言,我想,谷歌或许还是做过一些对不起用户的事的,但是它依然在做着很多好事,这才是真正以用户为中心的公司,踏上浪潮之巅也是自然而然的事情了。国内的一些公司也一样,七牛、Segmentfault等新兴的互联网公司也是深受大众的喜爱。

自由、开放、分享,永远都是互联网的代名词

语录

任何梦想家都不足以成事,因为所有的成功者都是实干家

虽然说条条道路通罗马,但是成为罗马帝国的路只有一条,就看谁能找对了。