I am LAZY bones? AN ancient AND boring SITE

2009年 03月 的归档

一个命令把几千张照片压缩了

数码相机拍的照片,已经积累了很多个G了,于是就都备份到光盘里保存了,但是怎么处理硬盘上的数据呢?rm之觉得可惜,毕竟光盘没有那么方便,不能随时查看,但是放着又太大太浪费硬盘空间了,现在的相机一张都有3~4M的.我能想到的最好的办法,就是把每张照片压缩以后,把小图片留在硬盘上,这样即可以快速查看,又不是很浪费硬盘空间,于是有了这个命令:
注意此命令会删除当前目录及子目录下的所有jpg文件,最好是理解以后,再执行

find . -name '*.jpg' | while read i;do convert -resize 30% "$i" "${i%.jpg}_.jpg";rm "$i";done

把当前目录及子目录下的所有 xx.jpg 压缩成横竖分辨率都为原尺寸的30%的 xx_.jpg 文件.对于我的相机来说,压缩后的大约800*600的大小对于屏幕浏览来说已经足够了,而每张300K左右的尺寸也很经济.
没有convert命令的同学需要检查是否装了 imagemagick 包.
PS:真庆幸自己没在用windows了,如果是win下,估计又得上网找所谓的”绿色版图像批处理软件”了,问题是:即使找到了,能完全合我的心意吗?称心了,要找注册码吗?找到注册码了,确定不含木马病毒吗…Orz

推荐:vim使用进阶

既然在linux下混,我觉得emacs和vim里,至少得会一样.
因为我比较懒,emacs这类神的编辑器,是不太会用了,所以只能用编辑器的神──vim了.
但是一直以来,自己的vim水平还是仅限于会hjkli之类的水平,所以我自己也快看不下去了.
刚好在这个时候,发现了这篇好教程:Easwy写的vim使用进阶.
只看了前面几章,就深知这是个能造福大家的好教程.内容翔实而不肤浅,描述细致而不累赘.相信看完之后,定能让读者举一反三,进化为vim老鸟~所以,在此推荐给大家.同时感谢一下Easwy的辛勤劳动.

转:lsof用法小结

lsof在我看来算是那类很少用到却功能强大的生僻命令.因为生僻,所以经常忘记参数,而且2~3千行的man页,也经常会让人发晕.所以,偶尔看到这用法小结,转载记录一下,以便日后查找.
原文链接

lsof是一个用来显示被打开的文件的强大而有用的工具。在Unix系统中,任何事物都是文件(everything is a file),pipe是文件,IP sockets是文件,unix sockets是文件,目录是文件,设备是文件,inodes是文件。
一些有用的例子:
当在lsof后边没有跟任何参数时,该命令将会列出当前系统中被所有进程打开的所有文件

lsof|nl     #nl命令打印出行号

下边这几个命令指出打开某文件的进程

lsof `which httpd`    #那个进程在使用apache的可执行文件
lsof /etc/passwd      #那个进程在占用/etc/passwd
lsof /dev/hda6         #那个进程在占用hda6
lsof /dev/cdrom        #那个进程在占用光驱

下边将会打印出占用httpd可执行文件的进程的进程号(仅仅是进程号,在编写shell脚本是有用)

lsof -t `which httpd`

显示出那些文件被以k打头的进程名的进程打开,以bash打头,和以init打头:

lsof -c k
lsof -c bash
lsof -c init

显示出那些文件被以courier打头的进程打开,但是并不属于用户‘zahn’

lsof -c courier -u ^zahn

显示被zahn和apache打开的文件

lsof -u apache,zahn

显示那些文件被pid为30297的进程打开:

lsof +p 30297

显示所有在/tmp文件夹中打开的instance和文件的进程。但是symbol文件并不在列

lsof -D /tmp

显示所有打开的端口

lsof -i

显示所有打开80端口的进程

lsof -i:80

显示所有打开的端口和UNIX domain文件:

lsof -i -U

显示那些进程打开了到www.akadia.com的UDP的123(ntp)端口的链接:

lsof -iUDP@www.akadia.com:123

—————————————————-
translated from @ www.akadia.com

thank 寂寞烈火 for the reason of http://bbs.chinaunix.net/viewthr … &extra=page%3D5
—————————————————–
lsof还有很多参数,如果能够熟练使用将会对日常的系统管理非常有用。希望大家把一些还知道得技巧加以补充

用上了2.6.29的内核,A卡驱动搞定

今天也体验了一把用gentoo来hack的乐趣,哈哈.
昨天(还是前天?)2.6.29的内核就已经进了gentoo的源,今天编译好,用上了,倒是能启动,但是却出了点小问题:我的A卡驱动坏了…编译内核模块的时候,由于内核源文件的修改,使得编译无法通过,无法生成内核模块了…结果我的compiz就罢工了…
于是,就google呗,搜到这个补丁,然后调用gentoo强大的hack功能,就给装上了,方法如下:
1.建一个自己的overlay,用gentoo的应该都有自己的overlay吧? 比如我的在 /usr/local/portage.
2.把 /usr/portage/x11-drivers/ati-drivers/ 复制到 /usr/local/portage 下面.
3.下载这个补丁到 /usr/local/portage/x11-drivers/ati-drivers/files 目录下.注意这个补丁和上面 phoronix 帖子里的不完全一样,用那个在我这里失败了,所以我稍微修改了下路径.如果你的内核源码也在 /usr/src/linux 的话,直接可以用.
4.修改 /usr/local/portage/x11-drivers/ati-drivers/ati-drivers-8.582.ebuild ,在src_unpack()里加一行

epatch "${FILESDIR}"/${PV}/ati-drivers-2.6.29.patch || die "epatch failed"

5.生成 Manifest 之类的以后,就可以emerge了.
完成,我的compiz又回来了,啊哈哈…

DELL A840上的ubuntu

前天MM公司善心突发,给她们每人配了台本本,于是MM到手一台基本上是DELL里面价位最低的A840,打开一看,预装的是ubuntu 8.04,哈哈,这下好玩了…
默认的系统东西装得也蛮全的了,而且硬件驱动自然是很完美.无线,compiz之类的都没问题.
于是把一堆不需要的语言包卸载以后,就开始升级,升到hardy的最新内核,问题却出现了: 无线用不了了,声音也有问题…
搜索一下,发现这个版本的内核好像对它的硬件支持不太好,后来也证实了这点,从8.04的光盘启动,居然会出现busybox,这还是预装ubuntu的电脑呢!唉.
然后说升级到8.10会好,于是就升级,也出现了一些小问题,是 xulrunner 需要的几个库文件不存在,看了一下,只是少几个符号链接,补上后,顺利升级成功了.发现声音好了,无线还是不行,搜索了无线网卡的型号: Atheros Communications Inc. AR242x 802.11abg Wireless PCI Express Adapter 发现要安装一个 linux-backports-modules-intrepid 的包,装上重启,无线也正常了,至此硬件驱动基本恢复到完美的水平…

MLMonitor

这个创意其实是wd首先提出的.
然后,我搞了一半,才刚能取到数据,显示也是文本的,因为我不太会图形编程,所以就没继续下去了.
直到前几天知道壳壳在也在搞查看mldonkey下载速度的脚本.
然后一打听,他也是gnome用户,还是python高手,还会图形界面编程,问他有没有兴趣继续搞这applet,然后…于是…最终…就有了这个.
目前已经基本可用了.
盗链下壳壳的截图:

要显示出详细信息的话,需要有 pynotify 这个模块,ubuntu用户可以安装python-notify这个包,gentoo用户是 dev-python/notify-python ,其他发行版估计也是类似的,自己搜索下吧.
目前,还有很多改进工作要做,所以,暂不提供下载了,要尝鲜的朋友可以从svn下到源码和安装脚本.执行里面的 ./install.sh -i 即可安装.完了之后,在面板空白处,右键-添加到面板,就会看到可以添加 MLMonitor 了.

wget的-e选项

wget可谓居家旅行,杀人越货的必备之物了~其体积小巧,功能强大.所以,同时,其选项也比较繁多,man也是长长的,但是却有写个小技巧没写出来.
man里有这样的描述:

Wget can follow links in HTML and XHTML pages and create local versions of remote web sites, fully recreating the directory structure of the original site. This is sometimes referred to as “recursive downloading.” While doing that, Wget respects the Robot Exclusion Standard (/robots.txt). Wget can be instructed to convert the links in downloaded HTML files to the local files for offline viewing.

于是乎,如果你想mirror一整个站点,但是人家的 /robots.txt 却是:

User-agent: *
Disallow: /

你就要开始郁闷了,呵呵.
而且,我翻遍了man也找不到解决办法的,总不能为这点事去hack源码吧…
其实有这么个选项:

-e command
–execute command
Execute command as if it were a part of .wgetrc. A command thus invoked will be executed after the commands in .wgetrc, thus taking precedence over them. If you need to specify more than one wgetrc command, use multiple instances of -e.

用这个,就可以忽略 robots.txt 哦,具体是 -erobots=off 嘿嘿.

BotCalk

谢谢lerosua写的介绍,我就基本上抄现成的了,哈哈~

BotCalk是近来我和lerosua搞起的一个项目,目的是丰富jabber聊天室里的聊天环境。目前你也许能在 linuxcn@conference.jabber.org 里遇到一个叫 iBot 的家伙,就是它了.
当然也是个学习的过程。主程序改自gloox里的聊天室测试代码。botcalk把聊天室里的消息发送到一个管道,而有个脚本读取消息处理后再发送到另一个管道上。botcalk会循环读这个管道,然后把信息发送出去。
原理有些粗糙,目前就这么实现了发送链接读取网页标题的功能。但bug在于机器人登录后似乎导致聊天室不太正常,吃掉某些人发出的信息。
BotCalk 代码地址在 http://code.google.com/p/botcalk/ ,通过svn取得吧
编译botcalk需要gloox 1.0beta2以上版本,
需要的配置文件bot.conf:

$ cat  bot.conf
jid=xxxx@gmail.com
passwd=xxxxxxx
server=talk.google.com
port=5222
room=linuxcn@conference.jabber.org/myBot

然后执行目录下的bot.sh即可。

目前这个机器人还很粗糙,所以以上仅学习参考使用.

PS: lerosua兄还写了个连载的小说,大家一起去围观吧~

lrcdis的截图

为了让大家对lrcdis有个基本的了解,上一张截图,所谓一图胜千言嘛。
点击查看大图:
lrcdis

lrcdis正在进步

最近几天,以前一直比较沉默的 lrcdis 正在快速发展中。
新添加了notify,title和echo几个显示方式。然后由于 oldherl 的加入,也改进了少的小bug,还增加了从baidu下载歌词的功能。然后项目还加了个FAQ页
这虽然只是个小脚本,但也恰好证实了开源的力量,众人拾柴火焰高嘛~
希望以后脚本越来越强大,linux的歌词也能很精彩,而且可以无处不在~哈哈