对 jQuery tiny PubSub 的改进

最近在做一个项目的时候, 需要用到同事写的一个js 模块, 为了让我写的新模块与之通信, 我一开始用的是旧模块里的一个全局变量. 但是由于历史原因, 这个全局变量不知道啥时候就会被旧模块所修改, 因此遇到了不少Bug. 最后我放弃了共享全局变量的做法, 改用PubSub. 使用PubSub 的好处是减少了对全局变量的依赖, 降低了模块之间的耦合程度, 从而减少了模块高耦合带来的风险.

我之前使用的PubSubjQuery Tiny Pub/Sub, 这几行代码利用了jQuery 的事件api, 实现了相当简练PubSub, 但我遇到了一个缺陷: 在传递数组时有Bug.

$.publish('test',1);       //1
$.publish('test',{a:1});   //{a:1}
$.publish('test',[2,3,4]); //2, it should be [2,3,4] instead
$.publish('test',{arr:[2,3,4]})  //{arr:[2,3,4]}

这个问题让我很头疼, 又无法绕开, 因为这是jQuery 事件api 的写法所致. 随后我决定自己写一个PubSub.

继续阅读对 jQuery tiny PubSub 的改进

浅论php5.4 的一些不足

在刚接触php 的时候, 我十分喜欢这种脚本语言, 因为它学习成本很低, hosting 也很方便. 但是我渐渐发觉, php 作为一种低端的脚本语言, 性能也不是很突出, 过程化的设计存在诸多缺陷, 而且在oop 之路上跌跌撞撞多年无甚建树. 与javascript 比较起来, php 至少在以下方面让我感到很不爽:

  1. 在设计之初就把”.” 号用于连接字符串, 导致对象成员只能用”->” 来调用.
  2. 变量要以”$” 开头, 使用不便而易出错.
  3. 不彻底的oop 设计, 导致众多内置函数名杂乱无章, 离开了手册就没法写东西.
  4. 不能省略句末”;” .
  5. 不能使用”[]” 和”{}” 等字面量来定义数组和对象 (php5.4 起可以使用[]).
  6. 函数不是一种数据类型 (php5.4 起函数可以作为数据类型).
  7. 函数与变量的命名过度割裂.

继续阅读浅论php5.4 的一些不足

YSSY.Ajax.Uploader – 饮水思源文件批量上传脚本

大家都知道,饮水思源BBS自带的上传功能一次只能上传一个文件。昨晚有mm要自曝让我帮忙上传图片,我与饮水思源文件上传功能死掐了很久,但繁琐的操作太容易出错,最后我实在不能接受这样的重复体力劳动,不得不退出战斗。

大约半年前我就有想法给饮水思源BBS写一个Ajax上传脚本,可一直没什么动力;直到昨晚,我沉睡已久的小宇宙终于被mm的期待与失落唤醒:勇敢的死宅啊快点去战斗。

于是写了这个脚本继续阅读YSSY.Ajax.Uploader – 饮水思源文件批量上传脚本

No.iframe.for.YSSY – 饮水思源BBS增强脚本

在SNS遍地开花的今天,饮水思源BBS固守上个世纪的iframe布局,也算是人间奇景。

基于我对网页的有限的理解,iframe并非毫无用处,至少在javascript和ajax并不盛行的年代,iframe为一个网页包含另一个网页提供了可能(而且兼容性良好,成本也低)。但是我认为饮水思源对iframe的使用属于误用和滥用:信息集中于子页面(也就是iframe标签之内),母页面仅仅提供类似于导航条的功能。这简直是捡了芝麻丢了西瓜,如果我遇到有门户网站为了不重复载入顶部navigator,而把网页的主体作为一个子页面用iframe载入,真要笑掉大牙。
继续阅读No.iframe.for.YSSY饮水思源BBS增强脚本