2007年3月30日 星期五

 

Python数组排序和倒序

顺序:
>>> a = [5, 2, 3, 1, 4]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5]

倒序1:
>>> a = [5, 2, 3, 1, 4]
>>> a.sort(cmp=lambda x,y: x-y)
>>> a
[5, 4, 3, 2, 1]
倒序2
>>> a = [5, 2, 3, 1, 4]
>>> a.sort(reverse=True)
>>> a
[5, 4, 3, 2, 1]

倒序3
>>> a = [5, 2, 3, 1, 4]
>>> a.sort()
>>> a.reverse()
>>> a
[5, 4, 3, 2, 1]

标签: ,


2007年3月29日 星期四

 

Ubuntu下使用Python开发webservices

Python开发web services非常简单容易,在Ubuntu下开发更是得心应手。

安装Python和ZSI
sudo apt-get install python2.4 python-zsi

MyServer.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
from ZSI import dispatch

def getText():
return 'http://www.urlshow.com'
def getTime():
return time.localtime()
print "启动服务..."
dispatch.AsServer(port=3333)

MyClient.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from ZSI.client import Binding
b = Binding(host='localhost', port=3333)

print '%i年,%i月,%i日,%i点,%i分,%i秒'%b.getTime()[:6]
print b.getText()

运行结果
2007年,3月,29日,13点,39分,7秒
http://www.urlshow.com

标签: ,


2007年3月26日 星期一

 

清除项目里的svn(或cvs)的小技巧

在linxu下用robbin的法子:


find . -type d -iname ".svn" -exec rm -rf {} \;

在windows下用以下法子:


1、在项目平级的目录,执行dos命令:
xcopy project_dir project_dir_1 /s /i



2、或者在项目根目录执行以下dos命令
for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"

其实我介绍的第二种方法可以用来干很多事的,比如把代码中的.svn替换为任意其他文件名并在硬盘根目录下执行,就可以从硬盘上删除所有的这个文件啦。

标签:


2007年3月18日 星期日

 

[Python 学习]2.5版中字符串函数的变化

新版本发布了。今天在 Python.list 邮件列表中看到有人开始讨论字符串中的一些新功能。


在2.5版中新增加了一个叫partition的函数,它可以做什么呢?举一个小例子:



>>> 'http://www.donews.net/limodou'.partition('://')
('http', '://', 'www.donews.net/limodou')
>>> 'file:/a.html'.partition('://')
('file:/a.html', '', '')



从第一个例子可以看出,它用来根据指定的分隔符将字符串进行分割,如果字符串包含指定的分隔符,则返回一个3元的tuple,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。第二个例子说明,如果找不到指定的分隔符,则返回仍然是一个3元的tuple,第一个为整个字符串,第二和第三个为空串。


那么有人要问,它与split(sep, 1)有什么区别呢?首先split返回的可能不是固定长度的返回值,它返回的是一个list,如果找到,则返回一个2元list,如果没找到,则返回一个1元的list,如:



>>> 'a.b.c'.split(',', 1)
['a.b.c']
>>> 'a.b.c'.split('.', 1)
['a', 'b.c']



同时在找到的情况下,它并不返回分隔符。


在某些情况下partition(sep)和rpartition(sep)(从右向左匹配)与split(sep, 1)和rsplit(sep, 1)的功能是类似的。不过partition其实是为了替换find,index而产生的,并不是为了替换split而产生的。在许多情况下,我们需要先通过find来找到一个位置,再进行分割。而使用partition就方便得多。如:



>>> a = 'http://www.donews.net'
>>> pos = a.find('://')
>>> if pos > -1:
...     print a[:pos], a[pos+1:]
http www.donews.net



而使用partition:



>>> a = 'http://www.donews.net'
>>> left, sep, right = a.partition('://')
>>> print left, right
http www.donews.net



是不是简单一些呢。


同时在2.5版中,startswith和endswith有变化,它的第一个参数可以是一个tuple了。这样用在判断几种情况的时候非常方便。比如要判断文件名后缀,原来只支持一个值时,可能要先拆分,再判断,用不上endswith,如:



>>> a = 'a.gif'
>>> import os.path
>>> ext = os.path.splitext(a)[1]
>>> if ext in ['.gif', '.png', '.bmp']:
...     print 'found'
...
found



而现在可以:



>>> a = 'a.gif'
>>> if a.endswith(('.gif', 'png', '.bmp')):
...     print 'found'
...
found



是不是简单多了。注意,上面的tuple我换成list就是不行,看来是强制的。


许多有趣的东西等着你我来发现。

标签:


 

[Python 新闻]2.5版正式发布了

新时刻到来了,许多新特性的增加,新模块的加入使得 Python 更为人所注目。这一新版本增加的功能的确很多,以至于Anthony Baxter在邮件列表中宣布新版本发布时都说:



It's been nearly 20 months since the last major release
of Python (2.4), and 5 months since the first alpha
release of this cycle, so I'm absolutely thrilled to be
able to say:

On behalf of the Python development team
and the Python community, I'm happy to
announce the FINAL release of Python 2.5.

This is a *production* release of Python 2.5. Yes, that's
right, it's finally here.



在新版本发布时还有些战战兢兢(thrilled)的感觉。真是经过了很多的努力啊。


关于新特性早就说过了。有兴趣的赶快下载吧!

标签:


2007年3月4日 星期日

 

[转]玩转 MPlayer

LinuxTOY by Toy on Feb 12, 2007


MPlayer 是我在 Linux 系统中用到的相当好的媒体播放程序,它因支持播放广泛的音/视频文件格式而著称。本文所要探讨的,除却一般的使用方法之外,更包括一些鲜为人知的提示和诀窍。相信在阅读此文后,你的多媒体播放体验将会增色不少。

播放文件

使用 MPlayer 播放媒体文件最简单的方式是:
mplayer

MPlayer 会自动检测文件的类型并加以播放,如果是音频文件,则会在命令行中显示该播放文件的状态信息;而假如是视频文件的话,则会打开一个新的播放窗口。

倒退与快进

在播放文件的时候,你可以通过以下三组快捷键来对播放进程进行倒退与快进操作:

播放 DVD

虽然 MPlayer 不支持 DVD 菜单,但是却能够播放 DVD。你可以这样播放 DVD:
mplayer dvd://

你需要使用实际的数字来替换 ,如 1、2、3 等。

使用字幕

当播放电影文件时,你可以指定字幕文件:
mplayer -sub

在播放 DVD 电影时,你也可以通过指定语言代码来使用字幕:
mplayer dvd:// -slang nl,en

这样,MPlayer 就会优先使用荷兰语字幕,如果该语言不可用,则再使用英语字幕。

有用的快捷键

以下是 MPlayer 中一些有用的快捷键:

生成索引

有时候,有些视频文件(主要是 AVI 文件)包含损坏的索引,或者根本就没有索引。这种情况通常是由下载文件不正确或未完成造成的。幸运的是,MPlayer 能够生成正常播放文件所需的索引。通过使用 -idx 选项,你可以告诉 MPlayer 来生成索引:
mplayer -idx

有时候文件虽然包含索引,但却已损坏。那样的情况,你可能需要 MPlayer 强制生成索引:
mplayer -forceidx

根据视频文件的大小,生成索引需花费一定的时间。但在此后,文件应该能够正常播放。

纠正错误的音频/视频同步

有些视频文件(主要是 flv 文件)由于编码的问题,会给 MPlayer 带来音频/视频同步的麻烦。这有两种可能情况:

对于第一种情况,你应当让 MPlayer 努力修复同步问题:
mplayer -autosync 30 -mc 2.0

而对于第二种情况,你不应当允许 MPlayer 去修复同步问题:
mplayer -autosync 0 -mc 0

将上述命令中的 autosync 设置为正值就会让 MPlayer 逐渐调整音频/视频的同步。值越高,MPlayer 越快地修复它。mc 选项指定 MPlayer 纠正每帧要多少秒。值越高,MPlayer 越认为接近修复音频/视频同步。设置为 0 则阻止 MPlayer 修复。

在慢系统上使用 MPlayer

MPlayer 允许在旧的或慢的系统上使用低 CPU 功率来播放视频文件。你可以使用 -framedrop 选项:
mplayer -framedrop

当播放 MP3 或 OGG Vorbis 文件时,你可能感受到一定的缓冲,这将影响你的音乐体验。那样的话,你可以尝试使用 libmad(MP3)或 Tremor(OGG Vorbis)音频解码器。你可以这样来检测它们:

对于 MP3:
mplayer -ac help | grep mad

如果上面的命令返回的结果像这样:
mad libmad working libMAD MPEG layer 1-2-3 [libmad]

那么你可以使用 libmad 播放 MP3:
mplayer -ac mad

在 OGG 的情况中,你可以使用同样的技巧来检测 tremor 音频解码器是否可用:
mplayer -ac help | grep tremor

播放流媒体

如果 MPlayer 无法自动找到播放列表或直接的流媒体文件,你可以尝试使用 -playlist 选项:
mplayer -playlist

同时你也可以设置较大的缓存:
mplayer -cache 8192 -playlist

指定缓存大小的单位是 KB,上面的命令将允许 MPlayer 使用 8 MB 缓存。你可以使用 -cache-min 选项来改变 MPlayer 占用缓存的百分比:
mplayer -cache 8192 -cache-min 50 -playlist

循环播放

如果你想让媒体文件循环播放,可以使用 -loop 选项:
mplayer -loop 3

上面的命令将播放 3 次,然后才退出。
mplayer -loop 0

上面的命令将永远重复播放

改变播放速度

你可以使用 -speed 选项来改变 MPlayer 播放媒体文件的速度。值为 1.0,意味着正常速度;0.5 意味着慢两倍;2.0 意味着快两倍。像这样指定选项:
mplayer -speed 2.0

改变采样率

使用 -srate 选项你可以改变 MPlayer 输出的采样率:
mplayer -srate 48000

将音频输出为 wav 文件

你可以将视频文件中的音频部分输出为 wav 文件:
mplayer -ao pcm

这将输出名为 audiodump.wav 的音频文件。你也可以为输出的 wav 文件指定名称:
mplayer -ao pcm:file=.wav

使用 ASCII 方式观看电影

虽然无用,但却很好玩。有两个库文件支持该特性:aa 和 caca。使用 libaa,你只能在黑白 ASCII 中观看电影。而 libcaca 支持色彩。然而,libaa 支持更广泛。你可以像这样使用 libaa 观看电影:
mplayer -vo aa

如果你想使用 libcaca:
mplayer -vo caca

将电影输出为系列图片

MPlayer 也能将电影输出为一系列的图片:
mplayer -vo jpeg

注意:上面的命令将产生数量巨大的 jpeg 文件。输出的 jpeg 文件名看起来像这样:00000001.jpg、00000002.jpg、00000003.jpg 等等。

你也可以输出其他的格式。只需将命令中的 jpeg 替换成 ppm、png、tga 等。

指定纵横比

当你在宽屏中播放电影时,可能想要使用 16:9 的纵横比:
mplayer -aspect 16:9

在非宽屏中,你可以使用 4:3 的纵横比。

将选项放置到 MPlayer 的配置文件中

对于一般用户来说,该配置文件位于 ~/.mplayer/config;全局的配置文件在 /etc/mplayer/config。不同的值使用行分隔,如:

# MPlayer config file


srate=48000
ao="pcm:file=dumpedaudio.wav"

标签:


 

UBUNTU 7.04即将发布

本人半年前开始使用Ubuntu,并且将单位、家中、笔记本全部换成了Ubuntu,彻底Linux化。
如今Ubuntu7即将在4月份发布,而且将把3D桌面作为默认设置,这很令人兴奋,Linux下的3D效果让很多人感受到了震撼,我也发两幅Beryl 3D效果给大家。



标签:


2007年3月3日 星期六

 

[转]linux命令模拟在酒吧勾搭美妹的过程

by Wing, 出处:bbs.mit.edu
这是一个用unix命令来模拟一个在酒吧勾搭美妹的过程
自己慢慢体味吧,顺便考查一下你linux命令学的怎么样。

find
talk
whoami
whatis
uname
quota
set
mv
whereis
unzip
strip
touch
finger
top
mount
compress
!!
more
yes
jobs
umount
sleepy

标签: ,


 

[转]暴强的面试

http://www.cnblogs.com/dahuzizyd/archive/2007/02/23/654490.html

A:请写一个文件拷贝函数。
Q:你说的“拷贝”是什么意思?
A:嗯。。。。就是把一个文件的内容拷贝到新的文件
Q:考不考虑日期/时间?
A:不用,那些不用被拷贝。
Q:目标文件可以和源文件同名么?
A:嗯。。。不行
Q:那我不用担心假名攻击(name spoofing)?比如说土耳其语的I。(注意哈,土耳其语的I有四种写法,和英语的I相似而不同)。
A:不用担心。
Q:文件属性呢?
A:新文件和老文件的属性一样
Q:那我应该修改老文件的属性么?如果这个拷贝操作时备份或者存档操作的一部分,那可能不应该保留’Archive’这个属性。
A:不用,保持原样就行了。
Q:那万一源文件的’Archive’属性被关掉了呢?如果新文件的这个属性也被我关掉,可能会搞坏用户的备份软件。
A:就让它们一样。我不在乎用户的备份软件。
Q:这样为用户设计软件好像不好吧?
A:。。。
Q:文件压缩怎么办?这是个文件属性,但拷贝目的地不一定支持压缩。
A:不用管文件压缩。
Q:哪怕源文件被压缩了,而拷贝目的地不支持压缩?
A:对头!
Q:那加密呢?如果源文件被加了密,而拷贝目的地不支持加密?
A:如果目的地不支持加密就不要加密。
Q:哎呀不好意思,我不是想岔开话题。不过。。。这样不是很大的安全隐患么?特别当这个文件拷贝函数支持任意多个参数的时候(直接或者间接)。
A:靠!他妈的把文件拷贝过去就行了!
Q:创建文件的用户呢?
A:不用管。
Q:那文件的所有人呢?
A:不用管。
Q:那文件权限呢?有没有啥么方法来处理继承的权限和赋予的权限?
A:不要管权限了。
Q:那这个函数会在什么系统上运行?
A:Windows XP
Q:Home, Pro, Media Center,或者多于一个版本?
A:Pro
Q:哪一个Service Pack?
A:SP2
Q:也就是说我们不用支持其它的Service Pack?
A:对阿
Q:咋个提供源文件名?
A:用参数传进去。
Q:那则个参数十一个以null结尾的字符串,一个计数的字符串(学Pascal的都知道哈),还是一个对象?
A:以Null计数的字符串。
Q:Null指针可能被传进去么?
A:不可能。
Q:那文件名的编码呢?
A:Unicode。
Q:不好意思,这个这个。。。Unicode不能算编码。如果我们用Unicode数据,我们必须知道具体的编码,比如UTF-8, UCS-2, UTF-16,等等。
A:你够狠!UTF-8。
Q:好嘛。我只是想说把UTF-8转换成UTF-16,好让Windows API调用工作,还是有点痛苦的。
A:射!UTF-8!
Q:Big-endian还是small-endian?
A:啊―――随便你丫的!
Q:那我们接受相对路径还是绝对路径?
A:就绝对路径。
Q:那些路径有没有什么需要过滤的特征?
A:没有。用户自己搞定。
Q:怎么生成目标文件名?或者用户提供?
A:。。。
Q:要不要(或者允不允许)我提供异步拷贝操作?
A:不。
Q:我该怎么报错?Exception?Error code?
A:随便。
Q:我是该在被调用的函数内部处理错误呢,还是把错误传给调用者?
A:嗯。。。传出去。
Q:如果目标文件已经存在怎么办?
A:不会的。
Q:也就是调用人确保这点?
A:对。
Q:也就是说如果目标文件的确存在,我可以立刻终结程序运行?但这个明显违背了前置条件,而且鬼才知道会出什么问题。
A:射。随你丫的。
Q:那轮换数据流呢?
A:随便你!!
Q:老大,我真地不好意思,如果你觉得被我挑衅了。不要生气哈。我只是想在动手前得到一个清晰完整的规格。很明显如果我要写一个文件拷贝函数, 而不是用各种库里现成的文件函数,这个新的函数需要满足某套特殊需求,所以我需要知道那些问题的确切答案。如果你无所谓,我可以在一分钟内整出一个函数 来,但肯定有很多问题都没有解决。
A:啊!!!!!!!!!!!!!!!!!!!!!!!!

标签: ,


2007年3月2日 星期五

 

Google(谷歌) 机器翻译新添互动反馈机制

Google现在为机器翻译新添互动反馈机制,这个功能很有价值。相信以后机器翻译会越来越准确。
向Google提个建议,如果某个用户为某页面提交了一个更好的翻译,那么以后这个用户再次翻译该页面,页面中出现的应该是用户自己提交过的翻译。即便不直接出现用户提交过的翻译,也应提示用户曾经提交过更好的翻译。

标签:


2007年3月1日 星期四

 

用Toogle创建字符图片

Toogle是一个Google搞笑网站,在这个网站上输入关键字,网站会使用输入的关键字组合成一幅图画。图画是Google上用该关键字搜索到的第一幅图片。

在Google上搜索xuender就会找到左边这幅我的照片。在Toogle上搜索的结果就是下面这个样子。

很有趣吧,希望你也能找到自己的照片。

标签:


订阅 帖子 [Atom]