网络寻租

Programmer, Gamer, Hacker

Mysql简单的备份策略

| Comments

策略很简单, 就是每天登录到服务器上面, mysqldump下来数据, 压缩, round-robin存放到本地即可(简单的根据星期几来保存).

备份方法

执行备份脚本: backup.sh (本项目根目录文件) 然后会按照星期做round-robin备份. 文件名是备份的星期几.

修改了/etc/crontab, 添加每天早晨3:00执行备份:

0 3 * * * user cd \~/backup && bash backup.sh

backup.sh

1
2
3
4
#!/bin/sh
ssh user@site.com "mysqldump -u root -p xxx | gzip > backup.gz"
echo "get backup.gz" | sftp user@site.com
mv backup.gz `date +%a`.gz

恢复方法

不管如何, 需要保存旧的数据库资料. mysqldump.

然后再用mysqlimport恢复即可.

Mongodb访问权限设置

| Comments

这里整理一下设置mongodb访问权限的资料.

我们有通用的方法, 用iptable严格限制访问ip, 以及mongodb自带的密码验证(key验证等有需求的时候再研究)

iptable限制访问资源

服务器完全开放mongodb, 通过iptables来限制访问.

修改/etc/mongo.conf, host为0.0.0.0, 允许外部访问.

设置规则:

1
2
sudo iptables -I INPUT 1 -p tcp --dport 27017 -s 允许的外部IP -j ACCEPT
iptables -A INPUT -p tcp --dport 27017 -j DROP

设置完毕后, 安装iptables-persistent 保证重启后iptables还是有效.

mongodb权限管理

有的时候还是需要限制权限, 方法整理如下:

在服务器本地执行 mongo

1
2
use crawler_db
db.addUser('admin','admin')

然后修改/etc/mongo.conf, 设置 auth = true 需要重启mongo

连接上的时候, 需要db auth一下:

1
$db.authenticate('admin', 'admin')

关于理解

| Comments

以前我看维特根斯坦的书<语言游戏>, 我印象很深的一个概念就是(非原文): 词语的含义不是字面上的意思, 而是要看它的用法. 词语本身的产生是有历史条件的, 字面上的含义可能蕴涵有非常复杂的历史成因, 但是普通人不是历史学家, 我们使用一个词语不是因为我们理解了这个词语的意思才去用它, 很多时候, 只是因为听到别人在某些场合针对某种状况下面使用这个词语, 我们才学会它. 简单地说, 我们是通过模仿学习语言, 而不是通过理解词语的含义. (单独背单词的人可以退散了)

让我们把这个概念扩展开来一下, 应用到其他领域. 来看看法律. 很多人理解法律只是按照法典字面上的意思来, 而不去注重实际的使用, 而在很多国家, 比如我们国家, 从字面上是很难理解得到实际法律执行和运作的方式的, 如何解释法律, 不同地区的执行状况, 执法过程, 非成文规则, 这些内容都比法典本身复杂, 灵活, 有生命, 甚至可以在善于表达的专业人士口中变得妙趣横生.

我们也可以把这个概念应用在生活中. 一个人的知识背景和思考方式形成了语言的具体内容, 但是要考察其他方面, 就不太能相信言语, 因为言语不是这样产生的… 我们不能因为一个人说要怎么样就认为他会怎么样, 我们只能知道言语产生的条件: 他在什么样的刺激下, 因为哪些知识背景和阅历产生出来了这样的言语. 举个实际的例子, 如果一个人突然说”我要死啦”, 并不是说他自己真的要死了, 而是因为他搞砸了什么事情, 然后他自己平时也咋咋呼呼的. 这个时候, 我们不能根据字面上的意思而做反应”要死早死”, 因为言语的字面意思不能反映实际他需要表达的内容. 我们一般会问一下”怎么了? 被炒鱿鱼啦?”

我们可以应用到学习上面. 进入一个新领域之前, 我们可能会被这个领域的无数新词汇, 新概念弄晕, 它们字面上面的意思和实际的使用方式往往不对应, 实际的做事方式和文档资料里面的也有很大出入. 这个时候, 我们可以通过模仿: 找一个该领域专家, 学习他的思考方式做事方式, 让自己同化成他的样子, 我觉得这样才是最快速有效的学习方法.

当你观察事物的角度从显式的含义转换到真实运作方式的时候, 你会发现你开始理解了很多以前不理解的事物. 你会感觉世间万物都在流动, 它们不是死的东西, 它们都在时刻调整, 变化, 你不好通过表象来定义它们, 你需要感觉, 深入, 理解, 运用. 这样无数丰富的世界会在你面前敞开大门.

仪式

| Comments

image

为了能够贯彻自己的理念和思维, 我们需要找到一种方式能够让知识转化为行为方式, 以及时刻调整自己的生存状态. 因此, 我打算遵循一套仪式, 来保证我能够贯彻决定以及提供精神动力.

这套仪式需要达成的具体目标和过程如下:

早晨重置

每天早晨要经过一套仪式来重置自己的精神状态, 查漏补缺, 和回复遗忘的行为模式. 同时从上至下制定一天的事宜.

具体过程

  • 念祷词

    “人的生命只有一次, 死亡之后是虚无, 享乐是奖励, 重要的是把脑中理念带入现实. 什么理念:”

    “世界应该是这样的: 自由, 责任对等义务, 丰富多彩, 人们解决问题, 创造新事物, 享受生活.”

    “我的目标是实现这样的世界, 为此我需要坚定目标, 正视恐惧, 远离诱惑, 敏于行, 勤修炼, 实现我的价值.”

  • 整理一天要做的事情

  • 回顾需要坚持的习惯

    • 远离sns.
    • 做事先计划
    • 阶段性停止和分析当前做的事情.
    • 以及其他需要养成的习惯.

晚上重置

每天晚上睡觉前, 需要整理一天实现的事宜, 以及采用分析模型来看缺陷, 找优点, 用来回馈调整行为模型.

  • 念悼词

    重念早祷词.

  • 回顾

    我今天浪费了哪些时间? 为什么而浪费? 我今天利用好了哪些时间? 为什么利用好了? 如何消除浪费? 如何重复好的利用方式?

  • 休息准备

    每日都是一个单独的生命过程. 早晨新生, 夜晚死去. 该到死去的时间了.

日常重置

当日常发现风险的时候, 需要默念祷词, 并利用通过默念祷词获得的精神力量处理风险.

主要风险以及应对祷词:

  • 失去控制

    无法控制自己正在做的事情. “光明三原则: 停止, 建立, 重复”

  • 遗忘目标

    忘记自己需要做什么了. “我要改变世界.”

  • 遇到难题

    面对一个难题无法解决. “把问题放到脑子里, 让潜意识帮助解决.”

如何学习计算机科学

| Comments

image

计算机领域学习路线图 里面, 我们知道了需要做的事情, 那么我们如何开始呢? 这里面是一个总的路线规划.

入门

首先, 我们需要学会编程, 以及对应的思考和解决问题的方式. 所以, 我们需要完成: 6.00 入门课.

这里需要重点提示一下: 公开课只是看看是不行的. 需要做的事情是: 按照公开课里面的calendar, 听课, 看书, 做习题. 安排好时间, 保证能够坚持下去. 如果个人的意志力不够, 可以找人帮忙督导. 这样才能确保学好里面的内容.

6.00学完后, 基本上能够用python写代码了. 这个时候, 2条线并行:

  • 学习基础. 按顺序学习: 6.002 计算机组成原理, 6.046J 算法基础, 6.828 操作系统, 6.035 编译原理, 这些是我们的基础知识. 可能你觉得枯燥, 但是这些课程学到的东西, 是基础. 它们决定你能走多远.
  • 开始项目. 我建议: 看6.171, 开始学习如何做一个网站. 在这个课程中学习使用linux系统, 学习web, 做网站. 当然, 其他类型的项目也可以, 不过需要学过了部分基础内容才能够写代码. 那个比较久了. 所以我建议从入门比较简单的web方面开始.

然后随着基础课程的推进, 不断根据基础课程做对应的项目.

  • 学到计算机组成原理, 就做后面的实验, 设计自己的CPU.
  • 学到算法, 就去优化常见的库程序.
  • 学到操作系统, 就去自己写一个操作系统的模块.
  • 学到编译原理, 就自己设计一个语言.

然后, 经过了这些过程, 你现在需要自己计划一个项目, 真正能够有用的项目, 然后投入精力完成它, 作为自己的毕业设计.

无题

| Comments

image

我是一个有一点点现象力的人, 从小的时候, 我就喜欢在上学的路上一边走路一边幻想: 自己是一艘飞船在一个非常大的星球表面飞翔. 前方的道路上一个个的障碍物都是巨大的建筑物, 或者敌方的武装工事, 然后我就躲开它们射出的子弹, 然后优雅地飞过, 丢下一颗炸弹, 然后听那后方传来的爆炸声, 如果边上有人看到我的话, 只看到一个学生跳来跳去的, 嘴巴里面发出不明其意的声音..

那时候, 我习惯挑战自己的走路速度, 上下学的时候就以非人的走程, 选择最近的道路, 有的时候甚至会赶上绕一点远路的自行车. 那个时候我单纯地以走路时间更少而快乐.

长大之后, 这些神奇的能力离我而去, 每天上下班走的是同样的道路, 只会感觉厌烦, 可能会不定时间换一条. 即使现在我没有以前那么奇特了, 但是我还是保留了不少特质, 能够让我从人群中凸显出来, 是我的好也是我的坏. 我庆幸过去没有杀害我的”病”, 让我获得了勋章一般的伤痕.

说道”病”, 我以前不是能够和同学们合得来, 可能是我特殊个性, 岁数, 或者其他什么原因, 我现在也无法考证, 总之我得到一个”癫子”的外号, 让我非常困扰. 更让我困扰的是合群. 直到现在我也没有很好地学会投入感情, 以及把握朋友关系.

大学前, 生活比较简单, 上学放学, 做作业打游戏. 矛盾是家长管教. 天资不错的我, 即使高考前, 都没有放弃天天打电脑游戏. 考试也算是进到一个好的学校. 但是大学暴露出我意志力薄弱的天性. 四年颓废生活. 面对毕业工作的恐惧, 很多次计划选择死亡. 宿舍就在11楼. 跳出窗口就可以了. 意志力薄弱又救了我.

我很奇怪我竟然能够找到工作. 工作之后, 情况好了很多, 即使是一份不太好的工作. 虽然酬劳说不过去, 至少我活下来了. 我尝试展开我的天性, 开始学会追逐自己喜欢的东西, 从最简单的开始. 特立独行让我没有从众的压力, 意志力薄弱让我做不出必要的决定和抵制不住诱惑.

不过, 最终我还是这样过下来了. 一天又一天. 生活轨迹往上. 我猜测未来的我成就有限, 但是谁又能知道未来呢? 说不定我能活到审判日, 见证新智慧的产生和旧智慧的消亡.

训练专题1_如何开始训练

| Comments

image

上次我们讨论了 如何改变一个人, 主要靠训练和洗脑. 那么从现在开始, 我整理一些训练的技术. 假设我们决定好了通过训练改变自己, 比如, 我们希望养成天天锻炼的习惯. 那么我们如何开始, 以及如何保证训练能够进行下去呢?

原先我们说过, 建立习惯需要考虑的3个方面: 前提, 过程, 结果. 我们分析一下:

前提

我们已经知道锻炼的必要性了, 并且愿意投入. 如果意愿不是特别强烈, 那么需要上网去搜索关于锻炼的文章, 把自己洗脑. 这方面我觉得大多数人能做到, 因为大家已经养成了上网看文章的习惯(不然怎么看到这里的).

过程

锻炼困难, 多是因为在过程上面得到了反向刺激: 我们记住了锻炼的痛苦, 下次开始之前, 痛苦出来干扰我们的决定. 在过程上面, 我们注意到, 锻炼强度本身不是特别重要, 而强度是带来痛苦的主要方式. 因此我们可以减少强度. 开始阶段过高强度的锻炼是大家放弃锻炼的主要原因.

在过程上面还有一个问题: 锻炼过于无聊(针对跑步的部分), 那么我们可以通过各种方式来提升锻炼的正反馈程度: 比如专门留自己喜欢的音乐在锻炼的时候听; 找妹子多的运动场所比如一些健身中心, 而不是中老年人常出没的公园; 边放电影边锻炼(一定要在锻炼结束的时候关闭, 不然正反馈会养成失败).

结果

锻炼结束后, 需要加上奖励, 以让整个过程得到巩固, 锻炼本身带来的精力提升可以是一部分, 在网络上发送”我今天锻炼了”让大家来鼓励自己也是一个方法(真的会有人过来鼓励一下吗?), 还可以计算自己的经验值模拟升级等等..

结论

如果能够实施上面的几个方面, 开始锻炼不成问题, 但是需要坚持下去的话, 这些还不够, 我们需要能够应对变化. 关于应对变化的部分, 我们下次再讨论.

如何改变一个人

| Comments

image

上一周和某位同学交流, 谈到如何帮助其他茫然的大学生. 我们讨论到很多, 结果发现真的发现没有什么太多好的办法. 基本上大家都是糊里糊涂地上了大学(或者说被大学上), 专业也是胡乱选的, 也不知道自己喜欢什么, 也没有什么直面社会的压力(暂时), 然后的话人就这样糊里糊涂地过完了大学, 然后出来也糊里糊涂地找个工作(如果能找到的话).

然后我们想到如何让同学们出来的时候能够走上工作岗位而不至于什么都干不了, 现在网络上面有公开课这种东西, 可以说学习资料到处都有. 但是资料也只是资料, 不去学也只是废料. 但是有谁会去学呢? 如果做宣讲, 励志之类的讲座, 大家也就听听罢了, 当时兴奋一下, 回来之后还是改干什么干什么.

我后来提到一个招数, 应该算是会有效果的吧. 就是训练. 强迫每天投入若干个小时在某个领域上面. 不要求能做到多好, 但是强迫进行这样的工作. 毕竟大家都是从小到大这样强迫上来的, 应该接收得了. 然后在强迫的过程中, 逐渐”洗脑”, 把一些先进不先进, 靠谱不靠谱的知识和方法论在强迫中内化到脑子里面, 然后改变行为方式.

我是一直认为, 只有训练才能改变一个人的. 看书, 可以增长知识, 但是知识只是信息, 要能够用起来才能带来价值. 而知识转化为行为的过程只有靠训练. 举个例子, 我今年开始学钢琴, 一首曲子刚开始怎么也弹不顺, 后来练习了好几十遍, 也就顺起来了. 这个是通过训练减少难度. 还有通过训练改变习惯的. 别的不说, 刷牙洗脸基本上是我们每个人都有的习惯吧. 大家可能想不起来以前是怎么开始的, 无非也就是家里人天天的强迫, 也就一天天这样下来最后养成了终身的习惯.

还有我们说的性格. 内向什么的都可以改. 比如坚持每次上地铁搭讪一个陌生人, 一开始可能话都说不顺, 后面越来越顺口了甚至不搭讪就不习惯了(是在说我自己吗).. 当然, 习惯的建立, 需要一个条件反射的过程, 训练之后有甜头才能建立, 不然过了很久都只能带来痛苦那么就算是条通过电击刺激产生反射的狗也会慢慢褪化掉这个习惯的.

很多时候, 自己是很难开展一个训练的, 因为我们还需要养成训练的习惯, 这又是一个鸡生蛋蛋生鸡的过程. 如果能有人帮助的话成功率会大大提高, 尤其是一个比较专业的训练者. 那些运动员哪个是没有一个教练帮忙指导的.

当然训练还不够, 我看书上写完成一件事需要 前提, 过程, 结果 这三个要素. 上面只是过程的保证, 前提和结果都没有保证到. 那么我们需要前提: 这个被训练的猴子要愿意被训练, 对于学生其实很简单, 洗脑就好了. 找点励志书什么的就可以了. 当然我们不是真的洗脑, 所以唐骏的书就不要给了. 给点改变世界的人的书, TED什么的, 或者自己也会被刺激到的书看看. 毕竟世界上又不缺打工皇帝.

还有结果. 基本上我们走正路的结果还是比较好的, 训练出来的人应该算靠谱, 出来打工干活应该是没有问题的. 这样算是带好了一个人吧(可能吧..)

上面也只是说说而已, 没有训练得到的结果, 也只是空谈. 我现在计划挤点时间带带有志在计算机领域发展的学生, 让他们至少能够出来找到工作. 如果想被训练和洗脑的话就gmail联系我吧… 我也在训练自己训练人..

Resque介绍和分析

| Comments

image

resque

resque是ruby on rails下面的一个异步工作分配框架, 它利用redis的队列功能, 来达到异步处理工作的目的. 好处在于使用简便以及很容易和rails整合.

项目地址在 https://github.com/defunkt/resque, 如何使用里面写的很清楚, 这里就不多说了. 具体逻辑也没有什么好说的, 无非是需要调用任务了, 塞任务到队列里面, 然后worker取队列, 然后把任务做掉.

一些细节:

resque是如何enque的?

1
redis.rpush "queue:#{queue}", encode(item)

presistance如何做?

1
encode: MultiJson.decode(object)

resque是如何取work的?

1
decode redis.lpop("queue:#{queue}")

resque-scheduler

resque-scheduler是基于resque的一个计划任务插件, 简单地说, 就是能够利用它来做一些定时和定时循环的任务. 项目主页: https://github.com/bvandenbos/resque-scheduler, 使用方法我也不多说了. 项目主页上都有.

resque-scheduler计划的队列如何处理?

1
2
3
4
5
6
7
# First add this item to the list for this timestamp
redis.rpush("delayed:#{timestamp.to_i}", encode(item))

# Now, add this timestamp to the zsets.  The score and the value are
# the same since we'll be querying by timestamp, and we don't have
# anything else to store.
redis.zadd :delayed_queue_schedule, timestamp.to_i, timestamp.to_i

竟然根据每个timestamp做了一个队列.. 计划任务都保存到一个sorted set里面.

scheduler如何检查是否有新的任务?

核心在于这段代码:

1
2
3
4
5
6
7
8
9
10
if timestamp = Resque.next_delayed_timestamp(at_time)
  enqueue_delayed_items_for_timestamp(timestamp)

resque_scheduler.rb:

def next_delayed_timestamp(at_time=nil)
  items = redis.zrangebyscore :delayed_queue_schedule, '-inf', (at_time || Time.now).to_i, :limit => [0, 1]
  timestamp = items.nil? ? nil : Array(items).first
  timestamp.to_i unless timestamp.nil?
end

enqueue_delayed_items_for_timestamp比较复杂, 就不贴了.

结论

基本上resque的逻辑很直观, 和想象中的一样. resque-scheduler就不一样了. 复杂很多.

我学习他们的示例代码放在: https://bitbucket.org/linjunhalida/code-example/src/tip/ruby/resque/

像对待金钱一样对待时间

| Comments

image

我们每个人都有24个小时, 不多也不少. 这些时间及其宝贵. 到底有多少时间被好好利用了? 我想, 除了少数人, 大家都会觉得应该很少吧. 比起这个来, 更为严重的状况是: 大家很大程度上已经习惯这样了. 很多时间消耗掉, 而自己却全无所觉.

回头想想, 某种程度而言, 时间像是金钱, 我们可以决定把时间/金钱投入在某个特定的事情上面, 我们可以用时间/金钱来交换我们想要的东西. 而时间甚至比金钱还要好: 我们每个人每天都能获得24小时的时间, 而钱却不能每天从头上掉下来!

对于金钱, 大多数人都会在花出去之前慎重考虑, 是否购买的东西是我真正想要的? 这个东西是否值我投入的钱? 是否有更经济的替代品? 我是不是在其他地方更需要钱? 但是, 我们却不会想对待金钱一样慎重对待时间. 如果有一天工作空闲下来了, 我们会怎么做? 大多数人恐怕就会想: 啊, 好不容易有空闲时间了, 休息会吧. 然后就上网, 聊天, 打豆豆, 时间就这样过去了.

那么既然时间和金钱一样有价值, 那么我们为什么就不能想处理金钱一样处理时间呢? 我们来尝试一下:

首先, 对于钱, 我们习惯进行计划. 有什么是我们需要获得的? 这些东西里面哪些重要? 哪些需要先买? 哪些可以等有钱的时候买? 是否有更好的替代品?

我们可以以同样的方式来对待时间. 我们需要把时间投入在什么事情上面? 这些事情哪些是重要的? 哪些是相对不重要的可以在有时间的时候去做? 如果真的好好计划, 时间就会剩下很多, 而不是随意消耗掉了.

那么我们如何对待这些多出来的时间呢? 对于多出来的金钱, 我们可以放到银行里面. 如果有个时间银行就好了, 有时间的时候就把时间存进去, 需要的时候就取出来.

但是我们每天只有24小时的时间, 想要更多获取不到, 不想要了也给不了. 怎么能够存到银行里面去? 不过呢, 我们可以把上面的步骤反过来, 达到同样的目的: 对于钱, 我们先有钱, 然后存起来, 然后考虑投入的项目就取出来花掉. 而对于时间, 先有需要投入的项目, 然后在找投入的时间. 多出来的时间, 可以投入到这些项目里面去. 和分期付款一样, 不过我们分期付的是时间而已.

时间是比金钱优质得多的资源, 如果我们把时间当作金钱一样慎重规划的话, 我们可以突然之间得到很多. 好好对待时间吧!