Sunday, March 29

Mass Sequential Rename

This program can do the same thing as krename of KDE, for Nautilus in Gnome. It modifies selected files with sequential number.

#!/bin/bash
# Nautilus script for mass file renaming.
# Created by Ben(AT)Fadshop.net. http://benincampus.blogspot.com .Mar 29, 2009
# Based on http://jrfonseca.blogspot.com/2006/05/mass-renaming-in-nautilus.html

set -e

TITLE=`basename "$0"`

EXPR=""

EXPR=`zenity --title "$TITLE - expression" --entry --text "Specify the Prefix for modifying the filenames." --entry-text "$EXPR"` || exit

NUM=0


IFS=$'\n'
for FILE in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
cd "`dirname "$FILE"`"
filename=""`basename "$FILE"`""
EXT="${filename/*./}"

mv ""`basename "$FILE"`"" "$EXPR$NUM.$EXT"
NUM=$((NUM+1))

done


Create a new file ~/.gnome2/nautilus-scripts/Mass Sequential Rename with the content above and change it as executable. Then in Nautilus you can select several files and right click. In the context menu there is a Script->Mass Sequential Rename selection to run the script and rename the files.

FREE TIBET!
 
Nice script, it has been very useful to me, but I'm having a problem and would like your help.

Using the script as nautilus script (menu context) it works fine, but I don't know how to use it in terminal. I run "./script filename1 filename2 filename3", enter the prefix, but nothing happens.
 
I already realize what happened. ^_^

To run the script as I wanted is needed to replace $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS with $*, and use "./script /path/filename1 /path/filename2 /path/filename3".
 
Good job, Cristiano.
 

Shell 编程

在KDE里,可以很方便地选中一堆文件,点右键“rename”,输入一个名字比如"winter",就可以把这些文件都换名为 winter1.pdf, winter2.pdf, winter3.pdf...

在Gnome的Nautilus里就没有这个功能。只要你选中多于1个文件,rename的菜单项就变成灰色了。因此昨天我找了找,发现了一个类似的功能“Mass Rename”,能够输入一个regular express来换名字,糟糕的是在我机器上它根本不能运行。

起码,我有了一个起点。我就以它为范本,做出了自己的Mass Sequential Rename:

#!/bin/bash
# Nautilus script for mass file renaming.
# Modified by Ben(AT)Fadshop.net. http://benincampus.blogspot.com .Mar 29, 2009
# Based on http://jrfonseca.blogspot.com/2006/05/mass-renaming-in-nautilus.html


set -e

TITLE=`basename "$0"`


EXPR=""

EXPR=`zenity --title "$TITLE - expression" --entry --text "Specify the Prefix for modifying the filenames." --entry-text "$EXPR"` || exit

NUM=0


IFS=$'\n'
for FILE in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
cd "`dirname "$FILE"`"
filename=""`basename "$FILE"`""
EXT="${filename/*./}"

mv ""`basename "$FILE"`"" "$EXPR$NUM.$EXT"
NUM=$((NUM+1))

done


使用方式:把上面这段代码写成文件 ~/.gnome2/nautilus-scripts/Mass Sequential Rename ,然后把它变成可执行。从此在nautilus的右键菜单里就有个Scripts->Mass Sequential Rename的选项,可以作上面我所说的批量命名。

做这段程序最头疼的是没有什么文档。到底是bash,还是sh?
也没办法调试,一出错就直接停止运行,不知道出错信息放到哪里。
第三,单引号、双引号、两个双引号,到底怎么个用法,我只能一个一个地试。有一个问题就是我用mv "`basename "$FILE"`" $newname的时候,原文件名中有空格,就弄死程序了。用了许久才发现问题,又google了许多才知道要用两个双引号。什么时候在变量前用$,什么时候不用,也很乱。
第四,最生气的,是EXT="${filename/*./}"这句,我为了版式好看,在等于号左右各加了个空格,程序就死了。我还以为是这句话的关系,用1小时来查找错误,偶尔把空格删除掉,才惊奇地发现成功了。

总之,虽然shell编程也是很有前途的一件事情,但是缺少文档、缺少调试环境、缺少现代语法,甚至对空格都不能容忍,这样的语言是没法用的。只能是一些遗老遗少们自我陶醉的一种语言。

参考连接:
Mass Renaming in Nautilus
Extending Nautilus with Scripts and Extensions

Friday, March 20

Johnson & Johnson 强生产品的忧虑?

一个组织公布了一个检测报告,声称包括强生在内的许多(几乎所有)婴儿洗护用品含有微量的致癌物。

有些中文报道翻译华盛顿时报的文章没有翻译准确,特别是这句:“《华盛顿邮报》报道,欧盟已禁止在护理产品中使用对二恶烷,但美国食品和药物管理局尚未出台针对洗发香波、护肤乳液等护理品中对二恶烷含量的安全标准。”原文中关于欧盟的话是:“欧盟禁止在护理产品中作为成分(ingredient)加入对二恶烷“。同样原文还写有:“强生等产品中的对二恶烷并不是作为成分加入的,而是在生产过程中产生的副产品“。所以这些产品在欧盟也能销售。作为一个独立知识分子,我总是找到资料原文来研究,拒绝接受经过二手翻译的东西。
所以,可以说,没有任何一个国家、政府机构认为强生等产品不安全。只有这一个哗众取宠的民间组织在嚷嚷。
至于说这些产品中含有这些微量致癌物,我觉得不必要大惊小怪。比这个厉害得多的东西我们都吃了多少年。比如说家里腌的咸菜,含有强烈的致癌物;油条、扣肉,在油炸时产生许多致癌物,大家也一样吃。况且现在我们所讨论的强生产品并不是吃的。

细看那份检测报告,越看问题越多。空格表示没有检测,ND表示没有发现,但是可能还有其它有害成分。意思就是说,所有东西都“可能”含有有害成分,建议你喝水吃空气维生。

你肯定这个报告不是愚人节出现的?

按其中最主要的1,4二恶烷含量排序:
1, American Girl Real Beauty Inside and Out Shower Gel – Sunny Orange (Bath & Body Works) 35ppm
2, American Girl Real Beauty Inside and Out Shower Gel – Apple Blossom (Bath & Body Works) 18ppm
3, American Girl Hopes and Dreams Glistening Shower and Bath Wash (Bath & Body Works) 14ppm
4, Tinker Bell Scented Bubble Bath (Goldei LLC) 11ppm
5, Gentle Naturals Enzema Baby Wash (Del Pharmaceuticals, Inc.) 6.4ppm
6, American Girl Real Beauty Inside and Out Shower Gel – Apple Blossom (Bath & Body Works) 6.3ppm
7, American Girl Real Beauty Inside and Out Shower Gel – Apple Blossom (Bath & Body Works) 5.7ppm
其它,包括著名的强生的产品,都在5ppm以下。
(上面7个的其中3个产品是同一公司同一产品,却有3个不同的检测量,不知何故?)

ppm就是parts permillion,百万分率。那么,5ppm是什么概念呢?根据"人用注册化学品技术规范协调国际会议ICH"所指定的标准,工业生产过程中使用的溶剂分为三类:第一类剧毒,禁止使用;第二类有毒,限制使用;第三类,随便用。1,4二恶烷就包含在第二类中,并规定不能超过380ppm。[连接:日本官方网站

所以说,官方认为,接触380ppm以下的1,4二恶烷是可以接受的
然后,你再分析上面那个表。那7中产品都是洗浴的,也就是说,在冲澡的时候涂上shower gel,那些二恶烷就会被稀释得更稀了!

再回去看那份检测报告,除去Liquid Shower Soap,Bath Wash,Bubble Bath这三大类,因为这几类都是马上被洗澡水稀释的。剩下来的产品中含二恶烷最高的是
L’Oreal Kids Extra Gentle 2-in-1 Fast Dry Shampoo – Burst of Cool Melon (L’Oreal USA) 0.95ppm
都在1百万分之1以下了,还用担心么?

FREE TIBET!
 

Thursday, March 12

不要随手关灯

大多数人有这个想法:随手关灯能够省电,所以每次离开一个房间,一定要把灯关掉。其实你在省电的时候,却费了更多钱,损耗了灯,归根结底就是浪费了资源。

以白炽灯(灯泡)为例。典型寿命是6000小时,也就是说,灯亮6000小时后就因为钨丝蒸发而寿终正寝。按照每天(晚上)6小时算,一个灯泡能用1000天也就是3年。实际上,一个灯泡基本上没有超过半年的。因为开灯时电压冲击,许多灯泡都是在开灯的那一瞬间“烧”了。
在这半年里,灯打开了180次,亮了180*6=1080小时
(6000-1080)/180=27
所以开关一次灯相当于亮27小时的损耗。用这个数字除以6000再乘以灯泡的价格3块钱,得到1.35分。即每次关灯就废了1.35分。

中国的电费大概是每度电5毛,50cents/千瓦时。所以,1.35分相当于0.027千瓦时,足够27瓦的灯泡开一个小时。

结论:如果你的灯泡是27瓦,而且你在1小时之内还回到这个房间,请不要关灯。如果你的灯泡是100瓦,而你在16分钟之内回来,请不要关灯。如果你的灯泡花费超过3块钱,请折算。

现在的节能灯真是很贵啊!

FREE TIBET!
 

走好人生的每一步

昨晚连着发生了两件事。

扶着宝宝在书房遛弯的时候,她看中了墙角的一份广告。我看了看,是那种厚铜版纸,估计她撕不破,没什么危险,就让她拿起来了。她自然是塞到了嘴里,嚼啊嚼,换个角度,又嚼。
忽然,她拿出来的纸片缺了一角!原来,口水把纸片泡软了,她就把一角咬了下来!一个硬币大小的碎片还在她嘴里!我吓得脸都变白了,把纸片夺下来丢到垃圾框,伸手到她嘴里摸啊摸,没摸到咬下来的碎片,赶紧把MM叫过来,一起把宝宝嘴张开,看到碎片沾在宝宝的后上颚,伸手过去拿出来了。
给宝宝喝了点水,她喉咙还是有点不舒服,我又跑到垃圾筐那里,把碎片和纸片拼到一起,基本上已经完整了,才放下心来。

第二件事,是我又重装了一次电脑(我为什么要说“又”呢?)。有一个目录存放我的软件、小说、图片、游戏,所以我希望能够保留下来,特意选择了“手工分区”、“不格式化”,装完之后发现还是被抹掉了。


这两件事给我的教训是:我没有想好:如果失败了怎么办,就莽撞地动手。我不赞成每件事都想前想后顾虑重重,那样的人生会很压抑无趣。可是现实是,最糟糕的事情总是发生(墨菲定律),所以要先考虑清楚我能否承受最坏的情况,再动手

另一个有趣的定律是:需求总是跟着供应走。你能提供多少,就会有多少需求。比如说,一个100G的硬盘不够用了,你买了一个500G的硬盘,认为够用10年了:其实才过1年,这个硬盘也装满了东西。