Matrix之万里长城永不倒

1,现代长城初接触:
2000年,我发现我曾经华丽的个人网站居然打不开了,更过分的是整个GeoCities也从我的面前消失了,后来终于知道了原来是我们慈祥的Gov建立了GreatFireWall(简称GFW)来保护我们网民免受不良内容的侵扰。当然,我当时刚刚保障了自己的温饱,除了接受保护也没啥别的想法,毕竟有很多更迫切的事情(例如暂住证什么的)要考虑。

2,长城:
长城作为祖先的宏伟遗产,也是世界奇迹之一,更是我一直想瞻仰的古迹。前些天我去了箭扣古长城遗址,一览风景之余难免感叹祖先之伟大、长城之神奇:就算是今天修建也不是件容易事吧?想想咱四环路那么小一圈还修了好多年呢……登上山顶后我看到山脊两面各有一个小村子,而村民可能是经常互访吧,一条小路横跨山脊和长城的一个豁口。我想,如果这段长城能旋转90度,从墙,变为桥,两个村子的人应该都不会反对吧。

3,wiki:
在我看来,wikipedia是人类所建成的另一个奇迹:“所有较早接触互联网的用户对Wiki百科都并不陌生--作为全球最大的开放式互联网百科信息系统,WiKi内所包含的信息全面而详细,对于学生(尤其是大学生)来说,是最有效、完整的学术库,对于已经工作的职业人来说,也不啻为扩展视野,了解更多专业知识的有效途径--最关键的是,你也可以为WiKi添砖加瓦,开辟新条目,补充已有内容,发布自己的见解。” ——引用自Firefox+Tor必备教程

4,冲突:
“Have you ever had a dream, Neo, that you were so sure was real. What if you were unable to wake from that dream. How would you know the difference between the dream world and the real world?”——Morpheus, Matrix
“You know, I know this steak doesn’t exist. I know that when I put it in my mouth, the Matrix is telling my brain that it is juicy and delicious. After nine years, you know what I realize? Ignorance is bliss.”——Cypher, Matrix
正如cypher所说,无知是极乐。不知道wikipedia的人,例如从前的我,认为每件事就正是他们所被告知的那样,无他;而知道wikipedia的人则只有两种选择:忘掉wiki继续去做梦,或者从梦中醒来。

5,红药丸还是蓝药丸?
红药丸就在上面那个链接里,蓝药丸就在关闭本页的按钮上。

技术、门派或仅仅是恐惧?

几个关键字:
ROR = Ruby on Rails
OOP = Object Oriented Programming
DRY = Don’t Repeat Yourself
COC = Convention Over Configuration
ORM = Object Relational Mapping

人们(一部分人们)对于新事物总是抱有否定的缺省态度,这并不新鲜:当初,当有人说地球是圆的,当有人说地球绕太阳公转,都会有另外很多人站出来否定之。

而现在,ROR成了众矢之的。几种典型的否定是这样的:
1,Ruby是script,是脚本,那么性能肯定不行。

其实这种“如果x是脚本,那么x的性能肯定不行”的判断大概源于BASIC或者VisualBasic的经验吧。持这种判断的人你可否知道,ROR有Development/Testing/Production三种运行模式,在development模式下,每次当页面被访问时脚本会重载以反映最新的修改结果;而在production模式下,则不会这样做。

而这些人往往忽略另一个性能,就是快速开发的性能。如果时间紧迫,ruby绝对是上佳之选。

2,COC需要程序员来学习但没实质变化的新玩意儿

对于持这种意见的人,我只能说,你身上坏习惯太多了。ROR有很多默认的惯例,例如模型对象Article,那么对应数据库中的表articles;如果模型对象是Person,那么对应表people;如果Article和Person关联,那么articles表中要有person_id等等。难道还有更合理的“惯例”么?

如果你喜欢让Article对应table1,Person对应table2,就运行性能而言当然无二,但是如果有第二个人要看你的代码,不就麻烦了么?或者你就不想让第二个人看懂你的代码?另外别说你有创意,有创意的人是用脚来打字的。

3,ROR框架层次结构复杂

去用CGI吧,谢谢你。

4,ActiveRecord很方便,但是不知道该如何优化它

持这种观点的人多半是前几年自己写过或者配置过connecion pooling。但是你认为能写出ActiveRecord这么强的ORM的人,会不知道那么几行connection pooling代码么?

5,DRY

不多说了,有人不喜欢DRY,那就让他RY吧。

看得出来,很多对ROR的否定源于固有经验和对ROR的无知。“无知产生恐惧,恐惧产生憎恨”,送给那些孜孜不倦到ROR坛子上踢馆的同僚们,布鲁诺就是你们这些人烧死的:(

ruby笔记之一

1,随意,更象人类的语言
java:
if(a == b) {
System.out. ….//already forgotton? 🙁
}

ruby:
puts “it’s right!” if a == b

2,纯粹的OOP
java:
MyClass my = new MyClass(“param”); //’;’ required
int i = Math.abs(-5);

ruby:
my = MyClass.new(“param”) #no ‘;’ required
i = -5.abs #see, even -5 is an object

3,灵活
java:
public String hello(String sir){
return “hello, ” + sir + “!”;
}

ruby:
def hello(sir)
“hello, #{sir}!” #the last line’s value will be the returned value.
end

4,人性、人性!
任务:打印n个*出来
java:
for(int i=0;i

ruby:
n.times { print “*”}

5,容错
java:
int[] i = {1,2,3};
i[5] = 99; //boom!!! ArrayIndexOutxxxException!!!

ruby:
i = [1,2,3]
i[5] = 99 # i is now [1,2,3,nil,nil,99]

待续……

开始ruby,开始rails

终于放下包袱了,我要重新开始,从ruby on rails开始了。

我的包袱是什么呢?是Java。从2000年年底开始,Java、JSP(好多人问是JavaScript么?晕……)、JavaServlets到后来的Struts、Tapestry、Hibernate,真是没少花时间呢。好在我不必遗忘Java才能学习Ruby:-)

自从去年开始做bjqnc.com(小区的网站,纯兴趣),我对Java的感觉就发生了变化。我最终选择了xoops,实在无奈的是xoops是基于php和smarty的,完全陌生的东西。而我熟悉的Java呢?开源项目颇多,唯独没有能用得上的。于是我开始了磕磕绊绊的php+smarty的应用。于是我又回到了编辑模版的原始阶段了,不甘心……

为了做自己的xoops module,我找到了网友alex的笔记,跃跃欲试,后来好歹算是成功了。于是就像遇到了救星,赶忙把alex的msn加了进来:-) 后来alex说到ror(ruby on rails),我顿感无知,于是去ror网站上恶补一气,看了15分钟做blog那个视频,嗯,It’s the one.

当然了,Java还是很了不起的,我现在用的radrails就是来自Eclipse,哈哈。

本周要做个日志管理软件,算是练练手。待续了……