备忘

备忘: django admin界面报模板错误, 说是下面这一行有问题: {% url django-admindocs-docroot as docsroot %}. 排查发现是url.py里配置有问题导致的,错误信息很不明显。 (The error is showing up where it is because the admin uses {% url django- admindocs-docroot as docsroot %} to conditionally include a Documentation link on each admin page, based on whether the admindocs urls have been configured. This template tag will result in all of your url patterns being evaluated, and problems with any will be reported. You need to find the app you are running that has a registration/views.py file that imports oldforms and upgrade it to use current forms.) ...

December 30, 2009 · notsobad

vim中插入当前时间戳

在编辑代码时,有时候想做个标记。表示修改这段代码的时间。 vim提供了strftime()函数可以返回当前时间。 在.vimrc中填入下面两行,可以在普通模式,插入模式,只要F6就可以插入一行带有时间戳的注释。 nmap :execute "normal i" . strftime("//%x %X (%Z) ") imap :execute "normal i" . strftime("//%x %X (%Z) ")i 详细内容可参考:vim wiki ...

December 30, 2009 · notsobad

javascript字符转为数字

以前一直用的parseInt,今天终于遇到了问题了,查了半天发现是parseInt的问题 我处理坐标top,left,这些是float型的数据,parseInt转为整数了,细微的差别导致问题了。 所以如果要把字符型转为数字,首选的应该是parseFloat,取整的话才用parseInt。 ...

December 29, 2009 · notsobad

linux的ls命令

ls谁都会用,但是你真的很熟吗? ls -r -d -1 proxy_* 2>/dev/null | sed -n '1s/^proxy_//p' 544 /media/sda6/collection/music>ls --help 用法:ls [选项]... [文件]... 列出<文件>的信息 (默认为目前的目录)。 如果不指定 -cftuvSUX 或 --sort 任何一个选项,则根据字母大小排序。 长选项必须用的参数在使用短选项时也是必需的。 -a, --all 不隐藏任何以 . 字符开始的项目 -A, --almost-all 列出除了 . 及 .. 以外的任何项目 --author 和 -l 同时使用时列出每个文件的作者 -b, --escape 以八进制溢出序列表示不可打印的字符 --block-size=大小 块以指定<大小>的字节为单位 -B, --ignore-backups 不列出任何以 ~ 字符结束的项目 -c 配合 -lt:根据 ctime 排序及显示 ctime (文件 状态最后更改的时间) 配合 -l:显示 ctime 但根据名称排序 否则:根据 ctime 排序 -C 每栏由上至下列出项目 --color[=WHEN] 控制是否使用色彩分辨文件。WHEN 可以是 "never"、"always"或"auto"其中之一 -d, --directory 当遇到目录时列出目录本身而非目录内的文件 -D, --dired 产生适合Emacs 的dired 模式使用的结果 -f 不进行排序,-aU 选项生效,-lst 选项失效 -F, --classify 加上文件类型的指示符号(*/=@| 其中一个) --format=关键字 交错-x,逗号分隔-m,水平-x,长-l, 单栏-1,详细-l,垂直-C --full-time 即-l --time-style=full-iso -g 类似 -l,但不列出属主 --group-directories-first 在文件前分组目录。此选项可与--sort 一起使用, 但是一旦使用--sort=none (-U)将禁用分组 -G, --no-group 以一个长列表的形式,不输出组名 -h, --human-readable 与-l 一起,以易于阅读的格式输出文件大小 (例如 1K 234M 2G) --si 同上面类似,但是使用1000 为基底而非1024 -H, --dereference-command-line 跟随命令行列出的符号链接 --dereference-command-line-symlink-to-dir 跟随命令行列出的目录的符号链接 --hide=PATTERN 隐藏符合PATTERN 模式的项目 (-a 或 -A 将覆盖此选项) --indicator-style=方式 指定在每个项目名称后加上指示符号方式: none (默认),classify (-F),file-type (-p) -i, --inode 显示每个文件的inode 号 -I, --ignore=PATTERN 不显示任何符合指定shell PATTERN 的项目 -k 即--block-size=1K -l 使用较长格式列出信息 -L, --dereference 当显示符号链接的文件信息时,显示符号链接所指示 的对象而并非符号链接本身的信息 -m 所有项目以逗号分隔,并填满整行行宽 -n, --numeric-uid-gid 类似 -l,但列出UID 及GID 号 -N, --literal 输出未经处理的项目名称 (如不特别处理控制字符) -o 类似 -l,但不列出有关组的信息 -p, --indicator-style=slash 对目录加上表示符号"/" -q, --hide-control-chars 以 ? 字符代替无法打印的字符 --show-control-chars 直接显示无法打印的字符 (这是默认方式,除非调用 的程序名称是“ls”而且是在终端机画面输出结果) -Q, --quote-name 将项目名称括上双引号 --quoting-style=方式 使用指定的 quoting <方式>显示项目的名称: literal、locale、shell、shell-always、c、escape -r, --reverse 排序时保留顺序 -R, --recursive 递归显示子目录 -s, --size 以块数形式显示每个文件分配的尺寸 -S 根据文件大小排序 --sort=WORD 以下是可选用的WORD 和它们代表的相应选项: extension -X status -c none -U time -t size -S atime -u time -t access -u version -v use -u --time=WORD 和-l 同时使用时显示WORD 所代表的时间而非修改时 间:atime、access、use、ctime 或status;加上 --sort=time 选项时会以指定时间作为排序关键字 --time-style=STYLE 和-l 同时使用时根据STYLE 代表的格式显示时间: full-iso、iso、locale、posix-iso、+FORMAT。 FORMAT 即是"date"所用的时间格式;如果FORMAT 是FORMAT1<换行>FORMAT2,FORMAT1 适用于较旧 的文件而FORMAT2 适用于较新的文件;如果STYLE 以"posix-"开头,则STYLE 仅在POSIX 语系之外 生效。 -t 根据修改时间排序 -T, --tabsize=宽度 指定制表符(Tab)的宽度,而非8 个字符 -t 按修改时间排序 -T, --tabsize=COLS 指定制表符(Tab)的宽度,而非8个字符 -u 同-lt 一起使用:按照访问时间排序并显示 同-l一起使用:显示访问时间并按文件名排序 其他:按照访问时间排序 -U 不进行排序;按照目录顺序列出项目 -v 在文本中进行数字(版本)的自然排序 -w, --width=COLS 自行指定萤幕宽度而不使用目前的数值 -x 逐行列出项目而不是逐栏列出 -X 根据扩展名排序 -1 每行只列出一个文件 --help 显示此帮助信息并退出 --version 输出版本信息并退出 [大小]可以是以下的单位(单位前可加上整数): kB 1000,K 1024,MB 1000000,M 1048576,还有 G、T、P、E、Z、Y。 默认情况下不使用色彩来区别文件,此方式等于使用了 --color=none 选项。若使用 --color 选项但不指定 WHEN 参数则等于--color=always。当使用 --color=auto 时, 只当输出至终端(tty)时才会显示色彩。 退出状态: 0 正常 1 一般问题 (例如:无法访问子文件夹) 2 严重问题 (例如:无法使用命令行参数)

December 28, 2009 · notsobad

登录shell和非登录shell

所谓的登录shell和非登录shell的区别: 发信人: edyfox (滇狐), 信区: LinuxApp 标 题: Re: 为什么我的gnome- terminal启动的时候.bash_profile没有被执 发信站: 水木社区 (Wed Apr 18 18:22:06 2007), 站内 1. 登录方式执行 bash 时只运行 .bash_profile 2. 非登录方式执行 bash 时只运行 .bashrc 3. 按照大家的习惯,建议把配置写在 .bashrc 中, 而在 .bash_profile 中 source ~/.bashrc。 4. gnome- terminal 默认使用非登录方式执行 bash。 5. 要改为登录方式执行 bash 可以: 编辑 -> 当前配置文件 -> 标题和颜色 选中“以登录 Shell 方式执行命令” 【 在 beninu (葛之覃兮) 的大作中提到: 】 : 说说吧 只要将本文转载或手动贴到本站其它版面,系统就会自动将你的文章数 +1。 我刚试验了,绝对是真的! ※ 来源:·水木社区 newsmth.net·[FROM: 166.111.68.*] ...

December 25, 2009 · notsobad

split and sort

网上看到的一道题,不知道愿意是不是让用shell来做。 老实说,我也不知道这样写速度是否真的会快一点。没有这样的数据来测试。 # 有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。 # 请用5分钟时间,找出重复出现最多的前10条 set -x # 拆分为10000行一个的文件。 split msg_file -l 10000 for i in x*;do sort $i | tail -10 > ${i}_tmp & done sleep 5 # Wait for the sort cat x*_tmp | sort | tail -10 > out.txt rm x*_tmp rm x*

December 25, 2009 · notsobad

php中的unset

php中unset只是清除掉一个变量,并不意味着内存会被立即清理,会交给GC来处理。 如果把一个变量置为null,意味着覆写了变量,内存会被更快清理,但是会导致cpu运算,导致执行时间变长。 参考 unset() does just what it’s name says - unset a variable. It does not force immediate memory freeing. PHP’s garbage collector will do it when it see fits - by intention as soon, as those CPU cycles aren’t needed anyway, or as late as before the script would run out of memory, whatever occurs first. If you are doing $whatever = null; then you are rewriting variable’s data. You might get memory freed / shrunk faster, but it may steal CPU cycles from the code that truly needs them sooner, resulting in a longer overall execution time. ...

December 24, 2009 · notsobad

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