清源绿里

架构师害怕程序员知道的十项技能

此文是在ChinaUnix上看到的,觉得非常有用,故为转载。估计ChinaUnix也非原创,但无法追溯,此处保留架构师害怕程序员知道的十项技能

一、每个好架构师都是一位出色的程序员(卓越的程序员)

架构师,听起来是如此神秘的一个称号。尤其是在开发领域刚入门不久的菜鸟级程序员眼中,架构师都是高手,都是牛人,都是如此高高在上的存在。 不过,在搞了四、五年编程之后,程序员们往往早已失去了当年对这些“高级”职位的神秘感,甚至会对自己所在项目的架构师抱怨不已,背后里称他们是一群水王。所以有江南白衣曾撰文述说:“国内的架构师到了三十岁以后很多就往理论上跑,而国外的架构师在往上发展的同时保持下面的编程体验,所以国内多水王,而国外则多大师。”

这就是我们今天这篇文章的论题:一个优秀的软件架构师,首先一定是一个出色的程序员。这句话按照Fred George先生 的话来说,那就是“不编程的架构师的职业生涯是短暂的”。他说这句话的背景主要是针对有些架构师的设计与实现有断层的问题而言的,因为如果架构师不去实践,只是想当然的认为“没问题,这个想法能实现”,那么对于项目的落实而言是个很大的隐患。支付宝架构师冯大辉 也表示过,架构师是一个比较“虚”的岗位,主要的问题都在“落地”的过程中。

而一个架构师确认一个想法究竟能不能落地的最直接的方法,就是自己编写代码,尝试“实现一个系统最难实现的一部分”(Fred George)。看看Fred,他自己就是最好的示范:年纪一大把了,仍然每天都在编写代码。事实上,我们可以列举出一个长长的顶级架构师的列表,你会发现他们没有一个不是顶级的程序员。
Read the rest of this entry »

用程序解决买啤酒问题

知乎上以及微信或者微博等地方出现买啤酒的问题,一般题目是这么描述的“哈尔滨啤酒搞促销,啤酒2块1瓶,4个盖换1瓶,2个空瓶换1瓶,10块可以喝几瓶?”。并不算太复杂,可以用纸笔画出来,或者甚至心算得到答案。但如果拿到的钱是100元、200元呢,恐怕没有那容易得到答案的。本着能用代码解决的事情绝不用画图解决的技术宅精神,编写了下列代码,可以用来解决买啤酒的问题。所有的输入都是作为变量,可以由用户自定义,以应对不同的问法。

使用钱、盖子和空瓶换啤酒的过程中,每一次交换的逻辑都是一样的,所以在本程序中使用了递归算法,也就是通过count_beer调用自己来完成每一步的计算。编写过程中遇到了递归函数中,return会返回所有原先进入压栈数据的问题,后来发现递归方法编写中return需要直接指向函数本身,否则执行结果将会是回到最初的输入数据。这也是递归的特性。

buy_beer_001

Read the rest of this entry »

刷一刷21percent的存在感

前段时间 21percent 的备案掉了,网站有一个多月一直无法访问,这在以前是绝对不能接受的,哪怕一天打不开网页就会如坐针毡。但现在除了 沙罗双树园时光.云之彼端 两位合作者以外,没人问起过,说明大家没看,所以没觉察。从三、四年前开始,微博和微信开始流行,人人都端着手机刷微博和朋友圈,140个字的段子层出不穷,认真写博客的人少了,或者说几乎消声绝迹了。这是一个不好的循环,写的人少就看的人少,看的人少就更没人写。

也不能说没有情感,就如现在 21percent 备案重新申请好、网站恢复,我总想上来表达一下,估计其他作者也是一样,时不时会有再写一写的激动。只是当年写博客的人确实到了一个年纪,每天都有说不出名头的杂事缠身,好像没什么重要的事情,却又怎么都静不下心情来认真整理一篇满意的博文。这样的状态可能需要保持很长的时间,直到各位财务自由了、事务自由了、人物自由了。如此说来,博客坚持下去,注定就是用来怀旧的。

以前大家写来写去、看客串来串去,无非就是看看每个人的生活八卦,了解一下博主过得是不是不如自己好,博主则各种装逼,显示技术高大上、生活甜蜜美,其实传达的信息生态和现在的微博朋友圈都一样的。现在博客门庭冷落,已经不适合网红的玩法。倒还真是可以清清静静写写。

21percent 不会停止,对于一个独立网站而言,只要能正常打开,只要不是垃圾评论丛生,哪怕没有新的内容,也说明博主还是在经营、作者们还是常常在后台回顾。所以,各位老朋友们,我们都好,你呢?

21percent_beian

解决家庭多路由器无线网络无法上网问题

对于大部分家庭而言,网络的铺设会是接入供应商(电信、网通等)网线从楼道拉到家里,然后接 Modem(Modulator(调制器)与Demodulator(解调器)的简称,中文称为调制解调器,根据 Modem 的谐音,其昵称为“猫”),Modem 再连接路由器,通过这个唯一的路由器以网线或者 WiFi 的形式进行分发。在这样的情况下,各台电脑或者手机采用自动获取 IP自动获取 DNS 是没有问题的。

但也有例外的情况,有些家里会使用两个及以上的路由器(通常是普通路由+无线路由)。尤其随着光纤逐渐普及,接入供应商提供的 Modem 往往带有路由功能,家里的无线路由会接在这个 Modem 路由上成为一个次级路由。

Modem + 路由
入口网线和Modem

Read the rest of this entry »

nginx对于不同子目录下wordpress伪静态规则

最近在考虑换空间提供商。因为 MEYU 的服务响应已经成问题了,但新物色的华夏名网在系统配置上和 MEYU 有很大不同,例如后者用的是 Ngix 而非 apache。目前 21percent 域名下挂有多个博客,每个博客是以子目录的形式访问。原本在 MEYU 系统中针对每个子文件夹都会产生一个 .htaccess 文件用以完成 WordPress 的永久链接功能,实现页面的伪静态。

但是在华夏名网,伪静态规则只能针对单个域名根目录生效,也就是说该域名下的所有子目录必须共享一个伪静态规则。这样势必要在这个伪静态规则文件中针对这些子目录分别填写 Rewrite 规则。

下面记录初步尝试成功的转发代码。在本例子中域名根目录下有两个子目录,分别对应 tina 和 zhudianxin 两个独立的 wordpress 博客。如果使用华夏名网的“伪静态设置”,则会出现 tina 与 zhudianxin 的日志链接最终又指回主域名。解决的办法就是放弃“伪静态设置”,将其留空,并在“自定义伪静态”中输入以下代码:

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
location /tina/ {

  if (-f $request_filename/index.html){
    rewrite (.*) $1/index.html break;
  }

  if (-f $request_filename/index.php){
    rewrite (.*) $1/index.php last;
  }

  if (!-f $request_filename){
    rewrite (.*) /tina/index.php last;
  }
 
}

location /zhudianxin/ {

  if (-f $request_filename/index.html){
    rewrite (.*) $1/index.html break;
  }
 
  if (-f $request_filename/index.php){
    rewrite (.*) $1/index.php last;
  }
 
  if (!-f $request_filename){
    rewrite (.*) /zhudianxin/index.php last;
  }
 
}

Read the rest of this entry »

实现wordpress日志的随机显示

不少朋友喜欢 21percent 的摄影博客 Pars Sempre,大家常上来看看是否有更新,欣赏新拍的照片。但由于 Pars Sempre 的主题是个人博客风格,而非杂志型设置,因此首页设计以展示最新日志为主,而非内容的分类聚合,这样虽然能让老读者更方便得看到未曾阅读的信息,但对于初来乍到的朋友却很难深入得了解 Pars Sempre。从网站后台的浏览历史数据统计可以看出,即便是非常喜爱摄影的读者,也很少翻到以往的页面,最多向前翻两到三页便离开。为了让所有的内容都能够得到较好地发掘,让博客在分类及搜索显示时,打乱以时间为序、随机显示或许是一种解决方式。

Pars Sempre 是采用插件 Custom Query String 来实现博客各种查询的日志显示数目控制。这个插件可以设置日志的排序依据以及排序顺序。查看代码可以发现,排序依据为 orderby 参数、排序顺序为 order 参数。我原以为按照 Mysql 数据库的命令,只要在 order 上增加一个 rand() 选项即可。但 WordPress 的文档说明了 wp_post 这个参数是用 orderby 来实现日志的随机显示。这是什么逻辑……。

打开 Custom Query String 的文件,找到:

1
 var $orderbys = array('date','category','title','author');

修改为:

1
 var $orderbys = array('date','category','title','author','rand');

这时在 WordPress 的控制后台可以看到 CQS 排序选择中多了 rand 选项,将其选择即可实现该选项日志的随机显示。
Read the rest of this entry »