php的Copy-on-write

参考Be wary of garbage collection 先看段代码: echo "Stage 1: Mem usage is: ", memory_get_usage(), "\n"; $arr = array(); for ($i = 0; $i < 1000000; ++$i) { $arr[] = rand(); } echo "Stage 2: Mem usage is: ", memory_get_usage(), "\n"; $foo = 1; $bar = 2; echo "Stage 3: Mem usage is: ", memory_get_usage(), "\n"; $foo = $arr; $bar = $arr; echo "Stage 4: Mem usage is: ", memory_get_usage(), "\n"; $arr = array(); echo "Stage 5: Mem usage is: ", memory_get_usage(), "\n"; $bar[] = "hello, world"; echo "Stage 6: Mem usage is: ", memory_get_usage(), "\n"; $foo = array(); echo "Stage 7: Mem usage is: ", memory_get_usage(), "\n"; 运行结果: Stage 1: Mem usage is: 37712 Stage 2: Mem usage is: 60232136 Stage 3: Mem usage is: 60232248 Stage 4: Mem usage is: 60232248 Stage 5: Mem usage is: 60232288 Stage 6: Mem usage is: 104426704 Stage 7: Mem usage is: 60242672 看stage 4, ...

December 24, 2009 · notsobad

awk中使用shell变量

511 ~$who | awk '/^'"$USER"'/' wang tty7 2009-12-23 09:00 (:0) wang pts/0 2009-12-23 09:00 (:0) 511 ~$who| awk '/^'"$USER"'/' wang tty7 2009-12-23 09:00 (:0) wang pts/0 2009-12-23 09:00 (:0) 较新版本的awk可以这样: nawk 'END { print "Your path variable is " ENVIRON["PATH"] }' #如下: ~$awk --version GNU Awk 3.1.6 ~$export b=2; ~$awk 'END { print "Your path variable is " ENVIRON["b"] }' /dev/null Your path variable is 2 参考文章 3.12) Is it possible to pass shell variable settings into an awk program? There are two different ways to do this. The first involves simply expanding the variable where it is needed in the program. For example, to get a list of all ttys you’re using: who | awk ‘/^’"$USER"’/ { print $2 }’ (1) Single quotes are usually used to enclose awk programs because the character ‘$’ is often used in them, and ‘$’ will be interpreted by the shell if enclosed inside double quotes, but not if enclosed inside single quotes. In this case, we want the ‘$’ in “$USER” to be interpreted by the shell, so we close the single quotes and then put the “$USER” inside double quotes. Note that there are no spaces in any of that, so the shell will see it all as one argument. Note, further, that the double quotes probably aren’t necessary in this particular case (i.e. we could have done who | awk ‘/^’$USER’/ { print $2 }’ (2) ), but they should be included nevertheless because they are necessary when the shell variable in question contains special characters or spaces. The second way to pass variable settings into awk is to use an often undocumented feature of awk which allows variable settings to be specified as “fake file names” on the command line. For example: who | awk ‘$1 == user { print $2 }’ user="$USER" - (3) Variable settings take effect when they are encountered on the command line, so, for example, you could instruct awk on how to behave for different files using this technique. For example: awk ‘{ program that depends on s }’ s=1 file1 s=0 file2 (4) Note that some versions of awk will cause variable settings encountered before any real filenames to take effect before the BEGIN block is executed, but some won’t so neither way should be relied upon. Note, further, that when you specify a variable setting, awk won’t automatically read from stdin if no real files are specified, so you need to add a “-” argument to the end of your command, as I did at (3) above. A third option is to use a newer version of awk (nawk), which allows direct access to environment vairables. Eg. nawk ‘END { print “Your path variable is " ENVIRON[“PATH”] }’ /dev/null ...

December 23, 2009 · notsobad

linux创建备份文件

linux系统管理员应该有的一个习惯就是随时备份文件,通常cp -rf a a.xxx, 但是为备份文件起个名字得花时间想以下,最好是能够自动的创建文件名。 #备份文件用,放入 ~/.bashrc中 #支持文件和目录 #By notsobad # usage: bak test_file bak(){ to="`echo $1 | sed 's#/*$##g'`.`date +%Y%m%d%H%M`"; [ -e "$to" ] && rm -rf $to; cp -rf "$1" $to; } 使用: ...

December 23, 2009 · notsobad

Mockingbird 在线原型设计工具

从这里看到一个在线原型设计工具 Mockingbird 是基于 Cappuccino 开发的一个在线原型设计工具。 确实很酷,280 Slides也是用这个工具做的。 研究了下,它是用Objective- J来做的,好像是类似GWT一样的东西,挺麻烦的 Cappuccino is an open source application framework for developing applications that look and feel like the desktop software users are familiar with. Cappuccino is built on top of standard web technologies like JavaScript, and it implements most of the familiar APIs from GNUstep and Apple’s Cocoa frameworks. When you program in Cappuccino, you don’t need to concern yourself with the complexities of traditional web technologies like HTML, CSS, or even the DOM. The unpleasantries of building complex cross browser applications are abstracted away for you. Cappuccino was implemented using a new programming language called Objective-J, which is modelled after Objective-C and built entirely on top of JavaScript. Programs written in Objective-J are interpreted in the client, so no compilation or plugins are required. Objective-J is released alongside Cappuccino in this project and under the LGPL. ...

December 21, 2009 · notsobad

php中的allow_url_include

allow_url_include 如果打开,则可以include远程文件 这是个很古老的安全问题了,今天做了下实验,才意识到危害性。 以前一位include 只是取到静态html内容,把它原样输出,没想到它会对获取倒内容中的php代码进行解释执行,很危险。 机器a上: wang@wang-desktop:~/www$ cat inc.php EOF ?> 然后在另一台机器b上: ...

December 17, 2009 · notsobad

ubuntu安装thunderbird3

ubuntu源里的thunderbird还是2.*的,3.*已经出了好久了 参考[这里](http://www.ubuntu- inside.me/2009/08/howto-install-thunderbird-3-beta-on.html) sources.list中添加个ppa的源 sudo gedit /etc/apt/sources.list deb http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu jaunty main deb-src http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu jaunty main 添加key $sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 247510BE $sudo apt-get update $sudo apt-get install thunderbird-3.0 thunderbird-3.0-gnome-support

December 17, 2009 · notsobad

叫我序员就好

一个笑话: ——我是程序员。 ——哦,程先生! ——客气了,叫我序员就好。

December 15, 2009 · notsobad

一个发现

friends s6e05里,rose和richle去办离婚,那个法官声音听起来有点耳熟, 仔细一看,居然是《Two and a half men》里的那个牛哄哄的管家

December 15, 2009 · notsobad

ubuntu下使用amule下载

ubuntu下使用amule下载 老实说,互联网上中文的东西大部分都是一大抄,很多东西找来找去都是一篇,而且还可能是错的! 我设置firefox的文件关联,就一直没设置好, 看了下amule网站上的说明,才明白少设置了一个东西. Handling ED2k links in Firefox can be configured in two ways: either for an individual user, or for all users of the computer. Configuration for a single user * Insert about:config in the address bar * Right click on the list, select New, then Boolean; insert network.protocol- handler.external.ed2k as Preference Name and true as Value * Now another right click, select New and String; insert network.protocol-handler.app.ed2k as Preference Name and /path/to/ed2k (path to where the file is installed on your system) as Value. For Firefox 3 and higher only, you should also: * Right click on the list, select New, then Boolean; insert network.protocol- handler.expose.ed2k as Preference Name and false as Value After that, click over an ed2k link, and Firefox should ask which app you want to use to open the link. Choose /usr/bin/ed2k and it should work. ...

December 14, 2009 · notsobad

使用lynx来获取网页文本

使用lynx来获取网页文本, 效果就相当于在一个网页上面输入ctrl+a ctrl+c,然后ctrl+v保存到一个文本文件中,当然写到脚本里就可以自动化操作了。 lynx -notitle -nomargins -nolist -width=4096 -verbose -display_charset=gb2312 -dump http://baike.baidu.com/view/396668.htm?hh=255 | iconv -f gb2312 -t utf8//IGNORE 排下版 wang@wang-desktop:~/script/notsobad/shell/tool$ cat get_url.sh #!/bin/sh # File: get_url.sh # Author: notsobad # Description: # Created: 2009-12-14 15:53:02 # Last modified: 2009-12-14 15:53:02 url=$1 lynx -notitle\ -nomargins\ -nolist\ -width=4096\ -verbose\ -display_charset=gb2312\ -dump\ "$url"\ | iconv -f gb2312 -t utf8//IGNORE

December 14, 2009 · notsobad