面向过程与面向对象
回到家已经超过23点了,想想也做不了什么事情了,那就把路上跟同事讨论的问题,拿出来写一写。又是一个老生常谈的问题,就是到底是面向对象还是面向过程?其实关于这个问题,本不该有什么疑惑的,但是随着最近一个项目的经验,我又产生了一些新的看法。
自从我学习了面向对象,我就好像掌握了一个得心应手的工具,感觉在处理各种问题的时候无往而不利,虽然偶尔也会有些迷惑,但是终归无伤大雅。这样二了一段日子以后,我终于接触到了设计模式,以及有机会见识了一些真正复杂的项目,发现面向对象很多时候,都是一种艰难地抉择。于是,对面向对象开始有了敬畏之心,并一直认真地思考这里面的问题,认认真真去实践面向对象设计,分析别人的写的代码,越发感觉到还有很多路要走。
Mac OS X Lion 终端快捷键
虽然Mac OS 提供了令人目眩神驰的界面效果,但是,我觉得我的最爱始终是终端,这到不是因为我有什么geek的癖好,而是因为到了*NIX系统上后,使用终端得心应手,就好像使用Windows,你喜欢点开开始菜单,或者习惯性打开资源管理器,是一个道理。
Mac的终端是连接的使系统底层的Unix系统,名字叫Darwin,这个终端也支持许多的快捷键,记录下来,希望对大家有点帮助。
Yii框架base包代码分析
周日闲来无事,打开Yii的源代码学习一下,今天主要看的代码都是base包里面的,也就是框架根目录下的base目录里的代码。这个目录里的代码不多,但是类很多,而且这些类对整个框架来说至关重要,都是非常基本的组件。老实说,这里面的代码,我已经看了无数次了,但是总觉得常看常新,转念一想,这也实属正常,毕竟这是原作者数年框架开发经验的结晶,岂是我这等工作一两年的菜鸟能随便吃透的?
最近又玩了两次Visual Paradigm这个软件,觉得自己操作水平又有进步,甚感欣喜,所以今天既然分析源代码,就正好再练练手,于是乎,我开始用VP UML开始画base包里的类,得图如下。(说明:这个图是基于Yii的1.1.8版本,另外这里面少了两个类,因为这两个类的功能比较特殊,我没有细看,所以也就没有画在图里,看后面是不是有兴致再来专门画一张,缺失的两个类是CSecurityManager和CStatePersister。)
jQuery里面用到“打包盒”
想学学怎么写jQuery的插件,结果发现举步维艰,于是想通过研究插件代码的案例,来积累经验,结果看到第一行,我就郁闷了,天下间最郁闷的事情莫过于你出门去约会,结果刚打开门,就摔个狗吃屎,现在我就那个感觉。看代码:
//第一种“包装盒”
(function($){
怎么觉得Python这么混乱呢
开始学习写Python,写了一两个小脚本后,就产生了非常奇怪的感觉,我怎么觉得Python看着这么混乱呢?
一个是没有大括号了,代码那种段落感没了,第二个是没有分号了,觉得一行总是没完似的。靠缩进来流程控制,觉得非常难受,总是习惯性地搞不清楚一个if和一个for的结束在什么地方,为啥不像pascal和VB那样,加个关闭之类的东西,也让人看着舒服点。代码说完,再说说文档,去官网查文档,感觉那文档视觉效果跟代码一样,没有括号,分号这样分块,断句的地方。那文档就是秘密麻麻一片,从上到下,页面长长的一串,而且还太宽,连个索引也没有,还得不停地ctrl+F来找函数。排版也忒鹾了吧?
如何配置RHEL的iptables开放端口
要给一个朋友的服务器上架设ftp,一看,这哥们的服务器装的是RHEL AS4,看到这个发行版的名字,我就发怵了,果不其然,么有包管理器,我简直寸步难行,什么软件都没法装,各种依赖,太难解决了!!
看了一下已经安装的软件列表,发现已经装了vsftpd,就用这个吧,man了半天,最后配好了,但是一连,发现死活连不上,百思不得其解,各种google,各种百度,也不知道过了多少天,才发现问题的症结在iptables,原来,要使用passive mode登陆ftp,必须开一个范围的端口,而系统默认的iptables规则,不允许对这些端口的访问,导致ftp连不上。怎么开放iptables的端口呢?又是各种google,各种百度,搜到一个iptables的tutorial,竟然有290页之厚,太难用了。
Mac上的WordPress客户端MarsEdit
以前写博客,我就喜欢使用客户端,感觉客户端更像是在自己的地盘,用网页界面写博客,就感觉像在论坛发贴一样。少了一种严肃,多了一种随意。后来博客荒废已经多年,今天偶然想起来写一下,还是想用客户端写,于是好奇地在Google上搜了一下,找到了我现在用的这个MarsEdit(火星编辑器?哈哈)
这款客户端软件非常完美地体现了MacOS的设计哲学,高度的用户友好,不把用户不懂的东西暴露给用户。你只需要告诉软件,你的部落格的网址是什么,然后他就帮你做好一切,最多是问你要一下登陆密码,从这点来说,可能比Windows下的Windows Live Writer更加友好。输入完密码,就会使用一个看起来像是Mail的一个界面来展示你部落格的所有文章列表,这是一种体验延续,或者也是一种体验借鉴,因为所有的Mac系统预装Mail,所以,作者恐怕觉得让界面长得像Mail,就能极大地减少教育成本。(我觉得这个设计思路相当值得借鉴,要想你的东西不言自明,一种是让用户不会犯错,无敌简单的UI,比如只有一个按钮,另一种,就是站在巨人肩膀上,重复用户非常熟悉的一种体验)。创建新文章,也像是写一封邮件一样,首先选一个blog(收件人),然后写标题,然后是tags,地下就是正文编辑区域。与Mail不同的是右侧多了分类列表和博文的基本属性。
Mac OS X上如何实现到Linux主机的ssh免登陆
本文要讲的,就是如何简化从Mac登录Linux主机的操作步骤,提高效率。所谓的“免登陆”其实是不存在的,只是说,从验证密码的登录方式,改为公私钥对的登录验证方式。使用后者的方式,每次会由ssh客户端自动发送验证信息,所以就免去了人工输入密码,看起来好像“免登陆”一样。
关于这么做的原理,大家可以自己去Google,关键词是“非对称加密”,“RSA算法”,“基于ssh密钥对的自动登录”,等等,我就不多解释了。我直接说操作步骤吧:
【边学边用】PHP5函数参数的按引用传递
PHP是支持引用的,但是关于一个变量什么时候是引用,什么时候是值,我脑子里总是迷迷糊糊的,所以,想用引用的时候,就会不自觉地在所有的地方加上&符号,真的很累赘。为了缓解这个问题,我特意写了下面这个代码片段来增进自己的理解。起初,我对这个东西的理解是,对于对象来说,PHP5就是按照引用传递的。但是我现在想,可能事情不是这么一回事情。下面的代码片段中,$obj其实是A的对象的一个引用,可以理解成一个指针,函数参数$o,其实还是对$obj的拷贝,只是拷贝的是引用本身,也即,$o其实是$obj的拷贝,只是由于其拷贝了$obj,所以,$o也指向A的对象。两个指针指向一个地方,这也是为什么函数changeObj可以改变A的对象的原因。我想,这样大概从技术来说,会更加合理一点。
ExtJS 4 的MVC
ExtJS是我听说了很久的一个js框架了,但是从来就没有用过,读研期间寝室里有个小哥在用,不过那时候醉心于WordPress开发,也懒得理会了。现在公司里,有个上线系统用到了这个框架中的一个TreePanel组件,整个界面上,就正中间扔了一个tree panel,而且不知道什么原因,CSS还有bug,把按钮都搞破了,弄得丑陋不堪,我于是自告奋勇,仔细调试,终于修复了那个显示上的bug,从此算是初次结识了ExtJS。它真正吸引我的原因是,它能够把富客户端应用的开发,从美工和基础交互中解放出来,只需要专注于业务逻辑开发即可,从而让后台工程师也能够有能力快速开发外观专业的网站应用系统。我觉得这真是功德无量的一个事情。(如果我直觉没错,Flex框架也是这一类东西,这也是我对其有兴趣的原因,当然还没有时间尝试)
