Why·Liam·Blog

人生若如初見

重构是一种对软件进行修改的行为,但它并不改变软件的功能特征,而是通过让软件程序更清晰,更简洁和更条理来改进软件的质量。代码重构之于软件,相当于结构修改之于散文。每次人们对如何对代码进行重构的讨论就像是讨论如何对一篇文学作品进行修订一样无休无止。所有人都知道应该根据项目的自身情况来对代码进行重构,而重构是无止境的。莫扎特从来不不对他的作品进行修订,特罗洛普对自己作品修订的恰到好处,大多数作家认为他们俩这样做都是合适的,但他们的合适对于你我来说未必是合适的。

最常见的基本重构方法可以归纳为两个方向。通过归纳方法将一个长的过程分解为小的可以重用的组件,和通过内联 (inline) 方法来消除那些不够份量的小方法。我们可以提炼方法来让大量的子类共享相同的功能特征,我们可以下放方法来让只有用到这些功能的子类才知道它们的存在。重构就是爬山,通过一步一步的小的提高来逐渐的改进整体的质量,但在重构时,我们如何知道哪种方法是上山的正确道路?

关于代码地形学的这个问题公认的方法有两种。去除有异味的代码和 重构成模式。如果能做到这样,当然是很好的。就像是纠正作文里的一个语法错误或不恰当的比喻。如果我们可以找到这些四处隐藏的有异味的代码,将它们重写成整洁的,条理的,结构化的形式,何乐而不为。但这些都是特殊情况。如果没有明显的模式来重构,或没有很直接的方法来去除代码异味,那该怎么办呢?

这才是我们如今编程艺术的中心问题,而很少人讨论这些。通常我们讨论这些问题时都是罗列出更多更长的有异味的代码模式的清单,但这并不是解决问题的方法。代码异味应该是我们公认的不好的东西,而不是那些置之不理也无妨的事情。我们经常会说到老板不给我们重构的机会,甚至代码有明显的异味,老板们认为这是浪费时间。并不是每个人都有懂软件的老板。我很吃惊为什么只有很少的讨论谈到点子上。。也许我这篇文章才说到问题关键处。

阅读全文 »

只需要在 post 的 markdown 文档里面适当位置加上 <!--more--> 即可。这样就不会在首页显示此代码以后的部分。另外,还会在首页的相同位置添加一个 read on 的链接,点击即可阅读全文。

octopress_logo

参考 Image Tag

只需要在新的 post 的头步加入 published: false 即可。

阅读全文 »

最近有些同学让我分享我的博客主题,其实主题早已经放在 GitHub 上了。下面索性基于 我 Fork 的 Octopress,讲一下如何使用 Octopress 在 GitHub 上建博客。先来看看我的版本和原始版本的主要不同之处:

2012-04-13: 允许单篇文章独立引用 CSS 和 JS,具体文件内容变动见 commit0aa27bb05fcdbf

  1. .rvmrc 改成使用我机子上装的 Ruby 版本(1.9.3),Octopress 最低要求是 1.9.2。
  2. Gemfile 把源改成 ruby.taobao.org,去掉部分 gem 的版本号限制,咱都用最新的。
  3. Rakefile 用 haml 替换 markdown(这个根据自己喜好来,只要是被支持的),时间改成东八区的,降低主题对 custom 目录的依赖。
  4. _config.yml 这里都是一些定制化的配置信息,比如日期格式、永久链接、新浪微博等。
  5. plugins/sh_js.rb [新增] 代码高亮插件,具体介绍看:Using SHJS for Jekyll
  6. plugins/tag_generator.rb [新增] 其实 Jekyll 是支持 Tag 的,只不过 Octopress 目前没有官方插件支持,所以我自己搞了个,支持中文。
  7. .themes/blog/ [新增] 这个就是我博客的主题了。

OK,现在让我们正式开始。

GitRuby,然后就是把 Octopress 源码从 GitHub 上拉下来:

阅读全文 »

终于,耗时 N 天,把我的博客从 WordPress 转到了 Octopress,并且很无耻的托管到 GitHub 上面,免费高速~ 这篇文章教大家简单的 Octopress 的安装与使用。(如果你用的 Windows,你可能会碰到一堆雷⋯⋯强烈推荐 Linux 或者 Mac OS X)

Octopress 的安装不同于 WordPress,WordPress 是安装到服务器上面的,Octopress 是安装在你本地的(如果选择 Deploy 到 GitHub 上)。

首先需要准备的是 Ruby 环境:(下面教程均在 Mac OS X Lion 10.7.2 测试通过)

  1. 参考这篇文章,安装 GCC:[http://www.memoryz.info/install-gcc-on-mac.html][1]
    如果你已经安装了 Xcode,则无需重负安装 GCC

  2. 安装 [Homebrew][2](或者你可以参考:[https://github.com/mxcl/homebrew/wiki/installation][3]):

阅读全文 »

markdown 语法快速成文,git 与 github 实时保存,jekyll 或 octopress 实时成书或者 showoff 实时成 ppt。入门略有门槛,但是习惯了,写作效率会好很多。以下以 octopress 为例,进行说明。

github,创建一个个人账号。假设叫做:rubyonchina。然后回到 ubuntu 或者 Mac 里面,仍然是在终端里面,输入:

按照默认提示一路确认,生成密钥之后,将生成的信息复制到 github 页面中,如下所示:

阅读全文 »

你在电话里说最近还在做那个梦,同样的一个男人,同样的情节,同样的最后牵不到的手。你说清醒的时候几乎想不起来这个人,没有恨意,也没有爱意,像个陌生人。可是不知道为什么,十几年了,他总是不定时的在梦里出现,重复着最初的相遇和最后的分离。

那一年你十八岁,是每天带着一群小萝卜头的孩子王。只是每日肥大的白色 T 恤和短裤加上短发平胸,看上去更像个清秀的小男生。那个时候我已经学会了穿飘逸的长裙不苟言笑,却喜欢和你一起没有目的地慢慢走。很多诧异的眼光吧,其实不止是情侣,即便是同性的好朋友太过不同的外在还是让人好奇。可这些与我们无扰。我们还是一样坚持一个旁若无人,一个玩世不恭。

只是突然有那么一天,你竟然在和我说话的时候脸红了,眼神飘向地面,你说你爱上一个人,一个男人。

你带我去见他,在他租来的画室。我记得那个男人站在背向阳光的地方,我看不清他的面目,却看得到你在我身边的殷切——你在乎我对他的观感。我微微向一边挪了挪,然后看到一个个子不高,带着眼镜,笑起来时候嘴角斜向一侧的平凡男子。格子衬衫有些发皱,手上有些没来得及洗净的油彩。我承认那刻的失望,尽管那是你的爱人。

阅读全文 »

2012 年 5、6 月,成都到拉萨,骑行 2200 公里,骑行去西藏。谨以此片铭记我的 2012,我的 21 岁,我的间隔年。献给我的朋友们。

曾经一个人走在陌生的旅途中 泪湿眼眶的那份感动。。当我们不再为当初一直激荡在内心的梦想澎湃时,当看着身边的朋友在为着生活、结婚、养儿育女、供房、买车。。朝九晚六的工作着。。并开始接受、迎合现实。。真的,一个人首先老去的是那份不顾一切、想走就走的心。。。我们有太多的无可奈何~趁年轻!

The Why·Liam·Blog by WhyLiam is licensed under a Creative Commons BY-NC-ND 4.0 International License.

WhyLiam创作并维护的Why·Liam·Blog采用创作共用保留署名-非商业-禁止演绎4.0国际许可证

阅读全文 »

作者: 符号

在电影《史密斯夫妇》中, 布拉德皮特曾说过:」what happens in the end… you start to miss the beginning.」一晃四年,光阴荏苒,当我厚着脸皮忝居 Vassar 学长、自己已然卷铺盖滚蛋却又看着一波新生正在接近之际,不禁想起刚入学还是小弟的时候,和当时大四学长一起吃的一顿饭。学长仙风道骨,当时已经手握大把 Top 10 研究生院的 offer,看着我这只初来乍到的菜鸟,悠悠地来了一句:「我一直觉得,你从大学之中得到什么,不取决于大学能够给你什么,而取决于你自己想从中获得什么。」

学长抛下这句话,飘然去了哈佛,留下我在大学四年间细细回味,如今想来,堪称我在大学期间得到的最受用的建议之一。Vassar 算是典型的文理学院(liberal arts college),在普通学校、文艺学校和二 B 学校之中介乎于文艺与二 B 之间。学什么学科的都有,尤以英语文学为盛,唯独理工科不怎么受待见。虽然受此影响我在历史、哲学、经济等学科打了一圈酱油,但最终还是决定学数学。两年后无论是申研究生院还是找工作,面试我的人前五句话中必然有一句:「你丫干嘛跑到 Vassar 学数学?」其实我们数学系反而粥多僧少,每年不到二十个学生能够享受所有的资源。即便去了一所数学教育质量更高的大学校,我个人所能分摊到的资源(比如教授的个人指导)却未必能比得上。每条路有每条路的走法,所以我在这所山村学校数学系的走法就是我与导师和教授的关系都还不错,借着他们的人脉认识了我这个领域的大牛教授,在她的指导下写了些东西,凭此去参加了一些学术会议,写了些论文……你能想象的节奏。好的机会和成就不会主动来找你,还是要自己一步步去实现。Vassar 众学科中当属表演系(drama)最强,全国驰名,而我对此一窍不通也不感兴趣。倘若当年手滑选择了大学能给我最多资源的表演系,只怕今天依然泯然众人,找不到人生方向。

再比如我大三半年去了牛津大学交流,这个看似高端大气的项目其实很水很轻松,每周规定上课时间 2 个小时,其它随意,期末成绩竟然还不计入大学四年总成绩。那么我们这些交流生这半年得到什么,显然就不取决于牛津能给我们什么,而是看我们自己想获得什么了。我有同学花了很多时间找实习找工作,各种准备、四处面试;也有同学游山玩水,游遍欧洲列国,增长一番见识。我则主要做了两件事:第一是利用牛津丰富的图书馆资源看了不少数学文献,借机写了篇论文,之后拿去参加学术会议,在通往 PhD 的不归路上一去不回头。第二则是狂练体能,每天绕着风景还不错的校园跑步,左三圈右三圈。刚回到瓦村那会儿隔天和校篮球队的人打两个小时的全场,满场飞奔毫无压力。同样是去牛津的交流生,我们各得其所,走了全然不同的路。

不过生活不像人民日报,处处顺心如意心想事成。满场飞奔打球的代价,就是我在大四第一学期结束的时候得了跟腱炎。这再次体现了一个让人略感不安的事实:岁月无情。如果你不是神童提前入学,大学毕业大概二十二三岁,和十七八岁的时候的体质已然大不相同。如果落下什么慢性伤病,那以后多半会一直与之相伴;反之如果养成健身的习惯,心肝脾肺肾全面达标,那么也大有可能为祖国健康工作五十年。

阅读全文 »

昨天,一群參加 青年創業暨交流計畫 — 一個由中華青年企業家協會發起、給學生參加、非常重視實作的創業培訓 — 的同學們來 appWorks 參訪。

他們事前做了很多功課,不知到去哪裡人肉搜索挖掘出了我這輩子所有人生軌跡,然後根據不同的階段擬出了幾十個問題,請我一一幫他們回答。大概聊了一個多小時吧,其實是蠻好的經驗,剛好也讓我回顧一下我這些年來闖蕩的歲月。最後我送他們一句話,也是我常常送給每一個創業人的:Hack, everything! 這句話我常常說,但是似乎一直沒有好好的解釋一下它的意思,我想我們今天就來聊聊這個話題。首先,我們得先定義一下「Hack」,Hack 這個字當名詞用時的意思,維基百科是 這麼說的

A hack is a solution to a problem, doing a task, or fixing a system (whether hardware or software) that is inefficient, inelegant, or even unfathomable, but which nevertheless (more or less) works. 翻成中文就是:

Hack 是問題的解法、一個任務,或是修理系統的方法,當這個方法不太完整、有點醜、甚至有點莫名其妙,但卻是有用的時候,就叫做一個 Hack。也就是說 Hack 是一個不求美觀、不求完整,只求把問題解決的方法。因此,Hack 講求的是速度、實用、達到目的,所以換成動詞使用,就是「快速把問題解決」的意思。但是難就難在這個「快」,因為快速不等於「橫衝直撞」,要快之前,你必須要非常了解事情的每一個環節是如何運作的。要了解這個概念,我們可以參考一下維基百科對 Hacker 的定義

阅读全文 »

善用时间轴,改变写歌和编曲协同方式的Splice想做音乐界的Github

这个产品让人动心。不只因为它将协同思路放进有刚性需求的细分市场,还因为音乐终于可以在各乐器音轨的叠加后又多出一个维度——时间。其实我们已经看惯了时间轴(它躺在社交网络中随处可见),但在传统的画画、写作和音乐创作上,作品往往只能呈现最后一刻,稍微破坏了,之前的状态便无法回来(尤其在与人协作但作品又事与愿违的时候)。

目前正在内测的 Splice 想让写歌变成写软件那样,通过增加时间轴——增加音乐的时间维度,让写歌也可以有 Github 式的托管协同。它暂时还只能配合 Ableton 这样的音乐创作工具使用,支持 Logic、Pro Tools、Reason 等。但 Splice 让音乐的修改变得有历史可寻,它会在音乐人的电脑上创建目录,每当他们在工作过程中保存一次作品,它都会自动将其存到云上,每个版本都是独立的文件。

和同样做音乐创作协同但有社交网络属性的 Blend.io 不同,Splice 在作品发表之前用的是较为私密的环境。当你有合作者时,你可以通过邮箱对他们进行邀请,无需再通过云存储做繁杂的文件分类就能做到一同协作。每当合作者修改了项目,时间轴都会对修改更新加以显示,标明谁改变了哪条音轨(鼓的还是贝斯的)。此外,像 Github 那样,大家还可以基于每次修改添加评论,这样能够在讨论的时候更有针对性,不会像以前那样在邮件或交流中犯晕。

善用时间轴,改变写歌和编曲协同方式的Splice想做音乐界的Github

阅读全文 »
0%