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
图片搜索,有时遇到一些带配图的骗子微博,一搜就知道图片原始来源了
本博客自今日起迁移至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 单行命令,希望对你有用。
sudo !!
以 root 帐户执行上一条命令。python -m SimpleHTTPServer
利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000 访问。:w !sudo tee %
在 Vim 中无需权限保存编辑的文件。cd -
更改到上一次访问的目录。^foo^bar
将上一条命令中的 foo 替换为 bar,并执行。cp filename{,.bak}
快速备份或复制文件。mtr google.com
traceroute + ping。!whatever:p
搜索命令历史,但不执行。$ssh-copy-id user@host
将 ssh keys 复制到 user@host 以启用无密码 SSH 登录。ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg
把 Linux 桌面录制为视频。
PHP中流程控制的替代语法
mt_rand与rand
貌似好久没写日志了
今天在手册中查rand()用法时,无意发现了mt_rand()这个函数。
很多老的 libc 的随机数发生器具有一些不确定和未知的特性而且很慢。PHP 的 rand() 函数默认使用 libc 随机数发生器。mt_rand() 函数是非正式用来替换它的。该函数用了 » Mersenne Twister 中已知的特性作为随机数发生器,它可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍。
手册真的是个好东西呀,时常查查手册,也能发现不少小技巧,呵呵。