RSS Feed
  1. 我常用的Mac和iPhone软件

    April 5, 2012 by Luin

    最近买了Reeder的iOS版,感觉甚爽,尤其是和Read it later配合使用,给大家推荐一下;顺便列举一些我常用的Mac和iPhone软件。

    Mac

    浏览器
    两年前的我还在整天和前端打交道,HTML, CSS, JavaScript写个不停,也就是在那个时候我买了自己的第一台MacBook,而开机的第一件事就是装浏览器,Safari, Opera, Chrome, Firefox, IETester(装在VMware的Windows XP里)全部都装上并摆在桌面上,看着心里就有底。

    不过现在我仍然在用的浏览器只有Safari了,原因主要有:

    • 写前端不再考虑IE6,而且有经验后写出来的网页直接放在IE7上也不会有什么问题,更不用说Firefox等现代浏览器(而且我现在很少写前端了)。
    • Command + Z可以撤销上一个关闭的标签(而不是Firefox的Command + Shift + T)
    • Lion刚出时就支持全屏模式
    • 我很喜欢它的外观啊(但我不喜欢它的图标)

    前些日子出来个QQ浏览器,用起来同样很爽,也因此把Safari打入了几天冷宫。不过Bug频出让我不得不继续用我的Safari。

    中文输入法
    我在Mac用了好久的搜狗输入法,很好用,词库全,支持皮肤。但是偶尔也会出几个Bug,最典型的就是选词窗口关不掉,一直浮在上面恶心你,不过总体上还是很值得推荐的。

    我现在用的是Lion自带的输入法,挺不错的,不再用搜狗输入法的原因除了上面提到的Bug以外,主要还是想“换换口味”。

    下载
    现在用QQ离线下载+Safari自带的下载,教育网连接QQ离线下载服务器速度还是很快的。迅雷什么的太卡太不稳定所以装上后用了几天就删掉了。

    播放器
    音乐播放器:无。我主要在网上听,经常用的是虾米。在线听歌的好处就是不用下载,随时更新。很适合我这样懒且不追求音质的人。

    视频播放器:射手播放器,自动匹配字幕什么的太有爱的,真心离不开。

    其它
    Clean: 我实在是太喜欢这个小工具了。它能每天定时把桌面上的所有文件移动到Documents文件夹,对于我这个经常能把桌面塞满的人再适合不过了。

    dRadio: 朋友做的豆瓣电台Mac客户端,UI和功能都无可挑剔,为了这个超赞的软件去用豆瓣电台吧!

    Sequel Pro: 很棒的MySQL管理客户端,phpMyAdmin终于可以删掉了。补充一下,虽然名字里有”Pro”,不过人家确实是免费的哦。

    iPhone

    iPhone下除了Reeder + Read it later外简单列举一下我最近常用的软件和游戏:
    随手记:记帐很好用,而且借助街旁API提供附近商家功能,借助我查查提供扫描条形码功能,很方便。
    Draw Something:超火的游戏。
    Game Dev Story:模拟经营游戏,经营一家你自己的游戏公司。虽然画面一般,但就游戏性而言简直就是神作。
    Flick Soccer: 扔纸团和足球结合的游戏,限时免费时抢到的,喜欢玩Paper Toss的人不要错过哦。

    顺便推荐一个网址收藏服务:Kippt,功能很简单,帮你收藏并整理你的网址,可惜没有iPhone客户端,不过可以把他们的网站添加到主屏幕上。


  2. 让阅读更轻松,readability for node.js发布

    March 31, 2012 by Luin

    Readability是从一个开源项目发展而来的产品,该项目托管在Google Code上,不过现在已经不再维护。由于其最初设计在浏览器上运行,在node.js中难以使用,而且转换效果和Readability现在的服务也相差较大。所以这几天我重写了这个项目,具体更新内容附后。

    项目托管在Github上。

    更新内容

    • 重写代码,增强可读性,更符合node.js书写风格,实现CommonJS标准,并利于服务端调用;
    • 支持GBK, GB2312等编码;
    • 识别/兼容更多的视频网站;
    • 增加提取文章标题功能;
    • 对Wordpress搭建的博客进行特殊处理,效果更好;
    • 性能优化(去除了针对IE浏览器的Hack,并使用了V8的trim函数代替正则表达式等);
    • 重写计算链接比率的部分,对页内锚点做了修正;
    • 修复会忽略部分网站导航链接的问题;
    • 修复会删除正文中独立img的bug;
    • 增加debug开关;
    • 支持中文标点(readability以标点作为判断正文依据之一);
    • 增加延迟求值功能,在迭代时速度更快(当不需要文章内容的情况下);
    • 支持图片、链接的相对路径转换。

    TODO

    • 分析文章评论、Tag等;
    • 更多性能提升;
    • 兼容性改进;
    • 增加测试、benchmark。

  3. module.exports还是exports?

    March 30, 2012 by Luin

    node.js通过实现CommonJS的Modules/1.0标准引入了模块(module)概念,一个模块可以通过module.exports或exports将函数、变量等导出,以使其它JavaScript脚本通过require()函数引入并使用。

    现在有一个问题:到底应该用module.exports还是用exports呢?

    最好的方法就是查看node.js的官方文档中关于module的介绍

    In particular module.exports is the same as the exports object

    可以看出module.exports和exports其实是一样的。在代码里比较:

    输出结果也是true。

    然而参照“module.exports vs exports in nodeJS”中的例子,考虑下面的代码:

    执行node b,输出结果如下:

    {}
    [Function]

    可见a1.js的function导出失败了,而a2却成功了。原因是什么呢?搜索无果后我直接查看了node.js的源代码

    这段代码的作用是为global赋属性并调用runInThisContext()函数运行模块(其内容已经事先读入到content变量)。模块中使用的exports(即global.exports)其实是对self.exports的引用,对exports进行修改会影响到self.exports,但如果对其赋值,exports则不再是self.exports的引用了。而对module.exports赋值自然就没有问题。

    了解这个,有些node.js模块的源代码中的exports = module.exports = someObject也可以理解了:只使用module.exports = someObject的话module.exports引用的地址变了,而exports引用的还是之前的地址,所以下面的代码中再修改exports就不会再改变module.exports的值了。

    总结

    养成好习惯,如果不给exports本身赋值的话就用exports.sth = sobj,如果要赋值的话则这样写:

    更多阅读

    1. CommonJS Modules/1.0
      CommonJS的成果之一就是为JavaScript加入了module概念,node.js实现了其中Modules/1.0标准。在这个网站上可以看到其它实现该标准的项目,看看你写的模块还可以在哪个项目里用。
    2. Exports vs module.exports
      为数不多的讨论此问题的文章,讲得比较清楚,只是对module.exports和exports的关系没有说到本质,推荐也看看。