通过代理看外面世界

准备工具:
1. firefox + autoproxy插件
2. 国外的vps, 安装有ssh并且可以登陆
步骤:

1. 开启本地的ssh转发功能
$: ssh -i ruby.pem -D 127.0.0.1:8087 ec2-user@34.187.16.31

其中ruby.pem为登陆amazon的密钥, 
ec2-user@34.187.16.31是amazon主机上面的用户和ip
127.0.0.1:8087 是本机要监听转发的端口

将相应的信息替换, 如果不用密钥认证,则要输入密码

2.设置firefox请求本地监听的端口
在autoproxy新增一个代理,
IP: 127.0.0.1
端口: 8087
socket类型: socket5

默认代理选择这个。

3. 点autoproxy成绿色,访问http://ip138.com查看ip, 检查是否成功

Git的本地审查 | 动态生成对象 | YAML | 对象的圈

本地代码审查

到代码库的根目录: gitk . &

  • 可以查看所有分支所有的commit流
  • 可以查看diff,原文件内容或最新修改
  • 可以随意选中任意一个修改的文件,还可以按代码浏览

架构设计的一个原则 配置的项写在配置文件里面,而实际的数据保存在数据库里面。依靠开放封闭的原则,功能可以进行无限的扩展,只要把使用的功能存放在数据库中即可,可以依据类名实例出相应的行为对象。这是动态语言的一个好处,它的作用代码是可以动态生成的,是编译语言做不到的。


YAML YAML是在配置文件方面是替代xml的理想选择,可以用缩进表示无限层次的哈希表。


面向对象编程 其实可以想像成由内到外的圈子,由开放-封闭的原则构建,与函数的很大一点好处是,可以在对象的方法间共享数据,一个对象可以作为一个空间,这些空间独立。还有一点就是开放-封闭的原则,只需要知道新功能的类名,就可以直接调用来实现功能了。面向对象可以以可靠的方式进行无限扩展。

是民主? 还是应该专制?

民主与专制就是一对矛盾!

但它们是具有统一性的,可选择性与信任就是它们矛盾的统一体。西方的政治体制也是以这种方式为基础来实现的。

民主就是为了保证所有人的权利;

而专制就是做事的方式,做事时,专制是最高效的,而且有些事,专制是最高效的。例如苹果就不能由一堆人民主投票怎么做。它需要一个人对产品的理解,需要非凡的技术,并专制地引导所有人为之努力。

怎样才能不致使专制走向极端,这就需要保证所有人具有投票的能力。如果专制人不好,所有人可以拿手中的票,把它们给投下去。专制人必须由所有人给选出来,代表所有人的意志,无论是利益,还是精神方面。专制人是所有人所信任的。专制人必须带着所有人的信任上岗,这就可以使专制人的行为代表正确的方向走。因为人是不可靠的,如果人得到不到所有人的信任,就不应该上岗。就算上岗的偏离人的信任,周期性的选票可以把它们选下去,把负面影响最小化,保持社会正确的航向。

这样的制度可以保证上层社会代表所有人好的意志,向好的方向发展。这就是制度的好处。

设计的联想

由软件开发设计中,联想到设计一些好的产品。其实php也是支持动态编程的,就是说可以由函数和类都可以放到变量里面去。ruby调用方法用send,取得类用Object.const_get(var),并可依些进行实例化。这可以作为架构上设计使用。符合开放封闭的原则,按一定的模式去调用,功能的增加,只需要增加类就可以了,只要给出类名,直接调用就可以了。这就是动态语言的好处,可以在使用时,再生成程序代码,而那些类可以作为数据文件存放,只需要在使用时加载就可以了。这样,对程序功能的扩展是无限的,但并不会影响效能。

自动跟手动结合是做最好的产品的必需方式。最好的产品以及做一些做得最好,只能是人工的行为,人的思维是世界是最美的花朵。但人的控制与认识能力是有限的,从用木棒开始,人必须依靠工具才能拥有更大的创造力。工具是做一些事的前提条件,也让人类从烦杂的事中解决出来,让人拥有更强的认识与控制能力。这是人与人之间生产力最本质的差别。

向某初创公司投简历有感

目前中国互联网的大部分企业都是很目光短浅的,招的都是,必须要深刻理解某一方的技术细节,而且是马上可以干活那种,这就是最原始的压炸动机。一般的学习,肯定是学某一方面通用的技术,在实际遇到问题时,再去深入。只学一项技术是可以专得很深,但是风险是很大的,个人很难有独立性可言,一旦遇到风险,就完了。

现在就是大多都不愿意给机会让人成长,大多都只是想找到可以马上干活的,干完了,就踢掉。整个大环境就是很浮躁。公司要招到可以干活的人,是无可厚非,但只想捡到资源,就可以马上拼。未考虑人的资源,不同于物的资源,人的资源是需要成长的,需要时间与空间才能得到成长。大多小公司就只懂得快,而不懂得人的资源是怎么来的,它不同于物的资源。招聘,不仅仅是考查应骋者,更是对面试官的价值与能力的检验。大多只是想要技术细节方面有很细的认识,可以马上实现自己想法的人,这会错过很多人,也招不到合适的人,这是目光短浅的招聘。招聘把技术细节作为主要的考核,我想那那家的公司的成长性就很有限。这里面可以折射出内部架构的不合理,业务的不成熟,开发人员没有提意见的权重。

创业成功 = 人+时势
*只有时势,没有有能力的人(不仅仅是技术,更多是情商),做不成;
*人也不仅仅leader,而是全体创造性想法的总和;

Map & Reduce  与 消息队列形式的分发

Map & Reduce  是一种计算的模形
RabbitMQ是分配任务的的实现。

使用的方式是现实的问题,用map & reduce的计算模型去实现。写好怎么分配任务,怎么折分,写好map的函数,通过队列把任务分到很多map进程,写好reduce函数,把map的计算结果,折分出来,放到队列,队列再投放到reduce进程。这样方式,可以通过增加机器增加计算量,某种程度上对某些任务的分布式计算。

这里面实现的很多细节都是需要自己去定义的。

这样就可以专注于功能的开发,对计算量大的,可以以服务的形式独立出去。再写成分布式计算。

这是对架构具有关键性的一步,如果没有它,就意味着架构没法成长。后面,流量大了,可以增加机器很简单就可以解决问题。至此,再也不用担心架构超级大型的系统了,就是说,随着流量的增加,我的系统是可能过增加机器来增加算力,而且可以接近无法的扩展。

用rabbitMQ的一个很大好处,可以不局限用一种语言,我可以用任何语言来实现复杂的服务,但是还是具有可扩展性的,因为只要增加机器就可以进行扩展了,完全可以用原来的代码。

可以做出很复杂的应用,当一些服务很稳定,流量很大时,就可以独立开来,用分布式计算来实现。

设计时,以计算适应需求的变化

很是喜欢php里面的多维数组,可以用多维数组模拟现实的一切,从而可以进行计算。

数组是就是哈希表,哈希算法是很强大的东西,是对现实大量数据可以计算的关键算法,它的效率是很高的。

不仅仅是一个数组,一个数组里面的值可以作为另一个数组里面的键。元与值,可以根据应用,去描述与计算一切。

数据库里面的in操作也是哈希算法的,它的效率很高,而且效能也是表容的加和,而不是乘积。这是设计表时,考虑的一个方向

数据库in没法取得in表里面的字段,但是可以通过全部查出来作为数组,并通过关联的主键map到一块,这样处理的效能是很高的,而且对内容是很是具有可扩展性。

这是数组存储的多个维度,以适扩展的需要,完全可以用content type去扩展表,至于优化性能查询是很简单的事,在数据库层面存储多个维度,可以在php的计算层面很简单地缩减为一个维度。这是解决性能与扩展性矛盾的一个关键。

在drupal查询时,内容类型子表以node中的vid为主键。上百万的数据可以在秒内的时间完成。所以动态计算以适应需求完全是行得通的。

git与svn结合使用,遇到冲突怎么办

1. 新建一个工作分支,在工作分支上干活

master分支,主要用于代码的提交和更新。
如果在master上工作,就不会更新代码了,这是不能接受的。

2.在工作分支上做好功能开发或bug修补
git checkout -b [branch name]

3. 代码改好后,合并到master分支
git merge [branch name]

4.修订提交纪录里面的log message
git rebase -i HEAD~2
将最后两个提交合成一个提交

假设要合并最后的2个提交,可以按如下命令进行:

1). git rebase –i HEAD~2
2). 将第二个pick修改为squash或者s,然后输入":wq”退出。
3). 这时git会自动第二个提交合并到第一个中去。并提示输入新的message(就是我们常说的comments),如下:
4). 编辑输入新的message,然后输入":wq"退出
5). 此时本地的(HEAD中)最后两次提交已经被合并为一个。git log可以查看。

计算机位的操作

位运算组合起来,可以对存储在计算机中的各位进行自由操作。
计算机中处理的各种数据都是以二进制的位来表示的。文本是由字符所对应编码的数字串组成,各数字串最后还是还原成二进制的比特。图像数据是各个点的颜色按一定形式排列,最后也还是二进制的比特串。程序所处理的对象,甚至计算机所执行的程序本身,说到底都是二进制的比特串。
也就是说,操作二进制位就等于操作计算机的数据。

基本的位处理操作有 4 种。
1. 取出特定位的状态。
2. 特定位置位(设为 1)。
3. 特定位清零(设为 0)。
4. 特定位反转。

1 特定位的状态
要从一连串二进制位中取出某一特定位 a 的状态当然,这个功能可以用按位与(&)来实现。按位与的两方之中,只要有一方是 0,结果就必然是 0;一方是 1,另一方的结果就原封不动返回。所以准备一个数 B,只需将想取出的那一位置设为 1,其余位置设为 0,那么取 A 与 B 的按位与,就可以只取出 A 数中 a 位的状态。
A &= (1<<3)

页面