是非之地

博客园首席处男所在的小窝

 

2011年6月3日

javascript的哲学

嗷嗷说:思想和哲学才是一门语言中最重要的。

忽然就想, 天啊, 那javascript的哲学是虾米捏?

 

大概总结有下面这几条(写几条算几条, 所以不提前说到底有几条):

1 想插就插, 想拔就拔。

 呃, javascript没有楞次定律存在, 或者说楞次定律已经不能阻止你插入:一个对象了。

除了一些安全性的内置对象。 或者现在那些蛋疼的get和set(个人很不喜欢也不建议使用。。。)

 

封装不等于一堆的get和set。 

 

2  为达目的不择手段

javascript可以说是跨平台最好的语言, 木有之一

=。=

我一个同学说的。

 

说只要你装了浏览器, 就随便跨。

但是跨浏览器不比跨平台容易啊, 有木有啊有木有!!!!!!!!

这javascript得见人说人话, 见鬼说鬼话,

有时候是先判断对方是人是鬼(判浏览器), 有时候是 试着说一句,不行再改口(TryThese)

真的是太纠结啦!!

 

3 游侠风格, 无视世俗眼光。

呃, ECMA丫的定了那么多标准, 谁去读完过?

没用的。

最简单一个例子:

for in可以遍历一个对象的所有属性, 这个顺序, ECMA是不保证的。

后来, 似乎谁说又定了个顺序(我不保证这个是真的啊, 我从来不去看ECMA文档的)

然后说xx方式的顺序就是标准了。 xx浏览器你是不对滴!!!

 

不对你妹。 

我就关心大家实现的怎么样。

实际上你定的标准, 只对以后的浏览器, “可能” 起作用, 还仅仅是可能!!!

丫的浏览器比你先出来的你凭什么说你是标准啊?

能跑才是王道。

 

4  安全第一

随着《少年英雄方世玉》 的第二部的放映, 变得流行了起来。

javascript的任何特性首先考虑的就是安全性。 

实际上对于任何跨平台能力强大的东东, 安全性都是第一位的。

呃, 就算不跨平台安全性也不是不重要, 只是能跨的得对自己要求更严格。

=。=

怎么这么拗口。

比如跨域。 比如本地文件。 比如cookie, 比如, 等等。

尤其是共用的东西, 不弄点防护措施隔离下, 日子还有法过吗?

=。=

怎么感觉这么邪恶。

posted @ 2011-06-03 12:01 undefined 阅读(83) 评论(0) 编辑

2011年5月9日

为什么软件就可以随时推倒重来

大家普遍知道的一个故事就是:

软件经常推倒重来, 但是盖楼房不行。

从来没有哪个楼房盖到一半的时候推倒重改的。

 

然后大家以此为感慨, 开始拼命的研究各种技术, 让软件重来的更容易一些。

 

其实大家的方向错了。

 

 以前我们一直以为软件行业与其他行业存在差异, 导致了我们经常重来。

实际上没什么差异。

 

最近买了一本教你如何卖自己的照片的书, 大概介绍谈判技巧与报价签合同等等方面知识的。

我惊讶的发现, 里面的谈判其实和软件的谈判是一样的。

 

他提到, 卖照片, 如果这个照片是不存在的, 是要试着去拍摄的, 

那么, 首先是要收费的!

然后如果拍摄到一半客户觉得不好, 要重新拍, 

那么已经拍了的这部分是要收费的!!!

 

 后面的我还没彻底看完, 总之就是这个也要收费的, 那个也要收费的, 客户你爱怎么折腾怎么折腾, 我绝不会降低报价给你拍的!

因为我们这是“艺术” !

 

搜噶, 我们做软件的则没这魄力了。

甚至恰恰相反。 具体我们怎么做的我就不多说了。 你们都懂的。

 

反过来, 楼房没有盖到一般推倒重盖的是吗?

但是, 有没有盖到一半客户觉得不合适的!!

有没有!!!!

 

客户觉得不合适, 大家互相谈不拢, 最后烂尾的, 有没有!!!!

楼房只是烂尾了不管了而已。 软件只是因为“重构的太容易了” , 注意是太容易了,

所以才不断的答应客户, 改!

反正只是代码而已!!!!!!

 

这就是为什么重构的方法越来越easy, 影响越来越小, 结果软件危机依然没法解决的原因。

 

楼房烂尾的时候, 一堆人的钱砸在那呢。 你看着办。 推到了重盖完全可以解决问题, 但是所有投资商血本无归了, 你们看着办吧。

所以才选择了硬盖!甚至欺上瞒下的混过去。 只要不出事, 一切好说!

 

因此我觉得以后我们还是不要用盖楼和写软件做对比了。

 

人家是暴利野蛮行业, 我们怎么比得了。

posted @ 2011-05-09 14:25 undefined 阅读(36) 评论(0) 编辑

2011年4月26日

你要的BI

A公司给B公司做了一套很强大的BI系统。
B公司很开心。

这个系统很强大, A公司从中收取了大量的收益。

然而有一天, B公司忽然提出系统分值有些许差异。

因为B公司对A来说很重要, 所以A公司干脆直接派出了自己公司的架构师去解决问题。

架构师很快分析出了系统瓶颈, 找到了问题所在。因为系统存在低级的SQL注入, 也就是说可能会有人入侵系统修改数据。

但是让他不解的是, 为什么这么明显的错误一直在使用却没有被发现。

于是他带着几个高级工程师很快解决了问题。

但是客户似乎并不满意。

架构师用尽了全身的力气, 去优化, 去调整。

最终客户却越来越不满意。

最终架构师愤然辞职, 项目无人接手, 被迫取消。

——————————————————————————
A公司给B公司做了一套很强大的BI系统。
B公司很开心。

这个系统很强大, 公司慢慢的开始依靠这个系统了。

不过B公司的老板一直有一个事情很郁闷。
因为他们公司的考评分数也是系统直接给出了。
而和他出生入死的那几个兄弟, 有一个人,分值低的要命。
人事部实在不知道如何处理才好。

于是老板找到了A公司, 试图解决这个问题。
A公司派来一个很聪明的技术人员。
老板对这个技术人员提的要求是:
“似乎人事评分这里给的分值有些与实际不符。 请修正这个问题”

技术人员通过调研, 分析, 调试, 最终确定了α模块有一点点的瑕疵。
于是他带着大家修复了这个问题。

真的, 他手下的人也是相当的厉害。

然而老板的那几个兄弟分值全都变低了。

是啊, 他们每天上班就是偷偷菜, 分值能高才怪呢。

不仅如此, 连老板本人的分数也是在直线下降。

于是老板向A公司抱怨。说他们的技术人员太烂了。 怎么越做分数错的越大呢?

A公司被迫将项目延期, 不计成本的投入人力来修复这个问题。

直到最后也没有搞定。

最后项目被终止, 合同取消, 系统停用。。

——————————————————————————


A公司给B公司做了一套很强大的BI系统。
B公司很开心。

设计系统的人是一个只会陪客户喝酒的人。

他叫了几个外包人员拼拼凑凑的用网上down的代码把系统给完成了。

然而出乎意料的是客户居然对这个系统非常满意

并很即时的付了全部的款,

设计人员以及骨干人员都得到了大量的分成。

然后设计人员因为成绩优异被猎头发现而高新跳槽走人。

外包人员各回各家。

直到有一天他们听说系统因为升级失败而被迫取消不再使用。
他们都很惊讶。

——————————————————————————

C参与了A公司给B公司做的系统的开发工作。
他只是一个完全没有编码经验的人。
公司派他去加入外包团队完全是因为没有人愿意要他。

有一天测试人员报出一个SQL注入漏洞的时候, 他震惊了。
没想到过原来程序还可以这样用。
因为这个, 他被扣了好多money。

但是慢慢的他却开始对这个产生了兴趣。

最后他做了一个大胆的计划:
判角色。
如果登陆人的ID是总经理,并且时间是指定时间。那么他会单独提供一个做SQL注入的页面。
这个页面是偷偷加的, 没有送测。
最终瞒过了测试, 代码被送到了正式环境中。

他知道, 如果不出意外, 漏洞被发现的时候, 他早就不知道被哪个公司叫走了。

——————————————————————————

D是B公司的经理。
他非常反对系统的上线。 但是又不知道如何反驳IT提出的建议, 就允诺暂时试用看看。
系统上线后他发现自己居然可以按照一个小页面的提示来随意修改员工的评分。
于是他很开心, 批准了IT的全款, 并告诉IT, 这个系统非常完美, 不需要再修改了。

直到他发现了自己修改自己亲信的分数的时候, 有一个和自己出生入死的哥们的分值居然不能被修改。
于是他叫来了A公司的工程师, 指出了几个人的分值过高, 并指出了这个是正常的。
然后告诉了A公司的工程师:你懂的。

然而让他匪夷所思的是A公司的工程师居然如此死脑筋, 越改越错。

最终他借口质量不合格, 终止了项目。

----------------------------------------------------

E是B公司的服务器。
它在运行系统的时候忠实的执行了C写的代码。

然而C的代码里面,
因为一个匪夷所思的异常, 导致了流程的混乱,
最终导致了那个偷偷加入的页面永远会被显示。

E忠实的执行了这个代码。

然后它得到了最好的照顾, 最好的优待。

一个月后, 代码发生了变化。
E依然忠实的执行了代码。
又一个月后, 它被抛弃在了机房里再也没有处理过什么有用的数据。

现在它每天最大的事情就是在思考, 当代码到来的时候, 到底要不要忠实的执行?

posted @ 2011-04-26 18:36 undefined 阅读(77) 评论(2) 编辑

2011年4月21日

非主流javascript教学(七)

每一个没有在javascript里面写过正则表达式的前端工程师, 上辈子都是折翼的天使,

你伤不起啊~~

 

用javascript , 就很难不用正则。

我们说:寻找节点的时候, 我们不是有 DOM吗, 不是有jQuery吗, 正则?多此一举了吧?

 

不过请记住:

1 你还能找到什么技术写起来比正则更装13吗?不能!

2 没有2了。 不能再2下去了。

 

我们用正则, 有很多地方:

1 ajax之后,分析。

  当然, 有的人说,你太土了。 还正则, 我ajax拿到的从来都是JSON

  呃, 这个问题, 我想说。。。 我经常在本地用Ajax来抓网页或者刷论坛的。 因为本地文件没有跨域的问题吗。

比如这样:

            $.ajax({
                type: 
'GET',
                url: 
'http://www.baidu.com/',
                success: 
function(msg){
                    alert(msg);
                }
            });

 

 注意要用IE, IE!!!

因为火狐相对规范一些, 做坏事难一些。你懂的。

 

so, 这个时候, 当然, 可以用$(msg)来处理。 但是我打赌你拿到这个东西之后会很想分析, 而不仅仅是查找节点。

 

2 验证。

大家都懂的, javascript最初就是为了验证而诞生的。 因此, 没有正则, 它混个屁啊!!

 

啊, 不对。 应该说:javascript这么高贵的语言怎么可能连正则都没有呢!!!!!!

 

 然后问题来了:

1 既然javascript是一门面向对象的语言, 那它有正则表达式类吗?

肯定有!!!! 怎么会没有!!!你这是在鄙视高贵的javascript吗?

2 既然有, 那么我们可以去new喽?

当然可以!!怎么会不可以!!!你这是在鄙视高贵的javascript吗?

3 那, 你一定经常new喽?

当然。。。。不!!! 你这是在鄙视undefined吗?

 

=。=

我们知道, 正则的构造, 一般都比较慢。

比如,C#, 一般大家都会编译正则吗。 最不济也要做个正则的池, 在里面取。

此是题外话, 不多说了。

 

但是, 我们高贵的javascript, 怎么会做这么傻的事情呢?

我们天生就有池。 你只要使用字面量即可:

 

 

var r_int = /^[0-9]+$/

 

当你第二次用相同的字面量声明同一个正则的时候, 他们会自动指向同一个对象!

嗯, 很像C#的字符串驻留机制是吗?

有点吧。 C#肯定是照javascript抄的。 以微软的秉性, 没的跑。肯定的。

 然后, 有了正则, 怎么办?match?

javascript里的方法叫exec。 要知道正则简直可以说是一门强大的语言。 用exec做名字一点不过分。

再说你能compile, 不能exec, 怎么说得过去呀!

不过我们验证一般只看对不对, 而不关心分组, 是不是?

所以一般用test方法就够了。

 

推荐直接test的理由有两个:

1 test快。

2 exec慢。 而且test能搞定的用exec太大动干戈了。

3 undefined同学是做测试出身的。

 

=。=

posted @ 2011-04-21 13:55 undefined 阅读(51) 评论(0) 编辑

2011年4月20日

写个批处理继续使用Reflector

去客户那出差几天, 消息闭塞啊

回来发现我可爱的Reflector不能用了。

我这个丧心啊。

 

然后他们说博客园首页有个破解版的啊

可是是不是因为我回来的太晚了啊?我已经搜不到那篇文章了。

 

然后他们说,其实你改个时间可以继续用的。

只是得自己改回来。

 

好麻烦啊。 我这个人懒的很。

干脆写个批处理替我改时间吧。

 

代码如下:


@echo off
date /> tmp.txt
date 2011/03/01
start d:\reflector\reflector.exe
rem 这个ping只是为了延时。 Reflector启动太慢了
ping 127.0.0.1 -n 5 > nul
date < tmp.txt
delete tmp
.txt

 

 邪恶的undefined再一次无耻成功。。

 

posted @ 2011-04-20 15:07 undefined 阅读(89) 评论(2) 编辑

2011年4月19日

非主流javascript教学(六)

摘要: 呃, 这次我们提下jQuery我们知道jQuery是javascript里面一个很优秀的家伙。很多人甚至是为了jQuery而开始学习javascript的。比如undefined同学。=。=然后某同事在用jQuery的时候出问题了。呃, 出什么问题?jQuery能出问题无非就这么几种:1 jQuery有bug。2 Ajax的问题(基本上可以认为jQuery有bug) 3 $符号的冲突问题。大家都知道$符号冲突了, 调用noConflict就OK了呗。其实不是这样的。其实问题比这严重的多。比如我同事碰到这个, 他们在项目中使用了$, 大概就是这么定义的:function $(id){retur.阅读全文

posted @ 2011-04-19 16:25 undefined 阅读(75) 评论(3) 编辑

2011年3月24日

MissingMethodException

摘要: 一个很恶心的问题啊。纠结了我很久。我这里做一个插件类型的东西。比如, 一个窗体叫MainForm,然后一个接口叫IPlugIn。然后IPlugIn在载入的时候调用IPlugIn.OnLoad方法。我写了一个IPlugIn, 他在OnLoad的时候, 会自动在MainForm里面添加一个菜单。于是我就在MainForm类上加了一个AddMenuItem的方法。然后呢, MainForm我可以通过一些办法拿到, 但是拿到的时候是Form类型, 而不是MainForm类型。所以要as一下, 然后调用MainForm上的方法。大概就是这么个结构。好, 问题来了:visual studio不知道抽什么疯阅读全文

posted @ 2011-03-24 15:50 undefined 阅读(123) 评论(1) 编辑

2011年3月22日

侃侃jQuery

摘要: jQuery这玩意的优异性是毋庸置疑的。连YUI的作者都说他好, 那他就是真的好了。至于诋毁jQuery的人, 这也很容易理解, 他们经常搬出来的理由就是:性能。摆脱, 不是什么语言都没事就讲讲性能的。尤其是客户端脚本这东西。 你还能拿来做大规模计算啊?如果不这样做, 那么, O(3), O(30),O(300)有什么区别啊还不都是O(1)啊?再说jQuery查询出来的东西可以不断使用, Query这东西也Query不了太多次。你非要每次使用都去Query一遍, 然后跑来说:看, jQuery多慢!!这不是找抽么。个人觉得jQuery的优点是:1 学习成本低。 没听过哪个会写CSS的人不能迅速阅读全文

posted @ 2011-03-22 15:24 undefined 阅读(67) 评论(1) 编辑

2011年3月4日

非主流javascript教学(五)

摘要: 题记:18岁以下禁止阅读本文。 javascript既然是一门完全面向对象的语言, 那么他的属性就也都是对象。更牛叉的是, javascript的对象是变形金刚, 他可以随心所欲的变化啊。可以拔点东西下来, 插点东西上去。插啊插。。。=。=比如有个对象, 叫MM1。 想插这个MM, 怎么办?少年, 亮兵器吧。。。你想插什么上去, 就可以插什么上去。好吧, undefined先来!me上场, 执行以下代码:MM1.JJ={};=.=得, 后面的同学没的玩了。真的吗?不是这样的。你可以继续插啊, 加个尾巴加个什么的, 都没问题的。然后有人说:undefined你太无耻了, 你这样让我们几个怎么办啊阅读全文

posted @ 2011-03-04 11:26 undefined 阅读(75) 评论(0) 编辑

2011年3月3日

一名曾经的测试人员, 看大家贡献的关于2的n次方的检测的代码

摘要: 合格 刚刚首页多了一篇文章, 关于判断一个数字是否是2的n次方。大家贡献了一大堆各种想法。整理了下, 有以下这么多。me以前是做测试的, 现在乱七八糟什么活都做,一直没好好学算法, 没法写出很好的算法来娱乐大家。 me算法很弱的。但是me挑刺的习惯倒是没有改正。 所以很high的开始分析别人的代码。 让我们分析一下大家回复的几种典型代码(运行正确的咱们就不分析了):1 宏定义。 #define I...阅读全文

posted @ 2011-03-03 15:34 undefined 阅读(2598) 评论(39) 编辑

导航

统计

公告

昵称:undefined
园龄:3年6个月
粉丝:59
关注:1

搜索

 
 

常用链接

随笔档案

相册

最新评论

阅读排行榜

评论排行榜

推荐排行榜