近期解决一个问题的时候,需要一个简单的目录遍历。目录遍历挺常见,操作一个文件夹里的所有文件,替换或者添加删除某些东西是非常普遍的操作。由于 nodejs 本身并没有提供类似的API,所以这部分就得由自己实现。
虽然没有直接的遍历API,但是 nodejs 的文件操作也已经非常便利,用 fs.readdir 和 fs.stat 这两个API的组合就能达到目的。
近期解决一个问题的时候,需要一个简单的目录遍历。目录遍历挺常见,操作一个文件夹里的所有文件,替换或者添加删除某些东西是非常普遍的操作。由于 nodejs 本身并没有提供类似的API,所以这部分就得由自己实现。
虽然没有直接的遍历API,但是 nodejs 的文件操作也已经非常便利,用 fs.readdir 和 fs.stat 这两个API的组合就能达到目的。
拿出这么一块硬盘并非说明了自己使用计算机的时间,而恰恰只能说明自己是多么的穷苦。我在上了大学之后才有了第一台电脑,但是很快因为在学校呆的时间比较长所以就把机器借给别人使用。后来,我用废旧的零件组装了第二台机器,于是这块硬盘被我从二手市场里论斤买来,然后装进了一台奔三的机器里。
那时的主流硬盘尺寸为160G,CPU为奔四2.8G。所以这块2G的昆腾即使配上奔三依然短板,因为奔三时代的主流硬盘容量就已经是30G了。所以这块昆腾2G硬盘,从现在的角度来看,确实有一些年头了。电路板上的灰尘向我们展示了它这十几年来的沧桑——而就是这么一块略感古董的5.25寸硬盘,最后还是被我拆了。其实这块硬盘除了有几处坏道被我屏蔽以外,时至今日都能正常工作。里面是一个98精简版系统,和一个叫心跳回忆的有约会失败BUG的游戏,然后,就再无其他了。
我的相机——Canon PowerShot A590IS 我写过多次,可惜它命运多舛,这次又成了我的博客内容。在 修复A590IS电池报警缺陷问题 里,我解决了电池容量误报的问题。今天,我修理的是折断的电池仓扣
A590IS 的一大缺点就是机身太差,强度实在有点弱不禁风。特别是电池仓的扣子,一次跌落就会轻而易举地折断。我的相机的这个在前面板的挂钩一样的钩子很早就折断了,这个扣子的材料和固定用的另一个主机身的扣子的材料不同,很脆,所以才异常脆弱。以前,因为一直有完好的机身上的扣子挂住电池仓盖,所以勉强使用至今。在修复了电池误报问题后,理应不再受电池困扰的我却仍偶尔遇到电量问题,仔细查看在发现是因为缺少一个扣子,电池盖盖不严而总是接触不良。
于是,虽然这是一个坏了很久的地方,但既然影响使用就应该想想办法。
最近一周一直在写node,感觉很爽。不过 node 虽好却没有 DOM 还是有很多不方便的地方。好在有 jsdom —— 一个 W3C DOM 的 JS 实现。用这玩意相当犀利,它不仅可以将文档解析成 DOM,而且,你还可以用 YUI 或着 jQuery 去操作生成的 DOM。这在从页面中提取数据时格外有用。
虽然在类Unix系统上安装jsdom非常简单,但在window上就要麻烦许多,下面这些依赖还得独立安装。
装完后我赶紧使用了一下:
1 2 3 4 | var jsdom = require('jsdom'); jsdom.env('http://www.swordair.com',['http://localhost/aptana/code/js-lib/jquery-1.7.1.js'],function(errors, window){ console.log("contents:", window.$("div.blog-update-title").next().html()); }); |
效果妥妥的,无法想象的便利和快捷!
标题杜撰自特修斯之船(Ship of Theseus),一个著名的古老的哲学问题。wiki上这么描述:
Plutarch thus questions whether the ship would remain the same if it were entirely replaced, piece by piece. Centuries later, the philosopher Thomas Hobbes introduced a further puzzle, wondering: what would happen if the original planks were gathered up after they were replaced, and used to build a second ship. Which ship, if either, is the original Ship of Theseus?
在国内,也随着诸如十个著名的悖论之类的文章流传甚广:
一艘可以在海上航行几百年的船,归功于不间断的维修和替换部件。只要一块木板腐烂了,它就会被替换掉,以此类推,直到所有的功能部件都不是最开始的那些了。问题是,最终产生的这艘船是否还是原来的那艘特修斯之船,还是一艘完全不同的船?如果不是原来的船,那么在什么时候它不再是原来的船了?哲学家Thomas Hobbes后来对此进来了延伸,如果用特修斯之船上取下来的老部件来重新建造一艘新的船,那么两艘船中哪艘才是真正的特修斯之船?
还在大学时代其实就对这类哲学问题非常着迷,不过后来现实生活的冲击里渐渐觉得哲学,其实还是适合做老年人的玩物。这个特修斯之船的问题从当年听到后就一直没有想通,直到自己遇到这样的事——十多年的老永久自行车,一辆伴着我从初中直到大学毕业的自行车,在经历岁月洗礼后,被大修了数次——现在它是否还是我的爱车?如果不是,从何时开始的?
前段时间,在写一个placeholder插件的时候,遇到了一个Chrome下的诡异问题,一段简单的代码,就可以使得浏览器弹出无限循环的 alert 提示框。
我用的代码片段精简到最后是这样的:
1 2 3 4 5 6 | <input id="test" placeholder="placeholder" type="text" />
<script type="text/javascript">
document.getElementById('test').onfocus = function(){
alert('focus!');
}
</script> |
可能是一时图方便,没log而是用lalert。结果当点掉alert提示框,Chrome会重复 focus 事件,而其他浏览器则不会。
我用的是 Chrome 18,看起来在 alert被点掉的瞬间,输入框再次获得了一次焦点,而这次的焦点获取同样触发了 focus 事件,再次弹出alert,然后如此循环往复…
好在这种现象只存在于Chrome里,其他浏览器都完全正常,虽然它们在点掉 alert 弹出框后的行为也不尽相同,但是无一会重复触发 focus。
随后我测试了主流浏览器的行为,整理一张简单的表以备参考。
认识我的人都知道我有多么喜爱向日葵,以至于网名也与葵花有关。当然也不算是无缘无故喜欢上的,儿时的某些景象会像烙印一样镌刻,葵花在我心里就是这种感觉。当下我又种起了向日葵,只是品种是盆栽,而不是株高数米的庞然大物。
儿时我曾经种过两次向日葵。那时还有自家菜田,能放下很多蔬菜和花草,若非有这样的环境,恐怕一辈子都难接触到真正向日葵的风采。
之前写过一篇 开发过程中的调试样式,讲述了著名的37signals团队如何用样式视觉化代码的缺陷。但那只是浅尝辄止地提及了一下,现在我整理了一份相对完整的样式表。
去年我翻译了 HTML5 differences from HTML4,时隔约快一年了,这份工作草案再次更新。而我也开始着手更新自己的翻译稿。
这次的更新量相当大,所以翻译完整更新以及修订需要一些时间,但我会尽力最快地拿出更新稿。今天乘空的时候稍稍对比了一下两者,如果你读过去年5月25日版本,无论是英文原文,或者是我的翻译稿,那么你就可以从下面了解一些当前的最显而易见的改动。
早先,我详细地写过2篇关于 box-shadow 的文章: CSS3 box-shadow 详解(1) 以及 CSS3 box-shadow 详解(2)。但用现在的眼光来看,内容已经有些旧了。趁着这片闲言碎语,对 box-shadow 再做一些补充。
box-shadow 是我最喜欢的CSS3特性之一,它能创建凸显层次的阴影,但却还可以充当很多角色:边框/层叠/渐变/勾线,等等。当前浏览器的支持程度已经非常理想,除了IE8及以下,所有浏览器都已经更新到无前缀的支持——这跟一年前的情况很不同,那时,一些浏览器如firefox实现的 box-shadow 还存在占用空间的bug,Webkit类的模糊算法非常僵硬,随着这一年的发展这一些问题都已被克服。如今存在的问题只有两个,部分移动版浏览器的不支持,以及Opera在多阴影高模糊值时的效率低下。但相信这些问题也都能尽早解决。