• L
    leyafo

    Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.

    Antoine deSaint-Exupéry

    Click here to see the full blog post

    发布在 Leyafo 阅读更多
  • L
    leyafo

    我们现在用 Rails 做开发,线上的环境配置非常繁琐。到现在仍然没有找到一个可以快速 setup 一个 server 的解决方案。以下是我们在部署一个新的 server 时要做的一些麻烦事,我希望有一天能够在半小时内不用 ssh 登陆服务器就能把这些事情做好。

    我们现在全线使用阿里云来配置 qa, production, db, backup 这些环境。每次新拿到一个 vps,我们做的第一件事情就是配置 ssh,创建相关人员账户,设置 public key,关闭免密码登录。这一系列的动作我们使用了 chef 来做这件事情,基本上做到了一键设置。还有像一些 bash,hosts 文件配置,安装一些常用软件等着一些比较简单的事情 chef 也做得很好。但 chef 能做好的事情也仅仅只有这一些而已。一旦我们需要安装类似于 rvm,ruby,postgresql 这样配置比较复杂的软件时 chef 就完全不能胜任了。其中有很大一方面的原因是 chef 配置非常之复杂、繁琐。里面各种各样的依赖,和每个 node 之间相互不同的 attributes 很让人焦头烂额。每次修改配置的时间超过了 setup 一个 server 的时间。如果长时间不去维护里面的 cookbook,过一段后又要重新去翻文档配置。这就是 chef 的问题,它带来的问题比要解决的问题更多。

    Click here to see the full blog post

    发布在 Leyafo 阅读更多
  • L
    leyafo

    编程语言的性能就像人的性功能一样,表面上没人在意,不会拿出来大说特说,运行时间长了它的重要性自然就体现出来了。

    发布在 编程 阅读更多
  • L
    leyafo

    活了这么多年才忽然明白原来文艺青年不属于穷人。
    当你每天累得像条狗,拖着残躯回家的时候还没女朋友。
    这个时候你最想做的事情不是诗和远方,而是撸一管睡个好觉。

    发布在 Leyafo 阅读更多
  • L
    leyafo

    我们产品以前用的 Framework 是 Rails。Rails 有诸多好处,ActiveRecord 对数据库访问非常友好,各类 Gem 使用起来非常方便,新开一个项目无需过多调研就能立马做出一个看起来像那么回事的产品。这些好处显而易见对新手非常有利,可以克服开发过程中前期徒峭的学习过程。

    Rails 可以很快的解决各类繁琐的业务逻辑,这都是基于 ruby 这门语言编程效率高。开发高效随之带来的代价就是运行效率低,效率问题只会在大规模用户量才会突显(参见 twitter)。在做产品的过程中解决复杂业务逻辑的效率取决于程序员对业务的理解程度,足够透彻的理解自然就会浮现简单的实现方案。从这个角度来说,业务逻辑与编程语言联系没有那么紧密,处理业务逻辑应该更多的去设计架构。

    Click here to see the full blog post

    发布在 Leyafo 阅读更多
  • L
    leyafo

    Coffee in, Code Out
    --from Stack Overflow

    “最近越来越不对了”。张大锤端着手里的咖啡喃喃自语道。无论是产品经理改需求,还是二逼运维拔网线,还是 VPN 无法使用,还是 PHP 文档魔幻。从未见到张大锤会如此难受。张大锤从入行之初为应付加班喝雀巢开始,一直喝到现在手摇不加糖美式咖啡。这其中经历的风霜雨雪无法简单的用几门编程语言去描述。曾几何时张大锤认为喝咖啡是种过于矫情的行为,但丰富的临床 debug 经验让大锤开始重视喝咖啡这一行为带来的影响。写代码时经常会碰到写 C 语言忘记加分号,写 python 忘记缩进,写 PHP 忘记写 dollar 符号,写 ruby 忘记写 hash 里面的冒号。经历过多次这样一系列问题痛苦的 debug 后,张大锤发现一切都是咖啡引起的祸。

    阿拉比卡豆子偏硬,会导致代码容易占用 CPU 过高。如果把磨豆机从电动换成手摇会改善这一情况,但这样会导致网络 IO 负载过高,处理数据会有延迟。这时如果换成哥伦比亚产的豆子会缓解这一系列问题。其主要特征是酸、苦、甜味重,豆子大且富含水分,所以耐烘焙。但无法掌控好烘焙的深度与湿度喝完后写代码会导致 CPU 无故飙升,却又无故空转。长期来看问题不明显,但每次凌晨半夜被电话叫起去服务器 debug 的经历让大锤觉得不寒而栗,渐渐的开始彻底放弃哥伦比亚豆子转而使用牙买加产的蓝山咖啡。蓝山的豆子无论水份与质地都肥肠稳定,烘焙也容易掌控。但喝多了让他不免开始怀疑起自己的代码老是有问题,可就是 debug 不出来问题在哪里。线上虽然稳定,但老是需要十天半个月去干一次重启服务器这样的危险操作。这就是张大锤开始不断报怨“最近越来越不对”的根本原因。

    无独有偶,张大锤开始改进了咖啡冲泡的萃取工艺。一开始使用热水壶直接冲泡,高温经过咖啡粉快速的萃取。产生的味道只在温度未退去时会有一种浓郁的香味,香味随着温度的下降而消散。喝咖啡的速度稍有不甚会产生代码尿频,尿急,尿不净的运行方式。这种情况随着后来邻桌的王大锤从遥远的日本带回一把高工艺无焊疤的细嘴壶而彻底解决。高温的热水经过细水壶慢慢悠悠的流过咖啡粉,产生源源不断的细流萃取后的咖啡肥肠的细腻,甘甜,清澈。代码也一改以前一蹶不振的作风开始变的丝般顺滑。唯一需要注意的问题是细嘴壶倾倒热水时需要注意地球转动带来的磁场效应,在南半球必须顺时针拿着细嘴壶转,在北半球必须逆时针拿着细嘴壶转。否则网络传输数据时大小端字节序将会变得让人难以捉摸。

    水源的质量非常影响咖啡的味道,咖啡味道不稳定会影响编译器的语法分析与词法分析。自来水富含抗生素,每个区的抗生素的含量不经相同。闸北比长宁的含量少,金山比浦东的含量浓度高,黄埔比静安的含量贵。这些变量让人非常难以琢磨,所以张大锤开始采用农夫山泉。但由于农夫山泉在千岛湖装运,中间汽车的运输抖动频率无法控制,会让代码的循环变得时快时慢。所以张大锤开始周末骑士 mobike 去郊外的水井里面取水。由于 mobike 整车偏重,张大锤的大腿蹬起来会频率更加趋于一致。但郊区由于无人看管,经常有无良的动物与人会在水源处撒尿。经过几次尿波酸含量的检测后,张大锤在水源的 50 米外分别用中文,英文,动物文三种语言写上“此处严禁随地大小便”。水源这个问题基本上以这种优雅的方式得到了解决。

    见得多了,也就不怪了。张大锤开始接受这个世界无法做出一杯完美咖啡的设定,就像这个世界上不存在完美的编程语言一样。多年以前张大锤去山东德州出差帮村干部调试大虾价格控制程序,那里的天很蓝,民风淳朴,村里人从来不打老婆。张大锤一直无法忘记那个除了鸡腿和汉堡,还有大虾的地方。当然更忘不了那一天晚上 debug 完了以后,坐在海边喝的那一杯无法猜透豆子烘焙温度与冲泡工艺的咖啡。张大锤无数次回忆起那个晚上他戴着耳机,听着 <It Never Rains in Southern California> 时喝的那杯咖啡。这种感觉无法描述,只能通过音乐去回忆。就好像多年以后,尹志平爵士无数次通过音乐 <英雄的黎明> 回忆起他成为龙骑士的那一个夜晚。

    发布在 故事 阅读更多
  • L
    leyafo

    这几天要部署自己做的一个小板凳,是用 sinatra 写的一个简单的 blog 程序。这个程序很简单,代码非常少,可以像 php 那样直接使用 async 将代码。但我想熟悉下 Ruby 关于部署方面的技术,因此找到了 Capistrano 这个东西。Rails 的 web 后台对环境非常挑剔,Capistrano 是 Ruby 写的, 虽然它可以部署各种语言的代码,但可以部署 Rails 的程序不会太简单。

    Capistrano 这个东西产生的一大堆配置文件有点让人迷糊。Capfile 相当于一个 makefile 文件,里面设置了一些任务是如何运行的。config目录下有三个配置文件,其中 deploy 子目录是用于配置部署不同的环境。默认的是 production 和 staging 环境配置项分别对应两个同名的文件。deploy.rb 这个文件相当于一个总配置文件,里面的是一些公共的配置项。
    Capistrano 非常依赖版本控制,在 deploy.rb 文件中 repo_url 是用于设置代码仓库的地址的,配置好这个参数后需要确认服务器有访问代码仓库的权限。 scm 是设置具体的版本控制软件的。Capistrano 支持最好的是 git 和 svn。 deploy_to 是一个非常重要的参数,它指示了代码上传到服务器的具体位置,另外需要确保这个目录与配置好的用户名有足够的访问权限。这几个参数设置好后,其他的参数可以使用默认的了。然后再配置对应环境的具体配置项。 在环境配置项中,role 参数指示的三项分别是 app,web 和 db。这个三项分开的好处是可以让他们部署到不同的服务器上做负载均衡。单台服务器不用太关心,三项指向同一个地址即可。然后配置服务器的访问权限,配置非常简单,设置好用户名和 ssh public key就可以了。到这里基本的配置已经完成了,运行cap deploy:check 可以检测配置是否成功。这个时候如果 check 成功的话使用 cap deploy 命令就可以成功上传代码了。

    Click here to see the full blog post

    发布在 Leyafo 阅读更多
  • L
    leyafo

    a blatant attempt to influence your music taste.

    今天早上看到关于中国游泳选手尿检阳性的消息。我当时的感受就是:”干得漂亮!最好能彻底查一查那些患有心脏病的选手到底是怎么回事“。有人说你这不爱国。我想说,现在的年轻人啊,你可以去爱生活,爱你身边的人,爱这个世界,为什么偏偏要做爱国这么 low 的事情呢?奥运会拿的那几块牌子对你的生活有任何影响吗?你跟着瞎起哄还上升到民族大义,傻不傻?

    Click here to see the full blog post

    发布在 Leyafo 阅读更多
  • L
    leyafo

    git 不是一个对新手友好的工具,大多数新手第一次面对 git 总会有点手无足措。这时当你开始怀疑是不是一个蠢货时请不要停止,继续保持怀疑。面对一大堆命令和魔法般的黑色 terminal 大多数新手都会手无足措,不知道该怎么去用 git 去提交自己的代码。更可怕的事情是,如果搞砸了还会导致你旁边的豹子头同事把你给撕了的危险。本文档的主要作用是就是可以让你顺利的把代码提交到 git 库,避免产生意外的人身伤害。

    在被我忽悠 git 后你可能会偷偷的跑去网上找 git 相关的教程读。或者在看到我贱指如飞、神乎奇技地在键盘上狂按一通的时候你偷偷的拿笔在旁边记录我敲过的顺序。作为一个踏坑无数,身经百战的老司机有必要在这时告诉你一点儿人生经验,你这么做并没有什么卵用!!!因为你碰到的问题和网上那些教程说的是不一样的,老司机和你看到的世界也是不一样的(隔壁老王用的撩妹技能你直接拿去用会有什么后果?)。因此我们现在以平常工作中最简单的一个应用场景来解释 git 的基本用法。

    Click here to see the full blog post

    发布在 Leyafo 阅读更多

与 V2MM 的连接断开,我们正在尝试重连,请耐心等待