【阅读笔记】JavaScript - Misunderstood

最近终于有时间看看新的东西了,刚才在Slideshare上面看了一个PPT,关于JavaScript的,有些地方还是值得一看的,把一些之前没有意识到的地方记录下来先。

  • 原作者有个错误,"0"和"0.0"都不是假值,空字符才是假值。
  • 0.0 + "0" = "00"。这里是做字符串相加,而0.0转换成字符串是"0"。
  • 下面的代码:
  • var x = 9;
    
    function foo() {
      alert(x);
      var x = 10;
      alert(x);
    }
    
    foo();

初一看还以为输出时9和10,其实是undefined和10。这里的关键之处在于理解执行上下文中的激活对象(Activation Object),激活对象是在执行上下文对应的作用域链(scope chain)的第一个对象,它中间除了包含传入的参数的值外,还包含所有的局部变量,并且这些局部变量的值一开始都是undefined。就这个例子来说,在foo被调用的时候,激活对象被创建,x有了值undefined,所以执行第一行的alert的时候,输出undefined;接着x被赋予值10,第二个alert就输出10了。从这点出发,一个好的做法是在使用局部变量前先声明。

  • 对于onload的事件,可以在使用之后就删除掉,以释放内存。 

使用Java中的Runtime.exec()执行Windows命令

 写这篇博客的出发点是为了回答JavaEye问答频道上面的一个问题,是问如何用Java来调用Windows上的wmic命令来获取系统中当前的进程信息。我的第一印象是用Runtime.exec()肯定是可以的,但一写就发现,事情并没有那么的简单。我又找到了一篇比较老的文章,仔细阅读,才明白了其中的细节。下面是一些要点:

  • 等待命令执行结束用waitFor(),其返回值就是命令的返回值。
  • 如果出现程序执行被挂起,没有任何反应的情况,是由于没有读取命令子进程的正常输出流或错误输出流导致缓冲区被占满,进程被锁住。这个时候需要把输出流中的内容给读出来。最好的做法是使用两个线程,分别同时读取正常输出流和错误输出流。
  • 执行Windows平台上的命令时使用cmd.exe /C,如cmd.exe /C dir。
  • 记得关闭命令子进程的输入流,通过Process.getOutputStream().close(),这样不会导致命令子进程被锁住。

平台的威力

写这篇文章的确是有感而发,是古人所谓的言为心声。我这里要说的是一个好的平台所带来的影响。我大概会举三个例子来说明这一点。

  • 黄健翔:黄健翔大家可能都不陌生,2006年世界杯时候的激情解说门,让大家都记住了他那激情的叫喊。接下来就有了从央视出走的事件。且不说他出走背后的动机是什么,给我的感觉是离开央视之后的黄健翔,就慢慢的淡出了大家的视野。可能以前大家会觉得他很牛,在CCTV5主持不少的节目。不过这个时候,我才明白,牛的不是他个人,而是他背后的那个强大的CCTV。离开了CCTV的黄健翔,虽然依然还做着与体育相关的事情,但是已经没有当年的影响力了。
  • 旗舰工作室:可能有些人对于旗舰工作室并不是非常熟悉,不过提到《暗黑破坏神2》这个游戏,相信知道的人要多得多。旗舰工作室是由在暴雪公司做《暗黑破坏神》这个游戏的核心员工组成的。他们离开了暴雪,成立了旗舰工作室,并开发了《地狱之门:伦敦》这个游戏。遗憾的是,这个游戏的运营并不好,旗舰工作室也倒闭。
  • 我的博客:这其实是我写这篇文章的最初的动机。我之前用过很多的博客服务,CSDN、javaeye等,后来我自己租下了这个主机空间。慢慢的,原来的博客服务都已经停止更新了。不过有趣的是,就访问数量来看,最多的还是javaeye上面的那个,CSDN的那个在四年前就停止更新了,访问人数依然不少。更令人郁闷的时候,我这个博客上面的广告只能卖六分钱一个星期,而javaeye上面的那个可以卖到一毛二。

上面的几个例子看起来不相干,不过也给我们很多启示。在很多时候,我们需要做的是首先依赖一个平台,然后等自己羽翼丰满之后,再出来扑腾。过分高估形势,对自己是很有害的。

直接结果就是,我把javaeye的博客重新启用并更新。当然,现在这个博客仍然是最新的,javaeye的博客只是把这里的文章复制过去。

 

开始翻译John Resig的博客文章

 在得到John Resig的许可之后,我将陆续把他博客上面的文章翻译成简体中文。文章的翻译版本将陆续放出,并保持与他博客的同步。John Resig是jQuery的作者。
 
所有的翻译之后的文章将会同时发布在专门的站点以及译言网
 
目前已经翻译一篇文章:确定浏览器市场份额
 
欢迎大家批评指正。

“简约在线视频播放器” 版本更新

 “简约在线视频播放器”是我第一个基于GAE的应用,当时也花费了不少的功夫来实现。不过还是不够完善,主要是界面过于简陋,一直没有时间来完善它。今天花了点时间找了个CSS模板,并把甲型H1N1流感最新动态Mashup中的视频搜索部分的功能整合进来,就得到了这个新版本。

在有余力的情况下,不断更新,见更新日志

新版本的截图如下,感觉上比之前的好了不少。

 

 

代码片段(Code Snippets)与软件复用

我一直觉得软件复用是一个很大的忽悠,在目前的软件开发中,复用也就只能到代码行和方法级别,要到组件级别很难。就程序员来说,正如我在之前的一篇博文中提到的,目前的代码复用基本就依赖搜索引擎。我经常会遇到这样的场景,每次想用一段代码,但总是想不起来具体的内容。于是就打开google,搜索一把,然后复制粘贴。典型的情况有:

1)搜索HTML文件的DTD定义,就是HTML文件最上面的那句话。HTML 5当然简单,HTML 4的那3种flavor就够人折腾的了。

2)Google AJAX library API中的script文件URL。当我想在页面中用jQuery的javascript的时候,总是不记得那个长长的host在google上面的URL。

XML转义与Base64

XML目前在各种场合用得都比较多,对于XML的转义,可能大家都不是很陌生。不过当一个XML文档被保存在HTML的DOM中,比如作为<textarea>的内容;或是作为URL的参数来传递时,经常会发生转义不匹配的情况。当该XML文档跨越多个系统边界的时候,有时候就很难追踪出问题到底出在哪儿。我的解决办法比较简单,那就不要转义了,我把XML文档直接用Base64编码一下再进行传递,用的时候再解码回来,这样就省掉了很多麻烦的事情。

 

用Dojo来作这个很容易,因为dojox.encoding包中就自带了Base64编码和解码的功能。示例代码如下:

与破窗做斗争

 破窗(Broken Window)理论说的是如果一个系统已经满是漏洞,那么后来的修改者就会变得很随便;相反如果一个系统非常的不错,那么后来的修改者在做出修改的时候就会很小心。这就是所谓的“从善如流”吧。
 
该理论的来源是科学家做的实验。一个街道,如果窗明几净,那么在里面居住的人都会很注意干净,垃圾什么的都不会乱也扔。但是如果打破几块玻璃的话,整个街道就会开始慢慢的变脏变差。这其中的心理变化也是很显然的,大家都会这样去想,“反正都已经这样了,我再怎么折腾都无所谓了,也不是我一个人造成这样的。” 大家都介意成为第一个破坏者,但是都不介意成为第N+1个破坏者。
 
这种情况在软件开发中尤其明显,当维护一个混乱的系统时,很少有人能够一如既往的保持良好的态度;而如果一个系统非常的完善,那么后来的人从自己的信誉出发,都会非常的仔细和小心。这点在很多成功的开源社区和项目中得到了验证。在一个开源社区里面,很少有看到捣乱的人。这一方面得益于良好的管理,另外更重要的一方面在于很好的代码基础。当某个开发者不尽职的时候,会很容易的被社区抛弃。
 

使用Wubi安装Ubuntu

这几天一直在玩Ubuntu,之前在台式机上面装了一个Ubuntu 7.04,本来打算直接升级到最新的9.04,后来试了一下,发现只能部分升级,而且有的软件包有问题,所以就打算重新安装一个新的。我比较土,到后来才搜索到Wubi这个东西,用了之后觉得非常不错。

  • 安装Ubuntu就像一个普通的应用程序一样方便,卸载也方便。
  • 不需要对硬盘进行分区,比较安全。

 
在安装之前,先通过迅雷或BT把相应的安装ISO文件下载下来,放在与Wubi相同的目录下,Wubi就会用这个ISO文件,可以大大节省下载的时间。
 
Ubuntu进化到现在这个版本,我觉得已经非常不错了。在易用性和用户体验等方面有了很大的提升,用起来很舒服。惟一我一直觉得非常不爽的是中文输入法不好用。

模拟π的计算 - 第一次尝试<canvas>

随着HTML 5规范的逐渐为人所知,<canvas>元素也被广泛使用。

很多人都开始用它做一些好玩的事情,如动画等。

我也做了一个使用<canvas>元素的小应用,用来模拟π的计算。

π的计算方式有很多,我这里用的是布丰的投针法。其基本思路是在地上划上几条平行的线,

然后随机的扔针,根据针与线相交的概率,就可以计算出来π。

 

下面给出了该应用的截图。

模拟π的计算

同步内容