April 19, 2012
| 作者:白菜
|
分类:随便侃侃
总是看到论坛上有很多新人或者甚至有三四年经验的(我觉得,工作两年的人就别把自己当新手)老程序员问一些很基础的问题,而且也不肯思考,总是习惯问别人要代码,美其名曰“学到什么看什么”,每次都问,每次都不肯动手,不去搜索,也不看手册。总想说几句,你看看手册会死啊。
也见到有些人老抱怨,面试考一些基础的东西,我只想说,基础的东西不会,大的东西你又会多少?总是抱怨细节没必要,考函数就是误人子弟,顶多就是翻下手册。总是觉得只有考架构提,考千万级流量网站架构才是自己能力的体现。可是,不从细节一步一步来,所谓的结构只是空谈,顶多只是照搬下配置,叫做网管和软件安装员还差不多。如果真的经常动手写代码了,而不是干点ctrl+c,ctrl+v的勾当,我就不信真的会连几个基础的函数都写不出来。
不是炫耀,只是继续传播我的观点,
手册是程序员的命根子,现在这个年代已经不需要我们抄手册了,但遇到问题先去看手册,去思考是必不可少的。当年我之所以抄手册,住了主观原因的痴情于外,客观原因是自己没有电脑。下面是正文。
想挪窝了,看看三四年前自己抄的那些厚厚的手册,做的笔记。带着太占地方,现在也烂熟于心,背下了,也有电脑了,用处不大;扔了又可惜,毕竟有很大的纪念意义。
曾经,花了一个通宵把这两个手册的HTML网页一个一个地翻出来粘到word里,打印,抄到笔记本上。。。

(不知道因为这个自己残害了几颗小树啊,罪过。。

)
我也不会告诉你,花了三个晚自习,把jquery手册抄了一遍啊,96页的word文档抄了48页的笔记。。
花了一个星期把考蛤蟆文档抄了一遍。。
我不会告诉你,我把php手册里的主要函数也抄了一遍。
我也不会告诉你,JS,CSS。。我也抄了。。
我也不会告诉你,我手里这些笔记是我抄了第二遍或者第三遍的。。。因为第一遍字体太乱,内容太杂。。
看着不顺眼就整理了,每一遍都整理了下,也越抄越少。熟悉的就不抄了。





坚持不懈,保持好的学习习惯。就算不能成功,但总不会输的很惨。
April 17, 2012
| 作者:白菜
|
分类:随便侃侃
出处:http://heim.ifi.uio.no/~trygver/1979/mvc-2/1979-12-MVC.pdf
我创立的Model-View-Controller(MVC)模式作为一个直观的解决方案,针对的是一个一般性的问题,即让用户能够支配自己从多个角度看到的信息。MVC引起了的关注之多,让人有点始料不及。有些教材对MVC的改造甚至到了离经叛道的程度,企图达到让计算机来控制用户的悖谬目的。
而MVC的根本目的是在人类头脑中的心智模型和计算机中的数字模型之间架起一座桥梁。理想情况下,MVC的实现方案与用户直接查看和操作领域信息的直觉吻合。假如用户想在不同的上下文中以及/或者以不同的视角看到相同的模型要素,那MVC就有了它的用武之地。
模型
模型,表示知识。它既可能是一个对象(当然,如果仅一个对象就没多大意思了),也可能是由许多对象组成的结构。
模型及其组成部分是一方,而模型创建者意识中要表现的世界则是另一方,这两方应该一一对应。自然地,模型的每个节点都应该明确对应于问题的一个部分。
模型的所有节点都应该把问题解决到相同的程度,把面向问题的节点(例如,在日程中添加约会活动)与实现细节(例如,用段落展示)混在一起不容易理解,是应该避免的做法。
视图
视图是模型的(可见的)表现。视图通常会突出模型的某些属性,同时隐藏其他属性。从这个意义上讲,视图就像是一个展示过滤器。
视图依赖于模型(或模型的一部分),通过询问问题的方式从模型中获得用于展示的必要数据。视图通过发送适当的消息,也可以更新模型。这些问题和消息都要按照模型的术语来传达,由此视图必须得知道自己所要表现的模型,它的属性都有什么语义。(比如说,视图可能会询问模型的标识符,期待返回一个Text的实例,但它可能并不认为模型就是Text类。)
阅读剩余部分...
April 1, 2012
| 作者:白菜
|
分类:随便侃侃
今天是愚人节。
看到雪候鸟博客这篇文章
“PHP 对程序员的要求更高” (http://www.laruence.com/2012/04/01/2571.html)而想到的。当然,鸟哥这篇文章只是娱乐而已。鸟哥文章里的观点是“由于php编译器不对代码进行优化,而JAVA、C++会优化,所以php程序员需要更多关注代码的优化,因此php对程序员的要求更高”。显然,这个“观点”是错误的,只是愚人节的一个玩笑而已。
不过这倒让我想起了MYSQL。相信搞php的更多的接触是MYSQL,90%以上的PHP程序员接触的最多的是mysql数据库,JAVA程序员所接触的数据库60%是oracle,35%是mysql,而.NET程序员接触的数据库60%是MSSQL,40%是其他(以上言论没有数据支持,只是从我所了解和观察到的的谈起)。很长一段时间,在PHP里都存在着对开源MYSQL的歌颂和对商业oracle的贬低。很多人认为MYSQL多简单,效率多快。我想,如果真正接触过这两种数据库,并且熟悉的人,都知道这是多么滑稽的事情。mysql无疑比ORACLE差的不是一点点,两者根本不在一个档次上,特别是复杂的查询上,如join连接,in嵌套和事务处理等,在简单查询上,mysql确实不会比oracle差多少。但是总体上说mysql比oracle优秀是自欺欺人。某些程序员认为mysql优秀的理由是很多大网站都在用mysql,并且mysql可以优化啊,集群啊,我想说的是,oracle更可以优化,更可以集群。
其实,我们完全可以坦然的承认,mysql总体上就是不如oracle,没有什么丢脸。中国人买车就是如果买了一辆3万的桑塔纳或QQ车,会觉得很丢脸,即使自己只是上班代步和近郊出游,根本没有必要买几十万的越野车,但是中国人不,桑塔纳丢脸,就得买悍马和宝马。无疑,悍马就是比奇瑞QQ优秀,但是大可不必为自己开的是QQ车而觉得丢脸。
同理,mysql就是没有oracle优秀,我也用mysql,但我承认事实。
我之所以用mysql,是因为mysql很烂。为什么这么说呢?因为mysql就是烂啊,烂的实实在在,大家都知道mysql的瓶颈和缺陷,也就知道怎么避免和克服了,mysql的优化措施和规则就那么几条,网上到处是,我放心啊。oracle就不一样了,oracle多阴啊。给oracle加个索引还得战战兢兢的,因为不小心的话,这个索引就会打乱oracle的执行计划。明明一样的语句,但oracle就是可能今天还好好的,明天就慢的要死,就是oracle的内部优化太复杂了,执行计划很容易被改变导致的。而mysql就少了很多这样的陷阱。
这就是经济学中所说的
劣币驱逐良币和信息不确定性成本。mysql是比oracle烂,但却可以占据关系数据库的以部分市场,因为mysql这个劣币由于其优点(简单,流通速度快)而驱逐了存在缺点的(复杂,成本高)的良币oracle。市场就是这样的。
“劣币驱逐良币”是经济学中的一个著名定律。该定律是这样一种历史现象的归纳:在铸币时代,当那些低于法定重量或者成色的铸币——“劣币”进入流通领域之后,人们就倾向于将那些足值货币——“良币”收藏起来。最后,良币将被驱逐,市场上流通的就只剩下劣币了。这也就是纸本位的货币驱逐金本位的货币体系。
当事人的信息不对称是“劣币驱逐良币”现象存在的基础。因为如果交易双方对货币的成色或者真伪都十分了解,劣币持有者就很难将手中的劣币用出去,或者,即使能够用出去也只能按照劣币的“实际”而非“法定”价值与对方进行交易。(对劣币驱逐良币的更多了解可以百度)
由于人们掌握oracle的成本太高,导致低成本的mysql驱逐高成本的oracle。就这么简单。同理,鸟哥所说的php需要掌握更多的优化是站不脚的。存在不确定性的JVM的优化更难于掌握,对程序员需要提出更高的要求。
因此,学习成本低的php这个劣币驱逐学习成本高的java这个劣币。而内存管理模型简单的劣币java驱逐了内存管理复杂的C这个良币,对人类友好的C这个劣币驱逐了对机器友好的良币汇编语言。当人们发现某一个语言的学习成本更低时,就会抛弃和减少对高成本语言的使用和学习。当然,劣币不是彻彻底底的劣,是因为他们在某一方面有优势,而获得这一优势或收益所要付出的成本更低。但是,市场离不开良币。
这又让我想起了postgre 这个悲剧,这个介于oracle和mysql之间的优秀数据库,却只能偏安一隅,夹缝中艰难维生。无论是国内还是国外,都很少见到它的应用。
这也让我想起兲朝的财富掠夺,假冒伪劣和山寨,也让我想起了LISP。
December 26, 2011
| 作者:白菜
|
分类:随便侃侃
目前为止,据我个人观察,从语法角度上讲,最让人困惑和难以理解的一种语言应该是LISP语言了。打开这种语言的代码,一眼望去,满目全是括弧,一层套一层。 这种语言特征最大的问题是,它不符合人们通常的思维习惯。LISP语言的这个特点是个整体的语言现象,而任何一种语言其实也都有一些个别的很奇特的东西, 其中有些会奇怪的让你摸不着头脑。有一个好事者在一个帖子上征集各种语言里不合常理的地方,结果收集到了320多条,问题最大最多的语言算是Javascript了,另外还有C,Java,Python,PHP等等。下面列出的是其中最有趣的几条。
1. 在C语言里,数组可以这样索引取值:
a[10]
这种写法相当常见。
然而,还有一种很少见的写法(绝对可用!)是这样的:
10[a]
解释:
2.这两种写法的效果是一样的。
在JavaScript里:
'5' + 3 结果是 '53'
而
'5' - 3 结果是 2
解释:在ECMASCRIPT规范里定义了字符串的加法,但没有字符串减法。11.6.1里有
7. If Type(lprim) is String or Type(rprim) is String, then a. Return the String that is the result of concatenating ToString(lprim) followed by ToString(rprim)
阅读剩余部分...
December 23, 2011
| 作者:白菜
|
分类:随便侃侃
为了应对类似CSDN密码泄露这样的事件可能带来的影响,特意做了个密码管理器
,输入域名点击“OK”,对每个域名生成经过特殊编码后的密码,再经过一系列处理后自动复制到剪切板。
没啥技术含量,只是提供给和我一样蛋疼的人一个蛋疼的想法。
另外,推荐一下,“奥巴码-aobama(
http://aobama.googlecode.com)”。不是美国总统的那个奥巴马,而是一个JAVA写的编码解码的小工具,我感觉其很好,好用也好玩。我使用了他的代码。
December 20, 2011
| 作者:白菜
|
分类:随便侃侃
有一点需要告知下:使用了下面的修改版/第三方/衍生版的firefox,很多事国外定制的,所以字符集设置的是en-us,再浏览一些大型网站如淘宝,腾讯微博的时候会跳转到对应的英文站点页面,可能带来不便。
今天,firefox 9 放出来了,作为firefox的忠实粉丝,自然是要去尝鲜的。
现在,chrome风头正盛,那么多人歌颂chrome,为什么我仍然坚持firefox呢?理由如下:
1.google的霸道作风我一直很讨厌。如:官方死活不提供离线安装(有人说有离线版的,确实有,但是为什么不在官网贴出来呢,藏着掖着干嘛?对于我这种办公室男,网络带宽有限,我对在线安装不感冒),firefox就做的很好,有一个公开的FTP可以随时去查看上面的各种资源:
ftp://ftp.mozilla.org/pub/ (据说,google程序员的电脑最低配置32G内存,带宽更是牛逼,但是天朝表示无语,全世界表示压力很大,大概也是这个原因吧,google的程序员认为在线安装就1秒钟的事情,为什么不在线安装呢?这也是google的chrome OS失败的原因。google总是以为现在的网络已经到了泛滥的地步了,实际上并非如此)。其次,chrome安装不给人任何选择余地,没有任何选项,强行安装到系统盘(有人又要说,你可以XXX啊,但chrome凭啥如此霸道),这明明是流氓软件的作风。
2.还是google自以为是的霸道作风,用自己的观点来决定产品。很长时间以来,chrome 14之前的版本居然不支持退出时清除浏览记录,必须写脚本或手工清除,我很无语(不信的话,网络上还可以搜到类似的技巧)
3.chrome多进程,占用内存极大,动辄上G内存,伤不起,就那么一点提速,对我来说没感觉。
因此,本人对chrome无爱。
扯回正题,所谓firefox衍生版、修改版其实就是在mozilla的源代码上重新编译的,通过设置了一些编译参数,使得性能得到提升,当然,幅度不会很大,有一些更高级的优化措施,如使用更优的指令和组件等。比较有名的衍生版有:
1.pale moon。沧月,官网
http://www.palemoon.org/。目前最新版8.0,还有3.6.28的经典版,默认英语界面,可下载中文包,感觉性能和速度提升比较明显。更新也很勤快。
2.lawliet,最新版9.0,国人所为,下载地址
http://code.google.com/p/lawlietfox/
3.pcxfirefox,最新版8.0.1,国人所为,内存占用稍大。
http://code.google.com/p/pcxfirefox
4.tete009,最新版9.0
http://www1.plala.or.jp/tete009/en-US/software.html
5.fx-ayakawa/ 凌川
http://code.google.com/p/fx-ayakawa/
不再更新和质量不高的就不再列出。
November 18, 2011
| 作者:白菜
|
分类:随便侃侃
昨天用魔方软件修改了管理员的默认用户文件夹,指向了一个新的目录,以前是c:\user\adminstrator.jjcc-105这样的,当初装机时不知道怎么弄的,变成了这个,还有一个正常的c:\user\adminstrator目录,但是用管理员账号登陆后,不会往c:\user\adminstrator里写配置,而是往c:\user\adminstrator.jjcc-105里面写,这样导致了一些问题。所以我改过来后,强制删除了c:\user\adminstrator.jjcc-105目录,结果WIN7蓝屏,自动重启后,所有配置丢失。再次重新配置,往桌面放文件夹,结果再次重启后,又丢失了,一切配置都归零,然后win7右下角提示:“您已使用临时配置文件登录。。。”表现就是上一次的所有操作都无效,都丢失了,桌面丢失,主题丢失。
网上搜了很多方案,都是似是而非,甚至胡说八道的,最后还是微软最熟悉自己的系统,在微软官方解决了。
1.首先在命令行下执行whoami /user,找到当前用户的SID,确保是administrator这个超级管理员身份。
然后是微软的解决方案:
- 单击“开始”
- 在“开始搜索”(Windows Vista) 或“搜索程序和文件”(Windows 7) 区域,键入 regedit,然后按 Enter。
- 如果出现 UAC 提示,请单击“继续”(Windows Vista) 或“是”(Windows 7)。
- 在“注册表编辑器”中,找到:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
- 在左窗格中,找到以“S-1-5”(SID 密钥)开头,后跟一长串数字的文件夹名称。然后单击每个文件夹,在右窗格中找到“ProfileImagePath”,双击验证其是否为出现错误的用户帐户配置文件。
- 如果有两个文件夹以“S-1-5”开头,且后跟一长串数字,并且其中一个文件夹以“.bak”结尾。请将“.bak”文件夹更改为正常文件夹。为此,请执行以下步骤:
- 右键单击不含“.bak”的文件夹,选择“重命名”。然后在文件夹名称的末尾添加 .ba。
- 右键单击含有“.bak”的文件夹,选择“重命名”。然后删除文件夹名称末尾的 .bak。
- 右键单击含有“.ba”的文件夹,选择“重命名”。然后将文件夹名称末尾的 .ba 更改为 .bak。
- 如果您只有一个文件夹以“S-1-5”开头,且后跟一长串数字并以“.bak”结尾。请右键单击该文件夹,选择“重命名”。然后删除文件夹名称末尾的 .bak。
- 选择不含“.bak”的文件夹,在右窗格双击“RefCount”,键入 0,然后单击“确定”。
- 选择不含“.bak”的文件夹,在右窗格双击“状态”,键入 0,然后单击“确定”。
- 选择“注册表编辑器”。
- 重新启动计算机。
- 使用您的帐户再次登录。
对注册表的后面两步操作是关键,这个网上的解决方案全都是胡扯,都没有提到这两步。详细的说明看这里:
http://support.microsoft.com/kb/947215/zh-cn
教训:千万不要相信网上的野鸡教程,微软最熟悉自己的系统,遇到电脑问题,应该上微软官方去寻找答案,微软才是最权威的。
November 16, 2011
| 作者:白菜
|
分类:随便侃侃
FTP
FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。
PORT & PASV
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。
阅读剩余部分...