NodeJS 模块开发及发布详解

NodeJS 是一门年轻的语言,扩展模块并不太全,经常我们想用某个模块但是却找不到合适的。比如前两天我需要使用hmac和sha1来做签名,就没有找到一个比较好用的模块,这时候就需要我们自己来实现相应的功能了。自己写完之后,再把它打包成一个模块分享给大家来用,即方便了其他人,又能让自己有点小小的成就感,实在是一件一举多得的好事情。接下来,我就为大家介绍一下如何封装一个NodeJS模块并把它分享给其他人。

继续阅读 »

MongoDB 使用经验小结

1. Database数量多了之后,mongod的启动会需要很长的时间,期间进程绝大多数时间处于R(Running or runnable)和D(Uninterruptible sleep) 状态。这段时间mongod是在做init,会读取所有Database的namespace文件的header,检查pdfile version。

2. listDatabases指令(show dbs;)会首先取得所有Database名称,然后依次打开所有Database的namespace,检查Database是否为空。是一个非常消耗IO的操作,Database数量多了之后,也会非常慢, 继续阅读 »

我喜欢用的Chrome插件

原本是发在微博上的,在这里也发一遍跟大家分享一下:

1. QR-Code Tag Extension
可以很方便的把网页上的网址、文字啥的转成二维码,拍一下就到手机上了。

2. 网页截图(由Google提供)
可以截定制区域,截可见区域,截整页,截的图还能直接分享到新浪微博。

3. Proxy Switchy!
翻墙必用,可以配置只对某些站点使用代理。

4. RSS Subscription Extension(由 Google 提供)
在地址栏中添加一个RSS订阅按钮,可以很方便的订阅博客到Google Reader。

5. XML Tree 和 Pretty JSON
测试REST接口时看XML和JSON格式的返回数据用的。

6. TinEye Reverse Image Search
图片搜索,有时遇到一些带配图的骗子微博,一搜就知道图片原始来源了

CentOS 下将ext3分区转为ext4格式

系统环境:

发行版本: CentOS release 5.4 (Final)
Kernel:  Linux localhost.localdomain 2.6.18-164.el5 #1 SMP Thu Sep 3 03:28:30 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
假设要转换的分区为/dev/sda7,已挂载在/data0目录上
首先安装 ext4 支持:
yum install -y e4fsprogs
继续阅读 »

MongoDB Auto-Sharding 入门介绍

MongoDB10gen团队开发的一款面向文档的NoSQL数据库。最近一年多以来,MongoDB被越来越多的大型网站应用到生产环境中,比较著名的有Foursquare, bit.ly, SourceForge, Boxed等。MongoDB提供了Auto-Sharding功能,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB集群。

MongoDBAuto-Sharding能够做到:

  • 当各Sharding间负载和数据分布不平衡时,自动rebalancing

  • 简单方便的添加和删除节点

  • 自动故障转移(auto failover)

  • 可扩展至上千台节点

继续阅读 »

本博客自今日起迁移至Sina App Engine

买的Godaddy虚拟机的IP被联通给封掉了,公司里访问不了BLOG,也懒得找代理,于是博客停止更新了N个月。

这几天花时间自己改了一个WordPress 3.0.4 for SAE,把博客迁了过来,以后恢复更新,争取每月至少两篇博客。

由于这个WordPress是基于SAE正在测试的新PHP环境修改的,还不适用于目前的SAE线上环境,而且某些插件还有些小问题没有修改,因此暂时还是自己用。等明年SAE新PHP环境上线后,我会把这个WordPress for SAE放在Google Code上和大家分享。

快过年了,预祝大家新年快乐。

附上SAE(Sina App Engine)地址,欢迎大家体验SAE: http://sae.sina.com.cn

关于PHP对文件元信息的缓存

今天在测试 SAE (Sina App Engine) 的Memcache Wrapper 时发现,PHP会在同一个页面的执行过程中对文件的元信息进行缓存。

根据PHP文档对 clearstatcache() 这个方法的说明得知:
在使用 stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype(), 或 fileperms() 方法查询文件信息时,PHP会将文件的stat的缓存以提高性能。 clearstatcache()方法可以用来清除这个缓存。另外unlink()会自动清除stat缓存。

例如以下一段程序:

1
2
3
4
5
6
file_put_contents("test.txt", "test_content\n");
var_dump(filesize("test.txt"));
file_put_contents("test.txt", "test_content\n", FILE_APPEND);
var_dump(filesize("test.txt"));
clearstatcache();
var_dump(filesize("test.txt"));

最后会输出

int(13)
int(13)
int(26)

但是通过阅读PHP源码,我发现只有在对本地文件进行unlink, rename和rmdir操作时会清除stat缓存,而在通过其他的wrapper进行unlink, rename和rmdir操作时,并不会清除stat缓存。因此在写wrapper时我们要自己在unlink等方法中通过clearstatcache()来清除stat。

[转]10 个最酷的 Linux 单行命令

下面是来自 Commandlinefu 网站由用户投票决出的 10 个最酷的 Linux 单行命令,希望对你有用。

  1. sudo !!
    以 root 帐户执行上一条命令。
  2. python -m SimpleHTTPServer
    利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000 访问。
  3. :w !sudo tee %
    在 Vim 中无需权限保存编辑的文件。
  4. cd -
    更改到上一次访问的目录。
  5. ^foo^bar
    将上一条命令中的 foo 替换为 bar,并执行。
  6. cp filename{,.bak}
    快速备份或复制文件。
  7. mtr google.com
    traceroute + ping。
  8. !whatever:p
    搜索命令历史,但不执行。
  9. $ssh-copy-id user@host
    将 ssh keys 复制到 user@host 以启用无密码 SSH 登录。
  10. ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg
    把 Linux 桌面录制为视频。

原文地址:http://linuxtoy.org/archives/top-10-one-liners.html

PHP中流程控制的替代语法

PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。

使用这种语法时需要注意:elseif不可以分开写为else if,否则会编译不通过
继续阅读 »

mt_rand与rand

貌似好久没写日志了

今天在手册中查rand()用法时,无意发现了mt_rand()这个函数。

很多老的 libc 的随机数发生器具有一些不确定和未知的特性而且很慢。PHP 的 rand() 函数默认使用 libc 随机数发生器。mt_rand() 函数是非正式用来替换它的。该函数用了 » Mersenne Twister 中已知的特性作为随机数发生器,它可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍。

手册真的是个好东西呀,时常查查手册,也能发现不少小技巧,呵呵。