Monthly Archives: June 2010

Mac OS新安装系统后最需要替换的程序

Mac内置的程序都很棒,比如Finder和浏览。浏览能够很方便的打开pdf和图片,但是有个缺点:在浏览图片的时候只能打开单张图片,你想看别的图片的话,对不起请关闭窗口然后双击下一个图片,不能像windows中使用左右键盘浏览前后的图片。不知道为什么这个难用的功能一直不更改,所以替换一款图片浏览程序很有必要:

Lyn 小巧快速,支持主流图像格式,管理查看双模式,可全屏/幻灯片播放。

乔不死有时候真的很操蛋。

PS:Lyn需要注册,已经删除了。后来发现在Mac OS中,单击选择图片后按空格就能预览图片,在这种情况下可以使用左右键看旁边的图。思维还是被windows僵化了;或者可以选择“全选”整个文件夹的图片,然后单击一个图片查看,这样可以使用上下键来快速切换图片。

使用脚本自动备份数据

昨天晚上升级WordPress到3.0版本,原来升级的时候从来没有问题,但是这次升级了一半出错了,然后blog也就挂了。

经过修复blog可以用了,但是也让我意识到了备份数据的重要性,准备用脚本做个自动定期备份数据的工具。mysqldump是个不错的mysql备份工具

mysqldump -u root -p password databases > database.sql

就能把数据库备份为sql文件。手工操作没有问题,但是输入上述命令后需要再输入一下root密码才行,如果把上面的命令用在脚本中就没有办法了,mysql提供了一种解决方法,在~目录中建立.my.cnf文件,内容如下

[mysqldump]
user = youruser
password = yourpassword

这样的话只用在脚本中使用:

mysqldump databas > databas.sql

就行了.
下面就是备份的脚本:

#!/bin/bash
/usr/local/mysql/bin/mysqldump database1 >/tmp/$(date +%Y%m%d)-database1.sql
#database1改为你的数据库名

然后,最好能让脚本备份成功后,压缩通过邮件附件传到你的邮箱中.

apache RewriteEngine的一些学习

Rewrite是Apache中很强的的一个功能,首先要在httpd.conf中启用这么模块:

LoadModule rewrite_module modules/mod_rewrite.so

然后在目录配置中也要开启AllowOverride:

Options Indexes FollowSymLinks
AllowOverride All

否则放在目录中的.htaccess文件就没用。

比较复杂的就是htaccess文件的编写规则,下面是一个我在Codeignter项目中使用的.htaccess文件内容。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
//-f参数检查REQUEST_FILENAME是否为文件名,如果是的话就执行下面的直接跳转
RewriteRule ^(.*) $1 [L]
RewriteCond %{REQUEST_FILENAME} !-d
//!-d如果不是目录名
RewriteRule ^(.*)$ index.php?$1 [L]

因为codeignter是一个php框架,每个页面都要用index.php来做”路由”,所以如果不用RewriteEngine的话,每个url都要加上index.php/XXXX/XXX ,非常丑陋。

Apache  mod_rewrite 参数

RewriteRule可以有很多条RewriteCond来定义。

Apache Module mod_rewrite

加入Python群的小波折

最近迷上了Python,找了个QQ群准备申请加入,但是给我出了个难题:

[1,2]为key,['a','b']为value,用一行代码组成{1:'a',2:'b'}。

后来使用list-comprehension

dict([ ([1,2][n],['a','b'][n]) for n in range(2)])

dict()函数:

The dict() constructor builds dictionaries directly from lists of key-value pairs stored as tuples. When the pairs form a pattern, list comprehensions can compactly specify the key-value list.

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'jack': 4098, 'guido': 4127}
>>> dict([(x, x**2) for x in (2, 4, 6)])     # use a list comprehension
{2: 4, 4: 16, 6: 36}

list-comprehension:

List comprehensions provide a concise way to create lists without resorting to use of map(), filter() and/or lambda. The resulting list definition tends often to be clearer than lists built using those constructs. Each list comprehension consists of an expression followed by a for clause, then zero or more for or if clauses. The result will be a list resulting from evaluating the expression in the context of the for and if clauses which follow it. If the expression would evaluate to a tuple, it must be parenthesized.

>>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']
>>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[6, 12, 18]
>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
[]
>>> [[x,x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]
>>> [x, x**2 for x in vec]  # error - parens required for tuples
  File "<stdin>", line 1, in ?
    [x, x**2 for x in vec]
               ^
SyntaxError: invalid syntax
>>> [(x, x**2) for x in vec]
[(2, 4), (4, 16), (6, 36)]
>>> vec1 = [2, 4, 6]
>>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2]
[8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2]
[6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[8, 12, -54]

参考:
http://docs.python.org/tutorial/datastructures.html
http://wiki.woodpecker.org.cn/moin/PyAbsolutelyZipManual
http://www.cnblogs.com/yanxy/archive/2010/02/23/Cubes.html
http://blog.csdn.net/naive1010/archive/2004/11/23/192378.aspx
http://www.javaeye.com/topic/106747